140 esp_wifi_connect(); |
140 esp_wifi_connect(); |
141 break; |
141 break; |
142 |
142 |
143 // SYSTEM_EVENT_STA_STOP 3 |
143 // SYSTEM_EVENT_STA_STOP 3 |
144 case SYSTEM_EVENT_STA_CONNECTED: |
144 case SYSTEM_EVENT_STA_CONNECTED: |
145 ESP_LOGI(TAG, "Event STA connected, turn off AP"); |
145 ESP_LOGI(TAG, "Event STA connected"); |
146 wifi_ap_record_t ap_info; |
146 wifi_ap_record_t ap_info; |
147 esp_wifi_sta_get_ap_info(&ap_info); |
147 esp_wifi_sta_get_ap_info(&ap_info); |
148 if (xSemaphoreTake(xSemaphoreWiFi, 25) == pdTRUE) { |
148 if (xSemaphoreTake(xSemaphoreWiFi, 25) == pdTRUE) { |
149 wifi_state->STA_connected = true; |
149 wifi_state->STA_connected = true; |
150 wifi_state->STA_rssi = ap_info.rssi; |
150 wifi_state->STA_rssi = ap_info.rssi; |
151 sprintf(wifi_state->STA_ssid, "%s", ap_info.ssid); |
151 sprintf(wifi_state->STA_ssid, "%s", ap_info.ssid); |
152 xSemaphoreGive(xSemaphoreWiFi); |
152 xSemaphoreGive(xSemaphoreWiFi); |
153 } |
153 } |
154 // Turn off AP |
|
155 ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA)); |
|
156 xEventGroupSetBits(xEventGroupWifi, TASK_WIFI_STA_CONNECTED); |
154 xEventGroupSetBits(xEventGroupWifi, TASK_WIFI_STA_CONNECTED); |
157 xEventGroupClearBits(xEventGroupWifi, TASK_WIFI_STA_DISCONNECTED); |
155 xEventGroupClearBits(xEventGroupWifi, TASK_WIFI_STA_DISCONNECTED); |
158 break; |
156 break; |
159 |
157 |
160 case SYSTEM_EVENT_STA_DISCONNECTED: |
158 case SYSTEM_EVENT_STA_DISCONNECTED: |
161 ESP_LOGI(TAG, "Event STA disconnected, turn on AP"); |
159 ESP_LOGI(TAG, "Event STA disconnected"); |
162 if (xSemaphoreTake(xSemaphoreWiFi, 10) == pdTRUE) { |
160 if (xSemaphoreTake(xSemaphoreWiFi, 10) == pdTRUE) { |
163 wifi_state->STA_connected = false; |
161 wifi_state->STA_connected = false; |
164 wifi_state->STA_online = false; |
162 wifi_state->STA_online = false; |
165 wifi_state->STA_rssi = 0; |
163 wifi_state->STA_rssi = 0; |
166 xSemaphoreGive(xSemaphoreWiFi); |
164 xSemaphoreGive(xSemaphoreWiFi); |
167 } |
165 } |
168 // Turn on AP |
|
169 ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_APSTA)); |
|
170 xEventGroupClearBits(xEventGroupWifi, TASK_WIFI_STA_CONNECTED); |
166 xEventGroupClearBits(xEventGroupWifi, TASK_WIFI_STA_CONNECTED); |
171 xEventGroupSetBits(xEventGroupWifi, TASK_WIFI_STA_DISCONNECTED); |
167 xEventGroupSetBits(xEventGroupWifi, TASK_WIFI_STA_DISCONNECTED); |
172 |
168 |
173 /* |
169 /* |
174 * Meanwhile, try to reconnect. |
170 * Meanwhile, try to reconnect. |
178 } |
174 } |
179 break; |
175 break; |
180 |
176 |
181 // SYSTEM_EVENT_STA_AUTHMODE_CHANGE 6 |
177 // SYSTEM_EVENT_STA_AUTHMODE_CHANGE 6 |
182 case SYSTEM_EVENT_STA_GOT_IP: |
178 case SYSTEM_EVENT_STA_GOT_IP: |
183 // printf("SYSTEM_EVENT_STA_GOT_IP\n"); |
|
184 xEventGroupSetBits(xEventGroupWifi, TASK_WIFI_HAS_IP); |
179 xEventGroupSetBits(xEventGroupWifi, TASK_WIFI_HAS_IP); |
185 tcpip_adapter_ip_info_t ip; |
180 tcpip_adapter_ip_info_t ip; |
186 memset(&ip, 0, sizeof(tcpip_adapter_ip_info_t)); |
181 memset(&ip, 0, sizeof(tcpip_adapter_ip_info_t)); |
187 if (tcpip_adapter_get_ip_info(ESP_IF_WIFI_STA, &ip) == 0) { |
182 if (tcpip_adapter_get_ip_info(ESP_IF_WIFI_STA, &ip) == 0) { |
188 if (xSemaphoreTake(xSemaphoreWiFi, 10) == pdTRUE) { |
183 if (xSemaphoreTake(xSemaphoreWiFi, 10) == pdTRUE) { |