diff --git a/esp32_marauder/MenuFunctions.cpp b/esp32_marauder/MenuFunctions.cpp index e84acac..4b65326 100644 --- a/esp32_marauder/MenuFunctions.cpp +++ b/esp32_marauder/MenuFunctions.cpp @@ -167,7 +167,7 @@ void join_wifi_keyboard_event_cb(lv_obj_t * keyboard, lv_event_t event){ printf("LV_EVENT_CANCEL\n"); //lv_textarea_set_text(lv_keyboard_get_textarea(kb), ""); menu_function_obj.deinitLVGL(); - wifi_scan_obj.StartScan(WIFI_SCAN_OFF); + //wifi_scan_obj.StartScan(WIFI_SCAN_OFF); display_obj.exit_draw = true; // set everything back to normal } } @@ -757,6 +757,7 @@ void MenuFunctions::RunSetup() }); addNodes(&wifiGeneralMenu, "Shutdown WiFi", TFT_ORANGE, NULL, SCANNERS, [this]() { changeMenu(&shutdownWiFiMenu); + wifi_scan_obj.RunShutdownWiFi(); }); // Build shutdown wifi menu diff --git a/esp32_marauder/WiFiScan.cpp b/esp32_marauder/WiFiScan.cpp index fbd7a3b..c9b30f5 100644 --- a/esp32_marauder/WiFiScan.cpp +++ b/esp32_marauder/WiFiScan.cpp @@ -151,8 +151,15 @@ void WiFiScan::joinWiFi(String ssid, String password) this->wifi_initialized = true; return; } - else if (WiFi.status() == WL_CONNECTED) + else if (WiFi.status() == WL_CONNECTED) { + Serial.println("Already connected. Disconnecting..."); WiFi.disconnect(); + } + + esp_wifi_init(&cfg); + esp_wifi_set_storage(WIFI_STORAGE_RAM); + esp_wifi_set_mode(WIFI_MODE_NULL); + esp_wifi_start(); WiFi.begin(ssid.c_str(), password.c_str()); @@ -224,12 +231,12 @@ void WiFiScan::StartScan(uint8_t scan_mode, uint16_t color) WiFiScan::currentScanMode = scan_mode; } -void WiFiScan::shutdownWiFi() { +bool WiFiScan::shutdownWiFi() { if (this->wifi_initialized) { Serial.println("Ahhh yes...promiscuity will end"); esp_wifi_set_promiscuous(false); //WiFi.persistent(false); - WiFi.disconnect(true); + WiFi.disconnect(); WiFi.mode(WIFI_OFF); esp_wifi_set_mode(WIFI_MODE_NULL); @@ -237,12 +244,15 @@ void WiFiScan::shutdownWiFi() { esp_wifi_deinit(); this->wifi_initialized = false; + return true; } - else + else { Serial.println(F("WiFi is not currently running")); + return false; + } } -void WiFiScan::shutdownBLE() { +bool WiFiScan::shutdownBLE() { if (this->ble_initialized) { Serial.println("Stopping BLE scan..."); pBLEScan->stop(); @@ -261,9 +271,12 @@ void WiFiScan::shutdownBLE() { //Serial.println("BT Controller Status: " + (String)esp_bt_controller_get_status()); this->ble_initialized = false; + return true; } - else + else { Serial.println(F("BLE is not currently running")); + return false; + } } // Function to stop all wifi scans @@ -393,6 +406,35 @@ void WiFiScan::RunLvJoinWiFi(uint8_t scan_mode, uint16_t color) { //display_obj.joinWiFiGFX(); } +void WiFiScan::RunShutdownWiFi() { + display_obj.tft.setTextWrap(false); + display_obj.tft.setFreeFont(NULL); + display_obj.tft.setCursor(0, 100); + display_obj.tft.setTextSize(1); + display_obj.tft.setTextColor(TFT_CYAN); + + display_obj.tft.print(F("Shutting down WiFi...")); + + if (this->wifi_initialized) { + this->shutdownWiFi(); + display_obj.tft.setTextColor(TFT_GREEN); + display_obj.tft.println(F("OK")); + } + else { + display_obj.tft.setTextColor(TFT_RED); + display_obj.tft.println(F("FAIL")); + display_obj.tft.println(F("WiFi not currently initialized")); + } +} + +void WiFiScan::RunShutdownBLE() { + display_obj.tft.setTextWrap(false); + display_obj.tft.setFreeFont(NULL); + display_obj.tft.setCursor(0, 100); + display_obj.tft.setTextSize(1); + display_obj.tft.setTextColor(TFT_CYAN); +} + void WiFiScan::RunInfo() { String sta_mac = this->getStaMAC(); diff --git a/esp32_marauder/WiFiScan.h b/esp32_marauder/WiFiScan.h index 29f42e9..e93ba31 100644 --- a/esp32_marauder/WiFiScan.h +++ b/esp32_marauder/WiFiScan.h @@ -171,13 +171,15 @@ class WiFiScan wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT(); void RunSetup(); - void shutdownWiFi(); - void shutdownBLE(); + bool shutdownWiFi(); + bool shutdownBLE(); void joinWiFi(String ssid, String password); String getStaMAC(); String getApMAC(); String freeRAM(); void RunInfo(); + void RunShutdownWiFi(); + void RunShutdownBLE(); void channelHop(); uint8_t currentScanMode = 0; void main(uint32_t currentTime);