CGM Measurement (0x2AA7): byte layout
GATT characteristic · org.bluetooth.characteristic.cgm_measurement · read from the Bluetooth SIG’s repository on 2026-10-17 · commit 408f4a0 (2026-10-14)
CGM Measurement is Bluetooth GATT characteristic 0x2AA7, org.bluetooth.characteristic.cgm_measurement in the Bluetooth SIG's assigned numbers. The SIG's GATT Specification Supplement file lays its value out as 1 field: CGM Measurement Record(s). It carries a flags field (CGM Measurement Record › Flags), and 5 fields inside CGM Measurement Record and Sensor Status Annunciation are present only when one of its bits is set as the text states.
- UUID
- 0x2AA7
- Identifier
org.bluetooth.characteristic.cgm_measurement- The SIG’s description
- The CGM Measurement characteristic is used to represent one or more CGM Measurement Records.The structure of this characteristic is defined below.
- Service the SIG’s files tie it to
- None: no file in the repository lists this characteristic under a service.
- Referenced by
- CGM Status
- Source file
- gss/org.bluetooth.characteristic.cgm_measurement.yaml
Byte layout: 1 field
In the order the SIG’s structure lists them. Type and size are as published; sizes count octets except where a struct is marked as sized in bits. The offset is printed only where every earlier field has a fixed size; where an earlier field can be absent or vary, the cell names what it depends on. “Present when” is read from the field’s own “Present if” line, shown in full in the field notes below.
| Offset | Field | Type | Size | Present when | Unit |
|---|---|---|---|---|---|
| 0 | CGM Measurement Record(s) | struct | variable | Not stated in the field's text | — |
| +0 | ↳ Size | uint8 | 1 | Always (fixed size) | — |
| +1 | ↳ Flags | boolean[8] | 1 | Always (fixed size) | — |
| +2 | ↳ CGM Glucose Concentration | medfloat16 | 2 | Always (fixed size) | mass density (milligram per decilitre)org.bluetooth.unit.mass_density.milligram_per_decilitre |
| +4 | ↳ Time Offset | uint16 | 2 | Always (fixed size) | time (minute)org.bluetooth.unit.time.minute |
| +6 | ↳ Sensor Status Annunciation | boolean[8][3] | 0 to 3 | Not stated in the field's text | — |
| varies | ↳ CGM Trend Information | medfloat16 | 0 or 2 | Bit 0 of Flags is 1 | not an id in units.yamlorg.bluetooth.unit.milligram_per_decilitre_per_minute |
| varies | ↳ CGM Quality | medfloat16 | 0 or 2 | Bit 1 of Flags is 1 | percentageorg.bluetooth.unit.percentage |
| varies | ↳ E2E-CRC | uint16 | 0 or 2 | Present if E2E-CRC Supported bit in CGM Feature characteristic is set to 1 | — |
Field notes
Each field’s text in the SIG’s file, line by line.
- CGM Measurement Record(s) struct · variable
- A sequence of one or more CGM Measurement Records, concatenated as defined by the service.The structure of a CGM Measurement Record is defined in CGM Measurement Record.
Flags and value tables
The definitions the SIG’s file gives for its fields, every row as published. On a flags table the last column lists the fields whose “Present if” line names that bit.
CGM Measurement Record
The structure of a CGM Measurement Record is defined below.
| Field | Data type | Size | Description |
|---|---|---|---|
| Size | uint8 | 1 | Size of the CGM Measurement Record including this field. |
| Flags | boolean[8] | 1 | See Flags |
| CGM Glucose Concentration | medfloat16 | 2 | Glucose concentration.Unit: org.bluetooth.unit.mass_density.milligram_per_decilitre |
| Time Offset | uint16 | 2 | Minutes since the Session Start Time for the stored glucose concentration value. See Time Offset.Unit: org.bluetooth.unit.time.minute |
| Sensor Status Annunciation | boolean[8][3] | 0 to 3 | See Sensor Status Annunciation |
| CGM Trend Information | medfloat16 | 0 or 2 | Glucose trend rate since previous measurement.Unit:org.bluetooth.unit.milligram_per_decilitre_per_minutePresent if bit 0 of Flags field is set to 1 |
| CGM Quality | medfloat16 | 0 or 2 | CGM Quality information in percentage.Unit:org.bluetooth.unit.percentagePresent if bit 1 of Flags field is set to 1 |
| E2E-CRC | uint16 | 0 or 2 | CRC calculated over all fields except the E2E-CRC field itself.Present if E2E-CRC Supported bit in CGM Feature characteristic is set to 1 |
Flags
The bits of this field are defined below.
| Bit | Description | Fields its condition names |
|---|---|---|
| 0 | CGM Trend Information present | CGM Trend Information when 1 |
| 1 | CGM Quality present | CGM Quality when 1 |
| 2 | Reserved for Future Use | — |
| 3 | Reserved for Future Use | — |
| 4 | Reserved for Future Use | — |
| 5 | Sensor Status Annunciation field, Warning-Octet present | Warning when 1 |
| 6 | Sensor Status Annunciation field, Cal/Temp-Octet present | Cal/Temp when 1 |
| 7 | Sensor Status Annunciation field, Status-Octet present | Status when 1 |
Time Offset
The values of this field specify the relative time difference of the single CGM values to the Session Start Time.
| Value | Description |
|---|---|
| 0x0000–0xFFFF | Time offset in minutes since the Session Start Time (see CGM Session Start Time (0x2AAA)) |
Sensor Status Annunciation
The Sensor Status Annunciation field is composed of up to three octets: one for Status, one for Cal/Temp and one for Warning. An octet is only present if one or more bits are set to "1". The presence of each annunciation octet is indicated by the corresponding Flags field (see Flags). The Sensor Status Annunciation field is present for every CGM Measurement Record to which the status applies.
| Field | Data type | Size | Description |
|---|---|---|---|
| Status | boolean[8] | 0 or 1 | See StatusPresent if bit 7 of Flags field is set to 1 |
| Cal/Temp | boolean[8] | 0 or 1 | See Cal/TempPresent if bit 6 of Flags field is set to 1 |
| Warning | boolean[8] | 0 or 1 | See WarningPresent if bit 5 of Flags field is set to 1 |
Status
The bits of this field are defined below.
| Bit | Description | Fields its condition names |
|---|---|---|
| 0 | Session stopped | — |
| 1 | Device battery low | — |
| 2 | Sensor type incorrect for device | — |
| 3 | Sensor malfunction | — |
| 4 | Device Specific Alert | — |
| 5 | General device fault has occurred in the sensor | — |
| 6 | Reserved for Future Use | — |
| 7 | Reserved for Future Use | — |
Cal/Temp
The bits of this field are defined below.
| Bit | Description | Fields its condition names |
|---|---|---|
| 8 | Time synchronization between sensor and collector required | — |
| 9 | Calibration not allowed | — |
| 10 | Calibration recommended | — |
| 11 | Calibration required | — |
| 12 | Sensor temperature too high for valid test/result at time of measurement | — |
| 13 | Sensor temperature too low for valid test/result at time of measurement | — |
| 14 | Calibration Process Pending | — |
| 15 | Reserved for Future Use | — |
Warning
The bits of this field are defined below.
| Bit | Description | Fields its condition names |
|---|---|---|
| 16 | Sensor result lower than the Patient Low level | — |
| 17 | Sensor result higher than the Patient High level | — |
| 18 | Sensor result lower than the Hypo level | — |
| 19 | Sensor result higher than the Hyper level | — |
| 20 | Sensor Rate of Decrease exceeded | — |
| 21 | Sensor Rate of Increase exceeded | — |
| 22 | Sensor result lower than the device can process | — |
| 23 | Sensor result higher than the device can process | — |
Guides on this site
The metric CGM Measurement carries, on every platform this site covers — each type quoted in its platform's own words:
No guide on this site names 0x2AA7 yet. The connected-devices guides cover pairing, subscribing and testing for the device types they do name.
Questions
- What is the UUID of the CGM Measurement characteristic?
- 0x2AA7. The Bluetooth SIG's characteristic_uuids.yaml lists CGM Measurement as 0x2AA7 with the identifier org.bluetooth.characteristic.cgm_measurement. No file in the SIG's repository ties it to a service: the repository lists service and characteristic UUIDs separately. CGM Status refers to it in its own structure.
- Which CGM Measurement fields are optional?
- Its one top-level field has no size that can be zero. CGM Measurement Record(s) (variable) has a size that is not a plain number. Inside CGM Measurement Record, 4 fields' size can be zero: Sensor Status Annunciation (0 to 3; no “Present if” line in its text); CGM Trend Information (0 or 2; Present if bit 0 of Flags field is set to 1); CGM Quality (0 or 2; Present if bit 1 of Flags field is set to 1); E2E-CRC (0 or 2; Present if E2E-CRC Supported bit in CGM Feature characteristic is set to 1). Inside Sensor Status Annunciation, 3 fields' size can be zero: Status (0 or 1; Present if bit 7 of Flags field is set to 1); Cal/Temp (0 or 1; Present if bit 6 of Flags field is set to 1); Warning (0 or 1; Present if bit 5 of Flags field is set to 1).
- What do the bits of the CGM Measurement Flags field mean?
- The SIG defines them as: bit 0, CGM Trend Information present (CGM Trend Information when 1); bit 1, CGM Quality present (CGM Quality when 1); bit 5, Sensor Status Annunciation field, Warning-Octet present (Warning when 1); bit 6, Sensor Status Annunciation field, Cal/Temp-Octet present (Cal/Temp when 1); bit 7, Sensor Status Annunciation field, Status-Octet present (Status when 1). The remaining bits are reserved for future use.
Source
Read on 2026-10-17 from gss/org.bluetooth.characteristic.cgm_measurement.yaml and assigned_numbers/uuids/characteristic_uuids.yaml in the Bluetooth SIG’s public repository (branch main, commit 408f4a0, committed 2026-10-14), by scripts/fetch-bluetooth-gatt.mjs. The file’s notice says it is proprietary to Bluetooth SIG, that furnishing it grants no licence, and that it is subject to change without notice; it is © Bluetooth SIG, Inc., and its text is quoted here for identification. Generated by AIFitnessAPI, which is not affiliated with Bluetooth SIG; the SIG’s file remains the authority. The full notice and the conventions used on these pages are on the reference hub.