Bluetooth GATT Characteristic Reference
Cross Trainer Data (0x2ACE)
The Cross Trainer Data characteristic is used to send training-related data to the Client from a cross trainer (Server).
Quick Summary
Payload length is 41 bytes. 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.
| Property | Value |
|---|---|
| Name | Cross Trainer Data |
| UUID | 0x2ACE |
| Type | org.bluetooth.characteristic.cross_trainer_data |
| XML Root | Characteristic |
| Source File | org.bluetooth.characteristic.cross_trainer_data.xml |
| Field Count | 21 |
Field Specification
Parsed field definitions from the source XML value structure.
| Field | Requirement | Format | Unit | Exponent | Notes |
|---|---|---|---|---|---|
| Flags | Mandatory | 24bit | - | - | - |
| Instantaneous Speed | C1 | uint16 | org.bluetooth.unit.velocity.kilometre_per_hour | -2 | Kilometer per hour with a resolution of 0.01 |
| Average Speed | C2 | uint16 | org.bluetooth.unit.velocity.kilometre_per_hour | -2 | Kilometer per hour with a resolution of 0.01 |
| Total Distance | C3 | uint24 | org.bluetooth.unit.length.metre | - | Meters with a resolution of 1 |
| Step Per Minute | C4 | uint16 | org.bluetooth.unit.step_per_minute | - | Step/minute with a resolution of 1 |
| Average Step Rate | C4 | uint16 | org.bluetooth.unit.step_per_minute | - | Step/minute with a resolution of 1 |
| Stride Count | C5 | uint16 | org.bluetooth.unit.unitless | -1 | Unitless with a resolution of 0.1 |
| Positive Elevation Gain | C6 | uint16 | org.bluetooth.unit.length.metre | - | Meters with a resolution of 1 |
| Negative Elevation Gain | C6 | uint16 | org.bluetooth.unit.length.metre | - | Meters with a resolution of 1 |
| Inclination | C7 | sint16 | org.bluetooth.unit.percentage | -1 | Percent with a resolution of 0.1 |
| Ramp Angle Setting | C7 | sint16 | org.bluetooth.unit.plane_angle.degree | -1 | Degree with a resolution of 0.1 |
| Resistance Level | C8 | sint16 | org.bluetooth.unit.unitless | -1 | Unitless with a resolution of 0.1 |
| Instantaneous Power | C9 | sint16 | org.bluetooth.unit.power.watt | - | Watts with a resolution of 1 |
| Average Power | C10 | sint16 | org.bluetooth.unit.power.watt | - | Watts with a resolution of 1 |
| Total Energy | C11 | uint16 | org.bluetooth.unit.energy.kilogram_calorie | - | Kilo Calorie with a resolution of 1 |
| Energy Per Hour | C11 | uint16 | org.bluetooth.unit.energy.kilogram_calorie | - | Kilo Calorie with a resolution of 1 |
| Energy Per Minute | C11 | uint8 | org.bluetooth.unit.energy.kilogram_calorie | - | Kilo Calorie with a resolution of 1 |
| Heart Rate | C12 | uint8 | org.bluetooth.unit.period.beats_per_minute | - | Beats per minute with a resolution of 1 |
| Metabolic Equivalent | C13 | uint8 | org.bluetooth.unit.metabolic_equivalent | -1 | Metabolic Equivalent with a resolution of 0.1 |
| Elapsed Time | C14 | uint16 | org.bluetooth.unit.time.second | - | Second with a resolution of 1 |
| Remaining Time | C15 | uint16 | org.bluetooth.unit.time.second | - | Second with a resolution of 1 |
Bit Map
Bit-level enumerations extracted from the XML BitField definition.
| Field | Bit | Size | Name | 0 Means | 1 Means |
|---|---|---|---|---|---|
| Flags | 0 | 1 | More Data | False | True |
| Flags | 1 | 1 | Average Speed present | False | True |
| Flags | 2 | 1 | Total Distance Present | False | True |
| Flags | 3 | 1 | Step Count present | False | True |
| Flags | 4 | 1 | Stride Count present | False | True |
| Flags | 5 | 1 | Elevation Gain present | False | True |
| Flags | 6 | 1 | Inclination and Ramp Angle Setting present | False | True |
| Flags | 7 | 1 | Resistance Level Present | False | True |
| Flags | 8 | 1 | Instantaneous Power present | False | True |
| Flags | 9 | 1 | Average Power present | False | True |
| Flags | 10 | 1 | Expended Energy present | False | True |
| Flags | 11 | 1 | Heart Rate present | False | True |
| Flags | 12 | 1 | Metabolic Equivalent present | False | True |
| Flags | 13 | 1 | Elapsed Time present | False | True |
| Flags | 14 | 1 | Remaining Time present | False | True |
| Flags | 15 | 1 | Movement Direction | Forward | Backward |
Byte Layout and Decode
Payload length is 41 bytes.
function decodePayload(dataView, offset = 0) {
// Parse flags (24bit) according to Bluetooth format rules.
const instantaneous_speed = dataView.getUint16(offset + 0, true);
const average_speed = dataView.getUint16(offset + 2, true);
// Parse total_distance (uint24) according to Bluetooth format rules.
const step_per_minute = dataView.getUint16(offset + 4, true);
const average_step_rate = dataView.getUint16(offset + 6, true);
const stride_count = dataView.getUint16(offset + 8, true);
const positive_elevation_gain = dataView.getUint16(offset + 10, true);
const negative_elevation_gain = dataView.getUint16(offset + 12, true);
const inclination = dataView.getInt16(offset + 14, true);
return { flags, instantaneous_speed, average_speed, total_distance, step_per_minute, average_step_rate };
}
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 Cross Trainer Data in Bluetooth GATT?
Cross Trainer Data is defined as a Bluetooth GATT characteristic entry with type org.bluetooth.characteristic.cross_trainer_data and UUID 0x2ACE.
What UUID identifies Cross Trainer Data?
The UUID for Cross Trainer Data is 0x2ACE.
How should I parse Cross Trainer Data?
Payload length is 41 bytes.
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.