mirror of
https://github.com/espressif/esp-idf
synced 2025-03-10 01:29:21 -04:00
feat(openthread): Add dataset changed event and post it in state change callback
This commit is contained in:
parent
1acc70f476
commit
77656e2046
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2021-2023 Espressif Systems (Shanghai) CO LTD
|
||||
* SPDX-FileCopyrightText: 2021-2024 Espressif Systems (Shanghai) CO LTD
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
@ -46,6 +46,7 @@ typedef enum {
|
||||
OPENTHREAD_EVENT_SET_DNS_SERVER, /*!< OpenThread stack set DNS server >*/
|
||||
OPENTHREAD_EVENT_PUBLISH_MESHCOP_E, /*!< OpenThread stack start to publish meshcop-e service >*/
|
||||
OPENTHREAD_EVENT_REMOVE_MESHCOP_E, /*!< OpenThread stack start to remove meshcop-e service >*/
|
||||
OPENTHREAD_EVENT_DATASET_CHANGED, /*!< OpenThread dataset changed >*/
|
||||
} esp_openthread_event_t;
|
||||
|
||||
/**
|
||||
@ -63,6 +64,24 @@ typedef struct {
|
||||
otDeviceRole current_role; /*!< Current Thread role */
|
||||
} esp_openthread_role_changed_event_t;
|
||||
|
||||
/**
|
||||
* @brief OpenThread dataset type
|
||||
*
|
||||
*/
|
||||
typedef enum {
|
||||
OPENTHREAD_ACTIVE_DATASET, /*!< Active dataset */
|
||||
OPENTHREAD_PENDING_DATASET, /*!< Pending dataset */
|
||||
} esp_openthread_dataset_type_t;
|
||||
|
||||
/**
|
||||
* @brief OpenThread dataset changed event data
|
||||
*
|
||||
*/
|
||||
typedef struct {
|
||||
esp_openthread_dataset_type_t type; /*!< Dataset type */
|
||||
otOperationalDataset new_dataset; /*!< New dataset */
|
||||
} esp_openthread_dataset_changed_event_t;
|
||||
|
||||
/**
|
||||
* This structure represents a context for a select() based mainloop.
|
||||
*
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2023 Espressif Systems (Shanghai) CO LTD
|
||||
* SPDX-FileCopyrightText: 2023-2024 Espressif Systems (Shanghai) CO LTD
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
@ -80,6 +80,21 @@ exit:
|
||||
s_previous_role = role;
|
||||
}
|
||||
|
||||
static void handle_ot_dataset_change(esp_openthread_dataset_type_t type, otInstance *instance)
|
||||
{
|
||||
esp_openthread_dataset_changed_event_t event_data;
|
||||
event_data.type = type;
|
||||
memset(&event_data.new_dataset, 0, sizeof(event_data.new_dataset));
|
||||
if (type == OPENTHREAD_ACTIVE_DATASET) {
|
||||
(void)otDatasetGetActive(instance, &event_data.new_dataset);
|
||||
} else if (type == OPENTHREAD_PENDING_DATASET) {
|
||||
(void)otDatasetGetPending(instance, &event_data.new_dataset);
|
||||
}
|
||||
if (esp_event_post(OPENTHREAD_EVENT, OPENTHREAD_EVENT_DATASET_CHANGED, &event_data, sizeof(event_data), 0) != ESP_OK) {
|
||||
ESP_LOGE(TAG, "Failed to post dataset changed event");
|
||||
}
|
||||
}
|
||||
|
||||
static void ot_state_change_callback(otChangedFlags changed_flags, void* ctx)
|
||||
{
|
||||
OT_UNUSED_VARIABLE(ctx);
|
||||
@ -99,6 +114,14 @@ static void ot_state_change_callback(otChangedFlags changed_flags, void* ctx)
|
||||
if (changed_flags & OT_CHANGED_THREAD_NETIF_STATE) {
|
||||
handle_ot_netif_state_change(instance);
|
||||
}
|
||||
|
||||
if (changed_flags & OT_CHANGED_ACTIVE_DATASET) {
|
||||
handle_ot_dataset_change(OPENTHREAD_ACTIVE_DATASET, instance);
|
||||
}
|
||||
|
||||
if (changed_flags & OT_CHANGED_PENDING_DATASET) {
|
||||
handle_ot_dataset_change(OPENTHREAD_PENDING_DATASET, instance);
|
||||
}
|
||||
}
|
||||
|
||||
esp_err_t esp_openthread_state_event_init(otInstance* instance)
|
||||
|
Loading…
x
Reference in New Issue
Block a user