@@ -437,6 +437,7 @@ mp_obj_t common_hal_bleio_adapter_start_scan(bleio_adapter_obj_t *self, uint8_t*
437437 .active = active
438438 };
439439 uint32_t err_code ;
440+ vm_used_ble = true;
440441 err_code = sd_ble_gap_scan_start (& scan_params , sd_data );
441442
442443 if (err_code != NRF_SUCCESS ) {
@@ -511,6 +512,7 @@ mp_obj_t common_hal_bleio_adapter_connect(bleio_adapter_obj_t *self, bleio_addre
511512 ble_drv_add_event_handler (connect_on_ble_evt , & event_info );
512513 event_info .done = false;
513514
515+ vm_used_ble = true;
514516 uint32_t err_code = sd_ble_gap_connect (& addr , & scan_params , & conn_params , BLE_CONN_CFG_TAG_CUSTOM );
515517
516518 if (err_code != NRF_SUCCESS ) {
@@ -615,6 +617,7 @@ uint32_t _common_hal_bleio_adapter_start_advertising(bleio_adapter_obj_t *self,
615617 return err_code ;
616618 }
617619
620+ vm_used_ble = true;
618621 err_code = sd_ble_gap_adv_start (adv_handle , BLE_CONN_CFG_TAG_CUSTOM );
619622 if (err_code != NRF_SUCCESS ) {
620623 return err_code ;
@@ -709,6 +712,11 @@ void bleio_adapter_reset(bleio_adapter_obj_t* adapter) {
709712 adapter -> connection_objs = NULL ;
710713 for (size_t i = 0 ; i < BLEIO_TOTAL_CONNECTION_COUNT ; i ++ ) {
711714 bleio_connection_internal_t * connection = & bleio_connections [i ];
715+ // Disconnect all connections with Python state cleanly. Keep any supervisor-only connections.
716+ if (connection -> connection_obj != mp_const_none &&
717+ connection -> conn_handle != BLE_CONN_HANDLE_INVALID ) {
718+ common_hal_bleio_connection_disconnect (connection );
719+ }
712720 connection -> connection_obj = mp_const_none ;
713721 }
714722}
0 commit comments