diff --git a/components/openthread/Kconfig b/components/openthread/Kconfig index 9434a46d66..bca02ec1fb 100644 --- a/components/openthread/Kconfig +++ b/components/openthread/Kconfig @@ -263,6 +263,13 @@ menu "OpenThread" help Select this option to enable link metrics feature + config OPENTHREAD_BORDER_AGENT_ENABLE + bool "Enable border agent feature" + default y if OPENTHREAD_BORDER_ROUTER + default n if !OPENTHREAD_BORDER_ROUTER + help + Select this option to enable border agent feature + config OPENTHREAD_MACFILTER_ENABLE bool "Enable mac filter feature" default n @@ -400,6 +407,12 @@ menu "OpenThread" help The device's XTAL accuracy, in ppm. + config OPENTHREAD_BUS_LATENCY + int "The bus latency between host and radio chip" + default 4000 + help + The device's bus latency, in us. + config OPENTHREAD_MLE_MAX_CHILDREN int "The size of max MLE children entries" default 10 diff --git a/components/openthread/linker.lf b/components/openthread/linker.lf index aa59cc6701..ffadcdff91 100644 --- a/components/openthread/linker.lf +++ b/components/openthread/linker.lf @@ -2,12 +2,14 @@ archive: libopenthread.a entries: if OPENTHREAD_CSL_ENABLE = y || OPENTHREAD_LINK_METRICS = y: - mesh_forwarder (noflash_text) - mac_frame (noflash_text) - csl_tx_scheduler (noflash_text) - link_metrics (noflash_text) - mac (noflash_text) - sub_mac (noflash_text) + csl_tx_scheduler (noflash) + link_metrics (noflash) + link_quality (noflash) + mac (noflash) + mac_frame (noflash) + mesh_forwarder (noflash) + radio (noflash) + sub_mac (noflash) if OPENTHREAD_RCP_SPI = y: - ncp_spi (noflash_text) + ncp_spi (noflash) 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/private_include/openthread-core-esp32x-ftd-config.h b/components/openthread/private_include/openthread-core-esp32x-ftd-config.h index 59d3780fa9..57e19977d0 100644 --- a/components/openthread/private_include/openthread-core-esp32x-ftd-config.h +++ b/components/openthread/private_include/openthread-core-esp32x-ftd-config.h @@ -367,19 +367,24 @@ #endif #define OPENTHREAD_CONFIG_MAC_MAX_CSMA_BACKOFFS_DIRECT CONFIG_OPENTHREAD_MAC_MAX_CSMA_BACKOFFS_DIRECT -/*----The following options set fixed default values but can be overridden by the user header file.----*/ - -#if CONFIG_OPENTHREAD_BORDER_ROUTER /** * @def OPENTHREAD_CONFIG_BORDER_AGENT_ENABLE * * Define to 1 to enable Border Agent support. * */ -#ifndef OPENTHREAD_CONFIG_BORDER_AGENT_ENABLE +#ifdef OPENTHREAD_CONFIG_BORDER_AGENT_ENABLE +#error `OPENTHREAD_CONFIG_BORDER_AGENT_ENABLE` is redefined. +#endif +#if CONFIG_OPENTHREAD_BORDER_AGENT_ENABLE #define OPENTHREAD_CONFIG_BORDER_AGENT_ENABLE 1 +#else +#define OPENTHREAD_CONFIG_BORDER_AGENT_ENABLE 0 #endif +/*----The following options set fixed default values but can be overridden by the user header file.----*/ + +#if CONFIG_OPENTHREAD_BORDER_ROUTER /** * @def OPENTHREAD_CONFIG_BORDER_AGENT_ID_ENABLE * diff --git a/components/openthread/src/port/esp_openthread_radio_spinel.cpp b/components/openthread/src/port/esp_openthread_radio_spinel.cpp index 2a2995483e..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)); @@ -523,3 +528,27 @@ uint32_t otPlatRadioGetSupportedChannelMask(otInstance *aInstance) // Refer to `GetRadioChannelMask(bool aPreferred)`: FALSE to get supported channel mask return s_radio.GetRadioChannelMask(false); } + +uint32_t otPlatRadioGetBusSpeed(otInstance *aInstance) +{ + OT_UNUSED_VARIABLE(aInstance); + +#if CONFIG_OPENTHREAD_RADIO_SPINEL_UART + return s_esp_openthread_radio_config->radio_uart_config.uart_config.baud_rate; +#elif CONFIG_OPENTHREAD_RADIO_SPINEL_SPI + return s_esp_openthread_radio_config->radio_spi_config.spi_device.clock_speed_hz; +#else + return 0; +#endif +} + +uint32_t otPlatRadioGetBusLatency(otInstance *aInstance) +{ + OT_UNUSED_VARIABLE(aInstance); + +#if CONFIG_OPENTHREAD_RADIO_SPINEL_UART || CONFIG_OPENTHREAD_RADIO_SPINEL_SPI + return CONFIG_OPENTHREAD_BUS_LATENCY; +#else + return 0; +#endif +} 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)