Hi, the nordic team
I am working on thread protocol using SDK version 2.9.1.
I use the SED device,My poll is 1000 ms. How can I receive messages from my parent node when my SED device goes into low power?
Here is my code to get into low power:
int main(void)
{
if (IS_ENABLED(CONFIG_RAM_POWER_DOWN_LIBRARY)) {
power_down_unused_ram();
}
int err;
k_timer_init(&led_timer, on_led_timer_expiry, on_led_timer_stop);
k_timer_init(&provisioning_timer, on_provisioning_timer_expiry, NULL);
k_work_queue_init(&coap_server_workq);
k_work_queue_start(&coap_server_workq, coap_server_workq_stack_area,
K_THREAD_STACK_SIZEOF(coap_server_workq_stack_area),
COAP_SERVER_WORKQ_PRIORITY, NULL);
k_work_init(&provisioning_work, activate_provisioning);
if (IS_ENABLED(CONFIG_OPENTHREAD_MTD_SED)) {
k_work_init(&poll_change_work,
into_low_power_sleeply);
}
err = ot_coap_init(&deactivate_provisionig, &on_light_request);
if (err) {
LOG_ERR("Could not initialize OpenThread CoAP");
goto end;
}
err = dk_leds_init();
if (err) {
LOG_ERR("Cannot init LEDs (err: %d)", err);
goto end;
}
err = dk_buttons_init(button_pressed_callback);
if (err)
{
LOG_ERR("Cannot init buttons (err: %d)", err);
goto end;
}
// 点亮 LED1
dk_set_led_on(OT_CONNECTION_LED);
err = restore_network_data();
end:
return 0;
}
//改变poll时间,进入低功耗
static void into_low_power_sleeply(struct k_work *item)
{
ARG_UNUSED(item);
otError error;
otLinkModeConfig mode;
struct openthread_context *context = openthread_get_default_context();
__ASSERT_NO_MSG(context != NULL);
openthread_api_mutex_lock(context);
mode = otThreadGetLinkMode(context->instance);
mode.mRxOnWhenIdle = false;
error = otThreadSetLinkMode(context->instance, mode);
otLinkSetPollPeriod(context->instance, OT_POLL_PERIOD);
openthread_api_mutex_unlock(context);
if (error != OT_ERROR_NONE) {
LOG_ERR("Failed to set MLE link mode configuration");
}
#if IS_ENABLED(CONFIG_PM_DEVICE)
const struct device *cons = DEVICE_DT_GET(DT_CHOSEN(zephyr_console));
if (!device_is_ready(cons)) {
return;
}
pm_device_action_run(cons, PM_DEVICE_ACTION_SUSPEND);
#endif
dk_set_led_off(OT_CONNECTION_LED);
dk_set_led_off(PROVISIONING_LED);
dk_set_led_off(LIGHT_LED);
}