diff --git a/components/openthread/private_include/esp_openthread_radio.h b/components/openthread/private_include/esp_openthread_radio.h index 20e4556681..4b9aa4555f 100644 --- a/components/openthread/private_include/esp_openthread_radio.h +++ b/components/openthread/private_include/esp_openthread_radio.h @@ -44,6 +44,14 @@ void esp_openthread_radio_deinit(void); */ void esp_openthread_radio_update(esp_openthread_mainloop_context_t *mainloop); +/** + * @brief This function handles netif change for radio spinel. + * + * @param[in] state The updated netif state. + * + */ +void esp_openthread_handle_netif_state_change(bool state); + /** * @brief This function performs the OpenThread radio process. * diff --git a/components/openthread/src/port/esp_openthread_radio_spinel.cpp b/components/openthread/src/port/esp_openthread_radio_spinel.cpp index 3a072f5a00..531d7503b4 100644 --- a/components/openthread/src/port/esp_openthread_radio_spinel.cpp +++ b/components/openthread/src/port/esp_openthread_radio_spinel.cpp @@ -209,6 +209,11 @@ void esp_openthread_radio_update(esp_openthread_mainloop_context_t *mainloop) s_spinel_interface.GetSpinelInterface().UpdateFdSet((void *)mainloop); } +void esp_openthread_handle_netif_state_change(bool state) +{ + s_radio.SetTimeSyncState(state); +} + void otPlatRadioGetIeeeEui64(otInstance *instance, uint8_t *ieee_eui64) { SuccessOrDie(s_radio.GetIeeeEui64(ieee_eui64)); diff --git a/components/openthread/src/port/esp_openthread_state.c b/components/openthread/src/port/esp_openthread_state.c index 7dac89c3ef..153d343ea1 100644 --- a/components/openthread/src/port/esp_openthread_state.c +++ b/components/openthread/src/port/esp_openthread_state.c @@ -21,7 +21,7 @@ static void handle_ot_netif_state_change(otInstance* instance) { - if (otLinkIsEnabled(instance)) { + if (otIp6IsEnabled(instance)) { ESP_LOGI(TAG, "netif up"); if (esp_event_post(OPENTHREAD_EVENT, OPENTHREAD_EVENT_IF_UP, NULL, 0, 0) != ESP_OK) { ESP_LOGE(TAG, "Failed to post OpenThread if up event"); @@ -32,6 +32,10 @@ static void handle_ot_netif_state_change(otInstance* instance) ESP_LOGE(TAG, "Failed to post OpenThread if down event"); } } + +#if (CONFIG_OPENTHREAD_RADIO_SPINEL_UART || CONFIG_OPENTHREAD_RADIO_SPINEL_SPI) + esp_openthread_handle_netif_state_change(otIp6IsEnabled(instance)); +#endif } static void handle_ot_netdata_change(void)