VelocAI logo Bluetooth Explorer Documentation

Bluetooth GATT Characteristic Reference

Glucose Measurement (0x2A18)

org.bluetooth.characteristic.glucose_measurement

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.

PropertyValue
NameGlucose Measurement
UUID0x2A18
Typeorg.bluetooth.characteristic.glucose_measurement
XML RootCharacteristic
Source Fileorg.bluetooth.characteristic.glucose_measurement.xml
Field Count9

Field Specification

Parsed field definitions from the source XML value structure.

Field Requirement Format Unit Exponent Notes
FlagsMandatory8bit--These flags define which data fields are present in the Characteristic value
Sequence NumberMandatoryuint16---
Base TimeMandatoryN/A---
Time OffsetC1sint16org.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/LC2SFLOATorg.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/LC2SFLOATorg.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
TypeC2nibble--C2: Field exists if the key of bit 1 of the Flags field is set to 1
Sample LocationC2nibble--C2: Field exists if the key of bit 1 of the Flags field is set to 1
Sensor Status AnnunciationC516bit--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
Flags01Time Offset PresentFalseTrue
Flags11Glucose Concentration, Type and Sample Location PresentFalseTrue
Flags21Glucose Concentration Unitskg/Lmol/L
Flags31Sensor Status Annunciation PresentFalseTrue
Flags41Context Information FollowsFalseTrue
Sensor Status Annunciation01Device battery low at time of measurementFalseTrue
Sensor Status Annunciation11Sensor malfunction or faulting at time of measurementFalseTrue
Sensor Status Annunciation21Sample size for blood or control solution insufficient at time of measurementFalseTrue
Sensor Status Annunciation31Strip insertion errorFalseTrue
Sensor Status Annunciation41Strip type incorrect for deviceFalseTrue
Sensor Status Annunciation51Sensor result higher than the device can processFalseTrue
Sensor Status Annunciation61Sensor result lower than the device can processFalseTrue
Sensor Status Annunciation71Sensor temperature too high for valid test/result at time of measurementFalseTrue
Sensor Status Annunciation81Sensor temperature too low for valid test/result at time of measurementFalseTrue
Sensor Status Annunciation91Sensor read interrupted because strip was pulled too soon at time of measurementFalseTrue
Sensor Status Annunciation101General device fault has occurred in the sensorFalseTrue
Sensor Status Annunciation111Time fault has occurred in the sensor and time may be inaccurateFalseTrue

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.