CPS v1.1
CPS v1.1
Date 2016-05-03
Revision CPS_v1.1
Abstract:
This service exposes power- and force-related data and optionally speed- and cadence-related
data from a Cycling Power sensor intended for sports and fitness applications.
Revision History
Revision
Date Comments
Number
v1.0 2013-04-30 Adopted by the Bluetooth SIG Board of Directors
v1.1 2016-05-03 Adopted by the Bluetooth SIG BoD
Contributors
Name Member
Robert Hughes Intel Corporation
Jari Miettinen Polar
Niclas Granqvist Polar
Guillaume Schatz Polar
Ed Watson Saris
Donny Warbritton Stages Cycling
CPS_v1.1
various governments worldwide. Such laws and regulatory controls may govern, among other things, the combination, operation, use,
implementation and distribution of Bluetooth Products. Examples of such laws and regulatory controls include, but are not limited to,
airline regulatory controls, telecommunications regulations, technology transfer controls and health and safety regulations. Each
Member is solely responsible for the compliance by their Bluetooth Products with any such laws and regulations and for obtaining any
and all required authorizations, permits, or licenses for their Bluetooth Products related to such regulations within the applicable
jurisdictions. Each Member acknowledges that nothing in the Specification provides any information or assistance in connection with
securing such compliance, authorizations or licenses. NOTHING IN THE SPECIFICATION CREATES ANY WARRANTIES, EITHER
EXPRESS OR IMPLIED, REGARDING SUCH LAWS OR REGULATIONS.
ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY INTELLECTUAL PROPERTY RIGHTS OR FOR
NONCOMPLIANCE WITH LAWS, RELATING TO USE OF THE SPECIFICATION IS EXPRESSLY DISCLAIMED. To the extent not
prohibited by law, in no event will Bluetooth SIG or its Members or their affiliates be liable for any damages, including without limitation,
lost revenue, profits, data or programs, or business interruption, or for special, indirect, consequential, incidental or punitive damages,
however caused and regardless of the theory of liability, arising out of or related to any furnishing, practicing, modifying, use or the
performance or implementation of the contents of this Specification, even if Bluetooth SIG or its Members or their affiliates have been
advised of the possibility of such damages. BY USE OF THE SPECIFICATION, EACH MEMBER EXPRESSLY WAIVES ANY CLAIM
AGAINST BLUETOOTH SIG AND ITS MEMBERS OR THEIR AFFILATES RELATED TO USE OF THE SPECIFICATION.
If this Specification is an intermediate draft, it is for comment only. No products should be designed based on it except solely to verify
the prototyping specification at SIG sponsored IOP events and it does not represent any commitment to release or implement any
portion of the intermediate draft, which may be withdrawn, modified, or replaced at any time in the adopted Specification.
Bluetooth SIG reserves the right to adopt any changes or alterations to the Specification it deems necessary or appropriate.
Copyright © 2012–2016. The Bluetooth word mark and logos are owned by Bluetooth SIG, Inc. All copyrights in the Bluetooth
Specifications themselves are owned by Ericsson AB, Lenovo (Singapore) Pte. Ltd., Intel Corporation, Microsoft
Corporation, Motorola Mobility, LLC, Nokia Corporation and Toshiba Corporation. Other third-party brands and names are
the property of their respective owners.
Document Terminology
The Bluetooth SIG has adopted portions of the IEEE Standards Style Manual which dictate use
of the words “shall’’, “should”, “may”, and “can” in the development of documentation, as follows:
The word shall is used to indicate mandatory requirements strictly to be followed in order to
conform to the standard and from which no deviation is permitted (shall equals is required to).
The use of the word must is deprecated and shall not be used when stating mandatory
requirements; must is used only to describe unavoidable situations.
The use of the word will is deprecated and shall not be used when stating mandatory
requirements; will is only used in statements of fact.
The word should is used to indicate that among several possibilities one is recommended as
particularly suitable, without mentioning or excluding others; or that a certain course of action is
preferred but not necessarily required; or that (in the negative form) a certain course of action is
deprecated but not prohibited (should equals is recommended that).
The word may is used to indicate a course of action permissible within the limits of the standard
(may equals is permitted).
CPS_v1.1
The word can is used for statements of possibility and capability, whether material, physical, or
causal (can equals is able to).
The term Reserved for Future Use (RFU) is used to indicate Bluetooth SIG assigned values that
are reserved by the Bluetooth SIG and are not otherwise available for use by implementations.
Contents
1 Introduction .......................................................................................................................................... 7
1.1 Conformance .................................................................................................................................. 7
1.2 Service Dependency....................................................................................................................... 7
1.3 Bluetooth Core Specification Release Compatibility ...................................................................... 7
1.4 GATT Sub-Procedure Requirements ............................................................................................. 7
1.5 Transport Dependencies ................................................................................................................ 8
1.6 Error Codes .................................................................................................................................... 8
1.7 Byte Transmission Order ................................................................................................................ 8
2 Service Declaration.............................................................................................................................. 9
3 Service Characteristics ..................................................................................................................... 10
3.1 Cycling Power Feature ................................................................................................................. 10
3.1.1 Characteristic Behavior ........................................................................................................... 10
3.2 Cycling Power Measurement ........................................................................................................ 11
3.2.1 Characteristic Behavior ........................................................................................................... 11
3.2.1.1 Flags Field ....................................................................................................................... 12
3.2.1.2 Instantaneous Power Field .............................................................................................. 13
CPS_v1.1
1 Introduction
The Cycling Power (CP) Service exposes power- and force-related data and optionally speed-
and cadence-related data from a Cycling Power sensor (Server) intended for sports and fitness
applications.
1.1 Conformance
If a device claims conformance to this service, all capabilities indicated as mandatory for this
service shall be supported in the specified manner (process-mandatory). This also applies for all
optional and conditional capabilities for which support is indicated. All mandatory capabilities,
and optional and conditional capabilities for which support is indicated, are subject to verification
as part of the Bluetooth qualification program.
• Bluetooth Core Specification 4.0 with CSA2, CSA3 and CSA4 [1]
• A Bluetooth Core Specification later than 4.0.
Table 1.1 summarizes additional GATT sub-procedure requirements beyond those required by
all GATT Servers.
Where the term BR/EDR is used throughout this document, this also includes the use of AMP.
(i.e., little endian). The least significant octet is identified in the characteristic definitions in [2].
2 Service Declaration
The Cycling Power Service should be instantiated as a «Primary Service».
The service UUID shall be set to «Cycling Power Service» defined in [2].
CPS_v1.1
3 Service Characteristics
The following characteristics are exposed in the Cycling Power Service. Only one instance of
each characteristic is permitted within this service. The characteristic formats and UUIDs are
defined in [2].
Reserved for Future Use (RFU) bits in the Cycling Power Feature characteristic value shall be
set to 0.
The bits of the Cycling Power Feature characteristic may either be static for the lifetime of the
device (i.e., static permanently or until Service Changed is indicated) or guaranteed to be static
only during a connection. Although all defined bits (i.e., bits 0 to 21) in this version of this
specification are required to be static during the lifetime of a device, it is possible that some
future bits will be defined as being static only during a connection.
Other than the Distributed System Support bits, when the Server supports a feature, the
associated bit of the Cycling Power Feature characteristic shall be set to 1 (Feature supported),
otherwise, the associated bit shall be set to 0 (Feature not supported). The feature bits are
defined in [2].
If the Server is not designed for use in a distributed system (i.e., the Server measures the total
amount of power generated by the user), it shall set the Distributed System Support bits to 01
(Not for use in a distributed system).
If the Server is designed such that it can be used as part of a distributed system (i.e., the
Instantaneous Power value of the Cycling Power Measurement characteristic might represent
only a portion of the total amount of power generated by the user), it shall set the Distributed
System Support bits to 10 (Can be used in a distributed system).
related data, and/or cadence-related data. Included in the characteristic value are a Flags field
(for showing the presence of optional fields and measurement status), an Instantaneous Power
field and depending upon the contents of the Flags field, may include one or more optional fields
defined in [2].
Power Measurement characteristic as described in Section 3.4.2.13. When a Client turns off
some fields of the Cycling Power Measurement characteristic, this may affect the broadcast of
the Cycling Power Measurement characteristic as described in Section 3.2.1.13 and is left to the
implementation.
Refer to Section 3.7 for additional recommendations for distributed power sensor systems (e.g.,
one Server on each pedal measuring the left and right power contribution).
For LE, all the fields of this characteristic cannot be present simultaneously if using a default
MTU size. For notification, if the characteristic size exceeds the current MTU size, the remaining
optional fields shall be sent in the subsequent notification. Refer to Section 3.2.1.13 for
additional requirements on the Cycling Power Measurement Broadcast feature.
For BR/EDR, this restriction does not exist due to a larger MTU size.
The Cycling Power Measurement characteristic contains time-sensitive data, thus the
requirements for time-sensitive data and data storage defined in Section 3.6 apply.
Reserved for Future Use (RFU) bits in the Flags fields shall be set to 0.
CPS_v1.1
The bits of the Flags field, their function, and relationship to bits in the Cycling Power Feature
characteristic are shown in Table 3.2.
Table 3.2: Bit Definitions for the Cycling Power Measurement Characteristic
Note 1: If the corresponding feature bit of the Cycling Power Feature characteristic is set to 0,
then this bit has no meaning and shall be set to 0.
Each of the Flags bits in the table above may change during a connection if the corresponding
support bit in the Cycling Power Feature characteristic is set to 1 indicating that the feature is
supported. If the corresponding support bit is however set to 0, then the corresponding Flags bit
shall also be set to 0 since the feature is not supported.
The Instantaneous Power field represents the value of the power measured by the Server. It
represents either the total power the user is producing or a part of the total power depending on
the type of sensor (e.g., single sensor or distributed power sensor system). Refer to Section 3.7
for additional requirements for distributed power sensor systems (e.g., one Server on each
pedal measuring the left and right power contribution).
The Pedal Power Balance field represents the ratio between the total amount of power
measured by the sensor and a reference (either unknown or left). For example, if the sensor
provides the power balance referenced to the left pedal, the power balance is calculated as
[LeftPower/(LeftPower + RightPower)]*100 in units of percent.
When supported, the Pedal Power Balance Reference bit of the Flags field (bit 1) describes
whether the value is referenced from ’left’ or the reference is ‘unknown’.
The Accumulated Torque field represents the cumulative value of the torque measured by the
Sensor. When a connection is established, this value starts at 0 Newton meter and is may roll
CPS_v1.1
over.
When supported, the Accumulated Torque Source bit of the Flags field (bit 3) describes whether
the value is ’wheel based’ or ‘crank based’.
The Cumulative Wheel Revolutions value, which represents the number of times a wheel
rotates, is used in combination with the Last Wheel Event Time and the wheel circumference
value available on the collector device to enable it to calculate 1) the speed of the bicycle, 2) the
distance traveled and 3) and the power if combined with the Crank Revolution Data. In addition,
if there is link loss, the Cumulative Wheel Revolutions value can be used to calculate the
average speed of the bicycle during the link loss. This value is expected to be set to 0 (or
another desired value in case of e.g., a sensor upgrade) at initial installation on a bicycle as
described in Section 3.4.2.1. The Cumulative Wheel Revolutions value may decrement for some
implementations (e.g., If the bicycle is rolled in reverse), but shall not decrease below 0.
Bluetooth SIG Proprietary Page 14 of 37
Cycling Power Service
Bluetooth Service Specification
The ‘wheel event time’ is a free-running-count of 1/2048 second units and it represents the time
when the wheel revolution was detected by the wheel rotation sensor. Since several wheel
events can occur between transmissions, only the Last Wheel Event Time value is transmitted.
See Section 3.4.2.1 for requirements related to setting the value of the Cumulative Wheel
Revolutions field.
The Last Wheel Event Time value rolls over every 32 seconds.
The Cumulative Crank Revolutions value, which represents the number of times a crank rotates,
is used in combination with the Last Crank Event Time to enable the Client to
Average cadence is not accurate unless 0 cadence events (i.e., coasting) are subtracted. In
addition, if there is link loss, the Cumulative Crank Revolutions value can be used to calculate
the average cadence during the link loss. This value is intended to roll over and is not
configurable.
The ‘crank event time’ is a free-running-count of 1/1024 second units and it represents the time
when the crank revolution was detected by the crank rotation sensor. Since several crank
events can occur between transmissions, only the Last Crank Event Time value is transmitted.
The Last Crank Event Time value rolls over every 64 seconds.
To enhance the user experience, the Server should ignore the extra crank revolutions that may
be detected when the user is not pedaling (e.g., coasting down the hill) but the sensor is facing
the crank revolution detection system (e.g., a magnet installed on the crankset) and may cause
unwanted crank revolution detections.
excluded from this characteristic (see Table 3.2). When present, these fields shall always be
present as a pair.
The Maximum Force Magnitude field represents the maximum force value measured in a single
crank revolution; respectively the Minimum Force Magnitude field represents the minimum force
value measured in a single crank revolution.
Since a Server supports only one measurement context (e.g., Force-based or Torque-based),
the support of these fields excludes the support of the Maximum Torque Magnitude and
Minimum Torque Magnitude fields.
The Maximum Torque Magnitude field represents the maximum torque value measured in a
single crank revolution; respectively the Minimum Torque Magnitude field represents the
CPS_v1.1
Since a Server supports only one measurement context (e.g., Force-based or Torque-based),
the support of these fields excludes the support of the Maximum Force Magnitude and Minimum
Force Magnitude fields.
The Maximum Angle field represents the angle of the crank when the maximum value is
measured in a single crank revolution. Similarly the Minimum Angle field represents the angle of
the crank when the minimum value is measured in the same crank revolution. The maximum
and minimum values measured in a single crank revolution refer to either Maximum Force
Magnitude and Minimum Force Magnitude field pairs or Maximum Torque Magnitude and
Minimum Torque Magnitude field pairs.
The Top Dead Spot Angle field represents the crank angle when the value of the Instantaneous
Power value becomes positive.
The Bottom Dead Spot Angle field represents the crank angle when the value of the
Instantaneous Power value becomes negative.
The Accumulated Energy field represents the accumulated value of the energy measured by the
sensor. When a connection is established, this value starts at 0 kilo Joules and is not expected
to roll over.
When the Cycling Power Measurement Broadcast is enabled by the Client (e.g., via the Server
Characteristic Configuration descriptor), the Server shall send the Cycling Power Measurement
characteristic value in a non-connectable undirected advertising event. The Advertising Data
shall not exceed 31 octets and shall include the AD Structure Data described in Table 3.3:
AD Type AD Data
Advertising Interval advInterval value
Cycling Power Service UUID followed by the Cycling Power
Service Data
Measurement characteristic value
Table 3.3: Broadcast AD Structures Requirements
When the Cycling Power Measurement Broadcast is disabled by the Client (e.g., via the Server
Characteristic Configuration descriptor), the Server shall stop advertising. The Server shall also
stop advertising when disconnected from the Client.
The Server may elect to send different fields of the Cycling Power Measurement characteristic
when broadcasting (non-connectable undirected advertisement) as when notifying. Typically,
the fields included in the broadcast are the mandatory fields (i.e., the Flags field and the
Instantaneous Power field) and the Crank Revolution Data field (i.e., the Cumulative Crank
Revolutions and the Last Crank Event Time field pair).
If the Server supports the Multiple Sensor Locations feature, the value of the Sensor Location
characteristic may be updated while in a connection as described in Section 3.4.2.2. Otherwise,
if the Sensor Location characteristic is present and the Multiple Sensor Locations feature is not
supported, the value of the Sensor Location shall be static for the lifetime of the Server or until
Service Changed characteristic is indicated.
If the Server supports the Multiple Sensor Locations feature, the Client should not assume that
the value of the Sensor Location characteristic of the Server is set to the same value as at the
end of a previous connection. This is primarily because the value may have been altered by a
different Client after the previous connection (e.g., the user has moved his sensor to another
location and configured the new Sensor Location with another Client).
Refer to Section 3.7 for additional recommendations for distributed power sensor systems (e.g.,
one Server on each pedal measuring the left and right power contribution).
The Sensor Location characteristic returns the sensor location value when read.
Support for this characteristic is mandatory if the Server supports Wheel Revolution Data or
Multiple Sensor Locations features, or if settings are configurable or if the Server allows a Client
to do offset compensation or if the Server allows a Client to request some parameters;
otherwise, it is excluded for this version of the service in accordance with Table 3.1: .
Refer to Section 3.7 for additional recommendations for distributed power sensor systems (e.g.,
one Server on each pedal measuring the left and right power contribution).
A Client shall use the Write Characteristic Value procedure to initiate a procedure defined in
Table 3.4
Set Chain Length C.5 Chain Length Success, Operation Failed, None
Invalid Parameter,
Op Code Not Supported
Request Chain C.6 None Success Chain Length
Length Operation Failed, None
Op Code Not Supported
Set Chain Weight C.7 Chain Weight Success, Operation Failed, None
Invalid Parameter,
Op Code Not Supported
Request Chain C.8 None Success Chain Weight
Weight Operation Failed, None
Op Code Not Supported
Set Span Length C.9 Span Length Success, Operation Failed, None
Invalid Parameter,
Op Code Not Supported
Request Span C.10 None Success Span Length
Length Operation Failed, None
Op Code Not Supported
C.11 None Success Raw Data
C.11: Mandatory if the Offset Compensation feature is supported, otherwise excluded from this
version of this Service.
C.12: Mandatory if the Cycling Power Measurement Characteristic Content Masking feature is
supported, otherwise excluded from this version of this Service.
C.13: Mandatory if the Cycling Power Vector characteristic is supported, otherwise optional.
C.14: Mandatory if the Factory Calibration Date feature is supported, otherwise optional.
C.15: Mandatory if the Enhanced Offset Compensation feature is supported, otherwise
excluded from this version of this Service.
transmitted as a Parameter of the Cycling Power Control Point. The format of the Parameter
Value of this Control Point is UINT32 and represents the cumulative value in number of
revolutions with a resolution of 1 revolution. The response shall be indicated when the
Cumulative Wheel Revolutions value is applied using the Response Code Op Code, the
Request Op Code along with “Success” or other appropriate Response Value.
If the operation results in an error condition, or if this Op Code is not supported by the Server,
see Section 3.4.3 for details on handling this condition.
This procedure shall not be used to set the following values since they are not configurable.
• The Cumulative Crank Revolutions value of the Cycling Power Measurement characteristic
or
• The Cumulative Crank Revolutions value of the Cycling Power Vector characteristic or
• The Accumulated Torque value or the Accumulated Energy of the Cycling Power
Measurement characteristic.
This procedure should be used when the bicycle is not moving to avoid erroneous value of
instantaneous speed, which may also impact other values calculated by the collector device
(i.e., average speed, maximum speed).
The Server should cache the most recent value of the Sensor Location characteristic to avoid
reconfiguration of this characteristic by the Client each time a connection is established.
If the operation results in an error condition, or if this Op Code is not supported by the Server,
see Section 3.4.3 for details on handling this condition.
This procedure should be used when the bicycle is not moving to avoid unexpected behavior.
Control Point and if the Multiple Sensor Locations feature is supported by the Server, the Server
shall send a list of the supported sensor location values (i.e., a byte array containing values of
each supported sensor location). The response shall be indicated using the Response Code Op
Code, the Request Op Code, the appropriate Response Value and, if the procedure succeeds,
the Response Value shall be set to “Success” followed by a list of supported sensor location
values in the Response Parameter. The format of the Response Parameter, in response to this
Control Point, is a UINT8 array and represents the sensor locations the Server supports.
For LE Transport and a default ATT MTU, a maximum of 17 supported sensor locations can be
sent.
If the operation results in an error condition, or if this Op Code is not supported by the Server,
see Section 3.4.3 for details on handling this condition.
The Server should cache the most recent value of the crank length to avoid reconfiguration of
this value by the Client each time a connection is established.
If the operation results in an error condition, or if this Op Code is not supported by the Server,
see Section 3.4.3 for details on handling this condition.
This procedure should be used when the bicycle is not moving to avoid unexpected behavior
(e.g., inconsistent instantaneous power value).
If the operation results in an error condition, or if this Op Code is not supported by the Server,
see Section 3.4.3 for details on handling this condition.
CPS_v1.1
The Server should cache the most recent value of the chain length to avoid reconfiguration of
this value by the Client each time a connection is established.
If the operation results in an error condition, or if this Op Code is not supported by the Server,
see Section 3.4.3 for details on handling this condition.
This procedure should be used when the bicycle is not moving to avoid unexpected behavior
(e.g., inconsistent instantaneous power value).
Code, the Request Op Code, the appropriate Response Value and, if the procedure succeeds,
the Response Value shall be set to “Success” followed by the value of the chain length in the
Response Parameter. The format of the Response Parameter, in response to this Control Point
is UINT16 and represents the chain length in millimeters with a resolution of 1 millimeter.
If the operation results in an error condition, or if this Op Code is not supported by the Server,
see Section 3.4.3 for details on handling this condition.
The Server should cache the most recent value of the chain weight to avoid reconfiguration of
this value by the Client each time a connection is established.
CPS_v1.1
If the operation results in an error condition, or if this Op Code is not supported by the Server,
see Section 3.4.3 for details on handling this condition.
This procedure should be used when the bicycle is not moving to avoid unexpected behavior
(e.g., inconsistent instantaneous power value).
If the operation results in an error condition, or if this Op Code is not supported by the Server,
see Section 3.4.3 for details on handling this condition.
with a resolution of 1 millimeter. The span length value is typically used as a parameter for
internal signal processing. The response shall be indicated when the Span Length is updated in
the Server using the Response Code Op Code, the Request Op Code along with “Success” or
other appropriate Response Value.
The Server should cache the most recent value of the span length to avoid reconfiguration of
this value by the Client each time a connection is established.
If the operation results in an error condition, or if this Op Code is not supported by the Server,
see Section 3.4.3 for details on handling this condition.
This procedure should be used when the bicycle is not moving to avoid unexpected behavior
(e.g., inconsistent instantaneous power value).
is UINT16 and represents the span length in millimeters with a resolution of 1 millimeter.
If the operation results in an error condition, or if this Op Code is not supported by the Server,
see Section 3.4.3 for details on handling this condition.
The format of the Response Parameter Value, in response to this Control Point, is SINT16. This
Parameter Value represents either the raw force in Newton or the raw torque in 1/32 Newton
meter based on the server capabilities (e.g., based on the Sensor Measurement Context of the
Cycling Power Feature characteristic defined in 3.1). If the Server does not support the
measurement of this value, the Server shall use the special value 0xFFFF which means “Not
Available”.
If the operation results in an error condition, or if this Op Code is not supported by the Server,
see Section 3.4.3 for details on handling this condition.
0: Leave as default
1: Turn off
3 Crank Revolution Data
0: Leave as default
1: Turn off
4 Extreme Magnitudes
0: Leave as default
1: Turn off
5 Extreme Angles
0: Leave as default
1: Turn off
6 Top Dead Spot Angle
0: Leave as default
1: Turn off
7 Bottom Dead Spot Angle
0: Leave as default
1: Turn off
8 Accumulated Energy
0: Leave as default
1: Turn off
9-15 Reserved for future use (RFU)
Table 3.5: Mask Cycling Power Measurement Characteristic Content Procedure Parameter Requirements
This Control Point is typically used to save power in the Server. When the Client does not need
a particular optional field of the Cycling Power Measurement characteristic, the Client may turn
off that particular field of the Cycling Power Measurement characteristic. This Control Point
procedure affects the content of the notification of the Cycling Power Measurement
characteristic and may also affect the content of the broadcast of the Cycling Power
Measurement characteristic, but this is up to the Server since some data may not be relevant to
broadcast. The response shall be indicated when the content of the Cycling Power
Measurement characteristic is updated in the Server using the Response Code Op Code, the
Request Op Code along with “Success” or other appropriate Response Value.
The Server shall not cache the most recent value of the fields configuration of the Cycling
Power Measurement characteristic and each time a connection is established it shall use its
default configuration (i.e., none of the fields of the Cycling Power Measurement characteristic
are disabled).
If the operation results in an error condition, or if this Op Code is not supported by the Server,
see Section 3.4.3 for details on handling this condition.
When the Request Sampling Rate Op Code is written to the Cycling Power Control Point and if
the Cycling Power Vector characteristic is supported by the Server, the Server shall send the
current value of the sampling rate. The response shall be indicated using the Response Code
Op Code, the Request Op Code, and the appropriate Response Value and, if the procedure
succeeds, the Response Value shall be set to “Success” followed by the value of the sampling
rate in the Response Parameter. The format of the Response Parameter, in response to this
Control Point, is UINT8 and represents the sampling rate in Hertz with a resolution of 1 Hertz.
If the operation results in an error condition, or if this Op Code is not supported by the Server,
see Section 3.4.3 for details on handling this condition.
If the operation results in an error condition, or if this Op Code is not supported by the Server,
see Section 3.4.3 for details on handling this condition.
If the operation results in an error condition (e.g., the operation failed because the Server is in
CPS_v1.1
an inappropriate position for calibration), the Server shall use the Operation Failed Response
Value and shall also include the following Response Parameter in order to provide more
information on the cause of the error. The Response Parameters are defined in Table 3.6.
If the operation results in any other error condition, or if this Op Code is not supported by the
Server, see Section 3.4.3 for details on handling this condition.
If an Op Code is written to the Cycling Power Control Point characteristic that is unsupported by
the Server, the Server, after sending a Write Response, shall indicate the Cycling Power Control
Point with a Response Code Op Code, the Request Op Code and Response Value set to Op
Code Not Supported.
If a Parameter is written to the Cycling Power Control Point characteristic that is invalid (e.g., the
Client writes the Update Sensor Location Op Code with a sensor location that is not valid in the
context of the Server, or out of the supported range of the Server), the Server, after sending a
Write Response, shall indicate the Cycling Power Control Point with a Response Code Op
Code, the Request Op Code and Response Value set to Invalid Parameter.
If an Op Code is written to the Cycling Power Control Point characteristic while the Server is
performing a previously triggered Cycling Power Control Point operation (i.e., resulting from
invalid Client behavior), the Server shall return an error response with the Attribute Protocol
error code set to Procedure Already In Progress as defined in CSS Part B, Section 1.2 [3].
If an Op Code is written to the Cycling Power Control Point characteristic and the Client
Characteristic Configuration descriptor of the Cycling Power Control Point is not configured for
indications, the Server shall return an error response with the Attribute Protocol error code set to
Client Characteristic Configuration Descriptor Improperly Configured as defined in CSS Part B,
Section 1.2 [3].
CPS_v1.1
In the context of the Cycling Power Control Point characteristic, a procedure is not considered
started and not queued in the Server when a write to the Cycling Power Control Point results in
an error response with the Attribute Protocol error code defined in CSS Part B, Section 1.2 [3].
The Server measures the force-related data (or torque-related data) the cyclist is producing and
cadence-related data which represents the number of times per minute the cyclist turns the
crank. The Instantaneous Magnitude values of the Instantaneous Magnitude Array field are
related to a crank revolution and because the cadence varies along with the time, the amount of
Instantaneous Magnitude values per crank rotations also varies. The First Crank Measurement
Angle shall be present when the Server detects the beginning of a new crank revolution. If a
cyclist rotates the pedals at a cadence of 90 revolutions per minute and the sampling rate of
Server is 25 Hertz, there should be 16 or 17 Instantaneous Magnitude values per crank
revolution.
In typical applications, the Cycling Power Vector characteristic is notified approximately once
per 100 or 300 milliseconds, depending on the sampling rate of the transmitted data. The
transmission interval is typically related to the sampling rate at which the Server samples the
data. The sampling rate referenced in this section is not necessarily the sampling rate at which
the Server samples the raw signal, but it represents the sampling rate at which the
Instantaneous Magnitude values present in the Cycling Power Vector characteristic are sampled
since those data are typically down sampled from the raw signal.
CPS_v1.1
The value of the sampling rate used to send the Cycling Power Vector data can be requested
using the procedure described in Section 3.4.2.14.
When a Client writes 0x0001 to the Client Characteristic Configuration descriptor to start the
notifications, the Server may request new connection parameters (e.g. using the GAP
Connection Parameter Update procedure described in Volume 3 Part C Section 9.3.9 of [1])
before the notifications are sent if the current connection parameters do not allow the sending of
notification (e.g., the Server requires faster connection interval). If the Client does not change
the connection parameters within a period of time defined by the Server (e.g., 7 seconds or
more if the current connection interval is set to 1 second), the Server shall return an ATT Error
Response to the Write Request with an Error Code set to the Application Error Code 0x80
(Inappropriate Connection Parameters). Otherwise, the Server shall respond with a Write
Response and start sending notifications of the Cycling Power Vector characteristic.
When a Client writes 0x0000 to the Client Characteristic Configuration descriptor to stop the
notifications, the Server should send a request to the Client to set the connection parameters to
the same values as before the Client started the notifications (e.g., using the GAP Connection
Parameter Update procedure described in Volume 3 Part C Section 9.3.9 of [1]).
Refer to Section 3.7 for additional recommendations for distributed power sensor systems (e.g.,
one Server on each pedal measuring the left and right power contribution).
The Cycling Power Vector characteristic contains time-sensitive data, thus the requirements for
time-sensitive data and data storage defined in Section 3.6 apply.
Reserved for Future Use (RFU) bits in the Flags fields shall be set to 0.
The bits of the Flags field, their function, and relationship to bits in the Cycling Power Feature
characteristic are shown in Table 3.7.
Magnitude Array Present field not present field present set to Force-based (bit 16)
(bit 2), see 3.5.1.4
Instantaneous Torque Corresponding Corresponding Sensor Measurement Context
Magnitude Array Present field not present field present set to Torque-based (bit 16)
(bit 3), see 3.5.1.5
Instantaneous Measurement Unknown direction See direction Instantaneous Measurement
Direction (bits 4-5), see definitions in [2] Direction Supported (bit 17)
3.5.1.4 and 3.5.1.5
Table 3.7: Bit Definitions for the Cycling Power Vector Characteristic
Each of the Flags bits in the table above may change during a connection if the corresponding
support bit in the Cycling Power Feature characteristic is set to 1 indicating that the feature is
supported. If the corresponding support bit is however set to 0, then the corresponding Flags bit
shall also be set to 0 since the feature is not supported. See Table 3.3 for further information on
the Cycling Power Feature characteristic support bits and static requirements.
3. Rebuild a measurement vector based on the Crank Revolution Data and the First Crank
Measurement Angle value.
Average cadence is not accurate unless 0 cadence events (i.e., coasting) are subtracted. In
addition, if there is link loss, the Cumulative Crank Revolutions value can be used to calculate
the average cadence during the link loss. This value is intended to roll over and is not
configurable.
The ‘crank event time’ is a free-running-count of 1/1024 second units and it represents the time
when the crank revolution was detected by the crank rotation sensor. Since several crank
events can occur between transmissions, only the Last Crank Event Time value is transmitted.
The Last Crank Event Time value rolls over every 64 seconds.
To enhance the user experience, the Server should ignore the extra crank revolutions that may
be detected when the user is not pedaling (e.g., coasting down the hill) but the sensor is facing
the magnet installed on the crankset and may cause unwanted crank revolution detections.
If the Server supports the Extreme Angles feature (see Table 3.7), this field shall be supported,
but is not necessarily required in every packet.
This represents the angle of the first sample at the start of a measurement and is used by the
Client in conjunction with the Instantaneous Magnitude values and the Sampling Rate to
assemble a force (or torque) vector array to show a user the forces throughout a crank rotation.
If there are more Instantaneous Magnitude values for a rotation than will fit within a single
packet, then the next packet shall include the remaining values, however the First Crank
Measurement Angle field shall not be present in the continuation packet.
The Instantaneous Force Magnitude Array field is a variable length field and it may be included
in the Cycling Power Vector characteristic. Included in this field are one or more Instantaneous
Magnitude values which are expressed in Newtons with a resolution of 1 Newton. These values
represent the raw data the sensor measures. The sampling rate at which these data are
sampled can be requested using the Request Sampling Rate procedure defined in Section
3.4.2.14).
The Instantaneous Measurement Direction bits of the Flags field describe the direction of the
Instantaneous Magnitude values the Server measures (e.g., Unknown, Tangential Component,
Radial Component, or Lateral Component).
The number of values in the array is related to the sampling rate of the sensor and the
notification interval.
• The maximum number of Instantaneous Magnitude values that can be notified if Crank
Revolution Data and First Crank Measurement Angle are present is 6.
• The maximum number of Instantaneous Magnitude values that can be notified if Crank
Revolution Data is not present and First Crank Measurement Angle is present is 8.
• The maximum number of Instantaneous Magnitude values that can be notified if Crank
Revolution Data is present and First Crank Measurement Angle is not present is 7.
• The maximum number of Instantaneous Magnitude values that can be notified if Crank
Revolution Data and First Crank Measurement Angle are not present is 9.
If more Instantaneous Magnitude values are measured since the last notification than fit into one
Cycling Power Vector characteristic, then the Instantaneous Magnitude values should be
CPS_v1.1
included in the next available Cycling Power Vector in a continuation packet as described in
Section 3.5.1.3.
Since a Server supports only one measurement context (e.g., Force-based or Torque-based),
the support of this field excludes the support of the Instantaneous Torque Magnitude Array field.
The Instantaneous Torque Magnitude Array field is a variable length field and it may be included
in the Cycling Power Vector characteristic. Included in this field are one or more Instantaneous
Magnitude values which are expressed in Newton meter with a resolution of 1/32 Newton meter.
These values represent the raw data the sensor measures. The sampling rate at which these
data are sampled can be requested using the Request Sampling Rate procedure defined in
Section 3.4.2.14).
The Instantaneous Measurement Direction bits of the Flags field describe the direction of the
Instantaneous Magnitude values the Server measures (e.g., Unknown, Tangential Component,
Radial Component, or Lateral Component).
The number of values in the array is related to the sampling rate of the sensor and the
notification interval.
• The maximum number of Instantaneous Magnitude values that can be notified if Crank
Revolution Data and First Crank Measurement Angle are present is 6.
• The maximum number of Instantaneous Magnitude values that can be notified if Crank
Revolution Data is not present and First Crank Measurement Angle is present is 8.
• The maximum number of Instantaneous Magnitude values that can be notified if Crank
Revolution Data is present and First Crank Measurement Angle is not present is 7.
• The maximum number of Instantaneous Magnitude values that can be notified if Crank
Revolution Data and First Crank Measurement Angle are not present is 9.
If more Instantaneous Magnitude values are measured since the last notification than fit into one
Cycling Power Vector characteristic, then the Instantaneous Magnitude values should be
included in the next available Cycling Power Vector in a continuation packet as described in
Section 3.5.1.3.
Since a Server supports only one measurement context (e.g., Force-based or Torque-based),
CPS_v1.1
the support of this field excludes the support of the Instantaneous Force Magnitude Array field.
Since this service does not provide any data with a time stamp to identify the measurement time
(and age) of the data, the value of the Cycling Power Measurement characteristic or the value of
the Cycling Power Vector characteristic shall be discarded if either the connection does not get
established or if the notification is not successfully transmitted (e.g., due to link loss).
4 SDP Interoperability
If this service is exposed over BR/EDR then it shall have the following SDP record.
BrowseGroupList PublicBrowseRoot* M
6 References
[1] Bluetooth Core Specification v4.0 with CSA2, CSA3 and CSA4 or later version of the Core
Specification.
[2] Characteristic and Descriptor descriptions are accessible via the Bluetooth SIG Assigned
Numbers.