Respond to sync and reset events¶
sync¶
The NimBLE stack is inoperable while the host and controller are out of
sync. In a combined host-controller app, the sync happens immediately at
startup. When the host and controller are separate, sync typically
occurs in under a second after the application starts. An application
learns when sync is achieved by configuring the host’s sync callback:
ble_hs_cfg.sync_cb
. The host calls the sync callback whenever sync
is acquired. The sync callback has the following form:
typedef void ble_hs_sync_fn(void);
Because the NimBLE stack begins in the unsynced state, the application should delay all BLE operations until the sync callback has been called.
reset¶
Another event indicated by the host is a controller reset. The NimBLE stack resets itself when a catastrophic error occurs, such as loss of communication between the host and controller. Upon resetting, the host drops all BLE connections and loses sync with the controller. After a reset, the application should refrain from using the host until sync is again signaled via the sync callback.
An application learns of a host reset by configuring the host’s reset
callback: ble_hs_cfg.reset_cb
. This callback has the following
form:
typedef void ble_hs_reset_fn(int reason);
The reason
parameter is a NimBLE host return
code.
Example¶
The following example demonstrates the configuration of the sync and reset callbacks.
#include "sysinit/sysinit.h"
#include "console/console.h"
#include "host/ble_hs.h"
static void
on_sync(void)
{
/* Begin advertising, scanning for peripherals, etc. */
}
static void
on_reset(int reason)
{
console_printf("Resetting state; reason=%d\n", reason);
}
int
mynewt_main(int argc, char **argv)
{
/* Initialize all packages. */
sysinit();
ble_hs_cfg.sync_cb = on_sync;
ble_hs_cfg.reset_cb = on_reset;
/* As the last thing, process events from default event queue. */
while (1) {
os_eventq_run(os_eventq_dflt_get());
}
}