From 39c8b6a835bf586c9d73da915b6ab0ff4f767c34 Mon Sep 17 00:00:00 2001 From: Astha Verma Date: Mon, 8 Sep 2025 14:37:38 +0530 Subject: [PATCH] fix(nimble): Reset HID services during deinit --- .../host/services/bas/include/services/bas/ble_svc_bas.h | 1 + nimble/host/services/bas/src/ble_svc_bas.c | 5 +++++ .../host/services/dis/include/services/dis/ble_svc_dis.h | 2 +- nimble/host/services/dis/src/ble_svc_dis.c | 6 ++++++ .../host/services/hid/include/services/hid/ble_svc_hid.h | 1 + nimble/host/services/hid/src/ble_svc_hid.c | 6 ++++++ .../host/services/sps/include/services/sps/ble_svc_sps.h | 1 + nimble/host/services/sps/src/ble_svc_sps.c | 7 +++++++ 8 files changed, 28 insertions(+), 1 deletion(-) diff --git a/nimble/host/services/bas/include/services/bas/ble_svc_bas.h b/nimble/host/services/bas/include/services/bas/ble_svc_bas.h index 88675b409..e941fb5ed 100644 --- a/nimble/host/services/bas/include/services/bas/ble_svc_bas.h +++ b/nimble/host/services/bas/include/services/bas/ble_svc_bas.h @@ -33,6 +33,7 @@ extern "C" { int ble_svc_bas_battery_level_set(uint8_t level); void ble_svc_bas_init(void); +void ble_svc_bas_deinit(void); #ifdef __cplusplus } diff --git a/nimble/host/services/bas/src/ble_svc_bas.c b/nimble/host/services/bas/src/ble_svc_bas.c index 9b97953dd..f27866662 100644 --- a/nimble/host/services/bas/src/ble_svc_bas.c +++ b/nimble/host/services/bas/src/ble_svc_bas.c @@ -115,6 +115,11 @@ ble_svc_bas_battery_level_set(uint8_t level) { return 0; } +void +ble_svc_bas_deinit(void) +{ + ble_gatts_free_svcs(); +} /** * Initialize the Battery Service. diff --git a/nimble/host/services/dis/include/services/dis/ble_svc_dis.h b/nimble/host/services/dis/include/services/dis/ble_svc_dis.h index 5e0a855c8..e022b79ae 100644 --- a/nimble/host/services/dis/include/services/dis/ble_svc_dis.h +++ b/nimble/host/services/dis/include/services/dis/ble_svc_dis.h @@ -129,7 +129,7 @@ extern struct ble_svc_dis_data ble_svc_dis_data; * Automatically called during package initialisation. */ void ble_svc_dis_init(void); - +void ble_svc_dis_deinit(void); /** * Service initialisation as an included service. */ diff --git a/nimble/host/services/dis/src/ble_svc_dis.c b/nimble/host/services/dis/src/ble_svc_dis.c index 6d0163b7e..e96b4fa39 100644 --- a/nimble/host/services/dis/src/ble_svc_dis.c +++ b/nimble/host/services/dis/src/ble_svc_dis.c @@ -449,6 +449,12 @@ ble_svc_dis_init_dynamic(void) } #endif +void +ble_svc_dis_deinit(void) +{ + ble_gatts_free_svcs(); +} + /** * Initialize the DIS package. */ diff --git a/nimble/host/services/hid/include/services/hid/ble_svc_hid.h b/nimble/host/services/hid/include/services/hid/ble_svc_hid.h index 50c6e5322..c0d11cc07 100644 --- a/nimble/host/services/hid/include/services/hid/ble_svc_hid.h +++ b/nimble/host/services/hid/include/services/hid/ble_svc_hid.h @@ -111,6 +111,7 @@ struct ble_svc_hid_params{ }; void ble_svc_hid_init(void); +void ble_svc_hid_deinit(void); int ble_svc_hid_add(struct ble_svc_hid_params params); void ble_svc_hid_reset(void); diff --git a/nimble/host/services/hid/src/ble_svc_hid.c b/nimble/host/services/hid/src/ble_svc_hid.c index 43cfe3997..863fbd0bf 100644 --- a/nimble/host/services/hid/src/ble_svc_hid.c +++ b/nimble/host/services/hid/src/ble_svc_hid.c @@ -748,6 +748,12 @@ ble_svc_hid_reset(void) #endif } +void +ble_svc_hid_deinit(void) +{ + ble_gatts_free_svcs(); +} + /** * Initialize the HID Service. */ diff --git a/nimble/host/services/sps/include/services/sps/ble_svc_sps.h b/nimble/host/services/sps/include/services/sps/ble_svc_sps.h index 8345985cf..e142830d4 100644 --- a/nimble/host/services/sps/include/services/sps/ble_svc_sps.h +++ b/nimble/host/services/sps/include/services/sps/ble_svc_sps.h @@ -34,6 +34,7 @@ typedef int ble_svc_sps_event_fn(uint16_t scan_interval, uint16_t scan_window); void ble_svc_sps_scan_refresh(void); void ble_svc_sps_init(uint16_t scan_itvl, uint16_t scan_window); +void ble_svc_sps_deinit(void); void ble_svc_sps_set_cb(ble_svc_sps_event_fn *cb); #if MYNEWT_VAL(BLE_STATIC_TO_DYNAMIC) void ble_svc_sps_reset(void); diff --git a/nimble/host/services/sps/src/ble_svc_sps.c b/nimble/host/services/sps/src/ble_svc_sps.c index 034975c4e..8ea4a1c46 100644 --- a/nimble/host/services/sps/src/ble_svc_sps.c +++ b/nimble/host/services/sps/src/ble_svc_sps.c @@ -194,6 +194,13 @@ ble_svc_sps_set_cb(ble_svc_sps_event_fn *cb) ble_svc_sps_cb_fn = cb; } +void ble_svc_sps_deinit(void) +{ + ble_gatts_free_svcs(); + ble_scan_itvl = 0; + ble_scan_window = 0; +} + /** * Initialize the SPS package. */