mirror of
https://github.com/justcallmekoko/ESP32Marauder.git
synced 2026-01-25 18:54:48 -08:00
Compare commits
167 Commits
v1.8.3
...
nightly_93
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
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 | ||
|
|
e3d3d8276c | ||
|
|
72951397d8 | ||
|
|
e5f2466c41 | ||
|
|
d70d141662 | ||
|
|
4bd3a1d4b1 | ||
|
|
510e5692b0 | ||
|
|
4b5339bf89 | ||
|
|
2efcb63d19 | ||
|
|
871fc356c6 | ||
|
|
0e1a289678 | ||
|
|
a1f4c9dc28 | ||
|
|
762f6f7ec9 | ||
|
|
ffcb2585d5 | ||
|
|
b2cd8efe38 | ||
|
|
174885dff5 | ||
|
|
8e523ed237 | ||
|
|
faf1bbb620 | ||
|
|
71c0d2e616 | ||
|
|
3e09d2d816 | ||
|
|
3ce7d45341 | ||
|
|
e86f16934e | ||
|
|
4042e9d43b | ||
|
|
8a0817e547 | ||
|
|
02febc63c6 | ||
|
|
969a2fff30 | ||
|
|
8831927580 | ||
|
|
72ed6de7dc | ||
|
|
ad4b660dd4 | ||
|
|
f25e2b90d5 | ||
|
|
c44be1ecdc | ||
|
|
d74a22b297 | ||
|
|
79cbd91b60 | ||
|
|
7448c266e4 | ||
|
|
5088e0bfb4 | ||
|
|
08517d7587 | ||
|
|
d1ad247dd3 | ||
|
|
71cd5859f4 | ||
|
|
24f3e18b69 | ||
|
|
74f09ee86f | ||
|
|
20242245ab | ||
|
|
e8f0c1317e | ||
|
|
d52b2922e6 | ||
|
|
ecfdcd3bdc | ||
|
|
8e54de7b2d | ||
|
|
77f3fa7025 | ||
|
|
b86929256f | ||
|
|
16d0101ce6 | ||
|
|
e3668645e3 | ||
|
|
ea0be07c91 | ||
|
|
e4d483d736 | ||
|
|
c2aba77cc0 | ||
|
|
78b73f4ca2 | ||
|
|
ef4ec4edad | ||
|
|
c6daeb5517 | ||
|
|
dcd493d474 | ||
|
|
68bd55b162 | ||
|
|
90db402b6b | ||
|
|
e064c3beed | ||
|
|
18d71769da | ||
|
|
a259cbcc6d | ||
|
|
482f4114e0 | ||
|
|
a917ff2211 | ||
|
|
92e1795ce5 | ||
|
|
605086ea59 | ||
|
|
554d358cba | ||
|
|
614c7099f9 | ||
|
|
d131491bbf | ||
|
|
dcf3b13552 | ||
|
|
4b6cb6582d | ||
|
|
7a41d4be14 | ||
|
|
2d195ea697 | ||
|
|
b1c256036f | ||
|
|
ac3e4ab427 | ||
|
|
3ca777e711 | ||
|
|
938a691010 | ||
|
|
3c61198d09 | ||
|
|
bbf245859a | ||
|
|
fbf2e9ab18 | ||
|
|
de05c9be2b | ||
|
|
4e88212e2f | ||
|
|
ef5d9527ef | ||
|
|
7f522d8e15 | ||
|
|
f35d88122c | ||
|
|
fc8f9629fa | ||
|
|
5a1269d062 | ||
|
|
3c093f6c9c | ||
|
|
6840d4c7ac | ||
|
|
d5c5e0e011 | ||
|
|
2f9d70b725 | ||
|
|
06293a0a4c | ||
|
|
c51171df76 | ||
|
|
030035f68d | ||
|
|
9a265f805b | ||
|
|
6497e741d6 | ||
|
|
e5387b80fc | ||
|
|
53613de14b | ||
|
|
3cf7702e23 | ||
|
|
e8f449ad01 | ||
|
|
b2ed6c70e1 | ||
|
|
d8b9e3b138 | ||
|
|
ba35343600 | ||
|
|
02f0ecf85b | ||
|
|
57fde11782 | ||
|
|
f5ecde8278 | ||
|
|
1964072b99 | ||
|
|
2d8403b090 | ||
|
|
27c37a489d | ||
|
|
34ccdbaa14 | ||
|
|
b85ce8b071 | ||
|
|
db75cd7d91 | ||
|
|
76b06792f5 | ||
|
|
3ea48c35e5 | ||
|
|
74d952dc5f | ||
|
|
b490b5968f | ||
|
|
7e2646e889 | ||
|
|
a75e1d7891 | ||
|
|
8c56181871 | ||
|
|
34157d93cd | ||
|
|
387d277e02 | ||
|
|
1ae345234d |
106
.github/workflows/build_parallel.yml
vendored
106
.github/workflows/build_parallel.yml
vendored
@@ -19,7 +19,7 @@ jobs:
|
||||
board:
|
||||
- { name: "Flipper Zero WiFi Dev Board", flag: "MARAUDER_FLIPPER", fbqn: "esp32:esp32:esp32s2:PartitionScheme=min_spiffs,FlashSize=4M,PSRAM=enabled", file_name: "flipper", tft: false, tft_file: "", build_dir: "esp32s2", addr: "0x1000", idf_ver: "2.0.11", nimble_ver: "1.3.8", esp_async: "bigbrodude6119/ESPAsyncWebServer", esp_async_ver: "master" }
|
||||
- { name: "Flipper Zero Multi Board S3", flag: "MARAUDER_MULTIBOARD_S3", fbqn: "esp32:esp32:esp32s3:PartitionScheme=min_spiffs,FlashSize=4M", file_name: "multiboardS3", tft: false, tft_file: "", build_dir: "esp32s3", addr: "0x0", idf_ver: "2.0.11", nimble_ver: "1.3.8", esp_async: "bigbrodude6119/ESPAsyncWebServer", esp_async_ver: "master" }
|
||||
- { name: "OG Marauder", flag: "MARAUDER_V4", fbqn: "esp32:esp32:d32:PartitionScheme=min_spiffs", file_name: "og", tft: true, tft_file: "User_Setup_og_marauder.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: "OG Marauder", flag: "MARAUDER_V4", fbqn: "esp32:esp32:d32:PartitionScheme=min_spiffs", file_name: "old_hardware", tft: true, tft_file: "User_Setup_og_marauder.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 v6", flag: "MARAUDER_V6", fbqn: "esp32:esp32:d32:PartitionScheme=min_spiffs", file_name: "v6", tft: true, tft_file: "User_Setup_og_marauder.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 v6.1", flag: "MARAUDER_V6_1", fbqn: "esp32:esp32:d32:PartitionScheme=min_spiffs", file_name: "v6_1", tft: true, tft_file: "User_Setup_og_marauder.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 Kit", flag: "MARAUDER_KIT", fbqn: "esp32:esp32:d32:PartitionScheme=min_spiffs", file_name: "kit", tft: true, tft_file: "User_Setup_og_marauder.h", build_dir: "d32", addr: "0x1000", idf_ver: "2.0.11", nimble_ver: "1.3.8", esp_async: "bigbrodude6119/ESPAsyncWebServer", esp_async_ver: "master" }
|
||||
@@ -33,9 +33,10 @@ jobs:
|
||||
- { name: "Marauder CYD 2432S028", flag: "MARAUDER_CYD_MICRO", fbqn: "esp32:esp32:d32:PartitionScheme=min_spiffs", file_name: "cyd_2432S028", tft: true, tft_file: "User_Setup_cyd_micro.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 CYD 2432S024 GUITION", flag: "MARAUDER_CYD_GUITION", fbqn: "esp32:esp32:d32:PartitionScheme=min_spiffs", file_name: "cyd_2432S024_guition", tft: true, tft_file: "User_Setup_cyd_guition.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 CYD 2432S028 2 USB", flag: "MARAUDER_CYD_2USB", fbqn: "esp32:esp32:d32:PartitionScheme=min_spiffs", file_name: "cyd_2432S028_2usb", tft: true, tft_file: "User_Setup_cyd_2usb.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 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: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" }
|
||||
|
||||
steps:
|
||||
- name: Checkout Code
|
||||
@@ -81,8 +82,8 @@ jobs:
|
||||
- name: Install AsyncTCP
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
repository: me-no-dev/AsyncTCP
|
||||
ref: master
|
||||
repository: ESP32Async/AsyncTCP
|
||||
ref: v3.4.8
|
||||
path: CustomAsyncTCP
|
||||
|
||||
- name: Install MicroNMEA
|
||||
@@ -92,16 +93,16 @@ jobs:
|
||||
ref: v2.0.6
|
||||
path: CustomMicroNMEA
|
||||
|
||||
#- name: Install ESPAsyncWebServer
|
||||
# uses: actions/checkout@v2
|
||||
# with:
|
||||
# repository: ${{ matrix.board.esp_async }}
|
||||
# ref: ${{ matrix.board.esp_async_ver }}
|
||||
# path: CustomESPAsyncWebServer
|
||||
|
||||
- name: Install ESPAsyncWebServer
|
||||
run: |
|
||||
cp -r libraries/ESPAsyncWebServer ./CustomESPAsyncWebServer
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
repository: ESP32Async/ESPAsyncWebServer
|
||||
ref: v3.8.1
|
||||
path: CustomESPAsyncWebServer
|
||||
|
||||
#- name: Install ESPAsyncWebServer
|
||||
# run: |
|
||||
# cp -r libraries/ESPAsyncWebServer ./CustomESPAsyncWebServer
|
||||
|
||||
- name: Install TFT_eSPI
|
||||
uses: actions/checkout@v2
|
||||
@@ -142,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
|
||||
@@ -234,21 +235,31 @@ jobs:
|
||||
arduino-platform: esp32:esp32@${{ matrix.board.idf_ver }}
|
||||
platform-url: https://github.com/espressif/arduino-esp32/releases/download/${{ matrix.board.idf_ver }}/package_esp32_dev_index.json
|
||||
|
||||
- name: Rename Marauder ${{ matrix.board.name }} bin
|
||||
#- name: Rename Marauder ${{ matrix.board.name }} bin
|
||||
# run: |
|
||||
# mv ./esp32_marauder/build/esp32.esp32.${{ matrix.board.build_dir }}/esp32_marauder.ino.bin ./esp32_marauder/build/esp32.esp32.${{ matrix.board.build_dir }}/esp32_marauder.${{ matrix.board.file_name }}.bin
|
||||
|
||||
- name: Rename and Upload ${{ matrix.board.name }} Artifact
|
||||
run: |
|
||||
mv ./esp32_marauder/build/esp32.esp32.${{ matrix.board.build_dir }}/esp32_marauder.ino.bin ./esp32_marauder/build/esp32.esp32.${{ matrix.board.build_dir }}/esp32_marauder.${{ matrix.board.file_name }}.bin
|
||||
|
||||
# ls -la ./esp32_marauder/build/esp32.esp32.${{ matrix.board.build_dir }}/
|
||||
# esptool.py --chip esp32s3 merge_bin -o ./esp32_marauder/build/esp32.esp32.${{ matrix.board.build_dir }}/esp32_marauder.${{ matrix.board.file_name }}.bin \
|
||||
# ${{ matrix.board.addr }} ./esp32_marauder/build/esp32.esp32.${{ matrix.board.build_dir }}/esp32_marauder.ino.bootloader.bin \
|
||||
# 0x8000 ./esp32_marauder/build/esp32.esp32.${{ matrix.board.build_dir }}/esp32_marauder.ino.partitions.bin \
|
||||
# 0x10000 ./esp32_marauder/build/esp32.esp32.${{ matrix.board.build_dir }}/esp32_marauder.ino.bin
|
||||
VERSION=$(grep '#define MARAUDER_VERSION' ./esp32_marauder/configs.h | sed -E 's/.*"v([^"]+)"/v\1/' | tr '.' '_')
|
||||
VERSION_DOT=$(grep '#define MARAUDER_VERSION' ./esp32_marauder/configs.h | sed -E 's/.*"v([^"]+)"/v\1/')
|
||||
DATE=$(date +%Y%m%d)
|
||||
|
||||
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"
|
||||
|
||||
echo "artifact_name=$OUTPUT_BIN" >> $GITHUB_ENV
|
||||
echo "artifact_path=$BUILD_DIR/$OUTPUT_BIN" >> $GITHUB_ENV
|
||||
echo "version_dot=$VERSION_DOT" >> $GITHUB_ENV
|
||||
- name: Upload ${{ matrix.board.name }} Artifact
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: esp32_marauder.${{ matrix.board.file_name }}.bin
|
||||
path: ./esp32_marauder/build/esp32.esp32.${{ matrix.board.build_dir }}/esp32_marauder.${{ matrix.board.file_name }}.bin
|
||||
name: ${{ env.artifact_name }}
|
||||
path: ${{ env.artifact_path }}
|
||||
retention-days: 5
|
||||
|
||||
post_compile_steps:
|
||||
@@ -265,8 +276,51 @@ jobs:
|
||||
uses: softprops/action-gh-release@v1
|
||||
with:
|
||||
name: "Marauder Release ${{ github.ref_name }}"
|
||||
tag_name: ${{ github.ref_name }}
|
||||
tag_name: ${{ env.version_dot }}
|
||||
generate_release_notes: true
|
||||
draft: true
|
||||
files: |
|
||||
esp32_marauder.*.bin
|
||||
esp32_marauder_v*.bin
|
||||
body: |
|
||||
[justcallmekokollc.com](https://justcallmekokollc.com)
|
||||
|
||||
### Please see [GPS Modification](https://github.com/justcallmekoko/ESP32Marauder/wiki/gps-modification) to find out how to add GPS capabilities to your Marauder.
|
||||
**Flipper Zero Marauder Companion App:**
|
||||
**Be sure to install the latest version of the [Marauder Companion](https://github.com/0xchocolate/flipperzero-wifi-marauder/releases/latest) to use these new features on your Flipper Zero**
|
||||
|
||||
**Additional Resources**
|
||||
**[Project Issues](https://github.com/justcallmekoko/ESP32Marauder/issues)**
|
||||
**[Install/Update Instructions](https://github.com/justcallmekoko/ESP32Marauder/wiki/update-firmware)**
|
||||
**[ESP32 Marauder companion app](https://github.com/0xchocolate/flipperzero-firmware-with-wifi-marauder-companion/releases/latest)**
|
||||
**[My Discord](https://discord.com/servers/willstunforfood-776211399918878760)**
|
||||
|
||||
**Flipper Zero Dev Board is NOT the same thing as Dev Board Pro. Don't get them confused.**
|
||||
|
||||
### MARAUDER V6/V6.X WARNING
|
||||
**Please check which Marauder you are using by looking at the front face of the PCB (side with the screen). If it says v6.1 (or .2), use the v6.1 bin. If it says v6, use the v6 bin.**
|
||||
|
||||
## ESP32-C5 (5GHz support)
|
||||
Please see our [installation guide](https://github.com/justcallmekoko/ESP32Marauder/wiki/ESP32%E2%80%90C5%E2%80%90DevKitC%E2%80%901) for installing the Marauder firmware on your ESP32-C5-DevKitC-1
|
||||
|
||||
| Hardware | Binary Version |
|
||||
| -------- | -------------- |
|
||||
| v4 (OG) | `_old_hardware.bin` |
|
||||
| v6 | `_new_hardware.bin`/`_v6.bin` |
|
||||
| v6.1/v6.2 | `_v6_1.bin` |
|
||||
| v7 | `_v7.bin` |
|
||||
| Kit | `_kit.bin` |
|
||||
| Mini | `_mini.bin` |
|
||||
| Flipper Zero | `_flipper.bin` |
|
||||
| MutliBoard S3 | `_multiboardS3.bin` |
|
||||
| LDDB/NodeMCU/Wemos | `_lddb.bin` |
|
||||
| Dev Board Pro | `_marauder_dev_board_pro.bin` |
|
||||
| BFFB | `_marauder_dev_board_pro.bin` |
|
||||
| ESP32-S2 Reverse Feather | `_rev_feather.bin` |
|
||||
| CYD 2432S028(R) | `_cyd_2432S028.bin` |
|
||||
| RL Phantom | `_cyd_2432S024_guition.bin` |
|
||||
| CYD 2432S028 2 USB | `_cyd_2432S028_2usb.bin` |
|
||||
| M5 Cardputer | `_m5cardputer.bin` (Available on M5 Burner) |
|
||||
| ESP32-C5 DevKit | [`_esp32c5_devkit.bin`](https://github.com/justcallmekoko/ESP32Marauder/wiki/ESP32%E2%80%90C5%E2%80%90DevKitC%E2%80%901) |
|
||||
| AWOK V2/V3 screen (white usb) | `_v6_1.bin` |
|
||||
| AWOK V2 flipper (orange usb) | `_flipper.bin` |
|
||||
| AWOK V3 flipper (orange usb) | `_marauder_dev_board_pro.bin` |
|
||||
|
||||
32
.github/workflows/close_stale.yml
vendored
Normal file
32
.github/workflows/close_stale.yml
vendored
Normal file
@@ -0,0 +1,32 @@
|
||||
name: Close stale issues
|
||||
|
||||
on:
|
||||
schedule:
|
||||
- cron: "0 3 * * *" # runs daily at 03:00 UTC
|
||||
workflow_dispatch: {}
|
||||
|
||||
permissions:
|
||||
issues: write
|
||||
pull-requests: write
|
||||
|
||||
jobs:
|
||||
stale:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/stale@v9
|
||||
with:
|
||||
days-before-stale: 132
|
||||
days-before-close: 7
|
||||
stale-issue-message: >
|
||||
This issue has been automatically marked as stale due to inactivity.
|
||||
It will be closed in 7 days unless there is further activity.
|
||||
close-issue-message: >
|
||||
Closing due to prolonged inactivity. If this is still relevant,
|
||||
please comment or open a new issue with updated details.
|
||||
stale-issue-label: "stale"
|
||||
exempt-issue-labels: "pinned,security,backlog,keep-open"
|
||||
remove-stale-when-updated: true
|
||||
operations-per-run: 2000
|
||||
# Optional: also handle PRs
|
||||
days-before-pr-stale: -1
|
||||
days-before-pr-close: -1
|
||||
402
.github/workflows/nightly_build.yml
vendored
Normal file
402
.github/workflows/nightly_build.yml
vendored
Normal file
@@ -0,0 +1,402 @@
|
||||
name: Build and (Nightly) Pre-release
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
schedule:
|
||||
# daily at 03:00 UTC (adjust to your preferred time)
|
||||
- cron: '0 3 * * *'
|
||||
|
||||
jobs:
|
||||
decide:
|
||||
name: Detect new commits on default branch
|
||||
runs-on: ubuntu-latest
|
||||
outputs:
|
||||
should_build: ${{ steps.decide.outputs.should_build }}
|
||||
default_branch: ${{ steps.decide.outputs.default_branch }}
|
||||
head_sha: ${{ steps.decide.outputs.head_sha }}
|
||||
short_sha: ${{ steps.decide.outputs.short_sha }}
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with: { fetch-depth: 0 }
|
||||
|
||||
- id: decide
|
||||
uses: actions/github-script@v7
|
||||
with:
|
||||
script: |
|
||||
const owner = context.repo.owner;
|
||||
const repo = context.repo.repo;
|
||||
|
||||
// Find default branch and its HEAD
|
||||
const repoInfo = await github.rest.repos.get({ owner, repo });
|
||||
const defaultBranch = repoInfo.data.default_branch;
|
||||
const head = await github.rest.repos.getBranch({ owner, repo, branch: defaultBranch });
|
||||
const headSha = head.data.commit.sha;
|
||||
const shortSha = headSha.slice(0,7);
|
||||
|
||||
// Try get the existing nightly release (single static tag)
|
||||
let nightlyRelease = null;
|
||||
try {
|
||||
nightlyRelease = await github.rest.repos.getReleaseByTag({
|
||||
owner, repo, tag: 'nightly'
|
||||
});
|
||||
} catch (e) {
|
||||
if (e.status !== 404) throw e;
|
||||
}
|
||||
|
||||
// Decide if we need to rebuild: compare short SHA in the release name
|
||||
// Name format we set: "<shortsha>_nightly"
|
||||
let shouldBuild = true;
|
||||
if (nightlyRelease) {
|
||||
const name = nightlyRelease.data.name || '';
|
||||
const m = name.match(/^([0-9a-f]{7})_nightly$/i);
|
||||
if (m && m[1] === shortSha) {
|
||||
shouldBuild = false; // no new commits since last nightly
|
||||
}
|
||||
}
|
||||
|
||||
core.setOutput('should_build', String(shouldBuild));
|
||||
core.setOutput('default_branch', defaultBranch);
|
||||
core.setOutput('head_sha', headSha);
|
||||
core.setOutput('short_sha', shortSha);
|
||||
|
||||
compile_sketch:
|
||||
name: build ${{ matrix.board.name }}
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
board:
|
||||
- { name: "Flipper Zero WiFi Dev Board", flag: "MARAUDER_FLIPPER", fbqn: "esp32:esp32:esp32s2:PartitionScheme=min_spiffs,FlashSize=4M,PSRAM=enabled", file_name: "flipper", tft: false, tft_file: "", build_dir: "esp32s2", addr: "0x1000", idf_ver: "2.0.11", nimble_ver: "1.3.8", esp_async: "bigbrodude6119/ESPAsyncWebServer", esp_async_ver: "master" }
|
||||
- { name: "Flipper Zero Multi Board S3", flag: "MARAUDER_MULTIBOARD_S3", fbqn: "esp32:esp32:esp32s3:PartitionScheme=min_spiffs,FlashSize=4M", file_name: "multiboardS3", tft: false, tft_file: "", build_dir: "esp32s3", addr: "0x0", idf_ver: "2.0.11", nimble_ver: "1.3.8", esp_async: "bigbrodude6119/ESPAsyncWebServer", esp_async_ver: "master" }
|
||||
- { name: "OG Marauder", flag: "MARAUDER_V4", fbqn: "esp32:esp32:d32:PartitionScheme=min_spiffs", file_name: "old_hardware", tft: true, tft_file: "User_Setup_og_marauder.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 v6", flag: "MARAUDER_V6", fbqn: "esp32:esp32:d32:PartitionScheme=min_spiffs", file_name: "v6", tft: true, tft_file: "User_Setup_og_marauder.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 v6.1", flag: "MARAUDER_V6_1", fbqn: "esp32:esp32:d32:PartitionScheme=min_spiffs", file_name: "v6_1", tft: true, tft_file: "User_Setup_og_marauder.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 Kit", flag: "MARAUDER_KIT", fbqn: "esp32:esp32:d32:PartitionScheme=min_spiffs", file_name: "kit", tft: true, tft_file: "User_Setup_og_marauder.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 Mini", flag: "MARAUDER_MINI", fbqn: "esp32:esp32:d32:PartitionScheme=min_spiffs", file_name: "mini", tft: true, tft_file: "User_Setup_marauder_mini.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: "ESP32 LDDB", flag: "ESP32_LDDB", fbqn: "esp32:esp32:d32:PartitionScheme=min_spiffs", file_name: "esp32_lddb", tft: false, tft_file: "", 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 Dev Board Pro", flag: "MARAUDER_DEV_BOARD_PRO", fbqn: "esp32:esp32:d32:PartitionScheme=min_spiffs", file_name: "marauder_dev_board_pro", tft: false, tft_file: "", build_dir: "d32", addr: "0x1000", idf_ver: "2.0.11", nimble_ver: "1.3.8", esp_async: "bigbrodude6119/ESPAsyncWebServer", esp_async_ver: "master" }
|
||||
- { name: "M5StickCPlus", flag: "MARAUDER_M5STICKC", fbqn: "esp32:esp32:m5stick-c:PartitionScheme=min_spiffs", file_name: "m5stickc_plus", tft: true, tft_file: "User_Setup_marauder_m5stickc.h", build_dir: "m5stick-c", addr: "0x1000", idf_ver: "2.0.11", nimble_ver: "1.3.8", esp_async: "bigbrodude6119/ESPAsyncWebServer", esp_async_ver: "master" }
|
||||
- { name: "M5StickCPlus 2", flag: "MARAUDER_M5STICKCP2", fbqn: "esp32:esp32:m5stick-c:PartitionScheme=min_spiffs", file_name: "m5stickc_plus2", tft: true, tft_file: "User_Setup_marauder_m5stickcp2.h", build_dir: "m5stick-c", addr: "0x1000", idf_ver: "2.0.11", nimble_ver: "1.3.8", esp_async: "bigbrodude6119/ESPAsyncWebServer", esp_async_ver: "master" }
|
||||
- { name: "Rev Feather", flag: "MARAUDER_REV_FEATHER", fbqn: "esp32:esp32:esp32s2:PartitionScheme=min_spiffs,FlashSize=4M,PSRAM=enabled", file_name: "rev_feather", tft: true, tft_file: "User_Setup_marauder_rev_feather.h", build_dir: "esp32s2", addr: "0x1000", idf_ver: "2.0.11", nimble_ver: "1.3.8", esp_async: "bigbrodude6119/ESPAsyncWebServer", esp_async_ver: "master" }
|
||||
- { name: "Marauder v7", flag: "MARAUDER_V7", fbqn: "esp32:esp32:d32:PartitionScheme=min_spiffs", file_name: "marauder_v7", tft: true, tft_file: "User_Setup_dual_nrf24.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 CYD 2432S028", flag: "MARAUDER_CYD_MICRO", fbqn: "esp32:esp32:d32:PartitionScheme=min_spiffs", file_name: "cyd_2432S028", tft: true, tft_file: "User_Setup_cyd_micro.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 CYD 2432S024 GUITION", flag: "MARAUDER_CYD_GUITION", fbqn: "esp32:esp32:d32:PartitionScheme=min_spiffs", file_name: "cyd_2432S024_guition", tft: true, tft_file: "User_Setup_cyd_guition.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 CYD 2432S028 2 USB", flag: "MARAUDER_CYD_2USB", fbqn: "esp32:esp32:d32:PartitionScheme=min_spiffs", file_name: "cyd_2432S028_2usb", tft: true, tft_file: "User_Setup_cyd_2usb.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 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" }
|
||||
|
||||
steps:
|
||||
- name: Checkout Code
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Install Arduino CLI
|
||||
run: |
|
||||
curl -fsSL https://raw.githubusercontent.com/arduino/arduino-cli/master/install.sh | sh
|
||||
echo "/home/runner/work/ESP32Marauder/ESP32Marauder/bin" >> $GITHUB_PATH
|
||||
export PATH=$PATH:/home/runner/work/ESP32Marauder/ESP32Marauder/bin
|
||||
arduino-cli version
|
||||
|
||||
- name: Verify Installed Cores
|
||||
run: arduino-cli core list
|
||||
|
||||
- name: Build TestFile with ESP32 v${{ matrix.board.idf_ver }}
|
||||
uses: ArminJo/arduino-test-compile@v3.2.1
|
||||
with:
|
||||
sketch-names: TestFile.ino
|
||||
arduino-board-fqbn: esp32:esp32:esp32s2
|
||||
arduino-platform: esp32:esp32@${{ matrix.board.idf_ver }}
|
||||
platform-url: https://github.com/espressif/arduino-esp32/releases/download/${{ matrix.board.idf_ver }}/package_esp32_dev_index.json
|
||||
|
||||
- name: Verify Installed Cores Again
|
||||
run: arduino-cli core list
|
||||
|
||||
- name: Show Arduino dir structure
|
||||
run: |
|
||||
find /home/runner/.arduino15/packages/esp32/hardware/
|
||||
|
||||
- name: Install ESP32Ping
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
repository: marian-craciunescu/ESP32Ping
|
||||
ref: 1.6
|
||||
path: CustomESP32Ping
|
||||
|
||||
- name: Install AsyncTCP
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
repository: ESP32Async/AsyncTCP
|
||||
ref: v3.4.8
|
||||
path: CustomAsyncTCP
|
||||
|
||||
- name: Install MicroNMEA
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
repository: stevemarple/MicroNMEA
|
||||
ref: v2.0.6
|
||||
path: CustomMicroNMEA
|
||||
|
||||
- name: Install ESPAsyncWebServer
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
repository: ESP32Async/ESPAsyncWebServer
|
||||
ref: v3.8.1
|
||||
path: CustomESPAsyncWebServer
|
||||
|
||||
- name: Install TFT_eSPI
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
repository: Bodmer/TFT_eSPI
|
||||
ref: V2.5.34
|
||||
path: CustomTFT_eSPI
|
||||
|
||||
- name: Install XPT2046_Touchscreen
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
repository: PaulStoffregen/XPT2046_Touchscreen
|
||||
ref: v1.4
|
||||
path: CustomXPT2046_Touchscreen
|
||||
|
||||
- name: Install lv_arduino
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
repository: lvgl/lv_arduino
|
||||
ref: 3.0.0
|
||||
path: Customlv_arduino
|
||||
|
||||
- name: Install JPEGDecoder
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
repository: Bodmer/JPEGDecoder
|
||||
ref: 1.8.0
|
||||
path: CustomJPEGDecoder
|
||||
|
||||
- name: Install NimBLE-Arduino
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
repository: h2zero/NimBLE-Arduino
|
||||
ref: ${{ matrix.board.nimble_ver }}
|
||||
path: CustomNimBLE-Arduino
|
||||
|
||||
- name: Install Adafruit_NeoPixel
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
repository: adafruit/Adafruit_NeoPixel
|
||||
ref: 1.12.0
|
||||
path: CustomAdafruit_NeoPixel
|
||||
|
||||
- name: Install ArduinoJson
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
repository: bblanchon/ArduinoJson
|
||||
ref: v6.18.2
|
||||
path: CustomArduinoJson
|
||||
|
||||
- name: Install LinkedList
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
repository: ivanseidel/LinkedList
|
||||
ref: v1.3.3
|
||||
path: CustomLinkedList
|
||||
|
||||
- name: Install EspSoftwareSerial
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
repository: plerup/espsoftwareserial
|
||||
ref: 8.1.0
|
||||
path: CustomEspSoftwareSerial
|
||||
|
||||
- name: Install Adafruit_BusIO
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
repository: adafruit/Adafruit_BusIO
|
||||
ref: 1.15.0
|
||||
path: CustomAdafruit_BusIO
|
||||
|
||||
- name: Install Adafruit_MAX1704X
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
repository: adafruit/Adafruit_MAX1704X
|
||||
ref: 1.0.2
|
||||
path: CustomAdafruit_MAX1704X
|
||||
|
||||
- name: Show Libraries
|
||||
run: |
|
||||
find /home/runner/ -name "Custom*"
|
||||
|
||||
- name: Configure TFT_eSPI
|
||||
run: |
|
||||
rm -f CustomTFT_eSPI/User_Setup_Select.h
|
||||
cp User*.h CustomTFT_eSPI/
|
||||
pwd
|
||||
ls -la
|
||||
ls -la CustomTFT_eSPI
|
||||
|
||||
- name: Install Esptool
|
||||
run: |
|
||||
pip install esptool
|
||||
|
||||
- name: Modify platform.txt
|
||||
run: |
|
||||
if [[ ${{ matrix.board.idf_ver }} == "2.0.11" ]]; then
|
||||
for i in $(find /home/runner/.arduino15/packages/esp32/hardware/esp32/ -name "platform.txt"); do
|
||||
sed -i 's/compiler.c.elf.libs.esp32c3=/compiler.c.elf.libs.esp32c3=-zmuldefs /' "$i"
|
||||
sed -i 's/compiler.c.elf.libs.esp32s3=/compiler.c.elf.libs.esp32s3=-zmuldefs /' "$i"
|
||||
sed -i 's/compiler.c.elf.libs.esp32s2=/compiler.c.elf.libs.esp32s2=-zmuldefs /' "$i"
|
||||
sed -i 's/compiler.c.elf.libs.esp32=/compiler.c.elf.libs.esp32=-zmuldefs /' "$i"
|
||||
cat "$i" | grep compiler.c.elf.libs.esp32c3
|
||||
cat "$i" | grep compiler.c.elf.libs.esp32s3
|
||||
cat "$i" | grep compiler.c.elf.libs.esp32s2
|
||||
cat "$i" | grep compiler.c.elf.libs.esp32
|
||||
done
|
||||
fi
|
||||
|
||||
if [[ ${{ matrix.board.idf_ver }} == "3.3.0" ]]; 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
|
||||
fi
|
||||
|
||||
- name: Configure TFT_eSPI (if needed)
|
||||
run: |
|
||||
pwd
|
||||
if [[ ${{ matrix.board.tft }} == true ]]; then
|
||||
find /home/runner/ -name "*TFT_eSPI*"
|
||||
sed -i 's/^\/\/#include <${{ matrix.board.tft_file }}>/#include <${{ matrix.board.tft_file }}>/' /home/runner/work/ESP32Marauder/ESP32Marauder/CustomTFT_eSPI/User_Setup_Select.h
|
||||
fi
|
||||
|
||||
- name: Build Marauder for ${{ matrix.board.name }}
|
||||
uses: ArminJo/arduino-test-compile@v3.3.0
|
||||
with:
|
||||
sketch-names: esp32_marauder.ino
|
||||
arduino-board-fqbn: ${{ matrix.board.fbqn }}
|
||||
extra-arduino-cli-args: "--warnings none --build-property compiler.cpp.extra_flags='-D${{ matrix.board.flag }}'"
|
||||
arduino-platform: esp32:esp32@${{ matrix.board.idf_ver }}
|
||||
platform-url: https://github.com/espressif/arduino-esp32/releases/download/${{ matrix.board.idf_ver }}/package_esp32_dev_index.json
|
||||
|
||||
- name: Rename and Upload ${{ matrix.board.name }} Artifact
|
||||
run: |
|
||||
VERSION=$(grep '#define MARAUDER_VERSION' ./esp32_marauder/configs.h | sed -E 's/.*"v([^"]+)"/v\1/' | tr '.' '_')
|
||||
DATE=$(date +%Y%m%d)
|
||||
|
||||
BUILD_DIR=./esp32_marauder/build/esp32.esp32.${{ matrix.board.build_dir }}
|
||||
INPUT_BIN=$BUILD_DIR/esp32_marauder.ino.bin
|
||||
|
||||
OUTPUT_BIN=esp32_marauder_${VERSION}_beta_${DATE}_${{ matrix.board.file_name }}.bin
|
||||
|
||||
mv "$INPUT_BIN" "$BUILD_DIR/$OUTPUT_BIN"
|
||||
|
||||
echo "artifact_name=$OUTPUT_BIN" >> $GITHUB_ENV
|
||||
echo "artifact_path=$BUILD_DIR/$OUTPUT_BIN" >> $GITHUB_ENV
|
||||
|
||||
- name: Upload ${{ matrix.board.name }} Artifact
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: ${{ env.artifact_name }}
|
||||
path: ${{ env.artifact_path }}
|
||||
retention-days: 5
|
||||
|
||||
post_compile_steps:
|
||||
name: Create Nightly Release
|
||||
runs-on: ubuntu-latest
|
||||
needs: [compile_sketch, decide]
|
||||
# create release if manual dispatch OR should_release decided true for scheduled run
|
||||
if: ${{ needs.decide.outputs.should_build == 'true' }}
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- uses: actions/download-artifact@v4
|
||||
with:
|
||||
merge-multiple: true
|
||||
|
||||
- name: Compute release title/tag
|
||||
id: meta
|
||||
shell: bash
|
||||
run: |
|
||||
SHORT_SHA="$(git rev-parse --short HEAD)"
|
||||
if [[ "${{ github.event_name }}" == "schedule" ]]; then
|
||||
echo "name=${SHORT_SHA}_nightly" >> $GITHUB_OUTPUT
|
||||
# keep your existing tag, or set one here:
|
||||
echo "tag=nightly-$(date -u +'%Y%m%d')-${SHORT_SHA}" >> $GITHUB_OUTPUT
|
||||
echo "prerelease=true" >> $GITHUB_OUTPUT
|
||||
else
|
||||
echo "name=${SHORT_SHA}" >> $GITHUB_OUTPUT
|
||||
echo "tag=manual-$(date -u +'%Y%m%d')-${SHORT_SHA}" >> $GITHUB_OUTPUT
|
||||
echo "prerelease=false" >> $GITHUB_OUTPUT
|
||||
fi
|
||||
|
||||
- name: Delete old assets on nightly release (if any)
|
||||
uses: actions/github-script@v7
|
||||
with:
|
||||
script: |
|
||||
const owner = context.repo.owner;
|
||||
const repo = context.repo.repo;
|
||||
|
||||
let rel;
|
||||
try {
|
||||
rel = await github.rest.repos.getReleaseByTag({ owner, repo, tag: 'nightly' });
|
||||
} catch (e) {
|
||||
if (e.status === 404) {
|
||||
// No release yet — nothing to delete
|
||||
return;
|
||||
}
|
||||
throw e;
|
||||
}
|
||||
|
||||
const assets = rel.data.assets || [];
|
||||
for (const a of assets) {
|
||||
await github.rest.repos.deleteReleaseAsset({ owner, repo, asset_id: a.id });
|
||||
core.info(`Deleted old asset: ${a.name}`);
|
||||
}
|
||||
|
||||
- name: Create Release
|
||||
uses: softprops/action-gh-release@v1
|
||||
with:
|
||||
name: ${{ needs.decide.outputs.short_sha }}_nightly
|
||||
tag_name: nightly_${{ needs.decide.outputs.short_sha }}
|
||||
prerelease: true
|
||||
generate_release_notes: false
|
||||
draft: false
|
||||
files: |
|
||||
esp32_marauder_v*.bin
|
||||
body: |
|
||||
[justcallmekokollc.com](https://justcallmekokollc.com)
|
||||
|
||||
### This is an automated pre-release / beta created by CI.
|
||||
|
||||
### Please see [GPS Modification](https://github.com/justcallmekoko/ESP32Marauder/wiki/gps-modification) to find out how to add GPS capabilities to your Marauder.
|
||||
**Flipper Zero Marauder Companion App:**
|
||||
**Be sure to install the latest version of the [Marauder Companion](https://github.com/0xchocolate/flipperzero-wifi-marauder/releases/latest) to use these new features on your Flipper Zero**
|
||||
|
||||
**Additional Resources**
|
||||
**[Project Issues](https://github.com/justcallmekoko/ESP32Marauder/issues)**
|
||||
**[Install/Update Instructions](https://github.com/justcallmekoko/ESP32Marauder/wiki/update-firmware)**
|
||||
**[ESP32 Marauder companion app](https://github.com/0xchocolate/flipperzero-firmware-with-wifi-marauder-companion/releases/latest)**
|
||||
**[My Discord](https://discord.com/servers/willstunforfood-776211399918878760)**
|
||||
|
||||
**Note:** Nightly pre-releases are for testing and evaluation. Use them at your own risk.
|
||||
|
||||
| Hardware | Binary Version |
|
||||
| -------- | -------------- |
|
||||
| v4 (OG) | `_old_hardware.bin` |
|
||||
| v6 | `_new_hardware.bin`/`_v6.bin` |
|
||||
| v6.1/v6.2 | `_v6_1.bin` |
|
||||
| v7 | `_v7.bin` |
|
||||
| Kit | `_kit.bin` |
|
||||
| Mini | `_mini.bin` |
|
||||
| Flipper Zero | `_flipper.bin` |
|
||||
| MutliBoard S3 | `_multiboardS3.bin` |
|
||||
| LDDB/NodeMCU/Wemos | `_lddb.bin` |
|
||||
| Dev Board Pro | `_marauder_dev_board_pro.bin` |
|
||||
| BFFB | `_marauder_dev_board_pro.bin` |
|
||||
| ESP32-S2 Reverse Feather | `_rev_feather.bin` |
|
||||
| CYD 2432S028(R) | `_cyd_2432S028.bin` |
|
||||
| RL Phantom | `_cyd_2432S024_guition.bin` |
|
||||
| CYD 2432S028 2 USB | `_cyd_2432S028_2usb.bin` |
|
||||
| M5 Cardputer | `_m5cardputer.bin` (Available on M5 Burner) |
|
||||
| ESP32-C5 DevKit | [`_esp32c5_devkit.bin`](https://github.com/justcallmekoko/ESP32Marauder/wiki/ESP32%E2%80%90C5%E2%80%90DevKitC%E2%80%901) |
|
||||
| AWOK V2/V3 screen (white usb) | `_v6_1.bin` |
|
||||
| AWOK V2 flipper (orange usb) | `_flipper.bin` |
|
||||
| AWOK V3 flipper (orange usb) | `_marauder_dev_board_pro.bin` |
|
||||
|
||||
Binary file not shown.
Binary file not shown.
BIN
C5_Py_Flasher/bins/esp32_marauder_v1_8_5_esp32c5devkitc1.bin
Normal file
BIN
C5_Py_Flasher/bins/esp32_marauder_v1_8_5_esp32c5devkitc1.bin
Normal file
Binary file not shown.
@@ -35,6 +35,7 @@
|
||||
//#include <User_Setup_cyd_guition.h>
|
||||
//#include <User_Setup_cyd_2usb.h>
|
||||
//#include <User_Setup_marauder_m5cardputer.h>
|
||||
//#include <User_Setup_cyd_3_5_inch.h>
|
||||
|
||||
//#include <User_Setups/Setup1_ILI9341.h> // Setup file configured for my ILI9341
|
||||
//#include <User_Setups/Setup2_ST7735.h> // Setup file configured for my ST7735
|
||||
|
||||
299
User_Setup_cyd_3_5_inch.h
Normal file
299
User_Setup_cyd_3_5_inch.h
Normal file
@@ -0,0 +1,299 @@
|
||||
// USER DEFINED SETTINGS
|
||||
// Set driver type, fonts to be loaded, pins used and SPI control method etc
|
||||
//
|
||||
// See the User_Setup_Select.h file if you wish to be able to define multiple
|
||||
// setups and then easily select which setup file is used by the compiler.
|
||||
//
|
||||
// If this file is edited correctly then all the library example sketches should
|
||||
// run without the need to make any more changes for a particular hardware setup!
|
||||
// Note that some sketches are designed for a particular TFT pixel width/height
|
||||
|
||||
|
||||
// ##################################################################################
|
||||
//
|
||||
// Section 1. Call up the right driver file and any options for it
|
||||
//
|
||||
// ##################################################################################
|
||||
|
||||
// Display type - only define if RPi display
|
||||
//#define RPI_DRIVER
|
||||
|
||||
// Only define one driver, the other ones must be commented out
|
||||
//#define ILI9341_DRIVER // OG Marauder
|
||||
//#define ST7735_DRIVER // Marauder Mini // Define additional parameters below for this display
|
||||
//#define ILI9163_DRIVER // Define additional parameters below for this display
|
||||
//#define S6D02A1_DRIVER
|
||||
//#define RPI_ILI9486_DRIVER // 20MHz maximum SPI
|
||||
//#define HX8357D_DRIVER
|
||||
//#define ILI9481_DRIVER
|
||||
//#define ILI9486_DRIVER
|
||||
//#define ILI9488_DRIVER // WARNING: Do not connect ILI9488 display SDO to MISO if other devices share the SPI bus (TFT SDO does NOT tristate when CS is high)
|
||||
//#define ST7789_DRIVER // Full configuration option, define additional parameters below for this display
|
||||
//#define ST7789_2_DRIVER // Minimal configuration option, define additional parameters below for this display
|
||||
//#define R61581_DRIVER
|
||||
//#define RM68140_DRIVER
|
||||
#define ST7796_DRIVER
|
||||
|
||||
// Some displays support SPI reads via the MISO pin, other displays have a single
|
||||
// bi-directional SDA pin and the library will try to read this via the MOSI line.
|
||||
// To use the SDA line for reading data from the TFT uncomment the following line:
|
||||
|
||||
// #define TFT_SDA_READ // This option is for ESP32 ONLY, tested with ST7789 display only
|
||||
|
||||
// For ST7789 and ILI9341 ONLY, define the colour order IF the blue and red are swapped on your display
|
||||
// Try ONE option at a time to find the correct colour order for your display
|
||||
|
||||
// #define TFT_RGB_ORDER TFT_RGB // Colour order Red-Green-Blue
|
||||
// #define TFT_RGB_ORDER TFT_BGR // Colour order Blue-Green-Red
|
||||
|
||||
// For M5Stack ESP32 module with integrated ILI9341 display ONLY, remove // in line below
|
||||
|
||||
// #define M5STACK
|
||||
|
||||
// For ST7789, ST7735 and ILI9163 ONLY, define the pixel width and height in portrait orientation
|
||||
// #define TFT_WIDTH 80
|
||||
// #define TFT_WIDTH 128 // Marauder Mini
|
||||
#define TFT_WIDTH 320 // ST7789 240 x 240 and 240 x 320
|
||||
// #define TFT_HEIGHT 160
|
||||
// #define TFT_HEIGHT 128 // Marauder Mini
|
||||
// #define TFT_HEIGHT 240 // ST7789 240 x 240
|
||||
#define TFT_HEIGHT 480 // ST7789 240 x 320
|
||||
|
||||
// For ST7735 ONLY, define the type of display, originally this was based on the
|
||||
// colour of the tab on the screen protector film but this is not always true, so try
|
||||
// out the different options below if the screen does not display graphics correctly,
|
||||
// e.g. colours wrong, mirror images, or tray pixels at the edges.
|
||||
// Comment out ALL BUT ONE of these options for a ST7735 display driver, save this
|
||||
// this User_Setup file, then rebuild and upload the sketch to the board again:
|
||||
|
||||
// #define ST7735_INITB
|
||||
// #define ST7735_GREENTAB
|
||||
// #define ST7735_GREENTAB2
|
||||
// #define ST7735_GREENTAB3
|
||||
// #define ST7735_GREENTAB128 // For 128 x 128 display
|
||||
// #define ST7735_GREENTAB160x80 // For 160 x 80 display (BGR, inverted, 26 offset)
|
||||
// #define ST7735_REDTAB
|
||||
// #define ST7735_BLACKTAB
|
||||
// #define ST7735_REDTAB160x80 // For 160 x 80 display with 24 pixel offset
|
||||
|
||||
// If colours are inverted (white shows as black) then uncomment one of the next
|
||||
// 2 lines try both options, one of the options should correct the inversion.
|
||||
|
||||
// #define TFT_INVERSION_ON
|
||||
// #define TFT_INVERSION_OFF
|
||||
|
||||
// If a backlight control signal is available then define the TFT_BL pin in Section 2
|
||||
// below. The backlight will be turned ON when tft.begin() is called, but the library
|
||||
// needs to know if the LEDs are ON with the pin HIGH or LOW. If the LEDs are to be
|
||||
// driven with a PWM signal or turned OFF/ON then this must be handled by the user
|
||||
// sketch. e.g. with digitalWrite(TFT_BL, LOW);
|
||||
|
||||
// #define TFT_BACKLIGHT_ON LOW // HIGH or LOW are options
|
||||
|
||||
// ##################################################################################
|
||||
//
|
||||
// Section 2. Define the pins that are used to interface with the display here
|
||||
//
|
||||
// ##################################################################################
|
||||
|
||||
// We must use hardware SPI, a minimum of 3 GPIO pins is needed.
|
||||
// Typical setup for ESP8266 NodeMCU ESP-12 is :
|
||||
//
|
||||
// Display SDO/MISO to NodeMCU pin D6 (or leave disconnected if not reading TFT)
|
||||
// Display LED to NodeMCU pin VIN (or 5V, see below)
|
||||
// Display SCK to NodeMCU pin D5
|
||||
// Display SDI/MOSI to NodeMCU pin D7
|
||||
// Display DC (RS/AO)to NodeMCU pin D3
|
||||
// Display RESET to NodeMCU pin D4 (or RST, see below)
|
||||
// Display CS to NodeMCU pin D8 (or GND, see below)
|
||||
// Display GND to NodeMCU pin GND (0V)
|
||||
// Display VCC to NodeMCU 5V or 3.3V
|
||||
//
|
||||
// The TFT RESET pin can be connected to the NodeMCU RST pin or 3.3V to free up a control pin
|
||||
//
|
||||
// The DC (Data Command) pin may be labeled AO or RS (Register Select)
|
||||
//
|
||||
// With some displays such as the ILI9341 the TFT CS pin can be connected to GND if no more
|
||||
// SPI devices (e.g. an SD Card) are connected, in this case comment out the #define TFT_CS
|
||||
// line below so it is NOT defined. Other displays such at the ST7735 require the TFT CS pin
|
||||
// to be toggled during setup, so in these cases the TFT_CS line must be defined and connected.
|
||||
//
|
||||
// The NodeMCU D0 pin can be used for RST
|
||||
//
|
||||
//
|
||||
// Note: only some versions of the NodeMCU provide the USB 5V on the VIN pin
|
||||
// If 5V is not available at a pin you can use 3.3V but backlight brightness
|
||||
// will be lower.
|
||||
|
||||
|
||||
// ###### EDIT THE PIN NUMBERS IN THE LINES FOLLOWING TO SUIT YOUR ESP8266 SETUP ######
|
||||
|
||||
// For NodeMCU - use pin numbers in the form PIN_Dx where Dx is the NodeMCU pin designation
|
||||
//#define TFT_CS PIN_D8 // Chip select control pin D8
|
||||
//#define TFT_DC PIN_D3 // Data Command control pin
|
||||
//#define TFT_RST PIN_D4 // Reset pin (could connect to NodeMCU RST, see next line)
|
||||
//#define TFT_RST -1 // Set TFT_RST to -1 if the display RESET is connected to NodeMCU RST or 3.3V
|
||||
|
||||
//#define TFT_BL PIN_D1 // LED back-light (only for ST7789 with backlight control pin)
|
||||
|
||||
//#define TOUCH_CS PIN_D2 // Chip select pin (T_CS) of touch screen
|
||||
|
||||
//#define TFT_WR PIN_D2 // Write strobe for modified Raspberry Pi TFT only
|
||||
|
||||
|
||||
// ###### FOR ESP8266 OVERLAP MODE EDIT THE PIN NUMBERS IN THE FOLLOWING LINES ######
|
||||
|
||||
// Overlap mode shares the ESP8266 FLASH SPI bus with the TFT so has a performance impact
|
||||
// but saves pins for other functions. It is best not to connect MISO as some displays
|
||||
// do not tristate that line wjen chip select is high!
|
||||
// On NodeMCU 1.0 SD0=MISO, SD1=MOSI, CLK=SCLK to connect to TFT in overlap mode
|
||||
// On NodeMCU V3 S0 =MISO, S1 =MOSI, S2 =SCLK
|
||||
// In ESP8266 overlap mode the following must be defined
|
||||
|
||||
//#define TFT_SPI_OVERLAP
|
||||
|
||||
// In ESP8266 overlap mode the TFT chip select MUST connect to pin D3
|
||||
//#define TFT_CS PIN_D3
|
||||
//#define TFT_DC PIN_D5 // Data Command control pin
|
||||
//#define TFT_RST PIN_D4 // Reset pin (could connect to NodeMCU RST, see next line)
|
||||
//#define TFT_RST -1 // Set TFT_RST to -1 if the display RESET is connected to NodeMCU RST or 3.3V
|
||||
|
||||
|
||||
// ###### EDIT THE PIN NUMBERS IN THE LINES FOLLOWING TO SUIT YOUR ESP32 SETUP ######
|
||||
|
||||
// For ESP32 Dev board (only tested with ILI9341 display)
|
||||
// The hardware SPI can be mapped to any pins
|
||||
|
||||
// Marauder Mini
|
||||
/*
|
||||
#define TFT_CS 17 // Chip select control pin D8
|
||||
#define TFT_DC 16 // Data Command control pin
|
||||
#define TFT_RST 5 // Reset pin (could connect to NodeMCU RST, see next line)
|
||||
//#define TFT_MISO 19
|
||||
//#define TFT_MOSI 23
|
||||
//#define TFT_SCLK 18
|
||||
//#define TFT_BL 32
|
||||
*/
|
||||
|
||||
// ESP32 Marauder
|
||||
#define TFT_MISO 12
|
||||
#define TFT_MOSI 13
|
||||
#define TFT_SCLK 14
|
||||
#define TFT_CS 15 // Chip select control pin
|
||||
#define TFT_DC 2 // Data Command control pin
|
||||
#define TFT_RST -1 // Reset pin (could connect to RST pin)
|
||||
//#define TFT_RST -1 // Set TFT_RST to -1 if display RESET is connected to ESP32 board RST
|
||||
|
||||
#define TFT_BL 27 // LED back-light (only for ST7789 with backlight control pin)
|
||||
|
||||
#define TOUCH_CS 33 // Chip select pin (T_CS) of touch screen
|
||||
|
||||
|
||||
//#define TFT_WR 22 // Write strobe for modified Raspberry Pi TFT only
|
||||
|
||||
// For the M5Stack module use these #define lines
|
||||
//#define TFT_MISO 19
|
||||
//#define TFT_MOSI 23
|
||||
//#define TFT_SCLK 18
|
||||
//#define TFT_CS 14 // Chip select control pin
|
||||
//#define TFT_DC 27 // Data Command control pin
|
||||
//#define TFT_RST 33 // Reset pin (could connect to Arduino RESET pin)
|
||||
//#define TFT_BL 32 // LED back-light (required for M5Stack)
|
||||
|
||||
// ###### EDIT THE PINs BELOW TO SUIT YOUR ESP32 PARALLEL TFT SETUP ######
|
||||
|
||||
// The library supports 8 bit parallel TFTs with the ESP32, the pin
|
||||
// selection below is compatible with ESP32 boards in UNO format.
|
||||
// Wemos D32 boards need to be modified, see diagram in Tools folder.
|
||||
// Only ILI9481 and ILI9341 based displays have been tested!
|
||||
|
||||
// Parallel bus is only supported on ESP32
|
||||
// Uncomment line below to use ESP32 Parallel interface instead of SPI
|
||||
|
||||
//#define ESP32_PARALLEL
|
||||
|
||||
// The ESP32 and TFT the pins used for testing are:
|
||||
//#define TFT_CS 33 // Chip select control pin (library pulls permanently low
|
||||
//#define TFT_DC 15 // Data Command control pin - must use a pin in the range 0-31
|
||||
//#define TFT_RST 32 // Reset pin, toggles on startup
|
||||
|
||||
//#define TFT_WR 4 // Write strobe control pin - must use a pin in the range 0-31
|
||||
//#define TFT_RD 2 // Read strobe control pin
|
||||
|
||||
//#define TFT_D0 12 // Must use pins in the range 0-31 for the data bus
|
||||
//#define TFT_D1 13 // so a single register write sets/clears all bits.
|
||||
//#define TFT_D2 26 // Pins can be randomly assigned, this does not affect
|
||||
//#define TFT_D3 25 // TFT screen update performance.
|
||||
//#define TFT_D4 17
|
||||
//#define TFT_D5 16
|
||||
//#define TFT_D6 27
|
||||
//#define TFT_D7 14
|
||||
|
||||
|
||||
// ##################################################################################
|
||||
//
|
||||
// Section 3. Define the fonts that are to be used here
|
||||
//
|
||||
// ##################################################################################
|
||||
|
||||
// Comment out the #defines below with // to stop that font being loaded
|
||||
// The ESP8366 and ESP32 have plenty of memory so commenting out fonts is not
|
||||
// normally necessary. If all fonts are loaded the extra FLASH space required is
|
||||
// about 17Kbytes. To save FLASH space only enable the fonts you need!
|
||||
|
||||
#define LOAD_GLCD // Font 1. Original Adafruit 8 pixel font needs ~1820 bytes in FLASH
|
||||
#define LOAD_FONT2 // Font 2. Small 16 pixel high font, needs ~3534 bytes in FLASH, 96 characters
|
||||
#define LOAD_FONT4 // Font 4. Medium 26 pixel high font, needs ~5848 bytes in FLASH, 96 characters
|
||||
#define LOAD_FONT6 // Font 6. Large 48 pixel font, needs ~2666 bytes in FLASH, only characters 1234567890:-.apm
|
||||
#define LOAD_FONT7 // Font 7. 7 segment 48 pixel font, needs ~2438 bytes in FLASH, only characters 1234567890:-.
|
||||
#define LOAD_FONT8 // Font 8. Large 75 pixel font needs ~3256 bytes in FLASH, only characters 1234567890:-.
|
||||
//#define LOAD_FONT8N // Font 8. Alternative to Font 8 above, slightly narrower, so 3 digits fit a 160 pixel TFT
|
||||
#define LOAD_GFXFF // FreeFonts. Include access to the 48 Adafruit_GFX free fonts FF1 to FF48 and custom fonts
|
||||
|
||||
// Comment out the #define below to stop the SPIFFS filing system and smooth font code being loaded
|
||||
// this will save ~20kbytes of FLASH
|
||||
#define SMOOTH_FONT
|
||||
|
||||
|
||||
// ##################################################################################
|
||||
//
|
||||
// Section 4. Other options
|
||||
//
|
||||
// ##################################################################################
|
||||
|
||||
// Define the SPI clock frequency, this affects the graphics rendering speed. Too
|
||||
// fast and the TFT driver will not keep up and display corruption appears.
|
||||
// With an ILI9341 display 40MHz works OK, 80MHz sometimes fails
|
||||
// With a ST7735 display more than 27MHz may not work (spurious pixels and lines)
|
||||
// With an ILI9163 display 27 MHz works OK.
|
||||
|
||||
// #define SPI_FREQUENCY 1000000
|
||||
//#define SPI_FREQUENCY 5000000
|
||||
// #define SPI_FREQUENCY 10000000
|
||||
// #define SPI_FREQUENCY 20000000
|
||||
#define SPI_FREQUENCY 27000000 // Marauder // Actually sets it to 26.67MHz = 80/3
|
||||
// #define SPI_FREQUENCY 40000000
|
||||
// #define SPI_FREQUENCY 80000000
|
||||
|
||||
// Optional reduced SPI frequency for reading TFT
|
||||
#define SPI_READ_FREQUENCY 20000000
|
||||
|
||||
// The XPT2046 requires a lower SPI clock rate of 2.5MHz so we define that here:
|
||||
#define SPI_TOUCH_FREQUENCY 2500000
|
||||
|
||||
// The ESP32 has 2 free SPI ports i.e. VSPI and HSPI, the VSPI is the default.
|
||||
// If the VSPI port is in use and pins are not accessible (e.g. TTGO T-Beam)
|
||||
// then uncomment the following line:
|
||||
#define USE_HSPI_PORT
|
||||
|
||||
// Comment out the following #define if "SPI Transactions" do not need to be
|
||||
// supported. When commented out the code size will be smaller and sketches will
|
||||
// run slightly faster, so leave it commented out unless you need it!
|
||||
|
||||
// Transaction support is needed to work with SD library but not needed with TFT_SdFat
|
||||
// Transaction support is required if other SPI devices are connected.
|
||||
|
||||
// Transactions are automatically enabled by the library for an ESP32 (to use HAL mutex)
|
||||
// so changing it here has no effect
|
||||
|
||||
// #define SUPPORT_TRANSACTIONS
|
||||
@@ -227,7 +227,13 @@ PROGMEM static const unsigned char menu_icons[][66] = {
|
||||
0x67, 0xDB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
|
||||
{0xFF, 0xFF, 0x1F, 0xF8, 0x0F, 0xF0, 0x07, 0xE0, 0x07, 0xE0, 0x07, 0xE0, // FORCE: 39
|
||||
0x67, 0xE6, 0x77, 0xEE, 0x87, 0xE0, 0x8F, 0xF1, 0x0F, 0xF0, 0x4F, 0xF5,
|
||||
0x1F, 0xF8, 0x3F, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF}
|
||||
0x1F, 0xF8, 0x3F, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF},
|
||||
{0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0x3F, 0xFF, 0xC0, 0x3F, 0x3F, 0x3F, 0x3F, // FUNNY BEACON: 40
|
||||
0xDF, 0xFF, 0x3E, 0xEF, 0xFF, 0x3D, 0x77, 0xBF, 0x3B, 0x77, 0x3E, 0x3B,
|
||||
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}
|
||||
};
|
||||
|
||||
/*#ifndef MARAUDER_MINI
|
||||
|
||||
@@ -26,63 +26,41 @@ void BatteryInterface::RunSetup() {
|
||||
|
||||
#ifdef HAS_BATTERY
|
||||
|
||||
Wire.begin(I2C_SDA, I2C_SCL);
|
||||
|
||||
Serial.println("Checking for battery monitors...");
|
||||
|
||||
Wire.beginTransmission(IP5306_ADDR);
|
||||
error = Wire.endTransmission();
|
||||
#ifndef HAS_AXP2101
|
||||
Wire.begin(I2C_SDA, I2C_SCL);
|
||||
|
||||
if (error == 0) {
|
||||
Serial.println("Detected IP5306");
|
||||
this->has_ip5306 = true;
|
||||
this->i2c_supported = true;
|
||||
}
|
||||
|
||||
Wire.beginTransmission(MAX17048_ADDR);
|
||||
error = Wire.endTransmission();
|
||||
|
||||
if (error == 0) {
|
||||
if (maxlipo.begin()) {
|
||||
Serial.println("Detected MAX17048");
|
||||
this->has_max17048 = true;
|
||||
this->i2c_supported = true;
|
||||
}
|
||||
}
|
||||
|
||||
/*for(addr = 1; addr < 127; addr++ ) {
|
||||
Wire.beginTransmission(addr);
|
||||
Wire.beginTransmission(IP5306_ADDR);
|
||||
error = Wire.endTransmission();
|
||||
|
||||
if (error == 0)
|
||||
{
|
||||
Serial.print("I2C device found at address 0x");
|
||||
|
||||
if (addr<16)
|
||||
Serial.print("0");
|
||||
if (error == 0) {
|
||||
Serial.println("Detected IP5306");
|
||||
this->has_ip5306 = true;
|
||||
this->i2c_supported = true;
|
||||
}
|
||||
|
||||
Serial.println(addr,HEX);
|
||||
|
||||
if (addr == IP5306_ADDR) {
|
||||
this->has_ip5306 = true;
|
||||
Wire.beginTransmission(MAX17048_ADDR);
|
||||
error = Wire.endTransmission();
|
||||
|
||||
if (error == 0) {
|
||||
if (maxlipo.begin()) {
|
||||
Serial.println("Detected MAX17048");
|
||||
this->has_max17048 = true;
|
||||
this->i2c_supported = true;
|
||||
}
|
||||
|
||||
if (addr == MAX17048_ADDR) {
|
||||
if (maxlipo.begin()) {
|
||||
Serial.println("Detected MAX17048");
|
||||
this->has_max17048 = true;
|
||||
this->i2c_supported = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}*/
|
||||
#else
|
||||
bool result = this->power.begin(Wire, AXP2101_SLAVE_ADDRESS, I2C_SDA, I2C_SCL);
|
||||
|
||||
if (!result)
|
||||
return;
|
||||
|
||||
Serial.println("Detected AXP2101");
|
||||
|
||||
/*if (this->maxlipo.begin()) {
|
||||
Serial.println("Detected MAX17048");
|
||||
this->has_max17048 = true;
|
||||
this->i2c_supported = true;
|
||||
}*/
|
||||
this->has_axp2101 = true;
|
||||
#endif
|
||||
|
||||
this->initTime = millis();
|
||||
#endif
|
||||
@@ -120,4 +98,10 @@ int8_t BatteryInterface::getBatteryLevel() {
|
||||
else
|
||||
return percent;
|
||||
}
|
||||
|
||||
#ifdef HAS_AXP2101
|
||||
if (this->has_axp2101) {
|
||||
return this->power.getBatteryPercent();
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -8,6 +8,11 @@
|
||||
#include "configs.h"
|
||||
#include "Adafruit_MAX1704X.h"
|
||||
|
||||
#ifdef HAS_AXP2101
|
||||
#define XPOWERS_CHIP_AXP2101
|
||||
#include "XPowersLib.h"
|
||||
#endif
|
||||
|
||||
#include <Wire.h>
|
||||
|
||||
#define IP5306_ADDR 0x75
|
||||
@@ -18,12 +23,17 @@ class BatteryInterface {
|
||||
uint32_t initTime = 0;
|
||||
Adafruit_MAX17048 maxlipo;
|
||||
|
||||
#ifdef HAS_AXP2101
|
||||
XPowersPMU power;
|
||||
#endif
|
||||
|
||||
public:
|
||||
int8_t battery_level = 0;
|
||||
int8_t old_level = 0;
|
||||
bool i2c_supported = false;
|
||||
bool has_max17048 = false;
|
||||
bool has_ip5306 = false;
|
||||
bool has_axp2101 = false;
|
||||
|
||||
BatteryInterface();
|
||||
|
||||
|
||||
@@ -217,12 +217,15 @@ void CommandLine::runCommand(String input) {
|
||||
Serial.println(HELP_GPS_DATA_CMD);
|
||||
Serial.println(HELP_GPS_CMD);
|
||||
Serial.println(HELP_NMEA_CMD);
|
||||
Serial.println(HELP_GPS_POI_CMD);
|
||||
Serial.println(HELP_GPS_TRACKER_CMD);
|
||||
|
||||
// WiFi sniff/scan
|
||||
Serial.println(HELP_EVIL_PORTAL_CMD);
|
||||
Serial.println(HELP_KARMA_CMD);
|
||||
Serial.println(HELP_PACKET_COUNT_CMD);
|
||||
Serial.println(HELP_PING_CMD);
|
||||
Serial.println(HELP_ARP_SCAN_CMD);
|
||||
Serial.println(HELP_PORT_SCAN_CMD);
|
||||
Serial.println(HELP_SIGSTREN_CMD);
|
||||
Serial.println(HELP_SCAN_ALL_CMD);
|
||||
@@ -309,7 +312,7 @@ void CommandLine::runCommand(String input) {
|
||||
|
||||
// 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
|
||||
}
|
||||
@@ -894,6 +897,26 @@ void CommandLine::runCommand(String input) {
|
||||
wifi_scan_obj.StartScan(WIFI_ATTACK_BAD_MSG_TARGETED, TFT_YELLOW);
|
||||
}
|
||||
}
|
||||
else if (attack_type == ATTACK_TYPE_S) {
|
||||
// Attack all
|
||||
if (targ_sw == -1) {
|
||||
Serial.println("Starting Sleep attack against all stations. Stop with " + (String)STOPSCAN_CMD);
|
||||
#ifdef HAS_SCREEN
|
||||
display_obj.clearScreen();
|
||||
menu_function_obj.drawStatusBar();
|
||||
#endif
|
||||
wifi_scan_obj.StartScan(WIFI_ATTACK_SLEEP, TFT_RED);
|
||||
}
|
||||
// Target clients
|
||||
else {
|
||||
Serial.println("Starting targeted Sleep attack. Stop with " + (String)STOPSCAN_CMD);
|
||||
#ifdef HAS_SCREEN
|
||||
display_obj.clearScreen();
|
||||
menu_function_obj.drawStatusBar();
|
||||
#endif
|
||||
wifi_scan_obj.StartScan(WIFI_ATTACK_SLEEP_TARGETED, TFT_MAGENTA);
|
||||
}
|
||||
}
|
||||
// Beacon
|
||||
else if (attack_type == ATTACK_TYPE_BEACON) {
|
||||
// spam by list
|
||||
@@ -955,6 +978,14 @@ void CommandLine::runCommand(String input) {
|
||||
#endif
|
||||
wifi_scan_obj.StartScan(WIFI_ATTACK_RICK_ROLL, TFT_YELLOW);
|
||||
}
|
||||
else if (attack_type == ATTACK_TYPE_FUNNY) {
|
||||
Serial.println("Starting Funny SSID Beacon spam. Stop with " + (String)STOPSCAN_CMD);
|
||||
#ifdef HAS_SCREEN
|
||||
display_obj.clearScreen();
|
||||
menu_function_obj.drawStatusBar();
|
||||
#endif
|
||||
wifi_scan_obj.StartScan(WIFI_ATTACK_FUNNY_BEACON, TFT_CYAN);
|
||||
}
|
||||
else {
|
||||
Serial.println("Attack type not properly defined");
|
||||
return;
|
||||
@@ -1204,10 +1235,70 @@ void CommandLine::runCommand(String input) {
|
||||
wifi_scan_obj.StartScan(WIFI_PING_SCAN, TFT_GREEN);
|
||||
}
|
||||
|
||||
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();
|
||||
#endif
|
||||
wifi_scan_obj.StartScan(WIFI_ARP_SCAN, TFT_CYAN);
|
||||
}
|
||||
|
||||
// GPS POI
|
||||
if (cmd_args.get(0) == GPS_POI_CMD) {
|
||||
#ifdef HAS_GPS
|
||||
int start_sw = this->argSearch(&cmd_args, "-s");
|
||||
int mark_sw = this->argSearch(&cmd_args, "-m");
|
||||
int end_sw = this->argSearch(&cmd_args, "-e");
|
||||
|
||||
if (start_sw != -1) {
|
||||
wifi_scan_obj.StartScan(GPS_POI, TFT_CYAN);
|
||||
wifi_scan_obj.currentScanMode = WIFI_SCAN_OFF;
|
||||
#ifdef HAS_SCREEN
|
||||
menu_function_obj.changeMenu(&menu_function_obj.gpsPOIMenu);
|
||||
#endif
|
||||
}
|
||||
else if (mark_sw != -1) {
|
||||
wifi_scan_obj.currentScanMode = GPS_POI;
|
||||
#ifdef HAS_SCREEN
|
||||
display_obj.tft.setCursor(0, TFT_HEIGHT / 2);
|
||||
display_obj.clearScreen();
|
||||
#endif
|
||||
if (wifi_scan_obj.RunGPSInfo(true, false, true)) {
|
||||
#ifdef HAS_SCREEN
|
||||
display_obj.showCenterText("POI Logged", TFT_HEIGHT / 2);
|
||||
#endif
|
||||
}
|
||||
else {
|
||||
#ifdef HAS_SCREEN
|
||||
display_obj.showCenterText("POI Log Failed", TFT_HEIGHT / 2);
|
||||
#endif
|
||||
}
|
||||
wifi_scan_obj.currentScanMode = WIFI_SCAN_OFF;
|
||||
delay(2000);
|
||||
//wifi_scan_obj.StartScan(WIFI_SCAN_OFF);
|
||||
#ifdef HAS_SCREEN
|
||||
menu_function_obj.changeMenu(&menu_function_obj.gpsPOIMenu);
|
||||
#endif
|
||||
}
|
||||
else if (end_sw != -1) {
|
||||
wifi_scan_obj.currentScanMode = GPS_POI;
|
||||
wifi_scan_obj.StartScan(WIFI_SCAN_OFF);
|
||||
#ifdef HAS_SCREEN
|
||||
menu_function_obj.changeMenu(menu_function_obj.gpsPOIMenu.parentMenu);
|
||||
#endif
|
||||
}
|
||||
#else
|
||||
Serial.println("Your hardware doesn't have GPS, silly");
|
||||
return;
|
||||
#endif
|
||||
}
|
||||
|
||||
// Port Scan
|
||||
if (cmd_args.get(0) == PORT_SCAN_CMD) {
|
||||
int all_sw = this->argSearch(&cmd_args, "-a");
|
||||
int ip_sw = this->argSearch(&cmd_args, "-t");
|
||||
int port_sw = this->argSearch(&cmd_args, "-s");
|
||||
|
||||
// Check they specified ip index
|
||||
if (ip_sw != -1) {
|
||||
@@ -1232,6 +1323,38 @@ void CommandLine::runCommand(String input) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
else if (port_sw != -1) {
|
||||
String port_name = cmd_args.get(port_sw + 1);
|
||||
port_name.toUpperCase();
|
||||
uint8_t target_mode = 0;
|
||||
if (port_name == "SSH")
|
||||
target_mode = WIFI_SCAN_SSH;
|
||||
else if (port_name == "TELNET")
|
||||
target_mode = WIFI_SCAN_TELNET;
|
||||
else if (port_name == "DNS")
|
||||
target_mode = WIFI_SCAN_DNS;
|
||||
else if (port_name == "HTTP")
|
||||
target_mode = WIFI_SCAN_HTTP;
|
||||
else if (port_name == "SMTP")
|
||||
target_mode = WIFI_SCAN_SMTP;
|
||||
else if (port_name == "HTTPS")
|
||||
target_mode = WIFI_SCAN_HTTPS;
|
||||
else if (port_name == "RDP")
|
||||
target_mode = WIFI_SCAN_RDP;
|
||||
|
||||
if (target_mode != 0) {
|
||||
Serial.println("Starting port scan for service " + port_name);
|
||||
#ifdef HAS_SCREEN
|
||||
display_obj.clearScreen();
|
||||
menu_function_obj.drawStatusBar();
|
||||
#endif
|
||||
wifi_scan_obj.StartScan(target_mode, TFT_CYAN);
|
||||
}
|
||||
else {
|
||||
Serial.println("You did not specify a supported service");
|
||||
return;
|
||||
}
|
||||
}
|
||||
else {
|
||||
Serial.println("You did not specify an IP index");
|
||||
return;
|
||||
@@ -1337,6 +1460,7 @@ void CommandLine::runCommand(String input) {
|
||||
else if (cmd_args.get(0) == JOIN_CMD) {
|
||||
int ap_sw = this->argSearch(&cmd_args, "-a");
|
||||
int pw_sw = this->argSearch(&cmd_args, "-p");
|
||||
int s_sw = this->argSearch(&cmd_args, "-s");
|
||||
|
||||
if ((ap_sw != -1) && (pw_sw != -1)) {
|
||||
int index = cmd_args.get(ap_sw + 1).toInt();
|
||||
@@ -1351,6 +1475,20 @@ void CommandLine::runCommand(String input) {
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
else if (s_sw != -1) {
|
||||
String ssid = settings_obj.loadSetting<String>("ClientSSID");
|
||||
String pw = settings_obj.loadSetting<String>("ClientPW");
|
||||
|
||||
if ((ssid != "") && (pw != "")) {
|
||||
wifi_scan_obj.joinWiFi(ssid, pw, false);
|
||||
#ifdef HAS_SCREEN
|
||||
menu_function_obj.changeMenu(menu_function_obj.current_menu);
|
||||
#endif
|
||||
}
|
||||
else {
|
||||
Serial.println("There are no saved WiFi credentials");
|
||||
}
|
||||
}
|
||||
else {
|
||||
Serial.println("You did not provide the proper args");
|
||||
return;
|
||||
|
||||
@@ -53,6 +53,8 @@ const char PROGMEM LED_CMD[] = "led";
|
||||
const char PROGMEM GPS_DATA_CMD[] = "gpsdata";
|
||||
const char PROGMEM GPS_CMD[] = "gps";
|
||||
const char PROGMEM NMEA_CMD[] = "nmea";
|
||||
const char PROGMEM GPS_POI_CMD[] = "gpspoi";
|
||||
const char PROGMEM GPS_TRACKER_CMD[] = "gpstracker";
|
||||
|
||||
// WiFi sniff/scan
|
||||
const char PROGMEM EVIL_PORTAL_CMD[] = "evilportal";
|
||||
@@ -75,14 +77,17 @@ const char PROGMEM STOPSCAN_CMD[] = "stopscan";
|
||||
const char PROGMEM WARDRIVE_CMD[] = "wardrive";
|
||||
const char PROGMEM PING_CMD[] = "pingscan";
|
||||
const char PROGMEM PORT_SCAN_CMD[] = "portscan";
|
||||
const char PROGMEM ARP_SCAN_CMD[] = "arpscan";
|
||||
|
||||
// WiFi attack
|
||||
const char PROGMEM ATTACK_CMD[] = "attack";
|
||||
const char PROGMEM ATTACK_TYPE_DEAUTH[] = "deauth";
|
||||
const char PROGMEM ATTACK_TYPE_BEACON[] = "beacon";
|
||||
const char PROGMEM ATTACK_TYPE_PROBE[] = "probe";
|
||||
const char PROGMEM ATTACK_TYPE_FUNNY[] = "funny";
|
||||
const char PROGMEM ATTACK_TYPE_RR[] = "rickroll";
|
||||
const char PROGMEM ATTACK_TYPE_BM[] = "badmsg";
|
||||
const char PROGMEM ATTACK_TYPE_S[] = "sleep";
|
||||
|
||||
// WiFi Aux
|
||||
const char PROGMEM LIST_AP_CMD[] = "list";
|
||||
@@ -116,7 +121,9 @@ const char PROGMEM HELP_SETTINGS_CMD[] = "settings [-s <setting> enable/disable>
|
||||
const char PROGMEM HELP_LS_CMD[] = "ls <directory>";
|
||||
const char PROGMEM HELP_LED_CMD[] = "led -s <hex color>/-p <rainbow>";
|
||||
const char PROGMEM HELP_GPS_DATA_CMD[] = "gpsdata";
|
||||
const char PROGMEM HELP_GPS_CMD[] = "gps [-g] <fix/sat/lon/lat/alt/date/accuracy/text/nmea>\r\n [-n] <native/all/gps/glonass/galileo/navic/qzss/beidou>\r\n [-b = use BD vs GB for beidou]";
|
||||
const char PROGMEM HELP_GPS_CMD[] = "gps [-t] [-g] <fix/sat/lon/lat/alt/date/accuracy/text/nmea>\r\n [-n] <native/all/gps/glonass/galileo/navic/qzss/beidou>\r\n [-b = use BD vs GB for beidou]";
|
||||
const char PROGMEM HELP_GPS_POI_CMD[] = "gpspoi -s/-m/-e";
|
||||
const char PROGMEM HELP_GPS_TRACKER_CMD[] = "gpstracker -c <start/stop>";
|
||||
const char PROGMEM HELP_NMEA_CMD[] = "nmea";
|
||||
|
||||
// WiFi sniff/scan
|
||||
@@ -139,10 +146,11 @@ 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_PING_CMD[] = "pingscan";
|
||||
const char PROGMEM HELP_PORT_SCAN_CMD[] = "portscan [-a] -t <ip index>";
|
||||
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]";
|
||||
|
||||
// WiFi attack
|
||||
const char PROGMEM HELP_ATTACK_CMD[] = "attack -t <beacon [-l/-r/-a]/deauth [-c]/[-s <src mac>] [-d <dst mac>]/probe/rickroll/badmsg [-c]>";
|
||||
const char PROGMEM HELP_ATTACK_CMD[] = "attack -t <beacon [-l/-r/-a]/deauth [-c]/[-s <src mac>] [-d <dst mac>]/probe/rickroll/badmsg [-c]/sleep [-c]>";
|
||||
|
||||
// WiFi Aux
|
||||
const char PROGMEM HELP_LIST_AP_CMD_A[] = "list -s";
|
||||
@@ -157,7 +165,7 @@ const char PROGMEM HELP_SSID_CMD_A[] = "ssid -a [-g <count>/-n <name>]";
|
||||
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>";
|
||||
const char PROGMEM HELP_JOIN_CMD[] = "join -a <index> -p <password>/-s";
|
||||
|
||||
// Bluetooth sniff/scan
|
||||
const char PROGMEM HELP_BT_SNIFF_CMD[] = "sniffbt [-t] <airtag/flipper>";
|
||||
|
||||
@@ -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,12 +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(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
|
||||
@@ -201,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()
|
||||
@@ -397,7 +438,7 @@ void Display::touchToExit()
|
||||
{
|
||||
tft.setTextColor(TFT_BLACK, TFT_LIGHTGREY);
|
||||
tft.fillRect(0,32,HEIGHT_1,16, TFT_LIGHTGREY);
|
||||
tft.drawCentreString(text11,120,32,2);
|
||||
tft.drawCentreString(text11,TFT_WIDTH / 2,32,2);
|
||||
}
|
||||
|
||||
|
||||
@@ -408,6 +449,9 @@ void Display::clearScreen()
|
||||
#ifndef MARAUDER_V7
|
||||
tft.fillScreen(TFT_BLACK);
|
||||
tft.setCursor(0, 0);
|
||||
#elif defined(MARAUDER_MINI)
|
||||
tft.fillRect(0, 0, TFT_WIDTH, TFT_HEIGHT, TFT_BLACK);
|
||||
tft.setCursor(0, 0);
|
||||
#else
|
||||
tft.fillRect(0, 0, TFT_WIDTH, TFT_HEIGHT, TFT_BLACK);
|
||||
tft.setCursor(0, 0);
|
||||
@@ -570,7 +614,9 @@ void Display::setupScrollArea(uint16_t tfa, uint16_t bfa) {
|
||||
//Serial.println(" bfa: " + (String)bfa);
|
||||
//Serial.println("yStart: " + (String)this->yStart);
|
||||
#ifdef HAS_ILI9341
|
||||
#ifdef HAS_ST7789
|
||||
#ifdef HAS_ST7796
|
||||
tft.writecommand(0x33);
|
||||
#elif defined(HAS_ST7789)
|
||||
tft.writecommand(ST7789_VSCRDEF); // Vertical scroll definition
|
||||
#else
|
||||
tft.writecommand(ILI9341_VSCRDEF);
|
||||
@@ -589,6 +635,8 @@ void Display::scrollAddress(uint16_t vsp) {
|
||||
#ifdef HAS_ILI9341
|
||||
#ifdef HAS_ST7789
|
||||
tft.writecommand(ST7789_VSCRDEF); // Vertical scroll definition
|
||||
#elif defined(HAS_ST7796)
|
||||
tft.writecommand(0x33);
|
||||
#else
|
||||
tft.writecommand(ILI9341_VSCRDEF);
|
||||
#endif
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -125,7 +125,6 @@ void EvilPortal::setupServer() {
|
||||
200, "text/html",
|
||||
"<html><head><script>setTimeout(() => { window.location.href ='/' }, 100);</script></head><body></body></html>");
|
||||
});
|
||||
Serial.println("web server up");
|
||||
}
|
||||
|
||||
void EvilPortal::setHtmlFromSerial() {
|
||||
@@ -340,9 +339,14 @@ void EvilPortal::startAP() {
|
||||
|
||||
this->setupServer();
|
||||
|
||||
Serial.println("Server endpoints configured");
|
||||
|
||||
this->dnsServer.start(53, "*", WiFi.softAPIP());
|
||||
Serial.println("DNS Server started");
|
||||
server.addHandler(new CaptiveRequestHandler()).setFilter(ON_AP_FILTER);
|
||||
Serial.println("Captive Portal handler started");
|
||||
server.begin();
|
||||
Serial.println("Server started");
|
||||
#ifdef HAS_SCREEN
|
||||
this->sendToDisplay("Evil Portal READY");
|
||||
#endif
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
#include "ESPAsyncWebServer.h"
|
||||
#include <AsyncTCP.h>
|
||||
#include <DNSServer.h>
|
||||
#include <WiFi.h>
|
||||
|
||||
#include "configs.h"
|
||||
#include "settings.h"
|
||||
|
||||
@@ -469,16 +469,41 @@ String GpsInterface::dt_string_from_gps(){
|
||||
String datetime = "";
|
||||
if (nmea.isValid() && nmea.getYear() > 0){
|
||||
datetime += nmea.getYear();
|
||||
|
||||
datetime += "-";
|
||||
datetime += nmea.getMonth();
|
||||
|
||||
uint8_t month = nmea.getMonth();
|
||||
if (month < 10)
|
||||
datetime += "0";
|
||||
datetime += month;
|
||||
|
||||
datetime += "-";
|
||||
datetime += nmea.getDay();
|
||||
|
||||
uint8_t day = nmea.getDay();
|
||||
if (day < 10)
|
||||
datetime += "0";
|
||||
datetime += day;
|
||||
|
||||
datetime += " ";
|
||||
datetime += nmea.getHour();
|
||||
|
||||
uint8_t hour = nmea.getHour();
|
||||
if (hour < 10)
|
||||
datetime += "0";
|
||||
datetime += hour;
|
||||
|
||||
datetime += ":";
|
||||
datetime += nmea.getMinute();
|
||||
|
||||
uint8_t minute = nmea.getMinute();
|
||||
if (minute < 10)
|
||||
datetime += "0";
|
||||
datetime += minute;
|
||||
|
||||
datetime += ":";
|
||||
datetime += nmea.getSecond();
|
||||
|
||||
uint8_t seconds = nmea.getSecond();
|
||||
if (seconds < 10)
|
||||
datetime += "0";
|
||||
datetime += seconds;
|
||||
}
|
||||
return datetime;
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -92,6 +92,7 @@ extern Settings settings_obj;
|
||||
#define MULTISSID_SNIFF 37 // Use blanks icon
|
||||
#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);
|
||||
@@ -101,6 +102,7 @@ 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);
|
||||
@@ -165,6 +167,9 @@ class MenuFunctions
|
||||
|
||||
Menu wifiMenu;
|
||||
Menu bluetoothMenu;
|
||||
#ifdef HAS_GPS
|
||||
Menu gpsMenu; // H4W9 Added GPS Menu option to Main Menu
|
||||
#endif
|
||||
Menu badusbMenu;
|
||||
Menu deviceMenu;
|
||||
|
||||
@@ -218,13 +223,23 @@ class MenuFunctions
|
||||
|
||||
// Menu icons
|
||||
|
||||
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 = "");
|
||||
@@ -263,6 +278,7 @@ class MenuFunctions
|
||||
#ifdef HAS_GPS
|
||||
// GPS Menu
|
||||
Menu gpsInfoMenu;
|
||||
Menu gpsPOIMenu;
|
||||
#endif
|
||||
|
||||
Menu infoMenu;
|
||||
@@ -277,7 +293,7 @@ class MenuFunctions
|
||||
|
||||
String loaded_file = "";
|
||||
|
||||
void joinWiFiGFX(String essid);
|
||||
void joinWiFiGFX(String essid, bool start_ap = false);
|
||||
void setGraphScale(float scale);
|
||||
void initLVGL();
|
||||
void deinitLVGL();
|
||||
@@ -287,7 +303,7 @@ class MenuFunctions
|
||||
void addAPGFX(String type = "AP");
|
||||
void addStationGFX();
|
||||
void buildButtons(Menu* menu, int starting_index = 0, String button_name = "");
|
||||
void changeMenu(Menu* menu);
|
||||
void changeMenu(Menu* menu, bool simple_change = false);
|
||||
void drawStatusBar();
|
||||
void displayCurrentMenu(int start_index = 0);
|
||||
void main(uint32_t currentTime);
|
||||
@@ -298,3 +314,4 @@ class MenuFunctions
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
@@ -37,7 +37,7 @@ bool SDInterface::initSD() {
|
||||
*/
|
||||
#if defined(MARAUDER_M5STICKC)
|
||||
enum { SPI_SCK = 0, SPI_MISO = 36, SPI_MOSI = 26 };
|
||||
#elif defined(HAS_CYD_TOUCH) || defined(MARAUDER_CARDPUTER)
|
||||
#elif defined(HAS_CYD_TOUCH) || defined(MARAUDER_CARDPUTER) || defined(HAS_SEPARATE_SD)
|
||||
enum { SPI_SCK = SD_SCK, SPI_MISO = SD_MISO, SPI_MOSI = SD_MOSI };
|
||||
#else
|
||||
enum { SPI_SCK = 0, SPI_MISO = 36, SPI_MOSI = 26 };
|
||||
@@ -90,7 +90,7 @@ bool SDInterface::initSD() {
|
||||
|
||||
this->sd_files = new LinkedList<String>();
|
||||
|
||||
this->sd_files->add("Back");
|
||||
//this->sd_files->add("Back");
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -11,7 +11,14 @@
|
||||
#include <vector>
|
||||
|
||||
#ifdef HAS_BT
|
||||
#include <NimBLEDevice.h> // 1.3.8
|
||||
#include <NimBLEDevice.h> // 1.3.8, 2.3.2
|
||||
#endif
|
||||
|
||||
#ifdef HAS_DUAL_BAND
|
||||
extern "C" {
|
||||
#include "esp_netif.h"
|
||||
#include "esp_netif_net_stack.h"
|
||||
}
|
||||
#endif
|
||||
|
||||
#include <WiFi.h>
|
||||
@@ -20,6 +27,9 @@
|
||||
#include <math.h>
|
||||
#include "esp_wifi.h"
|
||||
#include "esp_wifi_types.h"
|
||||
#include <esp_timer.h>
|
||||
#include <lwip/etharp.h>
|
||||
#include <lwip/ip_addr.h>
|
||||
#ifdef HAS_DUAL_BAND
|
||||
#include "esp_system.h"
|
||||
#endif
|
||||
@@ -114,6 +124,22 @@
|
||||
#define GPS_TRACKER 55
|
||||
#define WIFI_ATTACK_BAD_MSG 56
|
||||
#define WIFI_ATTACK_BAD_MSG_TARGETED 57
|
||||
#define WIFI_SCAN_TELNET 58
|
||||
#define WIFI_SCAN_SSH 59
|
||||
#define WIFI_ARP_SCAN 60
|
||||
#define WIFI_ATTACK_SLEEP 61
|
||||
#define WIFI_ATTACK_SLEEP_TARGETED 62
|
||||
#define GPS_POI 63
|
||||
#define WIFI_SCAN_DNS 64
|
||||
#define WIFI_SCAN_HTTP 65
|
||||
#define WIFI_SCAN_HTTPS 66
|
||||
#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 WIFI_ATTACK_FUNNY_BEACON 99
|
||||
|
||||
#define BASE_MULTIPLIER 4
|
||||
|
||||
@@ -192,6 +218,8 @@ struct AirTag {
|
||||
std::vector<uint8_t> payload; // Payload data
|
||||
uint16_t payloadSize;
|
||||
bool selected;
|
||||
int8_t rssi;
|
||||
uint32_t last_seen;
|
||||
};
|
||||
|
||||
struct Flipper {
|
||||
@@ -207,10 +235,13 @@ class WiFiScan
|
||||
{
|
||||
private:
|
||||
// Wardriver thanks to https://github.com/JosephHewitt
|
||||
int arp_count = 0;
|
||||
#ifndef HAS_PSRAM
|
||||
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};
|
||||
|
||||
@@ -267,6 +298,22 @@ class WiFiScan
|
||||
"08 and hurt you"
|
||||
};
|
||||
|
||||
// H4W9 added Funny Beacon Spam
|
||||
const char* funny_beacon[12] = {
|
||||
"Abraham Linksys",
|
||||
"Benjamin FrankLAN",
|
||||
"Dora the Internet Explorer",
|
||||
"FBI Surveillance Van 4",
|
||||
"Get Off My LAN",
|
||||
"Loading...",
|
||||
"Martin Router King",
|
||||
"404 Wi-Fi Unavailable",
|
||||
"Test Wi-Fi Please Ignore",
|
||||
"This LAN is My LAN",
|
||||
"Titanic Syncing",
|
||||
"Winternet is Coming"
|
||||
};
|
||||
|
||||
char* prefix = "G";
|
||||
|
||||
typedef struct
|
||||
@@ -390,7 +437,7 @@ class WiFiScan
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // Destination (Broadcast)
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Source (BSSID)
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // BSSID
|
||||
0x00, 0x00, // Sequence Control
|
||||
0x30, 0x00, // Sequence Control
|
||||
/* LLC / SNAP */
|
||||
0xaa, 0xaa, 0x03, 0x00, 0x00, 0x00,
|
||||
0x88, 0x8e, // Ethertype = EAPOL
|
||||
@@ -422,11 +469,24 @@ class WiFiScan
|
||||
/* Key Data Len (2) */
|
||||
0x00, 0x16,
|
||||
/* Key Data (22 B) */
|
||||
0xDD, 0x16, // Vendor‑specific (PMKID IE)
|
||||
0xDD, 0x14, // Vendor‑specific (PMKID IE)
|
||||
0x00, 0x0F, 0xAC, 0x04, // OUI + Type (PMKID)
|
||||
/* PMKID (16 byte zero) */
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88,
|
||||
0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0x11
|
||||
};
|
||||
|
||||
uint8_t association_packet[200] = {
|
||||
0x00, 0x10, // Frame Control (Association Request) PM=1
|
||||
0x3a, 0x01, // Duration
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // Destination (Broadcast)
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Source (Fake Source or BSSID)
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // BSSID
|
||||
0x00, 0x00, // Sequence Control
|
||||
0x31, 0x00, // Capability Information (PM=1)
|
||||
0x0a, 0x00, // Listen Interval
|
||||
0x00, // SSID tag
|
||||
0x00, // SSID length
|
||||
};
|
||||
|
||||
enum EBLEPayloadType
|
||||
@@ -459,8 +519,11 @@ class WiFiScan
|
||||
NimBLEAdvertisementData GetUniversalAdvertisementData(EBLEPayloadType type);
|
||||
#endif
|
||||
|
||||
void pingScan();
|
||||
void portScan(uint8_t scan_mode = WIFI_PORT_SCAN_ALL);
|
||||
void fullARP();
|
||||
bool readARP(IPAddress targ_ip);
|
||||
bool singleARP(IPAddress ip_addr);
|
||||
void pingScan(uint8_t scan_mode = WIFI_PING_SCAN);
|
||||
void portScan(uint8_t scan_mode = WIFI_PORT_SCAN_ALL, uint16_t targ_port = 22);
|
||||
bool isHostAlive(IPAddress ip);
|
||||
bool checkHostPort(IPAddress ip, uint16_t port, uint16_t timeout = 100);
|
||||
String extractManufacturer(const uint8_t* payload);
|
||||
@@ -485,6 +548,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);
|
||||
@@ -497,16 +561,18 @@ class WiFiScan
|
||||
void sendProbeAttack(uint32_t currentTime);
|
||||
void sendDeauthAttack(uint32_t currentTime, String dst_mac_str = "ff:ff:ff:ff:ff:ff");
|
||||
void sendBadMsgAttack(uint32_t currentTime, bool all = false);
|
||||
void sendAssocSleepAttack(uint32_t currentTime, bool all = false);
|
||||
void sendDeauthFrame(uint8_t bssid[6], int channel, String dst_mac_str = "ff:ff:ff:ff:ff:ff");
|
||||
void sendDeauthFrame(uint8_t bssid[6], int channel, uint8_t mac[6]);
|
||||
void sendEapolBagMsg1(uint8_t bssid[6], int channel, String dst_mac_str = "ff:ff:ff:ff:ff:ff", uint8_t sec = WIFI_SECURITY_WPA2);
|
||||
void sendEapolBagMsg1(uint8_t bssid[6], int channel, uint8_t mac[6], uint8_t sec = WIFI_SECURITY_WPA2);
|
||||
void sendAssociationSleep(const char* ESSID, uint8_t bssid[6], int channel, uint8_t mac[6]);
|
||||
void sendAssociationSleep(const char* ESSID, uint8_t bssid[6], int channel, String dst_mac_str = "ff:ff:ff:ff:ff:ff");
|
||||
void broadcastRandomSSID(uint32_t currentTime);
|
||||
void broadcastCustomBeacon(uint32_t current_time, ssid custom_ssid);
|
||||
void broadcastCustomBeacon(uint32_t current_time, AccessPoint custom_ssid);
|
||||
void broadcastSetSSID(uint32_t current_time, const char* ESSID);
|
||||
void RunAPScan(uint8_t scan_mode, uint16_t color);
|
||||
void RunGPSInfo(bool tracker = false);
|
||||
void RunGPSNmea();
|
||||
void RunMimicFlood(uint8_t scan_mode, uint16_t color);
|
||||
void RunPwnScan(uint8_t scan_mode, uint16_t color);
|
||||
@@ -528,9 +594,8 @@ class WiFiScan
|
||||
void RunPortScanAll(uint8_t scan_mode, uint16_t color);
|
||||
bool checkMem();
|
||||
void parseBSSID(const char* bssidStr, uint8_t* bssid);
|
||||
void logPoint(String lat, String lon, float alt, String datetime);
|
||||
void writeHeader();
|
||||
void writeFooter();
|
||||
void writeHeader(bool poi = false);
|
||||
void writeFooter(bool poi = false);
|
||||
|
||||
|
||||
public:
|
||||
@@ -556,6 +621,14 @@ class WiFiScan
|
||||
bool save_pcap = false;
|
||||
bool ep_deauth = false;
|
||||
|
||||
#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 = "";
|
||||
|
||||
uint8_t analyzer_frames_recvd = 0;
|
||||
@@ -638,9 +711,13 @@ class WiFiScan
|
||||
|
||||
wifi_config_t ap_config;
|
||||
|
||||
void drawChannelLine();
|
||||
#ifdef HAS_SCREEN
|
||||
int8_t checkAnalyzerButtons(uint32_t currentTime);
|
||||
#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();
|
||||
void renderRawStats();
|
||||
void renderPacketRate();
|
||||
@@ -662,6 +739,7 @@ class WiFiScan
|
||||
bool shutdownBLE();
|
||||
bool scanning();
|
||||
bool joinWiFi(String ssid, String password, bool gui = true);
|
||||
bool startWiFi(String ssid, String password, bool gui = true);
|
||||
String getStaMAC();
|
||||
String getApMAC();
|
||||
String freeRAM();
|
||||
@@ -682,8 +760,8 @@ class WiFiScan
|
||||
void RunLoadAPList();
|
||||
void RunSaveATList(bool save_as = true);
|
||||
void RunLoadATList();
|
||||
void RunSetupGPSTracker();
|
||||
void channelHop();
|
||||
void RunSetupGPSTracker(uint8_t scan_mode);
|
||||
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);
|
||||
@@ -713,58 +791,5 @@ class WiFiScan
|
||||
static void pineScanSnifferCallback(void* buf, wifi_promiscuous_pkt_type_t type); // Pineapple
|
||||
static int extractPineScanChannel(const uint8_t* payload, int len); // Pineapple
|
||||
static void multiSSIDSnifferCallback(void* buf, wifi_promiscuous_pkt_type_t type); // MultiSSID
|
||||
|
||||
/*#ifdef HAS_BT
|
||||
enum EBLEPayloadType
|
||||
{
|
||||
Microsoft,
|
||||
Apple,
|
||||
Samsung,
|
||||
Google
|
||||
};
|
||||
|
||||
struct BLEData
|
||||
{
|
||||
NimBLEAdvertisementData AdvData;
|
||||
NimBLEAdvertisementData ScanData;
|
||||
};
|
||||
|
||||
struct WatchModel
|
||||
{
|
||||
uint8_t value;
|
||||
const char *name;
|
||||
};
|
||||
|
||||
WatchModel* watch_models = nullptr;
|
||||
|
||||
const WatchModel watch_models[] = {
|
||||
{0x1A, "Fallback Watch"},
|
||||
{0x01, "White Watch4 Classic 44m"},
|
||||
{0x02, "Black Watch4 Classic 40m"},
|
||||
{0x03, "White Watch4 Classic 40m"},
|
||||
{0x04, "Black Watch4 44mm"},
|
||||
{0x05, "Silver Watch4 44mm"},
|
||||
{0x06, "Green Watch4 44mm"},
|
||||
{0x07, "Black Watch4 40mm"},
|
||||
{0x08, "White Watch4 40mm"},
|
||||
{0x09, "Gold Watch4 40mm"},
|
||||
{0x0A, "French Watch4"},
|
||||
{0x0B, "French Watch4 Classic"},
|
||||
{0x0C, "Fox Watch5 44mm"},
|
||||
{0x11, "Black Watch5 44mm"},
|
||||
{0x12, "Sapphire Watch5 44mm"},
|
||||
{0x13, "Purpleish Watch5 40mm"},
|
||||
{0x14, "Gold Watch5 40mm"},
|
||||
{0x15, "Black Watch5 Pro 45mm"},
|
||||
{0x16, "Gray Watch5 Pro 45mm"},
|
||||
{0x17, "White Watch5 44mm"},
|
||||
{0x18, "White & Black Watch5"},
|
||||
{0x1B, "Black Watch6 Pink 40mm"},
|
||||
{0x1C, "Gold Watch6 Gold 40mm"},
|
||||
{0x1D, "Silver Watch6 Cyan 44mm"},
|
||||
{0x1E, "Black Watch6 Classic 43m"},
|
||||
{0x20, "Green Watch6 Classic 43m"},
|
||||
};
|
||||
#endif*/
|
||||
};
|
||||
#endif
|
||||
|
||||
@@ -26,11 +26,13 @@
|
||||
//#define MARAUDER_CYD_MICRO // 2432S028
|
||||
//#define MARAUDER_CYD_2USB // Another 2432S028 but it has tWo UsBs OoOoOoO
|
||||
//#define MARAUDER_CYD_GUITION // ESP32-2432S024 GUITION
|
||||
//#define MARAUDER_CYD_3_5_INCH
|
||||
//#define MARAUDER_C5
|
||||
//#define MARAUDER_CARDPUTER
|
||||
//#define MARAUDER_V8
|
||||
//// END BOARD TARGETS
|
||||
|
||||
#define MARAUDER_VERSION "v1.8.3"
|
||||
#define MARAUDER_VERSION "v1.8.10"
|
||||
|
||||
#define GRAPH_REFRESH 100
|
||||
|
||||
@@ -60,7 +62,9 @@
|
||||
#elif defined(MARAUDER_CYD_MICRO)
|
||||
#define HARDWARE_NAME "CYD 2432S028"
|
||||
#elif defined(MARAUDER_CYD_2USB)
|
||||
#define HARDWARE_NAME "CYD 2432S028 2USB"
|
||||
#define HARDWARE_NAME "CYD 2432S028 2USB"
|
||||
#elif defined(MARAUDER_CYD_3_5_INCH)
|
||||
#define HARDWARE_NAME "CYD 3.5inch"
|
||||
#elif defined(MARAUDER_CYD_GUITION)
|
||||
#define HARDWARE_NAME "CYD 2432S024 GUITION"
|
||||
#elif defined(MARAUDER_KIT)
|
||||
@@ -77,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
|
||||
@@ -220,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
|
||||
@@ -239,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
|
||||
@@ -255,6 +261,27 @@
|
||||
#define HAS_CYD_PORTRAIT
|
||||
#endif
|
||||
|
||||
#ifdef MARAUDER_CYD_3_5_INCH
|
||||
#define HAS_TOUCH
|
||||
#define HAS_FLIPPER_LED
|
||||
//#define FLIPPER_ZERO_HAT
|
||||
//#define HAS_BATTERY
|
||||
#define HAS_BT
|
||||
#define HAS_BT_REMOTE
|
||||
#define HAS_BUTTONS
|
||||
//#define HAS_NEOPIXEL_LED
|
||||
//#define HAS_PWR_MGMT
|
||||
#define HAS_SCREEN
|
||||
#define HAS_FULL_SCREEN
|
||||
#define HAS_SD
|
||||
#define USE_SD
|
||||
#define HAS_TEMP_SENSOR
|
||||
#define HAS_GPS
|
||||
//#define HAS_CYD_TOUCH
|
||||
#define HAS_SEPARATE_SD
|
||||
#define HAS_CYD_PORTRAIT
|
||||
#endif
|
||||
|
||||
#ifdef MARAUDER_CYD_GUITION
|
||||
#define HAS_TOUCH
|
||||
#define HAS_FLIPPER_LED
|
||||
@@ -382,7 +409,7 @@
|
||||
//#define HAS_BATTERY
|
||||
//#define HAS_BT
|
||||
//#define HAS_BUTTONS
|
||||
//#define HAS_NEOPIXEL_LED
|
||||
#define HAS_NEOPIXEL_LED
|
||||
//#define HAS_PWR_MGMT
|
||||
//#define HAS_SCREEN
|
||||
#define HAS_GPS
|
||||
@@ -393,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
|
||||
@@ -617,6 +664,26 @@
|
||||
#define D_PULL true
|
||||
#endif
|
||||
|
||||
#ifdef MARAUDER_CYD_3_5_INCH
|
||||
#define L_BTN -1
|
||||
#define C_BTN 0
|
||||
#define U_BTN -1
|
||||
#define R_BTN -1
|
||||
#define D_BTN -1
|
||||
|
||||
//#define HAS_L
|
||||
//#define HAS_R
|
||||
//#define HAS_U
|
||||
//#define HAS_D
|
||||
#define HAS_C
|
||||
|
||||
#define L_PULL true
|
||||
#define C_PULL true
|
||||
#define U_PULL true
|
||||
#define R_PULL true
|
||||
#define D_PULL true
|
||||
#endif
|
||||
|
||||
#ifdef MARAUDER_CYD_GUITION
|
||||
#define L_BTN -1
|
||||
#define C_BTN 0
|
||||
@@ -644,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
|
||||
@@ -669,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
|
||||
|
||||
@@ -718,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
|
||||
@@ -743,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
|
||||
|
||||
@@ -792,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
|
||||
@@ -816,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
|
||||
|
||||
@@ -865,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
|
||||
@@ -879,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
|
||||
|
||||
@@ -929,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
|
||||
|
||||
@@ -943,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
|
||||
|
||||
@@ -1000,6 +1151,8 @@
|
||||
#endif
|
||||
|
||||
#if defined(MARAUDER_CYD_MICRO)
|
||||
#define CHAN_PER_PAGE 7
|
||||
|
||||
#define SCREEN_CHAR_WIDTH 40
|
||||
#define HAS_ILI9341
|
||||
|
||||
@@ -1013,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
|
||||
|
||||
@@ -1067,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
|
||||
@@ -1081,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
|
||||
|
||||
@@ -1134,7 +1289,81 @@
|
||||
#define KIT_LED_BUILTIN 13
|
||||
#endif
|
||||
|
||||
#if defined(MARAUDER_CYD_3_5_INCH)
|
||||
#define CHAN_PER_PAGE 7
|
||||
|
||||
#define SCREEN_CHAR_WIDTH 40
|
||||
#define HAS_ILI9341
|
||||
#define HAS_ST7796
|
||||
|
||||
#define BANNER_TEXT_SIZE 2
|
||||
|
||||
#ifndef TFT_WIDTH
|
||||
#define TFT_WIDTH 320
|
||||
#endif
|
||||
|
||||
#ifndef TFT_HEIGHT
|
||||
#define TFT_HEIGHT 480
|
||||
#endif
|
||||
|
||||
#define TFT_DIY
|
||||
|
||||
#define GRAPH_VERT_LIM TFT_HEIGHT/2 - 1
|
||||
|
||||
#define EXT_BUTTON_WIDTH 20
|
||||
|
||||
#define SCREEN_BUFFER
|
||||
|
||||
#define MAX_SCREEN_BUFFER 33
|
||||
|
||||
#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 480 // 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 TFT_WIDTH / 2
|
||||
#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_CYD_GUITION)
|
||||
#define CHAN_PER_PAGE 7
|
||||
|
||||
#define SCREEN_CHAR_WIDTH 40
|
||||
#define HAS_ILI9341
|
||||
|
||||
@@ -1150,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
|
||||
|
||||
@@ -1204,6 +1433,8 @@
|
||||
#endif
|
||||
|
||||
#ifdef MARAUDER_V7
|
||||
#define CHAN_PER_PAGE 7
|
||||
|
||||
#define SCREEN_CHAR_WIDTH 40
|
||||
//#define HAS_ILI9341
|
||||
|
||||
@@ -1217,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
|
||||
|
||||
@@ -1273,6 +1504,8 @@
|
||||
#endif
|
||||
|
||||
#ifdef MARAUDER_V7_1
|
||||
#define CHAN_PER_PAGE 7
|
||||
|
||||
#define SCREEN_CHAR_WIDTH 40
|
||||
//#define HAS_ILI9341
|
||||
|
||||
@@ -1286,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
|
||||
|
||||
@@ -1342,6 +1575,8 @@
|
||||
#endif
|
||||
|
||||
#ifdef MARAUDER_KIT
|
||||
#define CHAN_PER_PAGE 7
|
||||
|
||||
#define SCREEN_CHAR_WIDTH 40
|
||||
#define HAS_ILI9341
|
||||
|
||||
@@ -1355,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
|
||||
@@ -1408,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
|
||||
@@ -1433,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
|
||||
|
||||
@@ -1481,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
|
||||
@@ -1506,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
|
||||
|
||||
@@ -1595,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
|
||||
|
||||
@@ -1633,6 +1891,25 @@
|
||||
//#define BUTTON_ARRAY_LEN 5
|
||||
#endif
|
||||
|
||||
#if defined(MARAUDER_CYD_3_5_INCH)
|
||||
#define BANNER_TIME 100
|
||||
|
||||
#define COMMAND_PREFIX "!"
|
||||
|
||||
// Keypad start position, key sizes and spacing
|
||||
#define KEY_X 160 // Centre of key
|
||||
#define KEY_Y 50
|
||||
#define KEY_W 320 // 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_GUITION)
|
||||
#define BANNER_TIME 100
|
||||
|
||||
@@ -1805,6 +2082,10 @@
|
||||
#define SD_CS 5
|
||||
#endif
|
||||
|
||||
#ifdef MARAUDER_CYD_3_5_INCH
|
||||
#define SD_CS 5
|
||||
#endif
|
||||
|
||||
#ifdef MARAUDER_CYD_GUITION
|
||||
#define SD_CS 5
|
||||
#endif
|
||||
@@ -1865,6 +2146,10 @@
|
||||
#define SD_CS 10
|
||||
#endif
|
||||
|
||||
#ifdef MARAUDER_V8
|
||||
#define SD_CS 10
|
||||
#endif
|
||||
|
||||
#endif
|
||||
//// END SD DEFINITIONS
|
||||
|
||||
@@ -1911,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>
|
||||
@@ -1942,6 +2229,8 @@
|
||||
#define MEM_LOWER_LIM 10000
|
||||
#elif defined(MARAUDER_CYD_2USB)
|
||||
#define MEM_LOWER_LIM 10000
|
||||
#elif defined(MARAUDER_CYD_3_5_INCH)
|
||||
#define MEM_LOWER_LIM 10000
|
||||
#elif defined(MARAUDER_CYD_GUITION)
|
||||
#define MEM_LOWER_LIM 10000
|
||||
#elif defined(MARAUDER_KIT)
|
||||
@@ -1960,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
|
||||
|
||||
@@ -1976,6 +2267,12 @@
|
||||
#define PIN 4
|
||||
#elif defined(MARAUDER_CYD_2USB)
|
||||
#define PIN 4
|
||||
#elif defined(MARAUDER_CYD_3_5_INCH)
|
||||
#define PIN 22
|
||||
#elif defined(MARAUDER_C5)
|
||||
#define PIN 27
|
||||
#elif defined(MARAUDER_V8)
|
||||
#define PIN 27
|
||||
#else
|
||||
#define PIN 25
|
||||
#endif
|
||||
@@ -2007,12 +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 25
|
||||
#elif defined(MARAUDER_CYD_GUITION)
|
||||
#define GPS_SERIAL_INDEX 2
|
||||
#define GPS_TX 21 // Fits the extended I/O
|
||||
@@ -2065,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
|
||||
@@ -2124,6 +2429,21 @@
|
||||
#define I2C_SCL 27
|
||||
#endif
|
||||
|
||||
#ifdef MARAUDER_CYD_3_5_INCH
|
||||
#define I2C_SDA 32
|
||||
#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
|
||||
@@ -2135,6 +2455,8 @@
|
||||
#define MARAUDER_TITLE_BYTES 13578
|
||||
#elif defined(MARAUDER_CYD_2USB)
|
||||
#define MARAUDER_TITLE_BYTES 13578
|
||||
#elif defined(MARAUDER_CYD_3_5_INCH)
|
||||
#define MARAUDER_TITLE_BYTES 13578
|
||||
#elif defined(MARAUDER_CYD_GUITION)
|
||||
#define MARAUDER_TITLE_BYTES 13578
|
||||
#elif defined(MARAUDER_KIT)
|
||||
@@ -2149,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
|
||||
@@ -2170,7 +2494,7 @@
|
||||
//// PCAP BUFFER STUFF
|
||||
|
||||
//// STUPID CYD STUFF
|
||||
#if defined(HAS_CYD_TOUCH) || defined(HAS_C5_SD)
|
||||
#if defined(HAS_CYD_TOUCH) || defined(HAS_C5_SD) || defined(HAS_SEPARATE_SD)
|
||||
#ifdef MARAUDER_CYD_MICRO
|
||||
#define XPT2046_IRQ 36
|
||||
#define XPT2046_MOSI 32
|
||||
@@ -2195,11 +2519,23 @@
|
||||
#define SD_SCK 18
|
||||
#endif
|
||||
|
||||
#ifdef MARAUDER_CYD_3_5_INCH
|
||||
#define SD_MISO 19
|
||||
#define SD_MOSI 23
|
||||
#define SD_SCK 18
|
||||
#endif
|
||||
|
||||
#ifdef MARAUDER_C5
|
||||
#define SD_MISO 2
|
||||
#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
|
||||
|
||||
@@ -2230,6 +2566,12 @@
|
||||
#define R_PIN 4
|
||||
#endif
|
||||
|
||||
#ifdef MARAUDER_CYD_3_5_INCH
|
||||
#define B_PIN 17
|
||||
#define G_PIN 16
|
||||
#define R_PIN 22
|
||||
#endif
|
||||
|
||||
#ifdef MARAUDER_CYD_GUITION
|
||||
#define B_PIN 17
|
||||
#define G_PIN 16
|
||||
@@ -2244,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();
|
||||
|
||||
@@ -106,6 +106,9 @@ PROGMEM const char text1_62[] = "Deauth Targeted";
|
||||
PROGMEM const char text1_63[] = "Detect Pineapple";
|
||||
PROGMEM const char text1_64[] = "Detect MultiSSID";
|
||||
PROGMEM const char text1_65[] = "Select probe SSIDs";
|
||||
PROGMEM const char text1_66[] = "GPS"; // Text label for GPS Menu in Main Menu
|
||||
PROGMEM const char text1_67[] = "Funny SSID Beacon";
|
||||
|
||||
|
||||
//SDInterface.cpp texts
|
||||
PROGMEM const char text2_0[] = "Error, could not find update.bin";
|
||||
@@ -165,9 +168,9 @@ PROGMEM const char text4_28[] = "SD Card: Connected";
|
||||
PROGMEM const char text4_29[] = "SD Card Size: ";
|
||||
PROGMEM const char text4_30[] = "SD Card: Not Connected";
|
||||
PROGMEM const char text4_31[] = "SD Card Size: 0";
|
||||
PROGMEM const char text4_32[] = "IP5306 I2C: supported";
|
||||
PROGMEM const char text4_32[] = "Battery Monitor: supported";
|
||||
PROGMEM const char text4_33[] = "Battery Lvl: ";
|
||||
PROGMEM const char text4_34[] = "IP5306 I2C: not supported";
|
||||
PROGMEM const char text4_34[] = "Battery Monitor: not supported";
|
||||
PROGMEM const char text4_35[] = "Internal temp: ";
|
||||
PROGMEM const char text4_36[] = " Detect Espressif ";
|
||||
PROGMEM const char text4_37[] = " Detect Pwnagotchi ";
|
||||
@@ -186,7 +189,7 @@ PROGMEM const char text4_49[] = " Detect MultiSSID ";
|
||||
|
||||
//Making tables
|
||||
PROGMEM const char *text_table0[] = {text0_0,text0_1, text0_2, text0_3, text0_4, text0_5, text0_6, text0_7, text0_8};
|
||||
PROGMEM const char *text_table1[] = {text1_0,text1_1,text1_2,text1_3,text1_4,text1_5,text1_6,text1_7,text1_8,text1_9,text1_10,text1_11,text1_12,text1_13,text1_14,text1_15,text1_16,text1_17,text1_18,text1_19,text1_20,text1_21,text1_22,text1_23,text1_24,text1_25,text1_26,text1_27,text1_28,text1_29,text1_30,text1_31,text1_32,text1_33,text1_34,text1_35,text1_36,text1_37,text1_38,text1_39,text1_40,text1_41,text1_42,text1_43,text1_44,text1_45,text1_46,text1_47,text1_48,text1_49,text1_50,text1_51,text1_52,text1_53,text1_54,text1_55,text1_56,text1_57,text1_58,text1_59,text1_60,text1_61,text1_62,text1_63,text1_64, text1_65};
|
||||
PROGMEM const char *text_table1[] = {text1_0,text1_1,text1_2,text1_3,text1_4,text1_5,text1_6,text1_7,text1_8,text1_9,text1_10,text1_11,text1_12,text1_13,text1_14,text1_15,text1_16,text1_17,text1_18,text1_19,text1_20,text1_21,text1_22,text1_23,text1_24,text1_25,text1_26,text1_27,text1_28,text1_29,text1_30,text1_31,text1_32,text1_33,text1_34,text1_35,text1_36,text1_37,text1_38,text1_39,text1_40,text1_41,text1_42,text1_43,text1_44,text1_45,text1_46,text1_47,text1_48,text1_49,text1_50,text1_51,text1_52,text1_53,text1_54,text1_55,text1_56,text1_57,text1_58,text1_59,text1_60,text1_61,text1_62,text1_63,text1_64, text1_65, text1_66, text1_67};
|
||||
PROGMEM const char *text_table2[] = {text2_0,text2_1,text2_2,text2_3,text2_4,text2_5,text2_6,text2_7,text2_8,text2_9,text2_10,text2_11,text2_12,text2_13,text2_14};
|
||||
PROGMEM const char *text_table3[] = {text3_0,text3_1,text3_2,text3_3,text3_4,text3_5};
|
||||
PROGMEM const char *text_table4[] = {text4_0,text4_1,text4_2,text4_3,text4_4,text4_5,text4_6,text4_7,text1_54,text4_9,text4_10,text4_11,text4_12,text4_13,text4_14,text4_15,text4_16,text4_17,text4_18,text4_19,text4_20,text4_21,text4_22,text4_23,text4_24,text4_25,text4_26,text4_27,text4_28,text4_29,text4_30,text4_31,text4_32,text4_33,text4_34,text4_35,text4_36,text4_37,text4_38,text4_39,text4_40,text4_41,text4_42,text4_43,text4_44,text4_45,text4_46,text4_47,text4_48,text4_49};
|
||||
|
||||
@@ -82,6 +82,10 @@ String Settings::loadSetting<String>(String key) {
|
||||
return json["Settings"][i]["value"];
|
||||
}
|
||||
|
||||
Serial.println("Did not find setting named " + (String)key + ". Creating...");
|
||||
if (this->createDefaultSettings(SPIFFS, true, json["Settings"].size(), "String", key))
|
||||
return "";
|
||||
|
||||
return "";
|
||||
}
|
||||
|
||||
@@ -169,6 +173,52 @@ bool Settings::saveSetting<bool>(String key, bool value) {
|
||||
return false;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
T Settings::saveSetting(String key, String value) {}
|
||||
|
||||
template<>
|
||||
bool Settings::saveSetting<bool>(String key, String value) {
|
||||
DynamicJsonDocument json(1024); // ArduinoJson v6
|
||||
|
||||
if (deserializeJson(json, this->json_settings_string)) {
|
||||
Serial.println("\nCould not parse json");
|
||||
}
|
||||
|
||||
String settings_string;
|
||||
|
||||
for (int i = 0; i < json["Settings"].size(); i++) {
|
||||
if (json["Settings"][i]["name"].as<String>() == key) {
|
||||
json["Settings"][i]["value"] = value;
|
||||
|
||||
Serial.println("Saving setting...");
|
||||
|
||||
File settingsFile = SPIFFS.open("/settings.json", FILE_WRITE);
|
||||
|
||||
if (!settingsFile) {
|
||||
Serial.println(F("Failed to create settings file"));
|
||||
return false;
|
||||
}
|
||||
|
||||
if (serializeJson(json, settingsFile) == 0) {
|
||||
Serial.println(F("Failed to write to file"));
|
||||
}
|
||||
if (serializeJson(json, settings_string) == 0) {
|
||||
Serial.println(F("Failed to write to string"));
|
||||
}
|
||||
|
||||
// Close the file
|
||||
settingsFile.close();
|
||||
|
||||
this->json_settings_string = settings_string;
|
||||
|
||||
this->printJsonSettings(settings_string);
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool Settings::toggleSetting(String key) {
|
||||
DynamicJsonDocument json(1024); // ArduinoJson v6
|
||||
|
||||
@@ -288,6 +338,18 @@ bool Settings::createDefaultSettings(fs::FS &fs, bool spec, uint8_t index, Strin
|
||||
jsonBuffer["Settings"][4]["range"]["min"] = false;
|
||||
jsonBuffer["Settings"][4]["range"]["max"] = true;
|
||||
|
||||
jsonBuffer["Settings"][5]["name"] = "ClientSSID";
|
||||
jsonBuffer["Settings"][5]["type"] = "String";
|
||||
jsonBuffer["Settings"][5]["value"] = "";
|
||||
jsonBuffer["Settings"][5]["range"]["min"] = "";
|
||||
jsonBuffer["Settings"][5]["range"]["max"] = "";
|
||||
|
||||
jsonBuffer["Settings"][6]["name"] = "ClientPW";
|
||||
jsonBuffer["Settings"][6]["type"] = "String";
|
||||
jsonBuffer["Settings"][6]["value"] = "";
|
||||
jsonBuffer["Settings"][6]["range"]["min"] = "";
|
||||
jsonBuffer["Settings"][6]["range"]["max"] = "";
|
||||
|
||||
//jsonBuffer.printTo(settingsFile);
|
||||
if (serializeJson(jsonBuffer, settingsFile) == 0) {
|
||||
Serial.println(F("Failed to write to file"));
|
||||
@@ -321,6 +383,23 @@ bool Settings::createDefaultSettings(fs::FS &fs, bool spec, uint8_t index, Strin
|
||||
Serial.println("Failed to write to file");
|
||||
}
|
||||
}
|
||||
|
||||
else if (typeStr == "String") {
|
||||
Serial.println("Creating String setting...");
|
||||
json["Settings"][index]["name"] = name;
|
||||
json["Settings"][index]["type"] = typeStr;
|
||||
json["Settings"][index]["value"] = "";
|
||||
json["Settings"][index]["range"]["min"] = "";
|
||||
json["Settings"][index]["range"]["max"] = "";
|
||||
|
||||
if (serializeJson(json, settings_string) == 0) {
|
||||
Serial.println("Failed to write to string");
|
||||
}
|
||||
|
||||
if (serializeJson(json, settingsFile) == 0) {
|
||||
Serial.println("Failed to write to file");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Close the file
|
||||
|
||||
@@ -31,6 +31,9 @@ class Settings {
|
||||
template <typename T>
|
||||
T saveSetting(String key, bool value);
|
||||
|
||||
template <typename T>
|
||||
T saveSetting(String key, String value);
|
||||
|
||||
bool toggleSetting(String key);
|
||||
String getSettingType(String key);
|
||||
String setting_index_to_name(int i);
|
||||
|
||||
@@ -382,6 +382,29 @@ IPAddress getNextIP(IPAddress currentIP, IPAddress subnetMask) {
|
||||
);
|
||||
}
|
||||
|
||||
IPAddress getPrevIP(IPAddress currentIP, IPAddress subnetMask, uint16_t stepsBack) {
|
||||
// Convert IPAddress to uint32_t
|
||||
uint32_t ipInt = (currentIP[0] << 24) | (currentIP[1] << 16) | (currentIP[2] << 8) | currentIP[3];
|
||||
uint32_t maskInt = (subnetMask[0] << 24) | (subnetMask[1] << 16) | (subnetMask[2] << 8) | subnetMask[3];
|
||||
|
||||
uint32_t networkBase = ipInt & maskInt;
|
||||
uint32_t broadcast = networkBase | ~maskInt;
|
||||
|
||||
uint32_t prevIP = ipInt - stepsBack;
|
||||
|
||||
// Ensure prevIP is not below the usable range
|
||||
if (prevIP <= networkBase) {
|
||||
return IPAddress(0, 0, 0, 0); // No more IPs
|
||||
}
|
||||
|
||||
return IPAddress(
|
||||
(prevIP >> 24) & 0xFF,
|
||||
(prevIP >> 16) & 0xFF,
|
||||
(prevIP >> 8) & 0xFF,
|
||||
prevIP & 0xFF
|
||||
);
|
||||
}
|
||||
|
||||
uint16_t getNextPort(uint16_t port) {
|
||||
return port + 1;
|
||||
}
|
||||
|
||||
BIN
mechanical/C5 Adapter/.DS_Store
vendored
Normal file
BIN
mechanical/C5 Adapter/.DS_Store
vendored
Normal file
Binary file not shown.
BIN
mechanical/C5 Adapter/Extra designs/.DS_Store
vendored
Normal file
BIN
mechanical/C5 Adapter/Extra designs/.DS_Store
vendored
Normal file
Binary file not shown.
BIN
mechanical/C5 Adapter/Extra designs/c5 adapter back - SMA.stl
Normal file
BIN
mechanical/C5 Adapter/Extra designs/c5 adapter back - SMA.stl
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
mechanical/C5 Adapter/Extra designs/c5 adapter front - SMA.stl
Normal file
BIN
mechanical/C5 Adapter/Extra designs/c5 adapter front - SMA.stl
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
mechanical/C5 Adapter/c5 adapter back.stl
Normal file
BIN
mechanical/C5 Adapter/c5 adapter back.stl
Normal file
Binary file not shown.
BIN
mechanical/C5 Adapter/c5 adapter front.stl
Normal file
BIN
mechanical/C5 Adapter/c5 adapter front.stl
Normal file
Binary file not shown.
BIN
mechanical/C5 Adapter/c5 adapter pin cover.stl
Normal file
BIN
mechanical/C5 Adapter/c5 adapter pin cover.stl
Normal file
Binary file not shown.
BIN
pictures/icons/funny_beacon_22.bmp
Normal file
BIN
pictures/icons/funny_beacon_22.bmp
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.6 KiB |
Reference in New Issue
Block a user