Thread¶
Introduction¶
Thread is a IP-based mesh networking protocol. It’s based on the 802.15.4 physical and MAC layer.
Application Examples¶
The openthread directory of ESP-IDF examples contains the following applications:
The OpenThread interactive shell openthread/ot_cli.
The Thread border router openthread/ot_br.
The Thread radio co-processor openthread/ot_rcp.
API Reference¶
For manipulating the Thread network, the OpenThread api shall be used. The OpenThread api docs can be found at the OpenThread official website.
ESP-IDF provides extra apis for launching and managing the OpenThread stack, binding to network interfaces and border routing features.
Header File¶
Functions¶
-
esp_err_t
esp_openthread_init(const esp_openthread_platform_config_t *init_config)¶ Initializes the full OpenThread stack.
- Note
The OpenThread instance will also be initialized in this function.
- Return
ESP_OK on success
ESP_ERR_NO_MEM if allocation has failed
ESP_ERR_INVALID_ARG if radio or host connection mode not supported
ESP_ERR_INVALID_STATE if already initialized
- Parameters
[in] init_config: The initialization configuration.
-
esp_err_t
esp_openthread_launch_mainloop(void)¶ Launches the OpenThread main loop.
- Note
Thie function will not return unless error happens when running the OpenThread stack.
- Return
ESP_OK on success
ESP_ERR_NO_MEM if allocation has failed
ESP_FAIL on other failures
-
esp_err_t
esp_openthread_deinit(void)¶ This function performs OpenThread stack and platform driver deinitialization.
- Return
ESP_OK on success
ESP_ERR_INVALID_STATE if not initialized
-
otInstance *
esp_openthread_get_instance(void)¶ This function acquires the underlying OpenThread instance.
- Note
This function can be called on other tasks without lock.
- Return
The OpenThread instance pointer
Structures¶
-
struct
esp_openthread_mainloop_context_t¶ This structure represents a context for a select() based mainloop.
-
struct
esp_openthread_uart_config_t¶ The uart port config for OpenThread.
Public Members
-
uart_port_t
port¶ UART port number
-
uart_config_t
uart_config¶ UART configuration, see uart_config_t docs
-
int
rx_pin¶ UART RX pin
-
int
tx_pin¶ UART TX pin
-
uart_port_t
-
struct
esp_openthread_radio_config_t¶ The OpenThread radio configuration.
Public Members
-
esp_openthread_radio_mode_t
radio_mode¶ The radio mode
-
esp_openthread_uart_config_t
radio_uart_config¶ The uart configuration to RCP
-
esp_openthread_radio_mode_t
-
struct
esp_openthread_host_connection_config_t¶ The OpenThread host connection configuration.
Public Members
-
esp_openthread_host_connection_mode_t
host_connection_mode¶ The host connection mode
-
esp_openthread_uart_config_t
host_uart_config¶ The uart configuration to host
-
esp_openthread_host_connection_mode_t
-
struct
esp_openthread_port_config_t¶ The OpenThread port specific configuration.
-
struct
esp_openthread_platform_config_t¶ The OpenThread platform configuration.
Public Members
-
esp_openthread_radio_config_t
radio_config¶ The radio configuration
-
esp_openthread_host_connection_config_t
host_config¶ The host connection configuration
-
esp_openthread_port_config_t
port_config¶ The port configuration
-
esp_openthread_radio_config_t
Enumerations¶
-
enum
esp_openthread_event_t¶ OpenThread event declarations.
Values:
-
OPENTHREAD_EVENT_START¶ OpenThread stack start
-
OPENTHREAD_EVENT_STOP¶ OpenThread stack stop
-
OPENTHREAD_EVENT_IF_UP¶ OpenThread network interface up
-
OPENTHREAD_EVENT_IF_DOWN¶ OpenThread network interface down
-
OPENTHREAD_EVENT_GOT_IP6¶ OpenThread stack added IPv6 address
-
OPENTHREAD_EVENT_LOST_IP6¶ OpenThread stack removed IPv6 address
-
OPENTHREAD_EVENT_MULTICAST_GROUP_JOIN¶ OpenThread stack joined IPv6 multicast group
-
OPENTHREAD_EVENT_MULTICAST_GROUP_LEAVE¶ OpenThread stack left IPv6 multicast group
-
Functions¶
-
esp_err_t
esp_openthread_lock_init(void)¶ This function initializes the OpenThread API lock.
- Return
ESP_OK on success
ESP_ERR_NO_MEM if allocation has failed
ESP_ERR_INVALID_STATE if already initialized
-
void
esp_openthread_lock_deinit(void)¶ This function deinitializes the OpenThread API lock.
-
bool
esp_openthread_lock_acquire(TickType_t block_ticks)¶ This functions acquires the OpenThread API lock.
- Note
Every OT APIs that takes an otInstance argument MUST be protected with this API lock except that the call site is in OT callbacks.
- Return
True on lock acquired
False on failing to acquire the lock with the timeout.
- Parameters
[in] block_ticks: The maxinum number of RTOS ticks to wait for the lock.
-
void
esp_openthread_lock_release(void)¶ This function releases the OpenThread API lock.
Functions¶
-
void *
esp_openthread_netif_glue_init(const esp_openthread_platform_config_t *config)¶ This function initializes the OpenThread network interface glue.
- Return
glue pointer on success
NULL on failure
- Parameters
[in] config: The platform configuration.
-
void
esp_openthread_netif_glue_deinit(void)¶ This function deinitializes the OpenThread network interface glue.
-
esp_netif_t *
esp_openthread_get_netif(void)¶ This function acquires the OpenThread netif.
- Return
The OpenThread netif or NULL if not initialzied.
Functions¶
-
esp_err_t
esp_openthread_border_router_init(esp_netif_t *backbone_netif)¶ Initializes the border router features of OpenThread.
- Note
Calling this function will make the device behave as an OpenThread border router. Kconfig option CONFIG_OPENTHREAD_BORDER_ROUTER is required.
- Return
ESP_OK on success
ESP_ERR_NOT_SUPPORTED if feature not supported
ESP_ERR_INVALID_STATE if already initialized
ESP_FIAL on other failures
- Parameters
[in] backbone_netif: The backbone network interface (WiFi or ethernet)
-
esp_err_t
esp_openthread_border_router_deinit(void)¶ Deinitializes the border router features of OpenThread.
- Return
ESP_OK on success
ESP_ERR_INVALID_STATE if not initialized
ESP_FIAL on other failures
-
esp_netif_t *
esp_openthread_get_backbone_netif(void)¶ Gets the backbone interface of OpenThread border router.
- Return
The backbone interface or NULL if border router not initialized.