diff --git a/README.md b/README.md index 1dbd7e6..a0451e7 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ -# ESP32 Marauder v0.6.2 +# ESP32 Marauder v0.6.3

Marauder logo

A suite of WiFi/Bluetooth offensive and defensive tools for the ESP32 @@ -135,6 +135,7 @@ If you own an ESP32 Marauder (v0.4.0 or later) and have not build the project, y - Marauder will automatically reboot once the update has been applied ### SD Update +*Using a Samsung MicroSD card will cause Marauder not to boot* 1. Download the [latest release](https://github.com/justcallmekoko/ESP32Marauder/releases/latest) of the Marauder firmware 2. Copy the bin file you downloaded to the root of an SD card 3. Rename the bin file on the SD card to `update.bin` diff --git a/esp32_marauder/BatteryInterface.cpp b/esp32_marauder/BatteryInterface.cpp new file mode 100644 index 0000000..7565799 --- /dev/null +++ b/esp32_marauder/BatteryInterface.cpp @@ -0,0 +1,43 @@ +#include "BatteryInterface.h" + +BatteryInterface::BatteryInterface() { + +} + +void BatteryInterface::main(uint32_t currentTime) { + if (currentTime != 0) { + if (currentTime - initTime >= 3000) { + //Serial.println("Checking Battery Level"); + this->initTime = millis(); + int8_t new_level = this->getBatteryLevel(); + //this->battery_level = this->getBatteryLevel(); + if (this->battery_level != new_level) { + Serial.println("Battery Level changed: " + (String)new_level); + this->battery_level = new_level; + } + } + } +} + +void BatteryInterface::RunSetup() { + Wire.begin(I2C_SDA, I2C_SCL); + this->initTime = millis(); +} + +int8_t BatteryInterface::getBatteryLevel() { + Wire.beginTransmission(IP5306_ADDR); + Wire.write(0x78); + if (Wire.endTransmission(false) == 0 && + Wire.requestFrom(0x75, 1)) { + this->i2c_supported = true; + switch (Wire.read() & 0xF0) { + case 0xE0: return 25; + case 0xC0: return 50; + case 0x80: return 75; + case 0x00: return 100; + default: return 0; + } + } + this->i2c_supported = false; + return -1; +} diff --git a/esp32_marauder/BatteryInterface.h b/esp32_marauder/BatteryInterface.h new file mode 100644 index 0000000..bd14199 --- /dev/null +++ b/esp32_marauder/BatteryInterface.h @@ -0,0 +1,27 @@ +#ifndef BatteryInterface_h +#define BatteryInterface_h + +#include + +#include + +#define I2C_SDA 33 +#define I2C_SCL 22 +#define IP5306_ADDR 0x75 + +class BatteryInterface { + private: + uint32_t initTime = 0; + + public: + int8_t battery_level = 0; + bool i2c_supported = false; + + BatteryInterface(); + + void RunSetup(); + void main(uint32_t currentTime); + int8_t getBatteryLevel(); +}; + +#endif diff --git a/esp32_marauder/Display.cpp b/esp32_marauder/Display.cpp index fcebc88..b679b20 100644 --- a/esp32_marauder/Display.cpp +++ b/esp32_marauder/Display.cpp @@ -40,6 +40,10 @@ void Display::RunSetup() //tft.fillScreen(TFT_BLACK); clearScreen(); + Serial.println("SPI_FREQUENCY: " + (String)SPI_FREQUENCY); + Serial.println("SPI_READ_FREQUENCY: " + (String)SPI_READ_FREQUENCY); + Serial.println("SPI_TOUCH_FREQUENCY: " + (String)SPI_TOUCH_FREQUENCY); + // Initialize file system // This should probably have its own class diff --git a/esp32_marauder/Display.h b/esp32_marauder/Display.h index f70335b..a3da0c2 100644 --- a/esp32_marauder/Display.h +++ b/esp32_marauder/Display.h @@ -56,7 +56,7 @@ class Display TFT_eSPI tft = TFT_eSPI(); TFT_eSprite img = TFT_eSprite(&tft); TFT_eSPI_Button key[BUTTON_ARRAY_LEN]; - String version_number = "v0.6.2"; + String version_number = "v0.6.3"; bool printing = false; bool loading = false; diff --git a/esp32_marauder/TemperatureInterface.cpp b/esp32_marauder/TemperatureInterface.cpp new file mode 100644 index 0000000..7846eb4 --- /dev/null +++ b/esp32_marauder/TemperatureInterface.cpp @@ -0,0 +1,33 @@ +#include "TemperatureInterface.h" + +#ifdef __cplusplus +extern "C" { +#endif +uint8_t temprature_sens_read(); +#ifdef __cplusplus +} +#endif +uint8_t temprature_sens_read(); + +TemperatureInterface::TemperatureInterface() { + +} + +void TemperatureInterface::RunSetup() { + this->initTime = millis(); + this->current_temp = this->getCurrentTemp(); +} + +uint8_t TemperatureInterface::getCurrentTemp() { + return ((temprature_sens_read() - 32) / 1.8); +} + +void TemperatureInterface::main(uint32_t currentTime) { + if (currentTime != 0) { + if (currentTime - initTime >= 3000) { + //Serial.println("Checking Battery Level"); + this->initTime = millis(); + this->current_temp = this->getCurrentTemp(); + } + } +} diff --git a/esp32_marauder/TemperatureInterface.h b/esp32_marauder/TemperatureInterface.h new file mode 100644 index 0000000..345dc1f --- /dev/null +++ b/esp32_marauder/TemperatureInterface.h @@ -0,0 +1,21 @@ +#ifndef TemperatureInterface_h +#define TemperatureInterface_h + +#include + +class TemperatureInterface { + + private: + uint32_t initTime = 0; + + public: + TemperatureInterface(); + + uint8_t current_temp = 0; + + uint8_t getCurrentTemp(); + void RunSetup(); + void main(uint32_t currentTime); +}; + +#endif diff --git a/esp32_marauder/WiFiScan.cpp b/esp32_marauder/WiFiScan.cpp index 7e0844c..deac22f 100644 --- a/esp32_marauder/WiFiScan.cpp +++ b/esp32_marauder/WiFiScan.cpp @@ -272,20 +272,30 @@ void WiFiScan::RunInfo() //display_obj.tft.println(" Station MAC: " + sta_mac); //display_obj.tft.println(" AP MAC: " + ap_mac); - display_obj.tft.println(" Firmware: Marauder"); - display_obj.tft.println(" Version: " + display_obj.version_number + "\n"); - display_obj.tft.println(" " + free_ram); + display_obj.tft.println(" Firmware: Marauder"); + display_obj.tft.println(" Version: " + display_obj.version_number + "\n"); + display_obj.tft.println(" " + free_ram); if (sd_obj.supported) { - display_obj.tft.println(" SD Card: Connected"); - display_obj.tft.print("SD Card Size: "); + display_obj.tft.println(" SD Card: Connected"); + display_obj.tft.print(" SD Card Size: "); display_obj.tft.print(sd_obj.card_sz); display_obj.tft.println("MB"); } else { - display_obj.tft.println(" SD Card: Not Connected"); - display_obj.tft.println("SD Card Size: 0"); + display_obj.tft.println(" SD Card: Not Connected"); + display_obj.tft.println(" SD Card Size: 0"); } + + battery_obj.battery_level = battery_obj.getBatteryLevel(); + if (battery_obj.i2c_supported) { + display_obj.tft.println(" IP5306 I2C: supported"); + display_obj.tft.println(" Battery Lvl: " + (String)battery_obj.battery_level + "%"); + } + else + display_obj.tft.println(" IP5306 I2C: not supported"); + + display_obj.tft.println("Internal temp: " + (String)temp_obj.current_temp + " C"); } void WiFiScan::RunPacketMonitor(uint8_t scan_mode, uint16_t color) diff --git a/esp32_marauder/WiFiScan.h b/esp32_marauder/WiFiScan.h index 96d893a..ac2ca4c 100644 --- a/esp32_marauder/WiFiScan.h +++ b/esp32_marauder/WiFiScan.h @@ -14,6 +14,8 @@ #include "Display.h" #include "SDInterface.h" #include "Buffer.h" +#include "BatteryInterface.h" +#include "TemperatureInterface.h" //#include "MenuFunctions.h" #define bad_list_length 3 @@ -39,6 +41,8 @@ extern Display display_obj; extern SDInterface sd_obj; extern Buffer buffer_obj; +extern BatteryInterface battery_obj; +extern TemperatureInterface temp_obj; esp_err_t esp_wifi_80211_tx(wifi_interface_t ifx, const void *buffer, int len, bool en_sys_seq); diff --git a/esp32_marauder/esp32_marauder.ino b/esp32_marauder/esp32_marauder.ino index 3c15ded..1f793fe 100644 --- a/esp32_marauder/esp32_marauder.ino +++ b/esp32_marauder/esp32_marauder.ino @@ -23,14 +23,29 @@ https://www.online-utility.org/image/convert/to/XBM #include "SDInterface.h" #include "Web.h" #include "Buffer.h" +#include "BatteryInterface.h" +#include "TemperatureInterface.h" //#include "icons.h" +/* +#ifdef __cplusplus +extern "C" { +#endif +uint8_t temprature_sens_read(); +#ifdef __cplusplus +} +#endif +uint8_t temprature_sens_read(); +*/ + Display display_obj; WiFiScan wifi_scan_obj; MenuFunctions menu_function_obj; SDInterface sd_obj; Web web_obj; Buffer buffer_obj; +BatteryInterface battery_obj; +TemperatureInterface temp_obj; uint32_t currentTime = 0; @@ -54,6 +69,8 @@ void setup() Serial.println(" By: justcallmekoko\n"); Serial.println("--------------------------------\n\n"); + //Serial.println("Internal Temp: " + (String)((temprature_sens_read() - 32) / 1.8)); + // Do some SD stuff if(sd_obj.initSD()) Serial.println("SD Card supported"); @@ -65,12 +82,25 @@ void setup() // Build menus menu_function_obj.RunSetup(); + + // Battery stuff + battery_obj.RunSetup(); + + // Temperature stuff + temp_obj.RunSetup(); + + battery_obj.battery_level = battery_obj.getBatteryLevel(); + + if (battery_obj.i2c_supported) { + Serial.println("IP5306 I2C Supported: true"); + } + else + Serial.println("IP5306 I2C Supported: false"); } void loop() { - // get the current time //if ((wifi_scan_obj.currentScanMode != WIFI_ATTACK_BEACON_SPAM)) currentTime = millis(); @@ -83,6 +113,8 @@ void loop() display_obj.main(); wifi_scan_obj.main(currentTime); sd_obj.main(); + battery_obj.main(currentTime); + temp_obj.main(currentTime); //if ((wifi_scan_obj.currentScanMode != WIFI_ATTACK_BEACON_SPAM)) if ((wifi_scan_obj.currentScanMode != WIFI_PACKET_MONITOR) && (wifi_scan_obj.currentScanMode != WIFI_SCAN_EAPOL))