From 3cacd66e838b03b84b778892b20beef4473e6cd3 Mon Sep 17 00:00:00 2001 From: Sumeet Singh Date: Wed, 1 Jul 2026 16:31:01 +0530 Subject: [PATCH] fix(nimble): Add option to disable IEEE and UDI Characteristic in DIS --- nimble/host/services/dis/src/ble_svc_dis.c | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/nimble/host/services/dis/src/ble_svc_dis.c b/nimble/host/services/dis/src/ble_svc_dis.c index 5a119a764..f783e3085 100644 --- a/nimble/host/services/dis/src/ble_svc_dis.c +++ b/nimble/host/services/dis/src/ble_svc_dis.c @@ -55,7 +55,9 @@ struct ble_svc_dis_data _ble_svc_dis_data = { (MYNEWT_VAL(BLE_SVC_DIS_SOFTWARE_REVISION_READ_PERM) >= 0) || \ (MYNEWT_VAL(BLE_SVC_DIS_MANUFACTURER_NAME_READ_PERM) >= 0) || \ (MYNEWT_VAL(BLE_SVC_DIS_SYSTEM_ID_READ_PERM) >= 0) || \ - (MYNEWT_VAL(BLE_SVC_DIS_PNP_ID_READ_PERM) >= 0) + (MYNEWT_VAL(BLE_SVC_DIS_PNP_ID_READ_PERM) >= 0) || \ + (MYNEWT_VAL(BLE_SVC_DIS_IEEE_READ_PERM) >= 0) || \ + (MYNEWT_VAL(BLE_SVC_DIS_UDI_READ_PERM) >= 0) static int ble_svc_dis_access(uint16_t conn_handle, uint16_t attr_handle, struct ble_gatt_access_ctxt *ctxt, void *arg); @@ -132,12 +134,14 @@ static const struct ble_gatt_chr_def dis_characteristics[] = { .flags = BLE_GATT_CHR_F_READ | MYNEWT_VAL(BLE_SVC_DIS_SYSTEM_ID_READ_PERM), }, #endif +#if (MYNEWT_VAL(BLE_SVC_DIS_IEEE_READ_PERM) >= 0) { /*** Characteristic: IEEE 11073-20601 Regulatory Certification Data List */ .uuid = &uuid_chr_ieee_cert.u, .access_cb = ble_svc_dis_access, - .flags = BLE_GATT_CHR_F_READ, + .flags = BLE_GATT_CHR_F_READ | MYNEWT_VAL(BLE_SVC_DIS_IEEE_READ_PERM), }, +#endif #if (MYNEWT_VAL(BLE_SVC_DIS_PNP_ID_READ_PERM) >= 0) { /*** Characteristic: PNP Id */ @@ -146,12 +150,14 @@ static const struct ble_gatt_chr_def dis_characteristics[] = { .flags = BLE_GATT_CHR_F_READ | MYNEWT_VAL(BLE_SVC_DIS_PNP_ID_READ_PERM), }, #endif +#if (MYNEWT_VAL(BLE_SVC_DIS_UDI_READ_PERM) >= 0) { /*** Characteristic: UDI for Medical Devices */ .uuid = &uuid_chr_udi.u, .access_cb = ble_svc_dis_access, - .flags = BLE_GATT_CHR_F_READ, + .flags = BLE_GATT_CHR_F_READ | MYNEWT_VAL(BLE_SVC_DIS_UDI_READ_PERM), }, +#endif { 0, /* Terminator: No more characteristics in this service */ }, @@ -190,7 +196,10 @@ const struct ble_gatt_svc_def ble_svc_dis_include_def[] = { (MYNEWT_VAL(BLE_SVC_DIS_FIRMWARE_REVISION_READ_PERM) >= 0) || \ (MYNEWT_VAL(BLE_SVC_DIS_SOFTWARE_REVISION_READ_PERM) >= 0) || \ (MYNEWT_VAL(BLE_SVC_DIS_MANUFACTURER_NAME_READ_PERM) >= 0) || \ - (MYNEWT_VAL(BLE_SVC_DIS_SYSTEM_ID_READ_PERM) >= 0) + (MYNEWT_VAL(BLE_SVC_DIS_SYSTEM_ID_READ_PERM) >= 0) || \ + (MYNEWT_VAL(BLE_SVC_DIS_PNP_ID_READ_PERM) >= 0) || \ + (MYNEWT_VAL(BLE_SVC_DIS_IEEE_READ_PERM) >= 0) || \ + (MYNEWT_VAL(BLE_SVC_DIS_UDI_READ_PERM) >= 0) static int ble_svc_dis_access(uint16_t conn_handle, uint16_t attr_handle, struct ble_gatt_access_ctxt *ctxt, void *arg) @@ -305,10 +314,14 @@ ble_svc_dis_access(uint16_t conn_handle, uint16_t attr_handle, return rc == 0 ? 0 : BLE_ATT_ERR_INSUFFICIENT_RES; } #endif + +#if (MYNEWT_VAL(BLE_SVC_DIS_IEEE_READ_PERM) >= 0) case BLE_SVC_DIS_CHR_UUID16_IEEE_REG_CERT_LIST: info = ble_svc_dis_data.ieee; break; +#endif +#if (MYNEWT_VAL(BLE_SVC_DIS_UDI_READ_PERM) >= 0) case BLE_SVC_DIS_CHR_UUID16_UDI: info = ble_svc_dis_data.udi; if (info == NULL) { @@ -317,6 +330,7 @@ ble_svc_dis_access(uint16_t conn_handle, uint16_t attr_handle, return rc == 0 ? 0 : BLE_ATT_ERR_INSUFFICIENT_RES; } break; +#endif default: return BLE_ATT_ERR_UNLIKELY;