CPP v1.1
CPP v1.1
CPP v1.1
Date 2016-May-03
Revision CPP_v1.1
Abstract:
This profile enables a Collector device to connect and interact with a Cycling Power Sensor for use in sports and
fitness applications.
Revision History
Contributors
Name Company
Robert Hughes Intel Corporation
Niclas Granqvist Polar
Jari Miettinen Polar
Guillaume Schatz Polar
Laurence Richardson CSR
Ed Watson Saris
Donny Warbritton Stages Cycling
CPP_v1.1
Document Terminology
The Bluetooth SIG has adopted portions of the IEEE Standards Style Manual, which dictates
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).
CPP_v1.1
The word may is used to indicate a course of action permissible within the limits of the standard
(may equals is permitted).
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 Profile Dependencies...................................................................................................................... 7
1.2 Conformance .................................................................................................................................. 7
1.3 Bluetooth Specification Release Compatibility ............................................................................... 7
2 Configuration ....................................................................................................................................... 8
2.1 Roles ............................................................................................................................................... 8
2.2 Role/Service Relationships ............................................................................................................. 8
2.3 Concurrency Limitations and Restrictions ...................................................................................... 9
2.4 Topology Limitations and Restrictions ............................................................................................ 9
2.4.1 Topology Restrictions for Low Energy ....................................................................................... 9
2.4.2 Topology Limitations and Restrictions for BR/EDR ................................................................... 9
2.5 Transport Dependencies ................................................................................................................ 9
3 CP Sensor Role Requirements ......................................................................................................... 10
3.1 Incremental Cycling Power Service Requirements ...................................................................... 10
3.1.1 Additional Requirements for Low Energy Transport ............................................................... 10
3.2 Incremental Device Information Service Requirements ............................................................... 11
CPP_v1.1
1 Introduction
The Cycling Power Profile is used to enable a data collection device to obtain data from a
Cycling Power Sensor (CP Sensor) that exposes the Cycling Power Service [1].
1.2 Conformance
If conformance to this profile is claimed, all capabilities indicated as mandatory for this profile
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 [2]
CPP_v1.1
2 Configuration
2.1 Roles
The profile defines four roles: CP Sensor, Collector, CP Broadcaster (LE Only) and CP
Observer (LE Only). The CP Sensor is the device that reports cycling data related to power,
force, speed and cadence to a Collector. The Collector is the device that receives the data from
a CP Sensor while connected to a CP Sensor. The CP Broadcaster is the device that reports
cycling data related to power, force, speed and cadence to a CP Observer using undirected
non-connectable advertisements (broadcast) and the CP Observer is the device that receives
the broadcasts from a CP Broadcaster.
• The CP Observer does not require any particular GATT Role; however it shall use the GAP
Observer role to be able to receive undirected non-connectable advertisements.
CPP_v1.1
Device Information
Service
Battery Service
Notes: Profile roles (Collector, CP Sensor, CP Broadcaster and CP Observer) are represented by blue
boxes and services (Cycling Power Service, Device Information Service and Battery Service) are
represented by gray boxes.
A CP Sensor instantiates the Cycling Power Service [1] and optionally the Device Information
Service [4], as well as the Battery Service [5].
The CP Sensor shall use the GAP Peripheral role (see Section 7). The CP Sensor may also
implement the CP Broadcaster role (see Section 5).
The Collector shall use the GAP Central role (see Section 7).
The CP Observer shall support the GAP Observer role and be able to receive undirected
non-connectable advertisements from a CP Broadcaster (see Section 6).
CPP_v1.1
Where the term BR/EDR is used in this document, it also includes the optional use of AMP.
The CP Sensor should instantiate the Device Information Service [4]. See specific
recommendations in Section 3.2.
Service CP Sensor
Cycling Power Service M
Device Information Service O
Battery Service O
Table 3.1: CP Sensor Service Requirements
Other than the CP Sensor, requirements in this section refer to Sections 7.1 and 8.1 for
CPP_v1.1
additional CP Sensor requirements for the LE transport and Sections 7.3 and 8.3 for the
BR/EDR transport.
Refer to Section 7 for connection establishment procedure considerations and refer to Section 7
for security considerations.
Advertising Data or Scan Response Data. For privacy reasons, CP Sensors with the Privacy
Feature enabled should not include this field in the advertisement.
power balance or the total power. See Section 6 for additional requirements for CP Observer
role.
The Collector may use the Device Information Service [4] as well as the Battery Service [5].
Service Collector
Cycling Power Service M
Device Information Service O
Battery Service O
Table 4.1: Collector Service Requirements
The Collector shall determine the features supported by the CP Sensor by reading the Cycling
Power Feature characteristic (see Section 4.4). If the Collector discovers the Server
Characteristic Configuration descriptor of the Cycling Power Measurement characteristic, it shall
assume that the CP Sensor supports the Cycling Power Measurement Broadcast feature.
Similarly, if the Collector discovers the Cycling Power Vector characteristic, it shall assume that
the CP Sensor supports the Cycling Power Vector feature.
Refer to Section 7 for connection establishment procedure consideration and refer to Section 8
for security considerations.
The table below summarizes additional GATT sub-procedure requirements beyond those
required by all GATT Clients.
Notification M
Read Characteristic Descriptors M
Write Characteristic Descriptors M
Table 4.3: Additional GATT Sub-Procedure Requirements
C.1: Mandatory to support at least one of these Service Discovery sub-procedures when using the LE transport.
Excluded when using the BR/EDR transport since SDP must be used in this case.
C.3: Mandatory if at least one Cycling Power Control Point procedure or the writable GAP Device Name is
supported (see Section 3.1.1.3).
When using the BR/EDR transport, the Collector shall perform service discovery by retrieving
the SDP record of the Cycling Power Service as defined in [1].
The Collector shall discover the Cycling Power Service and may discover the Device
Information Service and the Battery Service.
The Collector shall use the GATT Discover All Characteristic Descriptors sub-procedure to
discover the characteristic descriptors.
The discovery requirements for the Collector are shown in Table 4.4 below:
Where a characteristic is discovered that can be notified or indicated, the Collector shall also
discover the associated Client Characteristic Configuration descriptor.
Where a characteristic is discovered that can be broadcasted, the Collector shall also discover
the associated Server Characteristic Configuration descriptor.
In order for the Collector to discover the characteristics of the Device Information Service, it
shall use either the GATT Discover All Characteristics of a Service sub-procedure or the GATT
Discover Characteristics by UUID sub-procedure to discover all characteristics of the service.
In order for the Collector to discover the characteristics of the Battery Service, it shall use either
the GATT Discover All Characteristics of a Service sub-procedure or the GATT Discover
Characteristics by UUID sub-procedure to discover all characteristics of the service.
Similarly, if one of the feature bits in Table 4.6 is set to 1, then the Collector shall assume that
the related procedure is supported by the CP Sensor. Otherwise, it is unnecessary for the
Collector to attempt to initiate the related procedure.
If the Distributed System Support bits of the Cycling Power Feature characteristic are set to 00
(Unspecified (legacy sensor)), the Collector shall make no adjustments to the power value
returned from a single CP Sensor. If the bits are set to 01 (Not for use in a distributed system),
the CP Sensor is not designed for use in a distributed system (i.e., the CP Sensor measures the
total amount of power generated by the user), and the Collector shall assume that the
Instantaneous Power value of the Cycling Power Measurement characteristic sent by the CP
Sensor represents the total amount of power generated by the user. If the bits are set to 10
(Can be used in a distributed system), the Collector shall assume that the Instantaneous Power
value of the Cycling Power Measurement characteristic sent by the CP Sensor represents only
a portion of the total amount of power generated by the user (e.g., the portion that the CP
Sensor measures). In this case, the Collector may double the value if there is no other CP
Sensor connected or calculate the total power as the sum of two connected CP Sensors. The
user should be alerted if the Collector senses only one CP Sensor in a distributed system and
also if the Collector doubles the value presented to the user.
If the Collector receives a Cycling Power Feature characteristic with Reserved for Future Use
(RFU) bits of the Cycling Power Feature field that are non-zero, it shall ignore those bits and
any additional data that may be present in the packet and continue to process the Cycling
Power Feature characteristic in the same way as if all the RFU bits had been zero.
If the Collector reads a Cycling Power Feature characteristic with additional, unrecognized
octets, the Collector behavior shall be identical to the Collector behavior when only recognized
octets are received. This is to enable compatibility with future Cycling Power Service updates for
the case where available octets in the characteristic are specified for optional use. What the
Collector does with the additional, unrecognized octets is left to the implementation.
The Collector shall be able to receive notifications of the Cycling Power Measurement
characteristic from the CP Sensor at intervals determined by the CP Sensor.
The Collector shall determine the contents of the Cycling Power Measurement characteristic
structure based on the contents of the Flags field. This allows the Collector to determine
whether or not the optional fields are present.
CPP_v1.1
If the CP Sensor supports the Pedal Power Balance feature (see Section 4.4), the Collector
shall consider the Pedal Power Balance Reference bit of the Flags field of the Cycling Power
Measurement characteristic to determine the reference of the pedal power balance.
If the CP Sensor supports the Accumulated Torque feature (see Section 4.4), the Collector
should refer to the Accumulated Torque Source bit of the Flags field of the Cycling Power
Measurement characteristic to determine the accumulated torque source (e.g., Wheel based or
Crank based).
If the CP Sensor supports the Wheel Revolution Data feature, the Collector can calculate the
instantaneous speed based on the Cumulative Wheel Revolution and the Last Wheel Event
Time fields of the Cycling Power Measurement characteristic. The Collector should support the
calculation of average speed.
Calculation of instantaneous speed at the Collector can be derived from the wheel
circumference and data in two successive measurements. The Collector calculation can be
performed as shown below:
If the CP Sensor supports the Crank Revolution Data feature, the Collector can calculate the
instantaneous cadence based on the Cumulative Crank Revolutions and the Last Crank Event
Time fields of the Cycling Power Measurement characteristic. The Collector should support the
calculation of average cadence.
Calculation of instantaneous cadence at the Collector can be derived from data in two
successive measurements. The Collector calculation can be performed as shown below:
The Cumulative Crank Revolutions value will occasionally roll over (i.e., as frequently as every
12 hours if ridden at 80 rpm). As such, the Collector shall take into account that the Cumulative
Crank Revolutions value can roll over during a ride.
While the Cumulative Wheel Revolution value cannot practically roll over during the life of the
Sensor, the Collector may set this value to a specific value (e.g., the value of the cumulative
wheel revolutions of an old CP Sensor to keep track of the total distance travelled). See Section
4.7.2.1 for information on how to set this value.
The Collector shall be tolerant of the fact that the Cumulative Wheel Revolutions value may
decrement for some implementations (e.g., if the bicycle is rolled in reverse).
CPP_v1.1
The Collector, when connected to a distributed power sensor system (e.g., left and right CP
Sensors), can:
• Display the distributed power values (e.g., left and right power values) and calculate and
display the pedal power balance (e.g., ratio of the consecutive left and right power values)
as described in Section 3.2.1.3 of [1], or
• Calculate and display the total power (e.g., sum of the distributed power values), or
• Estimate the total power based on only one distributed power value (e.g., double of the right
power value).
The Collector shall take into account that the following values can roll over during a ride:
• Accumulated Torque
• Accumulated Energy
If the Collector has a display, it can alert the user when data required for calculation of
instantaneous power, instantaneous speed, or instantaneous cadence is no longer being
received (e.g., due to link loss or sensor misalignment). This can be done by displaying “--” (i.e.,
two dashes) or by other means. Once the data is again received (e.g., the link is restored or
sensor position readjusted), the display can return to normal. In addition, if the user is coasting
(i.e., not rotating the crank), the instantaneous cadence can also be represented on the display
as “--” (i.e., two dashes).
If there is a link loss situation during a ride, the Collector should take that into account when
calculating the average.
If the CP Sensor supports the Offset Compensation Indicator feature, the Collector should
consider the Offset Compensation Indicator bit of the Flags field to determine whether or not an
action is required to recalibrate the CP Sensor.
If the Collector receives a Cycling Power Measurement characteristic with Reserved for Future
Use (RFU) bits of the Flags field that are non-zero, it shall ignore those bits and any additional
data that may be present in the packet and continue to process the Cycling Power
Measurement characteristic in the same way as if all the RFU bits had been zero.
only recognized octets are received. This is to enable compatibility with future Cycling Power
Service updates for the case where available octets in the characteristic are specified for
optional use. What the Collector does with the additional, unrecognized octets is left to the
implementation.
If the CP Sensor supports the Multiple Sensor Locations Feature, the Collector may request the
supported sensor locations by using the procedure described in Section 4.7.2.3 and may also
update the value of the Sensor Location characteristic by using the procedure described in
Section 4.7.2.2.
If the CP Sensor supports the Multiple Sensor Locations Feature, the Collector should read the
value of the Sensor Location characteristic each time the connection is established to determine
if the CP Sensor is properly configured. This should be done in case the Sensor Location
characteristic value was altered by another Collector or in case the CP Sensor is unable to
cache the value. See Section 4.7.3 for information relating to the caching of the Sensor Location
characteristic.
If the Collector reads a Sensor Location value that is designated as Reserved for Future Use
(RFU), it shall ignore the value and may substitute it with the value for ‘Other’ (0x00) it shall also
ignore any additional data that may be present in the packet and continue to process the Sensor
Location characteristic in the same way as if all the RFU bits had been zero.
If the Collector receives a Sensor Location characteristic with additional, unrecognized octets,
the Collector behavior shall be identical to the Collector behavior when only recognized octets
are received. This is to enable compatibility with future Cycling Power Service updates for the
case where available octets in the characteristic are specified for optional use. What the
Collector does with the additional, unrecognized octets is left to the implementation.
Cycling Power Control Point characteristic for indications (i.e., via the Client Characteristic
Configuration descriptor).
The Collector may perform a write to the Cycling Power Control Point to request a desired
procedure. A procedure begins when the Collector writes a particular Op Code to the Cycling
Power Control Point to perform some desired action and ends when the Collector sends a
confirmation to acknowledge the Cycling Power Control Point indication sent by the CP Sensor
at the end of the procedure. This indication includes the Response Code, the Requested Op
Code, and the Response Value and may also include a Response Parameter as defined in [1].
include a Parameter that is valid within the context of that Op Code as defined in [1].
In some cases it may be desirable to use this feature to allow a user to transfer the distance
value (i.e., Cumulative Wheel Revolutions Value in the Sensor) from their old sensor onto their
new sensor (e.g., if they desire to keep track of the total distance they have travelled on their
bike).
In this scenario, a Collector that knows the Cumulative Wheel Revolutions value that was
reached with the old CP Sensor (or can calculate it from the total distance recorded) can use
the Set Cumulative Value Procedure to set the Cumulative Wheel Revolutions value within the
new CP Sensor to the same value.
In a second scenario, both the Collector and the CP Sensor are being replaced at the same
time. The user interface of the new Collector allows the user to set the wheel circumference for
the bike and the total distance value that he or she desires to transfer from the old CP Sensor.
The new Collector is able to calculate the Cumulative Wheel Revolutions value from these two
values and can use the Set Cumulative Value Procedure to set the Cumulative Wheel
Revolutions value within the new CP Sensor to the same value as it had reached in the old CP
Sensor.
The Collector shall wait for the Response Code Cycling Power Control Point Indication with the
Response Value set to Success indicating successful operation as per the request or an error
response value as described in Section 4.7.3 or for the procedure to time out according to the
procedure time-out operation described in Section 4.7.4.
Refer to Section 7.4 for multiple bike considerations and how a Collector should handle the
Sensor Location parameter since a Collector may be used with more than one CP Sensor (e.g.,
the user owns several bikes).
CPP_v1.1
The Collector shall wait for the Response Code Cycling Power Control Point Indication with the
Response Value set to Success indicating success of the operation as per the request or an
error response value as described in Section 4.7.3 or for the procedure to time out according to
the procedure time out operation described in Section 4.7.4.
The Collector shall wait for the Response Code Cycling Power Control Point Indication with the
Response Value set to Success indicating successful operation as per the request with the list
of supported locations in the Response Parameter value or an error response value as
described in Section 4.7.3 or for the procedure to time out according to the procedure time out
operation described in Section 4.7.4. The possible sensor location values are defined in the
Sensor Location characteristic description in [3].
Since the list of supported locations is static for the lifetime of the device as defined in the
Cycling Power Service, the Collector should cache the list of supported values.
See Section 4.7.3 for general error handling procedures including information relating to the
caching of the Sensor Location characteristic.
Refer to Section 7.4 for multiple bike considerations and how a Collector should handle the
Crank Length parameter since a Collector may be used with more than one CP Sensor (e.g.,
the user owns several bikes).
The Collector shall wait for the Response Code Cycling Power Control Point Indication with the
Response Value set to Success indicating success of the operation as per the request or an
error response value as described in Section 4.7.3 or for the procedure to time out according to
the procedure time out operation described in Section 4.7.4.
Refer to Section 7.4 for multiple bike consideration and how a Collector should handle the
CPP_v1.1
Crank Length parameter since a Collector may be used with more than one CP Sensor (e.g.,
when the user owns several bikes).
The Collector shall wait for the Response Code Cycling Power Control Point Indication with the
Response Value set to Success indicating successful operation as per the request with a
UINT16 Response Parameter value that represent the crank length in millimeters with a
resolution of 1/2 millimeter or an error response value as described in Section 4.7.3 or for the
procedure to time out according to the procedure time out operation described in Section 4.7.4.
See Section 4.7.3 for general error handling procedures including information relating to the
caching of the crank length value.
Refer to Section 7.4 for multiple bike considerations and how a Collector should handle the
Chain Length parameter since a Collector may be used with more than one CP Sensor (e.g.,
the user owns several bikes).
The Collector shall wait for the Response Code Cycling Power Control Point Indication with the
Response Value set to Success indicating success of the operation as per the request or an
error response value as described in Section 4.7.3 or for the procedure to time out according to
the procedure time out operation described in Section 4.7.4.
Bluetooth SIG Proprietary Page 23 of 47
Cycling Power Profile
Refer to Section 7.4 for multiple bike considerations and how a Collector should handle the
Chain Length parameter since a Collector may be used with more than one CP Sensor (e.g.,
the user owns several bikes).
The Collector shall wait for the Response Code Cycling Power Control Point Indication with the
Response Value set to Success indicating successful operation as per the request with a
UINT16 Response Parameter value that represent the chain length in millimeters with a
resolution of 1 millimeter or an error response value as described in Section 4.7.3 or for the
procedure to time out according to the procedure time out operation described in Section 4.7.4.
See Section 4.7.3 for general error handling procedures including information relating to the
caching of the chain length value.
Code with a UINT16 Parameter that represents the chain weight in grams with a resolution of
1 gram.
Refer to Section 7.4 for multiple bike considerations and how a Collector should handle the
Chain Weight parameter since a Collector may be used with more than one CP Sensor (e.g.,
the user owns several bikes).
The Collector shall wait for the Response Code Cycling Power Control Point Indication with the
Response Value set to Success indicating success of the operation as per the request or an
error response value as described in Section 4.7.3 or for the procedure to time out according to
the procedure time out operation described in Section 4.7.4.
Refer to Section 7.4 for multiple bike considerations and how a Collector should handle the
Chain Weight parameter since a Collector may be used with more than one CP Sensor (e.g.,
the user owns several bikes).
The Collector shall wait for the Response Code Cycling Power Control Point Indication with the
Response Value set to Success indicating successful operation as per the request with a
UINT16 Response Parameter value that represent the chain weight in grams with a resolution of
1 gram or an error response value as described in Section 4.7.3 or for the procedure to time out
according to the procedure time out operation described in Section 4.7.4.
See Section 4.7.3 for general error handling procedures including information relating to the
caching of the chain weight value.
Refer to Section 7.4 for multiple bike considerations and how a Collector should handle the
Span Length parameter since a Collector may be used with more than one CP Sensor (e.g., the
user owns several bikes).
The Collector shall wait for the Response Code Cycling Power Control Point Indication with the
Response Value set to Success indicating success of the operation as per the request or an
error response value as described in Section 4.7.3 or for the procedure to time out according to
the procedure time out operation described in Section 4.7.4.
Refer to Section 7.4 for multiple bike considerations and how a Collector should handle the
Span Length parameter since a Collector may be used with more than one CP Sensor (e.g., the
user owns several bikes).
The Collector shall wait for the Response Code Cycling Power Control Point Indication with the
Response Value set to Success indicating successful operation as per the request with the
UINT16 Response Parameter value that represents the span length in millimeters with a
resolution of 1 millimeter or an error response value as described in Section 4.7.3 or for the
procedure to time out according to the procedure time out operation described in Section 4.7.4.
See Section 4.7.3 for general error handling procedures including information relating to the
caching of the span length value.
The Collector shall wait for the Response Code Cycling Power Control Point Indication with the
Response Value set to Success indicating successful operation as per the request with a
SINT16 Response Parameter value that represents, based on the Sensor Measurement
Context bit of the Cycling Power Feature characteristic, either the raw force in Newton with a
resolution of 1 Newton (Force-based) or the raw torque in Newton meter with a resolution of
1/32 Newton meter (Torque-based) before the offset is compensated or an error response value
as described in Section 4.7.3 or for the procedure to time out according to the procedure time
out operation described in Section 4.7.4.
0: Leave as default
1: Turn off
2 Wheel Revolution Data
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
The Collector shall wait for the Response Code Cycling Power Control Point Indication with the
Response Value set to Success indicating success of the operation as per the request or an
error response value as described in Section 4.7.3 or for the procedure to time out according to
the procedure time out operation described in Section 4.7.4.
The Collector shall wait for the Response Code Cycling Power Control Point Indication with the
Response Value set to Success indicating successful operation as per the request with a UINT8
Response Parameter value that represents the sampling rate in Hertz with a resolution of
1 Hertz or an error response value as described in Section 4.7.3 or for the procedure to time out
CPP_v1.1
Since the sampling rate is static for the lifetime of the device as defined in the Cycling Power
Service, the Collector should cache this value.
See Section 4.7.3 for general error handling procedures including information relating to the
caching of the sampling rate value.
The Collector shall wait for the Response Code Cycling Power Control Point Indication with the
Response Value set to Success indicating successful operation as per the request with a
Response Parameter value that represents the factory calibration date or an error response
value as described in Section 4.7.3 or for the procedure to time out according to the procedure
time out operation described in Section 4.7.4. When the procedure is successful, the format of
the Response Parameter value, in the response to this Control Point, is defined to use the same
format as the Date Time characteristic defined in [3]. However, a value of 0 for the year, month,
or day fields shall not be used.
Since the factory calibration date is static for the lifetime of the device as defined in the Cycling
Power Service, the Collector should cache this value.
See Section 4.7.3 for general error handling procedures including information relating to the
caching of the factory calibration date value.
The Collector shall wait for the Response Code Cycling Power Control Point Indication with the
Response Value set to Success indicating successful operation as per the request with a
SINT16 Response Parameter value that represents, based on the Sensor Measurement
Context bit of the Cycling Power Feature characteristic, either the raw force in Newton with a
resolution of 1 Newton (Force-based) or the raw torque in Newton meter with a resolution of
1/32 Newton meter (Torque-based) before the offset is compensated followed by a UINT16
value representing the manufacturer Company ID as given in the Bluetooth SIG assigned
numbers, a UINT8 representing the number of octets of manufacturer specific data (e.g., Analog
to Digital Conversion data), and the corresponding manufacturer specific data. A value of 0 for
the length of the manufacturer specific data is possible if the Cycling Power Sensor has no
additional data to send along with the response to this procedure.
If the operation results in an error condition received from the CP Sensor (e.g., the operation
CPP_v1.1
failed because the CP Sensor is in an inappropriate position for calibration, thus resulting in an
Operation Failed Response Value), the Collector can determine the cause of the error from the
received Response Parameter as described in [1].
The Collector shall handle an error response value as described in Section 4.7.3 and time out
according to the time out procedure described in Section 4.7.4.
• Invalid Parameter
• Operation Failed
The Collector shall also be tolerant and behave appropriately when receiving the following ATT
Error Codes defined in CSS Part B, Section 1.2 [6]:
If a Service Changed indication is received from the CP Sensor, this indicates not only that the
Collector shall re-perform Service and Characteristic discovery (as defined in GATT), but also
that the cached values for characteristics (e.g., the Sensor Location characteristic) may no
longer be valid and Collectors that use the Sensor Location feature are required to re-perform
the Request Supported Sensor Locations procedure to acquire a list of supported locations and
the CP Sensor parameters (e.g., chain length, chain weight, crank length, or span length) may
no longer be valid and Collectors should reconfigure those parameters.
In the context of the Cycling Power Control Point characteristic, a procedure is not considered
started and not queued in the CP Sensor when a write to the Cycling Power Control Point
results in an ATT Error Response defined in CSS Part B, Section 1.2 [6].
A procedure is considered to have timed out if a Cycling Power Control Point indication is not
received within the ATT transaction timeout, defined as 30 seconds in Volume 2, Part F, Section
3.3.3 of [2], from the start of the procedure.
CPP_v1.1
If the link is lost while a Cycling Power Control Point procedure is in progress, then the
procedure shall be considered to have timed out. See Section 4.7.4.1 for handling this condition.
Thus a Collector shall start a timer, with the value set to the ATT transaction timeout, after the
write response is received from the CP Sensor. The timer shall be stopped when a Cycling
Power Control Point indication is received and the Op Code is set to Response Code. If the
timer expires, then the procedure shall be considered to have failed.
If the Collector enables the notifications of the Cycling Power Vector characteristic, it shall be
able to receive the notifications from the CP Sensor at regular intervals. The notification interval
is defined by the CP Sensor.
The Collector should accept any valid GAP Connection Parameter Update procedure initiated
by the CP Sensor (e.g., L2CAP Connection Parameter Update Request) in order to allow the
CP Sensor to send the notification of the Cycling Power Vector at the desired interval.
The Collector shall determine the contents of the Cycling Power Vector characteristic structure
based on the contents of the Flags field. This allows the Collector to determine whether or not
the optional fields are present.
Calculation of instantaneous cadence at the Collector can be derived from data in two
successive measurements. The Collector calculation can be performed as shown below:
The Cumulative Crank Revolution value will occasionally roll over (i.e., as frequently as every 12
hours if ridden at 80 rpm). As such, the Collector shall take into account that the Cumulative
Crank Revolution value can roll over during a ride.
The Collector shall take into account that the Last Crank Event Time can roll over during a ride.
CPP_v1.1
If the Collector has a display, it can alert the user when data required for calculation of cycling
power data is no longer being received (e.g., due to link loss or sensor misalignment). This can
be done by displaying “--" (i.e., two dashes) or by other means. Once the data is again received
(e.g., the link is restored or sensor position readjusted), the display can return to normal. In
addition, if the user is coasting (i.e., not rotating the crank), the instantaneous cadence can also
be represented on the display as “--" (i.e., two dashes).
The Collector, to create a vector based on the data sent by the CP Sensor can follow the
procedure described in Section 12.
If the Collector receives a Cycling Power Vector characteristic with Reserved for Future Use
(RFU) bits of the Flags field that are non-zero, it shall ignore those bits and continue to process
the Cycling Power Vector characteristic in the same way as if all the RFU bits had been zero.
If the Collector receives a Cycling Power Vector characteristic with additional, unrecognized
octets, the Collector behavior shall be identical to the Collector behavior when only recognized
octets are received. This is to enable compatibility with future Cycling Power Service updates for
the case where available octets in the characteristic are specified for optional use. What the
Collector does with the additional, unrecognized octets is left to the implementation.
The CP Broadcaster shall start broadcasting the Cycling Power Measurement characteristic
when directed by the Collector (i.e., via the Server Characteristic Configuration descriptor). The
CP Broadcaster shall stop broadcasting the Cycling Power Measurement characteristic value
when directed by the Collector (i.e., via the Server Characteristic Configuration descriptor).
When the link with the Collector is terminated (e.g., terminated by the Collector, the CP Sensor
or when a link loss occurs), the CP Broadcaster shall stop broadcasting the Cycling Power
Measurement characteristic value.
The CP Broadcaster should set the advertisement interval with the same value as the
notification interval of the Cycling Power Measurement characteristic.
CPP_v1.1
To enhance the user experience, the CP Observer should scan for undirected non-connectable
CPP_v1.1
The requirements defined in Section 4.5 which define the contents of the Cycling Power
Measurement characteristic also apply to the CP Observer.
Once configured by the Collector, a CP Sensor will typically remain powered off between
training sessions and will only advertise and allow a Collector to connect when it detects
user activity and has data to send. In this scenario, the CP Sensor will enter a GAP
Connectable Mode and start advertising when it has data to send to a Collector. The
Collector will typically execute a GAP connection establishment procedure such that it is
scanning for a CP Sensor. When a connection is established and the CP Sensor is
configured for notifications and indications by the Collector, the CP Sensor sends
notifications to the Collector at regular intervals. When the training session is ended on
the Collector, the Collector typically terminates the connection. When the CP Sensor is
inactive for a certain period of time, the CP Sensor typically terminates the connection.
This section describes connection procedures a CP Sensor should follow to initiate a connection
with a Collector using an LE transport.
• Section 7.1.1 describes the connection procedure when the CP Sensor does not support
bonding or if the CP Sensor supports bonding but is not bonded with any Collectors.
• Section 7.1.2 describes the connection procedure when the CP Sensor is bonded with one
or more Collectors.
• Section 7.1.3 is used when the established connection is broken after a link loss.
The CP Sensor should use the GAP General Discoverable Mode with connectable undirected
advertising events when establishing a connection.
The advertising interval and time to perform advertising should be configured with consideration
for user expectations of connection establishment time.
If a connection is not established within a time limit defined by the CP Sensor, the CP Sensor
may exit the GAP Connectable Mode.
The CP Sensor should be in the Bondable mode during this procedure to optimize the future
connections to the Collector.
If a bond is created, the CP Sensor should write the Bluetooth device address of the Collector in
the White List of its controller.
When the CP Sensor no longer detects user activity for several seconds (e.g., 10 to
20 seconds), the CP Sensor should perform the GAP Terminate Connection procedure.
When establishing a connection, the CP Sensor should use the GAP Non-Discoverable Mode
with connectable undirected advertising events for the first 10 seconds, with a White List
containing addresses of bonded devices, to allow only active bonded Collectors to establish a
connection. After the 10 second period has expired and in order to allow connection with
additional Collectors, the CP Sensor should use the GAP General Discoverable Mode with
CPP_v1.1
connectable undirected advertising events and it should be in the GAP Bondable mode.
The advertising interval and time to perform advertising should be configured with consideration
for user expectations of connection establishment time.
If a connection is not established within a time limit defined by the CP Sensor, the CP Sensor
may exit the GAP Connectable Mode.
If a bond is created, the CP Sensor should write the Bluetooth device address of the Collector in
the White List of its controller.
When the CP Sensor no longer detects user activity for several seconds (e.g., 10 to 20
seconds), the CP Sensor should perform the GAP Terminate Connection procedure.
When the CP Sensor is disconnected and the CP Sensor is ready for reconnection (e.g., when
the CP Sensor detects some activity or when commanded by the user), the CP Sensor should
reinitiate the connection procedure (e.g., start advertising).
The Collector should use the GAP General Discovery procedure to discover a CP Sensor.
A Collector may use one of the GAP connection procedures based on its connectivity
requirements as described in Table 7.1:
The scan interval, scan window, and time to perform scanning should be configured with
consideration for user expectations of connection establishment time as defined in [2] Volume 3,
Part C, Section 9.3.11.
If a connection is not established within a time limit defined by the Collector, the Collector may
exit the connection establishment procedure.
When the connection is established, the Collector should bond with the CP Sensor to optimize
the future connections to the device.
If a bond is created, the Collector should write the Bluetooth device address of the CP Sensor in
the White List of its controller and set its initiator filter policy to ‘process connectable
advertisement packets.’
Once connected and if not already bonded to the CP Sensor, the Collector shall configure the
Cycling Power Measurement characteristic for notification and shall configure the Cycling Power
Control Point characteristic for indication. If the CP Sensor supports the Cycling Power
Measurement Broadcast feature, the Collector may enable the broadcast of the Cycling Power
Measurement characteristic as described in Section 4.5.1, typically when directed through the
user interaction via the Collector user interface (UI).
The Collector should terminate the connection when the measurement session is terminated at
the Collector by the user. In this case, the Collector should disable the notification of the Cycling
Power Vector characteristic prior to disconnect if this was previously enabled. The CP Sensor
will typically terminate the connection if the CP Sensor no longer detects user activity for several
seconds (e.g., 10 to 20 seconds).
When the Collector is disconnected, the Collector may initiate the new Connection Procedure.
For Collectors that may be used with one or more bikes, refer to Section 7.4.
When using BR/EDR, devices can utilize sniff mode and sniff subrating to reduce power
consumption; however, no particular parameters are recommended and the requirements of
other profiles may need to be considered.
The Collector should use the GAP General Discovery procedure to discover a CP Sensor to
establish a connection to a CP Sensor to which it is not bonded.
Either the CP Sensor or the Collector can establish a BR/EDR link to a remote peer device.
Once a link is established, the Collector shall discover the Cycling Power Service using SDP
procedures prior to establishing a GATT connection.
Once the Cycling Power Service is discovered and a GATT connection is established, the
Collector shall discover the Cycling Power Service characteristics exposed by this service using
GATT Discovery procedures.
Once connected, the Collector shall configure the Cycling Power Measurement characteristic for
notification. If the CP Sensor exposes the Cycling Power Control Point characteristic, the
Collector should configure the Cycling Power Control Point for indication.
The Collector should terminate the connection when the measurement session is terminated at
the Collector by the user. In this case, the Collector should disable the notification of the Cycling
Power Vector characteristic prior to disconnect if this was previously enabled. When the CP
Sensor no longer detects user activity for several seconds (e.g., 10 to 20 seconds), the CP
Sensor may disconnect the link, depending on the use cases of the devices and other profiles
connected on either device.
For Collectors that may be used with one or more bikes each with its own independent set of
sensors, refer to Section 7.4.
Collectors when it is ready for a connection (e.g., when the CP Sensor detects some activity or
when commanded by the user).
Either the CP Sensor or the Collector can establish a BR/EDR link to a remote peer device.
If a higher layer determines the bond no longer exists on the remote device, the local device
must reconfigure the remote device after:
• user interaction confirms that the user wants to re-pair with the remote device,
If the local device had previously determined that the remote device did not have the «Service
Changed» characteristic then service discovery may be skipped.
The Collector should terminate the connection when the measurement session is terminated at
the Collector by the user. In this case, the Collector should disable the notification of the Cycling
Power Vector characteristic prior to disconnect if this was previously enabled. When the CP
Sensor no longer detects user activity for several seconds (e.g., 10 to 20 seconds), the CP
Sensor may disconnect the link, depending on the use cases of the devices and other profiles
connected on either device. When the CP Sensor is disconnected and it is ready for
reconnection (e.g., when the CP Sensor detects some activity or when commanded by the
user), the CP Sensor should initiate a connection with the Collector.
For Collectors that may be used with one or more bikes, each with its own independent set of
sensors, refer to Section 7.4.
used to populate the White List to avoid connection to a Sensor installed on another of the
user’s nearby bikes.
The user interface on the Collector can also provide a mechanism to remove Sensors and to
add new Sensors to a bike definition to enhance the user experience. The Collector should
store the parameters (e.g., crank length, chain length, chain weight, and span length) of a CP
Sensor and provide a mechanism to set and/or retrieve those parameters from a CP Sensor,
typically upon user interaction.
8 Security Considerations
This section describes the security considerations for a CP Sensor and Collector.
All supported characteristics specified by the Cycling Power Service shall be set to LE Security
Mode 1 and either Security Level 1, 2, or 3.
If used, all characteristics exposed by the Device Information Service for use by this profile
should be set to the same security mode and level as the characteristics in the Cycling Power
Service.
The Collector shall accept any request by the CP Sensor for LE Security Mode 1 and either
Security Level 1, 2, or 3.
9.1 Modes
The Mode Procedures as defined in GAP describe requirements for both CP Sensor and
Collector involved. This profile further refines the requirements.
Table 9.1 shows the support status for GAP Modes in this profile.
Table 9.2 shows the support status for Idle Mode procedures within this profile.
11 References
[1] Cycling Power Service v1.1 or later
[2] Bluetooth Core Specification v4.0 with CSA2, CSA3, and CSA4 or later version of the Core
Specification.
[3] Characteristic and Descriptor descriptions are accessible via the Bluetooth SIG Assigned
Numbers.
[4] Device Information Service v1.1 or later
[5] Battery Service v1.0 or later
[6] Supplement to the Bluetooth Core Specification, Version 3 or later
CPP_v1.1
a) A magnitude-angle vector if the CP Sensor supports the Crank Revolution Data feature
and the Extreme Angles feature, as described in Section 12.1 or
b) A magnitude vector, as described in Section 12.2 (e.g., without angle or crank revolution
information).
The sampling rate referenced in Sections 12.1 and 12.2 is not necessarily the sampling rate at
which the CP Sensor 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. Typically, the data are down-
sampled to a sampling rate of 25 Hertz to 50 Hertz. This sampling rate value can be accessed
using the Request Sampling Rate procedure defined in Section 4.7.2.14.
If the CP Sensor supports the Crank Revolution Data feature and the Extreme Angles feature,
and when the Collector receives a Cycling Power Vector characteristic notification with the First
Crank Measurement Angle value present, representing the angle value of the first
Instantaneous Magnitude value in the Instantaneous Force Magnitude Array field (or
Instantaneous Torque Magnitude Array field), the Collector is able to recompose the first angle-
magnitude pair. In a typical case where there are more than one Instantaneous Magnitude
values present, the Collector would calculate angle-magnitude pairs for the rest of the
Instantaneous Magnitude values by:
a) Determining an average crank angular speed by using the latest received consecutive
Crank Revolution Data which have different Cumulative Crank Revolutions values, and
b) Dividing the angular crank speed by the Sample Rate value (see Section 4.7.2.14),
yielding the angle that the crank turned between consecutive samples, and
c) In some cases where the Instantaneous Magnitude values for a single crank rotation
(360 degrees) do not fit within a single packet, the next packet will be a continuation of
the array and will not contain the First Crank Measurement Angle field. Calculating the
cumulative angle for each value in the Instantaneous Force Magnitude Array (or
Instantaneous Torque Magnitude Array) data, yielding a complete set of angle-
magnitude pairs of a crank rotation, and
d) Repeating steps a), b), and c) as long as Cycling Power Vector data measurement is
active.
See Figure 12.1 for an example of the force (or torque) measurement during a crank revolution,
and see Figure 12.2 for a representation of the force measurement vs. crank angle.
When observed with the front wheel to the right of the pedals, a value of 0 degrees represents
the angle when the crank is in the 12 o'clock position and a value of 90 degrees represents the
angle, measured clockwise, when the crank points towards the front wheel in the 3 o'clock
position. The left crank sensor (if fitted) detects a value of 0 degrees when the crank it is
attached to is in the 12 o'clock position, and the right sensor (if fitted) detects a value of 0
degrees when the crank it is attached to is in its 12 o'clock position. Therefore, there is a
constant difference of 180 degrees between the right crank and the left crank position signals
(i.e., when the right crank is at 12 o'clock position, the left crank is at 6 o'clock position).
0°
270° 90°
CPP_v1.1
180°
The Instantaneous Magnitude values transmitted are represented with the sample points on top
of the Force curve in Newton.
If the CP Sensor does not support the Extreme Angles feature, then the Collector can still
display the force/torque vs. time (see Figure 12.3: for an example of raw force data from a
distributed cycling power system). Refer to Section 4.7.2.14 for more information on the
Sampling Rate at which the CP Sensor samples the transmitted the data. The Instantaneous
Magnitude values transmitted by each CP Sensor are represented with the sample points on top
of the Force curves in Newton.