test
Fork of nRF51822 by
Diff: source/btle/btle.cpp
- Revision:
- 431:95158d6d493f
- Parent:
- 430:db7edc9ad0bc
- Child:
- 434:95f196557042
diff -r db7edc9ad0bc -r 95158d6d493f source/btle/btle.cpp --- a/source/btle/btle.cpp Fri Sep 25 15:26:40 2015 +0100 +++ b/source/btle/btle.cpp Fri Sep 25 15:26:40 2015 +0100 @@ -50,6 +50,30 @@ pstorage_sys_event_handler(sys_evt); } +/** + * This function is called in interrupt context to handle BLE events; i.e. pull + * system and user events out of the pending events-queue of the BLE stack. The + * BLE stack signals the availability of events by the triggering the SWI2 + * interrupt, which forwards the handling to this function. + * + * The event processing loop is implemented in intern_softdevice_events_execute(). + * + * In mbed OS, a callback for intern_softdevice_events_execute() is posted + * to the scheduler, which then executes in thread mode. In mbed-classic, + * event processing happens right-away in interrupt context (which is more + * risk-prone). In either case, the logic of event processing is identical. + */ +static uint32_t eventHandler() +{ +#ifdef YOTTA_CFG_MBED_OS + minar::Scheduler::postCallback(intern_softdevice_events_execute); +#else + intern_softdevice_events_execute(); +#endif + + return NRF_SUCCESS; +} + error_t btle_init(void) { nrf_clock_lfclksrc_t clockSource; @@ -58,7 +82,7 @@ } else { clockSource = NRF_CLOCK_LFCLKSRC_RC_250_PPM_4000MS_CALIBRATION; } - SOFTDEVICE_HANDLER_INIT(clockSource, NULL); + SOFTDEVICE_HANDLER_INIT(clockSource, eventHandler); // Enable BLE stack /**