main/task_wifi.c

changeset 15
64028e178ff1
parent 9
1659bd3c7a2b
child 18
12506716211c
equal deleted inserted replaced
14:2a9f67ecbc72 15:64028e178ff1
40 /****************************************************************************/ 40 /****************************************************************************/
41 41
42 42
43 bool ready_WiFi(void) 43 bool ready_WiFi(void)
44 { 44 {
45 if (wifi_state->STA_connected && wifi_state->STA_online) 45 if ((xEventGroupGetBits(xEventGroupWifi) & (TASK_WIFI_STA_CONNECTED | TASK_WIFI_HAS_IP)) == (TASK_WIFI_STA_CONNECTED | TASK_WIFI_HAS_IP))
46 return true; 46 return true;
47 return false; 47 return false;
48 } 48 }
49 49
50 50
70 ESP_ERROR_CHECK(esp_netif_set_hostname(sta_netif, "balkon")); 70 ESP_ERROR_CHECK(esp_netif_set_hostname(sta_netif, "balkon"));
71 #endif 71 #endif
72 #ifdef CONFIG_CODE_TESTING 72 #ifdef CONFIG_CODE_TESTING
73 ESP_ERROR_CHECK(esp_netif_set_hostname(sta_netif, "wemos")); 73 ESP_ERROR_CHECK(esp_netif_set_hostname(sta_netif, "wemos"));
74 #endif 74 #endif
75 // ESP_ERROR_CHECK(esp_wifi_connect());
76 break; 75 break;
77 76
78 case WIFI_EVENT_STA_CONNECTED: { 77 case WIFI_EVENT_STA_CONNECTED: {
79 // system_event_sta_connected_t* event = (wifi_event_sta_connected_t*) event_data; 78 // system_event_sta_connected_t* event = (wifi_event_sta_connected_t*) event_data;
80 wifi_ap_record_t ap_info; 79 wifi_ap_record_t ap_info;
91 xEventGroupClearBits(xEventGroupWifi, TASK_WIFI_STA_DISCONNECTED); 90 xEventGroupClearBits(xEventGroupWifi, TASK_WIFI_STA_DISCONNECTED);
92 break; 91 break;
93 } 92 }
94 93
95 case WIFI_EVENT_STA_DISCONNECTED: { 94 case WIFI_EVENT_STA_DISCONNECTED: {
96 ESP_LOGI(TAG, "Event STA disconnected"); 95 wifi_event_sta_disconnected_t* disconnected = (wifi_event_sta_disconnected_t*) event_data;
97 // wifi_event_sta_disconnected_t* disconnected = (wifi_event_sta_disconnected_t*) event_data; 96
98 // ESP_LOGI(TAG, "Event STA disconnected, reason:%d", disconnected->reason); 97 ESP_LOGI(TAG, "Event STA disconnected, reason: %d", disconnected->reason);
98 if (disconnected->reason != 8)
99 request_mqtt(false);
99 if (xSemaphoreTake(xSemaphoreWiFi, 35) == pdTRUE) { 100 if (xSemaphoreTake(xSemaphoreWiFi, 35) == pdTRUE) {
100 wifi_state->STA_connected = false; 101 wifi_state->STA_connected = false;
101 wifi_state->STA_online = false; 102 wifi_state->STA_online = false;
102 xSemaphoreGive(xSemaphoreWiFi); 103 xSemaphoreGive(xSemaphoreWiFi);
103 } else { 104 } else {
104 ESP_LOGE(TAG, "wifi_event_handler() lock error WIFI_EVENT_STA_DISCONNECTED"); 105 ESP_LOGE(TAG, "wifi_event_handler() lock error WIFI_EVENT_STA_DISCONNECTED");
105 } 106 }
106 if (ready_mqtt())
107 connect_mqtt(false);
108 xEventGroupClearBits(xEventGroupWifi, TASK_WIFI_STA_CONNECTED); 107 xEventGroupClearBits(xEventGroupWifi, TASK_WIFI_STA_CONNECTED);
109 xEventGroupSetBits(xEventGroupWifi, TASK_WIFI_STA_DISCONNECTED); 108 xEventGroupSetBits(xEventGroupWifi, TASK_WIFI_STA_DISCONNECTED);
110 break; 109 break;
111 } 110 }
112 111
133 snprintf(wifi_state->STA_gw, 16, IPSTR, IP2STR(&event->ip_info.gw)); 132 snprintf(wifi_state->STA_gw, 16, IPSTR, IP2STR(&event->ip_info.gw));
134 xSemaphoreGive(xSemaphoreWiFi); 133 xSemaphoreGive(xSemaphoreWiFi);
135 } else { 134 } else {
136 ESP_LOGE(TAG, "got_ip_event_handler() lock error IP_EVENT_STA_GOT_IP"); 135 ESP_LOGE(TAG, "got_ip_event_handler() lock error IP_EVENT_STA_GOT_IP");
137 } 136 }
138 connect_mqtt(true);
139 break; 137 break;
140 138
141 case IP_EVENT_STA_LOST_IP: 139 case IP_EVENT_STA_LOST_IP:
142 ESP_LOGW(TAG, "Lost IP address"); 140 ESP_LOGW(TAG, "Lost IP address");
143 xEventGroupClearBits(xEventGroupWifi, TASK_WIFI_HAS_IP); 141 xEventGroupClearBits(xEventGroupWifi, TASK_WIFI_HAS_IP);
148 wifi_state->STA_online = false; 146 wifi_state->STA_online = false;
149 xSemaphoreGive(xSemaphoreWiFi); 147 xSemaphoreGive(xSemaphoreWiFi);
150 } else { 148 } else {
151 ESP_LOGE(TAG, "got_ip_event_handler() lock error IP_EVENT_STA_LOST_IP"); 149 ESP_LOGE(TAG, "got_ip_event_handler() lock error IP_EVENT_STA_LOST_IP");
152 } 150 }
153 if (ready_mqtt())
154 connect_mqtt(false);
155 break; 151 break;
156 152
157 default: 153 default:
158 ESP_LOGW(TAG, "Unknown IP event %d", (int)event_id); 154 ESP_LOGW(TAG, "Unknown IP event %d", (int)event_id);
159 break; 155 break;
213 if (uxBits & TASK_WIFI_REQUEST_STA_DISCONNECT) { 209 if (uxBits & TASK_WIFI_REQUEST_STA_DISCONNECT) {
214 /* 210 /*
215 * user requested a disconnect, this will in effect disconnect the wifi 211 * user requested a disconnect, this will in effect disconnect the wifi
216 */ 212 */
217 ESP_LOGI(TAG, "Request STA disconnect"); 213 ESP_LOGI(TAG, "Request STA disconnect");
218 connect_mqtt(false);
219 wait_mqtt(10000);
220 ESP_ERROR_CHECK(esp_wifi_disconnect()); 214 ESP_ERROR_CHECK(esp_wifi_disconnect());
221 xEventGroupWaitBits(xEventGroupWifi, TASK_WIFI_STA_DISCONNECTED, pdFALSE, pdTRUE, portMAX_DELAY ); 215 xEventGroupWaitBits(xEventGroupWifi, TASK_WIFI_STA_DISCONNECTED, pdFALSE, pdTRUE, portMAX_DELAY );
222 216
223 /* finally: release the request bit */ 217 /* finally: release the request bit */
224 xEventGroupClearBits(xEventGroupWifi, TASK_WIFI_REQUEST_STA_DISCONNECT); 218 xEventGroupClearBits(xEventGroupWifi, TASK_WIFI_REQUEST_STA_DISCONNECT);

mercurial