Skip to content

Commit 28b7b4e

Browse files
committed
Move network events to their own task
1 parent 3ba46c7 commit 28b7b4e

File tree

1 file changed

+44
-1
lines changed

1 file changed

+44
-1
lines changed

libraries/WiFi/src/WiFiGeneric.cpp

Lines changed: 44 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -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+
5497
void 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

Comments
 (0)