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); }