summaryrefslogtreecommitdiffstatshomepage
path: root/extmod/modbluetooth_nimble.c
diff options
context:
space:
mode:
Diffstat (limited to 'extmod/modbluetooth_nimble.c')
-rw-r--r--extmod/modbluetooth_nimble.c15
1 files changed, 8 insertions, 7 deletions
diff --git a/extmod/modbluetooth_nimble.c b/extmod/modbluetooth_nimble.c
index c09f1cd2de..d873368581 100644
--- a/extmod/modbluetooth_nimble.c
+++ b/extmod/modbluetooth_nimble.c
@@ -440,7 +440,7 @@ static int characteristic_access_cb(uint16_t conn_handle, uint16_t value_handle,
return BLE_ATT_ERR_UNLIKELY;
}
-int mp_bluetooth_gatts_register_service_begin(bool reset) {
+int mp_bluetooth_gatts_register_service_begin(bool append) {
int ret = ble_gatts_reset();
if (ret != 0) {
return ble_hs_err_to_errno(ret);
@@ -452,7 +452,13 @@ int mp_bluetooth_gatts_register_service_begin(bool reset) {
// By default, just register the default gap service.
ble_svc_gap_init();
- MP_STATE_PORT(bluetooth_nimble_root_pointers)->n_services = 0;
+ if (!append) {
+ // Unref any previous service definitions.
+ for (int i = 0; i < MP_STATE_PORT(bluetooth_nimble_root_pointers)->n_services; ++i) {
+ MP_STATE_PORT(bluetooth_nimble_root_pointers)->services[i] = NULL;
+ }
+ MP_STATE_PORT(bluetooth_nimble_root_pointers)->n_services = 0;
+ }
return 0;
}
@@ -463,11 +469,6 @@ int mp_bluetooth_gatts_register_service_end() {
return ble_hs_err_to_errno(ret);
}
- for (int i = 0; i < MP_STATE_PORT(bluetooth_nimble_root_pointers)->n_services; ++i) {
- MP_STATE_PORT(bluetooth_nimble_root_pointers)->services[i] = NULL;
- }
- MP_STATE_PORT(bluetooth_nimble_root_pointers)->n_services = 0;
-
return 0;
}