mirror of
https://github.com/justcallmekoko/ESP32Marauder.git
synced 2025-12-05 20:40:25 -08:00
Merge pull request #995 from justcallmekoko/NimBLE-2.0
Add Bluetooth to C5 hardware
This commit is contained in:
@@ -308,11 +308,11 @@ void CommandLine::runCommand(String input) {
|
||||
wifi_scan_obj.StartScan(WIFI_SCAN_OFF);
|
||||
|
||||
if(old_scan_mode == WIFI_SCAN_GPS_NMEA)
|
||||
Serial.println("END OF NMEA STREAM");
|
||||
Serial.println(F("END OF NMEA STREAM"));
|
||||
else if(old_scan_mode == WIFI_SCAN_GPS_DATA)
|
||||
Serial.println("Stopping GPS data updates");
|
||||
Serial.println(F("Stopping GPS data updates"));
|
||||
else
|
||||
Serial.println("Stopping WiFi tran/recv");
|
||||
Serial.println(F("Stopping WiFi tran/recv"));
|
||||
|
||||
// If we don't do this, the text and button coordinates will be off
|
||||
#ifdef HAS_SCREEN
|
||||
@@ -375,7 +375,7 @@ void CommandLine::runCommand(String input) {
|
||||
Serial.println(gps_obj.getNmeaNotparsed());
|
||||
}
|
||||
else
|
||||
Serial.println("You did not provide a valid argument");
|
||||
Serial.println(F("You did not provide a valid argument"));
|
||||
}
|
||||
else if(nmea_arg != -1){
|
||||
String nmea_type = cmd_args.get(nmea_arg + 1);
|
||||
@@ -391,7 +391,7 @@ void CommandLine::runCommand(String input) {
|
||||
Serial.println("GPS Output Type Set To: " + nmea_type);
|
||||
}
|
||||
else
|
||||
Serial.println("You did not provide a valid argument");
|
||||
Serial.println(F("You did not provide a valid argument"));
|
||||
}
|
||||
else if (track_arg != -1) {
|
||||
wifi_scan_obj.currentScanMode = GPS_TRACKER;
|
||||
@@ -401,9 +401,9 @@ void CommandLine::runCommand(String input) {
|
||||
wifi_scan_obj.StartScan(GPS_TRACKER, TFT_CYAN);
|
||||
}
|
||||
else if(cmd_args.size()>1)
|
||||
Serial.println("You did not provide a valid flag");
|
||||
Serial.println(F("You did not provide a valid flag"));
|
||||
else
|
||||
Serial.println("You did not provide an argument");
|
||||
Serial.println(F("You did not provide an argument"));
|
||||
}
|
||||
#endif
|
||||
}
|
||||
@@ -413,7 +413,7 @@ void CommandLine::runCommand(String input) {
|
||||
#ifdef HAS_SCREEN
|
||||
menu_function_obj.changeMenu(&menu_function_obj.gpsInfoMenu);
|
||||
#endif
|
||||
Serial.println("NMEA STREAM FOLLOWS");
|
||||
Serial.println(F("NMEA STREAM FOLLOWS"));
|
||||
wifi_scan_obj.currentScanMode = WIFI_SCAN_GPS_NMEA;
|
||||
wifi_scan_obj.StartScan(WIFI_SCAN_GPS_NMEA, TFT_CYAN);
|
||||
}
|
||||
@@ -444,7 +444,7 @@ void CommandLine::runCommand(String input) {
|
||||
}
|
||||
}
|
||||
#else
|
||||
Serial.println("This hardware does not support neopixel");
|
||||
Serial.println(F("This hardware does not support neopixel"));
|
||||
#endif
|
||||
}
|
||||
// ls command
|
||||
@@ -453,9 +453,9 @@ void CommandLine::runCommand(String input) {
|
||||
if (cmd_args.size() > 1)
|
||||
sd_obj.listDir(cmd_args.get(1));
|
||||
else
|
||||
Serial.println("You did not provide a dir to list");
|
||||
Serial.println(F("You did not provide a dir to list"));
|
||||
#else
|
||||
Serial.println("SD support disabled, cannot use command");
|
||||
Serial.println(F("SD support disabled, cannot use command"));
|
||||
return;
|
||||
#endif
|
||||
}
|
||||
@@ -524,7 +524,7 @@ void CommandLine::runCommand(String input) {
|
||||
else if (da_sw != -1)
|
||||
result = settings_obj.saveSetting<bool>(setting_name, false);
|
||||
else {
|
||||
Serial.println("You did not properly enable/disable this setting.");
|
||||
Serial.println(F("You did not properly enable/disable this setting."));
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -536,7 +536,7 @@ void CommandLine::runCommand(String input) {
|
||||
}
|
||||
|
||||
else if (cmd_args.get(0) == REBOOT_CMD) {
|
||||
Serial.println("Rebooting...");
|
||||
Serial.println(F("Rebooting..."));
|
||||
ESP.restart();
|
||||
}
|
||||
|
||||
@@ -569,8 +569,25 @@ void CommandLine::runCommand(String input) {
|
||||
#ifdef HAS_GPS
|
||||
if (gps_obj.getGpsModuleStatus()) {
|
||||
int sta_sw = this->argSearch(&cmd_args, "-s");
|
||||
int flk_sw = this->argSearch(&cmd_args, "-f");
|
||||
|
||||
if (sta_sw == -1) {
|
||||
if (flk_sw == -1) {
|
||||
Serial.println("Starting Flock Wardrive. Stop with " + (String)STOPSCAN_CMD);
|
||||
#ifdef HAS_SCREEN
|
||||
display_obj.clearScreen();
|
||||
menu_function_obj.drawStatusBar();
|
||||
#endif
|
||||
wifi_scan_obj.StartScan(BT_SCAN_FLOCK_WARDRIVE, TFT_GREEN);
|
||||
}
|
||||
else if (sta_sw != -1) {
|
||||
Serial.println("Starting Station Wardrive. Stop with " + (String)STOPSCAN_CMD);
|
||||
#ifdef HAS_SCREEN
|
||||
display_obj.clearScreen();
|
||||
menu_function_obj.drawStatusBar();
|
||||
#endif
|
||||
wifi_scan_obj.StartScan(WIFI_SCAN_STATION_WAR_DRIVE, TFT_GREEN);
|
||||
}
|
||||
else {
|
||||
Serial.println("Starting Wardrive. Stop with " + (String)STOPSCAN_CMD);
|
||||
#ifdef HAS_SCREEN
|
||||
display_obj.clearScreen();
|
||||
@@ -578,18 +595,11 @@ void CommandLine::runCommand(String input) {
|
||||
#endif
|
||||
wifi_scan_obj.StartScan(WIFI_SCAN_WAR_DRIVE, TFT_GREEN);
|
||||
}
|
||||
else {Serial.println("Starting Station Wardrive. Stop with " + (String)STOPSCAN_CMD);
|
||||
#ifdef HAS_SCREEN
|
||||
display_obj.clearScreen();
|
||||
menu_function_obj.drawStatusBar();
|
||||
#endif
|
||||
wifi_scan_obj.StartScan(WIFI_SCAN_STATION_WAR_DRIVE, TFT_GREEN);
|
||||
}
|
||||
}
|
||||
else
|
||||
Serial.println("GPS Module not detected");
|
||||
Serial.println(F("GPS Module not detected"));
|
||||
#else
|
||||
Serial.println("GPS not supported");
|
||||
Serial.println(F("GPS not supported"));
|
||||
#endif
|
||||
}
|
||||
// Karma
|
||||
@@ -597,14 +607,14 @@ void CommandLine::runCommand(String input) {
|
||||
int pr_sw = this->argSearch(&cmd_args, "-p");
|
||||
|
||||
if (pr_sw == -1) {
|
||||
Serial.println("You did not provide a target index");
|
||||
Serial.println(F("You did not provide a target index"));
|
||||
return;
|
||||
}
|
||||
|
||||
int pr_index = cmd_args.get(pr_sw + 1).toInt();
|
||||
|
||||
if ((pr_index < 0) || (pr_index > probe_req_ssids->size() - 1)) {
|
||||
Serial.println("The provided index was not in range");
|
||||
Serial.println(F("The provided index was not in range"));
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -618,7 +628,7 @@ void CommandLine::runCommand(String input) {
|
||||
wifi_scan_obj.setMac();
|
||||
}
|
||||
else {
|
||||
Serial.println("Unable to set AP ESSID");
|
||||
Serial.println(F("Unable to set AP ESSID"));
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -839,14 +849,14 @@ void CommandLine::runCommand(String input) {
|
||||
int ap_sw = this->argSearch(&cmd_args, "-a"); // APs
|
||||
|
||||
if (ap_sw == -1) {
|
||||
Serial.println("You did not provide a target index");
|
||||
Serial.println(F("You did not provide a target index"));
|
||||
return;
|
||||
}
|
||||
|
||||
int ap_index = cmd_args.get(ap_sw + 1).toInt();
|
||||
|
||||
if ((ap_index < 0) || (ap_index > access_points->size() - 1)) {
|
||||
Serial.println("The provided index was not in range");
|
||||
Serial.println(F("The provided index was not in range"));
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -865,14 +875,14 @@ void CommandLine::runCommand(String input) {
|
||||
int cl_sw = this->argSearch(&cmd_args, "-s"); // Stations
|
||||
|
||||
if (cl_sw == -1) {
|
||||
Serial.println("You did not provide a target index");
|
||||
Serial.println(F("You did not provide a target index"));
|
||||
return;
|
||||
}
|
||||
|
||||
int sta_index = cmd_args.get(cl_sw + 1).toInt();
|
||||
|
||||
if ((sta_index < 0) || (sta_index > stations->size() - 1)) {
|
||||
Serial.println("The provided index was not in range");
|
||||
Serial.println(F("The provided index was not in range"));
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -900,7 +910,7 @@ void CommandLine::runCommand(String input) {
|
||||
int targ_sw = this->argSearch(&cmd_args, "-c");
|
||||
|
||||
if (attack_type_switch == -1) {
|
||||
Serial.println("You must specify an attack type");
|
||||
Serial.println(F("You must specify an attack type"));
|
||||
return;
|
||||
}
|
||||
else {
|
||||
@@ -911,7 +921,7 @@ void CommandLine::runCommand(String input) {
|
||||
if (attack_type == ATTACK_TYPE_DEAUTH) {
|
||||
// Default to broadcast
|
||||
if ((dst_addr_sw == -1) && (targ_sw == -1)) {
|
||||
Serial.println("Sending to broadcast...");
|
||||
Serial.println(F("Sending to broadcast..."));
|
||||
wifi_scan_obj.dst_mac = "ff:ff:ff:ff:ff:ff";
|
||||
}
|
||||
// Dest addr specified
|
||||
@@ -921,7 +931,7 @@ void CommandLine::runCommand(String input) {
|
||||
}
|
||||
// Station list specified
|
||||
else if (targ_sw != -1)
|
||||
Serial.println("Sending to Station list");
|
||||
Serial.println(F("Sending to Station list"));
|
||||
|
||||
// Source addr not specified
|
||||
if (src_addr_sw == -1) {
|
||||
@@ -1066,7 +1076,7 @@ void CommandLine::runCommand(String input) {
|
||||
wifi_scan_obj.StartScan(WIFI_ATTACK_FUNNY_BEACON, TFT_CYAN);
|
||||
}
|
||||
else {
|
||||
Serial.println("Attack type not properly defined");
|
||||
Serial.println(F("Attack type not properly defined"));
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -1120,7 +1130,7 @@ void CommandLine::runCommand(String input) {
|
||||
wifi_scan_obj.StartScan(BT_SCAN_ALL, TFT_GREEN);
|
||||
}
|
||||
#else
|
||||
Serial.println("Bluetooth not supported");
|
||||
Serial.println(F("Bluetooth not supported"));
|
||||
#endif
|
||||
}
|
||||
else if (cmd_args.get(0) == BT_SPOOFAT_CMD) {
|
||||
@@ -1165,7 +1175,7 @@ void CommandLine::runCommand(String input) {
|
||||
#endif
|
||||
wifi_scan_obj.StartScan(BT_ATTACK_SOUR_APPLE, TFT_GREEN);
|
||||
#else
|
||||
Serial.println("Bluetooth not supported");
|
||||
Serial.println(F("Bluetooth not supported"));
|
||||
#endif
|
||||
}
|
||||
else if (bt_type == "windows") {
|
||||
@@ -1177,7 +1187,7 @@ void CommandLine::runCommand(String input) {
|
||||
#endif
|
||||
wifi_scan_obj.StartScan(BT_ATTACK_SWIFTPAIR_SPAM, TFT_CYAN);
|
||||
#else
|
||||
Serial.println("Bluetooth not supported");
|
||||
Serial.println(F("Bluetooth not supported"));
|
||||
#endif
|
||||
}
|
||||
else if (bt_type == "samsung") {
|
||||
@@ -1189,7 +1199,7 @@ void CommandLine::runCommand(String input) {
|
||||
#endif
|
||||
wifi_scan_obj.StartScan(BT_ATTACK_SAMSUNG_SPAM, TFT_CYAN);
|
||||
#else
|
||||
Serial.println("Bluetooth not supported");
|
||||
Serial.println(F("Bluetooth not supported"));
|
||||
#endif
|
||||
}
|
||||
else if (bt_type == "google") {
|
||||
@@ -1201,7 +1211,7 @@ void CommandLine::runCommand(String input) {
|
||||
#endif
|
||||
wifi_scan_obj.StartScan(BT_ATTACK_GOOGLE_SPAM, TFT_CYAN);
|
||||
#else
|
||||
Serial.println("Bluetooth not supported");
|
||||
Serial.println(F("Bluetooth not supported"));
|
||||
#endif
|
||||
}
|
||||
else if (bt_type == "flipper") {
|
||||
@@ -1213,7 +1223,7 @@ void CommandLine::runCommand(String input) {
|
||||
#endif
|
||||
wifi_scan_obj.StartScan(BT_ATTACK_FLIPPER_SPAM, TFT_ORANGE);
|
||||
#else
|
||||
Serial.println("Bluetooth not supported");
|
||||
Serial.println(F("Bluetooth not supported"));
|
||||
#endif
|
||||
}
|
||||
else if (bt_type == "all") {
|
||||
@@ -1225,11 +1235,11 @@ void CommandLine::runCommand(String input) {
|
||||
#endif
|
||||
wifi_scan_obj.StartScan(BT_ATTACK_SPAM_ALL, TFT_MAGENTA);
|
||||
#else
|
||||
Serial.println("Bluetooth not supported");
|
||||
Serial.println(F("Bluetooth not supported"));
|
||||
#endif
|
||||
}
|
||||
else {
|
||||
Serial.println("You did not specify a correct spam type");
|
||||
Serial.println(F("You did not specify a correct spam type"));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1257,12 +1267,12 @@ void CommandLine::runCommand(String input) {
|
||||
}
|
||||
}
|
||||
else
|
||||
Serial.println("GPS Module not detected");
|
||||
Serial.println(F("GPS Module not detected"));
|
||||
#else
|
||||
Serial.println("GPS not supported");
|
||||
Serial.println(F("GPS not supported"));
|
||||
#endif
|
||||
#else
|
||||
Serial.println("Bluetooth not supported");
|
||||
Serial.println(F("Bluetooth not supported"));
|
||||
#endif
|
||||
|
||||
}
|
||||
@@ -1276,7 +1286,7 @@ void CommandLine::runCommand(String input) {
|
||||
#endif
|
||||
wifi_scan_obj.StartScan(BT_SCAN_SKIMMERS, TFT_MAGENTA);
|
||||
#else
|
||||
Serial.println("Bluetooth not supported");
|
||||
Serial.println(F("Bluetooth not supported"));
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -1298,13 +1308,13 @@ void CommandLine::runCommand(String input) {
|
||||
if (sd_sw != -1) {
|
||||
#ifdef HAS_SD
|
||||
if (!sd_obj.supported) {
|
||||
Serial.println("SD card is not connected. Cannot perform SD Update");
|
||||
Serial.println(F("SD card is not connected. Cannot perform SD Update"));
|
||||
return;
|
||||
}
|
||||
wifi_scan_obj.currentScanMode = OTA_UPDATE;
|
||||
sd_obj.runUpdate();
|
||||
#else
|
||||
Serial.println("SD card support disabled. Cannot perform SD Update");
|
||||
Serial.println(F("SD card support disabled. Cannot perform SD Update"));
|
||||
return;
|
||||
#endif
|
||||
}
|
||||
@@ -1323,12 +1333,14 @@ void CommandLine::runCommand(String input) {
|
||||
}
|
||||
|
||||
if (cmd_args.get(0) == ARP_SCAN_CMD) {
|
||||
#ifndef HAS_DUAL_BAND
|
||||
Serial.println("Starting ARP Scan. Stop with " + (String)STOPSCAN_CMD);
|
||||
#ifdef HAS_SCREEN
|
||||
display_obj.clearScreen();
|
||||
menu_function_obj.drawStatusBar();
|
||||
#endif
|
||||
wifi_scan_obj.StartScan(WIFI_ARP_SCAN, TFT_CYAN);
|
||||
#endif
|
||||
}
|
||||
|
||||
// GPS POI
|
||||
@@ -1376,7 +1388,7 @@ void CommandLine::runCommand(String input) {
|
||||
#endif
|
||||
}
|
||||
#else
|
||||
Serial.println("Your hardware doesn't have GPS, silly");
|
||||
Serial.println(F("Your hardware doesn't have GPS, silly"));
|
||||
return;
|
||||
#endif
|
||||
}
|
||||
@@ -1406,7 +1418,7 @@ void CommandLine::runCommand(String input) {
|
||||
}
|
||||
}
|
||||
else {
|
||||
Serial.println("The IP index specified is out of range");
|
||||
Serial.println(F("The IP index specified is out of range"));
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -1438,12 +1450,12 @@ void CommandLine::runCommand(String input) {
|
||||
wifi_scan_obj.StartScan(target_mode, TFT_CYAN);
|
||||
}
|
||||
else {
|
||||
Serial.println("You did not specify a supported service");
|
||||
Serial.println(F("You did not specify a supported service"));
|
||||
return;
|
||||
}
|
||||
}
|
||||
else {
|
||||
Serial.println("You did not specify an IP index");
|
||||
Serial.println(F("You did not specify an IP index"));
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -1525,7 +1537,7 @@ void CommandLine::runCommand(String input) {
|
||||
}
|
||||
}
|
||||
else {
|
||||
Serial.println("You did not specify which list to show");
|
||||
Serial.println(F("You did not specify which list to show"));
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -1573,11 +1585,11 @@ void CommandLine::runCommand(String input) {
|
||||
#endif
|
||||
}
|
||||
else {
|
||||
Serial.println("There are no saved WiFi credentials");
|
||||
Serial.println(F("There are no saved WiFi credentials"));
|
||||
}
|
||||
}
|
||||
else {
|
||||
Serial.println("You did not provide the proper args");
|
||||
Serial.println(F("You did not provide the proper args"));
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -1747,7 +1759,7 @@ void CommandLine::runCommand(String input) {
|
||||
this->showCounts(count_selected, count_unselected);
|
||||
}
|
||||
else {
|
||||
Serial.println("You did not specify which list to select from");
|
||||
Serial.println(F("You did not specify which list to select from"));
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -1806,7 +1818,7 @@ void CommandLine::runCommand(String input) {
|
||||
wifi_scan_obj.addSSID(essid);
|
||||
}
|
||||
else {
|
||||
Serial.println("You did not specify how to add SSIDs");
|
||||
Serial.println(F("You did not specify how to add SSIDs"));
|
||||
}
|
||||
}
|
||||
// Remove SSID
|
||||
@@ -1819,7 +1831,7 @@ void CommandLine::runCommand(String input) {
|
||||
ssids->remove(index);
|
||||
}
|
||||
else {
|
||||
Serial.println("You did not specify whether to add or remove SSIDs");
|
||||
Serial.println(F("You did not specify whether to add or remove SSIDs"));
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -148,7 +148,7 @@ const char PROGMEM HELP_SNIFF_ESP_CMD[] = "sniffesp";
|
||||
const char PROGMEM HELP_SNIFF_DEAUTH_CMD[] = "sniffdeauth";
|
||||
const char PROGMEM HELP_SNIFF_PMKID_CMD[] = "sniffpmkid [-c <channel>][-d][-l]";
|
||||
const char PROGMEM HELP_STOPSCAN_CMD[] = "stopscan [-f]";
|
||||
const char PROGMEM HELP_WARDRIVE_CMD[] = "wardrive [-s]";
|
||||
const char PROGMEM HELP_WARDRIVE_CMD[] = "wardrive [-s/-f]";
|
||||
const char PROGMEM HELP_PING_CMD[] = "pingscan";
|
||||
const char PROGMEM HELP_PORT_SCAN_CMD[] = "portscan [-a -t <ip index>]/[-s <ssh/telnet/dns/http/smtp/https/rdp>]";
|
||||
const char PROGMEM HELP_ARP_SCAN_CMD[] = "arpscan [-f]";
|
||||
|
||||
@@ -1045,9 +1045,9 @@ void Display::buildBanner(String msg, int xpos)
|
||||
|
||||
void Display::main(uint8_t scan_mode)
|
||||
{
|
||||
if ((scan_mode == LV_JOIN_WIFI) ||
|
||||
/*if ((scan_mode == LV_JOIN_WIFI) ||
|
||||
(scan_mode == LV_ADD_SSID))
|
||||
lv_task_handler();
|
||||
lv_task_handler();*/
|
||||
return;
|
||||
}
|
||||
// End SPIFFS_functions
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
//#include <JPEGDecoder.h>
|
||||
#include <LinkedList.h>
|
||||
#include <SPI.h>
|
||||
#include <lvgl.h>
|
||||
//#include <lvgl.h>
|
||||
#include <Ticker.h>
|
||||
#include "SPIFFS.h"
|
||||
#include "Assets.h"
|
||||
|
||||
@@ -61,9 +61,9 @@ void EvilPortal::setupServer() {
|
||||
#ifndef HAS_PSRAM
|
||||
server.on("/", HTTP_GET, [this](AsyncWebServerRequest *request) {
|
||||
request->send_P(200, "text/html", index_html);
|
||||
Serial.println("client connected");
|
||||
Serial.println(F("client connected"));
|
||||
#ifdef HAS_SCREEN
|
||||
this->sendToDisplay("Client connected to server");
|
||||
this->sendToDisplay(F("Client connected to server"));
|
||||
#endif
|
||||
});
|
||||
#else
|
||||
@@ -71,7 +71,7 @@ void EvilPortal::setupServer() {
|
||||
request->send(200, "text/html", index_html);
|
||||
Serial.println("client connected");
|
||||
#ifdef HAS_SCREEN
|
||||
this->sendToDisplay("Client connected to server");
|
||||
this->sendToDisplay(F("Client connected to server"));
|
||||
#endif
|
||||
});
|
||||
#endif
|
||||
@@ -144,10 +144,10 @@ void EvilPortal::setHtmlFromSerial() {
|
||||
|
||||
bool EvilPortal::setHtml() {
|
||||
if (this->using_serial_html) {
|
||||
Serial.println("html previously set");
|
||||
Serial.println(F("html previously set"));
|
||||
return true;
|
||||
}
|
||||
Serial.println("Setting HTML...");
|
||||
Serial.println(F("Setting HTML..."));
|
||||
#ifdef HAS_SD
|
||||
File html_file = sd_obj.getFile("/" + this->target_html_name);
|
||||
#else
|
||||
@@ -156,7 +156,7 @@ bool EvilPortal::setHtml() {
|
||||
if (!html_file) {
|
||||
#ifdef HAS_SCREEN
|
||||
this->sendToDisplay("Could not find /" + this->target_html_name);
|
||||
this->sendToDisplay("Touch to exit...");
|
||||
this->sendToDisplay(F("Touch to exit..."));
|
||||
#endif
|
||||
Serial.println("Could not find /" + this->target_html_name + ". Use stopscan...");
|
||||
return false;
|
||||
@@ -164,9 +164,9 @@ bool EvilPortal::setHtml() {
|
||||
else {
|
||||
if (html_file.size() > MAX_HTML_SIZE) {
|
||||
#ifdef HAS_SCREEN
|
||||
this->sendToDisplay("The given HTML is too large.");
|
||||
this->sendToDisplay(F("The given HTML is too large."));
|
||||
this->sendToDisplay("The Byte limit is " + (String)MAX_HTML_SIZE);
|
||||
this->sendToDisplay("Touch to exit...");
|
||||
this->sendToDisplay(F("Touch to exit..."));
|
||||
#endif
|
||||
Serial.println("The provided HTML is too large. Byte limit is " + (String)MAX_HTML_SIZE + "\nUse stopscan...");
|
||||
return false;
|
||||
@@ -316,14 +316,14 @@ bool EvilPortal::setAP(String essid) {
|
||||
|
||||
strncpy(apName, essid.c_str(), MAX_AP_NAME_SIZE);
|
||||
this->has_ap = true;
|
||||
Serial.println("ap config set");
|
||||
Serial.println(F("ap config set"));
|
||||
return true;
|
||||
}
|
||||
|
||||
void EvilPortal::startAP() {
|
||||
const IPAddress AP_IP(172, 0, 0, 1);
|
||||
|
||||
Serial.print("starting ap ");
|
||||
Serial.print(F("starting ap "));
|
||||
Serial.println(apName);
|
||||
|
||||
WiFi.mode(WIFI_AP);
|
||||
@@ -334,19 +334,19 @@ void EvilPortal::startAP() {
|
||||
this->sendToDisplay("AP started");
|
||||
#endif
|
||||
|
||||
Serial.print("ap ip address: ");
|
||||
Serial.print(F("ap ip address: "));
|
||||
Serial.println(WiFi.softAPIP());
|
||||
|
||||
this->setupServer();
|
||||
|
||||
Serial.println("Server endpoints configured");
|
||||
Serial.println(F("Server endpoints configured"));
|
||||
|
||||
this->dnsServer.start(53, "*", WiFi.softAPIP());
|
||||
Serial.println("DNS Server started");
|
||||
Serial.println(F("DNS Server started"));
|
||||
server.addHandler(new CaptiveRequestHandler()).setFilter(ON_AP_FILTER);
|
||||
Serial.println("Captive Portal handler started");
|
||||
Serial.println(F("Captive Portal handler started"));
|
||||
server.begin();
|
||||
Serial.println("Server started");
|
||||
Serial.println(F("Server started"));
|
||||
#ifdef HAS_SCREEN
|
||||
this->sendToDisplay("Evil Portal READY");
|
||||
#endif
|
||||
@@ -375,20 +375,29 @@ void EvilPortal::sendToDisplay(String msg) {
|
||||
}
|
||||
|
||||
void EvilPortal::main(uint8_t scan_mode) {
|
||||
if ((scan_mode == WIFI_SCAN_EVIL_PORTAL) && (this->has_ap) && (this->has_html)){
|
||||
if (scan_mode != WIFI_SCAN_EVIL_PORTAL || !this->has_ap || !this->has_html) {
|
||||
return;
|
||||
}
|
||||
|
||||
this->dnsServer.processNextRequest();
|
||||
|
||||
if (this->name_received && this->password_received) {
|
||||
this->name_received = false;
|
||||
this->password_received = false;
|
||||
String logValue1 =
|
||||
"u: " + this->user_name;
|
||||
String logValue2 = "p: " + this->password;
|
||||
String full_string = logValue1 + " " + logValue2 + "\n";
|
||||
Serial.print(full_string);
|
||||
buffer_obj.append(full_string);
|
||||
|
||||
// Adjust size depending on your max username/password length
|
||||
char line[96];
|
||||
|
||||
// If user_name / password are still Arduino String:
|
||||
snprintf(line, sizeof(line),
|
||||
"u: %s p: %s\n",
|
||||
this->user_name.c_str(),
|
||||
this->password.c_str());
|
||||
|
||||
Serial.print(line);
|
||||
buffer_obj.append(line);
|
||||
#ifdef HAS_SCREEN
|
||||
this->sendToDisplay(full_string);
|
||||
this->sendToDisplay(line);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -9,6 +9,10 @@
|
||||
#include "Keyboard.h"
|
||||
#endif
|
||||
|
||||
#ifdef HAS_TOUCH
|
||||
#include "TouchKeyboard.h"
|
||||
#endif
|
||||
|
||||
#ifdef HAS_SCREEN
|
||||
|
||||
#define BATTERY_ANALOG_ON 0
|
||||
@@ -95,41 +99,10 @@ extern Settings settings_obj;
|
||||
#define FUNNY_BEACON 40
|
||||
#define FLOCK 41
|
||||
|
||||
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);
|
||||
|
||||
PROGMEM static lv_disp_buf_t disp_buf;
|
||||
PROGMEM static lv_color_t buf[LV_HOR_RES_MAX * 10];
|
||||
|
||||
PROGMEM static void ta_event_cb(lv_obj_t * ta, lv_event_t event);
|
||||
PROGMEM static void join_wifi_keyboard_event_cb(lv_obj_t * keyboard, lv_event_t event);
|
||||
PROGMEM static void start_ap_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 html_list_cb(lv_obj_t * btn, lv_event_t event);
|
||||
PROGMEM static void ap_list_cb(lv_obj_t * btn, lv_event_t event);
|
||||
PROGMEM static void ap_info_list_cb(lv_obj_t * btn, lv_event_t event);
|
||||
PROGMEM static void at_list_cb(lv_obj_t * btn, lv_event_t event);
|
||||
PROGMEM static void station_list_cb(lv_obj_t * btn, lv_event_t event);
|
||||
PROGMEM static void setting_dropdown_cb(lv_obj_t * btn, lv_event_t event);
|
||||
|
||||
// lvgl stuff
|
||||
PROGMEM static lv_obj_t *kb;
|
||||
PROGMEM static lv_obj_t * save_as_kb;
|
||||
|
||||
struct Menu;
|
||||
|
||||
// Individual Nodes of a menu
|
||||
|
||||
/*struct MenuNode {
|
||||
String name;
|
||||
bool command;
|
||||
uint16_t color;
|
||||
uint8_t icon;
|
||||
TFT_eSPI_Button* button;
|
||||
bool selected;
|
||||
std::function<void()> callable;
|
||||
};*/
|
||||
|
||||
struct MenuNode {
|
||||
String name;
|
||||
bool command;
|
||||
@@ -175,13 +148,13 @@ class MenuFunctions
|
||||
Menu deviceMenu;
|
||||
|
||||
// Device menu stuff
|
||||
Menu whichUpdateMenu;
|
||||
//Menu whichUpdateMenu;
|
||||
Menu failedUpdateMenu;
|
||||
Menu confirmMenu;
|
||||
Menu updateMenu;
|
||||
Menu settingsMenu;
|
||||
Menu specSettingMenu;
|
||||
Menu languageMenu;
|
||||
//Menu languageMenu;
|
||||
Menu sdDeleteMenu;
|
||||
|
||||
// WiFi menu stuff
|
||||
@@ -195,9 +168,9 @@ class MenuFunctions
|
||||
Menu wifiAPMenu;
|
||||
Menu wifiIPMenu;
|
||||
Menu ssidsMenu;
|
||||
#ifdef HAS_BT
|
||||
Menu airtagMenu;
|
||||
#endif
|
||||
//#ifdef HAS_BT
|
||||
// Menu airtagMenu;
|
||||
//#endif
|
||||
//#ifndef HAS_ILI9341
|
||||
Menu wifiStationMenu;
|
||||
//#endif
|
||||
@@ -253,7 +226,9 @@ class MenuFunctions
|
||||
void buttonSelected(int b, int x = -1);
|
||||
void buttonNotSelected(int b, int x = -1);
|
||||
//#if (!defined(HAS_ILI9341) && defined(HAS_BUTTONS))
|
||||
#ifdef HAS_MINI_KB
|
||||
String miniKeyboard(Menu * targetMenu, bool do_pass = false);
|
||||
#endif
|
||||
//#endif
|
||||
|
||||
#ifdef MARAUDER_CARDPUTER
|
||||
@@ -296,13 +271,8 @@ class MenuFunctions
|
||||
|
||||
void joinWiFiGFX(String essid, bool start_ap = false);
|
||||
void setGraphScale(float scale);
|
||||
void initLVGL();
|
||||
void deinitLVGL();
|
||||
void selectEPHTMLGFX();
|
||||
void updateStatusBar();
|
||||
void addSSIDGFX();
|
||||
void addAPGFX(String type = "AP");
|
||||
void addStationGFX();
|
||||
void buildButtons(Menu* menu, int starting_index = 0, String button_name = "");
|
||||
void changeMenu(Menu* menu, bool simple_change = false);
|
||||
void drawStatusBar();
|
||||
|
||||
@@ -82,10 +82,10 @@ bool SDInterface::initSD() {
|
||||
}
|
||||
|
||||
if (!SD.exists("/SCRIPTS")) {
|
||||
Serial.println("/SCRIPTS does not exist. Creating...");
|
||||
Serial.println(F("/SCRIPTS does not exist. Creating..."));
|
||||
|
||||
SD.mkdir("/SCRIPTS");
|
||||
Serial.println("/SCRIPTS created");
|
||||
Serial.println(F("/SCRIPTS created"));
|
||||
}
|
||||
|
||||
this->sd_files = new LinkedList<String>();
|
||||
@@ -96,7 +96,7 @@ bool SDInterface::initSD() {
|
||||
}
|
||||
|
||||
#else
|
||||
Serial.println("SD support disabled, skipping init");
|
||||
Serial.println(F("SD support disabled, skipping init"));
|
||||
return false;
|
||||
#endif
|
||||
}
|
||||
@@ -280,7 +280,7 @@ void SDInterface::performUpdate(Stream &updateSource, size_t updateSize) {
|
||||
display_obj.tft.setTextColor(TFT_RED);
|
||||
display_obj.tft.println(text_table2[12]);
|
||||
#endif
|
||||
Serial.println("Update not finished? Something went wrong!");
|
||||
Serial.println(F("Update not finished? Something went wrong!"));
|
||||
#ifdef HAS_SCREEN
|
||||
display_obj.tft.setTextColor(TFT_WHITE);
|
||||
#endif
|
||||
@@ -299,7 +299,7 @@ void SDInterface::performUpdate(Stream &updateSource, size_t updateSize) {
|
||||
#ifdef HAS_SCREEN
|
||||
display_obj.tft.println(text_table2[14]);
|
||||
#endif
|
||||
Serial.println("Not enough space to begin OTA");
|
||||
Serial.println(F("Not enough space to begin OTA"));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
402
esp32_marauder/TouchKeyboard.cpp
Normal file
402
esp32_marauder/TouchKeyboard.cpp
Normal file
@@ -0,0 +1,402 @@
|
||||
#include "TouchKeyboard.h"
|
||||
#include <string.h>
|
||||
#include <Arduino.h>
|
||||
|
||||
#ifdef HAS_TOUCH
|
||||
|
||||
extern Display display_obj;
|
||||
|
||||
// Keyboard will occupy the bottom half of the screen.
|
||||
static inline int16_t kbHeight() { return TFT_HEIGHT / 2; }
|
||||
static inline int16_t kbYStart() { return TFT_HEIGHT - kbHeight(); }
|
||||
static inline int16_t kbWidth() { return TFT_WIDTH; }
|
||||
static inline int16_t kbXStart() { return 0; }
|
||||
|
||||
static const int KEY_ROWS = 5;
|
||||
|
||||
static const char ROW0_ALPHA[] = "1234567890";
|
||||
static const char ROW1_ALPHA[] = "qwertyuiop";
|
||||
static const char ROW2_ALPHA[] = "asdfghjkl";
|
||||
static const char ROW3_ALPHA[] = "zxcvbnm.";
|
||||
|
||||
static const char ROW0_SYM[] = "!@#$%^&*()";
|
||||
static const char ROW1_SYM[] = "`~-_=+[]{}";
|
||||
static const char ROW2_SYM[] = "\\|;:'\"";
|
||||
static const char ROW3_SYM[] = ",.<>/?";
|
||||
|
||||
static const uint16_t TOUCH_THRESHOLD = 600;
|
||||
|
||||
enum KeyboardLayout {
|
||||
LAYOUT_ALPHA = 0,
|
||||
LAYOUT_SYMBOLS
|
||||
};
|
||||
|
||||
static void drawTextArea(const char *title, const char *buffer) {
|
||||
int16_t areaHeight = TFT_HEIGHT - kbHeight();
|
||||
|
||||
// Clear text area
|
||||
display_obj.tft.fillRect(0, 0, TFT_WIDTH, areaHeight, TFT_BLACK);
|
||||
|
||||
int16_t cursorY = 2;
|
||||
|
||||
// Optional title
|
||||
if (title && title[0] != '\0') {
|
||||
display_obj.tft.setCursor(2, cursorY);
|
||||
display_obj.tft.setTextColor(TFT_GREEN, TFT_BLACK);
|
||||
display_obj.tft.print(title);
|
||||
cursorY += 16;
|
||||
}
|
||||
|
||||
// Draw current text
|
||||
display_obj.tft.setCursor(2, cursorY);
|
||||
display_obj.tft.setTextColor(TFT_WHITE, TFT_BLACK);
|
||||
display_obj.tft.print(buffer ? buffer : "");
|
||||
}
|
||||
|
||||
static void drawKeyboard(KeyboardLayout layout, bool caps) {
|
||||
const int16_t kY = kbYStart();
|
||||
const int16_t kH = kbHeight();
|
||||
const int16_t kX = kbXStart();
|
||||
const int16_t kW = kbWidth();
|
||||
|
||||
const int maxCols = 10;
|
||||
const int rows = KEY_ROWS;
|
||||
|
||||
const int16_t cellW = kW / maxCols;
|
||||
const int16_t cellH = kH / rows;
|
||||
|
||||
display_obj.tft.fillRect(kX, kY, kW, kH, TFT_DARKGREY);
|
||||
display_obj.tft.setTextColor(TFT_BLACK, TFT_DARKGREY);
|
||||
|
||||
// Choose row strings based on layout
|
||||
const char *rowStringsAlpha[4] = {
|
||||
ROW0_ALPHA, ROW1_ALPHA, ROW2_ALPHA, ROW3_ALPHA
|
||||
};
|
||||
const char *rowStringsSym[4] = {
|
||||
ROW0_SYM, ROW1_SYM, ROW2_SYM, ROW3_SYM
|
||||
};
|
||||
|
||||
const char **rowsPtr = (layout == LAYOUT_ALPHA)
|
||||
? (const char **)rowStringsAlpha
|
||||
: (const char **)rowStringsSym;
|
||||
|
||||
// Draw normal character rows (0–3)
|
||||
for (int r = 0; r < 4; ++r) {
|
||||
const char *row = rowsPtr[r];
|
||||
|
||||
// For alpha layout row 3, we will also draw CAPS on the rightmost 2 columns.
|
||||
// The textual row only covers the first part.
|
||||
int rowLen = strlen(row);
|
||||
|
||||
int16_t rowY = kY + r * cellH;
|
||||
|
||||
// For alpha row 3, we want row chars towards the left, leaving space for CAPS.
|
||||
int16_t xOffset;
|
||||
if (layout == LAYOUT_ALPHA && r == 3) {
|
||||
// Use columns 0..7 for characters, 8..9 for CAPS
|
||||
xOffset = 0;
|
||||
} else {
|
||||
int maxColsRow = maxCols;
|
||||
xOffset = (maxColsRow - rowLen);
|
||||
if (xOffset < 0) xOffset = 0;
|
||||
xOffset = (xOffset * cellW) / 2; // center row
|
||||
}
|
||||
|
||||
for (int i = 0; i < rowLen; ++i) {
|
||||
int16_t keyX = kX + xOffset + i * cellW;
|
||||
int16_t keyY = rowY;
|
||||
|
||||
// Key border
|
||||
display_obj.tft.drawRect(keyX, keyY, cellW, cellH, TFT_BLACK);
|
||||
|
||||
// Label
|
||||
display_obj.tft.setCursor(keyX + cellW / 2 - 3, keyY + cellH / 2 - 4);
|
||||
char c = row[i];
|
||||
|
||||
// Apply CAPS on alpha letters
|
||||
if (layout == LAYOUT_ALPHA && r > 0) {
|
||||
if (c >= 'a' && c <= 'z') {
|
||||
if (caps) {
|
||||
c = (char)(c - 'a' + 'A');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
char s[2] = { c, '\0' };
|
||||
display_obj.tft.print(s);
|
||||
}
|
||||
|
||||
// Draw CAPS key for alpha layout on row 3 (rightmost two columns)
|
||||
if (layout == LAYOUT_ALPHA && r == 3) {
|
||||
int16_t capsX = kX + 8 * cellW;
|
||||
int16_t capsW = 2 * cellW;
|
||||
|
||||
display_obj.tft.drawRect(capsX, rowY, capsW, cellH, TFT_BLACK);
|
||||
display_obj.tft.setCursor(capsX + 4, rowY + cellH / 2 - 4);
|
||||
// Show different label based on state
|
||||
if (caps) {
|
||||
display_obj.tft.print("caps");
|
||||
} else {
|
||||
display_obj.tft.print("CAPS");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Special row (row index 4): CANCEL | SYMB/ABC | SPACE | BKSP | OK
|
||||
int r = 4;
|
||||
int16_t rowY = kY + r * cellH;
|
||||
|
||||
// Divide width into 6 segments:
|
||||
// [CANCEL][SYMB][SPACE (2 segments)][BKSP][OK]
|
||||
int16_t segW = kW / 6;
|
||||
int16_t x0 = kX;
|
||||
int16_t x1 = x0 + segW; // end CANCEL
|
||||
int16_t x2 = x1 + segW; // end SYMB
|
||||
int16_t x3 = x2 + 2 * segW; // end SPACE
|
||||
int16_t x4 = x3 + segW; // end BKSP
|
||||
int16_t x5 = x4 + segW; // end OK
|
||||
|
||||
// CANCEL
|
||||
display_obj.tft.drawRect(x0, rowY, segW, cellH, TFT_BLACK);
|
||||
display_obj.tft.setCursor(x0 + 4, rowY + cellH / 2 - 4);
|
||||
display_obj.tft.print("CANCEL");
|
||||
|
||||
// SYMB / ABC
|
||||
display_obj.tft.drawRect(x1, rowY, segW, cellH, TFT_BLACK);
|
||||
display_obj.tft.setCursor(x1 + 4, rowY + cellH / 2 - 4);
|
||||
if (layout == LAYOUT_ALPHA) {
|
||||
display_obj.tft.print("SYMB");
|
||||
} else {
|
||||
display_obj.tft.print("ABC");
|
||||
}
|
||||
|
||||
display_obj.tft.drawRect(x2, rowY, (x3 - x2), cellH, TFT_BLACK);
|
||||
display_obj.tft.setCursor(x2 + 4, rowY + cellH / 2 - 4);
|
||||
display_obj.tft.print("SPACE");
|
||||
|
||||
display_obj.tft.drawRect(x3, rowY, (x4 - x3), cellH, TFT_BLACK);
|
||||
display_obj.tft.setCursor(x3 + 4, rowY + cellH / 2 - 4);
|
||||
display_obj.tft.print("BKSP");
|
||||
|
||||
display_obj.tft.drawRect(x4, rowY, (x5 - x4), cellH, TFT_BLACK);
|
||||
display_obj.tft.setCursor(x4 + 4, rowY + cellH / 2 - 4);
|
||||
display_obj.tft.print("OK");
|
||||
}
|
||||
|
||||
static bool appendChar(char *buffer, size_t bufLen, char c) {
|
||||
size_t len = strlen(buffer);
|
||||
if (len + 1 < bufLen) {
|
||||
buffer[len] = c;
|
||||
buffer[len + 1] = '\0';
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
static KeyboardResult handleKeyboardTouch(uint16_t tx, uint16_t ty,
|
||||
char *buffer, size_t bufLen,
|
||||
KeyboardLayout layout,
|
||||
bool caps) {
|
||||
if (!buffer || bufLen < 2) return KB_NONE;
|
||||
|
||||
const int16_t kY = kbYStart();
|
||||
const int16_t kH = kbHeight();
|
||||
const int16_t kX = kbXStart();
|
||||
const int16_t kW = kbWidth();
|
||||
|
||||
if (ty < kY || ty >= (kY + kH)) {
|
||||
// Touch is outside keyboard area
|
||||
return KB_NONE;
|
||||
}
|
||||
|
||||
const int maxCols = 10;
|
||||
const int rows = KEY_ROWS;
|
||||
const int16_t cellW = kW / maxCols;
|
||||
const int16_t cellH = kH / rows;
|
||||
|
||||
int rowIndex = (ty - kY) / cellH;
|
||||
|
||||
// Choose row strings based on layout
|
||||
const char *rowStringsAlpha[4] = {
|
||||
ROW0_ALPHA, ROW1_ALPHA, ROW2_ALPHA, ROW3_ALPHA
|
||||
};
|
||||
const char *rowStringsSym[4] = {
|
||||
ROW0_SYM, ROW1_SYM, ROW2_SYM, ROW3_SYM
|
||||
};
|
||||
|
||||
const char **rowsPtr = (layout == LAYOUT_ALPHA)
|
||||
? (const char **)rowStringsAlpha
|
||||
: (const char **)rowStringsSym;
|
||||
|
||||
// Normal rows (0..3)
|
||||
if (rowIndex >= 0 && rowIndex <= 3) {
|
||||
const char *row = rowsPtr[rowIndex];
|
||||
int rowLen = strlen(row);
|
||||
|
||||
int16_t rowY = kY + rowIndex * cellH;
|
||||
|
||||
// Alpha row 3: characters on columns 0..7, CAPS on columns 8..9
|
||||
if (layout == LAYOUT_ALPHA && rowIndex == 3) {
|
||||
int16_t capsXStart = kX + 8 * cellW;
|
||||
int16_t capsXEnd = capsXStart + 2 * cellW;
|
||||
|
||||
// Check CAPS region
|
||||
if (tx >= capsXStart && tx < capsXEnd) {
|
||||
return KB_TOGGLE_CAPS;
|
||||
}
|
||||
|
||||
// Characters only in the columns before CAPS
|
||||
int16_t xOffset = 0;
|
||||
if (tx < kX || tx >= (kX + 8 * cellW)) {
|
||||
return KB_NONE;
|
||||
}
|
||||
|
||||
int colIndex = (tx - (kX + xOffset)) / cellW;
|
||||
if (colIndex < 0 || colIndex >= rowLen) return KB_NONE;
|
||||
|
||||
char c = row[colIndex];
|
||||
// Apply caps mapping
|
||||
if (c >= 'a' && c <= 'z' && caps) {
|
||||
c = (char)(c - 'a' + 'A');
|
||||
}
|
||||
|
||||
if (appendChar(buffer, bufLen, c)) {
|
||||
return KB_CHANGED;
|
||||
}
|
||||
return KB_NONE;
|
||||
}
|
||||
|
||||
// All other rows
|
||||
int16_t xOffset = (maxCols - rowLen);
|
||||
if (xOffset < 0) xOffset = 0;
|
||||
xOffset = (xOffset * cellW) / 2;
|
||||
|
||||
if (tx < kX + xOffset || tx >= kX + xOffset + rowLen * cellW) {
|
||||
return KB_NONE;
|
||||
}
|
||||
|
||||
int colIndex = (tx - (kX + xOffset)) / cellW;
|
||||
if (colIndex < 0 || colIndex >= rowLen) return KB_NONE;
|
||||
|
||||
char c = row[colIndex];
|
||||
|
||||
// Apply caps on alpha letters (rows 1 and 2)
|
||||
if (layout == LAYOUT_ALPHA && rowIndex > 0) {
|
||||
if (c >= 'a' && c <= 'z' && caps) {
|
||||
c = (char)(c - 'a' + 'A');
|
||||
}
|
||||
}
|
||||
|
||||
if (appendChar(buffer, bufLen, c)) {
|
||||
return KB_CHANGED;
|
||||
}
|
||||
return KB_NONE;
|
||||
}
|
||||
|
||||
// Special row (rowIndex == 4): CANCEL | SYMB/ABC | SPACE | BKSP | OK
|
||||
if (rowIndex == 4) {
|
||||
int16_t rowY = kY + rowIndex * cellH;
|
||||
|
||||
int16_t segW = kW / 6;
|
||||
int16_t x0 = kX;
|
||||
int16_t x1 = x0 + segW; // end CANCEL
|
||||
int16_t x2 = x1 + segW; // end SYMB
|
||||
int16_t x3 = x2 + 2 * segW; // end SPACE
|
||||
int16_t x4 = x3 + segW; // end BKSP
|
||||
int16_t x5 = x4 + segW; // end OK
|
||||
|
||||
// CANCEL
|
||||
if (tx >= x0 && tx < x1) {
|
||||
return KB_CANCEL;
|
||||
}
|
||||
|
||||
// SYMB / ABC toggle
|
||||
if (tx >= x1 && tx < x2) {
|
||||
return KB_TOGGLE_LAYOUT;
|
||||
}
|
||||
|
||||
// SPACE (x2..x3)
|
||||
if (tx >= x2 && tx < x3) {
|
||||
if (appendChar(buffer, bufLen, ' ')) {
|
||||
return KB_CHANGED;
|
||||
}
|
||||
return KB_NONE;
|
||||
}
|
||||
|
||||
// BKSP (x3..x4)
|
||||
if (tx >= x3 && tx < x4) {
|
||||
size_t len = strlen(buffer);
|
||||
if (len > 0) {
|
||||
buffer[len - 1] = '\0';
|
||||
return KB_CHANGED;
|
||||
}
|
||||
return KB_NONE;
|
||||
}
|
||||
|
||||
// OK (x4..x5)
|
||||
if (tx >= x4 && tx < x5) {
|
||||
return KB_DONE;
|
||||
}
|
||||
}
|
||||
|
||||
return KB_NONE;
|
||||
}
|
||||
|
||||
|
||||
bool keyboardInput(char *buffer, size_t bufLen, const char *title) {
|
||||
if (!buffer || bufLen < 2) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// To force clear, uncomment this:
|
||||
// buffer[0] = '\0';
|
||||
|
||||
KeyboardLayout layout = LAYOUT_ALPHA;
|
||||
bool caps = false;
|
||||
|
||||
drawTextArea(title, buffer);
|
||||
drawKeyboard(layout, caps);
|
||||
|
||||
uint32_t lastTouchTime = 0;
|
||||
const uint32_t debounceMs = 120;
|
||||
|
||||
while (true) {
|
||||
uint16_t x = 0, y = 0;
|
||||
uint8_t touched = display_obj.updateTouch(&x, &y, TOUCH_THRESHOLD);
|
||||
|
||||
if (touched) {
|
||||
uint32_t now = millis();
|
||||
if (now - lastTouchTime < debounceMs) {
|
||||
// "debounce"
|
||||
continue;
|
||||
}
|
||||
lastTouchTime = now;
|
||||
|
||||
KeyboardResult r = handleKeyboardTouch(x, y, buffer, bufLen, layout, caps);
|
||||
|
||||
if (r == KB_CHANGED) {
|
||||
drawTextArea(title, buffer);
|
||||
} else if (r == KB_DONE) {
|
||||
drawTextArea(title, buffer);
|
||||
return true;
|
||||
} else if (r == KB_CANCEL) {
|
||||
// Optional: buffer[0] = '\0';
|
||||
drawTextArea(title, buffer);
|
||||
return false;
|
||||
} else if (r == KB_TOGGLE_LAYOUT) {
|
||||
layout = (layout == LAYOUT_ALPHA) ? LAYOUT_SYMBOLS : LAYOUT_ALPHA;
|
||||
drawKeyboard(layout, caps);
|
||||
} else if (r == KB_TOGGLE_CAPS) {
|
||||
caps = !caps;
|
||||
drawKeyboard(layout, caps);
|
||||
}
|
||||
}
|
||||
|
||||
delay(5);
|
||||
yield();
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
#endif
|
||||
31
esp32_marauder/TouchKeyboard.h
Normal file
31
esp32_marauder/TouchKeyboard.h
Normal file
@@ -0,0 +1,31 @@
|
||||
#pragma once
|
||||
|
||||
#include "configs.h"
|
||||
|
||||
#ifdef HAS_TOUCH
|
||||
|
||||
#include "Display.h"
|
||||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
|
||||
enum KeyboardResult {
|
||||
KB_NONE = 0,
|
||||
KB_CHANGED,
|
||||
KB_DONE,
|
||||
KB_CANCEL,
|
||||
KB_TOGGLE_LAYOUT,
|
||||
KB_TOGGLE_CAPS
|
||||
};
|
||||
|
||||
/**
|
||||
* Blocking keyboard input.
|
||||
*
|
||||
* @param buffer Caller-provided char buffer to hold the text. Will be null-terminated.
|
||||
* @param bufLen Total size of the buffer (including space for '\0').
|
||||
* @param title Optional title displayed above the text box (can be nullptr).
|
||||
*
|
||||
* @return true if user pressed OK, false if user pressed CANCEL (or if buffer invalid).
|
||||
*/
|
||||
bool keyboardInput(char *buffer, size_t bufLen, const char *title = nullptr);
|
||||
|
||||
#endif
|
||||
File diff suppressed because it is too large
Load Diff
@@ -28,12 +28,14 @@
|
||||
#include "esp_wifi.h"
|
||||
#include "esp_wifi_types.h"
|
||||
#include <esp_timer.h>
|
||||
#ifndef HAS_DUAL_BAND
|
||||
#include <lwip/etharp.h>
|
||||
#include <lwip/ip_addr.h>
|
||||
#endif
|
||||
#ifdef HAS_DUAL_BAND
|
||||
#include "esp_system.h"
|
||||
#endif
|
||||
#ifdef HAS_BT
|
||||
#if defined(HAS_BT) && !defined(HAS_DUAL_BAND)
|
||||
#include "esp_bt.h"
|
||||
#endif
|
||||
#ifdef HAS_SCREEN
|
||||
@@ -523,6 +525,8 @@ class WiFiScan
|
||||
NimBLEAdvertisementData GetUniversalAdvertisementData(EBLEPayloadType type);
|
||||
#endif
|
||||
|
||||
void showNetworkInfo();
|
||||
void setNetworkInfo();
|
||||
void fullARP();
|
||||
bool readARP(IPAddress targ_ip);
|
||||
bool singleARP(IPAddress ip_addr);
|
||||
@@ -590,7 +594,6 @@ class WiFiScan
|
||||
void RunBluetoothScan(uint8_t scan_mode, uint16_t color);
|
||||
void RunSourApple(uint8_t scan_mode, uint16_t color);
|
||||
void RunSwiftpairSpam(uint8_t scan_mode, uint16_t color);
|
||||
void RunLvJoinWiFi(uint8_t scan_mode, uint16_t color);
|
||||
void RunEvilPortal(uint8_t scan_mode, uint16_t color);
|
||||
void RunPingScan(uint8_t scan_mode, uint16_t color);
|
||||
void RunPortScanAll(uint8_t scan_mode, uint16_t color);
|
||||
@@ -624,6 +627,14 @@ class WiFiScan
|
||||
bool force_probe = false;
|
||||
bool save_pcap = false;
|
||||
bool ep_deauth = false;
|
||||
bool ble_scanning = false;
|
||||
|
||||
char* flock_ssid[4] = {
|
||||
"flock",
|
||||
"penguin",
|
||||
"pigvision",
|
||||
"fs ext battery"
|
||||
};
|
||||
|
||||
#ifdef HAS_DUAL_BAND
|
||||
uint8_t channel_activity[DUAL_BAND_CHANNELS] = {};
|
||||
@@ -787,12 +798,12 @@ class WiFiScan
|
||||
static void getMAC(char *addr, uint8_t* data, uint16_t offset);
|
||||
static void pwnSnifferCallback(void* buf, wifi_promiscuous_pkt_type_t type);
|
||||
static void beaconSnifferCallback(void* buf, wifi_promiscuous_pkt_type_t type);
|
||||
static void rawSnifferCallback(void* buf, wifi_promiscuous_pkt_type_t type);
|
||||
//static void rawSnifferCallback(void* buf, wifi_promiscuous_pkt_type_t type);
|
||||
static void stationSnifferCallback(void* buf, wifi_promiscuous_pkt_type_t type);
|
||||
static void apSnifferCallback(void* buf, wifi_promiscuous_pkt_type_t type);
|
||||
static void apSnifferCallbackFull(void* buf, wifi_promiscuous_pkt_type_t type);
|
||||
static void deauthSnifferCallback(void* buf, wifi_promiscuous_pkt_type_t type);
|
||||
static void probeSnifferCallback(void* buf, wifi_promiscuous_pkt_type_t type);
|
||||
//static void probeSnifferCallback(void* buf, wifi_promiscuous_pkt_type_t type);
|
||||
static void beaconListSnifferCallback(void* buf, wifi_promiscuous_pkt_type_t type);
|
||||
static void activeEapolSnifferCallback(void* buf, wifi_promiscuous_pkt_type_t type);
|
||||
static void eapolSnifferCallback(void* buf, wifi_promiscuous_pkt_type_t type);
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
//#define MARAUDER_V8
|
||||
//// END BOARD TARGETS
|
||||
|
||||
#define MARAUDER_VERSION "v1.8.11"
|
||||
#define MARAUDER_VERSION "v1.9.0"
|
||||
|
||||
#define GRAPH_REFRESH 100
|
||||
|
||||
@@ -407,7 +407,7 @@
|
||||
//#define HAS_FLIPPER_LED
|
||||
//#define FLIPPER_ZERO_HAT
|
||||
//#define HAS_BATTERY
|
||||
//#define HAS_BT
|
||||
#define HAS_BT
|
||||
//#define HAS_BUTTONS
|
||||
#define HAS_NEOPIXEL_LED
|
||||
//#define HAS_PWR_MGMT
|
||||
@@ -426,9 +426,9 @@
|
||||
//#define HAS_FLIPPER_LED
|
||||
//#define FLIPPER_ZERO_HAT
|
||||
#define HAS_BATTERY
|
||||
//#define HAS_BT
|
||||
#define HAS_BT
|
||||
//#define HAS_BUTTONS
|
||||
#define HAS_NEOPIXEL_LED
|
||||
//#define HAS_NEOPIXEL_LED
|
||||
//#define HAS_PWR_MGMT
|
||||
#define HAS_SCREEN
|
||||
#define HAS_FULL_SCREEN
|
||||
|
||||
@@ -298,6 +298,16 @@ void setup()
|
||||
menu_function_obj.RunSetup();
|
||||
#endif
|
||||
|
||||
/*char ssidBuf[64] = {0}; // or prefill with existing SSID
|
||||
if (keyboardInput(ssidBuf, sizeof(ssidBuf), "Enter SSID")) {
|
||||
// user pressed OK
|
||||
Serial.println(ssidBuf);
|
||||
} else {
|
||||
Serial.println(F("User exited keyboard"));
|
||||
}
|
||||
|
||||
menu_function_obj.changeMenu(menu_function_obj.current_menu);*/
|
||||
|
||||
wifi_scan_obj.StartScan(WIFI_SCAN_OFF);
|
||||
|
||||
Serial.println(F("CLI Ready"));
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
|
||||
#include "configs.h"
|
||||
|
||||
#include "esp_heap_caps.h"
|
||||
//#include "esp_heap_caps.h"
|
||||
|
||||
struct mac_addr {
|
||||
unsigned char bytes[6];
|
||||
@@ -27,7 +27,7 @@ struct ProbeReqSsid {
|
||||
uint8_t requests;
|
||||
};
|
||||
|
||||
const char apple_ouis[][9] PROGMEM = {
|
||||
/*const char apple_ouis[][9] PROGMEM = {
|
||||
"00:17:F2", "00:1E:C2", "00:26:08", "F8:1E:DF", "BC:92:6B",
|
||||
"28:E0:2C", "3C:07:54", "7C:D1:C3", "DC:A9:04", "F0:D1:A9",
|
||||
"C0:2C:5C", "00:03:93", "00:03:94", "00:03:95", "00:03:96",
|
||||
@@ -114,14 +114,7 @@ const char linksys_ouis[][9] PROGMEM = {
|
||||
};
|
||||
|
||||
const char netgear_ouis[][9] PROGMEM = {
|
||||
"00:09:5B", "00:0F:B5", "00:14:6C", "00:1B:2F", "00:1E:2A", "00:1F:33", "00:22:3F", "00:22:4B", "00:26:F2",
|
||||
"00:8E:F2", "08:02:8E", "08:36:C9", "08:BD:43", "10:0C:6B", "10:0D:7F", "10:DA:43", "14:59:C0", "20:4E:7F",
|
||||
"20:E5:2A", "28:80:88", "28:94:01", "28:C6:8E", "2C:30:33", "2C:B0:5D", "30:46:9A", "34:98:B5", "38:94:ED",
|
||||
"3C:37:86", "40:5D:82", "44:A5:6E", "4C:60:DE", "50:4A:6E", "50:6A:03", "54:07:7D", "58:EF:68", "60:38:E0",
|
||||
"6C:B0:CE", "6C:CD:D6", "74:44:01", "80:37:73", "84:1B:5E", "8C:3B:AD", "94:18:65", "9C:3D:CF", "9C:C9:EB",
|
||||
"9C:D3:6D", "A0:04:60", "A0:21:B7", "A0:40:A0", "A4:2B:8C", "B0:39:56", "B0:7F:B9", "B0:B9:8A", "BC:A5:11",
|
||||
"C0:3F:0E", "C0:FF:D4", "C4:04:15", "C4:3D:C7", "C8:9E:43", "CC:40:D0", "DC:EF:09", "E0:46:9A", "E0:46:EE",
|
||||
"E0:91:F5", "E4:F4:C6", "E8:FC:AF", "F8:73:94"
|
||||
"00:09:5B", "00:0F:B5", "00:14:6C"
|
||||
};
|
||||
|
||||
const char oneplus_ouis[][9] PROGMEM = {
|
||||
@@ -154,7 +147,7 @@ const char tplink_ouis[][9] PROGMEM = {
|
||||
const char xiaomi_ouis[][9] PROGMEM = {
|
||||
"04:CF:8C", "18:59:36", "38:1A:2D", "64:B4:73", "78:02:F8",
|
||||
"90:4E:91", "C4:0B:CB", "D0:DB:32"
|
||||
};
|
||||
};*/
|
||||
|
||||
uint8_t getDRAMUsagePercent() {
|
||||
//size_t total = heap_caps_get_total_size(MALLOC_CAP_8BIT);
|
||||
@@ -171,7 +164,7 @@ uint8_t getDRAMUsagePercent() {
|
||||
|
||||
#ifdef HAS_PSRAM
|
||||
uint8_t getPSRAMUsagePercent() {
|
||||
//size_t total = heap_caps_get_total_size(MALLOC_CAP_SPIRAM);
|
||||
/*//size_t total = heap_caps_get_total_size(MALLOC_CAP_SPIRAM);
|
||||
//size_t free = heap_caps_get_free_size(MALLOC_CAP_SPIRAM);
|
||||
|
||||
size_t total = ESP.getPsramSize();
|
||||
@@ -181,7 +174,8 @@ uint8_t getDRAMUsagePercent() {
|
||||
|
||||
size_t used = total - free;
|
||||
uint8_t percent = (used * 100) / total;
|
||||
return percent;
|
||||
return percent;*/
|
||||
return getDRAMUsagePercent();
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -299,7 +293,7 @@ void convertMacStringToUint8(const String& macStr, uint8_t macAddr[6]) {
|
||||
}
|
||||
|
||||
// Function to check if the given MAC address matches any known OUI
|
||||
const char* getManufacturer(const char *addr) {
|
||||
/*const char* getManufacturer(const char *addr) {
|
||||
static char oui[9]; // Temporary buffer for extracted OUI
|
||||
|
||||
// Extract the first three bytes (OUI) from addr
|
||||
@@ -316,7 +310,7 @@ const char* getManufacturer(const char *addr) {
|
||||
for (uint8_t i = 0; i < sizeof(list) / sizeof(list[0]); i++) { \
|
||||
char storedOUI[9]; \
|
||||
strcpy_P(storedOUI, list[i]); \
|
||||
/* Convert the stored OUI to lowercase */ \
|
||||
\
|
||||
for (int j = 0; j < 8; j++) { \
|
||||
storedOUI[j] = tolower(storedOUI[j]); \
|
||||
} \
|
||||
@@ -355,7 +349,7 @@ String replaceOUIWithManufacturer(const char *sta_addr) {
|
||||
|
||||
// Construct the new address: manufacturer + the remaining MAC address (after the first 3 bytes)
|
||||
return String(manufacturer) + mac_suffix;
|
||||
}
|
||||
}*/
|
||||
|
||||
IPAddress getNextIP(IPAddress currentIP, IPAddress subnetMask) {
|
||||
// Convert IPAddress to uint32_t
|
||||
|
||||
Reference in New Issue
Block a user