Skip to content
AF

Cycling Power Measurement (0x2A63): byte layout

GATT characteristic · org.bluetooth.characteristic.cycling_power_measurement · read from the Bluetooth SIG’s repository on 2026-10-17 · commit 408f4a0 (2026-10-14)

Cycling Power Measurement is Bluetooth GATT characteristic 0x2A63, org.bluetooth.characteristic.cycling_power_measurement in the Bluetooth SIG's assigned numbers. The SIG's GATT Specification Supplement file lays its value out as 12 fields: Flags, Instantaneous Power, Pedal Power Balance, Accumulated Torque, Wheel Revolution Data and 7 more. The first, Flags, is a boolean[16]; 10 of the others are present only when a bit of it is set as the field's text states, so after the first of those, a field's offset depends on which bits are set.

UUID
0x2A63
Identifier
org.bluetooth.characteristic.cycling_power_measurement
The SIG’s description
The Cycling Power Measurement characteristic is used to represent data related to a cycling power sensor.The structure of this characteristic is defined below.
Service the SIG’s files tie it to
None: no file in the repository lists this characteristic under a service.
Source file
gss/org.bluetooth.characteristic.cycling_power_measurement.yaml

Byte layout: 12 fields

In the order the SIG’s structure lists them. Type and size are as published; sizes count octets except where a struct is marked as sized in bits. The offset is printed only where every earlier field has a fixed size; where an earlier field can be absent or vary, the cell names what it depends on. “Present when” is read from the field’s own “Present if” line, shown in full in the field notes below.

OffsetFieldTypeSizePresent whenUnit
0Flagsboolean[16]2Always (fixed size)—
2Instantaneous Powersint162Always (fixed size)power (watt)org.bluetooth.unit.power.watt
4Pedal Power Balanceuint80 or 1Bit 0 of Flags is 1percentageorg.bluetooth.unit.percentage
Depends on Flags (bit 0)Accumulated Torqueuint160 or 2Bit 2 of Flags is 1moment of force (newton metre)org.bluetooth.unit.moment_of_force.newton_metre
Depends on Flags (bits 0 and 2)Wheel Revolution Datastruct0 or 6Bit 4 of Flags is 1—
+0↳ Cumulative Wheel Revolutionsuint324Always (fixed size)unitlessorg.bluetooth.unit.unitless
+4↳ Last Wheel Event Timeuint162Always (fixed size)time (second)org.bluetooth.unit.time.second
Depends on Flags (bits 0, 2 and 4)Crank Revolution Datastruct0 or 4Bit 5 of Flags is 1—
+0↳ Cumulative Crank Revolutionsuint162Always (fixed size)unitlessorg.bluetooth.unit.unitless
+2↳ Last Crank Event Timeuint162Always (fixed size)time (second)org.bluetooth.unit.time.second
Depends on Flags (bits 0, 2, 4 and 5)Extreme Force Magnitudesstruct0 or 4Bit 6 of Flags is 1—
+0↳ Maximum Force Magnitudesint162Always (fixed size)force (newton)org.bluetooth.unit.force.newton
+2↳ Minimum Force Magnitudesint162Always (fixed size)force (newton)org.bluetooth.unit.force.newton
Depends on Flags (bits 0, 2, 4, 5 and 6)Extreme Torque Magnitudesstruct0 or 4Bit 7 of Flags is 1—
+0↳ Maximum Torque Magnitudesint162Always (fixed size)moment of force (newton metre)org.bluetooth.unit.moment_of_force.newton_metre
+2↳ Minimum Torque Magnitudesint162Always (fixed size)moment of force (newton metre)org.bluetooth.unit.moment_of_force.newton_metre
Depends on Flags (bits 0, 2, 4, 5, 6 and 7)Extreme Anglesstruct0 or 3Bit 8 of Flags is 1—
+0 bits↳ Maximum Angleuint1212 bitsAlways (fixed size)plane angle (degree)org.bluetooth.unit.plane_angle.degree
+12 bits↳ Minimum Angleuint1212 bitsAlways (fixed size)plane angle (degree)org.bluetooth.unit.plane_angle.degree
Depends on Flags (bits 0, 2, 4, 5, 6, 7 and 8)Top Dead Spot Angleuint160 or 2Bit 9 of Flags is 1plane angle (degree)org.bluetooth.unit.plane_angle.degree
Depends on Flags (bits 0, 2, 4, 5, 6, 7, 8 and 9)Bottom Dead Spot Angleuint160 or 2Bit 10 of Flags is 1plane angle (degree)org.bluetooth.unit.plane_angle.degree
Depends on Flags (bits 0, 2, 4, 5, 6, 7, 8, 9 and 10)Accumulated Energyuint160 or 2Bit 11 of Flags is 1energy (joule)org.bluetooth.unit.energy.joule

Field notes

Each field’s text in the SIG’s file, line by line.

