mirror of
https://github.com/justcallmekoko/ESP32Marauder.git
synced 2025-12-06 21:01:19 -08:00
Compare commits
86 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1624d98183 | ||
|
|
9681076542 | ||
|
|
86d35cba6a | ||
|
|
fb2b33d538 | ||
|
|
5e47927969 | ||
|
|
d7d2b28f9e | ||
|
|
5d188bfa62 | ||
|
|
576601fd21 | ||
|
|
dc2dd414eb | ||
|
|
5439fc7ceb | ||
|
|
84416970e7 | ||
|
|
ba67c63010 | ||
|
|
e4458ad1e6 | ||
|
|
6c996a489f | ||
|
|
d3ce284ea4 | ||
|
|
eab60701d5 | ||
|
|
30893adaa5 | ||
|
|
2c0868e893 | ||
|
|
0fba6966a6 | ||
|
|
b714f274b5 | ||
|
|
e5c6c6906e | ||
|
|
ccf7cd1493 | ||
|
|
a1ff26a9d2 | ||
|
|
57f867a8ec | ||
|
|
c901ade02c | ||
|
|
aee56f879f | ||
|
|
0535646ba8 | ||
|
|
cd3ab51080 | ||
|
|
b6d1ce7a37 | ||
|
|
9d51b91ad3 | ||
|
|
018bddae6a | ||
|
|
b014332169 | ||
|
|
5079a05458 | ||
|
|
c002aee646 | ||
|
|
5afcb9da61 | ||
|
|
a874375fb0 | ||
|
|
22f4dc66ec | ||
|
|
31baacac3e | ||
|
|
601aee9b8a | ||
|
|
93ac8b3cde | ||
|
|
08d1682ae4 | ||
|
|
1343c91064 | ||
|
|
7f741d75fb | ||
|
|
de2a916ad6 | ||
|
|
5a928a7ae8 | ||
|
|
b5bb65f76b | ||
|
|
09b519d0a2 | ||
|
|
3fc18d642b | ||
|
|
7460b40543 | ||
|
|
0b6dc40fa6 | ||
|
|
6331e43db1 | ||
|
|
9819a6ba1b | ||
|
|
f170caa9d2 | ||
|
|
3838296173 | ||
|
|
8526e49189 | ||
|
|
a3aff9afd6 | ||
|
|
50033af120 | ||
|
|
2ccb8675dc | ||
|
|
05eb6d74a5 | ||
|
|
c06e104485 | ||
|
|
0a8d9d2d41 | ||
|
|
ab9870219a | ||
|
|
941532eba0 | ||
|
|
c515873fd5 | ||
|
|
1bf0b0e2c1 | ||
|
|
9ea5fbc3eb | ||
|
|
0e8e698254 | ||
|
|
630687359d | ||
|
|
5070b9785d | ||
|
|
b0c8dd5cb4 | ||
|
|
5fa046b599 | ||
|
|
48164bc4ec | ||
|
|
68085fc6a7 | ||
|
|
0f62303018 | ||
|
|
dc7992d040 | ||
|
|
0764625eb1 | ||
|
|
748afc99e8 | ||
|
|
c4e78293a6 | ||
|
|
74cd774718 | ||
|
|
feaae672da | ||
|
|
ba9ec4023e | ||
|
|
7045ce9380 | ||
|
|
69a7d9b24f | ||
|
|
11f2cec1fd | ||
|
|
828d0b1760 | ||
|
|
fc903cc66b |
17
.github/workflows/build_parallel.yml
vendored
17
.github/workflows/build_parallel.yml
vendored
@@ -36,7 +36,7 @@ jobs:
|
||||
- { name: "Marauder CYD 3.5inch", flag: "MARAUDER_CYD_3_5_INCH", fbqn: "esp32:esp32:d32:PartitionScheme=min_spiffs", file_name: "cyd_3_5_inch", tft: true, tft_file: "User_Setup_cyd_3_5_inch.h", build_dir: "d32", addr: "0x1000", idf_ver: "2.0.11", nimble_ver: "1.3.8", esp_async: "bigbrodude6119/ESPAsyncWebServer", esp_async_ver: "master" }
|
||||
- { name: "Marauder v7.1", flag: "MARAUDER_V7_1", fbqn: "esp32:esp32:dfrobot_firebeetle2_esp32e:FlashSize=16M,PartitionScheme=min_spiffs,PSRAM=enabled", file_name: "marauder_v7_1", tft: true, tft_file: "User_Setup_dual_nrf24.h", build_dir: "dfrobot_firebeetle2_esp32e", addr: "0x1000", idf_ver: "2.0.11", nimble_ver: "1.3.8", esp_async: "bigbrodude6119/ESPAsyncWebServer", esp_async_ver: "master" }
|
||||
- { name: "M5Cardputer", flag: "MARAUDER_CARDPUTER", fbqn: "esp32:esp32:esp32s3:PartitionScheme=min_spiffs,FlashSize=8M,PSRAM=disabled", file_name: "m5cardputer", tft: true, tft_file: "User_Setup_marauder_m5cardputer.h", build_dir: "esp32s3", addr: "0x1000", idf_ver: "2.0.11", nimble_ver: "1.3.8", esp_async: "bigbrodude6119/ESPAsyncWebServer", esp_async_ver: "master" }
|
||||
- { name: "ESP32-C5-DevKitC-1", flag: "MARAUDER_C5", fbqn: "esp32:esp32:esp32c5:PartitionScheme=min_spiffs", file_name: "esp32c5devkitc1", tft: false, tft_file: "", build_dir: "esp32c5", addr: "0x2000", idf_ver: "3.3.0", nimble_ver: "2.3.0", esp_async: "bigbrodude6119/ESPAsyncWebServer", esp_async_ver: "master" }
|
||||
- { name: "ESP32-C5-DevKitC-1", flag: "MARAUDER_C5", fbqn: "esp32:esp32:esp32c5:FlashSize=8M,PartitionScheme=min_spiffs,PSRAM=enabled", file_name: "esp32c5devkitc1", tft: false, tft_file: "", build_dir: "esp32c5", addr: "0x2000", idf_ver: "3.3.4", nimble_ver: "2.3.6", esp_async: "bigbrodude6119/ESPAsyncWebServer", esp_async_ver: "master" }
|
||||
|
||||
steps:
|
||||
- name: Checkout Code
|
||||
@@ -143,7 +143,7 @@ jobs:
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
repository: adafruit/Adafruit_NeoPixel
|
||||
ref: 1.10.7
|
||||
ref: 1.12.0
|
||||
path: CustomAdafruit_NeoPixel
|
||||
|
||||
- name: Install ArduinoJson
|
||||
@@ -212,7 +212,7 @@ jobs:
|
||||
done
|
||||
fi
|
||||
|
||||
if [[ ${{ matrix.board.idf_ver }} == "3.3.0" ]]; then
|
||||
if [[ ${{ matrix.board.idf_ver }} == "3.3.4" ]]; then
|
||||
for i in $(find /home/runner/.arduino15/packages/esp32/hardware/esp32/ -name "platform.txt"); do
|
||||
sed -i 's/compiler.c.elf.extra_flags=/compiler.c.elf.extra_flags=-Wl,-zmuldefs /' "$i"
|
||||
done
|
||||
@@ -247,6 +247,7 @@ jobs:
|
||||
BUILD_DIR=./esp32_marauder/build/esp32.esp32.${{ matrix.board.build_dir }}
|
||||
INPUT_BIN=$BUILD_DIR/esp32_marauder.ino.bin
|
||||
OUTPUT_BIN=esp32_marauder_${VERSION}_${DATE}_${{ matrix.board.file_name }}.bin
|
||||
VERSION_DOT=${VERSION_DOT}
|
||||
|
||||
mv "$INPUT_BIN" "$BUILD_DIR/$OUTPUT_BIN"
|
||||
|
||||
@@ -269,12 +270,18 @@ jobs:
|
||||
- uses: actions/download-artifact@v4
|
||||
with:
|
||||
merge-multiple: true
|
||||
|
||||
- name: Get Tag Version
|
||||
run: |
|
||||
VERSION_DOT=$(grep '#define MARAUDER_VERSION' ./esp32_marauder/configs.h | sed -E 's/.*"v([^"]+)"/v\1/')
|
||||
echo "version_dot=$VERSION_DOT" >> $GITHUB_ENV
|
||||
|
||||
- name: Create Release
|
||||
uses: softprops/action-gh-release@v1
|
||||
with:
|
||||
name: "Marauder Release ${{ github.ref_name }}"
|
||||
tag_name: ${{ github.ref_name }}
|
||||
generate_release_notes: true
|
||||
tag_name: ${{ env.version_dot }}
|
||||
generate_release_notes: false
|
||||
draft: true
|
||||
files: |
|
||||
esp32_marauder_v*.bin
|
||||
|
||||
19
.github/workflows/nightly_build.yml
vendored
19
.github/workflows/nightly_build.yml
vendored
@@ -85,7 +85,7 @@ jobs:
|
||||
- { name: "Marauder CYD 3.5inch", flag: "MARAUDER_CYD_3_5_INCH", fbqn: "esp32:esp32:d32:PartitionScheme=min_spiffs", file_name: "cyd_3_5_inch", tft: true, tft_file: "User_Setup_cyd_3_5_inch.h", build_dir: "d32", addr: "0x1000", idf_ver: "2.0.11", nimble_ver: "1.3.8", esp_async: "bigbrodude6119/ESPAsyncWebServer", esp_async_ver: "master" }
|
||||
- { name: "Marauder v7.1", flag: "MARAUDER_V7_1", fbqn: "esp32:esp32:dfrobot_firebeetle2_esp32e:FlashSize=16M,PartitionScheme=min_spiffs,PSRAM=enabled", file_name: "marauder_v7_1", tft: true, tft_file: "User_Setup_dual_nrf24.h", build_dir: "dfrobot_firebeetle2_esp32e", addr: "0x1000", idf_ver: "2.0.11", nimble_ver: "1.3.8", esp_async: "bigbrodude6119/ESPAsyncWebServer", esp_async_ver: "master" }
|
||||
- { name: "M5Cardputer", flag: "MARAUDER_CARDPUTER", fbqn: "esp32:esp32:esp32s3:PartitionScheme=min_spiffs,FlashSize=8M,PSRAM=disabled", file_name: "m5cardputer", tft: true, tft_file: "User_Setup_marauder_m5cardputer.h", build_dir: "esp32s3", addr: "0x1000", idf_ver: "2.0.11", nimble_ver: "1.3.8", esp_async: "bigbrodude6119/ESPAsyncWebServer", esp_async_ver: "master" }
|
||||
- { name: "ESP32-C5-DevKitC-1", flag: "MARAUDER_C5", fbqn: "esp32:esp32:esp32c5:PartitionScheme=min_spiffs", file_name: "esp32c5devkitc1", tft: false, tft_file: "", build_dir: "esp32c5", addr: "0x2000", idf_ver: "3.3.0", nimble_ver: "2.3.0", esp_async: "bigbrodude6119/ESPAsyncWebServer", esp_async_ver: "master" }
|
||||
- { name: "ESP32-C5-DevKitC-1", flag: "MARAUDER_C5", fbqn: "esp32:esp32:esp32c5:FlashSize=8M,PartitionScheme=min_spiffs,PSRAM=enabled", file_name: "esp32c5devkitc1", tft: false, tft_file: "", build_dir: "esp32c5", addr: "0x2000", idf_ver: "3.3.4", nimble_ver: "2.3.6", esp_async: "bigbrodude6119/ESPAsyncWebServer", esp_async_ver: "master" }
|
||||
|
||||
steps:
|
||||
- name: Checkout Code
|
||||
@@ -183,7 +183,7 @@ jobs:
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
repository: adafruit/Adafruit_NeoPixel
|
||||
ref: 1.10.7
|
||||
ref: 1.12.0
|
||||
path: CustomAdafruit_NeoPixel
|
||||
|
||||
- name: Install ArduinoJson
|
||||
@@ -252,7 +252,7 @@ jobs:
|
||||
done
|
||||
fi
|
||||
|
||||
if [[ ${{ matrix.board.idf_ver }} == "3.3.0" ]]; then
|
||||
if [[ ${{ matrix.board.idf_ver }} == "3.3.4" ]]; then
|
||||
for i in $(find /home/runner/.arduino15/packages/esp32/hardware/esp32/ -name "platform.txt"); do
|
||||
sed -i 's/compiler.c.elf.extra_flags=/compiler.c.elf.extra_flags=-Wl,-zmuldefs /' "$i"
|
||||
done
|
||||
@@ -289,6 +289,7 @@ jobs:
|
||||
|
||||
echo "artifact_name=$OUTPUT_BIN" >> $GITHUB_ENV
|
||||
echo "artifact_path=$BUILD_DIR/$OUTPUT_BIN" >> $GITHUB_ENV
|
||||
echo "wild_card=esp32_marauder_${VERSION}_beta_${DATE}_*.bin" >> $GITHUB_ENV
|
||||
|
||||
- name: Upload ${{ matrix.board.name }} Artifact
|
||||
uses: actions/upload-artifact@v4
|
||||
@@ -314,6 +315,8 @@ jobs:
|
||||
id: meta
|
||||
shell: bash
|
||||
run: |
|
||||
VERSION=$(grep '#define MARAUDER_VERSION' ./esp32_marauder/configs.h | sed -E 's/.*"v([^"]+)"/v\1/' | tr '.' '_')
|
||||
DATE=$(date +%Y%m%d)
|
||||
SHORT_SHA="$(git rev-parse --short HEAD)"
|
||||
if [[ "${{ github.event_name }}" == "schedule" ]]; then
|
||||
echo "name=${SHORT_SHA}_nightly" >> $GITHUB_OUTPUT
|
||||
@@ -326,6 +329,10 @@ jobs:
|
||||
echo "prerelease=false" >> $GITHUB_OUTPUT
|
||||
fi
|
||||
|
||||
echo "wild_card=esp32_marauder_${VERSION}_beta_${DATE}_*.bin" >> $GITHUB_ENV
|
||||
|
||||
echo ${{ env.wild_card }}
|
||||
|
||||
- name: Delete old assets on nightly release (if any)
|
||||
uses: actions/github-script@v7
|
||||
with:
|
||||
@@ -354,12 +361,12 @@ jobs:
|
||||
uses: softprops/action-gh-release@v1
|
||||
with:
|
||||
name: ${{ needs.decide.outputs.short_sha }}_nightly
|
||||
tag_name: nightly
|
||||
tag_name: nightly_${{ needs.decide.outputs.short_sha }}
|
||||
prerelease: true
|
||||
generate_release_notes: true
|
||||
generate_release_notes: false
|
||||
draft: false
|
||||
files: |
|
||||
esp32_marauder_v*.bin
|
||||
${{ env.wild_card }}
|
||||
body: |
|
||||
[justcallmekokollc.com](https://justcallmekokollc.com)
|
||||
|
||||
|
||||
1
FlashFiles/flash_cmd.txt
Normal file
1
FlashFiles/flash_cmd.txt
Normal file
@@ -0,0 +1 @@
|
||||
./esptool.exe --chip esp32 --port COM4 --baud 921600 write_flash -z 0x1000 /c/Users/culrP/Downloads/esp32_marauder.ino.bootloader.bin 0x8000 /c/Users/culrP/Downloads/esp32_marauder.ino.partitions.bin 0xE000 /c/Users/culrP/Downloads/boot_app0.bin 0x10000 /c/Users/culrP/Downloads/esp32_marauder_v1_8_9_20251030_v6_1.bin
|
||||
@@ -233,6 +233,12 @@ PROGMEM static const unsigned char menu_icons[][66] = {
|
||||
0x7B, 0x3E, 0x37, 0x7B, 0xBF, 0x37, 0xFB, 0xF7, 0x37, 0xFB, 0xF7, 0x37,
|
||||
0xFB, 0xF3, 0x37, 0xBB, 0x7F, 0x37, 0x37, 0x3F, 0x3B, 0x77, 0x80, 0x3B,
|
||||
0xEF, 0xE1, 0x3D, 0xDF, 0xFF, 0x3E, 0x3F, 0x3F, 0x3F, 0xFF, 0xC0, 0x3F,
|
||||
0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0x3F},
|
||||
{0xFF, 0xFF, 0x3F, 0xFF, 0xE0, 0x3F, 0x3F, 0x9F, 0x3F, 0xBF, 0xBF, 0x3F, // FLOCK: 41
|
||||
0xDF, 0x71, 0x3F, 0xDF, 0x6E, 0x3F, 0xDF, 0x6E, 0x3F, 0xDF, 0x6E, 0x3F,
|
||||
0xDF, 0x71, 0x3F, 0xDF, 0x7B, 0x3F, 0xDF, 0x7F, 0x3F, 0xDF, 0x7F, 0x3F,
|
||||
0xDF, 0x7F, 0x3F, 0xBF, 0xBF, 0x3F, 0xBF, 0xBB, 0x3F, 0x3F, 0x9B, 0x3F,
|
||||
0x7F, 0xDF, 0x3F, 0x7F, 0xDF, 0x3F, 0x7F, 0xDF, 0x3F, 0xFF, 0xE0, 0x3F,
|
||||
0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0x3F}
|
||||
};
|
||||
|
||||
|
||||
@@ -262,6 +262,10 @@ void CommandLine::runCommand(String input) {
|
||||
Serial.println(HELP_SAVE_CMD);
|
||||
Serial.println(HELP_LOAD_CMD);
|
||||
Serial.println(HELP_JOIN_CMD);
|
||||
Serial.println(HELP_MAC_CMD_A);
|
||||
Serial.println(HELP_MAC_CMD_B);
|
||||
Serial.println(HELP_MAC_CMD_C);
|
||||
Serial.println(HELP_MAC_CMD_D);
|
||||
|
||||
// Bluetooth sniff/scan
|
||||
#ifdef HAS_BT
|
||||
@@ -304,15 +308,15 @@ 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
|
||||
display_obj.tft.init();
|
||||
display_obj.init();
|
||||
menu_function_obj.changeMenu(menu_function_obj.current_menu);
|
||||
#endif
|
||||
}
|
||||
@@ -371,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);
|
||||
@@ -387,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;
|
||||
@@ -397,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
|
||||
}
|
||||
@@ -409,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);
|
||||
}
|
||||
@@ -440,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
|
||||
@@ -449,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
|
||||
}
|
||||
@@ -520,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;
|
||||
}
|
||||
|
||||
@@ -532,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();
|
||||
}
|
||||
|
||||
@@ -565,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();
|
||||
@@ -574,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
|
||||
@@ -593,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;
|
||||
}
|
||||
|
||||
@@ -614,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;
|
||||
}
|
||||
|
||||
@@ -809,6 +823,81 @@ void CommandLine::runCommand(String input) {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//// MAC Address commands (Added by H4W9_4)
|
||||
// Generate random MAC for AP
|
||||
if (cmd_args.get(0) == MAC_CMD_A) {
|
||||
#ifdef HAS_SCREEN
|
||||
display_obj.clearScreen();
|
||||
menu_function_obj.drawStatusBar();
|
||||
#endif
|
||||
wifi_scan_obj.RunGenerateRandomMac(true);
|
||||
}
|
||||
|
||||
// Generate random MAC for STA
|
||||
else if (cmd_args.get(0) == MAC_CMD_B) {
|
||||
//Serial.println("Setting STA MAC: " + macToString(this->sta_mac));
|
||||
#ifdef HAS_SCREEN
|
||||
display_obj.clearScreen();
|
||||
menu_function_obj.drawStatusBar();
|
||||
#endif
|
||||
wifi_scan_obj.RunGenerateRandomMac(false);
|
||||
}
|
||||
|
||||
// Clone MAC for AP
|
||||
else if (cmd_args.get(0) == MAC_CMD_C) {
|
||||
int ap_sw = this->argSearch(&cmd_args, "-a"); // APs
|
||||
|
||||
if (ap_sw == -1) {
|
||||
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(F("The provided index was not in range"));
|
||||
return;
|
||||
}
|
||||
|
||||
if (ap_sw != -1) {
|
||||
#ifdef HAS_SCREEN
|
||||
display_obj.clearScreen();
|
||||
menu_function_obj.drawStatusBar();
|
||||
#endif
|
||||
int filter_ap = cmd_args.get(ap_sw + 1).toInt();
|
||||
wifi_scan_obj.RunSetMac(access_points->get(filter_ap).bssid, true);
|
||||
}
|
||||
}
|
||||
|
||||
// Clone MAC for STA
|
||||
else if (cmd_args.get(0) == MAC_CMD_D) {
|
||||
int cl_sw = this->argSearch(&cmd_args, "-s"); // Stations
|
||||
|
||||
if (cl_sw == -1) {
|
||||
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(F("The provided index was not in range"));
|
||||
return;
|
||||
}
|
||||
|
||||
if (cl_sw != -1) {
|
||||
#ifdef HAS_SCREEN
|
||||
display_obj.clearScreen();
|
||||
menu_function_obj.drawStatusBar();
|
||||
#endif
|
||||
int filter_sta = cmd_args.get(cl_sw + 1).toInt();
|
||||
wifi_scan_obj.RunSetMac(stations->get(filter_sta).mac, false);
|
||||
}
|
||||
}
|
||||
//// End MAC Address commands (Added by H4W9_4)
|
||||
|
||||
|
||||
//// WiFi attack commands
|
||||
// attack
|
||||
if (cmd_args.get(0) == ATTACK_CMD) {
|
||||
@@ -821,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 {
|
||||
@@ -832,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
|
||||
@@ -842,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) {
|
||||
@@ -987,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;
|
||||
}
|
||||
}
|
||||
@@ -1022,6 +1111,14 @@ void CommandLine::runCommand(String input) {
|
||||
#endif
|
||||
wifi_scan_obj.StartScan(BT_SCAN_FLIPPER, TFT_ORANGE);
|
||||
}
|
||||
else if (bt_type == "flock") {
|
||||
Serial.println("Starting Flock sniff. Stop with " + (String)STOPSCAN_CMD);
|
||||
#ifdef HAS_SCREEN
|
||||
display_obj.clearScreen();
|
||||
menu_function_obj.drawStatusBar();
|
||||
#endif
|
||||
wifi_scan_obj.StartScan(BT_SCAN_FLOCK, TFT_ORANGE);
|
||||
}
|
||||
}
|
||||
// General bluetooth sniff
|
||||
else {
|
||||
@@ -1033,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) {
|
||||
@@ -1078,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") {
|
||||
@@ -1090,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") {
|
||||
@@ -1102,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") {
|
||||
@@ -1114,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") {
|
||||
@@ -1126,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") {
|
||||
@@ -1138,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"));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1170,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
|
||||
|
||||
}
|
||||
@@ -1189,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
|
||||
}
|
||||
|
||||
@@ -1211,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
|
||||
}
|
||||
@@ -1236,12 +1333,14 @@ void CommandLine::runCommand(String input) {
|
||||
}
|
||||
|
||||
if (cmd_args.get(0) == ARP_SCAN_CMD) {
|
||||
Serial.println("Starting ARP Scan. Stop with " + (String)STOPSCAN_CMD);
|
||||
#ifdef HAS_SCREEN
|
||||
display_obj.clearScreen();
|
||||
menu_function_obj.drawStatusBar();
|
||||
#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
|
||||
wifi_scan_obj.StartScan(WIFI_ARP_SCAN, TFT_CYAN);
|
||||
}
|
||||
|
||||
// GPS POI
|
||||
@@ -1289,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
|
||||
}
|
||||
@@ -1319,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;
|
||||
}
|
||||
}
|
||||
@@ -1351,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;
|
||||
}
|
||||
}
|
||||
@@ -1438,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;
|
||||
}
|
||||
}
|
||||
@@ -1486,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;
|
||||
}
|
||||
}
|
||||
@@ -1660,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;
|
||||
}
|
||||
}
|
||||
@@ -1719,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
|
||||
@@ -1732,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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -97,6 +97,10 @@ const char PROGMEM SSID_CMD[] = "ssid";
|
||||
const char PROGMEM SAVE_CMD[] = "save";
|
||||
const char PROGMEM LOAD_CMD[] = "load";
|
||||
const char PROGMEM JOIN_CMD[] = "join";
|
||||
const char PROGMEM MAC_CMD_A[] = "randapmac";
|
||||
const char PROGMEM MAC_CMD_B[] = "randstamac";
|
||||
const char PROGMEM MAC_CMD_C[] = "cloneapmac";
|
||||
const char PROGMEM MAC_CMD_D[] = "clonestamac";
|
||||
|
||||
// Bluetooth sniff/scan
|
||||
const char PROGMEM BT_SPAM_CMD[] = "blespam";
|
||||
@@ -144,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]";
|
||||
@@ -166,9 +170,13 @@ const char PROGMEM HELP_SSID_CMD_B[] = "ssid -r <index>";
|
||||
const char PROGMEM HELP_SAVE_CMD[] = "save -a/-s";
|
||||
const char PROGMEM HELP_LOAD_CMD[] = "load -a/-s";
|
||||
const char PROGMEM HELP_JOIN_CMD[] = "join -a <index> -p <password>/-s";
|
||||
const char PROGMEM HELP_MAC_CMD_A[] = "randapmac";
|
||||
const char PROGMEM HELP_MAC_CMD_B[] = "randstamac";
|
||||
const char PROGMEM HELP_MAC_CMD_C[] = "cloneapmac [-a <index>]";
|
||||
const char PROGMEM HELP_MAC_CMD_D[] = "clonestamac [-s <index>]";
|
||||
|
||||
// Bluetooth sniff/scan
|
||||
const char PROGMEM HELP_BT_SNIFF_CMD[] = "sniffbt [-t] <airtag/flipper>";
|
||||
const char PROGMEM HELP_BT_SNIFF_CMD[] = "sniffbt [-t] <airtag/flipper/flock>";
|
||||
const char PROGMEM HELP_BT_SPAM_CMD[] = "blespam -t <apple/google/samsung/windows/flipper/all>";
|
||||
const char PROGMEM HELP_BT_SPOOFAT_CMD[] = "spoofat -t <index>";
|
||||
//const char PROGMEM HELP_BT_SOUR_APPLE_CMD[] = "sourapple";
|
||||
|
||||
@@ -109,6 +109,47 @@ bool Display::isTouchHeld(uint16_t threshold) {
|
||||
return false;
|
||||
}
|
||||
|
||||
void Display::init() {
|
||||
tft.init();
|
||||
|
||||
#ifdef HAS_DUAL_BAND
|
||||
digitalWrite(TFT_BL, HIGH);
|
||||
#endif
|
||||
}
|
||||
|
||||
void Display::setCalData(bool landscape) {
|
||||
#ifndef HAS_CYD_TOUCH
|
||||
if (!landscape) {
|
||||
#ifdef TFT_SHIELD
|
||||
uint16_t calData[5] = { 275, 3494, 361, 3528, 4 }; // tft.setRotation(0); // Portrait with TFT Shield
|
||||
#elif defined(MARAUDER_CYD_3_5_INCH)
|
||||
uint16_t calData[5] = { 239, 3560, 262, 3643, 4 };
|
||||
#elif defined(MARAUDER_V8)
|
||||
uint16_t calData[5] = { 351, 3279, 214, 3394, 2 };
|
||||
#elif defined(TFT_DIY)
|
||||
uint16_t calData[5] = { 339, 3470, 237, 3438, 2 }; // tft.setRotation(0); // Portrait with DIY TFT
|
||||
#endif
|
||||
#ifdef HAS_ILI9341
|
||||
tft.setTouch(calData);
|
||||
#endif
|
||||
}
|
||||
else {
|
||||
#ifdef TFT_SHIELD
|
||||
uint16_t calData[5] = { 391, 3491, 266, 3505, 7 }; // Landscape TFT Shield
|
||||
#elif defined(MARAUDER_CYD_3_5_INCH)
|
||||
uint16_t calData[5] = { 272, 3648, 234, 3565, 7 };
|
||||
#elif defined(MARAUDER_V8)
|
||||
uint16_t calData[5] = { 213, 3396, 350, 3275, 1 };
|
||||
#else if defined(TFT_DIY)
|
||||
uint16_t calData[5] = { 213, 3469, 320, 3446, 1 }; // Landscape TFT DIY
|
||||
#endif
|
||||
#ifdef HAS_ILI9341
|
||||
tft.setTouch(calData);
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
// Function to prepare the display and the menus
|
||||
void Display::RunSetup()
|
||||
{
|
||||
@@ -136,14 +177,7 @@ void Display::RunSetup()
|
||||
#ifdef HAS_ILI9341
|
||||
|
||||
#ifndef HAS_CYD_TOUCH
|
||||
#ifdef TFT_SHIELD
|
||||
uint16_t calData[5] = { 275, 3494, 361, 3528, 4 }; // tft.setRotation(0); // Portrait with TFT Shield
|
||||
#elif defined(MARAUDER_CYD_3_5_INCH)
|
||||
uint16_t calData[5] = { 239, 3560, 262, 3643, 4 };
|
||||
#elif defined(TFT_DIY)
|
||||
uint16_t calData[5] = { 339, 3470, 237, 3438, 2 }; // tft.setRotation(0); // Portrait with DIY TFT
|
||||
#endif
|
||||
tft.setTouch(calData);
|
||||
this->setCalData();
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -203,11 +237,16 @@ void Display::tftDrawGraphObjects(byte x_scale)
|
||||
tft.setCursor(3, 228); tft.print("0"); // "-" at bottom of y axis
|
||||
}
|
||||
|
||||
void Display::tftDrawEapolColorKey()
|
||||
void Display::tftDrawEapolColorKey(bool filter)
|
||||
{
|
||||
//Display color key
|
||||
tft.setTextSize(1); tft.setTextColor(TFT_WHITE);
|
||||
tft.fillRect(14, 0, 15, 8, TFT_CYAN); tft.setCursor(30, 0); tft.print(" - EAPOL");
|
||||
tft.fillRect(14, 0, 15, 8, TFT_CYAN); tft.setCursor(30, 0); tft.println(" - EAPOL");
|
||||
if (filter) {
|
||||
uint16_t y = tft.getCursorY();
|
||||
tft.setCursor(14, y);
|
||||
tft.println("Filter Active");
|
||||
}
|
||||
}
|
||||
|
||||
void Display::tftDrawColorKey()
|
||||
@@ -1006,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"
|
||||
@@ -124,7 +124,7 @@ class Display
|
||||
void tftDrawRedOnOffButton();
|
||||
void tftDrawGreenOnOffButton();
|
||||
void tftDrawGraphObjects(byte x_scale);
|
||||
void tftDrawEapolColorKey();
|
||||
void tftDrawEapolColorKey(bool filter = false);
|
||||
void tftDrawColorKey();
|
||||
void tftDrawXScaleButtons(byte x_scale);
|
||||
void tftDrawYScaleButtons(byte y_scale);
|
||||
@@ -140,6 +140,7 @@ class Display
|
||||
//void jpegRender(int xpos, int ypos);
|
||||
void listDir(fs::FS &fs, const char * dirname, uint8_t levels);
|
||||
void listFiles();
|
||||
void init();
|
||||
void main(uint8_t scan_mode);
|
||||
void RunSetup();
|
||||
void scrollAddress(uint16_t vsp);
|
||||
@@ -149,6 +150,7 @@ class Display
|
||||
void touchToExit();
|
||||
void twoPartDisplay(String center_text);
|
||||
void updateBanner(String msg);
|
||||
void setCalData(bool landscape = false);
|
||||
};
|
||||
#endif
|
||||
#endif
|
||||
|
||||
@@ -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)){
|
||||
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);
|
||||
#ifdef HAS_SCREEN
|
||||
this->sendToDisplay(full_string);
|
||||
#endif
|
||||
}
|
||||
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;
|
||||
|
||||
// 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(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
|
||||
@@ -93,42 +97,12 @@ extern Settings settings_obj;
|
||||
#define JOINED 38
|
||||
#define FORCE 39
|
||||
#define FUNNY_BEACON 40
|
||||
|
||||
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;
|
||||
#define FLOCK 41
|
||||
|
||||
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;
|
||||
@@ -174,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
|
||||
@@ -194,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
|
||||
@@ -223,15 +197,23 @@ class MenuFunctions
|
||||
|
||||
// Menu icons
|
||||
|
||||
void setupSDFileList();
|
||||
void buildSDFileMenu();
|
||||
void setupSDFileList(bool update = false);
|
||||
void buildSDFileMenu(bool update = false);
|
||||
void displayMenuButtons();
|
||||
uint16_t getColor(uint16_t color);
|
||||
void drawAvgLine(int16_t value);
|
||||
void drawMaxLine(int16_t value, uint16_t color);
|
||||
void drawMaxLine(uint8_t value, uint16_t color);
|
||||
float calculateGraphScale(int16_t value);
|
||||
float calculateGraphScale(uint8_t value);
|
||||
float graphScaleCheck(const int16_t array[TFT_WIDTH]);
|
||||
#ifndef HAS_DUAL_BAND
|
||||
float graphScaleCheckSmall(const uint8_t array[MAX_CHANNEL]);
|
||||
#else
|
||||
float graphScaleCheckSmall(const uint8_t array[DUAL_BAND_CHANNELS]);
|
||||
#endif
|
||||
void drawGraph(int16_t *values);
|
||||
void drawGraphSmall(uint8_t *values);
|
||||
void renderGraphUI(uint8_t scan_mode = 0);
|
||||
//void addNodes(Menu* menu, String name, uint16_t color, Menu* child, int place, std::function<void()> callable, bool selected = false, String command = "");
|
||||
void addNodes(Menu* menu, String name, uint8_t color, Menu* child, int place, std::function<void()> callable, bool selected = false, String command = "");
|
||||
@@ -244,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
|
||||
@@ -287,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
|
||||
}
|
||||
@@ -165,7 +165,10 @@ void SDInterface::listDir(String str_dir){
|
||||
}
|
||||
}
|
||||
|
||||
void SDInterface::runUpdate() {
|
||||
void SDInterface::runUpdate(String file_name) {
|
||||
if (file_name == "")
|
||||
file_name = "/update.bin";
|
||||
|
||||
#ifdef HAS_SCREEN
|
||||
display_obj.tft.setTextWrap(false);
|
||||
display_obj.tft.setFreeFont(NULL);
|
||||
@@ -173,16 +176,18 @@ void SDInterface::runUpdate() {
|
||||
display_obj.tft.setTextSize(1);
|
||||
display_obj.tft.setTextColor(TFT_WHITE);
|
||||
|
||||
display_obj.tft.println(F(text15));
|
||||
display_obj.tft.println("Opening " + file_name + "...");
|
||||
#endif
|
||||
File updateBin = SD.open("/update.bin");
|
||||
|
||||
File updateBin = SD.open(file_name);
|
||||
|
||||
if (updateBin) {
|
||||
if(updateBin.isDirectory()){
|
||||
#ifdef HAS_SCREEN
|
||||
display_obj.tft.setTextColor(TFT_RED);
|
||||
display_obj.tft.println(F(text_table2[0]));
|
||||
#endif
|
||||
Serial.println(F("Error, could not find \"update.bin\""));
|
||||
Serial.println("Error, could not find \"" + file_name + "\"");
|
||||
#ifdef HAS_SCREEN
|
||||
display_obj.tft.setTextColor(TFT_WHITE);
|
||||
#endif
|
||||
@@ -275,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
|
||||
@@ -294,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"));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -65,7 +65,7 @@ class SDInterface {
|
||||
void listDir(String str_dir);
|
||||
void listDirToLinkedList(LinkedList<String>* file_names, String str_dir = "/", String ext = "");
|
||||
File getFile(String path);
|
||||
void runUpdate();
|
||||
void runUpdate(String file_name = "");
|
||||
void performUpdate(Stream &updateSource, size_t updateSize);
|
||||
void main();
|
||||
bool removeFile(String file_path);
|
||||
|
||||
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>
|
||||
#include <lwip/etharp.h>
|
||||
#include <lwip/ip_addr.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
|
||||
@@ -136,6 +138,12 @@
|
||||
#define WIFI_SCAN_SMTP 67
|
||||
#define WIFI_SCAN_RDP 68
|
||||
#define WIFI_HOSTSPOT 69 // Nice
|
||||
#define BT_SCAN_AIRTAG_MON 70
|
||||
#define WIFI_SCAN_CHAN_ACT 71
|
||||
#define BT_SCAN_FLOCK 72
|
||||
#define BT_SCAN_SIMPLE 73
|
||||
#define BT_SCAN_SIMPLE_TWO 74
|
||||
#define BT_SCAN_FLOCK_WARDRIVE 75
|
||||
|
||||
#define WIFI_ATTACK_FUNNY_BEACON 99
|
||||
|
||||
@@ -216,6 +224,8 @@ struct AirTag {
|
||||
std::vector<uint8_t> payload; // Payload data
|
||||
uint16_t payloadSize;
|
||||
bool selected;
|
||||
int8_t rssi;
|
||||
uint32_t last_seen;
|
||||
};
|
||||
|
||||
struct Flipper {
|
||||
@@ -236,6 +246,8 @@ class WiFiScan
|
||||
struct mac_addr mac_history[mac_history_len];
|
||||
#endif
|
||||
|
||||
uint32_t chanActTime = 0;
|
||||
|
||||
uint8_t ap_mac[6] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
|
||||
uint8_t sta_mac[6] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
|
||||
|
||||
@@ -513,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);
|
||||
@@ -525,9 +539,7 @@ class WiFiScan
|
||||
bool beaconHasWPS(const uint8_t* payload, int len);
|
||||
uint8_t getSecurityType(const uint8_t* beacon, uint16_t len);
|
||||
void addAnalyzerValue(int16_t value, int rssi_avg, int16_t target_array[], int array_size);
|
||||
bool seen_mac(unsigned char* mac);
|
||||
bool mac_cmp(struct mac_addr addr1, struct mac_addr addr2);
|
||||
void save_mac(unsigned char* mac);
|
||||
void clearMacHistory();
|
||||
void executeWarDrive();
|
||||
void executeSourApple();
|
||||
@@ -542,6 +554,7 @@ class WiFiScan
|
||||
|
||||
void signalAnalyzerLoop(uint32_t tick);
|
||||
void channelAnalyzerLoop(uint32_t tick);
|
||||
void channelActivityLoop(uint32_t tick);
|
||||
void packetRateLoop(uint32_t tick);
|
||||
void packetMonitorMain(uint32_t currentTime);
|
||||
void eapolMonitorMain(uint32_t currentTime);
|
||||
@@ -581,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);
|
||||
@@ -609,10 +621,28 @@ class WiFiScan
|
||||
int8_t min_rssi = 0;
|
||||
int8_t max_rssi = -128;
|
||||
|
||||
int bt_frames = 0;
|
||||
|
||||
bool force_pmkid = false;
|
||||
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] = {};
|
||||
#else
|
||||
uint8_t channel_activity[MAX_CHANNEL] = {};
|
||||
#endif
|
||||
|
||||
uint8_t activity_page = 1;
|
||||
|
||||
String analyzer_name_string = "";
|
||||
|
||||
@@ -696,9 +726,16 @@ class WiFiScan
|
||||
|
||||
wifi_config_t ap_config;
|
||||
|
||||
void drawChannelLine();
|
||||
#ifdef HAS_SCREEN
|
||||
int8_t checkAnalyzerButtons(uint32_t currentTime);
|
||||
#endif
|
||||
bool seen_mac(unsigned char* mac);
|
||||
void save_mac(unsigned char* mac);
|
||||
#ifdef HAS_BT
|
||||
void copyNimbleMac(const BLEAddress &addr, unsigned char out[6]);
|
||||
#endif
|
||||
bool filterActive();
|
||||
bool RunGPSInfo(bool tracker = false, bool display = true, bool poi = false);
|
||||
void logPoint(String lat, String lon, float alt, String datetime, bool poi = false);
|
||||
void setMac();
|
||||
@@ -744,7 +781,7 @@ class WiFiScan
|
||||
void RunSaveATList(bool save_as = true);
|
||||
void RunLoadATList();
|
||||
void RunSetupGPSTracker(uint8_t scan_mode);
|
||||
void channelHop();
|
||||
void channelHop(bool filtered = false, bool ranged = false);
|
||||
uint8_t currentScanMode = 0;
|
||||
void main(uint32_t currentTime);
|
||||
void StartScan(uint8_t scan_mode, uint16_t color = 0);
|
||||
@@ -761,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);
|
||||
|
||||
@@ -29,9 +29,10 @@
|
||||
//#define MARAUDER_CYD_3_5_INCH
|
||||
//#define MARAUDER_C5
|
||||
//#define MARAUDER_CARDPUTER
|
||||
//#define MARAUDER_V8
|
||||
//// END BOARD TARGETS
|
||||
|
||||
#define MARAUDER_VERSION "v1.8.7"
|
||||
#define MARAUDER_VERSION "v1.9.0"
|
||||
|
||||
#define GRAPH_REFRESH 100
|
||||
|
||||
@@ -80,6 +81,8 @@
|
||||
#define HARDWARE_NAME "XIAO ESP32 S3"
|
||||
#elif defined(MARAUDER_C5)
|
||||
#define HARDWARE_NAME "ESP32-C5 DevKit"
|
||||
#elif defined(MARAUDER_V8)
|
||||
#define HARDWARE_NAME "Marauder v8"
|
||||
#else
|
||||
#define HARDWARE_NAME "ESP32"
|
||||
#endif
|
||||
@@ -223,7 +226,7 @@
|
||||
#define HAS_TOUCH
|
||||
#define HAS_FLIPPER_LED
|
||||
//#define FLIPPER_ZERO_HAT
|
||||
#define HAS_BATTERY
|
||||
//#define HAS_BATTERY
|
||||
#define HAS_BT
|
||||
#define HAS_BT_REMOTE
|
||||
#define HAS_BUTTONS
|
||||
@@ -242,7 +245,7 @@
|
||||
#define HAS_TOUCH
|
||||
#define HAS_FLIPPER_LED
|
||||
//#define FLIPPER_ZERO_HAT
|
||||
#define HAS_BATTERY
|
||||
//#define HAS_BATTERY
|
||||
#define HAS_BT
|
||||
#define HAS_BT_REMOTE
|
||||
#define HAS_BUTTONS
|
||||
@@ -262,7 +265,7 @@
|
||||
#define HAS_TOUCH
|
||||
#define HAS_FLIPPER_LED
|
||||
//#define FLIPPER_ZERO_HAT
|
||||
#define HAS_BATTERY
|
||||
//#define HAS_BATTERY
|
||||
#define HAS_BT
|
||||
#define HAS_BT_REMOTE
|
||||
#define HAS_BUTTONS
|
||||
@@ -404,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
|
||||
@@ -417,6 +420,26 @@
|
||||
//#define HAS_PSRAM
|
||||
//#define HAS_TEMP_SENSOR
|
||||
#endif
|
||||
|
||||
#ifdef MARAUDER_V8
|
||||
#define HAS_TOUCH
|
||||
//#define HAS_FLIPPER_LED
|
||||
//#define FLIPPER_ZERO_HAT
|
||||
#define HAS_BATTERY
|
||||
#define HAS_BT
|
||||
//#define HAS_BUTTONS
|
||||
//#define HAS_NEOPIXEL_LED
|
||||
//#define HAS_PWR_MGMT
|
||||
#define HAS_SCREEN
|
||||
#define HAS_FULL_SCREEN
|
||||
#define HAS_GPS
|
||||
#define HAS_C5_SD
|
||||
#define HAS_SD
|
||||
#define USE_SD
|
||||
#define HAS_DUAL_BAND
|
||||
#define HAS_PSRAM
|
||||
//#define HAS_TEMP_SENSOR
|
||||
#endif
|
||||
//// END BOARD FEATURES
|
||||
|
||||
//// POWER MANAGEMENT
|
||||
@@ -688,6 +711,8 @@
|
||||
#ifdef HAS_SCREEN
|
||||
|
||||
#ifdef MARAUDER_M5STICKC
|
||||
#define CHAN_PER_PAGE 7
|
||||
|
||||
#define SCREEN_CHAR_WIDTH 40
|
||||
//#define TFT_MISO 19
|
||||
#define TFT_MOSI 15
|
||||
@@ -713,7 +738,7 @@
|
||||
#define TFT_HEIGHT 240
|
||||
#endif
|
||||
|
||||
#define GRAPH_VERT_LIM TFT_HEIGHT/2
|
||||
#define GRAPH_VERT_LIM TFT_HEIGHT/2 - 1
|
||||
|
||||
#define EXT_BUTTON_WIDTH 0
|
||||
|
||||
@@ -762,6 +787,8 @@
|
||||
#endif
|
||||
|
||||
#if defined(MARAUDER_M5STICKCP2)
|
||||
#define CHAN_PER_PAGE 7
|
||||
|
||||
#define MARAUDER_M5STICKC // From now on, everything is the same, except for one check in esp32_marauder.ino amd stickc_led.cpp/h
|
||||
|
||||
#define SCREEN_CHAR_WIDTH 40
|
||||
@@ -787,7 +814,7 @@
|
||||
#define TFT_HEIGHT 240
|
||||
#endif
|
||||
|
||||
#define GRAPH_VERT_LIM TFT_HEIGHT/2
|
||||
#define GRAPH_VERT_LIM TFT_HEIGHT/2 - 1
|
||||
|
||||
#define EXT_BUTTON_WIDTH 0
|
||||
|
||||
@@ -836,6 +863,8 @@
|
||||
#endif
|
||||
|
||||
#ifdef MARAUDER_CARDPUTER
|
||||
#define CHAN_PER_PAGE 7
|
||||
|
||||
#define SCREEN_CHAR_WIDTH 40
|
||||
//#define TFT_MISO -1
|
||||
#define TFT_MOSI 35
|
||||
@@ -860,7 +889,7 @@
|
||||
#define TFT_HEIGHT 240
|
||||
#endif
|
||||
|
||||
#define GRAPH_VERT_LIM TFT_HEIGHT/2
|
||||
#define GRAPH_VERT_LIM TFT_HEIGHT/2 - 1
|
||||
|
||||
#define EXT_BUTTON_WIDTH 0
|
||||
|
||||
@@ -909,6 +938,8 @@
|
||||
#endif
|
||||
|
||||
#ifdef MARAUDER_V4
|
||||
#define CHAN_PER_PAGE 7
|
||||
|
||||
#define SCREEN_CHAR_WIDTH 40
|
||||
#define HAS_ILI9341
|
||||
#define BANNER_TEXT_SIZE 2
|
||||
@@ -923,7 +954,7 @@
|
||||
|
||||
#define TFT_SHIELD
|
||||
|
||||
#define GRAPH_VERT_LIM TFT_HEIGHT/2
|
||||
#define GRAPH_VERT_LIM TFT_HEIGHT/2 - 1
|
||||
|
||||
#define EXT_BUTTON_WIDTH 20
|
||||
|
||||
@@ -973,6 +1004,8 @@
|
||||
#endif
|
||||
|
||||
#if defined(MARAUDER_V6) || defined(MARAUDER_V6_1)
|
||||
#define CHAN_PER_PAGE 7
|
||||
|
||||
#define SCREEN_CHAR_WIDTH 40
|
||||
#define HAS_ILI9341
|
||||
|
||||
@@ -987,10 +1020,84 @@
|
||||
#endif
|
||||
|
||||
#ifndef MARAUDER_CYD_MICRO
|
||||
#define TFT_DIY
|
||||
#define TFT_DIY
|
||||
#endif
|
||||
|
||||
#define GRAPH_VERT_LIM TFT_HEIGHT/2
|
||||
#define GRAPH_VERT_LIM TFT_HEIGHT/2 - 1
|
||||
|
||||
#define EXT_BUTTON_WIDTH 20
|
||||
|
||||
#define SCREEN_BUFFER
|
||||
|
||||
#define MAX_SCREEN_BUFFER 22
|
||||
|
||||
#define SCREEN_ORIENTATION 0
|
||||
|
||||
#define CHAR_WIDTH 12
|
||||
#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_SCREEN_LIMIT 12
|
||||
#define BUTTON_ARRAY_LEN BUTTON_SCREEN_LIMIT
|
||||
#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
|
||||
|
||||
#if defined(MARAUDER_V8)
|
||||
#define CHAN_PER_PAGE 7
|
||||
|
||||
#define SCREEN_CHAR_WIDTH 40
|
||||
#define HAS_ILI9341
|
||||
|
||||
#define BANNER_TEXT_SIZE 2
|
||||
|
||||
#ifndef TFT_WIDTH
|
||||
#define TFT_WIDTH 240
|
||||
#endif
|
||||
|
||||
#ifndef TFT_HEIGHT
|
||||
#define TFT_HEIGHT 320
|
||||
#endif
|
||||
|
||||
//#ifndef MARAUDER_CYD_MICRO
|
||||
//#define TFT_DIY
|
||||
//#define TFT_SHIELD
|
||||
//#endif
|
||||
|
||||
#define GRAPH_VERT_LIM TFT_HEIGHT/2 - 1
|
||||
|
||||
#define EXT_BUTTON_WIDTH 20
|
||||
|
||||
@@ -1044,6 +1151,8 @@
|
||||
#endif
|
||||
|
||||
#if defined(MARAUDER_CYD_MICRO)
|
||||
#define CHAN_PER_PAGE 7
|
||||
|
||||
#define SCREEN_CHAR_WIDTH 40
|
||||
#define HAS_ILI9341
|
||||
|
||||
@@ -1057,7 +1166,7 @@
|
||||
#define TFT_HEIGHT 320
|
||||
#endif
|
||||
|
||||
#define GRAPH_VERT_LIM TFT_HEIGHT/2
|
||||
#define GRAPH_VERT_LIM TFT_HEIGHT/2 - 1
|
||||
|
||||
#define EXT_BUTTON_WIDTH 20
|
||||
|
||||
@@ -1111,6 +1220,8 @@
|
||||
#endif
|
||||
|
||||
#if defined(MARAUDER_CYD_2USB)
|
||||
#define CHAN_PER_PAGE 7
|
||||
|
||||
#define SCREEN_CHAR_WIDTH 40
|
||||
#define HAS_ILI9341
|
||||
#define HAS_ST7789
|
||||
@@ -1125,7 +1236,7 @@
|
||||
#define TFT_HEIGHT 320
|
||||
#endif
|
||||
|
||||
#define GRAPH_VERT_LIM TFT_HEIGHT/2
|
||||
#define GRAPH_VERT_LIM TFT_HEIGHT/2 - 1
|
||||
|
||||
#define EXT_BUTTON_WIDTH 20
|
||||
|
||||
@@ -1179,6 +1290,8 @@
|
||||
#endif
|
||||
|
||||
#if defined(MARAUDER_CYD_3_5_INCH)
|
||||
#define CHAN_PER_PAGE 7
|
||||
|
||||
#define SCREEN_CHAR_WIDTH 40
|
||||
#define HAS_ILI9341
|
||||
#define HAS_ST7796
|
||||
@@ -1195,7 +1308,7 @@
|
||||
|
||||
#define TFT_DIY
|
||||
|
||||
#define GRAPH_VERT_LIM TFT_HEIGHT/2
|
||||
#define GRAPH_VERT_LIM TFT_HEIGHT/2 - 1
|
||||
|
||||
#define EXT_BUTTON_WIDTH 20
|
||||
|
||||
@@ -1249,6 +1362,8 @@
|
||||
#endif
|
||||
|
||||
#if defined(MARAUDER_CYD_GUITION)
|
||||
#define CHAN_PER_PAGE 7
|
||||
|
||||
#define SCREEN_CHAR_WIDTH 40
|
||||
#define HAS_ILI9341
|
||||
|
||||
@@ -1264,7 +1379,7 @@
|
||||
|
||||
#define TFT_DIY
|
||||
|
||||
#define GRAPH_VERT_LIM TFT_HEIGHT/2
|
||||
#define GRAPH_VERT_LIM TFT_HEIGHT/2 - 1
|
||||
|
||||
#define EXT_BUTTON_WIDTH 20
|
||||
|
||||
@@ -1318,6 +1433,8 @@
|
||||
#endif
|
||||
|
||||
#ifdef MARAUDER_V7
|
||||
#define CHAN_PER_PAGE 7
|
||||
|
||||
#define SCREEN_CHAR_WIDTH 40
|
||||
//#define HAS_ILI9341
|
||||
|
||||
@@ -1331,7 +1448,7 @@
|
||||
#define TFT_HEIGHT 320
|
||||
#endif
|
||||
|
||||
#define GRAPH_VERT_LIM TFT_HEIGHT/2
|
||||
#define GRAPH_VERT_LIM TFT_HEIGHT/2 - 1
|
||||
|
||||
#define TFT_DIY
|
||||
|
||||
@@ -1387,6 +1504,8 @@
|
||||
#endif
|
||||
|
||||
#ifdef MARAUDER_V7_1
|
||||
#define CHAN_PER_PAGE 7
|
||||
|
||||
#define SCREEN_CHAR_WIDTH 40
|
||||
//#define HAS_ILI9341
|
||||
|
||||
@@ -1400,7 +1519,7 @@
|
||||
#define TFT_HEIGHT 320
|
||||
#endif
|
||||
|
||||
#define GRAPH_VERT_LIM TFT_HEIGHT/2
|
||||
#define GRAPH_VERT_LIM TFT_HEIGHT/2 - 1
|
||||
|
||||
#define TFT_DIY
|
||||
|
||||
@@ -1456,6 +1575,8 @@
|
||||
#endif
|
||||
|
||||
#ifdef MARAUDER_KIT
|
||||
#define CHAN_PER_PAGE 7
|
||||
|
||||
#define SCREEN_CHAR_WIDTH 40
|
||||
#define HAS_ILI9341
|
||||
|
||||
@@ -1469,7 +1590,7 @@
|
||||
#define TFT_HEIGHT 320
|
||||
#endif
|
||||
|
||||
#define GRAPH_VERT_LIM TFT_HEIGHT/2
|
||||
#define GRAPH_VERT_LIM TFT_HEIGHT/2 - 1
|
||||
|
||||
#define TFT_DIY
|
||||
#define KIT
|
||||
@@ -1522,6 +1643,8 @@
|
||||
#endif
|
||||
|
||||
#ifdef MARAUDER_MINI
|
||||
#define CHAN_PER_PAGE 7
|
||||
|
||||
#define SCREEN_CHAR_WIDTH 40
|
||||
#define TFT_MISO 19
|
||||
#define TFT_MOSI 23
|
||||
@@ -1547,7 +1670,7 @@
|
||||
#define TFT_HEIGHT 128
|
||||
#endif
|
||||
|
||||
#define GRAPH_VERT_LIM TFT_HEIGHT/2
|
||||
#define GRAPH_VERT_LIM TFT_HEIGHT/2 - 1
|
||||
|
||||
#define EXT_BUTTON_WIDTH 0
|
||||
|
||||
@@ -1595,6 +1718,8 @@
|
||||
#endif
|
||||
|
||||
#ifdef MARAUDER_REV_FEATHER
|
||||
#define CHAN_PER_PAGE 7
|
||||
|
||||
#define SCREEN_CHAR_WIDTH 40
|
||||
//#define TFT_MISO 37
|
||||
//#define TFT_MOSI 35
|
||||
@@ -1620,7 +1745,7 @@
|
||||
#define TFT_HEIGHT 135
|
||||
#endif
|
||||
|
||||
#define GRAPH_VERT_LIM TFT_HEIGHT/2
|
||||
#define GRAPH_VERT_LIM TFT_HEIGHT/2 - 1
|
||||
|
||||
#define EXT_BUTTON_WIDTH 0
|
||||
|
||||
@@ -1709,6 +1834,25 @@
|
||||
//#define BUTTON_ARRAY_LEN 5
|
||||
#endif
|
||||
|
||||
#if defined(MARAUDER_V8)
|
||||
#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
|
||||
|
||||
#if defined(MARAUDER_CYD_MICRO)
|
||||
#define BANNER_TIME 100
|
||||
|
||||
@@ -2002,6 +2146,10 @@
|
||||
#define SD_CS 10
|
||||
#endif
|
||||
|
||||
#ifdef MARAUDER_V8
|
||||
#define SD_CS 10
|
||||
#endif
|
||||
|
||||
#endif
|
||||
//// END SD DEFINITIONS
|
||||
|
||||
@@ -2048,6 +2196,8 @@
|
||||
#define STANDARD_FONT_CHAR_LIMIT 40
|
||||
#define FLASH_BUTTON -1
|
||||
|
||||
#define CHAN_PER_PAGE 7
|
||||
|
||||
#include <FS.h>
|
||||
#include <functional>
|
||||
#include <LinkedList.h>
|
||||
@@ -2099,6 +2249,8 @@
|
||||
#define MEM_LOWER_LIM 10000
|
||||
#elif defined(MARAUDER_C5)
|
||||
#define MEM_LOWER_LIM 10000
|
||||
#elif defined(MARAUDER_V8)
|
||||
#define MEM_LOWER_LIM 10000
|
||||
#endif
|
||||
//// END MEMORY LOWER LIMIT STUFF
|
||||
|
||||
@@ -2119,6 +2271,8 @@
|
||||
#define PIN 22
|
||||
#elif defined(MARAUDER_C5)
|
||||
#define PIN 27
|
||||
#elif defined(MARAUDER_V8)
|
||||
#define PIN 27
|
||||
#else
|
||||
#define PIN 25
|
||||
#endif
|
||||
@@ -2150,16 +2304,16 @@
|
||||
#define GPS_RX 13
|
||||
#elif defined(MARAUDER_CYD_MICRO)
|
||||
#define GPS_SERIAL_INDEX 2
|
||||
#define GPS_TX 1 // Community pinout matching old forks and even bruce firmware allowing for hardware standardization
|
||||
#define GPS_RX 3
|
||||
#define GPS_TX 22 // Whoever thought it would be a good idea to use UART0 for GPS...
|
||||
#define GPS_RX 27 // Now maybe we will be able to use CLI
|
||||
#elif defined(MARAUDER_CYD_2USB)
|
||||
#define GPS_SERIAL_INDEX 2
|
||||
#define GPS_TX 1 // Community pinout matching old forks and even bruce firmware allowing for hardware standardization
|
||||
#define GPS_RX 3
|
||||
#define GPS_TX 22 // Whoever thought it would be a good idea to use UART0 for GPS...
|
||||
#define GPS_RX 27 // Now maybe we will be able to use CLI
|
||||
#elif defined(MARAUDER_CYD_3_5_INCH)
|
||||
#define GPS_SERIAL_INDEX 2
|
||||
#define GPS_TX 21
|
||||
#define GPS_RX 22
|
||||
#define GPS_RX 25
|
||||
#elif defined(MARAUDER_CYD_GUITION)
|
||||
#define GPS_SERIAL_INDEX 2
|
||||
#define GPS_TX 21 // Fits the extended I/O
|
||||
@@ -2212,6 +2366,10 @@
|
||||
#define GPS_SERIAL_INDEX 1
|
||||
#define GPS_TX 14
|
||||
#define GPS_RX 13
|
||||
#elif defined(MARAUDER_V8)
|
||||
#define GPS_SERIAL_INDEX 1
|
||||
#define GPS_TX 14
|
||||
#define GPS_RX 13
|
||||
#endif
|
||||
#else
|
||||
#define mac_history_len 100
|
||||
@@ -2276,6 +2434,16 @@
|
||||
#define I2C_SCL 25
|
||||
#endif
|
||||
|
||||
#ifdef MARAUDER_CYD_GUITION
|
||||
#define I2C_SDA 22
|
||||
#define I2C_SCL 21
|
||||
#endif
|
||||
|
||||
#ifdef MARAUDER_V8
|
||||
#define I2C_SCL 4
|
||||
#define I2C_SDA 5
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
//// MARAUDER TITLE STUFF
|
||||
@@ -2303,6 +2471,8 @@
|
||||
#define MARAUDER_TITLE_BYTES 13578
|
||||
#elif defined(MARAUDER_C5)
|
||||
#define MARAUDER_TITLE_BYTES 13578
|
||||
#elif defined(MARAUDER_V8)
|
||||
#define MARAUDER_TITLE_BYTES 13578
|
||||
#else
|
||||
#define MARAUDER_TITLE_BYTES 13578
|
||||
#endif
|
||||
@@ -2360,6 +2530,12 @@
|
||||
#define SD_MOSI 7
|
||||
#define SD_SCK 6
|
||||
#endif
|
||||
|
||||
#ifdef MARAUDER_V8
|
||||
#define SD_MISO TFT_MISO
|
||||
#define SD_MOSI TFT_MOSI
|
||||
#define SD_SCK TFT_SCLK
|
||||
#endif
|
||||
#endif
|
||||
//// END STUPID CYD STUFF
|
||||
|
||||
@@ -2410,6 +2586,6 @@
|
||||
#ifndef HAS_DUAL_BAND
|
||||
#define HOP_DELAY 1000
|
||||
#else
|
||||
#define HOP_DELAY 100
|
||||
#define HOP_DELAY 250
|
||||
#endif
|
||||
#endif
|
||||
|
||||
@@ -236,8 +236,6 @@ void setup()
|
||||
backlightOn(); // Need this
|
||||
|
||||
#ifdef HAS_SCREEN
|
||||
//delay(2000);
|
||||
|
||||
// Do some stealth mode stuff
|
||||
#ifdef HAS_BUTTONS
|
||||
if (c_btn.justPressed()) {
|
||||
@@ -248,18 +246,6 @@ void setup()
|
||||
Serial.println("Headless Mode enabled");
|
||||
}
|
||||
#endif
|
||||
|
||||
//display_obj.clearScreen();
|
||||
|
||||
//display_obj.tft.setTextColor(TFT_CYAN, TFT_BLACK);
|
||||
|
||||
//display_obj.tft.println(text_table0[0]);
|
||||
|
||||
//delay(2000);
|
||||
|
||||
//display_obj.tft.println("Marauder " + display_obj.version_number + "\n");
|
||||
|
||||
//display_obj.tft.println(text_table0[1]);
|
||||
#endif
|
||||
|
||||
settings_obj.begin();
|
||||
@@ -312,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"));
|
||||
|
||||
@@ -27,135 +27,6 @@ struct ProbeReqSsid {
|
||||
uint8_t requests;
|
||||
};
|
||||
|
||||
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",
|
||||
"00:03:97", "00:03:98", "00:03:99", "00:03:9A", "00:03:9B",
|
||||
"00:03:9C", "00:03:9D", "00:03:9E", "00:03:9F", "00:03:A0",
|
||||
"00:03:A1", "00:03:A2", "00:03:A3", "00:03:A4", "00:03:A5",
|
||||
"00:03:A6", "00:03:A7", "00:03:A8", "00:03:A9", "00:03:AA",
|
||||
"00:03:AB", "00:03:AC", "00:03:AD", "00:03:AE", "00:03:AF",
|
||||
"00:03:B0", "00:03:B1", "00:03:B2", "00:03:B3", "00:03:B4",
|
||||
"00:03:B5", "00:03:B6", "00:03:B7", "00:03:B8", "00:03:B9",
|
||||
"00:03:BA", "00:03:BB", "00:03:BC", "00:03:BD", "00:03:BE",
|
||||
"00:03:BF", "00:03:C0", "00:03:C1", "00:03:C2", "00:03:C3",
|
||||
"00:03:C4", "00:03:C5", "00:03:C6", "00:03:C7", "00:03:C8",
|
||||
"00:03:C9", "00:03:CA", "00:03:CB", "00:03:CC", "00:03:CD",
|
||||
"00:03:CE", "00:03:CF", "00:03:D0", "00:03:D1", "00:03:D2",
|
||||
"00:03:D3", "00:03:D4", "00:03:D5", "00:03:D6", "00:03:D7",
|
||||
"00:03:D8", "00:03:D9", "00:03:DA", "00:03:DB", "00:03:DC",
|
||||
"00:03:DD", "00:03:DE", "00:03:DF", "00:03:E0", "00:03:E1",
|
||||
"00:03:E2", "00:03:E3", "00:03:E4", "00:03:E5", "00:03:E6",
|
||||
"00:03:E7", "00:03:E8", "00:03:E9", "00:03:EA", "00:03:EB",
|
||||
"00:03:EC", "00:03:ED", "00:03:EE", "00:03:EF", "00:03:F0",
|
||||
"00:03:F1", "00:03:F2", "00:03:F3", "00:03:F4", "00:03:F5",
|
||||
"00:03:F6", "00:03:F7", "00:03:F8", "00:03:F9", "00:03:FA",
|
||||
"00:03:FB", "00:03:FC", "00:03:FD", "00:03:FE", "00:03:FF"
|
||||
};
|
||||
|
||||
const char asus_ouis[][9] PROGMEM = {
|
||||
"00:0C:6E", "00:0E:A6", "00:11:2F", "00:11:D8", "00:13:D4", "00:15:F2", "00:17:31", "00:18:F3", "00:1A:92",
|
||||
"00:1B:FC", "00:1D:60", "00:1E:8C", "00:1F:C6", "00:22:15", "00:23:54", "00:24:8C", "00:26:18", "00:E0:18",
|
||||
"04:42:1A", "04:92:26", "04:D4:C4", "04:D9:F5", "08:60:6E", "08:62:66", "08:BF:B8", "0C:9D:92", "10:7B:44",
|
||||
"10:7C:61", "10:BF:48", "10:C3:7B", "14:DA:E9", "14:DD:A9", "18:31:BF", "1C:87:2C", "1C:B7:2C", "20:CF:30",
|
||||
"24:4B:FE", "2C:4D:54", "2C:56:DC", "2C:FD:A1", "30:5A:3A", "30:85:A9", "34:97:F6", "38:2C:4A", "38:D5:47",
|
||||
"3C:7C:3F", "40:16:7E", "40:B0:76", "48:5B:39", "4C:ED:FB", "50:46:5D", "50:EB:F6", "54:04:A6", "54:A0:50",
|
||||
"58:11:22", "60:45:CB", "60:A4:4C", "60:CF:84", "70:4D:7B", "70:8B:CD", "74:D0:2B", "78:24:AF", "7C:10:C9",
|
||||
"88:D7:F6", "90:E6:BA", "9C:5C:8E", "A0:36:BC", "A8:5E:45", "AC:22:0B", "AC:9E:17", "B0:6E:BF", "BC:AE:C5",
|
||||
"BC:EE:7B", "C8:60:00", "C8:7F:54", "CC:28:AA", "D0:17:C2", "D4:5D:64", "D8:50:E6", "E0:3F:49", "E0:CB:4E",
|
||||
"E8:9C:25", "F0:2F:74", "F0:79:59", "F4:6D:04", "F8:32:E4", "FC:34:97", "FC:C2:33"
|
||||
};
|
||||
|
||||
const char belkin_ouis[][9] PROGMEM = {
|
||||
"00:11:50", "00:17:3F", "00:30:BD", "08:BD:43", "14:91:82", "24:F5:A2", "30:23:03", "80:69:1A", "94:10:3E",
|
||||
"94:44:52", "B4:75:0E", "C0:56:27", "C4:41:1E", "D8:EC:5E", "E8:9F:80", "EC:1A:59", "EC:22:80"
|
||||
};
|
||||
|
||||
const char cisco_ouis[][9] PROGMEM = {
|
||||
"00:1B:0D", "00:1D:45", "00:1E:7A", "00:25:9C", "00:50:56",
|
||||
"40:55:39", "58:8D:09", "A4:4C:C8", "F8:0F:F9"
|
||||
};
|
||||
|
||||
const char dlink_ouis[][9] PROGMEM = {
|
||||
"00:05:5D", "00:0D:88", "00:0F:3D", "00:11:95", "00:13:46", "00:15:E9", "00:17:9A", "00:19:5B", "00:1B:11",
|
||||
"00:1C:F0", "00:1E:58", "00:21:91", "00:22:B0", "00:24:01", "00:26:5A", "00:AD:24", "04:BA:D6", "08:5A:11",
|
||||
"0C:0E:76", "0C:B6:D2", "10:62:EB", "10:BE:F5", "14:D6:4D", "18:0F:76", "1C:5F:2B", "1C:7E:E5", "1C:AF:F7",
|
||||
"1C:BD:B9", "28:3B:82", "30:23:03", "34:08:04", "34:0A:33", "3C:1E:04", "3C:33:32", "40:86:CB", "40:9B:CD",
|
||||
"54:B8:0A", "5C:D9:98", "60:63:4C", "64:29:43", "6C:19:8F", "6C:72:20", "74:44:01", "74:DA:DA", "78:32:1B",
|
||||
"78:54:2E", "78:98:E8", "80:26:89", "84:C9:B2", "88:76:B9", "90:8D:78", "90:94:E4", "9C:D6:43", "A0:63:91",
|
||||
"A0:AB:1B", "A4:2A:95", "A8:63:7D", "AC:F1:DF", "B4:37:D8", "B8:A3:86", "BC:0F:9A", "BC:22:28", "BC:F6:85",
|
||||
"C0:A0:BB", "C4:A8:1D", "C4:E9:0A", "C8:78:7D", "C8:BE:19", "C8:D3:A3", "CC:B2:55", "D8:FE:E3", "DC:EA:E7",
|
||||
"E0:1C:FC", "E4:6F:13", "E8:CC:18", "EC:22:80", "EC:AD:E0", "F0:7D:68", "F0:B4:D2", "F4:8C:EB", "F8:E9:03",
|
||||
"FC:75:16"
|
||||
};
|
||||
|
||||
const char google_ouis[][9] PROGMEM = {
|
||||
"3C:5A:B4", "5C:BF:C0", "78:4F:43", "A4:77:33", "D4:97:0B", "F0:72:8C"
|
||||
};
|
||||
|
||||
const char huawei_ouis[][9] PROGMEM = {
|
||||
"00:1A:2B", "28:FF:3C", "5C:4C:A9", "8C:71:F8", "C8:D1:5E",
|
||||
"E4:4C:A9", "F4:12:FA"
|
||||
};
|
||||
|
||||
const char lg_ouis[][9] PROGMEM = {
|
||||
"00:17:C0", "18:AF:8F", "38:2D:AE", "5C:87:9C", "68:27:37",
|
||||
"78:5D:C8", "94:65:2D", "A4:77:33", "C4:43:8F"
|
||||
};
|
||||
|
||||
const char linksys_ouis[][9] PROGMEM = {
|
||||
"00:04:5A", "00:06:25", "00:0C:41", "00:0E:08", "00:0F:66", "00:12:17", "00:13:10", "00:14:BF", "00:16:B6",
|
||||
"00:18:39", "00:18:F8", "00:1A:70", "00:1C:10", "00:1D:7E", "00:1E:E5", "00:21:29", "00:22:6B", "00:23:69",
|
||||
"00:25:9C", "00:23:54", "00:24:B2", "00:31:92", "00:5F:67", "10:27:F5", "14:EB:B6", "1C:61:B4", "20:36:26",
|
||||
"28:87:BA", "30:5A:3A", "2C:FD:A1", "30:23:03", "30:46:9A", "40:ED:00", "48:22:54", "50:91:E3", "54:AF:97",
|
||||
"5C:A2:F4", "5C:A6:E6", "5C:E9:31", "60:A4:B7", "68:7F:F0", "6C:5A:B0", "78:8C:B5", "7C:C2:C6", "9C:53:22",
|
||||
"9C:A2:F4", "A8:42:A1", "AC:15:A2", "B0:A7:B9", "B4:B0:24", "C0:06:C3", "CC:68:B6", "E8:48:B8", "F0:A7:31"
|
||||
};
|
||||
|
||||
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"
|
||||
};
|
||||
|
||||
const char oneplus_ouis[][9] PROGMEM = {
|
||||
"08:EC:A9", "30:9C:23", "38:78:62", "64:A2:F9", "74:AC:B9",
|
||||
"A8:14:51", "B4:86:55", "D8:CB:8A", "F4:8C:50"
|
||||
};
|
||||
|
||||
const char samsung_ouis[][9] PROGMEM = {
|
||||
"00:12:47", "00:15:99", "00:16:6B", "00:1B:FC", "10:5F:06",
|
||||
"18:59:36", "20:02:AF", "24:4B:03", "38:2D:3D", "40:B8:37",
|
||||
"00:1F:12", "00:1D:0F", "00:1A:9A", "00:19:E1", "00:18:FF",
|
||||
"00:17:77", "00:16:72", "00:14:69", "00:13:65", "00:12:60",
|
||||
"30:37:0D", "40:8C:47", "50:55:5F", "60:47:A1", "70:0A:AD",
|
||||
"80:61:43", "90:48:F7", "A0:4C:CB", "B0:5E:93", "C0:3D:F5",
|
||||
"D0:31:AA", "E0:4F:02", "F0:3B:94"
|
||||
};
|
||||
|
||||
const char sony_ouis[][9] PROGMEM = {
|
||||
"00:19:C5", "00:1B:59", "00:1E:DC", "10:68:3F", "54:42:49",
|
||||
"A8:E3:EE", "B8:F9:34", "CC:5D:4E", "E8:89:2F"
|
||||
};
|
||||
|
||||
const char tplink_ouis[][9] PROGMEM = {
|
||||
"00:31:92", "00:5F:67", "10:27:F5", "14:EB:B6", "1C:61:B4", "20:36:26", "28:87:BA", "30:DE:4B", "34:60:F9",
|
||||
"3C:52:A1", "40:ED:00", "48:22:54", "50:91:E3", "54:AF:97", "5C:62:8B", "5C:A6:E6", "5C:E9:31", "60:A4:B7",
|
||||
"68:7F:F0", "6C:5A:B0", "78:8C:B5", "7C:C2:C6", "9C:53:22", "9C:A2:F4", "A8:42:A1", "AC:15:A2", "B0:A7:B9",
|
||||
"B4:B0:24", "C0:06:C3", "CC:68:B6", "E8:48:B8", "F0:A7:31"
|
||||
};
|
||||
|
||||
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);
|
||||
//size_t free = heap_caps_get_free_size(MALLOC_CAP_8BIT);
|
||||
@@ -299,7 +170,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 +187,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 +226,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
|
||||
|
||||
BIN
pictures/icons/flock_22.bmp
Normal file
BIN
pictures/icons/flock_22.bmp
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.6 KiB |
9
pictures/xbm/flock_22.xbm
Normal file
9
pictures/xbm/flock_22.xbm
Normal file
@@ -0,0 +1,9 @@
|
||||
#define 301f3c12779740a0f7d41e7437ba582eplcec9cBSpGahPig_width 22
|
||||
#define 301f3c12779740a0f7d41e7437ba582eplcec9cBSpGahPig_height 22
|
||||
static char 301f3c12779740a0f7d41e7437ba582eplcec9cBSpGahPig_bits[] = {
|
||||
0xFF, 0xFF, 0x3F, 0xFF, 0xE0, 0x3F, 0x3F, 0x9F, 0x3F, 0xBF, 0xBF, 0x3F,
|
||||
0xDF, 0x71, 0x3F, 0xDF, 0x6E, 0x3F, 0xDF, 0x6E, 0x3F, 0xDF, 0x6E, 0x3F,
|
||||
0xDF, 0x71, 0x3F, 0xDF, 0x7B, 0x3F, 0xDF, 0x7F, 0x3F, 0xDF, 0x7F, 0x3F,
|
||||
0xDF, 0x7F, 0x3F, 0xBF, 0xBF, 0x3F, 0xBF, 0xBB, 0x3F, 0x3F, 0x9B, 0x3F,
|
||||
0x7F, 0xDF, 0x3F, 0x7F, 0xDF, 0x3F, 0x7F, 0xDF, 0x3F, 0xFF, 0xE0, 0x3F,
|
||||
0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0x3F, };
|
||||
Reference in New Issue
Block a user