Compare commits

...

47 Commits

Author SHA1 Message Date
Just Call Me Koko
9a1ee15345 v0.9.7 Release 2022-05-28 14:29:15 -04:00
Just Call Me Koko
da538934e3 Trims serial input for PuTTY 2022-05-28 13:51:12 -04:00
Just Call Me Koko
e2b52f74e5 Merge pull request #122 from justcallmekoko/develop
Fix Marauder OTA for Flipper Zero
2022-05-28 09:51:00 -04:00
Just Call Me Koko
546afc63a7 Fix Marauder OTA for Flipper Zero 2022-05-28 09:47:06 -04:00
Just Call Me Koko
2f0d05a538 Develop (#121)
* Adding new library, changing way of displaying texts (#118)

* Adding custom icon for language button

* Adding new library, changing way of displaying texts

Added new library to make incoming translation possible to exists at the same time.

* Prepare for flipper integration

* More flipper wifi dev board work

* Add command parse

* Add set channel

* Create bins for release v0.9.6

Co-authored-by: mlodawy <105587112+mlodawy@users.noreply.github.com>
2022-05-28 09:06:59 -04:00
mlodawy
9f013d3d52 Adding custom icon for language button (#117) 2022-05-16 11:10:54 -04:00
mlodawy
45db8f3c22 Merge pull request #1 from justcallmekoko/master (#116) 2022-05-15 11:04:36 -04:00
Just Call Me Koko
e490b40196 Merge branch 'master' into master 2022-05-15 11:01:25 -04:00
mlodawy
72edd3d43d Add langauge button 2022-05-15 16:54:53 +02:00
Just Call Me Koko
bc6a07f5cb Add polish potato 2022-05-15 10:17:32 -04:00
Just Call Me Koko
bd7a350a9b Resize Marauder logo 2022-05-11 23:48:30 -04:00
Just Call Me Koko
cdd0ee5976 Add sniff deauth command 2022-05-11 18:53:55 -04:00
Just Call Me Koko
d7aac68866 Center click exit scan 2022-05-09 20:30:08 -04:00
Just Call Me Koko
0f58a0657b PROGMEM commands and remove mini lv_arduino 2022-05-07 14:36:44 -04:00
Gregor Hermani
d9a6966574 add Marauder Mini Case and rearrange files (#112) 2022-05-04 10:12:57 -04:00
Just Call Me Koko
5341c559be Add come cli commands 2022-05-03 00:44:07 -04:00
Just Call Me Koko
2c4edd012d Add some command line stuff 2022-05-03 00:22:11 -04:00
Just Call Me Koko
3b09650363 Merge branch 'master' of https://github.com/justcallmekoko/ESP32Marauder 2022-05-02 21:44:43 -04:00
Just Call Me Koko
7d6d0517e1 Add Marauder Mini Configuration 2022-05-02 21:44:42 -04:00
Just Call Me Koko
30020dd710 Add files via upload 2022-04-29 11:51:46 -04:00
Just Call Me Koko
3d2bb75081 Add files via upload 2022-04-29 11:51:29 -04:00
Just Call Me Koko
95841e5384 Add files via upload 2022-04-29 11:50:14 -04:00
Just Call Me Koko
a73ae2bbcb Create README.md 2022-04-29 11:48:52 -04:00
Just Call Me Koko
ae1aebde50 Add files via upload 2022-04-29 11:46:44 -04:00
Just Call Me Koko
9134280c6a Add files via upload 2022-04-29 11:45:23 -04:00
Just Call Me Koko
93d0f2e1d2 Create PCB_ESP32 Marauder 3.5 Kit V3 PCB_2022-04-29.json 2022-04-29 11:40:20 -04:00
Just Call Me Koko
e3f365febf Create PCB_ESP32 Marauder 3.7 OG PCB_2022-04-29.json 2022-04-29 11:38:31 -04:00
Just Call Me Koko
66576c1908 Create PCB_ESP32 Marauder 6 PCB_2022-04-29.json 2022-04-29 11:28:22 -04:00
Just Call Me Koko
8c53ac679f Update README.md 2022-01-19 11:36:25 -05:00
Just Call Me Koko
2d33c0b5ab Re-release v0.9.5
Fix some screen issues I guess?
2022-01-19 11:30:18 -05:00
Just Call Me Koko
ec4fc7487f Release v0.9.5 2022-01-18 23:30:10 -05:00
Just Call Me Koko
71ced23041 Settings actually work 2022-01-18 23:20:42 -05:00
Just Call Me Koko
8e874c493b Actually made settings work 2022-01-18 03:29:45 -05:00
Just Call Me Koko
373482822a Make settings available on Menu 2021-07-28 23:24:18 -04:00
Just Call Me Koko
bca0f70073 Add specific setting retrieval 2021-07-27 22:06:04 -04:00
Just Call Me Koko
37c65bf6f1 Add settings function 2021-07-25 21:33:21 -04:00
Just Call Me Koko
b7be44d5ea Update Display.h 2021-07-25 11:54:29 -04:00
Just Call Me Koko
503e65e012 Update README.md for version 0.9.3 2021-07-24 12:23:56 -04:00
Just Call Me Koko
a78d5b792c Create MarauderOTA firmware 2021-07-24 12:00:11 -04:00
Just Call Me Koko
38098cb9e5 Release v0.9.3 2021-07-24 09:03:17 -04:00
Just Call Me Koko
466d5fbb1a Fix definitions 2021-07-24 01:20:17 -04:00
Just Call Me Koko
51a7ff7e26 Add deauthentication attack 2021-07-24 00:16:56 -04:00
Just Call Me Koko
f166c7a4df Pre ESP-IDF v4.4 2021-07-24 00:14:23 -04:00
Just Call Me Koko
9e1fe534b0 Move Marauder splash screen to byte array 2021-07-22 17:48:56 -04:00
Just Call Me Koko
a23e7a4c48 Add kit firmware modifications 2021-07-08 18:44:47 -04:00
Just Call Me Koko
f801ba0bc5 Update README.md 2021-07-01 11:06:54 -04:00
Just Call Me Koko
31687c10cb Fake wifi functions 2021-06-15 16:33:45 -04:00
72 changed files with 146710 additions and 5174 deletions

309
MarauderOTA/MarauderOTA.ino Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

1
PCBs/v4(OG)/README.md Normal file
View File

@@ -0,0 +1 @@
Further resources can be found [here](http://www.lcdwiki.com/2.8inch_SPI_Module_ILI9341_SKU:MSP2807)

File diff suppressed because one or more lines are too long

Binary file not shown.

View File

@@ -3,7 +3,7 @@
<!---[![Build Status](https://travis-ci.com/justcallmekoko/ESP32Marauder.svg?branch=master)](https://travis-ci.com/justcallmekoko/ESP32Marauder)---> <!---[![Build Status](https://travis-ci.com/justcallmekoko/ESP32Marauder.svg?branch=master)](https://travis-ci.com/justcallmekoko/ESP32Marauder)--->
<!---Shields/Badges https://shields.io/---> <!---Shields/Badges https://shields.io/--->
# ESP32 Marauder v0.9.1 # ESP32 Marauder v0.9.5
<p align="center"><img alt="Marauder logo" src="https://github.com/justcallmekoko/ESP32Marauder/blob/master/pictures/marauder3L.jpg?raw=true" width="300"></p> <p align="center"><img alt="Marauder logo" src="https://github.com/justcallmekoko/ESP32Marauder/blob/master/pictures/marauder3L.jpg?raw=true" width="300"></p>
<p align="center"> <p align="center">
<b>A suite of WiFi/Bluetooth offensive and defensive tools for the ESP32</b> <b>A suite of WiFi/Bluetooth offensive and defensive tools for the ESP32</b>
@@ -19,8 +19,6 @@
<br> <br>
<a href="https://www.twitch.tv/willstunforfood"><img src="https://assets.stickpng.com/images/580b57fcd9996e24bc43c540.png" alt="Twitch WillStunForFood" width="200"></a> <a href="https://www.twitch.tv/willstunforfood"><img src="https://assets.stickpng.com/images/580b57fcd9996e24bc43c540.png" alt="Twitch WillStunForFood" width="200"></a>
</p> </p>
Catch my live stream on [Twitch](https://www.twitch.tv/willstunforfood) where I play games, have just chatting sessions to talk tech, and just generally be an ordinary person who can't figure out how to make proper life decisions.
## Getting Started ## Getting Started
Download the [latest release](https://github.com/justcallmekoko/ESP32Marauder/releases/latest) of the firmware. Download the [latest release](https://github.com/justcallmekoko/ESP32Marauder/releases/latest) of the firmware.

File diff suppressed because one or more lines are too long

View File

@@ -1,43 +1,49 @@
#include "BatteryInterface.h" #include "BatteryInterface.h"
#include "lang_var.h"
BatteryInterface::BatteryInterface() { BatteryInterface::BatteryInterface() {
} }
void BatteryInterface::main(uint32_t currentTime) { void BatteryInterface::main(uint32_t currentTime) {
if (currentTime != 0) { #ifndef MARAUDER_FLIPPER
if (currentTime - initTime >= 3000) { if (currentTime != 0) {
//Serial.println("Checking Battery Level"); if (currentTime - initTime >= 3000) {
this->initTime = millis(); //Serial.println("Checking Battery Level");
int8_t new_level = this->getBatteryLevel(); this->initTime = millis();
//this->battery_level = this->getBatteryLevel(); int8_t new_level = this->getBatteryLevel();
if (this->battery_level != new_level) { //this->battery_level = this->getBatteryLevel();
Serial.println("Battery Level changed: " + (String)new_level); if (this->battery_level != new_level) {
this->battery_level = new_level; Serial.println(text00 + (String)new_level);
this->battery_level = new_level;
}
} }
} }
} #endif
} }
void BatteryInterface::RunSetup() { void BatteryInterface::RunSetup() {
Wire.begin(I2C_SDA, I2C_SCL); #ifndef MARAUDER_FLIPPER
this->initTime = millis(); Wire.begin(I2C_SDA, I2C_SCL);
this->initTime = millis();
#endif
} }
int8_t BatteryInterface::getBatteryLevel() { int8_t BatteryInterface::getBatteryLevel() {
Wire.beginTransmission(IP5306_ADDR); #ifndef MARAUDER_FLIPPER
Wire.write(0x78); Wire.beginTransmission(IP5306_ADDR);
if (Wire.endTransmission(false) == 0 && Wire.write(0x78);
Wire.requestFrom(0x75, 1)) { if (Wire.endTransmission(false) == 0 &&
this->i2c_supported = true; Wire.requestFrom(0x75, 1)) {
switch (Wire.read() & 0xF0) { this->i2c_supported = true;
case 0xE0: return 25; switch (Wire.read() & 0xF0) {
case 0xC0: return 50; case 0xE0: return 25;
case 0x80: return 75; case 0xC0: return 50;
case 0x00: return 100; case 0x80: return 75;
default: return 0; case 0x00: return 100;
default: return 0;
}
} }
} this->i2c_supported = false;
this->i2c_supported = false; return -1;
return -1; #endif
} }

View File

@@ -3,7 +3,11 @@
#include <Arduino.h> #include <Arduino.h>
#include <Wire.h> #include "configs.h"
#ifndef MARAUDER_FLIPPER
#include <Wire.h>
#endif
#define I2C_SDA 33 #define I2C_SDA 33
#define I2C_SCL 22 #define I2C_SCL 22

View File

@@ -1,4 +1,5 @@
#include "Buffer.h" #include "Buffer.h"
#include "lang_var.h"
Buffer::Buffer(){ Buffer::Buffer(){
bufA = (uint8_t*)malloc(BUF_SIZE); bufA = (uint8_t*)malloc(BUF_SIZE);
@@ -37,7 +38,7 @@ void Buffer::close(fs::FS* fs){
if(!writing) return; if(!writing) return;
forceSave(fs); forceSave(fs);
writing = false; writing = false;
Serial.println("file closed"); Serial.println(text01);
} }
void Buffer::addPacket(uint8_t* buf, uint32_t len){ void Buffer::addPacket(uint8_t* buf, uint32_t len){
@@ -123,7 +124,7 @@ void Buffer::save(fs::FS* fs){
file = fs->open(fileName, FILE_APPEND); file = fs->open(fileName, FILE_APPEND);
if (!file) { if (!file) {
Serial.println("Failed to open file '"+fileName+"'"); Serial.println(text02 + fileName+"'");
//useSD = false; //useSD = false;
return; return;
} }
@@ -159,7 +160,7 @@ void Buffer::forceSave(fs::FS* fs){
file = fs->open(fileName, FILE_APPEND); file = fs->open(fileName, FILE_APPEND);
if (!file) { if (!file) {
Serial.println("Failed to open file '"+fileName+"'"); Serial.println(text02+fileName+"'");
//useSD = false; //useSD = false;
return; return;
} }

View File

@@ -1,41 +1,44 @@
#ifndef Buffer_h #ifndef Buffer_h
#define Buffer_h #define Buffer_h
#include "Arduino.h" #include "Arduino.h"
#include "FS.h" #include "FS.h"
//#include "SD_MMC.h" #include "settings.h"
//#include "SD_MMC.h"
#define BUF_SIZE 3 * 1024 // Had to reduce buffer size to save RAM. GG @spacehuhn
#define SNAP_LEN 2324 // max len of each recieved packet #define BUF_SIZE 3 * 1024 // Had to reduce buffer size to save RAM. GG @spacehuhn
#define SNAP_LEN 2324 // max len of each recieved packet
//extern bool useSD;
//extern bool useSD;
class Buffer {
public: extern Settings settings_obj;
Buffer();
void open(fs::FS* fs, String fn = ""); class Buffer {
void close(fs::FS* fs); public:
void addPacket(uint8_t* buf, uint32_t len); Buffer();
void save(fs::FS* fs); void open(fs::FS* fs, String fn = "");
void forceSave(fs::FS* fs); void close(fs::FS* fs);
private: void addPacket(uint8_t* buf, uint32_t len);
void write(int32_t n); void save(fs::FS* fs);
void write(uint32_t n); void forceSave(fs::FS* fs);
void write(uint16_t n); private:
void write(uint8_t* buf, uint32_t len); void write(int32_t n);
void write(uint32_t n);
uint8_t* bufA; void write(uint16_t n);
uint8_t* bufB; void write(uint8_t* buf, uint32_t len);
uint32_t bufSizeA = 0; uint8_t* bufA;
uint32_t bufSizeB = 0; uint8_t* bufB;
bool writing = false; // acceppting writes to buffer uint32_t bufSizeA = 0;
bool useA = true; // writing to bufA or bufB uint32_t bufSizeB = 0;
bool saving = false; // currently saving onto the SD card
bool writing = false; // acceppting writes to buffer
String fileName = "/0.pcap"; bool useA = true; // writing to bufA or bufB
File file; bool saving = false; // currently saving onto the SD card
};
String fileName = "/0.pcap";
#endif File file;
};
#endif

View File

@@ -0,0 +1,138 @@
#include "CommandLine.h"
CommandLine::CommandLine() {
}
void CommandLine::RunSetup() {
Serial.print("> ");
}
String CommandLine::getSerialInput() {
String input = "";
if (Serial.available() > 0)
input = Serial.readStringUntil('\n');
input.trim();
return input;
}
void CommandLine::main(uint32_t currentTime) {
String input = this->getSerialInput();
this->runCommand(input);
if (input != "")
Serial.print("> ");
}
LinkedList<String> CommandLine::parseCommand(String input) {
LinkedList<String> cmd_args;
if (input != "") {
char delim[] = " ";
char fancy[input.length() + 1] = {};
input.toCharArray(fancy, input.length() + 1);
char* ptr = strtok(fancy, delim);
while (ptr != NULL) {
cmd_args.add(String(ptr));
ptr = strtok(NULL, delim);
}
//memset(fancy, 0, sizeof(fancy));
// Display the segmented cmd
//for (int i = 0; i < cmd_args.size(); i++) {
// Serial.println(cmd_args.get(i));
//}
}
return cmd_args;
}
int CommandLine::argSearch(LinkedList<String>* cmd_args_list, String key) {
for (int i = 0; i < cmd_args_list->size(); i++) {
if (cmd_args_list->get(i) == key)
return i;
}
return -1;
}
void CommandLine::runCommand(String input) {
if (input != "")
Serial.println("#" + input);
else
return;
LinkedList<String> cmd_args = this->parseCommand(input);
//// Admin commands
// Stop Scan
if (cmd_args.get(0) == STOPSCAN_CMD) {
wifi_scan_obj.StartScan(WIFI_SCAN_OFF);
// If we don't do this, the text and button coordinates will be off
#ifdef HAS_SCREEN
display_obj.tft.init();
menu_function_obj.changeMenu(menu_function_obj.current_menu);
#endif
}
// Channel command
else if (cmd_args.get(0) == CH_CMD) {
// Search for channel set arg
int ch_set = this->argSearch(&cmd_args, "-s");
if (cmd_args.size() == 1) {
Serial.println("Current channel: " + (String)wifi_scan_obj.set_channel);
}
else if (ch_set != -1) {
wifi_scan_obj.set_channel = cmd_args.get(ch_set + 1).toInt();
wifi_scan_obj.changeChannel();
Serial.println("Set channel: " + (String)wifi_scan_obj.set_channel);
}
}
// Clear APs
else if (cmd_args.get(0) == CLEARAP_CMD) {
wifi_scan_obj.RunClearAPs();
}
//// WiFi Scan commands
if (!wifi_scan_obj.scanning()) {
// AP Scan
if (cmd_args.get(0) == SCANAP_CMD) {
#ifdef HAS_SCREEN
display_obj.clearScreen();
menu_function_obj.drawStatusBar();
#endif
wifi_scan_obj.StartScan(WIFI_SCAN_TARGET_AP, TFT_MAGENTA);
}
// Beacon sniff
else if (cmd_args.get(0) == SNIFF_BEACON_CMD) {
#ifdef HAS_SCREEN
display_obj.clearScreen();
menu_function_obj.drawStatusBar();
#endif
wifi_scan_obj.StartScan(WIFI_SCAN_AP, TFT_MAGENTA);
}
// Deauth sniff
else if (cmd_args.get(0) == SNIFF_DEAUTH_CMD) {
#ifdef HAS_SCREEN
display_obj.clearScreen();
menu_function_obj.drawStatusBar();
#endif
wifi_scan_obj.StartScan(WIFI_SCAN_DEAUTH, TFT_RED);
}
// PMKID sniff
else if (cmd_args.get(0) == SNIFF_PMKID_CMD) {
wifi_scan_obj.StartScan(WIFI_SCAN_EAPOL, TFT_VIOLET);
}
}
}

View File

@@ -0,0 +1,43 @@
#ifndef CommandLine_h
#define CommandLine_h
#include "configs.h"
#ifdef HAS_SCREEN
#include "MenuFunctions.h"
#include "Display.h"
#endif
#include "WiFiScan.h"
#ifdef HAS_SCREEN
extern MenuFunctions menu_function_obj;
extern Display display_obj;
#endif
extern WiFiScan wifi_scan_obj;
// Commands
const char PROGMEM CH_CMD[] = "channel";
const char PROGMEM SCANAP_CMD[] = "scanap";
const char PROGMEM SNIFF_BEACON_CMD[] = "sniffbeacon";
const char PROGMEM SNIFF_DEAUTH_CMD[] = "sniffdeauth";
const char PROGMEM SNIFF_PMKID_CMD[] = "sniffpmkid";
const char PROGMEM STOPSCAN_CMD[] = "stopscan";
const char PROGMEM CLEARAP_CMD[] = "clearap";
class CommandLine {
private:
String getSerialInput();
LinkedList<String> parseCommand(String input);
void runCommand(String input);
int argSearch(LinkedList<String>* cmd_args, String key);
public:
CommandLine();
void RunSetup();
void main(uint32_t currentTime);
};
#endif

View File

@@ -1,15 +1,7 @@
#include "Display.h" #include "Display.h"
#include "lang_var.h"
#ifdef HAS_SCREEN
/*
Big thanks to bodmer for having great TFT and JPEG libraries
https://github.com/bodmer
*/
//PROGMEM lv_obj_t * slider_label;
//PROGMEM lv_obj_t * ta1;
//PROGMEM lv_obj_t * ta2;
Display::Display() Display::Display()
{ {
@@ -27,118 +19,58 @@ void Display::RunSetup()
tft.setRotation(0); // Portrait tft.setRotation(0); // Portrait
tft.setCursor(0, 0); tft.setCursor(0, 0);
//tft.setFreeFont(&FreeMonoBold9pt7b);
// Calibration data #ifndef MARAUDER_MINI
//uint16_t calData[5] = { 390, 3516, 253, 3520, 7 }; tft.setRotation(1); // Portrait
#ifdef TFT_SHIELD
uint16_t calData[5] = { 275, 3494, 361, 3528, 4 }; // tft.setRotation(0); // Portrait with TFT Shield
Serial.println(F("Using TFT Shield"));
#else if defined(TFT_DIY)
uint16_t calData[5] = { 339, 3470, 237, 3438, 2 }; // tft.setRotation(0); // Portrait with DIY TFT
Serial.println(F("Using TFT DIY"));
#endif
tft.setTouch(calData);
#ifdef TFT_SHIELD
uint16_t calData[5] = { 275, 3494, 361, 3528, 4 }; // tft.setRotation(0); // Portrait with TFT Shield
Serial.println(F("Using TFT Shield"));
#else if defined(TFT_DIY)
uint16_t calData[5] = { 339, 3470, 237, 3438, 2 }; // tft.setRotation(0); // Portrait with DIY TFT
Serial.println(F("Using TFT DIY"));
#endif #endif
tft.setTouch(calData);
//tft.fillScreen(TFT_BLACK); //tft.fillScreen(TFT_BLACK);
clearScreen(); clearScreen();
Serial.println("SPI_FREQUENCY: " + (String)SPI_FREQUENCY); Serial.println("SPI_FREQUENCY: " + (String)SPI_FREQUENCY);
Serial.println("SPI_READ_FREQUENCY: " + (String)SPI_READ_FREQUENCY); Serial.println("SPI_READ_FREQUENCY:" + (String)SPI_READ_FREQUENCY);
Serial.println("SPI_TOUCH_FREQUENCY: " + (String)SPI_TOUCH_FREQUENCY); Serial.println("SPI_TOUCH_FREQUENCY: " + (String)SPI_TOUCH_FREQUENCY);
#ifdef KIT
// Initialize file system pinMode(KIT_LED_BUILTIN, OUTPUT);
// This should probably have its own class #endif
if (!SPIFFS.begin()) {
Serial.println(F("SPIFFS initialisation failed!"));
while (1) yield(); // Stay here twiddling thumbs waiting
}
//this->initLVGL();
// Draw the title screen
//drawJpeg("/marauder3L.jpg", 0 , 0); // 240 x 320 image
//showCenterText(version_number, 250);
//tft.drawCentreString(version_number, 120, 250, 2);
//digitalWrite(TFT_BL, HIGH);
//delay(5000);
} }
/* Interrupt driven periodic handler */ void Display::drawFrame()
/*
void Display::lv_tick_handler()
{ {
lv_tick_inc(LVGL_TICK_PERIOD); tft.drawRect(FRAME_X, FRAME_Y, FRAME_W, FRAME_H, TFT_BLACK);
}*/
/* Display flushing */
/*
void my_disp_flush(lv_disp_drv_t *disp, const lv_area_t *area, lv_color_t *color_p)
{
extern Display display_obj;
uint16_t c;
display_obj.tft.startWrite();
display_obj.tft.setAddrWindow(area->x1, area->y1, (area->x2 - area->x1 + 1), (area->y2 - area->y1 + 1));
for (int y = area->y1; y <= area->y2; y++) {
for (int x = area->x1; x <= area->x2; x++) {
c = color_p->full;
display_obj.tft.writeColor(c, 1);
color_p++;
}
}
display_obj.tft.endWrite();
lv_disp_flush_ready(disp);
} }
void Display::tftDrawRedOnOffButton() {
tft.fillRect(REDBUTTON_X, REDBUTTON_Y, REDBUTTON_W, REDBUTTON_H, TFT_RED);
tft.fillRect(GREENBUTTON_X, GREENBUTTON_Y, GREENBUTTON_W, GREENBUTTON_H, TFT_DARKGREY);
drawFrame();
tft.setTextColor(TFT_WHITE);
tft.setTextSize(2);
tft.setTextDatum(MC_DATUM);
tft.drawString(text03, GREENBUTTON_X + (GREENBUTTON_W / 2), GREENBUTTON_Y + (GREENBUTTON_H / 2));
this->SwitchOn = false;
}
bool my_touchpad_read(lv_indev_drv_t * indev_driver, lv_indev_data_t * data) void Display::tftDrawGreenOnOffButton() {
{ tft.fillRect(GREENBUTTON_X, GREENBUTTON_Y, GREENBUTTON_W, GREENBUTTON_H, TFT_GREEN);
extern Display display_obj; tft.fillRect(REDBUTTON_X, REDBUTTON_Y, REDBUTTON_W, REDBUTTON_H, TFT_DARKGREY);
drawFrame();
uint16_t touchX, touchY; tft.setTextColor(TFT_WHITE);
tft.setTextSize(2);
bool touched = display_obj.tft.getTouch(&touchX, &touchY, 600); tft.setTextDatum(MC_DATUM);
tft.drawString(text04, REDBUTTON_X + (REDBUTTON_W / 2) + 1, REDBUTTON_Y + (REDBUTTON_H / 2));
if(!touched) this->SwitchOn = true;
{ }
return false;
}
if(touchX>WIDTH_1 || touchY > HEIGHT_1)
{
Serial.println("Y or y outside of expected parameters..");
Serial.print("y:");
Serial.print(touchX);
Serial.print(" x:");
Serial.print(touchY);
}
else
{
data->state = touched ? LV_INDEV_STATE_PR : LV_INDEV_STATE_REL;
//if(data->state == LV_INDEV_STATE_PR) touchpad_get_xy(&last_x, &last_y);
data->point.x = touchX;
data->point.y = touchY;
Serial.print("Data x");
Serial.println(touchX);
Serial.print("Data y");
Serial.println(touchY);
}
return false;
}*/
void Display::tftDrawGraphObjects(byte x_scale) void Display::tftDrawGraphObjects(byte x_scale)
{ {
@@ -238,7 +170,7 @@ void Display::tftDrawYScaleButtons(byte y_scale)
void Display::tftDrawChannelScaleButtons(int set_channel) void Display::tftDrawChannelScaleButtons(int set_channel)
{ {
tft.drawFastVLine(178, 0, 20, TFT_WHITE); tft.drawFastVLine(178, 0, 20, TFT_WHITE);
tft.setCursor(145, 21); tft.setTextColor(TFT_WHITE); tft.setTextSize(1); tft.print("Channel:"); tft.print(set_channel); tft.setCursor(145, 21); tft.setTextColor(TFT_WHITE); tft.setTextSize(1); tft.print(text10); tft.print(set_channel);
key[4].initButton(&tft, // channel - box key[4].initButton(&tft, // channel - box
164, 164,
@@ -308,7 +240,7 @@ void Display::touchToExit()
{ {
tft.setTextColor(TFT_BLACK, TFT_LIGHTGREY); tft.setTextColor(TFT_BLACK, TFT_LIGHTGREY);
tft.fillRect(0,32,HEIGHT_1,16, TFT_LIGHTGREY); tft.fillRect(0,32,HEIGHT_1,16, TFT_LIGHTGREY);
tft.drawCentreString("Touch screen to exit",120,32,2); tft.drawCentreString(text11,120,32,2);
} }
@@ -417,20 +349,24 @@ void Display::setupScrollArea(uint16_t tfa, uint16_t bfa) {
Serial.println(" tfa: " + (String)tfa); Serial.println(" tfa: " + (String)tfa);
Serial.println(" bfa: " + (String)bfa); Serial.println(" bfa: " + (String)bfa);
Serial.println("yStart: " + (String)this->yStart); Serial.println("yStart: " + (String)this->yStart);
tft.writecommand(ILI9341_VSCRDEF); // Vertical scroll definition #ifndef MARAUDER_MINI
tft.writedata(tfa >> 8); // Top Fixed Area line count tft.writecommand(ILI9341_VSCRDEF); // Vertical scroll definition
tft.writedata(tfa); tft.writedata(tfa >> 8); // Top Fixed Area line count
tft.writedata((YMAX-tfa-bfa)>>8); // Vertical Scrolling Area line count tft.writedata(tfa);
tft.writedata(YMAX-tfa-bfa); tft.writedata((YMAX-tfa-bfa)>>8); // Vertical Scrolling Area line count
tft.writedata(bfa >> 8); // Bottom Fixed Area line count tft.writedata(YMAX-tfa-bfa);
tft.writedata(bfa); tft.writedata(bfa >> 8); // Bottom Fixed Area line count
tft.writedata(bfa);
#endif
} }
void Display::scrollAddress(uint16_t vsp) { void Display::scrollAddress(uint16_t vsp) {
tft.writecommand(ILI9341_VSCRSADD); // Vertical scrolling pointer #ifndef MARAUDER_MINI
tft.writedata(vsp>>8); tft.writecommand(ILI9341_VSCRSADD); // Vertical scrolling pointer
tft.writedata(vsp); tft.writedata(vsp>>8);
tft.writedata(vsp);
#endif
} }
@@ -440,18 +376,21 @@ void Display::scrollAddress(uint16_t vsp) {
void Display::drawJpeg(const char *filename, int xpos, int ypos) { void Display::drawJpeg(const char *filename, int xpos, int ypos) {
// Open the named file (the Jpeg decoder library will close it after rendering image) // Open the named file (the Jpeg decoder library will close it after rendering image)
fs::File jpegFile = SPIFFS.open( filename, "r"); // File handle reference for SPIFFS //fs::File jpegFile = SPIFFS.open( filename, "r"); // File handle reference for SPIFFS
//jpegFile.close();
//ESP32 always seems to return 1 for jpegFile so this null trap does not work //ESP32 always seems to return 1 for jpegFile so this null trap does not work
if ( !jpegFile ) { //if ( !jpegFile ) {
Serial.print("ERROR: File \""); Serial.print(filename); Serial.println ("\" not found!"); // Serial.print("ERROR: File \""); Serial.print(filename); Serial.println ("\" not found!");
return; // return;
} //}
// Use one of the three following methods to initialise the decoder, // Use one of the three following methods to initialise the decoder,
// the filename can be a String or character array type: // the filename can be a String or character array type:
boolean decoded = JpegDec.decodeFsFile(filename); // or pass the filename (leading / distinguishes SPIFFS files) //boolean decoded = JpegDec.decodeFsFile(filename); // or pass the filename (leading / distinguishes SPIFFS files)
boolean decoded = JpegDec.decodeArray(MarauderTitle, 13578);
if (decoded) { if (decoded) {
// print information about the image to the serial port // print information about the image to the serial port
@@ -615,7 +554,7 @@ void Display::jpegRender(int xpos, int ypos) {
// Print information decoded from the Jpeg image // Print information decoded from the Jpeg image
//==================================================================================== //====================================================================================
void Display::jpegInfo() { void Display::jpegInfo() {
/*
Serial.println("==============="); Serial.println("===============");
Serial.println("JPEG image info"); Serial.println("JPEG image info");
Serial.println("==============="); Serial.println("===============");
@@ -629,7 +568,7 @@ void Display::jpegInfo() {
Serial.print ("MCU height :"); Serial.println(JpegDec.MCUHeight); Serial.print ("MCU height :"); Serial.println(JpegDec.MCUHeight);
Serial.println("==============="); Serial.println("===============");
Serial.println(""); Serial.println("");
*/
} }
//==================================================================================== //====================================================================================
@@ -806,7 +745,7 @@ void Display::buildBanner(String msg, int xpos)
//img.fillCircle(SCREEN_WIDTH / 2, TEXT_HEIGHT / 2, 10, TFT_ORANGE); //img.fillCircle(SCREEN_WIDTH / 2, TEXT_HEIGHT / 2, 10, TFT_ORANGE);
// Now print text on top of the graphics // Now print text on top of the graphics
img.setTextSize(2); // Font size scaling is x1 img.setTextSize(BANNER_TEXT_SIZE); // Font size scaling is x1
img.setTextFont(0); // Font 4 selected img.setTextFont(0); // Font 4 selected
img.setTextColor(TFT_WHITE); // Black text, no background colour img.setTextColor(TFT_WHITE); // Black text, no background colour
img.setTextWrap(false); // Turn of wrap so we can print past end of sprite img.setTextWrap(false); // Turn of wrap so we can print past end of sprite
@@ -819,112 +758,6 @@ void Display::buildBanner(String msg, int xpos)
img.print(msg); img.print(msg);
} }
/*
void Display::initLVGL() {
tick.attach_ms(LVGL_TICK_PERIOD, lv_tick_handler);
lv_init();
lv_disp_buf_init(&disp_buf, buf, NULL, LV_HOR_RES_MAX * 10);
lv_disp_drv_t disp_drv;
lv_disp_drv_init(&disp_drv);
disp_drv.hor_res = WIDTH_1;
disp_drv.ver_res = HEIGHT_1;
disp_drv.flush_cb = my_disp_flush;
disp_drv.buffer = &disp_buf;
lv_disp_drv_register(&disp_drv);
lv_indev_drv_t indev_drv;
lv_indev_drv_init(&indev_drv);
indev_drv.type = LV_INDEV_TYPE_POINTER;
indev_drv.read_cb = my_touchpad_read;
lv_indev_drv_register(&indev_drv);
}
void Display::deinitLVGL() {
Serial.println(F("Deinit LVGL"));
//lv_deinit();
}
void Display::joinWiFiGFX(){
// Create one text area
ta1 = lv_textarea_create(lv_scr_act(), NULL);
lv_textarea_set_one_line(ta1, true);
lv_obj_set_width(ta1, LV_HOR_RES / 2 - 20);
lv_obj_set_pos(ta1, 5, 20);
//lv_ta_set_cursor_type(ta, LV_CURSOR_BLOCK);
lv_textarea_set_text(ta1, "");
lv_obj_set_event_cb(ta1, ta_event_cb);
// Create first label
lv_obj_t * ssid_label = lv_label_create(lv_scr_act(), NULL);
lv_label_set_text(ssid_label, "SSID:");
lv_obj_align(ssid_label, ta1, LV_ALIGN_OUT_TOP_LEFT, 0, 0);
// Create second text area
ta2 = lv_textarea_create(lv_scr_act(), ta1);
//lv_textarea_set_pwd_mode(ta2, true); // This shit makes it so backspace does not work
//lv_textarea_set_pwd_show_time(ta2, 1000);
lv_textarea_set_cursor_hidden(ta2, true);
lv_obj_align(ta2, NULL, LV_ALIGN_IN_TOP_RIGHT, -5, 20);
// Create second label
lv_obj_t * pw_label = lv_label_create(lv_scr_act(), NULL);
lv_label_set_text(pw_label, "Password:");
lv_obj_align(pw_label, ta2, LV_ALIGN_OUT_TOP_LEFT, 0, 0);
// Create a keyboard and apply the styles
kb = lv_keyboard_create(lv_scr_act(), NULL);
lv_obj_set_size(kb, LV_HOR_RES, LV_VER_RES / 2);
lv_obj_set_event_cb(kb, keyboard_event_cb);
// Focus it on one of the text areas to start
lv_keyboard_set_textarea(kb, ta1);
lv_keyboard_set_cursor_manage(kb, true);
}
void keyboard_event_cb(lv_obj_t * keyboard, lv_event_t event){
extern Display display_obj;
lv_keyboard_def_event_cb(kb, event);
if(event == LV_EVENT_APPLY){
printf("LV_EVENT_APPLY\n");
//String ta1_text = lv_textarea_get_text(lv_keyboard_get_textarea(kb));
String ta1_text = lv_textarea_get_text(ta1);
String ta2_text = lv_textarea_get_text(ta2);
Serial.println(ta1_text);
Serial.println(ta2_text);
//joinWiFi(ta1_text, ta2_text);
}else if(event == LV_EVENT_CANCEL){
printf("LV_EVENT_CANCEL\n");
//lv_textarea_set_text(lv_keyboard_get_textarea(kb), "");
display_obj.deinitLVGL();
display_obj.exit_draw = true; // set everything back to normal
}
}
void ta_event_cb(lv_obj_t * ta, lv_event_t event)
{
if(event == LV_EVENT_CLICKED) {
if(kb != NULL)
lv_keyboard_set_textarea(kb, ta);
}
//else if(event == LV_EVENT_INSERT) {
// const char * str = lv_event_get_data();
// if(str[0] == '\n') {
// printf("Ready\n");
// }
//}
}*/
void Display::main(uint8_t scan_mode) void Display::main(uint8_t scan_mode)
{ {
if ((scan_mode == LV_JOIN_WIFI) || if ((scan_mode == LV_JOIN_WIFI) ||
@@ -933,3 +766,5 @@ void Display::main(uint8_t scan_mode)
return; return;
} }
// End SPIFFS_functions // End SPIFFS_functions
#endif

View File

@@ -1,179 +1,157 @@
#ifndef Display_h #ifndef Display_h
#define Display_h #define Display_h
#include "configs.h"
#include <FS.h>
#include <functional> #ifdef HAS_SCREEN
#include <JPEGDecoder.h>
//#include <SimpleList.h> #include <FS.h>
#include <LinkedList.h> #include <functional>
#include <SPI.h> #include <JPEGDecoder.h>
#include <lvgl.h> //#include <SimpleList.h>
#include <Ticker.h> #include <LinkedList.h>
//#include <M5Stack.h> #include <SPI.h>
#include "SPIFFS.h" #include <lvgl.h>
#include "Assets.h" #include <Ticker.h>
//#include <M5Stack.h>
#include <TFT_eSPI.h> #include "SPIFFS.h"
#include "Assets.h"
#define TFT_MISO 19
#define TFT_MOSI 23 #include <TFT_eSPI.h>
#define TFT_SCLK 18
#define TFT_CS 27 // WiFi stuff
#define TFT_DC 26 #define OTA_UPDATE 100
#define TFT_RST 5 #define SHOW_INFO 101
#define TFT_BL 32 #define WIFI_SCAN_OFF 0
#define TOUCH_CS 21 #define WIFI_SCAN_PROBE 1
#define SD_CS 4 #define WIFI_SCAN_AP 2
#define WIFI_SCAN_PWN 3
// WiFi stuff #define WIFI_SCAN_EAPOL 4
#define OTA_UPDATE 100 #define WIFI_SCAN_DEAUTH 5
#define SHOW_INFO 101 #define WIFI_SCAN_ALL 6
#define WIFI_SCAN_OFF 0 #define WIFI_PACKET_MONITOR 7
#define WIFI_SCAN_PROBE 1 #define WIFI_ATTACK_BEACON_SPAM 8
#define WIFI_SCAN_AP 2 #define WIFI_ATTACK_RICK_ROLL 9
#define WIFI_SCAN_PWN 3 #define BT_SCAN_ALL 10
#define WIFI_SCAN_EAPOL 4 #define BT_SCAN_SKIMMERS 11
#define WIFI_SCAN_DEAUTH 5 #define WIFI_SCAN_ESPRESSIF 12
#define WIFI_SCAN_ALL 6 #define LV_JOIN_WIFI 13
#define WIFI_PACKET_MONITOR 7 #define LV_ADD_SSID 14
#define WIFI_ATTACK_BEACON_SPAM 8 #define WIFI_ATTACK_BEACON_LIST 15
#define WIFI_ATTACK_RICK_ROLL 9
#define BT_SCAN_ALL 10 /*
#define BT_SCAN_SKIMMERS 11 PROGMEM void my_disp_flush(lv_disp_drv_t *disp, const lv_area_t *area, lv_color_t *color_p);
#define WIFI_SCAN_ESPRESSIF 12 PROGMEM bool my_touchpad_read(lv_indev_drv_t * indev_driver, lv_indev_data_t * data);
#define LV_JOIN_WIFI 13
#define LV_ADD_SSID 14 PROGMEM static lv_disp_buf_t disp_buf;
#define WIFI_ATTACK_BEACON_LIST 15 PROGMEM static lv_color_t buf[LV_HOR_RES_MAX * 10];
#define TFT_SHIELD PROGMEM static void ta_event_cb(lv_obj_t * ta, lv_event_t event);
//#define TFT_DIY PROGMEM static void keyboard_event_cb(lv_obj_t * keyboard, lv_event_t event);
#define SCREEN_WIDTH 240 // lvgl stuff
#define SCREEN_HEIGHT 320 PROGMEM static lv_obj_t *kb;
#define HEIGHT_1 240 */
#define WIDTH_1 320
#define STANDARD_FONT_CHAR_LIMIT 40 // number of characters on a single line with normal font // #define KIT
#define TEXT_HEIGHT 16 // Height of text to be printed and scrolled // #define TFT_DIY
#define BOT_FIXED_AREA 0 // Number of lines in bottom fixed area (lines counted from bottom of screen)
#define TOP_FIXED_AREA 48 // Number of lines in top fixed area (lines counted from top of screen) class Display
#define YMAX 320 // Bottom of screen area {
#define minimum(a,b) (((a) < (b)) ? (a) : (b)) private:
//#define MENU_FONT NULL bool SwitchOn = false;
#define MENU_FONT &FreeMono9pt7b // Winner
//#define MENU_FONT &FreeMonoBold9pt7b bool run_setup = true;
//#define MENU_FONT &FreeSans9pt7b
//#define MENU_FONT &FreeSansBold9pt7b // For the byte we read from the serial port
#define BUTTON_ARRAY_LEN 9 byte data = 0;
#define STATUS_BAR_WIDTH 16
#define LVGL_TICK_PERIOD 6 // A few test variables used during debugging
boolean change_colour = 1;
#define STATUSBAR_COLOR 0x4A49 boolean selected = 1;
/* void drawFrame();
PROGMEM void my_disp_flush(lv_disp_drv_t *disp, const lv_area_t *area, lv_color_t *color_p);
PROGMEM bool my_touchpad_read(lv_indev_drv_t * indev_driver, lv_indev_data_t * data); //void addNodes(Menu* menu, String name, Menu* child, std::function<void()> callable);
//void changeMenu(Menu* menu);
PROGMEM static lv_disp_buf_t disp_buf; //void showMenuList(Menu* menu, int layer);
PROGMEM static lv_color_t buf[LV_HOR_RES_MAX * 10]; //static void lv_tick_handler();
PROGMEM static void ta_event_cb(lv_obj_t * ta, lv_event_t event); public:
PROGMEM static void keyboard_event_cb(lv_obj_t * keyboard, lv_event_t event); Display();
//Ticker tick;
// lvgl stuff TFT_eSPI tft = TFT_eSPI();
PROGMEM static lv_obj_t *kb; TFT_eSprite img = TFT_eSprite(&tft);
*/ TFT_eSPI_Button key[BUTTON_ARRAY_LEN];
const String PROGMEM version_number = MARAUDER_VERSION;
class Display
{ bool printing = false;
private: bool loading = false;
bool tteBar = false;
bool run_setup = true; bool draw_tft = false;
bool exit_draw = false;
// For the byte we read from the serial port
byte data = 0; int TOP_FIXED_AREA_2 = 48;
int print_delay_1, print_delay_2 = 10;
// A few test variables used during debugging int current_banner_pos = SCREEN_WIDTH;
boolean change_colour = 1;
boolean selected = 1; //Menu* current_menu;
//void addNodes(Menu* menu, String name, Menu* child, std::function<void()> callable); //Menu mainMenu;
//void changeMenu(Menu* menu); //Menu wifiMenu;
//void showMenuList(Menu* menu, int layer); //Menu bluetoothMenu;
//static void lv_tick_handler();
LinkedList<String>* display_buffer;
public:
Display(); // The initial y coordinate of the top of the bottom text line
//Ticker tick; uint16_t yDraw = YMAX - BOT_FIXED_AREA - TEXT_HEIGHT;
TFT_eSPI tft = TFT_eSPI();
TFT_eSprite img = TFT_eSprite(&tft); // Keep track of the drawing x coordinate
TFT_eSPI_Button key[BUTTON_ARRAY_LEN]; uint16_t xPos = 0;
const String PROGMEM version_number = "v0.9.1";
// The initial y coordinate of the top of the scrolling area
bool printing = false; uint16_t yStart = TOP_FIXED_AREA_2;
bool loading = false; // yArea must be a integral multiple of TEXT_HEIGHT
bool tteBar = false; uint16_t yArea = YMAX - TOP_FIXED_AREA_2 - BOT_FIXED_AREA;
bool draw_tft = false;
bool exit_draw = false; // We have to blank the top line each time the display is scrolled, but this takes up to 13 milliseconds
// for a full width line, meanwhile the serial buffer may be filling... and overflowing
int TOP_FIXED_AREA_2 = 48; // We can speed up scrolling of short text lines by just blanking the character we drew
int print_delay_1, print_delay_2 = 10; int blank[19]; // We keep all the strings pixel lengths to optimise the speed of the top line blanking
int current_banner_pos = SCREEN_WIDTH;
//void initLVGL();
//Menu* current_menu; //void deinitLVGL();
//void joinWiFiGFX();
//Menu mainMenu; void tftDrawRedOnOffButton();
//Menu wifiMenu; void tftDrawGreenOnOffButton();
//Menu bluetoothMenu; void tftDrawGraphObjects(byte x_scale);
void tftDrawEapolColorKey();
LinkedList<String>* display_buffer; void tftDrawColorKey();
void tftDrawXScaleButtons(byte x_scale);
// The initial y coordinate of the top of the bottom text line void tftDrawYScaleButtons(byte y_scale);
uint16_t yDraw = YMAX - BOT_FIXED_AREA - TEXT_HEIGHT; void tftDrawChannelScaleButtons(int set_channel);
void tftDrawExitScaleButtons();
// Keep track of the drawing x coordinate void buildBanner(String msg, int xpos);
uint16_t xPos = 0; void clearScreen();
void displayBuffer(bool do_clear = false);
// The initial y coordinate of the top of the scrolling area void drawJpeg(const char *filename, int xpos, int ypos);
uint16_t yStart = TOP_FIXED_AREA_2; void setupDraw();
// yArea must be a integral multiple of TEXT_HEIGHT void drawStylus();
uint16_t yArea = YMAX - TOP_FIXED_AREA_2 - BOT_FIXED_AREA; void getTouchWhileFunction(bool pressed);
void initScrollValues(bool tte = false);
// We have to blank the top line each time the display is scrolled, but this takes up to 13 milliseconds void jpegInfo();
// for a full width line, meanwhile the serial buffer may be filling... and overflowing void jpegRender(int xpos, int ypos);
// We can speed up scrolling of short text lines by just blanking the character we drew void listDir(fs::FS &fs, const char * dirname, uint8_t levels);
int blank[19]; // We keep all the strings pixel lengths to optimise the speed of the top line blanking void listFiles();
void main(uint8_t scan_mode);
//void initLVGL(); void RunSetup();
//void deinitLVGL(); void scrollAddress(uint16_t vsp);
//void joinWiFiGFX(); int scroll_line(uint32_t color);
void tftDrawGraphObjects(byte x_scale); void setupScrollArea(uint16_t tfa, uint16_t bfa);
void tftDrawEapolColorKey(); void showCenterText(String text, int y);
void tftDrawColorKey(); void touchToExit();
void tftDrawXScaleButtons(byte x_scale); void twoPartDisplay(String center_text);
void tftDrawYScaleButtons(byte y_scale); void updateBanner(String msg);
void tftDrawChannelScaleButtons(int set_channel); };
void tftDrawExitScaleButtons(); #endif
void buildBanner(String msg, int xpos); #endif
void clearScreen();
void displayBuffer(bool do_clear = false);
void drawJpeg(const char *filename, int xpos, int ypos);
void setupDraw();
void drawStylus();
void getTouchWhileFunction(bool pressed);
void initScrollValues(bool tte = false);
void jpegInfo();
void jpegRender(int xpos, int ypos);
void listDir(fs::FS &fs, const char * dirname, uint8_t levels);
void listFiles();
void main(uint8_t scan_mode);
void RunSetup();
void scrollAddress(uint16_t vsp);
int scroll_line(uint32_t color);
void setupScrollArea(uint16_t tfa, uint16_t bfa);
void showCenterText(String text, int y);
void touchToExit();
void twoPartDisplay(String center_text);
void updateBanner(String msg);
};
#endif

File diff suppressed because it is too large Load Diff

View File

@@ -1,207 +1,221 @@
#ifndef MenuFunctions_h #ifndef MenuFunctions_h
#define MenuFunctions_h #define MenuFunctions_h
#define BATTERY_ANALOG_ON 0 #include "configs.h"
#include "WiFiScan.h" #ifdef HAS_SCREEN
#include "Display.h"
#include "BatteryInterface.h" #define BATTERY_ANALOG_ON 0
#include "SDInterface.h"
#include "Web.h" #include "WiFiScan.h"
#include "esp_interface.h" #include "Display.h"
#include "a32u4_interface.h" #include "BatteryInterface.h"
#include "SDInterface.h"
#include "Web.h"
extern Display display_obj; #include "esp_interface.h"
extern WiFiScan wifi_scan_obj; #include "a32u4_interface.h"
extern Web web_obj; #include "settings.h"
extern SDInterface sd_obj;
extern BatteryInterface battery_obj; #ifdef MARAUDER_MINI
extern EspInterface esp_obj; #include <SwitchLib.h>
extern A32u4Interface a32u4_obj; extern SwitchLib u_btn;
extern SwitchLib d_btn;
// Keypad start position, key sizes and spacing extern SwitchLib l_btn;
#define KEY_X 120 // Centre of key extern SwitchLib r_btn;
#define KEY_Y 50 extern SwitchLib c_btn;
#define KEY_W 240 // Width and height #endif
#define KEY_H 22
#define KEY_SPACING_X 0 // X and Y gap extern Display display_obj;
#define KEY_SPACING_Y 1 extern WiFiScan wifi_scan_obj;
#define KEY_TEXTSIZE 1 // Font size multiplier extern Web web_obj;
#define ICON_W 22 extern SDInterface sd_obj;
#define ICON_H 22 extern BatteryInterface battery_obj;
#define BUTTON_PADDING 22 extern EspInterface esp_obj;
//#define BUTTON_ARRAY_LEN 5 extern A32u4Interface a32u4_obj;
extern Settings settings_obj;
#define FLASH_BUTTON 0
#define FLASH_BUTTON 0
#if BATTERY_ANALOG_ON == 1
#define BATTERY_PIN 13 #if BATTERY_ANALOG_ON == 1
#define ANALOG_PIN 34 #define BATTERY_PIN 13
#define CHARGING_PIN 27 #define ANALOG_PIN 34
#endif #define CHARGING_PIN 27
#endif
// Icon definitions
#define ATTACKS 0 // Icon definitions
#define BEACON_SNIFF 1 #define ATTACKS 0
#define BLUETOOTH 2 #define BEACON_SNIFF 1
#define BLUETOOTH_SNIFF 3 #define BLUETOOTH 2
#define DEAUTH_SNIFF 4 #define BLUETOOTH_SNIFF 3
#define DRAW 5 #define DEAUTH_SNIFF 4
#define PACKET_MONITOR 6 #define DRAW 5
#define PROBE_SNIFF 7 #define PACKET_MONITOR 6
#define SCANNERS 8 #define PROBE_SNIFF 7
#define CC_SKIMMERS 9 #define SCANNERS 8
#define SNIFFERS 10 #define CC_SKIMMERS 9
#define WIFI 11 #define SNIFFERS 10
#define BEACON_SPAM 12 #define WIFI 11
#define RICK_ROLL 13 #define BEACON_SPAM 12
#define REBOOT 14 #define RICK_ROLL 13
#define GENERAL_APPS 15 #define REBOOT 14
#define UPDATE 16 #define GENERAL_APPS 15
#define DEVICE 17 #define UPDATE 16
#define DEVICE_INFO 18 #define DEVICE 17
#define SD_UPDATE 19 #define DEVICE_INFO 18
#define WEB_UPDATE 20 #define SD_UPDATE 19
#define EAPOL 21 #define WEB_UPDATE 20
#define STATUS_BAT 22 #define EAPOL 21
#define STATUS_SD 23 #define STATUS_BAT 22
#define PWNAGOTCHI 24 #define STATUS_SD 23
#define ESPRESSIF 25 #define PWNAGOTCHI 24
#define SHUTDOWN 26 #define ESPRESSIF 25
#define BEACON_LIST 27 #define SHUTDOWN 26
#define GENERATE 28 #define BEACON_LIST 27
#define CLEAR_ICO 29 #define GENERATE 28
#define KEYBOARD_ICO 30 #define CLEAR_ICO 29
#define JOIN_WIFI 31 #define KEYBOARD_ICO 30
#define ESP_UPDATE_ICO 32 #define JOIN_WIFI 31
#define BAD_USB_ICO 33 #define ESP_UPDATE_ICO 32
#define TEST_BAD_USB_ICO 34 #define BAD_USB_ICO 33
#define TEST_BAD_USB_ICO 34
PROGMEM void my_disp_flush(lv_disp_drv_t *disp, const lv_area_t *area, lv_color_t *color_p); #define LANGUAGE 35
PROGMEM bool my_touchpad_read(lv_indev_drv_t * indev_driver, lv_indev_data_t * data);
PROGMEM void my_disp_flush(lv_disp_drv_t *disp, const lv_area_t *area, lv_color_t *color_p);
PROGMEM static lv_disp_buf_t disp_buf; PROGMEM bool my_touchpad_read(lv_indev_drv_t * indev_driver, lv_indev_data_t * data);
PROGMEM static lv_color_t buf[LV_HOR_RES_MAX * 10];
PROGMEM static lv_disp_buf_t disp_buf;
PROGMEM static void ta_event_cb(lv_obj_t * ta, lv_event_t event); PROGMEM static lv_color_t buf[LV_HOR_RES_MAX * 10];
PROGMEM static void join_wifi_keyboard_event_cb(lv_obj_t * keyboard, lv_event_t event);
PROGMEM static void add_ssid_keyboard_event_cb(lv_obj_t * keyboard, lv_event_t event); PROGMEM static void ta_event_cb(lv_obj_t * ta, lv_event_t event);
PROGMEM static void write_bad_usb_keyboard_event_cb(lv_obj_t * keyboard, lv_event_t event); PROGMEM static void join_wifi_keyboard_event_cb(lv_obj_t * keyboard, lv_event_t event);
PROGMEM static void load_btn_cb(lv_obj_t * load_btn, lv_event_t event); PROGMEM static void add_ssid_keyboard_event_cb(lv_obj_t * keyboard, lv_event_t event);
PROGMEM static void test_btn_cb(lv_obj_t * load_btn, lv_event_t event); PROGMEM static void write_bad_usb_keyboard_event_cb(lv_obj_t * keyboard, lv_event_t event);
PROGMEM static void ap_list_cb(lv_obj_t * btn, lv_event_t event); PROGMEM static void load_btn_cb(lv_obj_t * load_btn, lv_event_t event);
PROGMEM static void save_as_keyboard_event_cb(lv_obj_t * keyboard, lv_event_t event); PROGMEM static void test_btn_cb(lv_obj_t * load_btn, lv_event_t event);
PROGMEM static void ap_list_cb(lv_obj_t * btn, lv_event_t event);
// lvgl stuff PROGMEM static void setting_dropdown_cb(lv_obj_t * btn, lv_event_t event);
PROGMEM static lv_obj_t *kb; PROGMEM static void save_as_keyboard_event_cb(lv_obj_t * keyboard, lv_event_t event);
PROGMEM static lv_obj_t * save_as_kb;
// lvgl stuff
struct Menu; PROGMEM static lv_obj_t *kb;
PROGMEM static lv_obj_t * save_as_kb;
// Individual Nodes of a menu
struct Menu;
struct MenuNode {
String name; // Individual Nodes of a menu
uint16_t color;
int icon; struct MenuNode {
TFT_eSPI_Button* button; String name;
std::function<void()> callable; String command;
}; uint16_t color;
int icon;
// Full Menus TFT_eSPI_Button* button;
struct Menu { bool selected;
String name; std::function<void()> callable;
LinkedList<MenuNode>* list; };
Menu * parentMenu;
//uint8_t selected; // Full Menus
}; struct Menu {
String name;
LinkedList<MenuNode>* list;
class MenuFunctions Menu * parentMenu;
{ uint8_t selected = 0;
private: };
String u_result = "";
class MenuFunctions
uint32_t initTime = 0; {
private:
//Menu* current_menu;
String u_result = "";
// Main menu stuff
Menu mainMenu; uint32_t initTime = 0;
Menu wifiMenu; //Menu* current_menu;
Menu bluetoothMenu;
Menu badusbMenu; // Main menu stuff
Menu generalMenu; Menu mainMenu;
Menu deviceMenu;
Menu wifiMenu;
// Device menu stuff Menu bluetoothMenu;
Menu whichUpdateMenu; Menu badusbMenu;
Menu failedUpdateMenu; Menu generalMenu;
Menu confirmMenu; Menu deviceMenu;
Menu espUpdateMenu;
Menu updateMenu; // Device menu stuff
Menu infoMenu; Menu whichUpdateMenu;
Menu failedUpdateMenu;
// WiFi menu stuff Menu confirmMenu;
Menu wifiSnifferMenu; Menu espUpdateMenu;
Menu wifiAttackMenu; Menu updateMenu;
Menu wifiGeneralMenu; Menu settingsMenu;
Menu specSettingMenu;
// Bluetooth menu stuff Menu infoMenu;
Menu bluetoothSnifferMenu; Menu languageMenu;
Menu bluetoothGeneralMenu;
// WiFi menu stuff
// Settings things menus Menu wifiSnifferMenu;
Menu shutdownWiFiMenu; Menu wifiAttackMenu;
Menu shutdownBLEMenu; Menu wifiGeneralMenu;
Menu generateSSIDsMenu;
Menu clearSSIDsMenu; // Bluetooth menu stuff
Menu clearAPsMenu; Menu bluetoothSnifferMenu;
Menu bluetoothGeneralMenu;
static void lv_tick_handler();
// Settings things menus
// Menu icons Menu shutdownWiFiMenu;
Menu shutdownBLEMenu;
Menu generateSSIDsMenu;
//TFT_eSPI_Button key[BUTTON_ARRAY_LEN]; Menu clearSSIDsMenu;
Menu clearAPsMenu;
void addNodes(Menu* menu, String name, uint16_t color, Menu* child, int place, std::function<void()> callable);
void drawStatusBar(); static void lv_tick_handler();
void updateStatusBar();
void battery(bool initial = false); // Menu icons
void battery2(bool initial = false);
void showMenuList(Menu* menu, int layer);
//TFT_eSPI_Button key[BUTTON_ARRAY_LEN];
public:
MenuFunctions(); void addNodes(Menu* menu, String name, uint16_t color, Menu* child, int place, std::function<void()> callable, bool selected = false, String command = "");
void updateStatusBar();
Menu* current_menu; void battery(bool initial = false);
void battery2(bool initial = false);
Ticker tick; void showMenuList(Menu* menu, int layer);
String callSetting(String key);
uint16_t x = -1, y = -1; void runBoolSetting(String ley);
boolean pressed = false; void displaySetting(String key, Menu* menu, int index);
void buttonSelected(uint8_t b);
String loaded_file = ""; void buttonNotSelected(uint8_t b);
void initLVGL(); public:
void deinitLVGL(); MenuFunctions();
void joinWiFiGFX();
void addSSIDGFX(); Menu* current_menu;
void addAPGFX();
void writeBadUSB(); Ticker tick;
void buildButtons(Menu* menu); uint16_t x = -1, y = -1;
void changeMenu(Menu* menu); boolean pressed = false;
void displayCurrentMenu();
void main(uint32_t currentTime); String loaded_file = "";
void RunSetup();
void orientDisplay(); void initLVGL();
}; void deinitLVGL();
void joinWiFiGFX();
void addSSIDGFX();
void addAPGFX();
#endif void displaySettingsGFX();
void writeBadUSB();
void buildButtons(Menu* menu);
void changeMenu(Menu* menu);
void drawStatusBar();
void displayCurrentMenu();
void main(uint32_t currentTime);
void RunSetup();
void orientDisplay();
};
#endif
#endif

View File

@@ -1,7 +1,20 @@
#include "SDInterface.h" #include "SDInterface.h"
#include "lang_var.h"
bool SDInterface::initSD() { bool SDInterface::initSD() {
String display_string = ""; String display_string = "";
#ifdef KIT
pinMode(SD_DET, INPUT);
if (digitalRead(SD_DET) == LOW) {
Serial.println(F("SD Card Detect Pin Detected"));
}
else {
Serial.println(F("SD Card Detect Pin Not Detected"));
this->supported = false;
return false;
}
#endif
if (!SD.begin(SD_CS)) { if (!SD.begin(SD_CS)) {
Serial.println(F("Failed to mount SD Card")); Serial.println(F("Failed to mount SD Card"));
@@ -20,18 +33,11 @@ bool SDInterface::initSD() {
else else
Serial.println(F("SD: UNKNOWN Card Mounted")); Serial.println(F("SD: UNKNOWN Card Mounted"));
//this->cardSizeBT = SD.cardSize();
//this->cardSizeKB = SD.cardSize() / 1024;
this->cardSizeMB = SD.cardSize() / (1024 * 1024); this->cardSizeMB = SD.cardSize() / (1024 * 1024);
//this->cardSizeGB = SD.cardSize() / (1024 * 1024 * 1024);
//Serial.printf("SD Card Size: %llu Bytes\n", this->cardSizeBT);
//Serial.printf("SD Card Size: %lluKB\n", this->cardSizeKB);
Serial.printf("SD Card Size: %lluMB\n", this->cardSizeMB); Serial.printf("SD Card Size: %lluMB\n", this->cardSizeMB);
//Serial.printf("SD Card Size: %lluGB\n", this->cardSizeGB);
if (this->supported) { if (this->supported) {
//display_obj.tft.println((byte)(sd_obj.cardSizeMB % 10));
const int NUM_DIGITS = log10(this->cardSizeMB) + 1; const int NUM_DIGITS = log10(this->cardSizeMB) + 1;
char sz[NUM_DIGITS + 1]; char sz[NUM_DIGITS + 1];
@@ -43,16 +49,11 @@ bool SDInterface::initSD() {
display_string.concat((String)sz[i]); display_string.concat((String)sz[i]);
} }
//this->card_sz = display_string;
this->card_sz = sz; this->card_sz = sz;
} }
buffer_obj = Buffer(); buffer_obj = Buffer();
//if (this->supported)
// buffer_obj.open(&SD);
// Check for SCRIPTS folder
if (!SD.exists("/SCRIPTS")) { if (!SD.exists("/SCRIPTS")) {
Serial.println("/SCRIPTS does not exist. Creating..."); Serial.println("/SCRIPTS does not exist. Creating...");
@@ -66,7 +67,6 @@ bool SDInterface::initSD() {
void SDInterface::addPacket(uint8_t* buf, uint32_t len) { void SDInterface::addPacket(uint8_t* buf, uint32_t len) {
if ((this->supported) && (this->do_save)) { if ((this->supported) && (this->do_save)) {
//Serial.println("Adding packet to buffer...");
buffer_obj.addPacket(buf, len); buffer_obj.addPacket(buf, len);
} }
} }
@@ -77,21 +77,26 @@ void SDInterface::openCapture(String file_name) {
} }
void SDInterface::runUpdate() { void SDInterface::runUpdate() {
//display_obj.clearScreen(); #ifdef HAS_SCREEN
display_obj.tft.setTextWrap(false); display_obj.tft.setTextWrap(false);
display_obj.tft.setFreeFont(NULL); display_obj.tft.setFreeFont(NULL);
display_obj.tft.setCursor(0, 100); display_obj.tft.setCursor(0, 100);
display_obj.tft.setTextSize(1); display_obj.tft.setTextSize(1);
display_obj.tft.setTextColor(TFT_WHITE); display_obj.tft.setTextColor(TFT_WHITE);
display_obj.tft.println(F("Opening /update.bin...")); display_obj.tft.println(F(text15));
#endif
File updateBin = SD.open("/update.bin"); File updateBin = SD.open("/update.bin");
if (updateBin) { if (updateBin) {
if(updateBin.isDirectory()){ if(updateBin.isDirectory()){
display_obj.tft.setTextColor(TFT_RED); #ifdef HAS_SCREEN
display_obj.tft.println(F("Error, could not find update.bin")); display_obj.tft.setTextColor(TFT_RED);
display_obj.tft.println(F(text_table2[0]));
#endif
Serial.println(F("Error, update.bin is not a file")); Serial.println(F("Error, update.bin is not a file"));
display_obj.tft.setTextColor(TFT_WHITE); #ifdef HAS_SCREEN
display_obj.tft.setTextColor(TFT_WHITE);
#endif
updateBin.close(); updateBin.close();
return; return;
} }
@@ -99,82 +104,122 @@ void SDInterface::runUpdate() {
size_t updateSize = updateBin.size(); size_t updateSize = updateBin.size();
if (updateSize > 0) { if (updateSize > 0) {
display_obj.tft.println(F("Starting SD Update...")); #ifdef HAS_SCREEN
display_obj.tft.println(F(text_table2[1]));
#endif
Serial.println(F("Try to start update")); Serial.println(F("Try to start update"));
this->performUpdate(updateBin, updateSize); this->performUpdate(updateBin, updateSize);
} }
else { else {
display_obj.tft.setTextColor(TFT_RED); #ifdef HAS_SCREEN
display_obj.tft.println(F("Error, update.bin is empty")); display_obj.tft.setTextColor(TFT_RED);
display_obj.tft.println(F(text_table2[2]));
#endif
Serial.println(F("Error, file is empty")); Serial.println(F("Error, file is empty"));
display_obj.tft.setTextColor(TFT_WHITE); #ifdef HAS_SCREEN
display_obj.tft.setTextColor(TFT_WHITE);
#endif
return; return;
} }
updateBin.close(); updateBin.close();
// whe finished remove the binary from sd card to indicate end of the process // whe finished remove the binary from sd card to indicate end of the process
display_obj.tft.println(F("rebooting...")); #ifdef HAS_SCREEN
display_obj.tft.println(F(text_table2[3]));
#endif
Serial.println(F("rebooting...")); Serial.println(F("rebooting..."));
//SD.remove("/update.bin"); //SD.remove("/update.bin");
delay(1000); delay(1000);
ESP.restart(); ESP.restart();
} }
else { else {
display_obj.tft.setTextColor(TFT_RED); #ifdef HAS_SCREEN
display_obj.tft.println(F("Could not load update.bin from /")); display_obj.tft.setTextColor(TFT_RED);
display_obj.tft.println(F(text_table2[4]));
#endif
Serial.println(F("Could not load update.bin from sd root")); Serial.println(F("Could not load update.bin from sd root"));
display_obj.tft.setTextColor(TFT_WHITE); #ifdef HAS_SCREEN
display_obj.tft.setTextColor(TFT_WHITE);
#endif
} }
} }
void SDInterface::performUpdate(Stream &updateSource, size_t updateSize) { void SDInterface::performUpdate(Stream &updateSource, size_t updateSize) {
if (Update.begin(updateSize)) { if (Update.begin(updateSize)) {
display_obj.tft.println("File size: " + String(updateSize)); #ifdef HAS_SCREEN
display_obj.tft.println(F("Writing file to partition...")); display_obj.tft.println(text_table2[5] + String(updateSize));
display_obj.tft.println(F(text_table2[6]));
#endif
size_t written = Update.writeStream(updateSource); size_t written = Update.writeStream(updateSource);
if (written == updateSize) { if (written == updateSize) {
display_obj.tft.println("Written: " + String(written) + " successfully"); #ifdef HAS_SCREEN
display_obj.tft.println(text_table2[7] + String(written) + text_table2[10]);
#endif
Serial.println("Written : " + String(written) + " successfully"); Serial.println("Written : " + String(written) + " successfully");
} }
else { else {
display_obj.tft.println("Written only : " + String(written) + "/" + String(updateSize) + ". Retry?"); #ifdef HAS_SCREEN
display_obj.tft.println(text_table2[8] + String(written) + "/" + String(updateSize) + text_table2[9]);
#endif
Serial.println("Written only : " + String(written) + "/" + String(updateSize) + ". Retry?"); Serial.println("Written only : " + String(written) + "/" + String(updateSize) + ". Retry?");
} }
if (Update.end()) { if (Update.end()) {
Serial.println("OTA done!"); Serial.println("OTA done!");
if (Update.isFinished()) { if (Update.isFinished()) {
display_obj.tft.println(F("Update complete")); #ifdef HAS_SCREEN
display_obj.tft.println(F(text_table2[11]));
#endif
Serial.println(F("Update successfully completed. Rebooting.")); Serial.println(F("Update successfully completed. Rebooting."));
} }
else { else {
display_obj.tft.setTextColor(TFT_RED); #ifdef HAS_SCREEN
display_obj.tft.println("Update could not complete"); display_obj.tft.setTextColor(TFT_RED);
display_obj.tft.println(text_table2[12]);
#endif
Serial.println("Update not finished? Something went wrong!"); Serial.println("Update not finished? Something went wrong!");
display_obj.tft.setTextColor(TFT_WHITE); #ifdef HAS_SCREEN
display_obj.tft.setTextColor(TFT_WHITE);
#endif
} }
} }
else { else {
display_obj.tft.println("Error Occurred. Error #: " + String(Update.getError())); #ifdef HAS_SCREEN
display_obj.tft.println(text_table2[13] + String(Update.getError()));
#endif
Serial.println("Error Occurred. Error #: " + String(Update.getError())); Serial.println("Error Occurred. Error #: " + String(Update.getError()));
} }
} }
else else
{ {
display_obj.tft.println("Not enough space to begin OTA"); #ifdef HAS_SCREEN
display_obj.tft.println(text_table2[14]);
#endif
Serial.println("Not enough space to begin OTA"); Serial.println("Not enough space to begin OTA");
} }
} }
bool SDInterface::checkDetectPin() {
#ifdef KIT
if (digitalRead(SD_DET) == LOW)
return true;
else
return false;
#endif
return false;
}
void SDInterface::main() { void SDInterface::main() {
if ((this->supported) && (this->do_save)) { if ((this->supported) && (this->do_save)) {
//Serial.println("Saving packet..."); //Serial.println("Saving packet...");
buffer_obj.forceSave(&SD); buffer_obj.forceSave(&SD);
} }
else if (!this->supported) {
if (checkDetectPin()) {
delay(100);
this->initSD();
}
}
} }
//void SDInterface::savePacket(uint8_t* buf, uint32_t len) {
// if (this->supported)
// buffer_obj.save(
//}

View File

@@ -1,19 +1,28 @@
#ifndef SDInterface_h #ifndef SDInterface_h
#define SDInterface_h #define SDInterface_h
#include "configs.h"
#include "SD.h" #include "SD.h"
#include "Buffer.h" #include "Buffer.h"
#include "Display.h" #ifdef HAS_SCREEN
#include "Display.h"
#endif
#include <Update.h> #include <Update.h>
extern Buffer buffer_obj; extern Buffer buffer_obj;
extern Display display_obj; #ifdef HAS_SCREEN
extern Display display_obj;
#endif
#define SD_CS 12 #ifdef KIT
#define SD_DET 4
#endif
class SDInterface { class SDInterface {
private: private:
bool checkDetectPin();
public: public:
uint8_t cardType; uint8_t cardType;

View File

@@ -19,7 +19,10 @@ void TemperatureInterface::RunSetup() {
} }
uint8_t TemperatureInterface::getCurrentTemp() { uint8_t TemperatureInterface::getCurrentTemp() {
return ((temprature_sens_read() - 32) / 1.8); #ifndef MARAUDER_FLIPPER
return ((temprature_sens_read() - 32) / 1.8);
#endif
return 0;
} }
void TemperatureInterface::main(uint32_t currentTime) { void TemperatureInterface::main(uint32_t currentTime) {

View File

@@ -1,6 +1,8 @@
#ifndef TemperatureInterface_h #ifndef TemperatureInterface_h
#define TemperatureInterface_h #define TemperatureInterface_h
#include "configs.h"
#include <Arduino.h> #include <Arduino.h>
class TemperatureInterface { class TemperatureInterface {

View File

@@ -1,4 +1,5 @@
#include "Web.h" #include "Web.h"
#include "lang_var.h"
WebServer server(80); WebServer server(80);
@@ -9,7 +10,6 @@ Web::Web()
void Web::main() void Web::main()
{ {
//Serial.println("Running the shits");
// Notify if client has connected to the update server // Notify if client has connected to the update server
@@ -44,18 +44,24 @@ void Web::onJavaScript(void) {
void Web::setupOTAupdate() void Web::setupOTAupdate()
{ {
uint8_t newMACAddress[] = {0x06, 0x07, 0x0D, 0x09, 0x0E, 0x0D}; uint8_t newMACAddress[] = {0x06, 0x07, 0x0D, 0x09, 0x0E, 0x0D};
display_obj.tft.setTextWrap(false); #ifdef HAS_SCREEN
display_obj.tft.setFreeFont(NULL); display_obj.tft.setTextWrap(false);
display_obj.tft.setCursor(0, 100); display_obj.tft.setFreeFont(NULL);
display_obj.tft.setTextSize(1); display_obj.tft.setCursor(0, 100);
display_obj.tft.setTextColor(TFT_WHITE); display_obj.tft.setTextSize(1);
display_obj.tft.setTextColor(TFT_WHITE);
#endif
Serial.println(wifi_scan_obj.freeRAM()); Serial.println(wifi_scan_obj.freeRAM());
display_obj.tft.print("Configuring update server...\n\n"); #ifdef HAS_SCREEN
display_obj.tft.print(text_table3[0]);
#endif
Serial.println("Configuring update server..."); Serial.println("Configuring update server...");
display_obj.tft.setTextColor(TFT_YELLOW); #ifdef HAS_SCREEN
display_obj.tft.setTextColor(TFT_YELLOW);
#endif
// Start WiFi AP // Start WiFi AP
Serial.println("Initializing WiFi..."); Serial.println("Initializing WiFi...");
@@ -69,32 +75,23 @@ void Web::setupOTAupdate()
Serial.println(wifi_scan_obj.freeRAM()); Serial.println(wifi_scan_obj.freeRAM());
Serial.println("Starting softAP..."); Serial.println("Starting softAP...");
esp_wifi_set_mac(ESP_IF_WIFI_AP, &newMACAddress[0]); esp_wifi_set_mac(WIFI_IF_AP, &newMACAddress[0]);
WiFi.softAP(ssid, password); WiFi.softAP(ssid, password);
Serial.println(""); Serial.println("");
Serial.println(wifi_scan_obj.freeRAM()); Serial.println(wifi_scan_obj.freeRAM());
Serial.println("Displaying settings to TFT..."); Serial.println("Displaying settings to TFT...");
display_obj.tft.print("SSID: "); #ifdef HAS_SCREEN
display_obj.tft.println(ssid); display_obj.tft.print(text_table1[2]);
display_obj.tft.print("IP address: "); display_obj.tft.println(ssid);
display_obj.tft.print(WiFi.softAPIP()); display_obj.tft.print(text_table3[1]);
display_obj.tft.print("\n"); display_obj.tft.print(WiFi.softAPIP());
display_obj.tft.print("\n");
#endif
Serial.print("IP address: "); Serial.print("IP address: ");
Serial.println(WiFi.softAPIP()); Serial.println(WiFi.softAPIP());
/*use mdns for host name resolution*/
/*
if (!MDNS.begin(host)) { //http://esp32.local
Serial.println("Error setting up MDNS responder!");
while (1) {
delay(1000);
}
}
Serial.println("mDNS responder started");
*/
// return javascript jquery // return javascript jquery
Serial.println("Setting server behavior..."); Serial.println("Setting server behavior...");
Serial.println(wifi_scan_obj.freeRAM()); Serial.println(wifi_scan_obj.freeRAM());
@@ -116,11 +113,12 @@ void Web::setupOTAupdate()
}, [this]() { }, [this]() {
HTTPUpload& upload = server.upload(); HTTPUpload& upload = server.upload();
if (upload.status == UPLOAD_FILE_START) { if (upload.status == UPLOAD_FILE_START) {
display_obj.tft.setTextColor(TFT_YELLOW); #ifdef HAS_SCREEN
display_obj.tft.print("Update: "); display_obj.tft.setTextColor(TFT_YELLOW);
display_obj.tft.print(upload.filename.c_str()); display_obj.tft.print(text_table3[2]);
display_obj.tft.print("\n"); display_obj.tft.print(upload.filename.c_str());
//display_obj.updateBanner(menu_function_obj.current_menu->name); display_obj.tft.print("\n");
#endif
Serial.printf("Update: %s\n", upload.filename.c_str()); Serial.printf("Update: %s\n", upload.filename.c_str());
if (!Update.begin(UPDATE_SIZE_UNKNOWN)) { //start with max available size if (!Update.begin(UPDATE_SIZE_UNKNOWN)) { //start with max available size
Update.printError(Serial); Update.printError(Serial);
@@ -130,30 +128,23 @@ void Web::setupOTAupdate()
if (Update.write(upload.buf, upload.currentSize) != upload.currentSize) { if (Update.write(upload.buf, upload.currentSize) != upload.currentSize) {
Update.printError(Serial); Update.printError(Serial);
} }
//display_obj.tft.println(upload.totalSize); #ifdef HAS_SCREEN
/* display_obj.tft.setTextColor(TFT_CYAN);
String display_string = ""; display_obj.tft.fillRect(0, 164, 240, 8, TFT_BLACK);
display_obj.tft.setCursor(0, 164); display_obj.tft.setCursor(0, 164);
for (int i = 0; i < 40; i++) { display_obj.tft.print(text_table3[3]);
display_string.concat(" "); display_obj.tft.print(upload.totalSize);
} display_obj.tft.print("\n");
*/ #endif
display_obj.tft.setTextColor(TFT_CYAN);
display_obj.tft.fillRect(0, 164, 240, 8, TFT_BLACK);
//delay(1);
//display_obj.tft.print(display_string);
display_obj.tft.setCursor(0, 164);
display_obj.tft.print("Bytes complete: ");
display_obj.tft.print(upload.totalSize);
display_obj.tft.print("\n");
//Serial.println(upload.totalSize);
} else if (upload.status == UPLOAD_FILE_END) { } else if (upload.status == UPLOAD_FILE_END) {
if (Update.end(true)) { //true to set the size to the current progress if (Update.end(true)) { //true to set the size to the current progress
display_obj.tft.setTextColor(TFT_GREEN); #ifdef HAS_SCREEN
display_obj.tft.print("Update Success: "); display_obj.tft.setTextColor(TFT_GREEN);
display_obj.tft.print(upload.totalSize); display_obj.tft.print(text_table3[4]);
display_obj.tft.print("\nRebooting...\n"); display_obj.tft.print(upload.totalSize);
display_obj.tft.print(text_table2[3]);
#endif
Serial.printf("Update Success: %u\nRebooting...\n", upload.totalSize); Serial.printf("Update Success: %u\nRebooting...\n", upload.totalSize);
delay(1000); delay(1000);
} else { } else {
@@ -168,8 +159,10 @@ void Web::setupOTAupdate()
Serial.println("Starting server..."); Serial.println("Starting server...");
server.begin(); server.begin();
display_obj.tft.setTextColor(TFT_GREEN); #ifdef HAS_SCREEN
display_obj.tft.println("\nCompleted update server setup"); display_obj.tft.setTextColor(TFT_GREEN);
display_obj.tft.println(text_table3[5]);
#endif
Serial.println("Completed update server setup"); Serial.println("Completed update server setup");
Serial.println(wifi_scan_obj.freeRAM()); Serial.println(wifi_scan_obj.freeRAM());
} }

View File

@@ -5,6 +5,8 @@
Code taken from espressif ESP32 OTA Update example Code taken from espressif ESP32 OTA Update example
*/ */
#include "configs.h"
#include <WiFi.h> #include <WiFi.h>
#include <WiFiClient.h> #include <WiFiClient.h>
#include <WebServer.h> #include <WebServer.h>
@@ -12,10 +14,17 @@ Code taken from espressif ESP32 OTA Update example
#include <Update.h> #include <Update.h>
#include "Assets.h" #include "Assets.h"
#include "Display.h"
#ifdef HAS_SCREEN
#include "Display.h"
#endif
#include "WiFiScan.h" #include "WiFiScan.h"
extern Display display_obj; #ifdef HAS_SCREEN
extern Display display_obj;
#endif
extern WiFiScan wifi_scan_obj; extern WiFiScan wifi_scan_obj;
class Web class Web

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,8 @@
#ifndef WiFiScan_h #ifndef WiFiScan_h
#define WiFiScan_h #define WiFiScan_h
#include "configs.h"
//#include <BLEDevice.h> //#include <BLEDevice.h>
//#include <BLEUtils.h> //#include <BLEUtils.h>
//#include <BLEScan.h> //#include <BLEScan.h>
@@ -8,19 +10,25 @@
#include <ArduinoJson.h> #include <ArduinoJson.h>
// Testing NimBLE // Testing NimBLE
#include <NimBLEDevice.h> #ifdef HAS_BT
#include <NimBLEAdvertisedDevice.h> #include <NimBLEDevice.h>
#endif
#include <WiFi.h> #include <WiFi.h>
#include <math.h> #include <math.h>
#include "esp_wifi.h" #include "esp_wifi.h"
#include "esp_wifi_types.h" #include "esp_wifi_types.h"
#include "esp_bt.h" #ifdef HAS_BT
#include "Display.h" #include "esp_bt.h"
#endif
#ifdef HAS_SCREEN
#include "Display.h"
#endif
#include "SDInterface.h" #include "SDInterface.h"
#include "Buffer.h" #include "Buffer.h"
#include "BatteryInterface.h" #include "BatteryInterface.h"
#include "TemperatureInterface.h" #include "TemperatureInterface.h"
#include "settings.h"
#include "Assets.h" #include "Assets.h"
//#include "MenuFunctions.h" //#include "MenuFunctions.h"
@@ -48,18 +56,24 @@
#define WIFI_SCAN_TARGET_AP 16 #define WIFI_SCAN_TARGET_AP 16
#define LV_SELECT_AP 17 #define LV_SELECT_AP 17
#define WIFI_ATTACK_AUTH 18 #define WIFI_ATTACK_AUTH 18
#define WIFI_ATTACK_MIMIC 19
#define WIFI_ATTACK_DEAUTH 20
#define GRAPH_REFRESH 100 #define GRAPH_REFRESH 100
#define MAX_CHANNEL 14 #define MAX_CHANNEL 14
extern Display display_obj; #ifdef HAS_SCREEN
extern Display display_obj;
#endif
extern SDInterface sd_obj; extern SDInterface sd_obj;
extern Buffer buffer_obj; extern Buffer buffer_obj;
extern BatteryInterface battery_obj; extern BatteryInterface battery_obj;
extern TemperatureInterface temp_obj; extern TemperatureInterface temp_obj;
extern Settings settings_obj;
esp_err_t esp_wifi_80211_tx(wifi_interface_t ifx, const void *buffer, int len, bool en_sys_seq); esp_err_t esp_wifi_80211_tx(wifi_interface_t ifx, const void *buffer, int len, bool en_sys_seq);
//int ieee80211_raw_frame_sanity_check(int32_t arg, int32_t arg2, int32_t arg3);
struct ssid { struct ssid {
String essid; String essid;
@@ -76,6 +90,12 @@ struct AccessPoint {
class WiFiScan class WiFiScan
{ {
private: private:
// Settings
int channel_hop_delay = 1;
bool force_pmkid = false;
bool force_probe = false;
bool save_pcap = false;
int x_pos; //position along the graph x axis int x_pos; //position along the graph x axis
float y_pos_x; //current graph y axis position of X value float y_pos_x; //current graph y axis position of X value
float y_pos_x_old = 120; //old y axis position of X value float y_pos_x_old = 120; //old y axis position of X value
@@ -89,16 +109,21 @@ class WiFiScan
bool do_break = false; bool do_break = false;
bool wsl_bypass_enabled = false;
//int num_beacon = 0; // GREEN //int num_beacon = 0; // GREEN
//int num_probe = 0; // BLUE //int num_probe = 0; // BLUE
//int num_deauth = 0; // RED //int num_deauth = 0; // RED
uint32_t initTime = 0; uint32_t initTime = 0;
bool run_setup = true; bool run_setup = true;
void initWiFi(uint8_t scan_mode);
int bluetoothScanTime = 5; int bluetoothScanTime = 5;
int packets_sent = 0; int packets_sent = 0;
const wifi_promiscuous_filter_t filt = {.filter_mask=WIFI_PROMIS_FILTER_MASK_MGMT | WIFI_PROMIS_FILTER_MASK_DATA}; const wifi_promiscuous_filter_t filt = {.filter_mask=WIFI_PROMIS_FILTER_MASK_MGMT | WIFI_PROMIS_FILTER_MASK_DATA};
BLEScan* pBLEScan; #ifdef HAS_BT
NimBLEScan* pBLEScan;
#endif
//String connected_network = ""; //String connected_network = "";
String alfa = "1234567890qwertyuiopasdfghjkklzxcvbnm QWERTYUIOPASDFGHJKLZXCVBNM_"; String alfa = "1234567890qwertyuiopasdfghjkklzxcvbnm QWERTYUIOPASDFGHJKLZXCVBNM_";
@@ -128,8 +153,8 @@ class WiFiScan
} __attribute__((packed)) WifiMgmtHdr; } __attribute__((packed)) WifiMgmtHdr;
typedef struct { typedef struct {
WifiMgmtHdr hdr;
uint8_t payload[0]; uint8_t payload[0];
WifiMgmtHdr hdr;
} wifi_ieee80211_packet_t; } wifi_ieee80211_packet_t;
// barebones packet // barebones packet
@@ -181,9 +206,18 @@ class WiFiScan
/* SSID */ /* SSID */
}; };
uint8_t deauth_frame_default[26] = {
0xc0, 0x00, 0x3a, 0x01,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xf0, 0xff, 0x02, 0x00
};
void startWiFiAttacks(uint8_t scan_mode, uint16_t color, String title_string);
void packetMonitorMain(uint32_t currentTime); void packetMonitorMain(uint32_t currentTime);
void eapolMonitorMain(uint32_t currentTime); void eapolMonitorMain(uint32_t currentTime);
void changeChannel();
void updateMidway(); void updateMidway();
void tftDrawXScalButtons(); void tftDrawXScalButtons();
void tftDrawYScaleButtons(); void tftDrawYScaleButtons();
@@ -191,14 +225,17 @@ class WiFiScan
void tftDrawColorKey(); void tftDrawColorKey();
void tftDrawGraphObjects(); void tftDrawGraphObjects();
void sendProbeAttack(uint32_t currentTime); void sendProbeAttack(uint32_t currentTime);
void sendDeauthAttack(uint32_t currentTime);
void broadcastRandomSSID(uint32_t currentTime); void broadcastRandomSSID(uint32_t currentTime);
void broadcastCustomBeacon(uint32_t current_time, ssid custom_ssid); void broadcastCustomBeacon(uint32_t current_time, ssid custom_ssid);
void broadcastSetSSID(uint32_t current_time, char* ESSID); void broadcastSetSSID(uint32_t current_time, char* ESSID);
void RunAPScan(uint8_t scan_mode, uint16_t color); void RunAPScan(uint8_t scan_mode, uint16_t color);
void RunRickRoll(uint8_t scan_mode, uint16_t color); //void RunRickRoll(uint8_t scan_mode, uint16_t color);
void RunBeaconSpam(uint8_t scan_mode, uint16_t color); //void RunBeaconSpam(uint8_t scan_mode, uint16_t color);
void RunProbeFlood(uint8_t scan_mode, uint16_t color); //void RunProbeFlood(uint8_t scan_mode, uint16_t color);
void RunBeaconList(uint8_t scan_mode, uint16_t color); //void RunDeauthFlood(uint8_t scan_mode, uint16_t color);
void RunMimicFlood(uint8_t scan_mode, uint16_t color);
//void RunBeaconList(uint8_t scan_mode, uint16_t color);
void RunEspressifScan(uint8_t scan_mode, uint16_t color); void RunEspressifScan(uint8_t scan_mode, uint16_t color);
void RunPwnScan(uint8_t scan_mode, uint16_t color); void RunPwnScan(uint8_t scan_mode, uint16_t color);
void RunBeaconScan(uint8_t scan_mode, uint16_t color); void RunBeaconScan(uint8_t scan_mode, uint16_t color);
@@ -208,7 +245,11 @@ class WiFiScan
void RunPacketMonitor(uint8_t scan_mode, uint16_t color); void RunPacketMonitor(uint8_t scan_mode, uint16_t color);
void RunBluetoothScan(uint8_t scan_mode, uint16_t color); void RunBluetoothScan(uint8_t scan_mode, uint16_t color);
void RunLvJoinWiFi(uint8_t scan_mode, uint16_t color); void RunLvJoinWiFi(uint8_t scan_mode, uint16_t color);
static void scanCompleteCB(BLEScanResults scanResults); #ifdef HAS_BT
static void scanCompleteCB(BLEScanResults scanResults);
#endif
//int ieee80211_raw_frame_sanity_check(int32_t arg, int32_t arg2, int32_t arg3);
public: public:
WiFiScan(); WiFiScan();
@@ -231,8 +272,9 @@ class WiFiScan
//lv_obj_t * scr = lv_cont_create(NULL, NULL); //lv_obj_t * scr = lv_cont_create(NULL, NULL);
wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT(); wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
char* stringToChar(String string);
void RunSetup(); void RunSetup();
int clearSSIDs(); int clearSSIDs();
int clearAPs(); int clearAPs();
@@ -240,10 +282,12 @@ class WiFiScan
int generateSSIDs(); int generateSSIDs();
bool shutdownWiFi(); bool shutdownWiFi();
bool shutdownBLE(); bool shutdownBLE();
bool scanning();
void joinWiFi(String ssid, String password); void joinWiFi(String ssid, String password);
String getStaMAC(); String getStaMAC();
String getApMAC(); String getApMAC();
String freeRAM(); String freeRAM();
void changeChannel();
void RunInfo(); void RunInfo();
void RunShutdownWiFi(); void RunShutdownWiFi();
void RunShutdownBLE(); void RunShutdownBLE();

View File

@@ -25,14 +25,18 @@ void A32u4Interface::begin() {
if (a32u4_rep != 0) { if (a32u4_rep != 0) {
this->supported = true; this->supported = true;
display_obj.tft.setTextColor(TFT_GREEN, TFT_BLACK); #ifdef HAS_SCREEN
display_obj.tft.println("ATmega32U4 Found!"); display_obj.tft.setTextColor(TFT_GREEN, TFT_BLACK);
display_obj.tft.setTextColor(TFT_CYAN, TFT_BLACK); display_obj.tft.println("ATmega32U4 Found!");
display_obj.tft.setTextColor(TFT_CYAN, TFT_BLACK);
#endif
} }
else { else {
display_obj.tft.setTextColor(TFT_RED, TFT_BLACK); #ifdef HAS_SCREEN
display_obj.tft.println("ATmega32U4 Not Found"); display_obj.tft.setTextColor(TFT_RED, TFT_BLACK);
display_obj.tft.setTextColor(TFT_CYAN, TFT_BLACK); display_obj.tft.println("ATmega32U4 Not Found");
display_obj.tft.setTextColor(TFT_CYAN, TFT_BLACK);
#endif
Serial.print("A32U4 Said: "); Serial.print("A32U4 Said: ");
Serial.println(a32u4_rep); Serial.println(a32u4_rep);
} }
@@ -62,5 +66,4 @@ void A32u4Interface::main(uint32_t current_time) {
} }
} }
//delay(1);*/
} }

View File

@@ -1,12 +1,18 @@
#ifndef a32u4_interface_h #ifndef a32u4_interface_h
#define a32u4_interface_h #define a32u4_interface_h
#include "Display.h" #include "configs.h"
#ifdef HAS_SCREEN
#include "Display.h"
#endif
#include <HardwareSerial.h> #include <HardwareSerial.h>
#define BAUD32U4 115200 #define BAUD32U4 115200
extern Display display_obj; #ifdef HAS_SCREEN
extern Display display_obj;
#endif
class A32u4Interface { class A32u4Interface {
public: public:

398
esp32_marauder/configs.h Normal file
View File

@@ -0,0 +1,398 @@
#ifndef configs_h
#define configs_h
#define POLISH_POTATO
//#define MARAUDER_MINI
#define MARAUDER_V4
//#define MARAUDER_V6
//#define MARAUDER_KIT
//#define GENERIC_ESP32
//#define MARAUDER_FLIPPER
#define MARAUDER_VERSION "v0.9.6"
//// BUTTON DEFINITIONS
#ifdef MARAUDER_MINI
#define L_BTN 13
#define C_BTN 34
#define U_BTN 36
#define R_BTN 39
#define D_BTN 35
#endif
#ifdef MARAUDER_V4
#endif
//// END BUTTON DEFINITIONS
//// DISPLAY DEFINITIONS
#ifdef MARAUDER_V4
#define BANNER_TEXT_SIZE 2
#ifndef TFT_WIDTH
#define TFT_WIDTH 240
#endif
#ifndef TFT_HEIGHT
#define TFT_HEIGHT 320
#endif
#define TFT_SHIELD
#define SCREEN_WIDTH TFT_WIDTH
#define SCREEN_HEIGHT TFT_HEIGHT
#define HEIGHT_1 TFT_WIDTH
#define WIDTH_1 TFT_HEIGHT
#define STANDARD_FONT_CHAR_LIMIT (TFT_WIDTH/6) // number of characters on a single line with normal font
#define TEXT_HEIGHT 16 // Height of text to be printed and scrolled
#define BOT_FIXED_AREA 0 // Number of lines in bottom fixed area (lines counted from bottom of screen)
#define TOP_FIXED_AREA 48 // Number of lines in top fixed area (lines counted from top of screen)
#define YMAX 320 // Bottom of screen area
#define minimum(a,b) (((a) < (b)) ? (a) : (b))
//#define MENU_FONT NULL
#define MENU_FONT &FreeMono9pt7b // Winner
//#define MENU_FONT &FreeMonoBold9pt7b
//#define MENU_FONT &FreeSans9pt7b
//#define MENU_FONT &FreeSansBold9pt7b
#define BUTTON_ARRAY_LEN 9
#define STATUS_BAR_WIDTH 16
#define LVGL_TICK_PERIOD 6
#define FRAME_X 100
#define FRAME_Y 64
#define FRAME_W 120
#define FRAME_H 50
// Red zone size
#define REDBUTTON_X FRAME_X
#define REDBUTTON_Y FRAME_Y
#define REDBUTTON_W (FRAME_W/2)
#define REDBUTTON_H FRAME_H
// Green zone size
#define GREENBUTTON_X (REDBUTTON_X + REDBUTTON_W)
#define GREENBUTTON_Y FRAME_Y
#define GREENBUTTON_W (FRAME_W/2)
#define GREENBUTTON_H FRAME_H
#define STATUSBAR_COLOR 0x4A49
#define KIT_LED_BUILTIN 13
#endif
#ifdef MARAUDER_V6
#define BANNER_TEXT_SIZE 2
#ifndef TFT_WIDTH
#define TFT_WIDTH 240
#endif
#ifndef TFT_HEIGHT
#define TFT_HEIGHT 320
#endif
#define TFT_DIY
#define SCREEN_WIDTH TFT_WIDTH
#define SCREEN_HEIGHT TFT_HEIGHT
#define HEIGHT_1 TFT_WIDTH
#define WIDTH_1 TFT_HEIGHT
#define STANDARD_FONT_CHAR_LIMIT (TFT_WIDTH/6) // number of characters on a single line with normal font
#define TEXT_HEIGHT 16 // Height of text to be printed and scrolled
#define BOT_FIXED_AREA 0 // Number of lines in bottom fixed area (lines counted from bottom of screen)
#define TOP_FIXED_AREA 48 // Number of lines in top fixed area (lines counted from top of screen)
#define YMAX 320 // Bottom of screen area
#define minimum(a,b) (((a) < (b)) ? (a) : (b))
//#define MENU_FONT NULL
#define MENU_FONT &FreeMono9pt7b // Winner
//#define MENU_FONT &FreeMonoBold9pt7b
//#define MENU_FONT &FreeSans9pt7b
//#define MENU_FONT &FreeSansBold9pt7b
#define BUTTON_ARRAY_LEN 9
#define STATUS_BAR_WIDTH 16
#define LVGL_TICK_PERIOD 6
#define FRAME_X 100
#define FRAME_Y 64
#define FRAME_W 120
#define FRAME_H 50
// Red zone size
#define REDBUTTON_X FRAME_X
#define REDBUTTON_Y FRAME_Y
#define REDBUTTON_W (FRAME_W/2)
#define REDBUTTON_H FRAME_H
// Green zone size
#define GREENBUTTON_X (REDBUTTON_X + REDBUTTON_W)
#define GREENBUTTON_Y FRAME_Y
#define GREENBUTTON_W (FRAME_W/2)
#define GREENBUTTON_H FRAME_H
#define STATUSBAR_COLOR 0x4A49
#define KIT_LED_BUILTIN 13
#endif
#ifdef MARAUDER_KIT
#define BANNER_TEXT_SIZE 2
#ifndef TFT_WIDTH
#define TFT_WIDTH 240
#endif
#ifndef TFT_HEIGHT
#define TFT_HEIGHT 320
#endif
#define TFT_DIY
#define KIT
#define SCREEN_WIDTH TFT_WIDTH
#define SCREEN_HEIGHT TFT_HEIGHT
#define HEIGHT_1 TFT_WIDTH
#define WIDTH_1 TFT_HEIGHT
#define STANDARD_FONT_CHAR_LIMIT (TFT_WIDTH/6) // number of characters on a single line with normal font
#define TEXT_HEIGHT 16 // Height of text to be printed and scrolled
#define BOT_FIXED_AREA 0 // Number of lines in bottom fixed area (lines counted from bottom of screen)
#define TOP_FIXED_AREA 48 // Number of lines in top fixed area (lines counted from top of screen)
#define YMAX 320 // Bottom of screen area
#define minimum(a,b) (((a) < (b)) ? (a) : (b))
//#define MENU_FONT NULL
#define MENU_FONT &FreeMono9pt7b // Winner
//#define MENU_FONT &FreeMonoBold9pt7b
//#define MENU_FONT &FreeSans9pt7b
//#define MENU_FONT &FreeSansBold9pt7b
#define BUTTON_ARRAY_LEN 9
#define STATUS_BAR_WIDTH 16
#define LVGL_TICK_PERIOD 6
#define FRAME_X 100
#define FRAME_Y 64
#define FRAME_W 120
#define FRAME_H 50
// Red zone size
#define REDBUTTON_X FRAME_X
#define REDBUTTON_Y FRAME_Y
#define REDBUTTON_W (FRAME_W/2)
#define REDBUTTON_H FRAME_H
// Green zone size
#define GREENBUTTON_X (REDBUTTON_X + REDBUTTON_W)
#define GREENBUTTON_Y FRAME_Y
#define GREENBUTTON_W (FRAME_W/2)
#define GREENBUTTON_H FRAME_H
#define STATUSBAR_COLOR 0x4A49
#define KIT_LED_BUILTIN 13
#endif
#ifdef MARAUDER_MINI
#define TFT_MISO 19
#define TFT_MOSI 23
#define TFT_SCLK 18
#define TFT_CS 27
#define TFT_DC 26
#define TFT_RST 5
#define TFT_BL 32
#define TOUCH_CS 21
#define SD_CS 4
#define BANNER_TEXT_SIZE 1
#ifndef TFT_WIDTH
#define TFT_WIDTH 128
#endif
#ifndef TFT_HEIGHT
#define TFT_HEIGHT 128
#endif
#define SCREEN_WIDTH TFT_WIDTH // Originally 240
#define SCREEN_HEIGHT TFT_HEIGHT // Originally 320
#define HEIGHT_1 TFT_WIDTH
#define WIDTH_1 TFT_WIDTH
#define STANDARD_FONT_CHAR_LIMIT (TFT_WIDTH/6) // number of characters on a single line with normal font
#define TEXT_HEIGHT (TFT_HEIGHT/10) // Height of text to be printed and scrolled
#define BOT_FIXED_AREA 0 // Number of lines in bottom fixed area (lines counted from bottom of screen)
#define TOP_FIXED_AREA 48 // Number of lines in top fixed area (lines counted from top of screen)
#define YMAX TFT_HEIGHT // Bottom of screen area
#define minimum(a,b) (((a) < (b)) ? (a) : (b))
//#define MENU_FONT NULL
#define MENU_FONT &FreeMono9pt7b // Winner
//#define MENU_FONT &FreeMonoBold9pt7b
//#define MENU_FONT &FreeSans9pt7b
//#define MENU_FONT &FreeSansBold9pt7b
#define BUTTON_ARRAY_LEN 9
#define STATUS_BAR_WIDTH (TFT_HEIGHT/16)
#define LVGL_TICK_PERIOD 6
#define FRAME_X 100
#define FRAME_Y 64
#define FRAME_W 120
#define FRAME_H 50
// Red zone size
#define REDBUTTON_X FRAME_X
#define REDBUTTON_Y FRAME_Y
#define REDBUTTON_W (FRAME_W/2)
#define REDBUTTON_H FRAME_H
// Green zone size
#define GREENBUTTON_X (REDBUTTON_X + REDBUTTON_W)
#define GREENBUTTON_Y FRAME_Y
#define GREENBUTTON_W (FRAME_W/2)
#define GREENBUTTON_H FRAME_H
#define STATUSBAR_COLOR 0x4A49
#endif
//// END DISPLAY DEFINITIONS
//// MENU DEFINITIONS
#ifdef MARAUDER_V4
#define BANNER_TIME 100
#define COMMAND_PREFIX "!"
// Keypad start position, key sizes and spacing
#define KEY_X 120 // Centre of key
#define KEY_Y 50
#define KEY_W 240 // Width and height
#define KEY_H 22
#define KEY_SPACING_X 0 // X and Y gap
#define KEY_SPACING_Y 1
#define KEY_TEXTSIZE 1 // Font size multiplier
#define ICON_W 22
#define ICON_H 22
#define BUTTON_PADDING 22
//#define BUTTON_ARRAY_LEN 5
#endif
#ifdef MARAUDER_V6
#define BANNER_TIME 100
#define COMMAND_PREFIX "!"
// Keypad start position, key sizes and spacing
#define KEY_X 120 // Centre of key
#define KEY_Y 50
#define KEY_W 240 // Width and height
#define KEY_H 22
#define KEY_SPACING_X 0 // X and Y gap
#define KEY_SPACING_Y 1
#define KEY_TEXTSIZE 1 // Font size multiplier
#define ICON_W 22
#define ICON_H 22
#define BUTTON_PADDING 22
//#define BUTTON_ARRAY_LEN 5
#endif
#ifdef MARAUDER_KIT
#define BANNER_TIME 100
#define COMMAND_PREFIX "!"
// Keypad start position, key sizes and spacing
#define KEY_X 120 // Centre of key
#define KEY_Y 50
#define KEY_W 240 // Width and height
#define KEY_H 22
#define KEY_SPACING_X 0 // X and Y gap
#define KEY_SPACING_Y 1
#define KEY_TEXTSIZE 1 // Font size multiplier
#define ICON_W 22
#define ICON_H 22
#define BUTTON_PADDING 22
//#define BUTTON_ARRAY_LEN 5
#endif
#ifdef MARAUDER_MINI
#define BANNER_TIME 50
#define COMMAND_PREFIX "!"
// Keypad start position, key sizes and spacing
#define KEY_X (TFT_WIDTH/2) // Centre of key
#define KEY_Y (TFT_HEIGHT/4.5)
#define KEY_W TFT_WIDTH // Width and height
#define KEY_H (TFT_HEIGHT/12.8)
#define KEY_SPACING_X 0 // X and Y gap
#define KEY_SPACING_Y 1
#define KEY_TEXTSIZE 1 // Font size multiplier
#define ICON_W 22
#define ICON_H 22
#define BUTTON_PADDING 10
#endif
//// END MENU DEFINITIONS
//// SD DEFINITIONS
#ifdef MARAUDER_V4
#define SD_CS 12
#endif
#ifdef MARAUDER_V6
#define SD_CS 12
#endif
#ifdef MARAUDER_KIT
#define SD_CS 12
#endif
#ifdef MARAUDER_MINI
#define SD_CS 4
#endif
#ifdef MARAUDER_FLIPPER
#define SD_CS -1
#endif
//// END SD DEFINITIONS
//// SCREEN STUFF
#ifdef MARAUDER_MINI
#define HAS_SCREEN
#define HAS_BT
#endif
#ifdef MARAUDER_V4
#define HAS_SCREEN
#define HAS_BT
#endif
#ifdef MARAUDER_V6
#define HAS_SCREEN
#define HAS_BT
#endif
#ifdef MARAUDER_KIT
#define HAS_SCREEN
#define HAS_BT
#endif
#ifdef GENERIC_ESP32
#define HAS_BT
#endif
#ifndef HAS_SCREEN
#define TFT_CYAN 0
#define TFT_BLUE 0
#define TFT_RED 0
#define TFT_GREEN 0
#define TFT_GREY 0
#define TFT_GRAY 0
#define TFT_MAGENTA 0
#define TFT_VIOLET 0
#define STANDARD_FONT_CHAR_LIMIT 40
#define FLASH_BUTTON -1
#include <FS.h>
#include <functional>
#include <LinkedList.h>
#include "SPIFFS.h"
#include "Assets.h"
#endif
//// END SCREEN STUFF
#endif

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

View File

@@ -5,6 +5,13 @@ Partition Scheme: Minimal SPIFFS
https://www.online-utility.org/image/convert/to/XBM https://www.online-utility.org/image/convert/to/XBM
*/ */
#include "configs.h"
#ifndef HAS_SCREEN
#define MenuFunctions_h
#define Display_h
#endif
#include <WiFi.h> #include <WiFi.h>
#include <Wire.h> #include <Wire.h>
#include "esp_wifi.h" #include "esp_wifi.h"
@@ -15,11 +22,8 @@ https://www.online-utility.org/image/convert/to/XBM
#include "esp_system.h" #include "esp_system.h"
#include <Arduino.h> #include <Arduino.h>
#include "Assets.h" #include "Assets.h"
#include "Display.h"
#include "WiFiScan.h" #include "WiFiScan.h"
#include "MenuFunctions.h"
#include "SDInterface.h" #include "SDInterface.h"
#include "Web.h" #include "Web.h"
#include "Buffer.h" #include "Buffer.h"
@@ -27,23 +31,26 @@ https://www.online-utility.org/image/convert/to/XBM
#include "TemperatureInterface.h" #include "TemperatureInterface.h"
#include "LedInterface.h" #include "LedInterface.h"
#include "esp_interface.h" #include "esp_interface.h"
#include "a32u4_interface.h" #include "settings.h"
//#include "icons.h" #include "CommandLine.h"
#include "lang_var.h"
/* #ifdef HAS_SCREEN
#ifdef __cplusplus #include "Display.h"
extern "C" { #include "MenuFunctions.h"
#include "a32u4_interface.h"
#endif
#ifdef MARAUDER_MINI
#include <SwitchLib.h>
SwitchLib u_btn = SwitchLib(U_BTN, 1000, true);
SwitchLib d_btn = SwitchLib(D_BTN, 1000, true);
SwitchLib l_btn = SwitchLib(L_BTN, 1000, true);
SwitchLib r_btn = SwitchLib(R_BTN, 1000, true);
SwitchLib c_btn = SwitchLib(C_BTN, 1000, true);
#endif #endif
uint8_t temprature_sens_read();
#ifdef __cplusplus
}
#endif
uint8_t temprature_sens_read();
*/
Display display_obj;
WiFiScan wifi_scan_obj; WiFiScan wifi_scan_obj;
MenuFunctions menu_function_obj;
SDInterface sd_obj; SDInterface sd_obj;
Web web_obj; Web web_obj;
Buffer buffer_obj; Buffer buffer_obj;
@@ -51,199 +58,278 @@ BatteryInterface battery_obj;
TemperatureInterface temp_obj; TemperatureInterface temp_obj;
LedInterface led_obj; LedInterface led_obj;
EspInterface esp_obj; EspInterface esp_obj;
A32u4Interface a32u4_obj; Settings settings_obj;
CommandLine cli_obj;
#ifdef HAS_SCREEN
Display display_obj;
MenuFunctions menu_function_obj;
A32u4Interface a32u4_obj;
#endif
const String PROGMEM version_number = MARAUDER_VERSION;
Adafruit_NeoPixel strip = Adafruit_NeoPixel(Pixels, PIN, NEO_GRB + NEO_KHZ800); Adafruit_NeoPixel strip = Adafruit_NeoPixel(Pixels, PIN, NEO_GRB + NEO_KHZ800);
uint32_t currentTime = 0; uint32_t currentTime = 0;
void backlightOn() {
#ifdef HAS_SCREEN
#ifdef MARAUDER_MINI
digitalWrite(TFT_BL, LOW);
#endif
#ifndef MARAUDER_MINI
digitalWrite(TFT_BL, HIGH);
#endif
#endif
}
void backlightOff() {
#ifdef HAS_SCREEN
#ifdef MARAUDER_MINI
digitalWrite(TFT_BL, HIGH);
#endif
#ifndef MARAUDER_MINI
digitalWrite(TFT_BL, LOW);
#endif
#endif
}
void setup() void setup()
{ {
pinMode(FLASH_BUTTON, INPUT); pinMode(FLASH_BUTTON, INPUT);
pinMode(TFT_BL, OUTPUT);
digitalWrite(TFT_BL, LOW); #ifdef HAS_SCREEN
pinMode(TFT_BL, OUTPUT);
#endif
backlightOff();
#if BATTERY_ANALOG_ON == 1 #if BATTERY_ANALOG_ON == 1
pinMode(BATTERY_PIN, OUTPUT); pinMode(BATTERY_PIN, OUTPUT);
pinMode(CHARGING_PIN, INPUT); pinMode(CHARGING_PIN, INPUT);
#endif #endif
// Preset SPI CS pins to avoid bus conflicts // Preset SPI CS pins to avoid bus conflicts
digitalWrite(TFT_CS, HIGH); #ifdef HAS_SCREEN
digitalWrite(TFT_CS, HIGH);
#endif
digitalWrite(SD_CS, HIGH); digitalWrite(SD_CS, HIGH);
Serial.begin(115200); Serial.begin(115200);
//Serial.begin(115200); //Serial.begin(115200);
display_obj.RunSetup();
display_obj.tft.setTextColor(TFT_WHITE, TFT_BLACK);
digitalWrite(TFT_BL, LOW); Serial.println("\n\nHello, World!\n");
Serial.println("ESP-IDF version is: " + String(esp_get_idf_version()));
#ifdef HAS_SCREEN
Serial.println("Has Screen");
#else
Serial.println("Does not have screen");
#endif
#ifdef HAS_SCREEN
display_obj.RunSetup();
display_obj.tft.setTextColor(TFT_WHITE, TFT_BLACK);
#endif
backlightOff();
// Draw the title screen // Draw the title screen
display_obj.drawJpeg("/marauder3L.jpg", 0 , 0); // 240 x 320 image #ifdef HAS_SCREEN
display_obj.drawJpeg("/marauder3L.jpg", 0 , 0); // 240 x 320 image
#endif
//showCenterText(version_number, 250); #ifdef HAS_SCREEN
display_obj.tft.drawCentreString(display_obj.version_number, 120, 250, 2); //showCenterText(version_number, 250);
#ifndef MARAUDER_MINI
display_obj.tft.drawCentreString(display_obj.version_number, 120, 250, 2);
#endif
#ifdef MARAUDER_MINI
display_obj.tft.drawCentreString(display_obj.version_number, TFT_WIDTH/2, TFT_HEIGHT, 1);
#endif
#endif
digitalWrite(TFT_BL, HIGH); // Need this backlightOn(); // Need this
delay(2000); delay(2000);
display_obj.clearScreen(); #ifdef HAS_SCREEN
display_obj.clearScreen();
display_obj.tft.setTextColor(TFT_CYAN, TFT_BLACK);
display_obj.tft.setTextColor(TFT_CYAN, TFT_BLACK);
display_obj.tft.println("Giving room for HardwareSerial...");
display_obj.tft.println(text_table0[0]);
delay(2000);
delay(2000);
display_obj.tft.println("Marauder " + display_obj.version_number + "\n");
display_obj.tft.println("Marauder " + display_obj.version_number + "\n");
display_obj.tft.println("Started Serial");
display_obj.tft.println(text_table0[1]);
#endif
Serial.println(F("\n\n--------------------------------\n")); Serial.println(F("\n\n--------------------------------\n"));
Serial.println(F(" ESP32 Marauder \n")); Serial.println(F(" ESP32 Marauder \n"));
Serial.println(" " + display_obj.version_number + "\n"); Serial.println(" " + version_number + "\n");
Serial.println(F(" By: justcallmekoko\n")); Serial.println(F(" By: justcallmekoko\n"));
Serial.println(F("--------------------------------\n\n")); Serial.println(F("--------------------------------\n\n"));
//Serial.println("Internal Temp: " + (String)((temprature_sens_read() - 32) / 1.8)); //Serial.println("Internal Temp: " + (String)((temprature_sens_read() - 32) / 1.8));
settings_obj.begin();
Serial.println("This is a test Channel: " + (String)settings_obj.loadSetting<uint8_t>("Channel"));
if (settings_obj.loadSetting<bool>( "Force PMKID"))
Serial.println("This is a test Force PMKID: true");
else
Serial.println("This is a test Force PMKID: false");
wifi_scan_obj.RunSetup(); wifi_scan_obj.RunSetup();
Serial.println(wifi_scan_obj.freeRAM()); Serial.println(wifi_scan_obj.freeRAM());
display_obj.tft.println("Checked RAM"); #ifdef HAS_SCREEN
display_obj.tft.println(F(text_table0[2]));
#endif
// Do some SD stuff // Do some SD stuff
if(sd_obj.initSD()) { if(sd_obj.initSD()) {
Serial.println(F("SD Card supported")); Serial.println(F("SD Card supported"));
display_obj.tft.println(F("Initialized SD Card")); #ifdef HAS_SCREEN
display_obj.tft.println(F(text_table0[3]));
#endif
} }
else { else {
Serial.println(F("SD Card NOT Supported")); Serial.println(F("SD Card NOT Supported"));
display_obj.tft.setTextColor(TFT_RED, TFT_BLACK); #ifdef HAS_SCREEN
display_obj.tft.println(F("Failed to Initialize SD Card")); display_obj.tft.setTextColor(TFT_RED, TFT_BLACK);
display_obj.tft.setTextColor(TFT_CYAN, TFT_BLACK); display_obj.tft.println(F(text_table0[4]));
display_obj.tft.setTextColor(TFT_CYAN, TFT_BLACK);
#endif
} }
// Run display setup // Run display setup
Serial.println(wifi_scan_obj.freeRAM()); Serial.println(wifi_scan_obj.freeRAM());
//display_obj.RunSetup();
// Build menus // Build menus
Serial.println(wifi_scan_obj.freeRAM()); Serial.println(wifi_scan_obj.freeRAM());
//menu_function_obj.RunSetup();
//display_obj.tft.println("Created Menu Structure");
// Battery stuff // Battery stuff
Serial.println(wifi_scan_obj.freeRAM()); Serial.println(wifi_scan_obj.freeRAM());
battery_obj.RunSetup(); battery_obj.RunSetup();
display_obj.tft.println(F("Checked battery configuration")); #ifdef HAS_SCREEN
display_obj.tft.println(F(text_table0[5]));
#endif
// Temperature stuff // Temperature stuff
Serial.println(wifi_scan_obj.freeRAM()); Serial.println(wifi_scan_obj.freeRAM());
temp_obj.RunSetup(); #ifndef MARAUDER_FLIPPER
temp_obj.RunSetup();
#endif
display_obj.tft.println(F("Initialized temperature interface")); #ifdef HAS_SCREEN
display_obj.tft.println(F(text_table0[6]));
#endif
battery_obj.battery_level = battery_obj.getBatteryLevel(); Serial.println("Bat lvl");
if (battery_obj.i2c_supported) { #ifndef MARAUDER_FLIPPER
Serial.println(F("IP5306 I2C Supported: true")); battery_obj.battery_level = battery_obj.getBatteryLevel();
}
else if (battery_obj.i2c_supported) {
Serial.println(F("IP5306 I2C Supported: false")); Serial.println(F("IP5306 I2C Supported: true"));
}
else
Serial.println(F("IP5306 I2C Supported: false"));
#endif
Serial.println(wifi_scan_obj.freeRAM()); Serial.println(wifi_scan_obj.freeRAM());
// Do some LED stuff // Do some LED stuff
led_obj.RunSetup(); #ifndef MARAUDER_FLIPPER
Serial.println("LED");
led_obj.RunSetup();
#endif
display_obj.tft.println(F("Initialized LED Interface")); #ifdef HAS_SCREEN
display_obj.tft.println(F(text_table0[7]));
//display_obj.tft.println(F("Starting...")); #endif
delay(500); delay(500);
//display_obj.tft.setTextColor(TFT_WHITE, TFT_BLACK); #ifdef HAS_SCREEN
display_obj.tft.println(F(text_table0[8]));
// OG Logo Section
/*
digitalWrite(TFT_BL, LOW);
// Draw the title screen
display_obj.drawJpeg("/marauder3L.jpg", 0 , 0); // 240 x 320 image
//showCenterText(version_number, 250);
display_obj.tft.drawCentreString(display_obj.version_number, 120, 250, 2);
digitalWrite(TFT_BL, HIGH);
*/
esp_obj.begin();
a32u4_obj.begin(); // This goes last to make sure nothing is messed up when reading serial display_obj.tft.setTextColor(TFT_WHITE, TFT_BLACK);
delay(2000);
#endif
display_obj.tft.println(F("Starting...")); #ifdef HAS_SCREEN
menu_function_obj.RunSetup();
#endif
display_obj.tft.setTextColor(TFT_WHITE, TFT_BLACK); Serial.println("CLI");
cli_obj.RunSetup();
delay(2000);
menu_function_obj.RunSetup();
} }
void loop() void loop()
{ {
// get the current time
//if ((wifi_scan_obj.currentScanMode != WIFI_ATTACK_BEACON_SPAM))
currentTime = millis(); currentTime = millis();
// Update all of our objects // Update all of our objects
//if ((!display_obj.draw_tft) && #ifdef HAS_SCREEN
// (wifi_scan_obj.currentScanMode != OTA_UPDATE)) bool do_draw = display_obj.draw_tft;
if ((!display_obj.draw_tft) && (wifi_scan_obj.currentScanMode != ESP_UPDATE)) #else
bool do_draw = false;
#endif
if ((!do_draw) && (wifi_scan_obj.currentScanMode != ESP_UPDATE))
{ {
display_obj.main(wifi_scan_obj.currentScanMode); cli_obj.main(currentTime);
#ifdef HAS_SCREEN
display_obj.main(wifi_scan_obj.currentScanMode);
#endif
wifi_scan_obj.main(currentTime); wifi_scan_obj.main(currentTime);
sd_obj.main(); sd_obj.main();
battery_obj.main(currentTime); #ifndef MARAUDER_FLIPPER
temp_obj.main(currentTime); battery_obj.main(currentTime);
esp_obj.main(currentTime); temp_obj.main(currentTime);
a32u4_obj.main(currentTime); #endif
//led_obj.main(currentTime); settings_obj.main(currentTime);
//if ((wifi_scan_obj.currentScanMode != WIFI_ATTACK_BEACON_SPAM))
if ((wifi_scan_obj.currentScanMode != WIFI_PACKET_MONITOR) && if ((wifi_scan_obj.currentScanMode != WIFI_PACKET_MONITOR) &&
(wifi_scan_obj.currentScanMode != WIFI_SCAN_EAPOL)) (wifi_scan_obj.currentScanMode != WIFI_SCAN_EAPOL)) {
menu_function_obj.main(currentTime); #ifdef HAS_SCREEN
menu_function_obj.main(currentTime);
#endif
//cli_obj.main(currentTime);
}
if (wifi_scan_obj.currentScanMode == OTA_UPDATE) if (wifi_scan_obj.currentScanMode == OTA_UPDATE)
web_obj.main(); web_obj.main();
delay(1); delay(1);
} }
else if ((display_obj.draw_tft) && #ifdef HAS_SCREEN
(wifi_scan_obj.currentScanMode != OTA_UPDATE)) else if ((display_obj.draw_tft) &&
{ (wifi_scan_obj.currentScanMode != OTA_UPDATE))
display_obj.drawStylus(); {
} display_obj.drawStylus();
}
#endif
else if (wifi_scan_obj.currentScanMode == ESP_UPDATE) { else if (wifi_scan_obj.currentScanMode == ESP_UPDATE) {
display_obj.main(wifi_scan_obj.currentScanMode); #ifdef HAS_SCREEN
menu_function_obj.main(currentTime); display_obj.main(wifi_scan_obj.currentScanMode);
esp_obj.program(); menu_function_obj.main(currentTime);
#endif
//cli_obj.main(currentTime);
delay(1); delay(1);
} }
//else
//{
// web_obj.main();
//}
//Serial.println(wifi_scan_obj.currentScanMode);
//Serial.print("Run Time: ");
//Serial.print(millis() - currentTime);
//Serial.println("ms");
} }

Binary file not shown.

Binary file not shown.

View File

@@ -16,7 +16,9 @@ void EspInterface::begin() {
delay(100); delay(100);
display_obj.tft.println("Checking for ESP8266..."); #ifdef HAS_SCREEN
display_obj.tft.println("Checking for ESP8266...");
#endif
this->bootRunMode(); this->bootRunMode();
@@ -40,16 +42,20 @@ void EspInterface::begin() {
Serial.println("\nDisplay string: " + (String)display_string); Serial.println("\nDisplay string: " + (String)display_string);
if (display_string == "ESP8266 Pong") { if (display_string == "ESP8266 Pong") {
display_obj.tft.setTextColor(TFT_GREEN, TFT_BLACK); #ifdef HAS_SCREEN
display_obj.tft.println("ESP8266 Found!"); display_obj.tft.setTextColor(TFT_GREEN, TFT_BLACK);
display_obj.tft.setTextColor(TFT_CYAN, TFT_BLACK); display_obj.tft.println("ESP8266 Found!");
display_obj.tft.setTextColor(TFT_CYAN, TFT_BLACK);
#endif
Serial.println("ESP8266 Found!"); Serial.println("ESP8266 Found!");
this->supported = true; this->supported = true;
} }
else { else {
display_obj.tft.setTextColor(TFT_RED, TFT_BLACK); #ifdef HAS_SCREEN
display_obj.tft.println("ESP8266 Not Found"); display_obj.tft.setTextColor(TFT_RED, TFT_BLACK);
display_obj.tft.setTextColor(TFT_CYAN, TFT_BLACK); display_obj.tft.println("ESP8266 Not Found");
display_obj.tft.setTextColor(TFT_CYAN, TFT_BLACK);
#endif
} }
this->initTime = millis(); this->initTime = millis();
@@ -57,16 +63,17 @@ void EspInterface::begin() {
void EspInterface::RunUpdate() { void EspInterface::RunUpdate() {
this->bootProgramMode(); this->bootProgramMode();
#ifdef HAS_SCREEN
display_obj.tft.setTextWrap(true);
display_obj.tft.setFreeFont(NULL);
display_obj.tft.setCursor(0, 100);
display_obj.tft.setTextSize(1);
display_obj.tft.setTextColor(TFT_GREEN);
display_obj.tft.setTextWrap(true); display_obj.tft.println("Waiting for serial data...");
display_obj.tft.setFreeFont(NULL);
display_obj.tft.setCursor(0, 100); display_obj.tft.setTextColor(TFT_WHITE);
display_obj.tft.setTextSize(1); #endif
display_obj.tft.setTextColor(TFT_GREEN);
display_obj.tft.println("Waiting for serial data...");
display_obj.tft.setTextColor(TFT_WHITE);
} }
void EspInterface::bootProgramMode() { void EspInterface::bootProgramMode() {
@@ -103,7 +110,9 @@ void EspInterface::program() {
} }
if (Serial.available()) { if (Serial.available()) {
display_obj.tft.print("."); #ifdef HAS_SCREEN
display_obj.tft.print(".");
#endif
while (Serial.available()) { while (Serial.available()) {
MySerial.write((uint8_t)Serial.read()); MySerial.write((uint8_t)Serial.read());
} }

View File

@@ -1,14 +1,21 @@
#ifndef esp_interface_h #ifndef esp_interface_h
#define esp_interface_h #define esp_interface_h
#include "Display.h" #include "configs.h"
#ifdef HAS_SCREEN
#include "Display.h"
#endif
#include <HardwareSerial.h> #include <HardwareSerial.h>
#define ESP_RST 14 #define ESP_RST 14
#define ESP_ZERO 13 #define ESP_ZERO 13
#define BAUD 115200 #define BAUD 115200
extern Display display_obj; #ifdef HAS_SCREEN
extern Display display_obj;
#endif
class EspInterface { class EspInterface {
public: public:

179
esp32_marauder/lang_var.h Normal file
View File

@@ -0,0 +1,179 @@
#ifndef lang_var_h
#define lang_var_h
#include "configs.h"
//Starting window texts
PROGMEM const char text0_0[] = "Giving room for HardwareSerial...";
PROGMEM const char text0_1[] = "Started Serial";
PROGMEM const char text0_2[] = "Checked RAM";
PROGMEM const char text0_3[] = "Initialized SD Card";
PROGMEM const char text0_4[] = "Failed to Initialize SD Card";
PROGMEM const char text0_5[] = "Checked battery configuration";
PROGMEM const char text0_6[] = "Initialized temperature interface";
PROGMEM const char text0_7[] = "Initialized LED Interface";
PROGMEM const char text0_8[] = "Starting...";
//Single library (action) texts/Often used
PROGMEM const char text00[] = "Battery Level changed: ";
PROGMEM const char text01[] = "file closed";
PROGMEM const char text02[] = "Failed to open file '";
PROGMEM const char text03[] = "ON";
PROGMEM const char text04[] = "OFF";
PROGMEM const char text05[] = "Load";
PROGMEM const char text06[] = "Save As";
PROGMEM const char text07[] = "Exit";
PROGMEM const char text08[] = "Settings";
PROGMEM const char text09[] = "Back";
PROGMEM const char text10[] = "Channel:";
PROGMEM const char text11[] = "Touch screen to exit";
PROGMEM const char text12[] = "Cancel";
PROGMEM const char text13[] = "Save";
PROGMEM const char text14[] = "Yes";
PROGMEM const char text15[] = "Opening /update.bin...";
PROGMEM const char text16[] = "Close";
PROGMEM const char text17[] = "FAIL";
PROGMEM const char text18[] = "packets/sec: ";
//Menufunctions.cpp texts
PROGMEM const char text1_0[] = "SSID List";
PROGMEM const char text1_1[] = "Add SSIDs";
PROGMEM const char text1_2[] = "SSID: ";
PROGMEM const char text1_3[] = "Password:";
PROGMEM const char text1_4[] = "Setting disabled";
PROGMEM const char text1_5[] = "Setting on";
PROGMEM const char text1_6[] = "ESP32 Marauder ";
PROGMEM const char text1_7[] = "WiFi ";
PROGMEM const char text1_8[] = "Bad USB ";
PROGMEM const char text1_9[] = "Device ";
PROGMEM const char text1_10[] = "General Apps ";
PROGMEM const char text1_11[] = "Updating... ";
PROGMEM const char text1_12[] = "Select Method ";
PROGMEM const char text1_13[] = "Confirm Update ";
PROGMEM const char text1_14[] = "ESP8266 Update ";
PROGMEM const char text1_15[] = "Update Firmware ";
PROGMEM const char text1_16[] = "Language ";
PROGMEM const char text1_17[] = "Device Info ";
PROGMEM const char text1_18[] = "Settings ";
PROGMEM const char text1_19[] = "Bluetooth ";
PROGMEM const char text1_20[] = "WiFi Sniffers ";
PROGMEM const char text1_21[] = "WiFi Attacks ";
PROGMEM const char text1_22[] = "WiFi General ";
PROGMEM const char text1_23[] = "Bluetooth Sniffers ";
PROGMEM const char text1_24[] = "Bluetooth General ";
PROGMEM const char text1_25[] = "Shutdown WiFi ";
PROGMEM const char text1_26[] = "Shutdown BLE ";
PROGMEM const char text1_27[] = "Generate SSIDs ";
PROGMEM const char text1_28[] = "Clear SSIDs ";
PROGMEM const char text1_29[] = "Clear APs ";
PROGMEM const char text1_30[] = "Reboot";
PROGMEM const char text1_31[] = "Sniffers";
PROGMEM const char text1_32[] = "Attacks";
PROGMEM const char text1_33[] = "General";
PROGMEM const char text1_34[] = "Bluetooth Sniffer";
PROGMEM const char text1_35[] = "Detect Card Skimmers";
PROGMEM const char text1_36[] = "Test BadUSB";
PROGMEM const char text1_37[] = "Run Ducky Script";
PROGMEM const char text1_38[] = "Draw";
PROGMEM const char text1_39[] = "Web Update";
PROGMEM const char text1_40[] = "SD Update";
PROGMEM const char text1_41[] = "ESP8266 Update";
PROGMEM const char text1_42[] = "Probe Request Sniff";
PROGMEM const char text1_43[] = "Beacon Sniff";
PROGMEM const char text1_44[] = "Deauth Sniff";
PROGMEM const char text1_45[] = "Packet Monitor";
PROGMEM const char text1_46[] = "EAPOL/PMKID Scan";
PROGMEM const char text1_47[] = "Detect Pwnagotchi";
PROGMEM const char text1_48[] = "Detect Espressif";
PROGMEM const char text1_49[] = "Scan APs";
PROGMEM const char text1_50[] = "Beacon Spam List";
PROGMEM const char text1_51[] = "Beacon Spam Random";
PROGMEM const char text1_52[] = "Rick Roll Beacon";
PROGMEM const char text1_53[] = "Probe Req Flood";
PROGMEM const char text1_54[] = "Deauth Flood";
PROGMEM const char text1_55[] = "Join WiFi";
PROGMEM const char text1_56[] = "Select APs";
//SDInterface.cpp texts
PROGMEM const char text2_0[] = "Error, could not find update.bin";
PROGMEM const char text2_1[] = "Starting SD Update...";
PROGMEM const char text2_2[] = "Error, update.bin is empty";
PROGMEM const char text2_3[] = "\nRebooting...\n";
PROGMEM const char text2_4[] = "Could not load update.bin from /";
PROGMEM const char text2_5[] = "File size: ";
PROGMEM const char text2_6[] = "Writing file to partition...";
PROGMEM const char text2_7[] = "Written: ";
PROGMEM const char text2_8[] = "Written only : ";
PROGMEM const char text2_9[] = ". Retry?";
PROGMEM const char text2_10[] = " successfully";
PROGMEM const char text2_11[] = "Update complete";
PROGMEM const char text2_12[] = "Update could not complete";
PROGMEM const char text2_13[] = "Error Occurred. Error #: ";
PROGMEM const char text2_14[] = "Not enough space to begin OTA";
//Web.cpp texts
PROGMEM const char text3_0[] = "Configuring update server...\n\n";
PROGMEM const char text3_1[] = "IP address: ";
PROGMEM const char text3_2[] = "Update: ";
PROGMEM const char text3_3[] = "Bytes complete: ";
PROGMEM const char text3_4[] = "Update Success: ";
PROGMEM const char text3_5[] = "\nCompleted update server setup";
//WiFiScan.cpp texts
PROGMEM const char text4_0[] = " RSSI: ";
PROGMEM const char text4_1[] = "Potential Skimmer: ";
PROGMEM const char text4_2[] = "Already Connected";
PROGMEM const char text4_3[] = "Failed to connect";
PROGMEM const char text4_4[] = "Connected";
PROGMEM const char text4_5[] = "Force PMKID";
PROGMEM const char text4_6[] = "Force Probe";
PROGMEM const char text4_7[] = "Save PCAP";
PROGMEM const char text4_8[] = "Probe Flood";
PROGMEM const char text4_9[] = "Clearing APs...";
PROGMEM const char text4_10[] = "APs Cleared: ";
PROGMEM const char text4_11[] = "Clearing SSIDs...";
PROGMEM const char text4_12[] = "SSIDs Cleared: ";
PROGMEM const char text4_13[] = "Generating SSIDs...";
PROGMEM const char text4_14[] = "SSIDs Generated: "; //Add spaces before to match : [15]
PROGMEM const char text4_15[] = " Total SSIDs: "; //Add spaces beforer to match : [14]
PROGMEM const char text4_16[] = "Shutting down WiFi...";
PROGMEM const char text4_17[] = "WiFi not currently initialized";
PROGMEM const char text4_18[] = "Shutting down BLE...";
PROGMEM const char text4_19[] = "BLE not currently initialized";
PROGMEM const char text4_20[] = " Firmware: Marauder"; //From 20 to 35 add spaces so : is in line like it is now
PROGMEM const char text4_21[] = " Version: ";
PROGMEM const char text4_22[] = " ESP-IDF: ";
PROGMEM const char text4_23[] = " WSL Bypass: enabled\n";
PROGMEM const char text4_24[] = " WSL Bypass: disabled\n";
PROGMEM const char text4_25[] = " Station MAC: ";
PROGMEM const char text4_26[] = " AP MAC: ";
PROGMEM const char text4_27[] = " ";
PROGMEM const char text4_28[] = " SD Card: Connected";
PROGMEM const char text4_29[] = " SD Card Size: ";
PROGMEM const char text4_30[] = " SD Card: Not Connected";
PROGMEM const char text4_31[] = " SD Card Size: 0";
PROGMEM const char text4_32[] = " IP5306 I2C: supported";
PROGMEM const char text4_33[] = " Battery Lvl: ";
PROGMEM const char text4_34[] = " IP5306 I2C: not supported";
PROGMEM const char text4_35[] = "Internal temp: ";
PROGMEM const char text4_36[] = " Detect Espressif ";
PROGMEM const char text4_37[] = " Detect Pwnagotchi ";
PROGMEM const char text4_38[] = " Beacon Sniffer ";
PROGMEM const char text4_39[] = " Deauthentication Sniffer ";
PROGMEM const char text4_40[] = " Probe Request Sniffer ";
PROGMEM const char text4_41[] = " Bluetooth Sniff ";
PROGMEM const char text4_42[] = " Detect Card Skimmers ";
PROGMEM const char text4_43[] = "Scanning for\nBluetooth-enabled skimmers\nHC-03, HC-05, and HC-06...";
PROGMEM const char text4_44[] = " AP Scan ";
//Making tables
PROGMEM const char *text_table0[] = {text0_0,text0_1, text0_2, text0_3, text0_4, text0_5, text0_6, text0_7, text0_8};
PROGMEM const char *text_table1[] = {text1_0,text1_1,text1_2,text1_3,text1_4,text1_5,text1_6,text1_7,text1_8,text1_9,text1_10,text1_11,text1_12,text1_13,text1_14,text1_15,text1_16,text1_17,text1_18,text1_19,text1_20,text1_21,text1_22,text1_23,text1_24,text1_25,text1_26,text1_27,text1_28,text1_29,text1_30,text1_31,text1_32,text1_33,text1_34,text1_35,text1_36,text1_37,text1_38,text1_39,text1_40,text1_41,text1_42,text1_43,text1_44,text1_45,text1_46,text1_47,text1_48,text1_49,text1_50,text1_51,text1_52,text1_53,text1_54,text1_55,text1_56};
PROGMEM const char *text_table2[] = {text2_0,text2_1,text2_2,text2_3,text2_4,text2_5,text2_6,text2_7,text2_8,text2_9,text2_10,text2_11,text2_12,text2_13,text2_14};
PROGMEM const char *text_table3[] = {text3_0,text3_1,text3_2,text3_3,text3_4,text3_5};
PROGMEM const char *text_table4[] = {text4_0,text4_1,text4_2,text4_3,text4_4,text4_5,text4_6,text4_7,text4_8,text4_9,text4_10,text4_11,text4_12,text4_13,text4_14,text4_15,text4_16,text4_17,text4_18,text4_19,text4_20,text4_21,text4_22,text4_23,text4_24,text4_25,text4_26,text4_27,text4_28,text4_29,text4_30,text4_31,text4_32,text4_33,text4_34,text4_35,text4_36,text4_37,text4_38,text4_39,text4_40,text4_41,text4_42,text4_43,text4_44};
#endif

304
esp32_marauder/settings.cpp Normal file
View File

@@ -0,0 +1,304 @@
#include "settings.h"
String Settings::getSettingsString() {
return this->json_settings_string;
}
bool Settings::begin() {
if(!SPIFFS.begin(FORMAT_SPIFFS_IF_FAILED)){
Serial.println("Settings SPIFFS Mount Failed");
return false;
}
File settingsFile;
//SPIFFS.remove("/settings.json"); // NEED TO REMOVE THIS LINE
if (SPIFFS.exists("/settings.json")) {
settingsFile = SPIFFS.open("/settings.json", FILE_READ);
if (!settingsFile) {
settingsFile.close();
Serial.println(F("Could not find settings file"));
if (this->createDefaultSettings(SPIFFS))
return true;
else
return false;
}
}
else {
Serial.println("Settings file does not exist");
if (this->createDefaultSettings(SPIFFS))
return true;
else
return false;
}
String json_string;
DynamicJsonDocument jsonBuffer(1024);
DeserializationError error = deserializeJson(jsonBuffer, settingsFile);
serializeJson(jsonBuffer, json_string);
Serial.println("Settings: " + (String)json_string + "\n");
this->printJsonSettings(json_string);
this->json_settings_string = json_string;
return true;
}
template <typename T>
T Settings::loadSetting(String key) {}
// Get type int settings
template<>
int Settings::loadSetting<int>(String key) {
DynamicJsonDocument json(1024); // ArduinoJson v6
if (deserializeJson(json, this->json_settings_string)) {
Serial.println("\nCould not parse json");
}
for (int i = 0; i < json["Settings"].size(); i++) {
if (json["Settings"][i]["name"].as<String>() == key)
return json["Settings"][i]["value"];
}
return 0;
}
// Get type string settings
template<>
String Settings::loadSetting<String>(String key) {
//return this->json_settings_string;
DynamicJsonDocument json(1024); // ArduinoJson v6
if (deserializeJson(json, this->json_settings_string)) {
Serial.println("\nCould not parse json");
}
for (int i = 0; i < json["Settings"].size(); i++) {
if (json["Settings"][i]["name"].as<String>() == key)
return json["Settings"][i]["value"];
}
return "";
}
// Get type bool settings
template<>
bool Settings::loadSetting<bool>(String key) {
DynamicJsonDocument json(1024); // ArduinoJson v6
if (deserializeJson(json, this->json_settings_string)) {
Serial.println("\nCould not parse json");
}
for (int i = 0; i < json["Settings"].size(); i++) {
if (json["Settings"][i]["name"].as<String>() == key)
return json["Settings"][i]["value"];
}
return false;
}
//Get type uint8_t settings
template<>
uint8_t Settings::loadSetting<uint8_t>(String key) {
DynamicJsonDocument json(1024); // ArduinoJson v6
if (deserializeJson(json, this->json_settings_string)) {
Serial.println("\nCould not parse json");
}
for (int i = 0; i < json["Settings"].size(); i++) {
if (json["Settings"][i]["name"].as<String>() == key)
return json["Settings"][i]["value"];
}
return 0;
}
template <typename T>
T Settings::saveSetting(String key, bool value) {}
template<>
bool Settings::saveSetting<bool>(String key, bool value) {
DynamicJsonDocument json(1024); // ArduinoJson v6
if (deserializeJson(json, this->json_settings_string)) {
Serial.println("\nCould not parse json");
}
String settings_string;
for (int i = 0; i < json["Settings"].size(); i++) {
if (json["Settings"][i]["name"].as<String>() == key) {
json["Settings"][i]["value"] = value;
Serial.println("Saving setting...");
File settingsFile = SPIFFS.open("/settings.json", FILE_WRITE);
if (!settingsFile) {
Serial.println(F("Failed to create settings file"));
return false;
}
if (serializeJson(json, settingsFile) == 0) {
Serial.println(F("Failed to write to file"));
}
if (serializeJson(json, settings_string) == 0) {
Serial.println(F("Failed to write to string"));
}
// Close the file
settingsFile.close();
this->json_settings_string = settings_string;
this->printJsonSettings(settings_string);
return true;
}
}
}
bool Settings::toggleSetting(String key) {
DynamicJsonDocument json(1024); // ArduinoJson v6
if (deserializeJson(json, this->json_settings_string)) {
Serial.println("\nCould not parse json");
}
for (int i = 0; i < json["Settings"].size(); i++) {
if (json["Settings"][i]["name"].as<String>() == key) {
if (json["Settings"][i]["value"]) {
saveSetting<bool>(key, false);
Serial.println("Setting value to false");
return false;
}
else {
saveSetting<bool>(key, true);
Serial.println("Setting value to true");
return true;
}
return false;
}
}
}
String Settings::setting_index_to_name(int i) {
DynamicJsonDocument json(1024); // ArduinoJson v6
if (deserializeJson(json, this->json_settings_string)) {
Serial.println("\nCould not parse json");
}
return json["Settings"][i]["name"];
}
int Settings::getNumberSettings() {
DynamicJsonDocument json(1024); // ArduinoJson v6
if (deserializeJson(json, this->json_settings_string)) {
Serial.println("\nCould not parse json");
}
return json["Settings"].size();
}
String Settings::getSettingType(String key) {
DynamicJsonDocument json(1024); // ArduinoJson v6
if (deserializeJson(json, this->json_settings_string)) {
Serial.println("\nCould not parse json");
}
for (int i = 0; i < json["Settings"].size(); i++) {
if (json["Settings"][i]["name"].as<String>() == key)
return json["Settings"][i]["type"];
}
}
void Settings::printJsonSettings(String json_string) {
DynamicJsonDocument json(1024); // ArduinoJson v6
if (deserializeJson(json, json_string)) {
Serial.println("\nCould not parse json");
}
Serial.println("Settings\n----------------------------------------------");
for (int i = 0; i < json["Settings"].size(); i++) {
Serial.println("Name: " + json["Settings"][i]["name"].as<String>());
Serial.println("Type: " + json["Settings"][i]["type"].as<String>());
Serial.println("Value: " + json["Settings"][i]["value"].as<String>());
Serial.println("----------------------------------------------");
}
}
bool Settings::createDefaultSettings(fs::FS &fs) {
Serial.println(F("Creating default settings file: settings.json"));
File settingsFile = fs.open("/settings.json", FILE_WRITE);
if (!settingsFile) {
Serial.println(F("Failed to create settings file"));
return false;
}
DynamicJsonDocument jsonBuffer(1024);
String settings_string;
//jsonBuffer["Settings"][0]["name"] = "Channel";
//jsonBuffer["Settings"][0]["type"] = "uint8_t";
//jsonBuffer["Settings"][0]["value"] = 11;
//jsonBuffer["Settings"][0]["range"]["min"] = 1;
//jsonBuffer["Settings"][0]["range"]["max"] = 14;
//jsonBuffer["Settings"][1]["name"] = "Channel Hop Delay";
//jsonBuffer["Settings"][1]["type"] = "int";
//jsonBuffer["Settings"][1]["value"] = 1;
//jsonBuffer["Settings"][1]["range"]["min"] = 1;
//jsonBuffer["Settings"][1]["range"]["max"] = 10;
jsonBuffer["Settings"][0]["name"] = "Force PMKID";
jsonBuffer["Settings"][0]["type"] = "bool";
jsonBuffer["Settings"][0]["value"] = true;
jsonBuffer["Settings"][0]["range"]["min"] = false;
jsonBuffer["Settings"][0]["range"]["max"] = true;
jsonBuffer["Settings"][1]["name"] = "Force Probe";
jsonBuffer["Settings"][1]["type"] = "bool";
jsonBuffer["Settings"][1]["value"] = true;
jsonBuffer["Settings"][1]["range"]["min"] = false;
jsonBuffer["Settings"][1]["range"]["max"] = true;
jsonBuffer["Settings"][2]["name"] = "Save PCAP";
jsonBuffer["Settings"][2]["type"] = "bool";
jsonBuffer["Settings"][2]["value"] = true;
jsonBuffer["Settings"][2]["range"]["min"] = false;
jsonBuffer["Settings"][2]["range"]["max"] = true;
//jsonBuffer.printTo(settingsFile);
if (serializeJson(jsonBuffer, settingsFile) == 0) {
Serial.println(F("Failed to write to file"));
}
if (serializeJson(jsonBuffer, settings_string) == 0) {
Serial.println(F("Failed to write to string"));
}
// Close the file
settingsFile.close();
this->json_settings_string = settings_string;
this->printJsonSettings(settings_string);
return true;
}
void Settings::main(uint32_t currentTime) {
}

56
esp32_marauder/settings.h Normal file
View File

@@ -0,0 +1,56 @@
#ifndef Settings_h
#define Settings_h
#include "configs.h"
#include "SPIFFS.h"
#include <FS.h>
#include <ArduinoJson.h>
#define FORMAT_SPIFFS_IF_FAILED true
#ifdef HAS_SCREEN
#include "Display.h"
extern Display display_obj;
#endif
class Settings {
private:
String json_settings_string;
void printJsonSettings(String json_string);
bool createDefaultSettings(fs::FS &fs);
public:
bool begin();
template <typename T>
T loadSetting(String name);
template <typename T>
T saveSetting(String key, bool value);
bool toggleSetting(String key);
String getSettingType(String key);
String setting_index_to_name(int i);
int getNumberSettings();
//template<>
//int loadSetting<int>(String key);
//template<>
//String loadSetting<String>(String key);
//template<>
//bool loadSetting<bool>(String key);
//template<>
//uint8_t loadSetting<uint8_t>(String key);
String getSettingsString();
void main(uint32_t currentTime);
};
#endif

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 113 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 286 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 509 KiB