Flags boolean[16] · 2
See Flags
Instantaneous Power sint16 · 2
Unit: org.bluetooth.unit.power.watt
Pedal Power Balance uint8 · 0 or 1
Base Unit: org.bluetooth.unit.percentageRepresented values: M = 1, d = 0, b = -1Unit is 1/2 of a percentPresent if bit 0 of Flags field is set to 1
Accumulated Torque uint16 · 0 or 2
Base Unit: org.bluetooth.unit.moment_of_force.newton_metreRepresented values: M = 1, d = 0, b = -5Unit is 1/32 Newton meterPresent if bit 2 of Flags field is set to 1
Wheel Revolution Data struct · 0 or 6
See Wheel Revolution DataPresent if bit 4 of Flags field is set to 1
Crank Revolution Data struct · 0 or 4
See Crank Revolution DataPresent if bit 5 of Flags field is set to 1
Extreme Force Magnitudes struct · 0 or 4
See Extreme Force MagnitudesPresent if bit 6 of Flags field is set to 1
Extreme Torque Magnitudes struct · 0 or 4
See Extreme Torque MagnitudesPresent if bit 7 of Flags field is set to 1
Extreme Angles struct · 0 or 3
See Extreme AnglesPresent if bit 8 of Flags field is set to 1
Top Dead Spot Angle uint16 · 0 or 2
See Top and Bottom Dead Spot AnglesUnit: org.bluetooth.unit.plane_angle.degreePresent if bit 9 of Flags field is set to 1
Bottom Dead Spot Angle uint16 · 0 or 2
See Top and Bottom Dead Spot AnglesUnit: org.bluetooth.unit.plane_angle.degreePresent if bit 10 of Flags field is set to 1
Accumulated Energy uint16 · 0 or 2
Base Unit: org.bluetooth.unit.energy.jouleRepresented values: M = 1, d = 3, b = 0Unit is kilojoulePresent if bit 11 of Flags field is set to 1

Flags and value tables

The definitions the SIG’s file gives for its fields, every row as published. On a flags table the last column lists the fields whose “Present if” line names that bit.

Flags

The bits of this field are defined below.

BitDescriptionFields its condition names
0Pedal Power Balance PresentPedal Power Balance when 1
1Pedal Power Balance Reference0 = Unknown1 = Left—
2Accumulated Torque PresentAccumulated Torque when 1
3Accumulated Torque Source0 = Wheel based1 = Crank based—
4Wheel Revolution Data PresentWheel Revolution Data when 1
5Crank Revolution Data PresentCrank Revolution Data when 1
6Extreme Force Magnitudes PresentExtreme Force Magnitudes when 1
7Extreme Torque Magnitudes PresentExtreme Torque Magnitudes when 1
8Extreme Angles PresentExtreme Angles when 1
9Top Dead Spot Angle PresentTop Dead Spot Angle when 1
10Bottom Dead Spot Angle PresentBottom Dead Spot Angle when 1
11Accumulated Energy PresentAccumulated Energy when 1
12Offset Compensation Indicator0 = False1 = True—
13–15Reserved for Future Use—

Wheel Revolution Data

The structure of this field is defined below.

FieldData typeSizeDescription
Cumulative Wheel Revolutionsuint324Unit: org.bluetooth.unit.unitless
Last Wheel Event Timeuint162Base Unit: org.bluetooth.unit.time.secondRepresented values: M = 1, d = 0, b = -11Unit is 1/2048 second

Crank Revolution Data

The structure of this field is defined below.

FieldData typeSizeDescription
Cumulative Crank Revolutionsuint162Unit: org.bluetooth.unit.unitless
Last Crank Event Timeuint162Base Unit: org.bluetooth.unit.time.secondRepresented values: M = 1, d = 0, b = -10Unit is 1/1024 second

Extreme Force Magnitudes

The structure of this field is defined below.

FieldData typeSizeDescription
Maximum Force Magnitudesint162Unit: org.bluetooth.unit.force.newton
Minimum Force Magnitudesint162Unit: org.bluetooth.unit.force.newton

Extreme Torque Magnitudes

The structure of this field is defined below.

FieldData typeSizeDescription
Maximum Torque Magnitudesint162Base Unit: org.bluetooth.unit.moment_of_force.newton_metreRepresented values: M = 1, d = 0, b = -5Unit is 1/32 Newton meter
Minimum Torque Magnitudesint162Base Unit: org.bluetooth.unit.moment_of_force.newton_metreRepresented values: M = 1, d = 0, b = -5Unit is 1/32 Newton meter

Extreme Angles(sizes in bits, as the file marks)

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 0 degrees when the crank it is attached to is in the 12 o'clock position, and the right sensor (if fitted) detects 0 degrees when the crank it is attached to is in the 12 o'clock position; thus, there is a constant 180-degree difference between the right crank and the left crank position signals.When present, both subfields "Extreme Angles - Minimum Angle" and "Extreme Angles - Maximum Angle" are always present as a pair and are concatenated into a uint24 value (3 octets). As an example, if the Maximum Angle is 0xABC and the Minimum Angle is 0x123, the field value is represented as 0x123ABC.The structure of this field is defined below.

