// Copyright 2021 Espressif Systems (Shanghai) PTE LTD // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #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); }