nRF Connect SDK Bare Metal API 2.0.99
Loading...
Searching...
No Matches
ble_cgms.h
1/*
2 * Copyright (c) 2016 - 2025 Nordic Semiconductor ASA
3 *
4 * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause
5 */
22#ifndef BLE_CGMS_H__
23#define BLE_CGMS_H__
24
25#include <stdint.h>
26
27#include <bm/bluetooth/ble_common.h>
28#include <bm/bluetooth/ble_gq.h>
29#include <bm/bluetooth/ble_racp.h>
30#include <bm/softdevice_handler/nrf_sdh_ble.h>
31#include <zephyr/sys/util.h>
32
33#ifdef __cplusplus
34extern "C" {
35#endif
36
43#define BLE_CGMS_DEF(_name) \
44 static struct ble_cgms _name; \
45 NRF_SDH_BLE_OBSERVER(_name##_obs, ble_cgms_on_ble_evt, &_name, HIGH)
46
48#define BLE_CGMS_CONFIG_SEC_MODE_DEFAULT \
49 { \
50 .feature_char.read = BLE_GAP_CONN_SEC_MODE_ENC_NO_MITM, \
51 .status_char.read = BLE_GAP_CONN_SEC_MODE_ENC_NO_MITM, \
52 .srt_char.read = BLE_GAP_CONN_SEC_MODE_ENC_NO_MITM, \
53 .meas_char = { \
54 .cccd_write = BLE_GAP_CONN_SEC_MODE_ENC_NO_MITM, \
55 }, \
56 .racp_char = { \
57 .write = BLE_GAP_CONN_SEC_MODE_ENC_NO_MITM, \
58 .cccd_write = BLE_GAP_CONN_SEC_MODE_ENC_NO_MITM, \
59 }, \
60 .socp_char = { \
61 .write = BLE_GAP_CONN_SEC_MODE_ENC_NO_MITM, \
62 .cccd_write = BLE_GAP_CONN_SEC_MODE_ENC_NO_MITM, \
63 }, \
64 .sst_char = { \
65 .read = BLE_GAP_CONN_SEC_MODE_ENC_NO_MITM, \
66 .write = BLE_GAP_CONN_SEC_MODE_ENC_NO_MITM, \
67 }, \
68 }
69
74#define BLE_CGMS_DATA_MAX_LEN_CALC(mtu_size) ((mtu_size) - ATT_OPCODE_LEN - ATT_HANDLE_LEN)
75
81#define BLE_CGMS_FEAT_CALIBRATION_SUPPORTED BIT(0)
83#define BLE_CGMS_FEAT_PATIENT_HIGH_LOW_ALERTS_SUPPORTED BIT(1)
85#define BLE_CGMS_FEAT_HYPO_ALERTS_SUPPORTED BIT(2)
87#define BLE_CGMS_FEAT_HYPER_ALERTS_SUPPORTED BIT(3)
89#define BLE_CGMS_FEAT_RATE_OF_INCREASE_DECREASE_ALERTS_SUPPORTED BIT(4)
91#define BLE_CGMS_FEAT_DEVICE_SPECIFIC_ALERT_SUPPORTED BIT(5)
93#define BLE_CGMS_FEAT_SENSOR_MALFUNCTION_DETECTION_SUPPORTED BIT(6)
95#define BLE_CGMS_FEAT_SENSOR_TEMPERATURE_HIGH_LOW_DETECTION_SUPPORTED BIT(7)
97#define BLE_CGMS_FEAT_SENSOR_RESULT_HIGH_LOW_DETECTION_SUPPORTED BIT(8)
99#define BLE_CGMS_FEAT_LOW_BATTERY_DETECTION_SUPPORTED BIT(9)
101#define BLE_CGMS_FEAT_SENSOR_TYPE_ERROR_DETECTION_SUPPORTED BIT(10)
103#define BLE_CGMS_FEAT_GENERAL_DEVICE_FAULT_SUPPORTED BIT(11)
105#define BLE_CGMS_FEAT_E2E_CRC_SUPPORTED BIT(12)
107#define BLE_CGMS_FEAT_MULTIPLE_BOND_SUPPORTED BIT(13)
109#define BLE_CGMS_FEAT_MULTIPLE_SESSIONS_SUPPORTED BIT(14)
111#define BLE_CGMS_FEAT_CGM_TREND_INFORMATION_SUPPORTED BIT(15)
113#define BLE_CGMS_FEAT_CGM_QUALITY_SUPPORTED BIT(16)
121#define BLE_CGMS_MEAS_TYPE_CAP_BLOOD 0x01
123#define BLE_CGMS_MEAS_TYPE_CAP_PLASMA 0x02
125#define BLE_CGMS_MEAS_TYPE_VEN_BLOOD 0x03
127#define BLE_CGMS_MEAS_TYPE_VEN_PLASMA 0x04
129#define BLE_CGMS_MEAS_TYPE_ART_BLOOD 0x05
131#define BLE_CGMS_MEAS_TYPE_ART_PLASMA 0x06
133#define BLE_CGMS_MEAS_TYPE_UNDET_BLOOD 0x07
135#define BLE_CGMS_MEAS_TYPE_UNDET_PLASMA 0x08
137#define BLE_CGMS_MEAS_TYPE_FLUID 0x09
139#define BLE_CGMS_MEAS_TYPE_CONTROL 0x0A
147#define BLE_CGMS_MEAS_LOC_FINGER 0x01
149#define BLE_CGMS_MEAS_LOC_AST 0x02
151#define BLE_CGMS_MEAS_LOC_EAR 0x03
153#define BLE_CGMS_MEAS_LOC_CONTROL 0x04
155#define BLE_CGMS_MEAS_LOC_SUB_TISSUE 0x05
157#define BLE_CGMS_MEAS_LOC_NOT_AVAIL 0x0F
165#define BLE_CGMS_STATUS_SESSION_STOPPED BIT(0)
167#define BLE_CGMS_STATUS_DEVICE_BATTERY_LOW BIT(1)
169#define BLE_CGMS_STATUS_SENSOR_TYPE_INCORRECT_FOR_DEVICE BIT(2)
171#define BLE_CGMS_STATUS_SENSOR_MALFUNCTION BIT(3)
173#define BLE_CGMS_STATUS_DEVICE_SPECIFIC_ALERT BIT(4)
175#define BLE_CGMS_STATUS_GENERAL_DEVICE_FAULT BIT(5)
183#define BLE_CGMS_FLAG_TREND_INFO_PRESENT BIT(0)
185#define BLE_CGMS_FLAGS_QUALITY_PRESENT BIT(1)
187#define BLE_CGMS_STATUS_FLAGS_WARNING_OCT_PRESENT BIT(5)
189#define BLE_CGMS_STATUS_FLAGS_CALTEMP_OCT_PRESENT BIT(6)
191#define BLE_CGMS_STATUS_FLAGS_STATUS_OCT_PRESENT BIT(7)
200#define BLE_CGMS_CRC_LEN 2
201
203#define BLE_CGMS_MEAS_LEN_MAX BLE_CGMS_DATA_MAX_LEN_CALC(CONFIG_NRF_SDH_BLE_GATT_MAX_MTU_SIZE)
204
209#define BLE_CGMS_MEAS_REC_LEN_MAX 15
213#define BLE_CGMS_MEAS_REC_LEN_MIN 6
214
219#define BLE_CGMS_MEAS_REC_PER_NOTIF_MAX (BLE_CGMS_MEAS_LEN_MAX / BLE_CGMS_MEAS_REC_LEN_MIN)
220
224#define BLE_CGMS_FEATURE_LEN 6
225
229#define BLE_CGMS_STATUS_LEN 7
230
234#define BLE_CGMS_SST_LEN 11
235
239#define BLE_CGMS_SRT_LEN 4
240
242#define BLE_CGMS_SOCP_OPERAND_MAX 17
243
247#define BLE_CGMS_SOCP_LEN 20
248
253#define BLE_CGMS_MAX_CALIB_LEN 10
254
256#define BLE_CGMS_CALIBS_NB_MAX 5
257
259#define BLE_CGMS_RACP_PENDING_OPERANDS_MAX 2
294
295 /* ble_cgms_enums */
296
309 uint16_t conn_handle;
310 union {
312 struct {
314 uint32_t reason;
316 };
317};
318
319 /* ble_cgms_structs */
320
327struct ble_cgms;
328
334typedef void (*ble_cgms_evt_handler_t)(struct ble_cgms *cgms, const struct ble_cgms_evt *evt);
335
336 /* ble_cgms_types */
337
346 uint8_t warning;
348 uint8_t calib_temp;
350 uint8_t status;
351};
352
372
377};
378
382 uint32_t feature;
384 uint8_t type;
387};
388
396
404 const struct ble_gq *gatt_queue;
414 struct {
416 struct {
418 ble_gap_conn_sec_mode_t read;
419 } feature_char;
421 struct {
423 ble_gap_conn_sec_mode_t read;
424 } status_char;
426 struct {
430 ble_gap_conn_sec_mode_t read;
431 } srt_char;
433 struct {
435 ble_gap_conn_sec_mode_t cccd_write;
436 } meas_char;
438 struct {
442 ble_gap_conn_sec_mode_t write;
446 ble_gap_conn_sec_mode_t cccd_write;
447 } racp_char;
449 struct {
453 ble_gap_conn_sec_mode_t write;
457 ble_gap_conn_sec_mode_t cccd_write;
458 } socp_char;
460 struct {
464 ble_gap_conn_sec_mode_t read;
468 ble_gap_conn_sec_mode_t write;
469 } sst_char;
471};
472
476 uint8_t opcode;
478 uint8_t req_opcode;
480 uint8_t rsp_code;
484 uint8_t size_val;
485};
486
492
515
519 ble_gatts_char_handles_t measurement;
521 ble_gatts_char_handles_t feature;
523 ble_gatts_char_handles_t status;
525 ble_gatts_char_handles_t sst;
527 ble_gatts_char_handles_t srt;
529 ble_gatts_char_handles_t racp;
531 ble_gatts_char_handles_t socp;
532};
533
569
590uint32_t ble_cgms_init(struct ble_cgms *cgms, const struct ble_cgms_config *cgms_init);
591
605void ble_cgms_on_ble_evt(const ble_evt_t *ble_evt, void *ble_cgms);
606
620uint32_t ble_cgms_meas_create(struct ble_cgms *cgms, struct ble_cgms_rec *rec);
621
631uint32_t ble_cgms_conn_handle_assign(struct ble_cgms *cgms, uint16_t conn_handle);
632
643uint32_t ble_cgms_update_status(struct ble_cgms *cgms, struct ble_cgms_status *status);
644
656uint32_t ble_cgms_srt_set(struct ble_cgms *cgms, uint16_t run_time);
657
658 /* ble_cgms_functions */
659
660#ifdef __cplusplus
661}
662#endif
663
664#endif /* BLE_CGMS_H__ */
665
ble_cgms_evt_type
CGM Service events.
Definition ble_cgms.h:268
@ BLE_CGMS_EVT_WRITE_COMM_INTERVAL
Glucose value write communication interval.
Definition ble_cgms.h:288
@ BLE_CGMS_EVT_NOTIFICATION_DISABLED
Glucose value notification disabled.
Definition ble_cgms.h:276
@ BLE_CGMS_EVT_STOP_SESSION
Glucose value notification stop session.
Definition ble_cgms.h:284
@ BLE_CGMS_EVT_START_SESSION
Glucose value notification start session.
Definition ble_cgms.h:280
@ BLE_CGMS_EVT_NOTIFICATION_ENABLED
Glucose value notification enabled.
Definition ble_cgms.h:272
@ BLE_CGMS_EVT_ERROR
Error.
Definition ble_cgms.h:292
uint32_t ble_cgms_update_status(struct ble_cgms *cgms, struct ble_cgms_status *status)
Update the CGM status characteristic value.
uint32_t ble_cgms_srt_set(struct ble_cgms *cgms, uint16_t run_time)
Set the Session Run Time characteristic value.
void ble_cgms_on_ble_evt(const ble_evt_t *ble_evt, void *ble_cgms)
Bluetooth LE event handler for the Continuous Glucose Monitoring Service.
uint32_t ble_cgms_conn_handle_assign(struct ble_cgms *cgms, uint16_t conn_handle)
Assign a connection handle to a CGM Service instance.
uint32_t ble_cgms_meas_create(struct ble_cgms *cgms, struct ble_cgms_rec *rec)
Report a new glucose measurement to the CGM Service module.
uint32_t ble_cgms_init(struct ble_cgms *cgms, const struct ble_cgms_config *cgms_init)
Initialize a CGM Service instance.
void(* ble_cgms_evt_handler_t)(struct ble_cgms *cgms, const struct ble_cgms_evt *evt)
CGM Service event handler type.
Definition ble_cgms.h:334
#define BLE_CGMS_SOCP_OPERAND_MAX
Definition ble_cgms.h:242
#define BLE_CGMS_MAX_CALIB_LEN
Definition ble_cgms.h:253
#define BLE_CGMS_CALIBS_NB_MAX
Definition ble_cgms.h:256
#define BLE_CGMS_RACP_PENDING_OPERANDS_MAX
Definition ble_cgms.h:259
void(* ble_gq_evt_handler_t)(const struct ble_gq_req *req, struct ble_gq_evt *evt)
Event handler type.
Definition ble_gq.h:164
uint8_t value[10]
Definition ble_cgms.h:490
Calibration value.
Definition ble_cgms.h:488
ble_gatts_char_handles_t sst
Definition ble_cgms.h:525
ble_gatts_char_handles_t socp
Definition ble_cgms.h:531
ble_gatts_char_handles_t srt
Definition ble_cgms.h:527
ble_gatts_char_handles_t status
Definition ble_cgms.h:523
ble_gatts_char_handles_t measurement
Definition ble_cgms.h:519
ble_gatts_char_handles_t feature
Definition ble_cgms.h:521
ble_gatts_char_handles_t racp
Definition ble_cgms.h:529
Handles related to CGM characteristics.
Definition ble_cgms.h:517
ble_gap_conn_sec_mode_t read
Definition ble_cgms.h:418
struct ble_cgms_feature feature
Definition ble_cgms.h:406
struct ble_cgms_config::@65 sec_mode
ble_gap_conn_sec_mode_t write
Definition ble_cgms.h:442
struct ble_cgms_status initial_sensor_status
Definition ble_cgms.h:408
const struct ble_gq * gatt_queue
Definition ble_cgms.h:404
uint8_t initial_comm_interval
Definition ble_cgms.h:412
ble_cgms_evt_handler_t evt_handler
Definition ble_cgms.h:402
ble_gap_conn_sec_mode_t cccd_write
Definition ble_cgms.h:435
uint16_t initial_run_time
Definition ble_cgms.h:410
CGM Service initialization structure that contains all options and data needed for initializing the s...
Definition ble_cgms.h:400
struct ble_cgms_evt::@62::@64 error
uint16_t conn_handle
Connection handle for which the event applies.
Definition ble_cgms.h:309
enum ble_cgms_evt_type evt_type
Definition ble_cgms.h:305
uint32_t reason
Definition ble_cgms.h:314
CGM Service event.
Definition ble_cgms.h:303
uint8_t sample_location
Definition ble_cgms.h:386
uint8_t type
Definition ble_cgms.h:384
uint32_t feature
Definition ble_cgms.h:382
Features supported by the CGM Service.
Definition ble_cgms.h:380
uint16_t quality
Definition ble_cgms.h:370
uint16_t glucose_concentration
Definition ble_cgms.h:360
uint16_t time_offset
Definition ble_cgms.h:362
uint8_t flags
Definition ble_cgms.h:356
uint16_t trend
Definition ble_cgms.h:368
struct ble_cgms_sensor_annunc sensor_status_annunciation
Definition ble_cgms.h:366
CGM measurement.
Definition ble_cgms.h:354
uint8_t pending_racp_response_operand[2]
Definition ble_cgms.h:513
bool racp_processing_active
Definition ble_cgms.h:511
uint8_t racp_proc_operator
Definition ble_cgms.h:496
uint16_t racp_proc_records_reported
Definition ble_cgms.h:505
struct ble_racp_value racp_request
Definition ble_cgms.h:507
struct ble_racp_value pending_racp_response
Definition ble_cgms.h:509
uint16_t racp_proc_records_idx_last_to_send
Definition ble_cgms.h:503
uint16_t racp_proc_record_idx
Definition ble_cgms.h:498
Record Access Control Point transaction data.
Definition ble_cgms.h:494
struct ble_cgms_meas meas
Definition ble_cgms.h:376
CGM Measurement record.
Definition ble_cgms.h:374
uint8_t calib_temp
Definition ble_cgms.h:348
uint8_t warning
Definition ble_cgms.h:346
uint8_t status
Definition ble_cgms.h:350
CGM Measurement Sensor Status Annunciation.
Definition ble_cgms.h:344
uint16_t time_offset
Definition ble_cgms.h:392
struct ble_cgms_sensor_annunc status
Definition ble_cgms.h:394
Status of the CGM measurement.
Definition ble_cgms.h:390
struct ble_cgms_status sensor_status
Definition ble_cgms.h:565
struct ble_cgms_calib calibration_val[5]
Definition ble_cgms.h:557
struct ble_cgms_feature feature
Definition ble_cgms.h:551
struct ble_cgms_char_handles char_handles
Definition ble_cgms.h:545
uint16_t service_handle
Definition ble_cgms.h:543
uint8_t comm_interval
Definition ble_cgms.h:553
ble_gq_evt_handler_t ble_gq_evt_handler
Definition ble_cgms.h:541
uint16_t session_run_time
Definition ble_cgms.h:563
struct ble_cgms_racp racp_data
Definition ble_cgms.h:567
uint8_t nb_run_session
Definition ble_cgms.h:561
struct ble_socp_rsp socp_response
Definition ble_cgms.h:555
ble_cgms_evt_handler_t evt_handler
Definition ble_cgms.h:537
const struct ble_gq * gatt_queue
Definition ble_cgms.h:539
uint16_t conn_handle
Definition ble_cgms.h:549
bool is_session_started
Definition ble_cgms.h:559
Status information for the CGM Service.
Definition ble_cgms.h:535
Bluetooth LE GATT Queue.
Definition ble_gq.h:238
Record Access Control Point value structure.
Definition ble_racp.h:97
uint8_t size_val
Definition ble_cgms.h:484
uint8_t opcode
Definition ble_cgms.h:476
uint8_t req_opcode
Definition ble_cgms.h:478
uint8_t rsp_code
Definition ble_cgms.h:480
uint8_t resp_val[17]
Definition ble_cgms.h:482
Specific Operation Control Point response structure.
Definition ble_cgms.h:474