FieldData typeSizeDescription
Maximum Angleuint1212Unit: org.bluetooth.unit.plane_angle.degree
Minimum Angleuint1212Unit: org.bluetooth.unit.plane_angle.degree

Top and Bottom Dead Spot Angles fields

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 0 degrees when the crank it is attached to is in the 12 o'clock position, and the right sensor (if fitted) detects 0 degrees when the crank it is attached to is in the 12 o'clock position; thus, there is a constant 180-degree difference between the right crank and the left crank position signals.

Guides on this site

The metric Cycling Power Measurement carries, on every platform this site covers — each type quoted in its platform's own words:

The connected-device guides that name 0x2A63:

Questions

What is the UUID of the Cycling Power Measurement characteristic?
0x2A63. The Bluetooth SIG's characteristic_uuids.yaml lists Cycling Power Measurement as 0x2A63 with the identifier org.bluetooth.characteristic.cycling_power_measurement. No file in the SIG's repository ties it to a service: the repository lists service and characteristic UUIDs separately.
Which Cycling Power Measurement fields are optional?
10 of its 12 fields have a published size that can be zero: Pedal Power Balance (0 or 1; Present if bit 0 of Flags field is set to 1); Accumulated Torque (0 or 2; Present if bit 2 of Flags field is set to 1); Wheel Revolution Data (0 or 6; Present if bit 4 of Flags field is set to 1); Crank Revolution Data (0 or 4; Present if bit 5 of Flags field is set to 1); Extreme Force Magnitudes (0 or 4; Present if bit 6 of Flags field is set to 1); Extreme Torque Magnitudes (0 or 4; Present if bit 7 of Flags field is set to 1); Extreme Angles (0 or 3; Present if bit 8 of Flags field is set to 1); Top Dead Spot Angle (0 or 2; Present if bit 9 of Flags field is set to 1); Bottom Dead Spot Angle (0 or 2; Present if bit 10 of Flags field is set to 1); Accumulated Energy (0 or 2; Present if bit 11 of Flags field is set to 1). Flags (2) and Instantaneous Power (2) have a fixed size.
What units does Cycling Power Measurement use?
The SIG's text names a unit for 6 of the 12 fields: Instantaneous Power: power (watt) (org.bluetooth.unit.power.watt); Pedal Power Balance: percentage (org.bluetooth.unit.percentage); Accumulated Torque: moment of force (newton metre) (org.bluetooth.unit.moment_of_force.newton_metre); Top Dead Spot Angle: plane angle (degree) (org.bluetooth.unit.plane_angle.degree); Bottom Dead Spot Angle: plane angle (degree) (org.bluetooth.unit.plane_angle.degree); Accumulated Energy: energy (joule) (org.bluetooth.unit.energy.joule).
What do the bits of the Cycling Power Measurement Flags field mean?
The SIG defines them as: bit 0, Pedal Power Balance Present (Pedal Power Balance when 1); bit 1, Pedal Power Balance Reference; 0 = Unknown; 1 = Left; bit 2, Accumulated Torque Present (Accumulated Torque when 1); bit 3, Accumulated Torque Source; 0 = Wheel based; 1 = Crank based; bit 4, Wheel Revolution Data Present (Wheel Revolution Data when 1); bit 5, Crank Revolution Data Present (Crank Revolution Data when 1); bit 6, Extreme Force Magnitudes Present (Extreme Force Magnitudes when 1); bit 7, Extreme Torque Magnitudes Present (Extreme Torque Magnitudes when 1); bit 8, Extreme Angles Present (Extreme Angles when 1); bit 9, Top Dead Spot Angle Present (Top Dead Spot Angle when 1); bit 10, Bottom Dead Spot Angle Present (Bottom Dead Spot Angle when 1); bit 11, Accumulated Energy Present (Accumulated Energy when 1); bit 12, Offset Compensation Indicator; 0 = False; 1 = True. The remaining bits are reserved for future use.

Source

Read on 2026-10-17 from gss/org.bluetooth.characteristic.cycling_power_measurement.yaml and assigned_numbers/uuids/characteristic_uuids.yaml in the Bluetooth SIG’s public repository (branch main, commit 408f4a0, committed 2026-10-14), by scripts/fetch-bluetooth-gatt.mjs. The file’s notice says it is proprietary to Bluetooth SIG, that furnishing it grants no licence, and that it is subject to change without notice; it is © Bluetooth SIG, Inc., and its text is quoted here for identification. Generated by AIFitnessAPI, which is not affiliated with Bluetooth SIG; the SIG’s file remains the authority. The full notice and the conventions used on these pages are on the reference hub.

← All Bluetooth GATT characteristics