@@ -51,12 +51,55 @@ extern "C" {
5151#undef max
5252#include < vector>
5353
54+
55+ static xQueueHandle _network_event_queue;
56+ static TaskHandle_t _network_event_task_handle = NULL ;
57+
58+ static void _network_event_task (void * arg){
59+ system_event_t *event = NULL ;
60+ for (;;) {
61+ if (xQueueReceive (_network_event_queue, &event, 0 ) == pdTRUE){
62+ WiFiGenericClass::_eventCallback (NULL , event);
63+ } else {
64+ vTaskDelay (1 );
65+ }
66+ }
67+ vTaskDelete (NULL );
68+ _network_event_task_handle = NULL ;
69+ }
70+
71+ static esp_err_t _network_event_cb (void *arg, system_event_t *event){
72+ if (xQueueSend (_network_event_queue, &event, portMAX_DELAY) != pdPASS) {
73+ log_w (" Network Event Queue Send Failed!" );
74+ return ESP_FAIL;
75+ }
76+ return ESP_OK;
77+ }
78+
79+ static void _start_network_event_task (){
80+ if (!_network_event_queue){
81+ _network_event_queue = xQueueCreate (32 , sizeof (system_event_t *));
82+ if (!_network_event_queue){
83+ log_e (" Network Event Queue Create Failed!" );
84+ return ;
85+ }
86+ }
87+ if (!_network_event_task_handle){
88+ xTaskCreatePinnedToCore (_network_event_task, " network_event" , 4096 , NULL , 2 , &_network_event_task_handle, 1 );
89+ if (!_network_event_task_handle){
90+ log_e (" Network Event Task Start Failed!" );
91+ return ;
92+ }
93+ }
94+ esp_event_loop_init (&_network_event_cb, NULL );
95+ }
96+
5497void tcpipInit (){
5598 static bool initialized = false ;
5699 if (!initialized){
57100 initialized = true ;
101+ _start_network_event_task ();
58102 tcpip_adapter_init ();
59- esp_event_loop_init (&WiFiGenericClass::_eventCallback, NULL );
60103 }
61104}
62105
0 commit comments