aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAyke van Laethem2017-11-14 23:43:49 +0100
committerDamien George2018-07-18 17:12:25 +1000
commit8482daced24a5892ee210191cc8fde88e3946fca (patch)
tree9b117d174b4b648341d153a75f30be1b308a451f
parentf7facf73f114fd6cc7b961f56a9a167b82b34324 (diff)
nrf/drivers/bluetooth/ble_drv: Don't handle non-events.
When there is a non-BLE event (sd_evt_get), the ble_evt_handler is invoked anyway even if it returns NRF_ERROR_NOT_FOUND.
-rw-r--r--ports/nrf/drivers/bluetooth/ble_drv.c20
1 files changed, 16 insertions, 4 deletions
diff --git a/ports/nrf/drivers/bluetooth/ble_drv.c b/ports/nrf/drivers/bluetooth/ble_drv.c
index 63af90011..59de7a9c0 100644
--- a/ports/nrf/drivers/bluetooth/ble_drv.c
+++ b/ports/nrf/drivers/bluetooth/ble_drv.c
@@ -1071,12 +1071,24 @@ void SWI2_EGU2_IRQHandler(void) {
sd_evt_handler(evt_id);
}
- uint32_t err_code;
uint16_t evt_len = sizeof(m_ble_evt_buf);
- do {
- err_code = sd_ble_evt_get(m_ble_evt_buf, &evt_len);
+ while (1) {
+ uint32_t err_code = sd_ble_evt_get(m_ble_evt_buf, &evt_len);
+ if (err_code != NRF_SUCCESS) {
+ // Possible error conditions:
+ // * NRF_ERROR_NOT_FOUND: no events left, break
+ // * NRF_ERROR_DATA_SIZE: retry with a bigger data buffer
+ // (currently not handled, TODO)
+ // * NRF_ERROR_INVALID_ADDR: pointer is not aligned, should
+ // not happen.
+ // In all cases, it's best to simply stop now.
+ if (err_code == NRF_ERROR_DATA_SIZE) {
+ BLE_DRIVER_LOG("NRF_ERROR_DATA_SIZE\n");
+ }
+ break;
+ }
ble_evt_handler((ble_evt_t *)m_ble_evt_buf);
- } while (err_code != NRF_ERROR_NOT_FOUND && err_code != NRF_SUCCESS);
+ }
}
#endif // BLUETOOTH_SD