Bluetooth GATT Characteristic Reference
Glucose Measurement (0x2A18)
The Glucose Measurement characteristic is a variable length structure containing a Flags field, a Sequence Number field, a Base Time field and, based upon the contents of the Flags field, may contain a Time Offset field, Glucose Concentration field, Type-Sample Location field and a Sensor Status Annunciation field.
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.
| Property | Value |
|---|---|
| Name | Glucose Measurement |
| UUID | 0x2A18 |
| Type | org.bluetooth.characteristic.glucose_measurement |
| XML Root | Characteristic |
| Source File | org.bluetooth.characteristic.glucose_measurement.xml |
| Field Count | 9 |
Field Specification
Parsed field definitions from the source XML value structure.
| Field | Requirement | Format | Unit | Exponent | Notes |
|---|---|---|---|---|---|
| Flags | Mandatory | 8bit | - | - | These flags define which data fields are present in the Characteristic value |
| Sequence Number | Mandatory | uint16 | - | - | - |
| Base Time | Mandatory | N/A | - | - | - |
| Time Offset | C1 | sint16 | org.bluetooth.unit.time.minute | - | C1: Field exists if the key of bit 0 of the Flags field is set to 1 |
| Glucose Concentration - units of kg/L | C2 | SFLOAT | org.bluetooth.unit.mass_density.kilogram_per_litre | - | C2: Field exists if the key of bit 1 of the Flags field is set to 1, C3: Field exists if the key of bit 2 of the Flags field is set to 0 |
| Glucose Concentration - units of mol/L | C2 | SFLOAT | org.bluetooth.unit.mass_density.mole_per_litre | - | C2: Field exists if the key of bit 1 of the Flags field is set to 1, C4: Field exists if the key of bit 2 of the Flags field is set to 1 |
| Type | C2 | nibble | - | - | C2: Field exists if the key of bit 1 of the Flags field is set to 1 |
| Sample Location | C2 | nibble | - | - | C2: Field exists if the key of bit 1 of the Flags field is set to 1 |
| Sensor Status Annunciation | C5 | 16bit | - | - | C5: Field exists if the key of bit 3 of the Flags field is set to 1 |
Bit Map
Bit-level enumerations extracted from the XML BitField definition.
| Field | Bit | Size | Name | 0 Means | 1 Means |
|---|---|---|---|---|---|
| Flags | 0 | 1 | Time Offset Present | False | True |
| Flags | 1 | 1 | Glucose Concentration, Type and Sample Location Present | False | True |
| Flags | 2 | 1 | Glucose Concentration Units | kg/L | mol/L |
| Flags | 3 | 1 | Sensor Status Annunciation Present | False | True |
| Flags | 4 | 1 | Context Information Follows | False | True |
| Sensor Status Annunciation | 0 | 1 | Device battery low at time of measurement | False | True |
| Sensor Status Annunciation | 1 | 1 | Sensor malfunction or faulting at time of measurement | False | True |
| Sensor Status Annunciation | 2 | 1 | Sample size for blood or control solution insufficient at time of measurement | False | True |
| Sensor Status Annunciation | 3 | 1 | Strip insertion error | False | True |
| Sensor Status Annunciation | 4 | 1 | Strip type incorrect for device | False | True |
| Sensor Status Annunciation | 5 | 1 | Sensor result higher than the device can process | False | True |
| Sensor Status Annunciation | 6 | 1 | Sensor result lower than the device can process | False | True |
| Sensor Status Annunciation | 7 | 1 | Sensor temperature too high for valid test/result at time of measurement | False | True |
| Sensor Status Annunciation | 8 | 1 | Sensor temperature too low for valid test/result at time of measurement | False | True |
| Sensor Status Annunciation | 9 | 1 | Sensor read interrupted because strip was pulled too soon at time of measurement | False | True |
| Sensor Status Annunciation | 10 | 1 | General device fault has occurred in the sensor | False | True |
| Sensor Status Annunciation | 11 | 1 | Time fault has occurred in the sensor and time may be inaccurate | False | True |
Byte Layout and Decode
Payload length is profile-defined or variable based on field formats.
function decodePayload(dataView, offset = 0) {
// Parse flags (8bit) according to Bluetooth format rules.
const sequence_number = dataView.getUint16(offset + 0, true);
// Parse base_time (N/A) according to Bluetooth format rules.
const time_offset = dataView.getInt16(offset + 2, true);
// Parse glucose_concentration_units_of_kg_l (SFLOAT) according to Bluetooth format rules.
// Parse glucose_concentration_units_of_mol_l (SFLOAT) according to Bluetooth format rules.
// Parse type (nibble) according to Bluetooth format rules.
// Parse sample_location (nibble) according to Bluetooth format rules.
// Parse sensor_status_annunciation (16bit) according to Bluetooth format rules.
return { flags, sequence_number, base_time, time_offset, glucose_concentration_units_of_kg_l, glucose_concentration_units_of_mol_l };
}
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 Glucose Measurement in Bluetooth GATT?
Glucose Measurement is defined as a Bluetooth GATT characteristic entry with type org.bluetooth.characteristic.glucose_measurement and UUID 0x2A18.
What UUID identifies Glucose Measurement?
The UUID for Glucose Measurement is 0x2A18.
How should I parse Glucose 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.