@@ -51,12 +51,55 @@ extern "C" {
51
51
#undef max
52
52
#include < vector>
53
53
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
+
54
97
void tcpipInit (){
55
98
static bool initialized = false ;
56
99
if (!initialized){
57
100
initialized = true ;
101
+ _start_network_event_task ();
58
102
tcpip_adapter_init ();
59
- esp_event_loop_init (&WiFiGenericClass::_eventCallback, NULL );
60
103
}
61
104
}
62
105
0 commit comments