VelocAI logo Bluetooth Explorer Documentation

Bluetooth GATT Characteristic Reference

Cycling Power Measurement (0x2A63)

org.bluetooth.characteristic.cycling_power_measurement

The Cycling Power Measurement characteristic is a variable length structure containing a Flags field, an Instantaneous Power field and, based on the contents of the Flags field, may contain one or more additional fields as shown in the table below.

Quick Summary

Payload length is profile-defined or variable based on field formats. This page is generated from official GATT XML and presented as implementation-ready guidance.

At a Glance

Key reference details for BLE implementation, interoperability testing, and AI-assisted troubleshooting.

PropertyValue
NameCycling Power Measurement
UUID0x2A63
Typeorg.bluetooth.characteristic.cycling_power_measurement
XML RootCharacteristic
Source Fileorg.bluetooth.characteristic.cycling_power_measurement.xml
Field Count17

Field Specification

Parsed field definitions from the source XML value structure.

Field Requirement Format Unit Exponent Notes
FlagsMandatory16bit---
Instantaneous PowerMandatorysint16org.bluetooth.unit.power.watt0Unit is in watts with a resolution of 1.
Pedal Power BalanceOptionaluint8org.bluetooth.unit.percentage-Unit is in percentage with a resolution of 1/2.
Accumulated TorqueOptionaluint16org.bluetooth.unit.moment_of_force.newton_metre-Unit is in newton metres with a resolution of 1/32.
Wheel Revolution Data - Cumulative Wheel RevolutionsC1uint32org.bluetooth.unit.unitless0Unitless
Wheel Revolution Data - Last Wheel Event TimeC1uint16org.bluetooth.unit.time.second-Unit is in seconds with a resolution of 1/2048.
Crank Revolution Data- Cumulative Crank RevolutionsC2uint16org.bluetooth.unit.unitless0Unitless
Crank Revolution Data- Last Crank Event TimeC2uint16org.bluetooth.unit.time.second-Unit is in seconds with a resolution of 1/1024.
Extreme Force Magnitudes - Maximum Force MagnitudeC3sint16org.bluetooth.unit.force.newton0Unit is in newtons with a resolution of 1.
Extreme Force Magnitudes - Minimum Force MagnitudeC3sint16org.bluetooth.unit.force.newton0Unit is in newtons with a resolution of 1.
Extreme Torque Magnitudes- Maximum Torque MagnitudeC4sint16org.bluetooth.unit.moment_of_force.newton_metre-Unit is in newton metres with a resolution of 1/32.
Extreme Torque Magnitudes- Minimum Torque MagnitudeC4sint16org.bluetooth.unit.moment_of_force.newton_metre-Unit is in newton metres with a resolution of 1/32.
Extreme Angles - Maximum AngleC5uint12org.bluetooth.unit.plane_angle.degree0Unit is in degrees with a resolution of 1
Extreme Angles - Minimum AngleC5uint12org.bluetooth.unit.plane_angle.degree0Unit is in degrees with a resolution of 1.
Top Dead Spot AngleOptionaluint16org.bluetooth.unit.plane_angle.degree0Unit is in degrees with a resolution of 1.
Bottom Dead Spot AngleOptionaluint16org.bluetooth.unit.plane_angle.degree0Unit is in degrees with a resolution of 1.
Accumulated EnergyOptionaluint16org.bluetooth.unit.energy.joule3Unit is in kilojoules with a resolution of 1.

Bit Map

Bit-level enumerations extracted from the XML BitField definition.

Field Bit Size Name 0 Means 1 Means
Flags01Pedal Power Balance PresentFalseTrue
Flags11Pedal Power Balance ReferenceUnknownLeft
Flags21Accumulated Torque PresentFalseTrue
Flags31Accumulated Torque SourceWheel BasedCrank Based
Flags41Wheel Revolution Data PresentFalseTrue
Flags51Crank Revolution Data PresentFalseTrue
Flags61Extreme Force Magnitudes PresentFalseTrue
Flags71Extreme Torque Magnitudes PresentFalseTrue
Flags81Extreme Angles PresentFalseTrue
Flags91Top Dead Spot Angle PresentFalseTrue
Flags101Bottom Dead Spot Angle PresentFalseTrue
Flags111Accumulated Energy PresentFalseTrue
Flags121Offset Compensation IndicatorFalseTrue

Byte Layout and Decode

Payload length is profile-defined or variable based on field formats.

function decodePayload(dataView, offset = 0) {
  // Parse flags (16bit) according to Bluetooth format rules.
  const instantaneous_power = dataView.getInt16(offset + 0, true);
  const pedal_power_balance = dataView.getUint8(offset + 2);
  const accumulated_torque = dataView.getUint16(offset + 3, true);
  const wheel_revolution_data_cumulative_wheel_revolutions = dataView.getUint32(offset + 5, true);
  const wheel_revolution_data_last_wheel_event_time = dataView.getUint16(offset + 9, true);
  const crank_revolution_data_cumulative_crank_revolutions = dataView.getUint16(offset + 11, true);
  const crank_revolution_data_last_crank_event_time = dataView.getUint16(offset + 13, true);
  const extreme_force_magnitudes_maximum_force_magnitude = dataView.getInt16(offset + 15, true);
  const extreme_force_magnitudes_minimum_force_magnitude = dataView.getInt16(offset + 17, true);
  return { flags, instantaneous_power, pedal_power_balance, accumulated_torque, wheel_revolution_data_cumulative_wheel_revolutions, wheel_revolution_data_last_wheel_event_time };
}

Use Cases and Integration Notes

BLE Telemetry

Map characteristic values into dashboards and alerts for device observability.

Firmware Regression

Compare decoded fields across builds to detect protocol or scaling changes.

App Integration

Build stable parsing paths that convert raw payloads into typed app models.

Implementation Checklist

  • Validate payload length and mandatory fields before decode.
  • Decode with Bluetooth-specified signedness, unit, and exponent handling.
  • Convert units at presentation boundaries to avoid drift in business logic.
  • Persist raw packets and decoded values for reproducible troubleshooting.

FAQ

What is Cycling Power Measurement in Bluetooth GATT?

Cycling Power Measurement is defined as a Bluetooth GATT characteristic entry with type org.bluetooth.characteristic.cycling_power_measurement and UUID 0x2A63.

What UUID identifies Cycling Power Measurement?

The UUID for Cycling Power Measurement is 0x2A63.

How should I parse Cycling Power Measurement?

Payload length is profile-defined or variable based on field formats.

Where does this definition come from?

This page is generated from the Bluetooth SIG mirror XML in the oesmith/gatt-xml repository.

How does this page support BLE implementation?

The page combines structured tables, practical Q&A, and JSON-LD metadata to help teams validate integrations and troubleshoot consistently.