VelocAI logo Bluetooth Explorer Documentation

Bluetooth GATT Characteristic Reference

Treadmill Data (0x2ACD)

org.bluetooth.characteristic.treadmill_data

The Treadmill Data characteristic is used to send training-related data to the Client from a treadmill (Server).

Quick Summary

Payload length is 34 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.

PropertyValue
NameTreadmill Data
UUID0x2ACD
Typeorg.bluetooth.characteristic.treadmill_data
XML RootCharacteristic
Source Fileorg.bluetooth.characteristic.treadmill_data.xml
Field Count19

Field Specification

Parsed field definitions from the source XML value structure.

Field Requirement Format Unit Exponent Notes
FlagsMandatory16bit---
Instantaneous SpeedC1uint16org.bluetooth.unit.velocity.kilometre_per_hour-2Kilometer per hour with a resolution of 0.01
Average SpeedC2uint16org.bluetooth.unit.velocity.kilometre_per_hour-2Kilometer per hour with a resolution of 0.01
Total DistanceC3uint24org.bluetooth.unit.length.metre-Meters with a resolution of 1
InclinationC4sint16org.bluetooth.unit.percentage-1Percent with a resolution of 0.1
Ramp Angle SettingC4sint16org.bluetooth.unit.plane_angle.degree-1Degree with a resolution of 0.1
Positive Elevation GainC5uint16org.bluetooth.unit.length.metre-1Meters with a resolution of 0.1
Negative Elevation GainC5uint16org.bluetooth.unit.length.metre-1Meters with a resolution of 0.1
Instantaneous PaceC6uint8org.bluetooth.unit.velocity.kilometre_per_minute-1Kilometer per minute with a resolution of 0.1
Average PaceC7uint8org.bluetooth.unit.velocity.kilometre_per_minute-1Kilometer per minute with a resolution of 0.1
Total EnergyC8uint16org.bluetooth.unit.energy.kilogram_calorie-Kilo Calorie with a resolution of 1
Energy Per HourC8uint16org.bluetooth.unit.energy.kilogram_calorie-Kilo Calorie with a resolution of 1
Energy Per MinuteC8uint8org.bluetooth.unit.energy.kilogram_calorie-Kilo Calorie with a resolution of 1
Heart RateC9uint8org.bluetooth.unit.period.beats_per_minute-Beats per minute with a resolution of 1
Metabolic EquivalentC10uint8org.bluetooth.unit.metabolic_equivalent-Metabolic Equivalent with a resolution of 0.1
Elapsed TimeC11uint16org.bluetooth.unit.time.second-Second with a resolution of 1
Remaining TimeC12uint16org.bluetooth.unit.time.second-Second with a resolution of 1
Force on BeltC13sint16org.bluetooth.unit.force.newton-Newton with a resolution of 1
Power OutputC13sint16org.bluetooth.unit.power.watt-Watts with a resolution of 1

Bit Map

Bit-level enumerations extracted from the XML BitField definition.

Field Bit Size Name 0 Means 1 Means
Flags01More DataFalseTrue
Flags11Average Speed presentFalseTrue
Flags21Total Distance PresentFalseTrue
Flags31Inclination and Ramp Angle Setting presentFalseTrue
Flags41Elevation Gain presentFalseTrue
Flags51Instantaneous Pace presentFalseTrue
Flags61Average Pace presentFalseTrue
Flags71Expended Energy presentFalseTrue
Flags81Heart Rate presentFalseTrue
Flags91Metabolic Equivalent presentFalseTrue
Flags101Elapsed Time presentFalseTrue
Flags111Remaining Time presentFalseTrue
Flags121Force on Belt and Power Output presentFalseTrue

Byte Layout and Decode

Payload length is 34 bytes.

function decodePayload(dataView, offset = 0) {
  // Parse flags (16bit) 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 inclination = dataView.getInt16(offset + 4, true);
  const ramp_angle_setting = dataView.getInt16(offset + 6, true);
  const positive_elevation_gain = dataView.getUint16(offset + 8, true);
  const negative_elevation_gain = dataView.getUint16(offset + 10, true);
  const instantaneous_pace = dataView.getUint8(offset + 12);
  const average_pace = dataView.getUint8(offset + 13);
  return { flags, instantaneous_speed, average_speed, total_distance, inclination, ramp_angle_setting };
}

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 Treadmill Data in Bluetooth GATT?

Treadmill Data is defined as a Bluetooth GATT characteristic entry with type org.bluetooth.characteristic.treadmill_data and UUID 0x2ACD.

What UUID identifies Treadmill Data?

The UUID for Treadmill Data is 0x2ACD.

How should I parse Treadmill Data?

Payload length is 34 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.