Make the LED flash while pairing
This commit is contained in:
parent
7b4e64cec7
commit
3a6561bbf4
1 changed files with 34 additions and 6 deletions
|
|
@ -29,18 +29,24 @@ static struct zb_device_ctx dev_ctx;
|
||||||
|
|
||||||
static prst_sensors_t sensors;
|
static prst_sensors_t sensors;
|
||||||
|
|
||||||
static void maybe_erase_pairing_info() {
|
static void maybe_erase_pairing_info(struct k_timer *timer) {
|
||||||
uint32_t reset_reason = nrf_power_resetreas_get(NRF_POWER);
|
uint32_t reset_reason = nrf_power_resetreas_get(NRF_POWER);
|
||||||
// If we're resetting via the RESET pin (e.g.: reset pin shorting, firmware flashing).
|
// If we're resetting via the RESET pin (e.g.: reset pin shorting, firmware flashing).
|
||||||
if (reset_reason & 0x1) {
|
if (reset_reason & 0x1) {
|
||||||
LOG_WRN("Manual reset / re-flashing detected - erasing pairing info");
|
LOG_WRN("Manual reset / re-flashing detected - erasing pairing info");
|
||||||
|
// TODO: consider zb_bdb_reset_via_local_action(/*param=*/0);
|
||||||
zigbee_erase_persistent_storage(/*erase=*/true);
|
zigbee_erase_persistent_storage(/*erase=*/true);
|
||||||
// It's a power-on cycle (e.g.: swapping battery, first boot).
|
} else { // It's a power-on cycle (e.g.: swapping battery, first boot).
|
||||||
} else {
|
|
||||||
LOG_INF("Power-on cycle - keeping pairing info");
|
LOG_INF("Power-on cycle - keeping pairing info");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void led_flashing_cb(struct k_timer *timer) {
|
||||||
|
prst_led_toggle();
|
||||||
|
}
|
||||||
|
|
||||||
|
K_TIMER_DEFINE(led_flashing_timer, led_flashing_cb, /*stop_fn=*/NULL);
|
||||||
|
|
||||||
ZB_ZCL_DECLARE_IDENTIFY_ATTRIB_LIST(
|
ZB_ZCL_DECLARE_IDENTIFY_ATTRIB_LIST(
|
||||||
identify_attr_list,
|
identify_attr_list,
|
||||||
&dev_ctx.identify_attr.identify_time);
|
&dev_ctx.identify_attr.identify_time);
|
||||||
|
|
@ -121,6 +127,28 @@ ZBOSS_DECLARE_DEVICE_CTX_1_EP(
|
||||||
app_template_ep);
|
app_template_ep);
|
||||||
|
|
||||||
void zboss_signal_handler(zb_bufid_t bufid) {
|
void zboss_signal_handler(zb_bufid_t bufid) {
|
||||||
|
// See zigbee_default_signal_handler() for all available signals.
|
||||||
|
zb_zdo_app_signal_type_t sig = zb_get_app_signal(bufid, /*sg_p=*/NULL);
|
||||||
|
zb_ret_t status = ZB_GET_APP_SIGNAL_STATUS(bufid);
|
||||||
|
switch (sig) {
|
||||||
|
case ZB_BDB_SIGNAL_STEERING: // New network.
|
||||||
|
case ZB_BDB_SIGNAL_DEVICE_REBOOT: { // Previously joined network.
|
||||||
|
LOG_DBG("Steering complete. Status: %d", status);
|
||||||
|
prst_led_flash(/*times=*/3);
|
||||||
|
if (status == RET_OK) {
|
||||||
|
k_timer_stop(&led_flashing_timer);
|
||||||
|
prst_led_off();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case ZB_ZDO_SIGNAL_SKIP_STARTUP:
|
||||||
|
case ZB_ZDO_SIGNAL_LEAVE: {
|
||||||
|
LOG_DBG("Will restart flashing");
|
||||||
|
k_timer_start(&led_flashing_timer, K_NO_WAIT, K_SECONDS(1));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
ZB_ERROR_CHECK(zigbee_default_signal_handler(bufid));
|
ZB_ERROR_CHECK(zigbee_default_signal_handler(bufid));
|
||||||
if (bufid) {
|
if (bufid) {
|
||||||
zb_buf_free(bufid);
|
zb_buf_free(bufid);
|
||||||
|
|
@ -181,7 +209,7 @@ int main(void) {
|
||||||
RET_IF_ERR(prst_led_init());
|
RET_IF_ERR(prst_led_init());
|
||||||
RET_IF_ERR(prst_button_init());
|
RET_IF_ERR(prst_button_init());
|
||||||
|
|
||||||
maybe_erase_pairing_info();
|
maybe_erase_pairing_info(NULL);
|
||||||
|
|
||||||
register_factory_reset_button(FACTORY_RESET_BUTTON);
|
register_factory_reset_button(FACTORY_RESET_BUTTON);
|
||||||
|
|
||||||
|
|
@ -195,10 +223,10 @@ int main(void) {
|
||||||
ZB_TIME_ONE_SECOND * CONFIG_PRST_ZB_PARENT_POLL_INTERVAL_SEC);
|
ZB_TIME_ONE_SECOND * CONFIG_PRST_ZB_PARENT_POLL_INTERVAL_SEC);
|
||||||
power_down_unused_ram();
|
power_down_unused_ram();
|
||||||
|
|
||||||
|
RET_IF_ERR(prst_led_flash(2));
|
||||||
|
|
||||||
zigbee_enable();
|
zigbee_enable();
|
||||||
zigbee_configure_sleepy_behavior(/*enable=*/true);
|
zigbee_configure_sleepy_behavior(/*enable=*/true);
|
||||||
|
|
||||||
RET_IF_ERR(prst_led_flash(2));
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue