Cycling Power Vector (0x2A64): byte layout
GATT characteristic · org.bluetooth.characteristic.cycling_power_vector · read from the Bluetooth SIG’s repository on 2026-10-17 · commit 408f4a0 (2026-10-14)
Cycling Power Vector is Bluetooth GATT characteristic 0x2A64, org.bluetooth.characteristic.cycling_power_vector in the Bluetooth SIG's assigned numbers. The SIG's GATT Specification Supplement file lays its value out as 5 fields: Flags, Crank Revolution Data, First Crank Measurement Angle, Instantaneous Force Magnitude Array and Instantaneous Torque Magnitude Array. The first, Flags, is a boolean[8]; 4 of the others are present only when a bit of it is set as the field's text states, so after the first field whose size can change, offsets depend on the fields before them.
- UUID
- 0x2A64
- Identifier
org.bluetooth.characteristic.cycling_power_vector- The SIG’s description
- The Cycling Power Vector characteristic is used to represent power vector 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_vector.yaml
Byte layout: 5 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.
| Offset | Field | Type | Size | Present when | Unit |
|---|---|---|---|---|---|
| 0 | Flags | boolean[8] | 1 | Always (fixed size) | — |
| 1 | Crank Revolution Data | struct | 0 or 4 | Bit 0 of Flags is 1 | — |
| +0 | ↳ Cumulative Crank Revolutions | uint16 | 2 | Always (fixed size) | unitlessorg.bluetooth.unit.unitless |
| +2 | ↳ Last Crank Event Time | uint16 | 2 | Always (fixed size) | time (second)org.bluetooth.unit.time.second |
| Depends on Flags (bit 0) | First Crank Measurement Angle | uint16 | 0 or 2 | Bit 1 of Flags is 1 | plane angle (degree)org.bluetooth.unit.plane_angle.degree |
| Depends on Flags (bits 0 and 1) | Instantaneous Force Magnitude Array | sint16 [0–9] | 0–18 | Bit 2 of Flags is 1 | force (newton)org.bluetooth.unit.force.newton |
| Depends on the size of Crank Revolution Data, First Crank Measurement Angle and Instantaneous Force Magnitude Array | Instantaneous Torque Magnitude Array | sint16 [0–9] | 0–18 | Bit 3 of Flags is 1 | moment of force (newton metre)org.bluetooth.unit.moment_of_force.newton_metre |
Field notes
Each field’s text in the SIG’s file, line by line.
- Flags boolean[8] · 1
- See Flags
- Crank Revolution Data struct · 0 or 4
- See Crank Revolution DataPresent if bit 0 of Flags field is set to 1
- First Crank Measurement Angle uint16 · 0 or 2
- See First Crank Measurement AngleUnit: org.bluetooth.unit.plane_angle.degreePresent if bit 1 of Flags field is set to 1
- Instantaneous Force Magnitude Array sint16 [0–9] · 0–18
- Unit: org.bluetooth.unit.force.newtonPresent if bit 2 of Flags field is set to 1
- Instantaneous Torque Magnitude Array sint16 [0–9] · 0–18
- Base Unit: org.bluetooth.unit.moment_of_force.newton_metreRepresented values: M = 1, d = 0, b = -5Unit is 1/32 Newton meterPresent if bit 3 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.
| Bit | Description | Fields its condition names |
|---|---|---|
| 0 | Crank Revolution Data Present | Crank Revolution Data when 1 |
| 1 | First Crank Measurement Angle Present | First Crank Measurement Angle when 1 |
| 2 | Instantaneous Force Magnitude Array Present | Instantaneous Force Magnitude Array when 1 |
| 3 | Instantaneous Torque Magnitude Array Present | Instantaneous Torque Magnitude Array when 1 |
| 4–5 | Instantaneous Measurement Direction0b00 = Unknown0b01 = Tangential Component0b10 = Radial Component0b11 = Lateral Component | — |
| 6–7 | Reserved for Future Use | — |
Crank Revolution Data
The structure of this field is defined below.
| Field | Data type | Size | Description |
|---|---|---|---|
| Cumulative Crank Revolutions | uint16 | 2 | Unit: org.bluetooth.unit.unitless |
| Last Crank Event Time | uint16 | 2 | Base Unit: org.bluetooth.unit.time.secondRepresented values: M = 1, d = 0, b = -10Unit is 1/1024 second |
First Crank Measurement 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 a 3 o'clock position. The left crank sensor (if fitted) detects the 0° when the crank it is attached to is in the 12 o'clock position and the right sensor (if fitted) detects the 0° when the crank it is attached to is in its 12 o'clock position; thus, there is a constant 180° difference between the right crank and the left crank position signals.
Guides on this site
The metric Cycling Power Vector carries, on every platform this site covers — each type quoted in its platform's own words:
No guide on this site names 0x2A64 yet. The connected-devices guides cover pairing, subscribing and testing for the device types they do name.
Questions
- What is the UUID of the Cycling Power Vector characteristic?
- 0x2A64. The Bluetooth SIG's characteristic_uuids.yaml lists Cycling Power Vector as 0x2A64 with the identifier org.bluetooth.characteristic.cycling_power_vector. No file in the SIG's repository ties it to a service: the repository lists service and characteristic UUIDs separately.
- Which Cycling Power Vector fields are optional?
- 4 of its 5 fields have a published size that can be zero: Crank Revolution Data (0 or 4; Present if bit 0 of Flags field is set to 1); First Crank Measurement Angle (0 or 2; Present if bit 1 of Flags field is set to 1); Instantaneous Force Magnitude Array (0–18; Present if bit 2 of Flags field is set to 1); Instantaneous Torque Magnitude Array (0–18; Present if bit 3 of Flags field is set to 1). Flags (1) has a fixed size.
- What units does Cycling Power Vector use?
- The SIG's text names a unit for 3 of the 5 fields: First Crank Measurement Angle: plane angle (degree) (org.bluetooth.unit.plane_angle.degree); Instantaneous Force Magnitude Array: force (newton) (org.bluetooth.unit.force.newton); Instantaneous Torque Magnitude Array: moment of force (newton metre) (org.bluetooth.unit.moment_of_force.newton_metre).
- What do the bits of the Cycling Power Vector Flags field mean?
- The SIG defines them as: bit 0, Crank Revolution Data Present (Crank Revolution Data when 1); bit 1, First Crank Measurement Angle Present (First Crank Measurement Angle when 1); bit 2, Instantaneous Force Magnitude Array Present (Instantaneous Force Magnitude Array when 1); bit 3, Instantaneous Torque Magnitude Array Present (Instantaneous Torque Magnitude Array when 1); bit 4–5, Instantaneous Measurement Direction; 0b00 = Unknown; 0b01 = Tangential Component; 0b10 = Radial Component; 0b11 = Lateral Component. The remaining bits are reserved for future use.
Source
Read on 2026-10-17 from gss/org.bluetooth.characteristic.cycling_power_vector.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.