Don't turn on AP mode if connect was initially a success.

This commit is contained in:
Sebastien
2019-11-03 16:44:45 -05:00
parent 4df1698722
commit 9665e6485a

View File

@@ -79,10 +79,10 @@ Contains the freeRTOS task and all necessary support
#define FREE_AND_NULL(p) if(p!=NULL){ free(p); p=NULL;}
/* objects used to manipulate the main queue of events */
QueueHandle_t wifi_manager_queue;
SemaphoreHandle_t wifi_manager_json_mutex = NULL;
SemaphoreHandle_t wifi_manager_sta_ip_mutex = NULL;
char *wifi_manager_sta_ip = NULL;
bool bHasConnected=false;
uint16_t ap_num = MAX_AP_NUM;
wifi_ap_record_t *accessp_records=NULL;
cJSON * accessp_cjson=NULL;
@@ -154,6 +154,43 @@ const int WIFI_MANAGER_SCAN_BIT = BIT7;
/* @brief When set, means user requested for a disconnect */
const int WIFI_MANAGER_REQUEST_DISCONNECT_BIT = BIT8;
char * get_disconnect_code_desc(uint8_t reason){
switch (reason) {
case 1 : return "UNSPECIFIED"; break;
case 2 : return "AUTH_EXPIRE"; break;
case 3 : return "AUTH_LEAVE"; break;
case 4 : return "ASSOC_EXPIRE"; break;
case 5 : return "ASSOC_TOOMANY"; break;
case 6 : return "NOT_AUTHED"; break;
case 7 : return "NOT_ASSOCED"; break;
case 8 : return "ASSOC_LEAVE"; break;
case 9 : return "ASSOC_NOT_AUTHED"; break;
case 10 : return "DISASSOC_PWRCAP_BAD"; break;
case 11 : return "DISASSOC_SUPCHAN_BAD"; break;
case 12 : return "<n/a>"; break;
case 13 : return "IE_INVALID"; break;
case 14 : return "MIC_FAILURE"; break;
case 15 : return "4WAY_HANDSHAKE_TIMEOUT"; break;
case 16 : return "GROUP_KEY_UPDATE_TIMEOUT"; break;
case 17 : return "IE_IN_4WAY_DIFFERS"; break;
case 18 : return "GROUP_CIPHER_INVALID"; break;
case 19 : return "PAIRWISE_CIPHER_INVALID"; break;
case 20 : return "AKMP_INVALID"; break;
case 21 : return "UNSUPP_RSN_IE_VERSION"; break;
case 22 : return "INVALID_RSN_IE_CAP"; break;
case 23 : return "802_1X_AUTH_FAILED"; break;
case 24 : return "CIPHER_SUITE_REJECTED"; break;
case 200 : return "BEACON_TIMEOUT"; break;
case 201 : return "NO_AP_FOUND"; break;
case 202 : return "AUTH_FAIL"; break;
case 203 : return "ASSOC_FAIL"; break;
case 204 : return "HANDSHAKE_TIMEOUT"; break;
default: return "UNKNOWN"; break;
}
return "";
}
bool isGroupBitSet(uint8_t bit){
EventBits_t uxBits= xEventGroupGetBits(wifi_manager_event_group);
return (uxBits & bit);
@@ -174,7 +211,7 @@ void wifi_manager_disconnect_async(){
void wifi_manager_init_wifi(){
/* event handler and event group for the wifi driver */
wifi_manager_event_group = xEventGroupCreate();
bHasConnected=false;
// Now Initialize the Wifi Stack
tcpip_adapter_init();
wifi_manager_event_group = xEventGroupCreate();
@@ -679,7 +716,7 @@ static void event_handler(void* arg, esp_event_base_t event_base, int32_t event_
// reason of disconnection
wifi_event_sta_disconnected_t * s =(wifi_event_sta_disconnected_t*)event_data;
char * bssid = get_mac_string(s->bssid);
ESP_LOGI(TAG, "WIFI_EVENT_STA_DISCONNECTED. From BSSID: %s, reason code: %d", STR_OR_BLANK(bssid),s->reason);
ESP_LOGI(TAG, "WIFI_EVENT_STA_DISCONNECTED. From BSSID: %s, reason code: %d (%s)", STR_OR_BLANK(bssid),s->reason, get_disconnect_code_desc(s->reason));
FREE_AND_NULL(bssid);
if(last_connected>0) total_connected_time+=((esp_timer_get_time()-last_connected)/(1000*1000));
last_connected = 0;
@@ -918,7 +955,6 @@ void wifi_manager_register_handlers(){
ESP_ERROR_CHECK(esp_event_handler_register(WIFI_EVENT, WIFI_EVENT_STA_STOP, &event_handler, NULL));
ESP_ERROR_CHECK(esp_event_handler_register(WIFI_EVENT, WIFI_EVENT_STA_CONNECTED, &event_handler, NULL));
ESP_ERROR_CHECK(esp_event_handler_register(WIFI_EVENT, WIFI_EVENT_STA_DISCONNECTED, &event_handler, NULL));
// ESP_ERROR_CHECK(esp_event_handler_register(IP_EVENT, IP_EVENT, &event_handler, NULL));
ESP_ERROR_CHECK(esp_event_handler_register(IP_EVENT, IP_EVENT_STA_GOT_IP, &event_handler, NULL));
ESP_ERROR_CHECK(esp_event_handler_register(IP_EVENT, IP_EVENT_STA_LOST_IP, &event_handler, NULL));
ESP_ERROR_CHECK(esp_event_handler_register(IP_EVENT, IP_EVENT_AP_STAIPASSIGNED, &event_handler, NULL));
@@ -1190,7 +1226,7 @@ void wifi_manager( void * pvParameters ){
else{
memcpy(&disc_event,(wifi_event_sta_disconnected_t*)msg.param,sizeof(disc_event));
free(msg.param);
ESP_LOGI(TAG, "MESSAGE: EVENT_STA_DISCONNECTED with Reason code: %d", disc_event.reason);
ESP_LOGI(TAG, "MESSAGE: EVENT_STA_DISCONNECTED with Reason code: %d (%s)", disc_event.reason, get_disconnect_code_desc(disc_event.reason));
}
/* this even can be posted in numerous different conditions
@@ -1291,7 +1327,7 @@ void wifi_manager( void * pvParameters ){
if(retries < WIFI_MANAGER_MAX_RETRY){
ESP_LOGD(TAG, "Issuing ORDER_CONNECT_STA to retry connection.");
retries++;
if(!bHasConnected) retries++;
wifi_manager_send_message(ORDER_CONNECT_STA, (void*)CONNECTION_REQUEST_AUTO_RECONNECT);
}
else{
@@ -1366,6 +1402,7 @@ void wifi_manager( void * pvParameters ){
/* bring down DNS hijack */
ESP_LOGD(TAG,"Stopping dns server.");
dns_server_stop();
bHasConnected=true;
/* callback */
if(cb_ptr_arr[msg.code]) (*cb_ptr_arr[msg.code])(NULL);