/* OpenThread RCP Example This example code is in the Public Domain (or CC0 licensed, at your option.) Unless required by applicable law or agreed to in writing, this software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. */ #include #include #include "esp_event.h" #include "esp_openthread.h" #include "esp_ot_config.h" #include "esp_vfs_eventfd.h" #include "driver/uart.h" #if !CONFIG_IDF_TARGET_ESP32H2 #error "RCP is only supported for esp32h2" #endif #define TAG "ot_esp_rcp" extern void otAppNcpInit(otInstance *instance); static void ot_task_worker(void *aContext) { esp_openthread_platform_config_t config = { .radio_config = ESP_OPENTHREAD_DEFAULT_RADIO_CONFIG(), .host_config = ESP_OPENTHREAD_DEFAULT_HOST_CONFIG(), .port_config = ESP_OPENTHREAD_DEFAULT_PORT_CONFIG(), }; // Initialize the OpenThread stack ESP_ERROR_CHECK(esp_openthread_init(&config)); // Initialize the OpenThread ncp otAppNcpInit(esp_openthread_get_instance()); // Run the main loop esp_openthread_launch_mainloop(); // Clean up esp_vfs_eventfd_unregister(); vTaskDelete(NULL); } void app_main(void) { // Used eventfds: // * ot task queue // * radio driver esp_vfs_eventfd_config_t eventfd_config = { .max_fds = 2, }; ESP_ERROR_CHECK(esp_event_loop_create_default()); ESP_ERROR_CHECK(esp_vfs_eventfd_register(&eventfd_config)); xTaskCreate(ot_task_worker, "ot_rcp_main", 10240, xTaskGetCurrentTaskHandle(), 5, NULL); }