Fix scanning after a peripheral bond has been made

The BLE workflow will be advertising and the scan's load of
identities conflicts with it. This change ensures scanning and
advertising happens exclusively.

This showed as an unknown error 3204.

Fixes https://github.com/adafruit/Adafruit_CircuitPython_BLE/issues/134
This commit is contained in:
Scott Shawcroft 2021-09-08 16:58:53 -07:00
parent cfc4ed19aa
commit 2b4fdcdfa2
No known key found for this signature in database
GPG Key ID: 0DFD512649C052DA
1 changed files with 10 additions and 0 deletions

View File

@ -507,6 +507,16 @@ mp_obj_t common_hal_bleio_adapter_start_scan(bleio_adapter_obj_t *self, uint8_t
}
self->scan_results = NULL;
}
// Check to see if advertising is going already.
if (self->current_advertising_data != NULL && self->current_advertising_data == self->advertising_data) {
check_nrf_error(NRF_ERROR_BUSY);
}
// If the current advertising data isn't owned by the adapter then it must be an internal
// advertisement that we should stop.
if (self->current_advertising_data != NULL) {
common_hal_bleio_adapter_stop_advertising(self);
}
self->scan_results = shared_module_bleio_new_scanresults(buffer_size, prefixes, prefix_length, minimum_rssi);
size_t max_packet_size = extended ? BLE_GAP_SCAN_BUFFER_EXTENDED_MAX_SUPPORTED : BLE_GAP_SCAN_BUFFER_MAX;
uint8_t *raw_data = m_malloc(sizeof(ble_data_t) + max_packet_size, false);