Release 0.4.7
============= * There's now a compile time switch to for handling for BLE stack events. For mbed OS, we now post callbacks to Minar, else stack events are executed right-away in interrupt context. In either case, the logic of event processing is identical--this means that the Nordic port of BLE_API will have the same code for mbed-classic and mbed OS. :) As a fallout of the above, all mbed-OS BLE event handling now happens in thread mode.master v0.4.7
commit
21e8e22df9
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "ble-nrf51822",
|
||||
"version": "0.4.6",
|
||||
"version": "0.4.7",
|
||||
"description": "Nordic stack and drivers for the mbed BLE API.",
|
||||
"keywords": [
|
||||
"Bluetooth",
|
||||
|
@ -19,7 +19,7 @@
|
|||
}
|
||||
],
|
||||
"dependencies": {
|
||||
"ble": "~0.4.6"
|
||||
"ble": "~0.4.7"
|
||||
},
|
||||
"extraIncludes": [
|
||||
"source/btle",
|
||||
|
|
|
@ -50,6 +50,30 @@ static void sys_evt_dispatch(uint32_t sys_evt)
|
|||
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 @@ error_t btle_init(void)
|
|||
} else {
|
||||
clockSource = NRF_CLOCK_LFCLKSRC_RC_250_PPM_4000MS_CALIBRATION;
|
||||
}
|
||||
SOFTDEVICE_HANDLER_INIT(clockSource, NULL);
|
||||
SOFTDEVICE_HANDLER_INIT(clockSource, eventHandler);
|
||||
|
||||
// Enable BLE stack
|
||||
/**
|
||||
|
|
|
@ -89,8 +89,7 @@ typedef void (*sys_evt_handler_t) (uint32_t evt_id);
|
|||
* reinitialization).
|
||||
*/
|
||||
/*lint -emacro(506, SOFTDEVICE_HANDLER_INIT) */ /* Suppress "Constant value Boolean */
|
||||
#define SOFTDEVICE_HANDLER_INIT(CLOCK_SOURCE, \
|
||||
EVT_HANDLER) \
|
||||
#define SOFTDEVICE_HANDLER_INIT(CLOCK_SOURCE, EVT_HANDLER) \
|
||||
do \
|
||||
{ \
|
||||
static uint32_t BLE_EVT_BUFFER[CEIL_DIV(BLE_STACK_EVT_MSG_BUF_SIZE, sizeof(uint32_t))]; \
|
||||
|
@ -98,7 +97,7 @@ typedef void (*sys_evt_handler_t) (uint32_t evt_id);
|
|||
ERR_CODE = softdevice_handler_init((CLOCK_SOURCE), \
|
||||
BLE_EVT_BUFFER, \
|
||||
sizeof(BLE_EVT_BUFFER), \
|
||||
EVT_HANDLER); \
|
||||
EVT_HANDLER); \
|
||||
APP_ERROR_CHECK(ERR_CODE); \
|
||||
} while (0)
|
||||
|
||||
|
@ -117,7 +116,7 @@ typedef void (*sys_evt_handler_t) (uint32_t evt_id);
|
|||
* used, this buffer must be provided by the application. The
|
||||
* buffer must be large enough to hold the biggest stack event the
|
||||
* application is supposed to handle. The buffer must be aligned to
|
||||
* a 4 byte boundary. This parameter is unused if BLE stack support
|
||||
* a 4 byte boundary. This parameter is unused if BLE stack support
|
||||
* is not required.
|
||||
* @param[in] ble_evt_buffer_size Size of SoftDevice BLE event buffer. This parameter is unused if
|
||||
* BLE stack support is not required.
|
||||
|
|
Loading…
Reference in New Issue