Compare commits
510 Commits
v1.0.0
...
nightly_a8
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a874375fb0 | ||
|
|
22f4dc66ec | ||
|
|
31baacac3e | ||
|
|
601aee9b8a | ||
|
|
93ac8b3cde | ||
|
|
08d1682ae4 | ||
|
|
1343c91064 | ||
|
|
7f741d75fb | ||
|
|
de2a916ad6 | ||
|
|
5a928a7ae8 | ||
|
|
b5bb65f76b | ||
|
|
09b519d0a2 | ||
|
|
3fc18d642b | ||
|
|
7460b40543 | ||
|
|
0b6dc40fa6 | ||
|
|
6331e43db1 | ||
|
|
9819a6ba1b | ||
|
|
f170caa9d2 | ||
|
|
3838296173 | ||
|
|
8526e49189 | ||
|
|
a3aff9afd6 | ||
|
|
50033af120 | ||
|
|
2ccb8675dc | ||
|
|
05eb6d74a5 | ||
|
|
c06e104485 | ||
|
|
0a8d9d2d41 | ||
|
|
ab9870219a | ||
|
|
941532eba0 | ||
|
|
c515873fd5 | ||
|
|
1bf0b0e2c1 | ||
|
|
9ea5fbc3eb | ||
|
|
0e8e698254 | ||
|
|
630687359d | ||
|
|
5070b9785d | ||
|
|
b0c8dd5cb4 | ||
|
|
5fa046b599 | ||
|
|
48164bc4ec | ||
|
|
68085fc6a7 | ||
|
|
0f62303018 | ||
|
|
dc7992d040 | ||
|
|
0764625eb1 | ||
|
|
748afc99e8 | ||
|
|
c4e78293a6 | ||
|
|
74cd774718 | ||
|
|
feaae672da | ||
|
|
ba9ec4023e | ||
|
|
7045ce9380 | ||
|
|
69a7d9b24f | ||
|
|
11f2cec1fd | ||
|
|
828d0b1760 | ||
|
|
fc903cc66b | ||
|
|
e3d3d8276c | ||
|
|
72951397d8 | ||
|
|
e5f2466c41 | ||
|
|
d70d141662 | ||
|
|
4bd3a1d4b1 | ||
|
|
510e5692b0 | ||
|
|
4b5339bf89 | ||
|
|
2efcb63d19 | ||
|
|
871fc356c6 | ||
|
|
0e1a289678 | ||
|
|
a1f4c9dc28 | ||
|
|
762f6f7ec9 | ||
|
|
ffcb2585d5 | ||
|
|
b2cd8efe38 | ||
|
|
174885dff5 | ||
|
|
8e523ed237 | ||
|
|
faf1bbb620 | ||
|
|
71c0d2e616 | ||
|
|
3e09d2d816 | ||
|
|
3ce7d45341 | ||
|
|
e86f16934e | ||
|
|
4042e9d43b | ||
|
|
8a0817e547 | ||
|
|
02febc63c6 | ||
|
|
969a2fff30 | ||
|
|
8831927580 | ||
|
|
72ed6de7dc | ||
|
|
ad4b660dd4 | ||
|
|
f25e2b90d5 | ||
|
|
c44be1ecdc | ||
|
|
d74a22b297 | ||
|
|
79cbd91b60 | ||
|
|
7448c266e4 | ||
|
|
5088e0bfb4 | ||
|
|
08517d7587 | ||
|
|
d1ad247dd3 | ||
|
|
71cd5859f4 | ||
|
|
24f3e18b69 | ||
|
|
74f09ee86f | ||
|
|
20242245ab | ||
|
|
e8f0c1317e | ||
|
|
d52b2922e6 | ||
|
|
ecfdcd3bdc | ||
|
|
8e54de7b2d | ||
|
|
77f3fa7025 | ||
|
|
b86929256f | ||
|
|
16d0101ce6 | ||
|
|
e3668645e3 | ||
|
|
ea0be07c91 | ||
|
|
e4d483d736 | ||
|
|
c2aba77cc0 | ||
|
|
78b73f4ca2 | ||
|
|
ef4ec4edad | ||
|
|
c6daeb5517 | ||
|
|
dcd493d474 | ||
|
|
68bd55b162 | ||
|
|
90db402b6b | ||
|
|
e064c3beed | ||
|
|
18d71769da | ||
|
|
a259cbcc6d | ||
|
|
482f4114e0 | ||
|
|
a917ff2211 | ||
|
|
92e1795ce5 | ||
|
|
605086ea59 | ||
|
|
554d358cba | ||
|
|
614c7099f9 | ||
|
|
d131491bbf | ||
|
|
dcf3b13552 | ||
|
|
4b6cb6582d | ||
|
|
7a41d4be14 | ||
|
|
2d195ea697 | ||
|
|
b1c256036f | ||
|
|
ac3e4ab427 | ||
|
|
3ca777e711 | ||
|
|
938a691010 | ||
|
|
3c61198d09 | ||
|
|
bbf245859a | ||
|
|
fbf2e9ab18 | ||
|
|
de05c9be2b | ||
|
|
4e88212e2f | ||
|
|
ef5d9527ef | ||
|
|
7f522d8e15 | ||
|
|
f35d88122c | ||
|
|
fc8f9629fa | ||
|
|
5a1269d062 | ||
|
|
3c093f6c9c | ||
|
|
6840d4c7ac | ||
|
|
d5c5e0e011 | ||
|
|
2f9d70b725 | ||
|
|
06293a0a4c | ||
|
|
c51171df76 | ||
|
|
030035f68d | ||
|
|
9a265f805b | ||
|
|
6497e741d6 | ||
|
|
e5387b80fc | ||
|
|
53613de14b | ||
|
|
3cf7702e23 | ||
|
|
e8f449ad01 | ||
|
|
b2ed6c70e1 | ||
|
|
d8b9e3b138 | ||
|
|
ba35343600 | ||
|
|
02f0ecf85b | ||
|
|
57fde11782 | ||
|
|
f5ecde8278 | ||
|
|
1964072b99 | ||
|
|
2d8403b090 | ||
|
|
27c37a489d | ||
|
|
34ccdbaa14 | ||
|
|
b85ce8b071 | ||
|
|
db75cd7d91 | ||
|
|
76b06792f5 | ||
|
|
3ea48c35e5 | ||
|
|
74d952dc5f | ||
|
|
b490b5968f | ||
|
|
7e2646e889 | ||
|
|
a75e1d7891 | ||
|
|
8c56181871 | ||
|
|
34157d93cd | ||
|
|
387d277e02 | ||
|
|
1ae345234d | ||
|
|
399b8d6c38 | ||
|
|
3c51ae4e4d | ||
|
|
d17222d7b0 | ||
|
|
561bca75d2 | ||
|
|
0603468ee3 | ||
|
|
6596b41029 | ||
|
|
9722cce0ba | ||
|
|
5ddf9786e0 | ||
|
|
4ebbd90e74 | ||
|
|
944d23c3a9 | ||
|
|
7e5f48bacd | ||
|
|
bc9c3ad32b | ||
|
|
adebbb15d1 | ||
|
|
fe975f1145 | ||
|
|
c16afc958b | ||
|
|
f2c8d2071b | ||
|
|
0bdb9470fb | ||
|
|
761966e704 | ||
|
|
66a5efcd33 | ||
|
|
478586a8da | ||
|
|
1febb4a13c | ||
|
|
f55e5aede3 | ||
|
|
701abd2aa7 | ||
|
|
113e8c0c92 | ||
|
|
6920db4ab9 | ||
|
|
77117a4dae | ||
|
|
7353dd69b3 | ||
|
|
1398dbe00d | ||
|
|
23e2b6d221 | ||
|
|
fd1a34e567 | ||
|
|
e2b6983950 | ||
|
|
651761c7a7 | ||
|
|
c0d17f195a | ||
|
|
7c59161ae7 | ||
|
|
899b854819 | ||
|
|
052d336c92 | ||
|
|
6008cc359d | ||
|
|
01a7c33e9e | ||
|
|
4c22b9af7c | ||
|
|
c6bf7d63e5 | ||
|
|
e618e878f6 | ||
|
|
2311aa1f1b | ||
|
|
a2fd8ef90d | ||
|
|
e1217a7f4f | ||
|
|
0025dc2f68 | ||
|
|
999be5d100 | ||
|
|
04847f9537 | ||
|
|
02802ca6e4 | ||
|
|
e8c4e9c01a | ||
|
|
f1bcdad370 | ||
|
|
2c2df227d2 | ||
|
|
ede779845c | ||
|
|
9c62237fcf | ||
|
|
7966b07441 | ||
|
|
158644092c | ||
|
|
9411128cca | ||
|
|
530a30c6d7 | ||
|
|
ee7e3f1d1e | ||
|
|
3d9b91a80b | ||
|
|
07a3e54498 | ||
|
|
9a25224c83 | ||
|
|
44189ff945 | ||
|
|
d61542eb5f | ||
|
|
e0eb37e082 | ||
|
|
17338427a1 | ||
|
|
a10bb164ac | ||
|
|
b43a79e036 | ||
|
|
1cdb9b4a17 | ||
|
|
c117eebc0f | ||
|
|
303a9d2eeb | ||
|
|
a101bfdddf | ||
|
|
a0ed27308e | ||
|
|
2362b8e8c5 | ||
|
|
0ca43eb403 | ||
|
|
b76de6c314 | ||
|
|
d0ac2f178b | ||
|
|
06a5de8cd9 | ||
|
|
e300489b77 | ||
|
|
fe27910096 | ||
|
|
50b96f696e | ||
|
|
35c6d9ca63 | ||
|
|
07762891d5 | ||
|
|
1278474ca0 | ||
|
|
4874ef3193 | ||
|
|
a6ed8899c7 | ||
|
|
2c40d83e3a | ||
|
|
acef9d437c | ||
|
|
50d876e20f | ||
|
|
d8512b082c | ||
|
|
dec4b9066f | ||
|
|
dd74b60744 | ||
|
|
3a3102d877 | ||
|
|
38d99bda35 | ||
|
|
01660f408d | ||
|
|
5d2c2d553a | ||
|
|
0beb7c455f | ||
|
|
61a7449a89 | ||
|
|
eb6000a5c3 | ||
|
|
93cb77526f | ||
|
|
bade515fb3 | ||
|
|
ed95a97506 | ||
|
|
ebc3497c32 | ||
|
|
38bef9121f | ||
|
|
a274e42708 | ||
|
|
33d7460c6b | ||
|
|
51eddd5b8f | ||
|
|
e9e6a84c17 | ||
|
|
75e3e71453 | ||
|
|
a73da306c9 | ||
|
|
b0a98dbdd6 | ||
|
|
09eab04003 | ||
|
|
bed3de7b41 | ||
|
|
a4c0569c7f | ||
|
|
dc404f8766 | ||
|
|
3bc65c2e66 | ||
|
|
bced58cf4c | ||
|
|
289c127871 | ||
|
|
60e228ee6c | ||
|
|
478c677f6a | ||
|
|
1307d71c5d | ||
|
|
1f08406c63 | ||
|
|
b41597fdac | ||
|
|
b6fe3954e6 | ||
|
|
dfa3f5b1f0 | ||
|
|
d4140ffeab | ||
|
|
40626ac682 | ||
|
|
eb2eadae9f | ||
|
|
3a24619fe8 | ||
|
|
806238fdb2 | ||
|
|
877fb65ab7 | ||
|
|
c8b429e320 | ||
|
|
ba7c05ff73 | ||
|
|
339b9b7c8b | ||
|
|
aa750ec9b8 | ||
|
|
7f68fa3aea | ||
|
|
bcb218124f | ||
|
|
2631d096c9 | ||
|
|
dc2c8e241a | ||
|
|
8f3d0219f0 | ||
|
|
650fe84b4e | ||
|
|
2d922bac23 | ||
|
|
e918c939f0 | ||
|
|
a0c5349bea | ||
|
|
f3224edccf | ||
|
|
9482a9dde2 | ||
|
|
2afab2e414 | ||
|
|
3b479be94c | ||
|
|
c2fdb56200 | ||
|
|
feebddff13 | ||
|
|
526b01e343 | ||
|
|
527414b3f4 | ||
|
|
16a0e60471 | ||
|
|
313206f369 | ||
|
|
ad1caa1c25 | ||
|
|
317af676ec | ||
|
|
2b66c4f304 | ||
|
|
80f817660f | ||
|
|
fb6d1fa0a3 | ||
|
|
f00906058a | ||
|
|
798fb3bbb7 | ||
|
|
011d2c5f1b | ||
|
|
cca589f749 | ||
|
|
68ef819383 | ||
|
|
37290100e4 | ||
|
|
8eab6bff81 | ||
|
|
4426f3778a | ||
|
|
4a90876d81 | ||
|
|
9fd032a698 | ||
|
|
97dce525a4 | ||
|
|
424aa61127 | ||
|
|
4c6a2b23c4 | ||
|
|
10f90d93d8 | ||
|
|
51588497aa | ||
|
|
4a0a3f5182 | ||
|
|
8b84f4c19a | ||
|
|
74baf42dca | ||
|
|
983887191c | ||
|
|
046b396612 | ||
|
|
86bec1e91a | ||
|
|
ae51c321ff | ||
|
|
f3d9fbc2f8 | ||
|
|
1767f76362 | ||
|
|
908aae7965 | ||
|
|
4127e4d3d0 | ||
|
|
cc4a069af3 | ||
|
|
dae7e19abe | ||
|
|
2a8006a59d | ||
|
|
f0d1c048f5 | ||
|
|
94a7c6c587 | ||
|
|
0a395944c6 | ||
|
|
00b27c8e87 | ||
|
|
065e931376 | ||
|
|
9b7d1ab31f | ||
|
|
593dd99d1a | ||
|
|
12794f57bc | ||
|
|
7c73689a13 | ||
|
|
20e70e9343 | ||
|
|
25567aca81 | ||
|
|
0ecc183b59 | ||
|
|
df5e495f3a | ||
|
|
aa5cb56b97 | ||
|
|
cd5d537373 | ||
|
|
868c8a85de | ||
|
|
d3299474c6 | ||
|
|
e662f917bc | ||
|
|
4004e4e6d0 | ||
|
|
cdae54be5a | ||
|
|
4dd856999f | ||
|
|
231d331ff7 | ||
|
|
1cc7b3f620 | ||
|
|
caecd09d74 | ||
|
|
3c5b3bd544 | ||
|
|
4d145d5c0b | ||
|
|
020d0ace3c | ||
|
|
6229ad6d2a | ||
|
|
649f619f87 | ||
|
|
695aed1710 | ||
|
|
76dd3f020d | ||
|
|
60d8a9004b | ||
|
|
84fc9738d4 | ||
|
|
ed65e6d2f7 | ||
|
|
fad44231cf | ||
|
|
974ed246dc | ||
|
|
960c66247d | ||
|
|
39b53e22ba | ||
|
|
1bc2b36c9c | ||
|
|
fe6ab68819 | ||
|
|
f4634638a9 | ||
|
|
e3f32106d9 | ||
|
|
1e5b083d14 | ||
|
|
46dafaa2e4 | ||
|
|
fab8088198 | ||
|
|
e16d421213 | ||
|
|
3ba30ec5d9 | ||
|
|
062cc320d3 | ||
|
|
22058ce83c | ||
|
|
43130cbb42 | ||
|
|
727397f537 | ||
|
|
a2722ea23b | ||
|
|
edbfd62e4c | ||
|
|
5207b18aff | ||
|
|
5d8fba14c1 | ||
|
|
7fd64995bb | ||
|
|
7efa7c8a12 | ||
|
|
6929e3547b | ||
|
|
92cd8933d1 | ||
|
|
78db6eb2d4 | ||
|
|
404ceb03ff | ||
|
|
d9356043bf | ||
|
|
ae8a93a6d2 | ||
|
|
038284c3be | ||
|
|
e394174803 | ||
|
|
e86c5e92e6 | ||
|
|
7827d64a7c | ||
|
|
bfe81f7325 | ||
|
|
584e9457dd | ||
|
|
1cfc3c1f74 | ||
|
|
1bd452ed77 | ||
|
|
19423871a8 | ||
|
|
15faac8cfe | ||
|
|
c2fb967e8b | ||
|
|
d6f17e7566 | ||
|
|
934cd8be1c | ||
|
|
39592cdea4 | ||
|
|
0d398753e0 | ||
|
|
2dc7bc1857 | ||
|
|
0eb03ce0a7 | ||
|
|
cf67f684d1 | ||
|
|
c09f9b81fe | ||
|
|
894f5896b1 | ||
|
|
fcc726d557 | ||
|
|
79e97b2c8a | ||
|
|
e977addc24 | ||
|
|
006df06f7c | ||
|
|
16543bb516 | ||
|
|
7a6d246e25 | ||
|
|
1b318e9031 | ||
|
|
36614f0a57 | ||
|
|
10de34a187 | ||
|
|
0e55083bc0 | ||
|
|
2379aa8b14 | ||
|
|
aee2f545d2 | ||
|
|
80beb7a410 | ||
|
|
2f89097a20 | ||
|
|
abb6af1b98 | ||
|
|
adbae46eae | ||
|
|
0eadac40e5 | ||
|
|
981b2f7f5f | ||
|
|
94e17f834e | ||
|
|
025e19f115 | ||
|
|
410cf31279 | ||
|
|
ec48a8a773 | ||
|
|
73806afbd7 | ||
|
|
d4c3e228f7 | ||
|
|
d425c1480a | ||
|
|
d7cbb9e304 | ||
|
|
4ec7282c0c | ||
|
|
49711acfde | ||
|
|
ff686284f8 | ||
|
|
bb90994359 | ||
|
|
372e88b16f | ||
|
|
362189ed78 | ||
|
|
8ea2604761 | ||
|
|
d1d74949d0 | ||
|
|
79f8c0ec52 | ||
|
|
006e7508dd | ||
|
|
0ab6d5c223 | ||
|
|
a0ace8bbf0 | ||
|
|
71bfe77128 | ||
|
|
ea6dc1b84b | ||
|
|
a43ebfbb39 | ||
|
|
d5620869fc | ||
|
|
035dae47ff | ||
|
|
3ceac1806e | ||
|
|
88b4edd574 | ||
|
|
6fe012af29 | ||
|
|
d9dbcc85d3 | ||
|
|
af730781b9 | ||
|
|
07ecb68665 | ||
|
|
a96af37524 | ||
|
|
ddb1696292 | ||
|
|
792ae898a3 | ||
|
|
0dd1ca41e3 | ||
|
|
4b4055d6fe | ||
|
|
925a8d6b5f | ||
|
|
062397f6d9 | ||
|
|
48ba7f93ac | ||
|
|
abdf196a0f | ||
|
|
0e6b231c5d | ||
|
|
ebb1c729af | ||
|
|
941128f792 | ||
|
|
36617f1568 | ||
|
|
4156009e3b | ||
|
|
a070c7cbfa | ||
|
|
f94ddf84cb | ||
|
|
9b59b7f8c0 | ||
|
|
aa28c14cfa | ||
|
|
b0742be563 | ||
|
|
e51c49a50e |
326
.github/workflows/build_parallel.yml
vendored
Normal file
@@ -0,0 +1,326 @@
|
||||
name: Build and Push Parallel
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
tags:
|
||||
- "*"
|
||||
pull_request:
|
||||
|
||||
jobs:
|
||||
compile_sketch:
|
||||
name: build ${{ matrix.board.name }}
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
board:
|
||||
- { name: "Flipper Zero WiFi Dev Board", flag: "MARAUDER_FLIPPER", fbqn: "esp32:esp32:esp32s2:PartitionScheme=min_spiffs,FlashSize=4M,PSRAM=enabled", file_name: "flipper", tft: false, tft_file: "", build_dir: "esp32s2", addr: "0x1000", idf_ver: "2.0.11", nimble_ver: "1.3.8", esp_async: "bigbrodude6119/ESPAsyncWebServer", esp_async_ver: "master" }
|
||||
- { name: "Flipper Zero Multi Board S3", flag: "MARAUDER_MULTIBOARD_S3", fbqn: "esp32:esp32:esp32s3:PartitionScheme=min_spiffs,FlashSize=4M", file_name: "multiboardS3", tft: false, tft_file: "", build_dir: "esp32s3", addr: "0x0", idf_ver: "2.0.11", nimble_ver: "1.3.8", esp_async: "bigbrodude6119/ESPAsyncWebServer", esp_async_ver: "master" }
|
||||
- { name: "OG Marauder", flag: "MARAUDER_V4", fbqn: "esp32:esp32:d32:PartitionScheme=min_spiffs", file_name: "old_hardware", tft: true, tft_file: "User_Setup_og_marauder.h", build_dir: "d32", addr: "0x1000", idf_ver: "2.0.11", nimble_ver: "1.3.8", esp_async: "bigbrodude6119/ESPAsyncWebServer", esp_async_ver: "master" }
|
||||
- { name: "Marauder v6", flag: "MARAUDER_V6", fbqn: "esp32:esp32:d32:PartitionScheme=min_spiffs", file_name: "v6", tft: true, tft_file: "User_Setup_og_marauder.h", build_dir: "d32", addr: "0x1000", idf_ver: "2.0.11", nimble_ver: "1.3.8", esp_async: "bigbrodude6119/ESPAsyncWebServer", esp_async_ver: "master" }
|
||||
- { name: "Marauder v6.1", flag: "MARAUDER_V6_1", fbqn: "esp32:esp32:d32:PartitionScheme=min_spiffs", file_name: "v6_1", tft: true, tft_file: "User_Setup_og_marauder.h", build_dir: "d32", addr: "0x1000", idf_ver: "2.0.11", nimble_ver: "1.3.8", esp_async: "bigbrodude6119/ESPAsyncWebServer", esp_async_ver: "master" }
|
||||
- { name: "Marauder Kit", flag: "MARAUDER_KIT", fbqn: "esp32:esp32:d32:PartitionScheme=min_spiffs", file_name: "kit", tft: true, tft_file: "User_Setup_og_marauder.h", build_dir: "d32", addr: "0x1000", idf_ver: "2.0.11", nimble_ver: "1.3.8", esp_async: "bigbrodude6119/ESPAsyncWebServer", esp_async_ver: "master" }
|
||||
- { name: "Marauder Mini", flag: "MARAUDER_MINI", fbqn: "esp32:esp32:d32:PartitionScheme=min_spiffs", file_name: "mini", tft: true, tft_file: "User_Setup_marauder_mini.h", build_dir: "d32", addr: "0x1000", idf_ver: "2.0.11", nimble_ver: "1.3.8", esp_async: "bigbrodude6119/ESPAsyncWebServer", esp_async_ver: "master" }
|
||||
- { name: "ESP32 LDDB", flag: "ESP32_LDDB", fbqn: "esp32:esp32:d32:PartitionScheme=min_spiffs", file_name: "esp32_lddb", tft: false, tft_file: "", build_dir: "d32", addr: "0x1000", idf_ver: "2.0.11", nimble_ver: "1.3.8", esp_async: "bigbrodude6119/ESPAsyncWebServer", esp_async_ver: "master" }
|
||||
- { name: "Marauder Dev Board Pro", flag: "MARAUDER_DEV_BOARD_PRO", fbqn: "esp32:esp32:d32:PartitionScheme=min_spiffs", file_name: "marauder_dev_board_pro", tft: false, tft_file: "", build_dir: "d32", addr: "0x1000", idf_ver: "2.0.11", nimble_ver: "1.3.8", esp_async: "bigbrodude6119/ESPAsyncWebServer", esp_async_ver: "master" }
|
||||
- { name: "M5StickCPlus", flag: "MARAUDER_M5STICKC", fbqn: "esp32:esp32:m5stick-c:PartitionScheme=min_spiffs", file_name: "m5stickc_plus", tft: true, tft_file: "User_Setup_marauder_m5stickc.h", build_dir: "m5stick-c", addr: "0x1000", idf_ver: "2.0.11", nimble_ver: "1.3.8", esp_async: "bigbrodude6119/ESPAsyncWebServer", esp_async_ver: "master" }
|
||||
- { name: "M5StickCPlus 2", flag: "MARAUDER_M5STICKCP2", fbqn: "esp32:esp32:m5stick-c:PartitionScheme=min_spiffs", file_name: "m5stickc_plus2", tft: true, tft_file: "User_Setup_marauder_m5stickcp2.h", build_dir: "m5stick-c", addr: "0x1000", idf_ver: "2.0.11", nimble_ver: "1.3.8", esp_async: "bigbrodude6119/ESPAsyncWebServer", esp_async_ver: "master" }
|
||||
- { name: "Rev Feather", flag: "MARAUDER_REV_FEATHER", fbqn: "esp32:esp32:esp32s2:PartitionScheme=min_spiffs,FlashSize=4M,PSRAM=enabled", file_name: "rev_feather", tft: true, tft_file: "User_Setup_marauder_rev_feather.h", build_dir: "esp32s2", addr: "0x1000", idf_ver: "2.0.11", nimble_ver: "1.3.8", esp_async: "bigbrodude6119/ESPAsyncWebServer", esp_async_ver: "master" }
|
||||
- { name: "Marauder v7", flag: "MARAUDER_V7", fbqn: "esp32:esp32:d32:PartitionScheme=min_spiffs", file_name: "marauder_v7", tft: true, tft_file: "User_Setup_dual_nrf24.h", build_dir: "d32", addr: "0x1000", idf_ver: "2.0.11", nimble_ver: "1.3.8", esp_async: "bigbrodude6119/ESPAsyncWebServer", esp_async_ver: "master" }
|
||||
- { name: "Marauder CYD 2432S028", flag: "MARAUDER_CYD_MICRO", fbqn: "esp32:esp32:d32:PartitionScheme=min_spiffs", file_name: "cyd_2432S028", tft: true, tft_file: "User_Setup_cyd_micro.h", build_dir: "d32", addr: "0x1000", idf_ver: "2.0.11", nimble_ver: "1.3.8", esp_async: "bigbrodude6119/ESPAsyncWebServer", esp_async_ver: "master" }
|
||||
- { name: "Marauder CYD 2432S024 GUITION", flag: "MARAUDER_CYD_GUITION", fbqn: "esp32:esp32:d32:PartitionScheme=min_spiffs", file_name: "cyd_2432S024_guition", tft: true, tft_file: "User_Setup_cyd_guition.h", build_dir: "d32", addr: "0x1000", idf_ver: "2.0.11", nimble_ver: "1.3.8", esp_async: "bigbrodude6119/ESPAsyncWebServer", esp_async_ver: "master" }
|
||||
- { name: "Marauder CYD 2432S028 2 USB", flag: "MARAUDER_CYD_2USB", fbqn: "esp32:esp32:d32:PartitionScheme=min_spiffs", file_name: "cyd_2432S028_2usb", tft: true, tft_file: "User_Setup_cyd_2usb.h", build_dir: "d32", addr: "0x1000", idf_ver: "2.0.11", nimble_ver: "1.3.8", esp_async: "bigbrodude6119/ESPAsyncWebServer", esp_async_ver: "master" }
|
||||
- { name: "Marauder CYD 3.5inch", flag: "MARAUDER_CYD_3_5_INCH", fbqn: "esp32:esp32:d32:PartitionScheme=min_spiffs", file_name: "cyd_3_5_inch", tft: true, tft_file: "User_Setup_cyd_3_5_inch.h", build_dir: "d32", addr: "0x1000", idf_ver: "2.0.11", nimble_ver: "1.3.8", esp_async: "bigbrodude6119/ESPAsyncWebServer", esp_async_ver: "master" }
|
||||
- { name: "Marauder v7.1", flag: "MARAUDER_V7_1", fbqn: "esp32:esp32:dfrobot_firebeetle2_esp32e:FlashSize=16M,PartitionScheme=min_spiffs,PSRAM=enabled", file_name: "marauder_v7_1", tft: true, tft_file: "User_Setup_dual_nrf24.h", build_dir: "dfrobot_firebeetle2_esp32e", addr: "0x1000", idf_ver: "2.0.11", nimble_ver: "1.3.8", esp_async: "bigbrodude6119/ESPAsyncWebServer", esp_async_ver: "master" }
|
||||
- { name: "M5Cardputer", flag: "MARAUDER_CARDPUTER", fbqn: "esp32:esp32:esp32s3:PartitionScheme=min_spiffs,FlashSize=8M,PSRAM=disabled", file_name: "m5cardputer", tft: true, tft_file: "User_Setup_marauder_m5cardputer.h", build_dir: "esp32s3", addr: "0x1000", idf_ver: "2.0.11", nimble_ver: "1.3.8", esp_async: "bigbrodude6119/ESPAsyncWebServer", esp_async_ver: "master" }
|
||||
- { name: "ESP32-C5-DevKitC-1", flag: "MARAUDER_C5", fbqn: "esp32:esp32:esp32c5:PartitionScheme=min_spiffs", file_name: "esp32c5devkitc1", tft: false, tft_file: "", build_dir: "esp32c5", addr: "0x2000", idf_ver: "3.3.0", nimble_ver: "2.3.0", esp_async: "bigbrodude6119/ESPAsyncWebServer", esp_async_ver: "master" }
|
||||
|
||||
steps:
|
||||
- name: Checkout Code
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Install Arduino CLI
|
||||
run: |
|
||||
curl -fsSL https://raw.githubusercontent.com/arduino/arduino-cli/master/install.sh | sh
|
||||
echo "/home/runner/work/ESP32Marauder/ESP32Marauder/bin" >> $GITHUB_PATH
|
||||
export PATH=$PATH:/home/runner/work/ESP32Marauder/ESP32Marauder/bin
|
||||
arduino-cli version
|
||||
|
||||
#- name: Install Arduino-ESP32 Core v${{ matrix.board.idf_ver }}
|
||||
# run: |
|
||||
# arduino-cli core update-index
|
||||
# arduino-cli core install esp32:esp32@${{ matrix.board.idf_ver }}
|
||||
|
||||
- name: Verify Installed Cores
|
||||
run: arduino-cli core list
|
||||
|
||||
- name: Build TestFile with ESP32 v${{ matrix.board.idf_ver }}
|
||||
uses: ArminJo/arduino-test-compile@v3.2.1
|
||||
with:
|
||||
sketch-names: TestFile.ino
|
||||
arduino-board-fqbn: esp32:esp32:esp32s2
|
||||
arduino-platform: esp32:esp32@${{ matrix.board.idf_ver }}
|
||||
platform-url: https://github.com/espressif/arduino-esp32/releases/download/${{ matrix.board.idf_ver }}/package_esp32_dev_index.json
|
||||
|
||||
- name: Verify Installed Cores Again
|
||||
run: arduino-cli core list
|
||||
|
||||
- name: Show Arduino dir structure
|
||||
run: |
|
||||
find /home/runner/.arduino15/packages/esp32/hardware/
|
||||
|
||||
- name: Install ESP32Ping
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
repository: marian-craciunescu/ESP32Ping
|
||||
ref: 1.6
|
||||
path: CustomESP32Ping
|
||||
|
||||
- name: Install AsyncTCP
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
repository: ESP32Async/AsyncTCP
|
||||
ref: v3.4.8
|
||||
path: CustomAsyncTCP
|
||||
|
||||
- name: Install MicroNMEA
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
repository: stevemarple/MicroNMEA
|
||||
ref: v2.0.6
|
||||
path: CustomMicroNMEA
|
||||
|
||||
- name: Install ESPAsyncWebServer
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
repository: ESP32Async/ESPAsyncWebServer
|
||||
ref: v3.8.1
|
||||
path: CustomESPAsyncWebServer
|
||||
|
||||
#- name: Install ESPAsyncWebServer
|
||||
# run: |
|
||||
# cp -r libraries/ESPAsyncWebServer ./CustomESPAsyncWebServer
|
||||
|
||||
- name: Install TFT_eSPI
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
repository: Bodmer/TFT_eSPI
|
||||
ref: V2.5.34
|
||||
path: CustomTFT_eSPI
|
||||
|
||||
- name: Install XPT2046_Touchscreen
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
repository: PaulStoffregen/XPT2046_Touchscreen
|
||||
ref: v1.4
|
||||
path: CustomXPT2046_Touchscreen
|
||||
|
||||
- name: Install lv_arduino
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
repository: lvgl/lv_arduino
|
||||
ref: 3.0.0
|
||||
path: Customlv_arduino
|
||||
|
||||
- name: Install JPEGDecoder
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
repository: Bodmer/JPEGDecoder
|
||||
ref: 1.8.0
|
||||
path: CustomJPEGDecoder
|
||||
|
||||
- name: Install NimBLE-Arduino
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
repository: h2zero/NimBLE-Arduino
|
||||
ref: ${{ matrix.board.nimble_ver }}
|
||||
path: CustomNimBLE-Arduino
|
||||
|
||||
- name: Install Adafruit_NeoPixel
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
repository: adafruit/Adafruit_NeoPixel
|
||||
ref: 1.12.0
|
||||
path: CustomAdafruit_NeoPixel
|
||||
|
||||
- name: Install ArduinoJson
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
repository: bblanchon/ArduinoJson
|
||||
ref: v6.18.2
|
||||
path: CustomArduinoJson
|
||||
|
||||
- name: Install LinkedList
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
repository: ivanseidel/LinkedList
|
||||
ref: v1.3.3
|
||||
path: CustomLinkedList
|
||||
|
||||
- name: Install EspSoftwareSerial
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
repository: plerup/espsoftwareserial
|
||||
ref: 8.1.0
|
||||
path: CustomEspSoftwareSerial
|
||||
|
||||
- name: Install Adafruit_BusIO
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
repository: adafruit/Adafruit_BusIO
|
||||
ref: 1.15.0
|
||||
path: CustomAdafruit_BusIO
|
||||
|
||||
- name: Install Adafruit_MAX1704X
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
repository: adafruit/Adafruit_MAX1704X
|
||||
ref: 1.0.2
|
||||
path: CustomAdafruit_MAX1704X
|
||||
|
||||
- name: Show Libraries
|
||||
run: |
|
||||
find /home/runner/ -name "Custom*"
|
||||
|
||||
- name: Configure TFT_eSPI
|
||||
run: |
|
||||
rm -f CustomTFT_eSPI/User_Setup_Select.h
|
||||
cp User*.h CustomTFT_eSPI/
|
||||
pwd
|
||||
ls -la
|
||||
ls -la CustomTFT_eSPI
|
||||
|
||||
- name: Install Esptool
|
||||
run: |
|
||||
pip install esptool
|
||||
|
||||
- name: Modify platform.txt
|
||||
run: |
|
||||
if [[ ${{ matrix.board.idf_ver }} == "2.0.11" ]]; then
|
||||
for i in $(find /home/runner/.arduino15/packages/esp32/hardware/esp32/ -name "platform.txt"); do
|
||||
sed -i 's/compiler.c.elf.libs.esp32c3=/compiler.c.elf.libs.esp32c3=-zmuldefs /' "$i"
|
||||
sed -i 's/compiler.c.elf.libs.esp32s3=/compiler.c.elf.libs.esp32s3=-zmuldefs /' "$i"
|
||||
sed -i 's/compiler.c.elf.libs.esp32s2=/compiler.c.elf.libs.esp32s2=-zmuldefs /' "$i"
|
||||
sed -i 's/compiler.c.elf.libs.esp32=/compiler.c.elf.libs.esp32=-zmuldefs /' "$i"
|
||||
cat "$i" | grep compiler.c.elf.libs.esp32c3
|
||||
cat "$i" | grep compiler.c.elf.libs.esp32s3
|
||||
cat "$i" | grep compiler.c.elf.libs.esp32s2
|
||||
cat "$i" | grep compiler.c.elf.libs.esp32
|
||||
done
|
||||
fi
|
||||
|
||||
if [[ ${{ matrix.board.idf_ver }} == "3.3.0" ]]; then
|
||||
for i in $(find /home/runner/.arduino15/packages/esp32/hardware/esp32/ -name "platform.txt"); do
|
||||
sed -i 's/compiler.c.elf.extra_flags=/compiler.c.elf.extra_flags=-Wl,-zmuldefs /' "$i"
|
||||
done
|
||||
fi
|
||||
|
||||
- name: Configure TFT_eSPI (if needed)
|
||||
run: |
|
||||
pwd
|
||||
if [[ ${{ matrix.board.tft }} == true ]]; then
|
||||
find /home/runner/ -name "*TFT_eSPI*"
|
||||
sed -i 's/^\/\/#include <${{ matrix.board.tft_file }}>/#include <${{ matrix.board.tft_file }}>/' /home/runner/work/ESP32Marauder/ESP32Marauder/CustomTFT_eSPI/User_Setup_Select.h
|
||||
fi
|
||||
|
||||
- name: Build Marauder for ${{ matrix.board.name }}
|
||||
uses: ArminJo/arduino-test-compile@v3.3.0
|
||||
with:
|
||||
sketch-names: esp32_marauder.ino
|
||||
arduino-board-fqbn: ${{ matrix.board.fbqn }}
|
||||
extra-arduino-cli-args: "--warnings none --build-property compiler.cpp.extra_flags='-D${{ matrix.board.flag }}'"
|
||||
arduino-platform: esp32:esp32@${{ matrix.board.idf_ver }}
|
||||
platform-url: https://github.com/espressif/arduino-esp32/releases/download/${{ matrix.board.idf_ver }}/package_esp32_dev_index.json
|
||||
|
||||
#- name: Rename Marauder ${{ matrix.board.name }} bin
|
||||
# run: |
|
||||
# mv ./esp32_marauder/build/esp32.esp32.${{ matrix.board.build_dir }}/esp32_marauder.ino.bin ./esp32_marauder/build/esp32.esp32.${{ matrix.board.build_dir }}/esp32_marauder.${{ matrix.board.file_name }}.bin
|
||||
|
||||
- name: Rename and Upload ${{ matrix.board.name }} Artifact
|
||||
run: |
|
||||
VERSION=$(grep '#define MARAUDER_VERSION' ./esp32_marauder/configs.h | sed -E 's/.*"v([^"]+)"/v\1/' | tr '.' '_')
|
||||
VERSION_DOT=$(grep '#define MARAUDER_VERSION' ./esp32_marauder/configs.h | sed -E 's/.*"v([^"]+)"/v\1/')
|
||||
DATE=$(date +%Y%m%d)
|
||||
|
||||
BUILD_DIR=./esp32_marauder/build/esp32.esp32.${{ matrix.board.build_dir }}
|
||||
INPUT_BIN=$BUILD_DIR/esp32_marauder.ino.bin
|
||||
OUTPUT_BIN=esp32_marauder_${VERSION}_${DATE}_${{ matrix.board.file_name }}.bin
|
||||
VERSION_DOT=${VERSION_DOT}
|
||||
|
||||
mv "$INPUT_BIN" "$BUILD_DIR/$OUTPUT_BIN"
|
||||
|
||||
echo "artifact_name=$OUTPUT_BIN" >> $GITHUB_ENV
|
||||
echo "artifact_path=$BUILD_DIR/$OUTPUT_BIN" >> $GITHUB_ENV
|
||||
echo "version_dot=$VERSION_DOT" >> $GITHUB_ENV
|
||||
- name: Upload ${{ matrix.board.name }} Artifact
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: ${{ env.artifact_name }}
|
||||
path: ${{ env.artifact_path }}
|
||||
retention-days: 5
|
||||
|
||||
post_compile_steps:
|
||||
name: Create Release
|
||||
runs-on: ubuntu-latest
|
||||
needs: [compile_sketch]
|
||||
if: ${{ github.event_name == 'workflow_dispatch' }}
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/download-artifact@v4
|
||||
with:
|
||||
merge-multiple: true
|
||||
- name: Create Release
|
||||
uses: softprops/action-gh-release@v1
|
||||
with:
|
||||
name: "Marauder Release ${{ github.ref_name }}"
|
||||
tag_name: ${{ env.version_dot }}
|
||||
generate_release_notes: true
|
||||
draft: true
|
||||
files: |
|
||||
esp32_marauder_v*.bin
|
||||
body: |
|
||||
[justcallmekokollc.com](https://justcallmekokollc.com)
|
||||
|
||||
### Please see [GPS Modification](https://github.com/justcallmekoko/ESP32Marauder/wiki/gps-modification) to find out how to add GPS capabilities to your Marauder.
|
||||
**Flipper Zero Marauder Companion App:**
|
||||
**Be sure to install the latest version of the [Marauder Companion](https://github.com/0xchocolate/flipperzero-wifi-marauder/releases/latest) to use these new features on your Flipper Zero**
|
||||
|
||||
**Additional Resources**
|
||||
**[Project Issues](https://github.com/justcallmekoko/ESP32Marauder/issues)**
|
||||
**[Install/Update Instructions](https://github.com/justcallmekoko/ESP32Marauder/wiki/update-firmware)**
|
||||
**[ESP32 Marauder companion app](https://github.com/0xchocolate/flipperzero-firmware-with-wifi-marauder-companion/releases/latest)**
|
||||
**[My Discord](https://discord.com/servers/willstunforfood-776211399918878760)**
|
||||
|
||||
**Flipper Zero Dev Board is NOT the same thing as Dev Board Pro. Don't get them confused.**
|
||||
|
||||
### MARAUDER V6/V6.X WARNING
|
||||
**Please check which Marauder you are using by looking at the front face of the PCB (side with the screen). If it says v6.1 (or .2), use the v6.1 bin. If it says v6, use the v6 bin.**
|
||||
|
||||
## ESP32-C5 (5GHz support)
|
||||
Please see our [installation guide](https://github.com/justcallmekoko/ESP32Marauder/wiki/ESP32%E2%80%90C5%E2%80%90DevKitC%E2%80%901) for installing the Marauder firmware on your ESP32-C5-DevKitC-1
|
||||
|
||||
| Hardware | Binary Version |
|
||||
| -------- | -------------- |
|
||||
| v4 (OG) | `_old_hardware.bin` |
|
||||
| v6 | `_new_hardware.bin`/`_v6.bin` |
|
||||
| v6.1/v6.2 | `_v6_1.bin` |
|
||||
| v7 | `_v7.bin` |
|
||||
| Kit | `_kit.bin` |
|
||||
| Mini | `_mini.bin` |
|
||||
| Flipper Zero | `_flipper.bin` |
|
||||
| MutliBoard S3 | `_multiboardS3.bin` |
|
||||
| LDDB/NodeMCU/Wemos | `_lddb.bin` |
|
||||
| Dev Board Pro | `_marauder_dev_board_pro.bin` |
|
||||
| BFFB | `_marauder_dev_board_pro.bin` |
|
||||
| ESP32-S2 Reverse Feather | `_rev_feather.bin` |
|
||||
| CYD 2432S028(R) | `_cyd_2432S028.bin` |
|
||||
| RL Phantom | `_cyd_2432S024_guition.bin` |
|
||||
| CYD 2432S028 2 USB | `_cyd_2432S028_2usb.bin` |
|
||||
| M5 Cardputer | `_m5cardputer.bin` (Available on M5 Burner) |
|
||||
| ESP32-C5 DevKit | [`_esp32c5_devkit.bin`](https://github.com/justcallmekoko/ESP32Marauder/wiki/ESP32%E2%80%90C5%E2%80%90DevKitC%E2%80%901) |
|
||||
| AWOK V2/V3 screen (white usb) | `_v6_1.bin` |
|
||||
| AWOK V2 flipper (orange usb) | `_flipper.bin` |
|
||||
| AWOK V3 flipper (orange usb) | `_marauder_dev_board_pro.bin` |
|
||||
695
.github/workflows/build_push.yml
vendored
@@ -1,695 +0,0 @@
|
||||
name: Build and Push
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
pull_request:
|
||||
|
||||
jobs:
|
||||
# This workflow contains a single job called "build"
|
||||
build:
|
||||
name: Build Marauder Binaries
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- 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: Show Arduino dir structure
|
||||
run: |
|
||||
find /home/runner/.arduino15/packages/esp32/hardware/
|
||||
|
||||
- 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: Bodmer/TFT_eSPI
|
||||
ref: V2.5.34
|
||||
path: CustomTFT_eSPI
|
||||
|
||||
- name: Install lv_arduino
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
repository: lvgl/lv_arduino
|
||||
ref: 3.0.0
|
||||
path: Customlv_arduino
|
||||
|
||||
- name: Install JPEGDecoder
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
repository: Bodmer/JPEGDecoder
|
||||
ref: 1.8.0
|
||||
path: CustomJPEGDecoder
|
||||
|
||||
- name: Install NimBLE-Arduino
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
repository: h2zero/NimBLE-Arduino
|
||||
ref: 1.2.0
|
||||
path: CustomNimBLE-Arduino
|
||||
|
||||
- name: Install Adafruit_NeoPixel
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
repository: adafruit/Adafruit_NeoPixel
|
||||
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:
|
||||
# repository: justcallmekoko/SwitchLib
|
||||
# ref: main
|
||||
# path: CustomSwitchLib
|
||||
|
||||
- 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: |
|
||||
rm -f CustomTFT_eSPI/User_Setup_Select.h
|
||||
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/
|
||||
cp User_Setup_marauder_rev_feather.h CustomTFT_eSPI/
|
||||
pwd
|
||||
ls -la
|
||||
ls -la CustomTFT_eSPI
|
||||
|
||||
#- 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 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: |
|
||||
for i in $(find /home/runner/.arduino15/packages/esp32/hardware/esp32/ -name "platform.txt"); do
|
||||
sed -i 's/compiler.c.elf.libs.esp32c3=/compiler.c.elf.libs.esp32c3=-zmuldefs /' "$i"
|
||||
sed -i 's/compiler.c.elf.libs.esp32s3=/compiler.c.elf.libs.esp32s3=-zmuldefs /' "$i"
|
||||
sed -i 's/compiler.c.elf.libs.esp32s2=/compiler.c.elf.libs.esp32s2=-zmuldefs /' "$i"
|
||||
sed -i 's/compiler.c.elf.libs.esp32=/compiler.c.elf.libs.esp32=-zmuldefs /' "$i"
|
||||
cat "$i" | grep compiler.c.elf.libs.esp32c3
|
||||
cat "$i" | grep compiler.c.elf.libs.esp32s3
|
||||
cat "$i" | grep compiler.c.elf.libs.esp32s2
|
||||
cat "$i" | grep compiler.c.elf.libs.esp32
|
||||
done
|
||||
|
||||
- name: Configure configs.h for Flipper Zero WiFi Dev Board
|
||||
run: |
|
||||
sed -i 's/^ #define MARAUDER_REV_FEATHER/ \/\/#define MARAUDER_REV_FEATHER/' esp32_marauder/configs.h
|
||||
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.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 bin
|
||||
run: |
|
||||
mv ./esp32_marauder/build/esp32.esp32.esp32s2/esp32_marauder.ino.bin ./esp32_marauder/build/esp32.esp32.esp32s2/esp32_marauder.flipper.bin
|
||||
|
||||
- name: Build Marauder for Flipper Zero Multi Board
|
||||
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
|
||||
extra-arduino-cli-args: "--warnings none"
|
||||
|
||||
- name: Rename Marauder Multi Board bin
|
||||
run: |
|
||||
mv ./esp32_marauder/build/esp32.esp32.esp32s3/esp32_marauder.ino.bin ./esp32_marauder/build/esp32.esp32.esp32s3/esp32_marauder.multiboardS3.bin
|
||||
|
||||
- name: Configure TFT_eSPI and configs.h for OG Marauder
|
||||
run: |
|
||||
pwd
|
||||
find /home/runner/ -name "*TFT_eSPI*"
|
||||
sed -i 's/^#include <User_Setup_marauder_rev_feather.h>/\/\/#include <User_Setup_marauder_rev_feather.h>/' /home/runner/Arduino/libraries/CustomTFT_eSPI/User_Setup_Select.h
|
||||
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_og_marauder.h>/#include <User_Setup_og_marauder.h>/' /home/runner/Arduino/libraries/CustomTFT_eSPI/User_Setup_Select.h
|
||||
sed -i 's/^ #define MARAUDER_REV_FEATHER/ \/\/#define MARAUDER_REV_FEATHER/' 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 OG 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 OG Marauder bin
|
||||
run: |
|
||||
mv ./esp32_marauder/build/esp32.esp32.d32/esp32_marauder.ino.bin ./esp32_marauder/build/esp32.esp32.d32/esp32_marauder.og.bin
|
||||
|
||||
- name: Configure TFT_eSPI and configs.h for Marauder v6
|
||||
run: |
|
||||
sed -i 's/^#include <User_Setup_marauder_rev_feather.h>/\/\/#include <User_Setup_marauder_rev_feather.h>/' /home/runner/Arduino/libraries/CustomTFT_eSPI/User_Setup_Select.h
|
||||
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_og_marauder.h>/#include <User_Setup_og_marauder.h>/' /home/runner/Arduino/libraries/CustomTFT_eSPI/User_Setup_Select.h
|
||||
sed -i 's/^ #define MARAUDER_REV_FEATHER/ \/\/#define MARAUDER_REV_FEATHER/' 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 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.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.bin
|
||||
|
||||
- name: Configure TFT_eSPI and configs.h for Marauder v6.1
|
||||
run: |
|
||||
sed -i 's/^ #define MARAUDER_REV_FEATHER/ \/\/#define MARAUDER_REV_FEATHER/' 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 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
|
||||
sed -i 's/^\/\/#include <User_Setup_og_marauder.h>/#include <User_Setup_og_marauder.h>/' /home/runner/Arduino/libraries/CustomTFT_eSPI/User_Setup_Select.h
|
||||
sed -i 's/^ #define MARAUDER_REV_FEATHER/ \/\/#define MARAUDER_REV_FEATHER/' 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 Marauder Kit
|
||||
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 Kit bin
|
||||
run: |
|
||||
mv ./esp32_marauder/build/esp32.esp32.d32/esp32_marauder.ino.bin ./esp32_marauder/build/esp32.esp32.d32/esp32_marauder.kit.bin
|
||||
|
||||
- name: Configure TFT_eSPI and configs.h for Marauder Mini
|
||||
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
|
||||
sed -i 's/^#include <User_Setup_og_marauder.h>/\/\/#include <User_Setup_og_marauder.h>/' /home/runner/Arduino/libraries/CustomTFT_eSPI/User_Setup_Select.h
|
||||
sed -i 's/^ #define MARAUDER_REV_FEATHER/ \/\/#define MARAUDER_REV_FEATHER/' 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 Marauder Mini
|
||||
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 Mini bin
|
||||
run: |
|
||||
mv ./esp32_marauder/build/esp32.esp32.d32/esp32_marauder.ino.bin ./esp32_marauder/build/esp32.esp32.d32/esp32_marauder.mini.bin
|
||||
|
||||
- name: Configure TFT_eSPI and configs.h for ESP32 LDDB
|
||||
run: |
|
||||
sed -i 's/^ #define MARAUDER_REV_FEATHER/ \/\/#define MARAUDER_REV_FEATHER/' 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 ESP32 LDDB
|
||||
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 ESP32 LDDB bin
|
||||
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_REV_FEATHER/ \/\/#define MARAUDER_REV_FEATHER/' 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 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_REV_FEATHER/ \/\/#define MARAUDER_REV_FEATHER/' 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
|
||||
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: Configure TFT_eSPI and configs.h for Marauder Rev Feather
|
||||
run: |
|
||||
pwd
|
||||
find /home/runner/ -name "*TFT_eSPI*"
|
||||
sed -i 's/^\/\/#include <User_Setup_marauder_rev_feather.h>/#include <User_Setup_marauder_rev_feather.h>/' /home/runner/Arduino/libraries/CustomTFT_eSPI/User_Setup_Select.h
|
||||
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_REV_FEATHER/ #define MARAUDER_REV_FEATHER/' 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
|
||||
sed -i 's/^ #define MARAUDER_M5STICKC/ \/\/#define MARAUDER_M5STICKC/' esp32_marauder/configs.h
|
||||
|
||||
- name: Build Marauder for Marauder Rev Feather
|
||||
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 Marauder Rev Feather
|
||||
run: |
|
||||
mv ./esp32_marauder/build/esp32.esp32.esp32s2/esp32_marauder.ino.bin ./esp32_marauder/build/esp32.esp32.esp32s2/esp32_marauder.rev_feather.bin
|
||||
|
||||
- name: Display finished bins
|
||||
run: |
|
||||
find ./esp32_marauder/build -name "*.bin"
|
||||
|
||||
- name: 'Upload Flipper Artifact'
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: esp32_marauder.flipper.bin
|
||||
path: ./esp32_marauder/build/esp32.esp32.esp32s2/esp32_marauder.flipper.bin
|
||||
retention-days: 5
|
||||
|
||||
- name: 'Upload MultiboardS3 Artifact'
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: esp32_marauder.multiboardS3.bin
|
||||
path: ./esp32_marauder/build/esp32.esp32.esp32s3/esp32_marauder.multiboardS3.bin
|
||||
retention-days: 5
|
||||
|
||||
- name: 'Upload OG Artifact'
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: esp32_marauder.og.bin
|
||||
path: ./esp32_marauder/build/esp32.esp32.d32/esp32_marauder.og.bin
|
||||
retention-days: 5
|
||||
|
||||
- name: 'Upload v6 Artifact'
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: esp32_marauder.v6.bin
|
||||
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:
|
||||
name: esp32_marauder.kit.bin
|
||||
path: ./esp32_marauder/build/esp32.esp32.d32/esp32_marauder.kit.bin
|
||||
retention-days: 5
|
||||
|
||||
- name: 'Upload Mini Artifact'
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: esp32_marauder.mini.bin
|
||||
path: ./esp32_marauder/build/esp32.esp32.d32/esp32_marauder.mini.bin
|
||||
retention-days: 5
|
||||
|
||||
- name: 'Upload ESP32 LDDB Artifact'
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: esp32_marauder.mini.bin
|
||||
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: 'Upload Rev Feather Artifact'
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: esp32_marauder.rev_feather.bin
|
||||
path: ./esp32_marauder/build/esp32.esp32.esp32s2/esp32_marauder.rev_feather.bin
|
||||
retention-days: 5
|
||||
|
||||
- name: Create Release
|
||||
id: create_release
|
||||
uses: actions/create-release@v1
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
with:
|
||||
tag_name: ${{ github.ref }}
|
||||
release_name: Release ${{ github.ref }}
|
||||
draft: true
|
||||
prerelease: false
|
||||
if: github.event_name != 'pull_request'
|
||||
|
||||
- name: Upload Flipper Asset
|
||||
id: upload-flipper-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.bin
|
||||
asset_name: esp32_marauder.flipper.bin
|
||||
asset_content_type: application/bin
|
||||
if: github.event_name != 'pull_request'
|
||||
|
||||
- name: Upload MultiboardS3 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.multiboardS3.bin
|
||||
asset_content_type: application/bin
|
||||
if: github.event_name != 'pull_request'
|
||||
|
||||
- name: Upload OG Asset
|
||||
id: upload-og-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.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
|
||||
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.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
|
||||
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.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
|
||||
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.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
|
||||
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.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'
|
||||
|
||||
- name: Upload Rev Feather Asset
|
||||
id: upload-rev-feather-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.rev_feather.bin
|
||||
asset_name: esp32_marauder.rev_feather.bin
|
||||
asset_content_type: application/bin
|
||||
if: github.event_name != 'pull_request'
|
||||
32
.github/workflows/close_stale.yml
vendored
Normal file
@@ -0,0 +1,32 @@
|
||||
name: Close stale issues
|
||||
|
||||
on:
|
||||
schedule:
|
||||
- cron: "0 3 * * *" # runs daily at 03:00 UTC
|
||||
workflow_dispatch: {}
|
||||
|
||||
permissions:
|
||||
issues: write
|
||||
pull-requests: write
|
||||
|
||||
jobs:
|
||||
stale:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/stale@v9
|
||||
with:
|
||||
days-before-stale: 132
|
||||
days-before-close: 7
|
||||
stale-issue-message: >
|
||||
This issue has been automatically marked as stale due to inactivity.
|
||||
It will be closed in 7 days unless there is further activity.
|
||||
close-issue-message: >
|
||||
Closing due to prolonged inactivity. If this is still relevant,
|
||||
please comment or open a new issue with updated details.
|
||||
stale-issue-label: "stale"
|
||||
exempt-issue-labels: "pinned,security,backlog,keep-open"
|
||||
remove-stale-when-updated: true
|
||||
operations-per-run: 2000
|
||||
# Optional: also handle PRs
|
||||
days-before-pr-stale: -1
|
||||
days-before-pr-close: -1
|
||||
409
.github/workflows/nightly_build.yml
vendored
Normal file
@@ -0,0 +1,409 @@
|
||||
name: Build and (Nightly) Pre-release
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
schedule:
|
||||
# daily at 03:00 UTC (adjust to your preferred time)
|
||||
- cron: '0 3 * * *'
|
||||
|
||||
jobs:
|
||||
decide:
|
||||
name: Detect new commits on default branch
|
||||
runs-on: ubuntu-latest
|
||||
outputs:
|
||||
should_build: ${{ steps.decide.outputs.should_build }}
|
||||
default_branch: ${{ steps.decide.outputs.default_branch }}
|
||||
head_sha: ${{ steps.decide.outputs.head_sha }}
|
||||
short_sha: ${{ steps.decide.outputs.short_sha }}
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with: { fetch-depth: 0 }
|
||||
|
||||
- id: decide
|
||||
uses: actions/github-script@v7
|
||||
with:
|
||||
script: |
|
||||
const owner = context.repo.owner;
|
||||
const repo = context.repo.repo;
|
||||
|
||||
// Find default branch and its HEAD
|
||||
const repoInfo = await github.rest.repos.get({ owner, repo });
|
||||
const defaultBranch = repoInfo.data.default_branch;
|
||||
const head = await github.rest.repos.getBranch({ owner, repo, branch: defaultBranch });
|
||||
const headSha = head.data.commit.sha;
|
||||
const shortSha = headSha.slice(0,7);
|
||||
|
||||
// Try get the existing nightly release (single static tag)
|
||||
let nightlyRelease = null;
|
||||
try {
|
||||
nightlyRelease = await github.rest.repos.getReleaseByTag({
|
||||
owner, repo, tag: 'nightly'
|
||||
});
|
||||
} catch (e) {
|
||||
if (e.status !== 404) throw e;
|
||||
}
|
||||
|
||||
// Decide if we need to rebuild: compare short SHA in the release name
|
||||
// Name format we set: "<shortsha>_nightly"
|
||||
let shouldBuild = true;
|
||||
if (nightlyRelease) {
|
||||
const name = nightlyRelease.data.name || '';
|
||||
const m = name.match(/^([0-9a-f]{7})_nightly$/i);
|
||||
if (m && m[1] === shortSha) {
|
||||
shouldBuild = false; // no new commits since last nightly
|
||||
}
|
||||
}
|
||||
|
||||
core.setOutput('should_build', String(shouldBuild));
|
||||
core.setOutput('default_branch', defaultBranch);
|
||||
core.setOutput('head_sha', headSha);
|
||||
core.setOutput('short_sha', shortSha);
|
||||
|
||||
compile_sketch:
|
||||
name: build ${{ matrix.board.name }}
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
board:
|
||||
- { name: "Flipper Zero WiFi Dev Board", flag: "MARAUDER_FLIPPER", fbqn: "esp32:esp32:esp32s2:PartitionScheme=min_spiffs,FlashSize=4M,PSRAM=enabled", file_name: "flipper", tft: false, tft_file: "", build_dir: "esp32s2", addr: "0x1000", idf_ver: "2.0.11", nimble_ver: "1.3.8", esp_async: "bigbrodude6119/ESPAsyncWebServer", esp_async_ver: "master" }
|
||||
- { name: "Flipper Zero Multi Board S3", flag: "MARAUDER_MULTIBOARD_S3", fbqn: "esp32:esp32:esp32s3:PartitionScheme=min_spiffs,FlashSize=4M", file_name: "multiboardS3", tft: false, tft_file: "", build_dir: "esp32s3", addr: "0x0", idf_ver: "2.0.11", nimble_ver: "1.3.8", esp_async: "bigbrodude6119/ESPAsyncWebServer", esp_async_ver: "master" }
|
||||
- { name: "OG Marauder", flag: "MARAUDER_V4", fbqn: "esp32:esp32:d32:PartitionScheme=min_spiffs", file_name: "old_hardware", tft: true, tft_file: "User_Setup_og_marauder.h", build_dir: "d32", addr: "0x1000", idf_ver: "2.0.11", nimble_ver: "1.3.8", esp_async: "bigbrodude6119/ESPAsyncWebServer", esp_async_ver: "master" }
|
||||
- { name: "Marauder v6", flag: "MARAUDER_V6", fbqn: "esp32:esp32:d32:PartitionScheme=min_spiffs", file_name: "v6", tft: true, tft_file: "User_Setup_og_marauder.h", build_dir: "d32", addr: "0x1000", idf_ver: "2.0.11", nimble_ver: "1.3.8", esp_async: "bigbrodude6119/ESPAsyncWebServer", esp_async_ver: "master" }
|
||||
- { name: "Marauder v6.1", flag: "MARAUDER_V6_1", fbqn: "esp32:esp32:d32:PartitionScheme=min_spiffs", file_name: "v6_1", tft: true, tft_file: "User_Setup_og_marauder.h", build_dir: "d32", addr: "0x1000", idf_ver: "2.0.11", nimble_ver: "1.3.8", esp_async: "bigbrodude6119/ESPAsyncWebServer", esp_async_ver: "master" }
|
||||
- { name: "Marauder Kit", flag: "MARAUDER_KIT", fbqn: "esp32:esp32:d32:PartitionScheme=min_spiffs", file_name: "kit", tft: true, tft_file: "User_Setup_og_marauder.h", build_dir: "d32", addr: "0x1000", idf_ver: "2.0.11", nimble_ver: "1.3.8", esp_async: "bigbrodude6119/ESPAsyncWebServer", esp_async_ver: "master" }
|
||||
- { name: "Marauder Mini", flag: "MARAUDER_MINI", fbqn: "esp32:esp32:d32:PartitionScheme=min_spiffs", file_name: "mini", tft: true, tft_file: "User_Setup_marauder_mini.h", build_dir: "d32", addr: "0x1000", idf_ver: "2.0.11", nimble_ver: "1.3.8", esp_async: "bigbrodude6119/ESPAsyncWebServer", esp_async_ver: "master" }
|
||||
- { name: "ESP32 LDDB", flag: "ESP32_LDDB", fbqn: "esp32:esp32:d32:PartitionScheme=min_spiffs", file_name: "esp32_lddb", tft: false, tft_file: "", build_dir: "d32", addr: "0x1000", idf_ver: "2.0.11", nimble_ver: "1.3.8", esp_async: "bigbrodude6119/ESPAsyncWebServer", esp_async_ver: "master" }
|
||||
- { name: "Marauder Dev Board Pro", flag: "MARAUDER_DEV_BOARD_PRO", fbqn: "esp32:esp32:d32:PartitionScheme=min_spiffs", file_name: "marauder_dev_board_pro", tft: false, tft_file: "", build_dir: "d32", addr: "0x1000", idf_ver: "2.0.11", nimble_ver: "1.3.8", esp_async: "bigbrodude6119/ESPAsyncWebServer", esp_async_ver: "master" }
|
||||
- { name: "M5StickCPlus", flag: "MARAUDER_M5STICKC", fbqn: "esp32:esp32:m5stick-c:PartitionScheme=min_spiffs", file_name: "m5stickc_plus", tft: true, tft_file: "User_Setup_marauder_m5stickc.h", build_dir: "m5stick-c", addr: "0x1000", idf_ver: "2.0.11", nimble_ver: "1.3.8", esp_async: "bigbrodude6119/ESPAsyncWebServer", esp_async_ver: "master" }
|
||||
- { name: "M5StickCPlus 2", flag: "MARAUDER_M5STICKCP2", fbqn: "esp32:esp32:m5stick-c:PartitionScheme=min_spiffs", file_name: "m5stickc_plus2", tft: true, tft_file: "User_Setup_marauder_m5stickcp2.h", build_dir: "m5stick-c", addr: "0x1000", idf_ver: "2.0.11", nimble_ver: "1.3.8", esp_async: "bigbrodude6119/ESPAsyncWebServer", esp_async_ver: "master" }
|
||||
- { name: "Rev Feather", flag: "MARAUDER_REV_FEATHER", fbqn: "esp32:esp32:esp32s2:PartitionScheme=min_spiffs,FlashSize=4M,PSRAM=enabled", file_name: "rev_feather", tft: true, tft_file: "User_Setup_marauder_rev_feather.h", build_dir: "esp32s2", addr: "0x1000", idf_ver: "2.0.11", nimble_ver: "1.3.8", esp_async: "bigbrodude6119/ESPAsyncWebServer", esp_async_ver: "master" }
|
||||
- { name: "Marauder v7", flag: "MARAUDER_V7", fbqn: "esp32:esp32:d32:PartitionScheme=min_spiffs", file_name: "marauder_v7", tft: true, tft_file: "User_Setup_dual_nrf24.h", build_dir: "d32", addr: "0x1000", idf_ver: "2.0.11", nimble_ver: "1.3.8", esp_async: "bigbrodude6119/ESPAsyncWebServer", esp_async_ver: "master" }
|
||||
- { name: "Marauder CYD 2432S028", flag: "MARAUDER_CYD_MICRO", fbqn: "esp32:esp32:d32:PartitionScheme=min_spiffs", file_name: "cyd_2432S028", tft: true, tft_file: "User_Setup_cyd_micro.h", build_dir: "d32", addr: "0x1000", idf_ver: "2.0.11", nimble_ver: "1.3.8", esp_async: "bigbrodude6119/ESPAsyncWebServer", esp_async_ver: "master" }
|
||||
- { name: "Marauder CYD 2432S024 GUITION", flag: "MARAUDER_CYD_GUITION", fbqn: "esp32:esp32:d32:PartitionScheme=min_spiffs", file_name: "cyd_2432S024_guition", tft: true, tft_file: "User_Setup_cyd_guition.h", build_dir: "d32", addr: "0x1000", idf_ver: "2.0.11", nimble_ver: "1.3.8", esp_async: "bigbrodude6119/ESPAsyncWebServer", esp_async_ver: "master" }
|
||||
- { name: "Marauder CYD 2432S028 2 USB", flag: "MARAUDER_CYD_2USB", fbqn: "esp32:esp32:d32:PartitionScheme=min_spiffs", file_name: "cyd_2432S028_2usb", tft: true, tft_file: "User_Setup_cyd_2usb.h", build_dir: "d32", addr: "0x1000", idf_ver: "2.0.11", nimble_ver: "1.3.8", esp_async: "bigbrodude6119/ESPAsyncWebServer", esp_async_ver: "master" }
|
||||
- { name: "Marauder CYD 3.5inch", flag: "MARAUDER_CYD_3_5_INCH", fbqn: "esp32:esp32:d32:PartitionScheme=min_spiffs", file_name: "cyd_3_5_inch", tft: true, tft_file: "User_Setup_cyd_3_5_inch.h", build_dir: "d32", addr: "0x1000", idf_ver: "2.0.11", nimble_ver: "1.3.8", esp_async: "bigbrodude6119/ESPAsyncWebServer", esp_async_ver: "master" }
|
||||
- { name: "Marauder v7.1", flag: "MARAUDER_V7_1", fbqn: "esp32:esp32:dfrobot_firebeetle2_esp32e:FlashSize=16M,PartitionScheme=min_spiffs,PSRAM=enabled", file_name: "marauder_v7_1", tft: true, tft_file: "User_Setup_dual_nrf24.h", build_dir: "dfrobot_firebeetle2_esp32e", addr: "0x1000", idf_ver: "2.0.11", nimble_ver: "1.3.8", esp_async: "bigbrodude6119/ESPAsyncWebServer", esp_async_ver: "master" }
|
||||
- { name: "M5Cardputer", flag: "MARAUDER_CARDPUTER", fbqn: "esp32:esp32:esp32s3:PartitionScheme=min_spiffs,FlashSize=8M,PSRAM=disabled", file_name: "m5cardputer", tft: true, tft_file: "User_Setup_marauder_m5cardputer.h", build_dir: "esp32s3", addr: "0x1000", idf_ver: "2.0.11", nimble_ver: "1.3.8", esp_async: "bigbrodude6119/ESPAsyncWebServer", esp_async_ver: "master" }
|
||||
- { name: "ESP32-C5-DevKitC-1", flag: "MARAUDER_C5", fbqn: "esp32:esp32:esp32c5:PartitionScheme=min_spiffs", file_name: "esp32c5devkitc1", tft: false, tft_file: "", build_dir: "esp32c5", addr: "0x2000", idf_ver: "3.3.0", nimble_ver: "2.3.0", esp_async: "bigbrodude6119/ESPAsyncWebServer", esp_async_ver: "master" }
|
||||
|
||||
steps:
|
||||
- name: Checkout Code
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Install Arduino CLI
|
||||
run: |
|
||||
curl -fsSL https://raw.githubusercontent.com/arduino/arduino-cli/master/install.sh | sh
|
||||
echo "/home/runner/work/ESP32Marauder/ESP32Marauder/bin" >> $GITHUB_PATH
|
||||
export PATH=$PATH:/home/runner/work/ESP32Marauder/ESP32Marauder/bin
|
||||
arduino-cli version
|
||||
|
||||
- name: Verify Installed Cores
|
||||
run: arduino-cli core list
|
||||
|
||||
- name: Build TestFile with ESP32 v${{ matrix.board.idf_ver }}
|
||||
uses: ArminJo/arduino-test-compile@v3.2.1
|
||||
with:
|
||||
sketch-names: TestFile.ino
|
||||
arduino-board-fqbn: esp32:esp32:esp32s2
|
||||
arduino-platform: esp32:esp32@${{ matrix.board.idf_ver }}
|
||||
platform-url: https://github.com/espressif/arduino-esp32/releases/download/${{ matrix.board.idf_ver }}/package_esp32_dev_index.json
|
||||
|
||||
- name: Verify Installed Cores Again
|
||||
run: arduino-cli core list
|
||||
|
||||
- name: Show Arduino dir structure
|
||||
run: |
|
||||
find /home/runner/.arduino15/packages/esp32/hardware/
|
||||
|
||||
- name: Install ESP32Ping
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
repository: marian-craciunescu/ESP32Ping
|
||||
ref: 1.6
|
||||
path: CustomESP32Ping
|
||||
|
||||
- name: Install AsyncTCP
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
repository: ESP32Async/AsyncTCP
|
||||
ref: v3.4.8
|
||||
path: CustomAsyncTCP
|
||||
|
||||
- name: Install MicroNMEA
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
repository: stevemarple/MicroNMEA
|
||||
ref: v2.0.6
|
||||
path: CustomMicroNMEA
|
||||
|
||||
- name: Install ESPAsyncWebServer
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
repository: ESP32Async/ESPAsyncWebServer
|
||||
ref: v3.8.1
|
||||
path: CustomESPAsyncWebServer
|
||||
|
||||
- name: Install TFT_eSPI
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
repository: Bodmer/TFT_eSPI
|
||||
ref: V2.5.34
|
||||
path: CustomTFT_eSPI
|
||||
|
||||
- name: Install XPT2046_Touchscreen
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
repository: PaulStoffregen/XPT2046_Touchscreen
|
||||
ref: v1.4
|
||||
path: CustomXPT2046_Touchscreen
|
||||
|
||||
- name: Install lv_arduino
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
repository: lvgl/lv_arduino
|
||||
ref: 3.0.0
|
||||
path: Customlv_arduino
|
||||
|
||||
- name: Install JPEGDecoder
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
repository: Bodmer/JPEGDecoder
|
||||
ref: 1.8.0
|
||||
path: CustomJPEGDecoder
|
||||
|
||||
- name: Install NimBLE-Arduino
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
repository: h2zero/NimBLE-Arduino
|
||||
ref: ${{ matrix.board.nimble_ver }}
|
||||
path: CustomNimBLE-Arduino
|
||||
|
||||
- name: Install Adafruit_NeoPixel
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
repository: adafruit/Adafruit_NeoPixel
|
||||
ref: 1.12.0
|
||||
path: CustomAdafruit_NeoPixel
|
||||
|
||||
- name: Install ArduinoJson
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
repository: bblanchon/ArduinoJson
|
||||
ref: v6.18.2
|
||||
path: CustomArduinoJson
|
||||
|
||||
- name: Install LinkedList
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
repository: ivanseidel/LinkedList
|
||||
ref: v1.3.3
|
||||
path: CustomLinkedList
|
||||
|
||||
- name: Install EspSoftwareSerial
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
repository: plerup/espsoftwareserial
|
||||
ref: 8.1.0
|
||||
path: CustomEspSoftwareSerial
|
||||
|
||||
- name: Install Adafruit_BusIO
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
repository: adafruit/Adafruit_BusIO
|
||||
ref: 1.15.0
|
||||
path: CustomAdafruit_BusIO
|
||||
|
||||
- name: Install Adafruit_MAX1704X
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
repository: adafruit/Adafruit_MAX1704X
|
||||
ref: 1.0.2
|
||||
path: CustomAdafruit_MAX1704X
|
||||
|
||||
- name: Show Libraries
|
||||
run: |
|
||||
find /home/runner/ -name "Custom*"
|
||||
|
||||
- name: Configure TFT_eSPI
|
||||
run: |
|
||||
rm -f CustomTFT_eSPI/User_Setup_Select.h
|
||||
cp User*.h CustomTFT_eSPI/
|
||||
pwd
|
||||
ls -la
|
||||
ls -la CustomTFT_eSPI
|
||||
|
||||
- name: Install Esptool
|
||||
run: |
|
||||
pip install esptool
|
||||
|
||||
- name: Modify platform.txt
|
||||
run: |
|
||||
if [[ ${{ matrix.board.idf_ver }} == "2.0.11" ]]; then
|
||||
for i in $(find /home/runner/.arduino15/packages/esp32/hardware/esp32/ -name "platform.txt"); do
|
||||
sed -i 's/compiler.c.elf.libs.esp32c3=/compiler.c.elf.libs.esp32c3=-zmuldefs /' "$i"
|
||||
sed -i 's/compiler.c.elf.libs.esp32s3=/compiler.c.elf.libs.esp32s3=-zmuldefs /' "$i"
|
||||
sed -i 's/compiler.c.elf.libs.esp32s2=/compiler.c.elf.libs.esp32s2=-zmuldefs /' "$i"
|
||||
sed -i 's/compiler.c.elf.libs.esp32=/compiler.c.elf.libs.esp32=-zmuldefs /' "$i"
|
||||
cat "$i" | grep compiler.c.elf.libs.esp32c3
|
||||
cat "$i" | grep compiler.c.elf.libs.esp32s3
|
||||
cat "$i" | grep compiler.c.elf.libs.esp32s2
|
||||
cat "$i" | grep compiler.c.elf.libs.esp32
|
||||
done
|
||||
fi
|
||||
|
||||
if [[ ${{ matrix.board.idf_ver }} == "3.3.0" ]]; then
|
||||
for i in $(find /home/runner/.arduino15/packages/esp32/hardware/esp32/ -name "platform.txt"); do
|
||||
sed -i 's/compiler.c.elf.extra_flags=/compiler.c.elf.extra_flags=-Wl,-zmuldefs /' "$i"
|
||||
done
|
||||
fi
|
||||
|
||||
- name: Configure TFT_eSPI (if needed)
|
||||
run: |
|
||||
pwd
|
||||
if [[ ${{ matrix.board.tft }} == true ]]; then
|
||||
find /home/runner/ -name "*TFT_eSPI*"
|
||||
sed -i 's/^\/\/#include <${{ matrix.board.tft_file }}>/#include <${{ matrix.board.tft_file }}>/' /home/runner/work/ESP32Marauder/ESP32Marauder/CustomTFT_eSPI/User_Setup_Select.h
|
||||
fi
|
||||
|
||||
- name: Build Marauder for ${{ matrix.board.name }}
|
||||
uses: ArminJo/arduino-test-compile@v3.3.0
|
||||
with:
|
||||
sketch-names: esp32_marauder.ino
|
||||
arduino-board-fqbn: ${{ matrix.board.fbqn }}
|
||||
extra-arduino-cli-args: "--warnings none --build-property compiler.cpp.extra_flags='-D${{ matrix.board.flag }}'"
|
||||
arduino-platform: esp32:esp32@${{ matrix.board.idf_ver }}
|
||||
platform-url: https://github.com/espressif/arduino-esp32/releases/download/${{ matrix.board.idf_ver }}/package_esp32_dev_index.json
|
||||
|
||||
- name: Rename and Upload ${{ matrix.board.name }} Artifact
|
||||
run: |
|
||||
VERSION=$(grep '#define MARAUDER_VERSION' ./esp32_marauder/configs.h | sed -E 's/.*"v([^"]+)"/v\1/' | tr '.' '_')
|
||||
DATE=$(date +%Y%m%d)
|
||||
|
||||
BUILD_DIR=./esp32_marauder/build/esp32.esp32.${{ matrix.board.build_dir }}
|
||||
INPUT_BIN=$BUILD_DIR/esp32_marauder.ino.bin
|
||||
|
||||
OUTPUT_BIN=esp32_marauder_${VERSION}_beta_${DATE}_${{ matrix.board.file_name }}.bin
|
||||
|
||||
mv "$INPUT_BIN" "$BUILD_DIR/$OUTPUT_BIN"
|
||||
|
||||
echo "artifact_name=$OUTPUT_BIN" >> $GITHUB_ENV
|
||||
echo "artifact_path=$BUILD_DIR/$OUTPUT_BIN" >> $GITHUB_ENV
|
||||
echo "wild_card=esp32_marauder_${VERSION}_beta_${DATE}_*.bin" >> $GITHUB_ENV
|
||||
|
||||
- name: Upload ${{ matrix.board.name }} Artifact
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: ${{ env.artifact_name }}
|
||||
path: ${{ env.artifact_path }}
|
||||
retention-days: 5
|
||||
|
||||
post_compile_steps:
|
||||
name: Create Nightly Release
|
||||
runs-on: ubuntu-latest
|
||||
needs: [compile_sketch, decide]
|
||||
# create release if manual dispatch OR should_release decided true for scheduled run
|
||||
if: ${{ needs.decide.outputs.should_build == 'true' }}
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- uses: actions/download-artifact@v4
|
||||
with:
|
||||
merge-multiple: true
|
||||
|
||||
- name: Compute release title/tag
|
||||
id: meta
|
||||
shell: bash
|
||||
run: |
|
||||
VERSION=$(grep '#define MARAUDER_VERSION' ./esp32_marauder/configs.h | sed -E 's/.*"v([^"]+)"/v\1/' | tr '.' '_')
|
||||
DATE=$(date +%Y%m%d)
|
||||
SHORT_SHA="$(git rev-parse --short HEAD)"
|
||||
if [[ "${{ github.event_name }}" == "schedule" ]]; then
|
||||
echo "name=${SHORT_SHA}_nightly" >> $GITHUB_OUTPUT
|
||||
# keep your existing tag, or set one here:
|
||||
echo "tag=nightly-$(date -u +'%Y%m%d')-${SHORT_SHA}" >> $GITHUB_OUTPUT
|
||||
echo "prerelease=true" >> $GITHUB_OUTPUT
|
||||
else
|
||||
echo "name=${SHORT_SHA}" >> $GITHUB_OUTPUT
|
||||
echo "tag=manual-$(date -u +'%Y%m%d')-${SHORT_SHA}" >> $GITHUB_OUTPUT
|
||||
echo "prerelease=false" >> $GITHUB_OUTPUT
|
||||
fi
|
||||
|
||||
echo "wild_card=esp32_marauder_${VERSION}_beta_${DATE}_*.bin" >> $GITHUB_ENV
|
||||
|
||||
echo ${{ env.wild_card }}
|
||||
|
||||
- name: Delete old assets on nightly release (if any)
|
||||
uses: actions/github-script@v7
|
||||
with:
|
||||
script: |
|
||||
const owner = context.repo.owner;
|
||||
const repo = context.repo.repo;
|
||||
|
||||
let rel;
|
||||
try {
|
||||
rel = await github.rest.repos.getReleaseByTag({ owner, repo, tag: 'nightly' });
|
||||
} catch (e) {
|
||||
if (e.status === 404) {
|
||||
// No release yet — nothing to delete
|
||||
return;
|
||||
}
|
||||
throw e;
|
||||
}
|
||||
|
||||
const assets = rel.data.assets || [];
|
||||
for (const a of assets) {
|
||||
await github.rest.repos.deleteReleaseAsset({ owner, repo, asset_id: a.id });
|
||||
core.info(`Deleted old asset: ${a.name}`);
|
||||
}
|
||||
|
||||
- name: Create Release
|
||||
uses: softprops/action-gh-release@v1
|
||||
with:
|
||||
name: ${{ needs.decide.outputs.short_sha }}_nightly
|
||||
tag_name: nightly_${{ needs.decide.outputs.short_sha }}
|
||||
prerelease: true
|
||||
generate_release_notes: false
|
||||
draft: false
|
||||
files: |
|
||||
${{ env.wild_card }}
|
||||
body: |
|
||||
[justcallmekokollc.com](https://justcallmekokollc.com)
|
||||
|
||||
### This is an automated pre-release / beta created by CI.
|
||||
|
||||
### Please see [GPS Modification](https://github.com/justcallmekoko/ESP32Marauder/wiki/gps-modification) to find out how to add GPS capabilities to your Marauder.
|
||||
**Flipper Zero Marauder Companion App:**
|
||||
**Be sure to install the latest version of the [Marauder Companion](https://github.com/0xchocolate/flipperzero-wifi-marauder/releases/latest) to use these new features on your Flipper Zero**
|
||||
|
||||
**Additional Resources**
|
||||
**[Project Issues](https://github.com/justcallmekoko/ESP32Marauder/issues)**
|
||||
**[Install/Update Instructions](https://github.com/justcallmekoko/ESP32Marauder/wiki/update-firmware)**
|
||||
**[ESP32 Marauder companion app](https://github.com/0xchocolate/flipperzero-firmware-with-wifi-marauder-companion/releases/latest)**
|
||||
**[My Discord](https://discord.com/servers/willstunforfood-776211399918878760)**
|
||||
|
||||
**Note:** Nightly pre-releases are for testing and evaluation. Use them at your own risk.
|
||||
|
||||
| Hardware | Binary Version |
|
||||
| -------- | -------------- |
|
||||
| v4 (OG) | `_old_hardware.bin` |
|
||||
| v6 | `_new_hardware.bin`/`_v6.bin` |
|
||||
| v6.1/v6.2 | `_v6_1.bin` |
|
||||
| v7 | `_v7.bin` |
|
||||
| Kit | `_kit.bin` |
|
||||
| Mini | `_mini.bin` |
|
||||
| Flipper Zero | `_flipper.bin` |
|
||||
| MutliBoard S3 | `_multiboardS3.bin` |
|
||||
| LDDB/NodeMCU/Wemos | `_lddb.bin` |
|
||||
| Dev Board Pro | `_marauder_dev_board_pro.bin` |
|
||||
| BFFB | `_marauder_dev_board_pro.bin` |
|
||||
| ESP32-S2 Reverse Feather | `_rev_feather.bin` |
|
||||
| CYD 2432S028(R) | `_cyd_2432S028.bin` |
|
||||
| RL Phantom | `_cyd_2432S024_guition.bin` |
|
||||
| CYD 2432S028 2 USB | `_cyd_2432S028_2usb.bin` |
|
||||
| M5 Cardputer | `_m5cardputer.bin` (Available on M5 Burner) |
|
||||
| ESP32-C5 DevKit | [`_esp32c5_devkit.bin`](https://github.com/justcallmekoko/ESP32Marauder/wiki/ESP32%E2%80%90C5%E2%80%90DevKitC%E2%80%901) |
|
||||
| AWOK V2/V3 screen (white usb) | `_v6_1.bin` |
|
||||
| AWOK V2 flipper (orange usb) | `_flipper.bin` |
|
||||
| AWOK V3 flipper (orange usb) | `_marauder_dev_board_pro.bin` |
|
||||
|
||||
BIN
C5_Py_Flasher/bins/bootloader.bin
Normal file
BIN
C5_Py_Flasher/bins/esp32_marauder_v1_8_5_esp32c5devkitc1.bin
Normal file
BIN
C5_Py_Flasher/bins/partitions.bin
Normal file
164
C5_Py_Flasher/c5_flasher.py
Normal file
@@ -0,0 +1,164 @@
|
||||
# === ESP32-C5 Auto Flasher Script By: AWOK ===
|
||||
|
||||
import sys
|
||||
import subprocess
|
||||
import os
|
||||
import platform # Placeholder for possible OS checks
|
||||
import glob
|
||||
import time
|
||||
import shutil
|
||||
import argparse
|
||||
|
||||
def ensure_package(pkg):
|
||||
try:
|
||||
__import__(pkg if pkg != 'gitpython' else 'git')
|
||||
except ImportError:
|
||||
print(f"Installing missing package: {pkg}")
|
||||
subprocess.check_call([sys.executable, '-m', 'pip', 'install', '--upgrade', pkg])
|
||||
|
||||
try:
|
||||
import serial.tools.list_ports
|
||||
except ImportError:
|
||||
ensure_package('pyserial')
|
||||
try:
|
||||
import esptool
|
||||
except ImportError:
|
||||
ensure_package('esptool')
|
||||
try:
|
||||
from colorama import Fore, Style
|
||||
except ImportError:
|
||||
ensure_package('colorama')
|
||||
|
||||
# Dependency check and install if needed
|
||||
REQUIRED_PACKAGES = [
|
||||
'pyserial',
|
||||
'esptool',
|
||||
'colorama'
|
||||
]
|
||||
|
||||
def ensure_requirements():
|
||||
for pkg in REQUIRED_PACKAGES:
|
||||
ensure_package(pkg)
|
||||
ensure_requirements()
|
||||
|
||||
# Finds the first file from a list of possible names in the bins folder
|
||||
def find_file(name_options, bins_dir):
|
||||
for name in name_options:
|
||||
files = glob.glob(os.path.join(bins_dir, name))
|
||||
if files:
|
||||
return files[0]
|
||||
return None
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser(description="ESP32-C5 Auto Flasher (bins subdir)")
|
||||
parser.parse_args()
|
||||
|
||||
bins_dir = os.path.join(os.path.dirname(__file__), 'bins')
|
||||
if not os.path.isdir(bins_dir):
|
||||
print(Fore.RED + f"Bins directory not found: {bins_dir}\nPlease create a 'bins' folder with your .bin files." + Style.RESET_ALL)
|
||||
exit(1)
|
||||
|
||||
# Logo and splash, both centered and purple
|
||||
terminal_width = shutil.get_terminal_size((100, 20)).columns
|
||||
def center(text): return text.center(terminal_width)
|
||||
logo_lines = [
|
||||
" @@@@@@ ",
|
||||
" @@@@@@@@ @@@@@ @@@@ ",
|
||||
" @@@ @@@@@@@ @@@ @@@@@@@@ ",
|
||||
" @@@@@@@@@@@@@ @@@@@ @@@ @@@@ @@@ ",
|
||||
" @@@ @@@@@ @@@ @@@@@@ @@@ ",
|
||||
" @@@ @@@ @@ @@@@ @@@ ",
|
||||
" @@@@@@@@@@@@ @@ @ @@@ @@@ @@ ",
|
||||
" @@@ @@@@@ @@ @@@ @@ @@@@@@@@@@@@@@ ",
|
||||
" @@@ @@@ @@ @@@ @@@@@ @@@@",
|
||||
" @@@ @@ @@@@ @@@ @@@",
|
||||
" @@@@@ @@ @@@@ @@@",
|
||||
" @@@@@@ @@ @@ @ @@@ @@@@ ",
|
||||
" @@@ @@ @@ @ @@@@@@ ",
|
||||
" @@@ @@ @@@ @@ @@@@@@@@@@@@@@@ ",
|
||||
"@@@ @@@@ @ @@@@ @@@@@ @@@ @ @@@@ @@@ @@@ ",
|
||||
"@@@ @@@@@@@ @@@ @@@@@@@@@@@@@@@@@@@ @@ @@@ @@@ ",
|
||||
"@@@ @@@@@ @@@ @@@@@ @@@@ @@@@ @@@@@@@@@@ @@@@ @@@ ",
|
||||
"@@@@ @@@@@@@@@@@@@@@@ @@@ @@@ @@ @@@@@@@@@@@@ @@@ ",
|
||||
" @@@@ @@@@@@@@@@@@@@@@ @@@ @@ @@@@@@@@@@@@ @@@ ",
|
||||
" @@@@@@ @@@@@ @@@ @@ @ @@ @@ @@@@ @@@@ ",
|
||||
" @@@@@@@@@@@@@ @@@ @@ @@ @@ @@@@@@@@@@@ ",
|
||||
" @@@@@@@@@@@@ @@@ @@ @@@ @ @@@@@@@@ ",
|
||||
" @@ @@ @@@ @@ @@@ ",
|
||||
" @ @@ @@ @@@ ",
|
||||
" @@@ @@@ ",
|
||||
" @@@ ",
|
||||
""
|
||||
]
|
||||
splash_lines = [
|
||||
"-- ESP32 C5 Flasher --",
|
||||
"By AWOK",
|
||||
"Inspired from LordSkeletonMans ESP32 FZEasyFlasher",
|
||||
"Shout out to JCMK for the inspiration on setting up the C5",
|
||||
""
|
||||
]
|
||||
print(Fore.MAGENTA + "\n" + "\n".join(center(line) for line in logo_lines + splash_lines) + Style.RESET_ALL)
|
||||
|
||||
# Wait for ESP32 device to show up as a new serial port
|
||||
existing_ports = set([port.device for port in serial.tools.list_ports.comports()])
|
||||
print(Fore.YELLOW + "Waiting for ESP32-C5 device to be connected..." + Style.RESET_ALL)
|
||||
while True:
|
||||
current_ports = set([port.device for port in serial.tools.list_ports.comports()])
|
||||
new_ports = current_ports - existing_ports
|
||||
if new_ports:
|
||||
serial_port = new_ports.pop()
|
||||
break
|
||||
time.sleep(0.5)
|
||||
print(Fore.GREEN + f"Detected ESP32-C5 on port: {serial_port}" + Style.RESET_ALL)
|
||||
|
||||
# Find bin files for each firmware component
|
||||
bootloader = find_file(['bootloader.bin'], bins_dir)
|
||||
partitions = find_file(['partition-table.bin', 'partitions.bin'], bins_dir)
|
||||
ota_data = find_file(['ota_data_initial.bin'], bins_dir)
|
||||
|
||||
# Main firmware: largest bin in the folder that's not bootloader, partition, or OTA
|
||||
all_bins = glob.glob(os.path.join(bins_dir, "*.bin"))
|
||||
exclude = {bootloader, partitions, ota_data}
|
||||
firmware_bins = [f for f in all_bins if f not in exclude and os.path.isfile(f)]
|
||||
if not firmware_bins:
|
||||
print(Fore.RED + "No application firmware .bin file found in the 'bins' folder!" + Style.RESET_ALL)
|
||||
exit(1)
|
||||
app_bin = max(firmware_bins, key=lambda f: os.path.getsize(f))
|
||||
|
||||
# Print summary, ask for confirmation before flashing
|
||||
print(Fore.CYAN + f"\nBootloader: {bootloader or 'NOT FOUND'}")
|
||||
print(f"Partitions: {partitions or 'NOT FOUND'}")
|
||||
print(f"OTA Data: {ota_data or 'NOT FOUND'}")
|
||||
print(f"App (main): {app_bin}\n" + Style.RESET_ALL)
|
||||
if not (bootloader and partitions):
|
||||
print(Fore.RED + "Missing bootloader or partition table. Both are required for a complete flash!" + Style.RESET_ALL)
|
||||
exit(1)
|
||||
confirm = input(Fore.YELLOW + "Ready to flash these files to ESP32-C5? (y/N): " + Style.RESET_ALL)
|
||||
if confirm.strip().lower() != 'y':
|
||||
print("Aborting.")
|
||||
exit(0)
|
||||
|
||||
# Flash using esptool, with offsets for C5
|
||||
esptool_args = [
|
||||
'--chip', 'esp32c5',
|
||||
'--port', serial_port,
|
||||
'--baud', '921600',
|
||||
'--before', 'default_reset',
|
||||
'--after', 'hard_reset',
|
||||
'write_flash', '-z',
|
||||
'0x2000', bootloader,
|
||||
'0x8000', partitions,
|
||||
]
|
||||
if ota_data:
|
||||
esptool_args += ['0xd000', ota_data]
|
||||
esptool_args += ['0x10000', app_bin]
|
||||
|
||||
print(Fore.YELLOW + "Flashing ESP32-C5 with bootloader, partition table, and application..." + Style.RESET_ALL)
|
||||
try:
|
||||
esptool.main(esptool_args)
|
||||
print(Fore.GREEN + "Flashing complete!" + Style.RESET_ALL)
|
||||
except Exception as e:
|
||||
print(Fore.RED + f"Flashing failed: {e}" + Style.RESET_ALL)
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -3,12 +3,14 @@
|
||||
"active_layer": 44,
|
||||
"active_layer_preset": "",
|
||||
"auto_track_width": false,
|
||||
"hidden_netclasses": [],
|
||||
"hidden_nets": [
|
||||
"+ext_3V3"
|
||||
],
|
||||
"high_contrast_mode": 0,
|
||||
"net_color_mode": 1,
|
||||
"opacity": {
|
||||
"images": 0.6,
|
||||
"pads": 1.0,
|
||||
"tracks": 1.0,
|
||||
"vias": 1.0,
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
{
|
||||
"board": {
|
||||
"3dviewports": [],
|
||||
"design_settings": {
|
||||
"defaults": {
|
||||
"board_outline_line_width": 0.09999999999999999,
|
||||
@@ -62,20 +63,26 @@
|
||||
"rule_severities": {
|
||||
"annular_width": "error",
|
||||
"clearance": "error",
|
||||
"connection_width": "warning",
|
||||
"copper_edge_clearance": "ignore",
|
||||
"copper_sliver": "warning",
|
||||
"courtyards_overlap": "ignore",
|
||||
"diff_pair_gap_out_of_range": "error",
|
||||
"diff_pair_uncoupled_length_too_long": "error",
|
||||
"drill_out_of_range": "error",
|
||||
"duplicate_footprints": "warning",
|
||||
"extra_footprint": "warning",
|
||||
"footprint": "error",
|
||||
"footprint_type_mismatch": "error",
|
||||
"hole_clearance": "error",
|
||||
"hole_near_hole": "error",
|
||||
"invalid_outline": "error",
|
||||
"isolated_copper": "warning",
|
||||
"item_on_disabled_layer": "error",
|
||||
"items_not_allowed": "error",
|
||||
"length_out_of_range": "error",
|
||||
"lib_footprint_issues": "warning",
|
||||
"lib_footprint_mismatch": "warning",
|
||||
"malformed_courtyard": "error",
|
||||
"microvia_drill_out_of_range": "error",
|
||||
"missing_courtyard": "ignore",
|
||||
@@ -85,9 +92,14 @@
|
||||
"padstack": "error",
|
||||
"pth_inside_courtyard": "ignore",
|
||||
"shorting_items": "error",
|
||||
"silk_edge_clearance": "warning",
|
||||
"silk_over_copper": "ignore",
|
||||
"silk_overlap": "ignore",
|
||||
"skew_out_of_range": "error",
|
||||
"solder_mask_bridge": "error",
|
||||
"starved_thermal": "error",
|
||||
"text_height": "warning",
|
||||
"text_thickness": "warning",
|
||||
"through_hole_pad_without_hole": "error",
|
||||
"too_many_vias": "error",
|
||||
"track_dangling": "ignore",
|
||||
@@ -96,7 +108,6 @@
|
||||
"unconnected_items": "error",
|
||||
"unresolved_variable": "error",
|
||||
"via_dangling": "warning",
|
||||
"zone_has_empty_net": "error",
|
||||
"zones_intersect": "error"
|
||||
},
|
||||
"rules": {
|
||||
@@ -104,20 +115,65 @@
|
||||
"allow_microvias": false,
|
||||
"max_error": 0.005,
|
||||
"min_clearance": 0.127,
|
||||
"min_connection": 0.0,
|
||||
"min_copper_edge_clearance": 0.19999999999999998,
|
||||
"min_hole_clearance": 0.254,
|
||||
"min_hole_to_hole": 0.5,
|
||||
"min_microvia_diameter": 0.19999999999999998,
|
||||
"min_microvia_drill": 0.09999999999999999,
|
||||
"min_resolved_spokes": 2,
|
||||
"min_silk_clearance": 0.0,
|
||||
"min_text_height": 0.7999999999999999,
|
||||
"min_text_thickness": 0.08,
|
||||
"min_through_hole_diameter": 0.19999999999999998,
|
||||
"min_track_width": 0.127,
|
||||
"min_via_annular_width": 0.049999999999999996,
|
||||
"min_via_diameter": 0.5,
|
||||
"solder_mask_clearance": 0.0,
|
||||
"solder_mask_min_width": 0.0,
|
||||
"solder_mask_to_copper_clearance": 0.0,
|
||||
"use_height_for_length_calcs": true
|
||||
},
|
||||
"teardrop_options": [
|
||||
{
|
||||
"td_allow_use_two_tracks": true,
|
||||
"td_curve_segcount": 5,
|
||||
"td_on_pad_in_zone": false,
|
||||
"td_onpadsmd": true,
|
||||
"td_onroundshapesonly": false,
|
||||
"td_ontrackend": false,
|
||||
"td_onviapad": true
|
||||
}
|
||||
],
|
||||
"teardrop_parameters": [
|
||||
{
|
||||
"td_curve_segcount": 0,
|
||||
"td_height_ratio": 1.0,
|
||||
"td_length_ratio": 0.5,
|
||||
"td_maxheight": 2.0,
|
||||
"td_maxlen": 1.0,
|
||||
"td_target_name": "td_round_shape",
|
||||
"td_width_to_size_filter_ratio": 0.9
|
||||
},
|
||||
{
|
||||
"td_curve_segcount": 0,
|
||||
"td_height_ratio": 1.0,
|
||||
"td_length_ratio": 0.5,
|
||||
"td_maxheight": 2.0,
|
||||
"td_maxlen": 1.0,
|
||||
"td_target_name": "td_rect_shape",
|
||||
"td_width_to_size_filter_ratio": 0.9
|
||||
},
|
||||
{
|
||||
"td_curve_segcount": 0,
|
||||
"td_height_ratio": 1.0,
|
||||
"td_length_ratio": 0.5,
|
||||
"td_maxheight": 2.0,
|
||||
"td_maxlen": 1.0,
|
||||
"td_target_name": "td_track_end",
|
||||
"td_width_to_size_filter_ratio": 0.9
|
||||
}
|
||||
],
|
||||
"track_widths": [
|
||||
0.0,
|
||||
0.127,
|
||||
@@ -151,7 +207,8 @@
|
||||
"zones_allow_external_fillets": false,
|
||||
"zones_use_no_outline": true
|
||||
},
|
||||
"layer_presets": []
|
||||
"layer_presets": [],
|
||||
"viewports": []
|
||||
},
|
||||
"boards": [],
|
||||
"cvpcb": {
|
||||
@@ -335,18 +392,23 @@
|
||||
"rule_severities": {
|
||||
"bus_definition_conflict": "error",
|
||||
"bus_entry_needed": "error",
|
||||
"bus_label_syntax": "error",
|
||||
"bus_to_bus_conflict": "error",
|
||||
"bus_to_net_conflict": "error",
|
||||
"conflicting_netclasses": "error",
|
||||
"different_unit_footprint": "error",
|
||||
"different_unit_net": "error",
|
||||
"duplicate_reference": "error",
|
||||
"duplicate_sheet_names": "error",
|
||||
"endpoint_off_grid": "warning",
|
||||
"extra_units": "error",
|
||||
"global_label_dangling": "warning",
|
||||
"hier_label_mismatch": "error",
|
||||
"label_dangling": "error",
|
||||
"lib_symbol_issues": "warning",
|
||||
"missing_bidi_pin": "warning",
|
||||
"missing_input_pin": "warning",
|
||||
"missing_power_pin": "error",
|
||||
"missing_unit": "warning",
|
||||
"multiple_net_names": "warning",
|
||||
"net_not_bus_member": "warning",
|
||||
"no_connect_connected": "warning",
|
||||
@@ -356,6 +418,7 @@
|
||||
"pin_to_pin": "warning",
|
||||
"power_pin_not_driven": "error",
|
||||
"similar_labels": "warning",
|
||||
"simulation_model_issue": "ignore",
|
||||
"unannotated": "error",
|
||||
"unit_value_mismatch": "error",
|
||||
"unresolved_variable": "error",
|
||||
@@ -373,7 +436,7 @@
|
||||
"net_settings": {
|
||||
"classes": [
|
||||
{
|
||||
"bus_width": 12.0,
|
||||
"bus_width": 12,
|
||||
"clearance": 0.127,
|
||||
"diff_pair_gap": 0.25,
|
||||
"diff_pair_via_gap": 0.25,
|
||||
@@ -387,10 +450,10 @@
|
||||
"track_width": 0.127,
|
||||
"via_diameter": 0.5,
|
||||
"via_drill": 0.3,
|
||||
"wire_width": 6.0
|
||||
"wire_width": 6
|
||||
},
|
||||
{
|
||||
"bus_width": 12.0,
|
||||
"bus_width": 12,
|
||||
"clearance": 0.127,
|
||||
"diff_pair_gap": 0.25,
|
||||
"diff_pair_via_gap": 0.25,
|
||||
@@ -399,18 +462,15 @@
|
||||
"microvia_diameter": 0.3,
|
||||
"microvia_drill": 0.1,
|
||||
"name": "GND",
|
||||
"nets": [
|
||||
"GND"
|
||||
],
|
||||
"pcb_color": "rgba(0, 0, 0, 0.000)",
|
||||
"schematic_color": "rgba(0, 0, 0, 0.000)",
|
||||
"track_width": 0.2,
|
||||
"via_diameter": 0.5,
|
||||
"via_drill": 0.3,
|
||||
"wire_width": 6.0
|
||||
"wire_width": 6
|
||||
},
|
||||
{
|
||||
"bus_width": 12.0,
|
||||
"bus_width": 12,
|
||||
"clearance": 0.127,
|
||||
"diff_pair_gap": 0.25,
|
||||
"diff_pair_via_gap": 0.25,
|
||||
@@ -419,25 +479,45 @@
|
||||
"microvia_diameter": 0.3,
|
||||
"microvia_drill": 0.1,
|
||||
"name": "Supply",
|
||||
"nets": [
|
||||
"+3V3",
|
||||
"+5V",
|
||||
"+LDO_3V3",
|
||||
"+ext_3V3",
|
||||
"+ext_5V"
|
||||
],
|
||||
"pcb_color": "rgba(0, 0, 0, 0.000)",
|
||||
"schematic_color": "rgba(0, 0, 0, 0.000)",
|
||||
"track_width": 0.2,
|
||||
"via_diameter": 0.5,
|
||||
"via_drill": 0.3,
|
||||
"wire_width": 6.0
|
||||
"wire_width": 6
|
||||
}
|
||||
],
|
||||
"meta": {
|
||||
"version": 2
|
||||
"version": 3
|
||||
},
|
||||
"net_colors": null
|
||||
"net_colors": null,
|
||||
"netclass_assignments": null,
|
||||
"netclass_patterns": [
|
||||
{
|
||||
"netclass": "GND",
|
||||
"pattern": "GND"
|
||||
},
|
||||
{
|
||||
"netclass": "Supply",
|
||||
"pattern": "+3V3"
|
||||
},
|
||||
{
|
||||
"netclass": "Supply",
|
||||
"pattern": "+5V"
|
||||
},
|
||||
{
|
||||
"netclass": "Supply",
|
||||
"pattern": "+LDO_3V3"
|
||||
},
|
||||
{
|
||||
"netclass": "Supply",
|
||||
"pattern": "+ext_3V3"
|
||||
},
|
||||
{
|
||||
"netclass": "Supply",
|
||||
"pattern": "+ext_5V"
|
||||
}
|
||||
]
|
||||
},
|
||||
"pcbnew": {
|
||||
"last_paths": {
|
||||
@@ -453,6 +533,8 @@
|
||||
"schematic": {
|
||||
"annotate_start_num": 0,
|
||||
"drawing": {
|
||||
"dashed_lines_dash_length_ratio": 12.0,
|
||||
"dashed_lines_gap_length_ratio": 3.0,
|
||||
"default_line_thickness": 6.0,
|
||||
"default_text_size": 50.0,
|
||||
"field_names": [],
|
||||
@@ -484,7 +566,11 @@
|
||||
"page_layout_descr_file": "",
|
||||
"plot_directory": "",
|
||||
"spice_adjust_passive_values": false,
|
||||
"spice_current_sheet_as_root": false,
|
||||
"spice_external_command": "spice \"%I\"",
|
||||
"spice_model_current_sheet_as_root": true,
|
||||
"spice_save_all_currents": false,
|
||||
"spice_save_all_voltages": false,
|
||||
"subpart_first_id": 65,
|
||||
"subpart_id_separator": 0
|
||||
},
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<!---Shields/Badges https://shields.io/--->
|
||||
|
||||
# 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"><img alt="Marauder logo" src="https://github.com/justcallmekoko/ESP32Marauder/blob/master/pictures/marauder_skull_patch_04_full_final.png?raw=true" width="300"></p>
|
||||
<p align="center">
|
||||
<b>A suite of WiFi/Bluetooth offensive and defensive tools for the ESP32</b>
|
||||
<br><br>
|
||||
@@ -15,9 +15,6 @@
|
||||
<a href="https://twitter.com/intent/follow?screen_name=jcmkyoutube"><img src="https://img.shields.io/twitter/follow/jcmkyoutube?style=social&logo=twitter" alt="Twitter"></a>
|
||||
<a href="https://www.instagram.com/just.call.me.koko"><img src="https://img.shields.io/badge/Follow%20Me-Instagram-orange" alt="Instagram"/></a>
|
||||
<br><br>
|
||||
<a href="https://www.tindie.com/products/justcallmekoko/esp32-marauder/"><img src="https://d2ss6ovg47m0r5.cloudfront.net/badges/tindie-larges.png" alt="I sell on Tindie" width="200" height="104"></a>
|
||||
<br>
|
||||
<a href="https://www.twitch.tv/willstunforfood"><img src="https://assets.stickpng.com/images/580b57fcd9996e24bc43c540.png" alt="Twitch WillStunForFood" width="200"></a>
|
||||
</p>
|
||||
|
||||
[](https://github.com/justcallmekoko/ESP32Marauder/actions/workflows/build_push.yml)
|
||||
@@ -28,4 +25,4 @@ Download the [latest release](https://github.com/justcallmekoko/ESP32Marauder/re
|
||||
Check out the project [wiki](https://github.com/justcallmekoko/ESP32Marauder/wiki) for a full overview of the ESP32 Marauder
|
||||
|
||||
# For Sale Now
|
||||
You can buy the ESP32 Marauder using [this link](https://www.tindie.com/products/justcallmekoko/esp32-marauder/)
|
||||
You can buy the ESP32 Marauder using [this link](https://www.justcallmekokollc.com)
|
||||
|
||||
@@ -21,10 +21,21 @@
|
||||
|
||||
//#include <User_Setup.h> // Default setup is root library folder
|
||||
|
||||
#include <User_Setup_og_marauder.h>
|
||||
//#include <User_Setup_og_marauder.h>
|
||||
//#include <User_Setup_id_receiver.h>
|
||||
//#include <User_Setup_marauder_mini.h>
|
||||
//#include <User_Setup_marauder_m5stickc.h>
|
||||
//#include <User_Setup_marauder_rev_feather.h>
|
||||
//#include <User_Setup_marauder_m5stickc.h>
|
||||
//#include <User_Setup_marauder_m5stickcp2.h>
|
||||
//#include <User_Setup_pocket_sdr.h>
|
||||
//#include <User_Setup_dual_nrf24.h>
|
||||
//#include <User_Setup_pocket_sdr_2.h>
|
||||
//#include <User_Setup_pocket_sdr_3.h>
|
||||
//#include <User_Setup_cyd_micro.h>
|
||||
//#include <User_Setup_cyd_guition.h>
|
||||
//#include <User_Setup_cyd_2usb.h>
|
||||
//#include <User_Setup_marauder_m5cardputer.h>
|
||||
//#include <User_Setup_cyd_3_5_inch.h>
|
||||
|
||||
//#include <User_Setups/Setup1_ILI9341.h> // Setup file configured for my ILI9341
|
||||
//#include <User_Setups/Setup2_ST7735.h> // Setup file configured for my ST7735
|
||||
@@ -51,7 +62,8 @@
|
||||
//#include <User_Setups/Setup20_ILI9488.h> // Setup file for ESP8266 and ILI9488 SPI bus TFT
|
||||
//#include <User_Setups/Setup21_ILI9488.h> // Setup file for ESP32 and ILI9488 SPI bus TFT
|
||||
|
||||
//#include <User_Setups/Setup22_TTGO_T4.h> // Setup file for ESP32 and TTGO T4 (BTC) ILI9341 SPI bus TFT
|
||||
//#include <User_Setups/Setup22_TTGO_T4.h> // Setup file for ESP32 and TTGO T4 version 1.2
|
||||
//#include <User_Setups/Setup22_TTGO_T4_v1.3.h> // Setup file for ESP32 and TTGO T4 version 1.3
|
||||
//#include <User_Setups/Setup23_TTGO_TM.h> // Setup file for ESP32 and TTGO TM ST7789 SPI bus TFT
|
||||
//#include <User_Setups/Setup24_ST7789.h> // Setup file configured for ST7789 240 x 240
|
||||
//#include <User_Setups/Setup25_TTGO_T_Display.h> // Setup file for ESP32 and TTGO T-Display ST7789V SPI bus TFT
|
||||
@@ -63,9 +75,20 @@
|
||||
//#include <User_Setups/Setup29_ILI9341_STM32.h> // Setup for Nucleo board
|
||||
//#include <User_Setups/Setup30_ILI9341_Parallel_STM32.h> // Setup for Nucleo board and parallel display
|
||||
//#include <User_Setups/Setup31_ST7796_Parallel_STM32.h> // Setup for Nucleo board and parallel display
|
||||
//#include <User_Setups/Setup32_ILI9341_STM32F103.h> // Setup for "Blue Pill"
|
||||
//#include <User_Setups/Setup32_ILI9341_STM32F103.h> // Setup for "Blue/Black Pill"
|
||||
|
||||
//#include <User_Setups/Setup33_RPi_ILI9486_STM32.h> // Setup for Nucleo board
|
||||
|
||||
//#include <User_Setups/Setup34_ILI9481_Parallel_STM32.h> // Setup for Nucleo board and parallel display
|
||||
//#include <User_Setups/Setup35_ILI9341_STM32_Port_Bus.h> // Setup for STM32 port A parallel display
|
||||
|
||||
//#include <User_Setups/Setup36_RPi_touch_ILI9341.h> // Setup file configured for ESP32 and RPi TFT with touch
|
||||
|
||||
//#include <User_Setups/Setup43_ST7735.h> // Setup file configured for my ST7735S 80x160
|
||||
//#include <User_Setups/Setup44_TTGO_CameraPlus.h> // Setup file for ESP32 and TTGO T-CameraPlus ST7789 SPI bus TFT 240x240
|
||||
//#include <User_Setups/Setup45_TTGO_T_Watch.h> // Setup file for ESP32 and TTGO T-Watch ST7789 SPI bus TFT 240x240
|
||||
|
||||
//#include <User_Setups/Setup50_SSD1963_Parallel.h> // Setup file for ESP32 and SSD1963 TFT display
|
||||
|
||||
//#include <User_Setups/Setup135_ST7789.h> // Setup file for ESP8266 and ST7789 135 x 240 TFT
|
||||
|
||||
@@ -149,8 +172,20 @@
|
||||
#elif defined (RM68140_DRIVER)
|
||||
#include "TFT_Drivers/RM68140_Defines.h"
|
||||
#define TFT_DRIVER 0x6814
|
||||
#elif defined (SSD1963_480_DRIVER)
|
||||
#include "TFT_Drivers/SSD1963_Defines.h"
|
||||
#define TFT_DRIVER 0x1963
|
||||
#elif defined (SSD1963_800_DRIVER)
|
||||
#include "TFT_Drivers/SSD1963_Defines.h"
|
||||
#define TFT_DRIVER 0x1963
|
||||
#elif defined (SSD1963_800ALT_DRIVER)
|
||||
#include "TFT_Drivers/SSD1963_Defines.h"
|
||||
#define TFT_DRIVER 0x1963
|
||||
#elif defined (SSD1963_800BD_DRIVER)
|
||||
#include "TFT_Drivers/SSD1963_Defines.h"
|
||||
#define TFT_DRIVER 0x1963
|
||||
// <<<<<<<<<<<<<<<<<<<<<<<< ADD NEW DRIVER HERE
|
||||
// XYZZY_init.h and XYZZY_rotation.h must also be added in TFT_eSPI.c
|
||||
// XYZZY_init.h and XYZZY_rotation.h must also be added in TFT_eSPI.cpp
|
||||
#elif defined (XYZZY_DRIVER)
|
||||
#include "TFT_Drivers/XYZZY_Defines.h"
|
||||
#define TFT_DRIVER 0x0000
|
||||
|
||||
316
User_Setup_cyd_2usb.h
Normal file
@@ -0,0 +1,316 @@
|
||||
// USER DEFINED SETTINGS
|
||||
// Set driver type, fonts to be loaded, pins used and SPI control method etc
|
||||
//
|
||||
// See the User_Setup_Select.h file if you wish to be able to define multiple
|
||||
// setups and then easily select which setup file is used by the compiler.
|
||||
//
|
||||
// If this file is edited correctly then all the library example sketches should
|
||||
// run without the need to make any more changes for a particular hardware setup!
|
||||
// Note that some sketches are designed for a particular TFT pixel width/height
|
||||
|
||||
|
||||
// ##################################################################################
|
||||
//
|
||||
// Section 1. Call up the right driver file and any options for it
|
||||
//
|
||||
// ##################################################################################
|
||||
|
||||
// Display type - only define if RPi display
|
||||
//#define RPI_DRIVER
|
||||
|
||||
// Only define one driver, the other ones must be commented out
|
||||
//#define ILI9341_DRIVER // OG Marauder
|
||||
//#define ST7735_DRIVER // Marauder Mini // Define additional parameters below for this display
|
||||
//#define ILI9163_DRIVER // Define additional parameters below for this display
|
||||
//#define S6D02A1_DRIVER
|
||||
//#define RPI_ILI9486_DRIVER // 20MHz maximum SPI
|
||||
//#define HX8357D_DRIVER
|
||||
//#define ILI9481_DRIVER
|
||||
//#define ILI9486_DRIVER
|
||||
//#define ILI9488_DRIVER // WARNING: Do not connect ILI9488 display SDO to MISO if other devices share the SPI bus (TFT SDO does NOT tristate when CS is high)
|
||||
#define ST7789_DRIVER // Full configuration option, define additional parameters below for this display
|
||||
//#define ST7789_2_DRIVER // Minimal configuration option, define additional parameters below for this display
|
||||
//#define R61581_DRIVER
|
||||
//#define RM68140_DRIVER
|
||||
//#define ST7796_DRIVER
|
||||
|
||||
// Some displays support SPI reads via the MISO pin, other displays have a single
|
||||
// bi-directional SDA pin and the library will try to read this via the MOSI line.
|
||||
// To use the SDA line for reading data from the TFT uncomment the following line:
|
||||
|
||||
// #define TFT_SDA_READ // This option is for ESP32 ONLY, tested with ST7789 display only
|
||||
|
||||
// For ST7789 and ILI9341 ONLY, define the colour order IF the blue and red are swapped on your display
|
||||
// Try ONE option at a time to find the correct colour order for your display
|
||||
|
||||
// #define TFT_RGB_ORDER TFT_RGB // Colour order Red-Green-Blue
|
||||
#define TFT_RGB_ORDER TFT_BGR // Colour order Blue-Green-Red
|
||||
|
||||
// For M5Stack ESP32 module with integrated ILI9341 display ONLY, remove // in line below
|
||||
|
||||
// #define M5STACK
|
||||
|
||||
// For ST7789, ST7735 and ILI9163 ONLY, define the pixel width and height in portrait orientation
|
||||
// #define TFT_WIDTH 80
|
||||
// #define TFT_WIDTH 128 // Marauder Mini
|
||||
#define TFT_WIDTH 240 // ST7789 240 x 240 and 240 x 320
|
||||
// #define TFT_HEIGHT 160
|
||||
// #define TFT_HEIGHT 128 // Marauder Mini
|
||||
// #define TFT_HEIGHT 240 // ST7789 240 x 240
|
||||
#define TFT_HEIGHT 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 17 // Chip select control pin D8
|
||||
#define TFT_DC 16 // Data Command control pin
|
||||
#define TFT_RST 5 // Reset pin (could connect to NodeMCU RST, see next line)
|
||||
//#define TFT_MISO 19
|
||||
//#define TFT_MOSI 23
|
||||
//#define TFT_SCLK 18
|
||||
//#define TFT_BL 32
|
||||
*/
|
||||
|
||||
// ESP32 Marauder
|
||||
#define TFT_MISO 12
|
||||
#define TFT_MOSI 13
|
||||
#define TFT_SCLK 14
|
||||
#define TFT_CS 15 // Chip select control pin
|
||||
#define TFT_DC 2 // Data Command control pin
|
||||
#define TFT_RST -1 // Reset pin (could connect to RST pin)
|
||||
//#define TFT_RST -1 // Set TFT_RST to -1 if display RESET is connected to ESP32 board RST
|
||||
|
||||
#define TFT_BL 21 // LED back-light (only for ST7789 with backlight control pin)
|
||||
|
||||
#define TOUCH_CS 33 // 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
|
||||
299
User_Setup_cyd_3_5_inch.h
Normal file
@@ -0,0 +1,299 @@
|
||||
// USER DEFINED SETTINGS
|
||||
// Set driver type, fonts to be loaded, pins used and SPI control method etc
|
||||
//
|
||||
// See the User_Setup_Select.h file if you wish to be able to define multiple
|
||||
// setups and then easily select which setup file is used by the compiler.
|
||||
//
|
||||
// If this file is edited correctly then all the library example sketches should
|
||||
// run without the need to make any more changes for a particular hardware setup!
|
||||
// Note that some sketches are designed for a particular TFT pixel width/height
|
||||
|
||||
|
||||
// ##################################################################################
|
||||
//
|
||||
// Section 1. Call up the right driver file and any options for it
|
||||
//
|
||||
// ##################################################################################
|
||||
|
||||
// Display type - only define if RPi display
|
||||
//#define RPI_DRIVER
|
||||
|
||||
// Only define one driver, the other ones must be commented out
|
||||
//#define ILI9341_DRIVER // OG Marauder
|
||||
//#define ST7735_DRIVER // Marauder Mini // Define additional parameters below for this display
|
||||
//#define ILI9163_DRIVER // Define additional parameters below for this display
|
||||
//#define S6D02A1_DRIVER
|
||||
//#define RPI_ILI9486_DRIVER // 20MHz maximum SPI
|
||||
//#define HX8357D_DRIVER
|
||||
//#define ILI9481_DRIVER
|
||||
//#define ILI9486_DRIVER
|
||||
//#define ILI9488_DRIVER // WARNING: Do not connect ILI9488 display SDO to MISO if other devices share the SPI bus (TFT SDO does NOT tristate when CS is high)
|
||||
//#define ST7789_DRIVER // Full configuration option, define additional parameters below for this display
|
||||
//#define ST7789_2_DRIVER // Minimal configuration option, define additional parameters below for this display
|
||||
//#define R61581_DRIVER
|
||||
//#define RM68140_DRIVER
|
||||
#define ST7796_DRIVER
|
||||
|
||||
// Some displays support SPI reads via the MISO pin, other displays have a single
|
||||
// bi-directional SDA pin and the library will try to read this via the MOSI line.
|
||||
// To use the SDA line for reading data from the TFT uncomment the following line:
|
||||
|
||||
// #define TFT_SDA_READ // This option is for ESP32 ONLY, tested with ST7789 display only
|
||||
|
||||
// For ST7789 and ILI9341 ONLY, define the colour order IF the blue and red are swapped on your display
|
||||
// Try ONE option at a time to find the correct colour order for your display
|
||||
|
||||
// #define TFT_RGB_ORDER TFT_RGB // Colour order Red-Green-Blue
|
||||
// #define TFT_RGB_ORDER TFT_BGR // Colour order Blue-Green-Red
|
||||
|
||||
// For M5Stack ESP32 module with integrated ILI9341 display ONLY, remove // in line below
|
||||
|
||||
// #define M5STACK
|
||||
|
||||
// For ST7789, ST7735 and ILI9163 ONLY, define the pixel width and height in portrait orientation
|
||||
// #define TFT_WIDTH 80
|
||||
// #define TFT_WIDTH 128 // Marauder Mini
|
||||
#define TFT_WIDTH 320 // ST7789 240 x 240 and 240 x 320
|
||||
// #define TFT_HEIGHT 160
|
||||
// #define TFT_HEIGHT 128 // Marauder Mini
|
||||
// #define TFT_HEIGHT 240 // ST7789 240 x 240
|
||||
#define TFT_HEIGHT 480 // ST7789 240 x 320
|
||||
|
||||
// For ST7735 ONLY, define the type of display, originally this was based on the
|
||||
// colour of the tab on the screen protector film but this is not always true, so try
|
||||
// out the different options below if the screen does not display graphics correctly,
|
||||
// e.g. colours wrong, mirror images, or tray pixels at the edges.
|
||||
// Comment out ALL BUT ONE of these options for a ST7735 display driver, save this
|
||||
// this User_Setup file, then rebuild and upload the sketch to the board again:
|
||||
|
||||
// #define ST7735_INITB
|
||||
// #define ST7735_GREENTAB
|
||||
// #define ST7735_GREENTAB2
|
||||
// #define ST7735_GREENTAB3
|
||||
// #define ST7735_GREENTAB128 // For 128 x 128 display
|
||||
// #define ST7735_GREENTAB160x80 // For 160 x 80 display (BGR, inverted, 26 offset)
|
||||
// #define ST7735_REDTAB
|
||||
// #define ST7735_BLACKTAB
|
||||
// #define ST7735_REDTAB160x80 // For 160 x 80 display with 24 pixel offset
|
||||
|
||||
// If colours are inverted (white shows as black) then uncomment one of the next
|
||||
// 2 lines try both options, one of the options should correct the inversion.
|
||||
|
||||
// #define TFT_INVERSION_ON
|
||||
// #define TFT_INVERSION_OFF
|
||||
|
||||
// If a backlight control signal is available then define the TFT_BL pin in Section 2
|
||||
// below. The backlight will be turned ON when tft.begin() is called, but the library
|
||||
// needs to know if the LEDs are ON with the pin HIGH or LOW. If the LEDs are to be
|
||||
// driven with a PWM signal or turned OFF/ON then this must be handled by the user
|
||||
// sketch. e.g. with digitalWrite(TFT_BL, LOW);
|
||||
|
||||
// #define TFT_BACKLIGHT_ON LOW // HIGH or LOW are options
|
||||
|
||||
// ##################################################################################
|
||||
//
|
||||
// Section 2. Define the pins that are used to interface with the display here
|
||||
//
|
||||
// ##################################################################################
|
||||
|
||||
// We must use hardware SPI, a minimum of 3 GPIO pins is needed.
|
||||
// Typical setup for ESP8266 NodeMCU ESP-12 is :
|
||||
//
|
||||
// Display SDO/MISO to NodeMCU pin D6 (or leave disconnected if not reading TFT)
|
||||
// Display LED to NodeMCU pin VIN (or 5V, see below)
|
||||
// Display SCK to NodeMCU pin D5
|
||||
// Display SDI/MOSI to NodeMCU pin D7
|
||||
// Display DC (RS/AO)to NodeMCU pin D3
|
||||
// Display RESET to NodeMCU pin D4 (or RST, see below)
|
||||
// Display CS to NodeMCU pin D8 (or GND, see below)
|
||||
// Display GND to NodeMCU pin GND (0V)
|
||||
// Display VCC to NodeMCU 5V or 3.3V
|
||||
//
|
||||
// The TFT RESET pin can be connected to the NodeMCU RST pin or 3.3V to free up a control pin
|
||||
//
|
||||
// The DC (Data Command) pin may be labeled AO or RS (Register Select)
|
||||
//
|
||||
// With some displays such as the ILI9341 the TFT CS pin can be connected to GND if no more
|
||||
// SPI devices (e.g. an SD Card) are connected, in this case comment out the #define TFT_CS
|
||||
// line below so it is NOT defined. Other displays such at the ST7735 require the TFT CS pin
|
||||
// to be toggled during setup, so in these cases the TFT_CS line must be defined and connected.
|
||||
//
|
||||
// The NodeMCU D0 pin can be used for RST
|
||||
//
|
||||
//
|
||||
// Note: only some versions of the NodeMCU provide the USB 5V on the VIN pin
|
||||
// If 5V is not available at a pin you can use 3.3V but backlight brightness
|
||||
// will be lower.
|
||||
|
||||
|
||||
// ###### EDIT THE PIN NUMBERS IN THE LINES FOLLOWING TO SUIT YOUR ESP8266 SETUP ######
|
||||
|
||||
// For NodeMCU - use pin numbers in the form PIN_Dx where Dx is the NodeMCU pin designation
|
||||
//#define TFT_CS PIN_D8 // Chip select control pin D8
|
||||
//#define TFT_DC PIN_D3 // Data Command control pin
|
||||
//#define TFT_RST PIN_D4 // Reset pin (could connect to NodeMCU RST, see next line)
|
||||
//#define TFT_RST -1 // Set TFT_RST to -1 if the display RESET is connected to NodeMCU RST or 3.3V
|
||||
|
||||
//#define TFT_BL PIN_D1 // LED back-light (only for ST7789 with backlight control pin)
|
||||
|
||||
//#define TOUCH_CS PIN_D2 // Chip select pin (T_CS) of touch screen
|
||||
|
||||
//#define TFT_WR PIN_D2 // Write strobe for modified Raspberry Pi TFT only
|
||||
|
||||
|
||||
// ###### FOR ESP8266 OVERLAP MODE EDIT THE PIN NUMBERS IN THE FOLLOWING LINES ######
|
||||
|
||||
// Overlap mode shares the ESP8266 FLASH SPI bus with the TFT so has a performance impact
|
||||
// but saves pins for other functions. It is best not to connect MISO as some displays
|
||||
// do not tristate that line wjen chip select is high!
|
||||
// On NodeMCU 1.0 SD0=MISO, SD1=MOSI, CLK=SCLK to connect to TFT in overlap mode
|
||||
// On NodeMCU V3 S0 =MISO, S1 =MOSI, S2 =SCLK
|
||||
// In ESP8266 overlap mode the following must be defined
|
||||
|
||||
//#define TFT_SPI_OVERLAP
|
||||
|
||||
// In ESP8266 overlap mode the TFT chip select MUST connect to pin D3
|
||||
//#define TFT_CS PIN_D3
|
||||
//#define TFT_DC PIN_D5 // Data Command control pin
|
||||
//#define TFT_RST PIN_D4 // Reset pin (could connect to NodeMCU RST, see next line)
|
||||
//#define TFT_RST -1 // Set TFT_RST to -1 if the display RESET is connected to NodeMCU RST or 3.3V
|
||||
|
||||
|
||||
// ###### EDIT THE PIN NUMBERS IN THE LINES FOLLOWING TO SUIT YOUR ESP32 SETUP ######
|
||||
|
||||
// For ESP32 Dev board (only tested with ILI9341 display)
|
||||
// The hardware SPI can be mapped to any pins
|
||||
|
||||
// Marauder Mini
|
||||
/*
|
||||
#define TFT_CS 17 // Chip select control pin D8
|
||||
#define TFT_DC 16 // Data Command control pin
|
||||
#define TFT_RST 5 // Reset pin (could connect to NodeMCU RST, see next line)
|
||||
//#define TFT_MISO 19
|
||||
//#define TFT_MOSI 23
|
||||
//#define TFT_SCLK 18
|
||||
//#define TFT_BL 32
|
||||
*/
|
||||
|
||||
// ESP32 Marauder
|
||||
#define TFT_MISO 12
|
||||
#define TFT_MOSI 13
|
||||
#define TFT_SCLK 14
|
||||
#define TFT_CS 15 // Chip select control pin
|
||||
#define TFT_DC 2 // Data Command control pin
|
||||
#define TFT_RST -1 // Reset pin (could connect to RST pin)
|
||||
//#define TFT_RST -1 // Set TFT_RST to -1 if display RESET is connected to ESP32 board RST
|
||||
|
||||
#define TFT_BL 27 // LED back-light (only for ST7789 with backlight control pin)
|
||||
|
||||
#define TOUCH_CS 33 // Chip select pin (T_CS) of touch screen
|
||||
|
||||
|
||||
//#define TFT_WR 22 // Write strobe for modified Raspberry Pi TFT only
|
||||
|
||||
// For the M5Stack module use these #define lines
|
||||
//#define TFT_MISO 19
|
||||
//#define TFT_MOSI 23
|
||||
//#define TFT_SCLK 18
|
||||
//#define TFT_CS 14 // Chip select control pin
|
||||
//#define TFT_DC 27 // Data Command control pin
|
||||
//#define TFT_RST 33 // Reset pin (could connect to Arduino RESET pin)
|
||||
//#define TFT_BL 32 // LED back-light (required for M5Stack)
|
||||
|
||||
// ###### EDIT THE PINs BELOW TO SUIT YOUR ESP32 PARALLEL TFT SETUP ######
|
||||
|
||||
// The library supports 8 bit parallel TFTs with the ESP32, the pin
|
||||
// selection below is compatible with ESP32 boards in UNO format.
|
||||
// Wemos D32 boards need to be modified, see diagram in Tools folder.
|
||||
// Only ILI9481 and ILI9341 based displays have been tested!
|
||||
|
||||
// Parallel bus is only supported on ESP32
|
||||
// Uncomment line below to use ESP32 Parallel interface instead of SPI
|
||||
|
||||
//#define ESP32_PARALLEL
|
||||
|
||||
// The ESP32 and TFT the pins used for testing are:
|
||||
//#define TFT_CS 33 // Chip select control pin (library pulls permanently low
|
||||
//#define TFT_DC 15 // Data Command control pin - must use a pin in the range 0-31
|
||||
//#define TFT_RST 32 // Reset pin, toggles on startup
|
||||
|
||||
//#define TFT_WR 4 // Write strobe control pin - must use a pin in the range 0-31
|
||||
//#define TFT_RD 2 // Read strobe control pin
|
||||
|
||||
//#define TFT_D0 12 // Must use pins in the range 0-31 for the data bus
|
||||
//#define TFT_D1 13 // so a single register write sets/clears all bits.
|
||||
//#define TFT_D2 26 // Pins can be randomly assigned, this does not affect
|
||||
//#define TFT_D3 25 // TFT screen update performance.
|
||||
//#define TFT_D4 17
|
||||
//#define TFT_D5 16
|
||||
//#define TFT_D6 27
|
||||
//#define TFT_D7 14
|
||||
|
||||
|
||||
// ##################################################################################
|
||||
//
|
||||
// Section 3. Define the fonts that are to be used here
|
||||
//
|
||||
// ##################################################################################
|
||||
|
||||
// Comment out the #defines below with // to stop that font being loaded
|
||||
// The ESP8366 and ESP32 have plenty of memory so commenting out fonts is not
|
||||
// normally necessary. If all fonts are loaded the extra FLASH space required is
|
||||
// about 17Kbytes. To save FLASH space only enable the fonts you need!
|
||||
|
||||
#define LOAD_GLCD // Font 1. Original Adafruit 8 pixel font needs ~1820 bytes in FLASH
|
||||
#define LOAD_FONT2 // Font 2. Small 16 pixel high font, needs ~3534 bytes in FLASH, 96 characters
|
||||
#define LOAD_FONT4 // Font 4. Medium 26 pixel high font, needs ~5848 bytes in FLASH, 96 characters
|
||||
#define LOAD_FONT6 // Font 6. Large 48 pixel font, needs ~2666 bytes in FLASH, only characters 1234567890:-.apm
|
||||
#define LOAD_FONT7 // Font 7. 7 segment 48 pixel font, needs ~2438 bytes in FLASH, only characters 1234567890:-.
|
||||
#define LOAD_FONT8 // Font 8. Large 75 pixel font needs ~3256 bytes in FLASH, only characters 1234567890:-.
|
||||
//#define LOAD_FONT8N // Font 8. Alternative to Font 8 above, slightly narrower, so 3 digits fit a 160 pixel TFT
|
||||
#define LOAD_GFXFF // FreeFonts. Include access to the 48 Adafruit_GFX free fonts FF1 to FF48 and custom fonts
|
||||
|
||||
// Comment out the #define below to stop the SPIFFS filing system and smooth font code being loaded
|
||||
// this will save ~20kbytes of FLASH
|
||||
#define SMOOTH_FONT
|
||||
|
||||
|
||||
// ##################################################################################
|
||||
//
|
||||
// Section 4. Other options
|
||||
//
|
||||
// ##################################################################################
|
||||
|
||||
// Define the SPI clock frequency, this affects the graphics rendering speed. Too
|
||||
// fast and the TFT driver will not keep up and display corruption appears.
|
||||
// With an ILI9341 display 40MHz works OK, 80MHz sometimes fails
|
||||
// With a ST7735 display more than 27MHz may not work (spurious pixels and lines)
|
||||
// With an ILI9163 display 27 MHz works OK.
|
||||
|
||||
// #define SPI_FREQUENCY 1000000
|
||||
//#define SPI_FREQUENCY 5000000
|
||||
// #define SPI_FREQUENCY 10000000
|
||||
// #define SPI_FREQUENCY 20000000
|
||||
#define SPI_FREQUENCY 27000000 // Marauder // Actually sets it to 26.67MHz = 80/3
|
||||
// #define SPI_FREQUENCY 40000000
|
||||
// #define SPI_FREQUENCY 80000000
|
||||
|
||||
// Optional reduced SPI frequency for reading TFT
|
||||
#define SPI_READ_FREQUENCY 20000000
|
||||
|
||||
// The XPT2046 requires a lower SPI clock rate of 2.5MHz so we define that here:
|
||||
#define SPI_TOUCH_FREQUENCY 2500000
|
||||
|
||||
// The ESP32 has 2 free SPI ports i.e. VSPI and HSPI, the VSPI is the default.
|
||||
// If the VSPI port is in use and pins are not accessible (e.g. TTGO T-Beam)
|
||||
// then uncomment the following line:
|
||||
#define USE_HSPI_PORT
|
||||
|
||||
// Comment out the following #define if "SPI Transactions" do not need to be
|
||||
// supported. When commented out the code size will be smaller and sketches will
|
||||
// run slightly faster, so leave it commented out unless you need it!
|
||||
|
||||
// Transaction support is needed to work with SD library but not needed with TFT_SdFat
|
||||
// Transaction support is required if other SPI devices are connected.
|
||||
|
||||
// Transactions are automatically enabled by the library for an ESP32 (to use HAL mutex)
|
||||
// so changing it here has no effect
|
||||
|
||||
// #define SUPPORT_TRANSACTIONS
|
||||
316
User_Setup_cyd_guition.h
Normal file
@@ -0,0 +1,316 @@
|
||||
// USER DEFINED SETTINGS
|
||||
// Set driver type, fonts to be loaded, pins used and SPI control method etc
|
||||
//
|
||||
// See the User_Setup_Select.h file if you wish to be able to define multiple
|
||||
// setups and then easily select which setup file is used by the compiler.
|
||||
//
|
||||
// If this file is edited correctly then all the library example sketches should
|
||||
// run without the need to make any more changes for a particular hardware setup!
|
||||
// Note that some sketches are designed for a particular TFT pixel width/height
|
||||
|
||||
|
||||
// ##################################################################################
|
||||
//
|
||||
// Section 1. Call up the right driver file and any options for it
|
||||
//
|
||||
// ##################################################################################
|
||||
|
||||
// Display type - only define if RPi display
|
||||
//#define RPI_DRIVER
|
||||
|
||||
// Only define one driver, the other ones must be commented out
|
||||
#define ILI9341_DRIVER // OG Marauder
|
||||
//#define ST7735_DRIVER // Marauder Mini // Define additional parameters below for this display
|
||||
//#define ILI9163_DRIVER // Define additional parameters below for this display
|
||||
//#define S6D02A1_DRIVER
|
||||
//#define RPI_ILI9486_DRIVER // 20MHz maximum SPI
|
||||
//#define HX8357D_DRIVER
|
||||
//#define ILI9481_DRIVER
|
||||
//#define ILI9486_DRIVER
|
||||
//#define ILI9488_DRIVER // WARNING: Do not connect ILI9488 display SDO to MISO if other devices share the SPI bus (TFT SDO does NOT tristate when CS is high)
|
||||
//#define ST7789_DRIVER // Full configuration option, define additional parameters below for this display
|
||||
//#define ST7789_2_DRIVER // Minimal configuration option, define additional parameters below for this display
|
||||
//#define R61581_DRIVER
|
||||
//#define RM68140_DRIVER
|
||||
//#define ST7796_DRIVER
|
||||
|
||||
// Some displays support SPI reads via the MISO pin, other displays have a single
|
||||
// bi-directional SDA pin and the library will try to read this via the MOSI line.
|
||||
// To use the SDA line for reading data from the TFT uncomment the following line:
|
||||
|
||||
// #define TFT_SDA_READ // This option is for ESP32 ONLY, tested with ST7789 display only
|
||||
|
||||
// For ST7789 and ILI9341 ONLY, define the colour order IF the blue and red are swapped on your display
|
||||
// Try ONE option at a time to find the correct colour order for your display
|
||||
|
||||
// #define TFT_RGB_ORDER TFT_RGB // Colour order Red-Green-Blue
|
||||
// #define TFT_RGB_ORDER TFT_BGR // Colour order Blue-Green-Red
|
||||
|
||||
// For M5Stack ESP32 module with integrated ILI9341 display ONLY, remove // in line below
|
||||
|
||||
// #define M5STACK
|
||||
|
||||
// For ST7789, ST7735 and ILI9163 ONLY, define the pixel width and height in portrait orientation
|
||||
// #define TFT_WIDTH 80
|
||||
// #define TFT_WIDTH 128 // Marauder Mini
|
||||
#define TFT_WIDTH 240 // ST7789 240 x 240 and 240 x 320
|
||||
// #define TFT_HEIGHT 160
|
||||
// #define TFT_HEIGHT 128 // Marauder Mini
|
||||
// #define TFT_HEIGHT 240 // ST7789 240 x 240
|
||||
#define TFT_HEIGHT 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 17 // Chip select control pin D8
|
||||
#define TFT_DC 16 // Data Command control pin
|
||||
#define TFT_RST 5 // Reset pin (could connect to NodeMCU RST, see next line)
|
||||
//#define TFT_MISO 19
|
||||
//#define TFT_MOSI 23
|
||||
//#define TFT_SCLK 18
|
||||
//#define TFT_BL 32
|
||||
*/
|
||||
|
||||
// ESP32 Marauder
|
||||
#define TFT_MISO 12
|
||||
#define TFT_MOSI 13
|
||||
#define TFT_SCLK 14
|
||||
#define TFT_CS 15 // Chip select control pin
|
||||
#define TFT_DC 2 // Data Command control pin
|
||||
#define TFT_RST -1 // Reset pin (could connect to RST pin)
|
||||
//#define TFT_RST -1 // Set TFT_RST to -1 if display RESET is connected to ESP32 board RST
|
||||
|
||||
#define TFT_BL 27 // LED back-light (only for ST7789 with backlight control pin)
|
||||
|
||||
#define TOUCH_CS 33 // Chip select pin (T_CS) of touch screen
|
||||
|
||||
/////////////////////////////
|
||||
|
||||
// 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
|
||||
316
User_Setup_cyd_micro.h
Normal file
@@ -0,0 +1,316 @@
|
||||
// USER DEFINED SETTINGS
|
||||
// Set driver type, fonts to be loaded, pins used and SPI control method etc
|
||||
//
|
||||
// See the User_Setup_Select.h file if you wish to be able to define multiple
|
||||
// setups and then easily select which setup file is used by the compiler.
|
||||
//
|
||||
// If this file is edited correctly then all the library example sketches should
|
||||
// run without the need to make any more changes for a particular hardware setup!
|
||||
// Note that some sketches are designed for a particular TFT pixel width/height
|
||||
|
||||
|
||||
// ##################################################################################
|
||||
//
|
||||
// Section 1. Call up the right driver file and any options for it
|
||||
//
|
||||
// ##################################################################################
|
||||
|
||||
// Display type - only define if RPi display
|
||||
//#define RPI_DRIVER
|
||||
|
||||
// Only define one driver, the other ones must be commented out
|
||||
#define ILI9341_DRIVER // OG Marauder
|
||||
//#define ST7735_DRIVER // Marauder Mini // Define additional parameters below for this display
|
||||
//#define ILI9163_DRIVER // Define additional parameters below for this display
|
||||
//#define S6D02A1_DRIVER
|
||||
//#define RPI_ILI9486_DRIVER // 20MHz maximum SPI
|
||||
//#define HX8357D_DRIVER
|
||||
//#define ILI9481_DRIVER
|
||||
//#define ILI9486_DRIVER
|
||||
//#define ILI9488_DRIVER // WARNING: Do not connect ILI9488 display SDO to MISO if other devices share the SPI bus (TFT SDO does NOT tristate when CS is high)
|
||||
//#define ST7789_DRIVER // Full configuration option, define additional parameters below for this display
|
||||
//#define ST7789_2_DRIVER // Minimal configuration option, define additional parameters below for this display
|
||||
//#define R61581_DRIVER
|
||||
//#define RM68140_DRIVER
|
||||
//#define ST7796_DRIVER
|
||||
|
||||
// Some displays support SPI reads via the MISO pin, other displays have a single
|
||||
// bi-directional SDA pin and the library will try to read this via the MOSI line.
|
||||
// To use the SDA line for reading data from the TFT uncomment the following line:
|
||||
|
||||
// #define TFT_SDA_READ // This option is for ESP32 ONLY, tested with ST7789 display only
|
||||
|
||||
// For ST7789 and ILI9341 ONLY, define the colour order IF the blue and red are swapped on your display
|
||||
// Try ONE option at a time to find the correct colour order for your display
|
||||
|
||||
// #define TFT_RGB_ORDER TFT_RGB // Colour order Red-Green-Blue
|
||||
// #define TFT_RGB_ORDER TFT_BGR // Colour order Blue-Green-Red
|
||||
|
||||
// For M5Stack ESP32 module with integrated ILI9341 display ONLY, remove // in line below
|
||||
|
||||
// #define M5STACK
|
||||
|
||||
// For ST7789, ST7735 and ILI9163 ONLY, define the pixel width and height in portrait orientation
|
||||
// #define TFT_WIDTH 80
|
||||
// #define TFT_WIDTH 128 // Marauder Mini
|
||||
#define TFT_WIDTH 240 // ST7789 240 x 240 and 240 x 320
|
||||
// #define TFT_HEIGHT 160
|
||||
// #define TFT_HEIGHT 128 // Marauder Mini
|
||||
// #define TFT_HEIGHT 240 // ST7789 240 x 240
|
||||
#define TFT_HEIGHT 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 17 // Chip select control pin D8
|
||||
#define TFT_DC 16 // Data Command control pin
|
||||
#define TFT_RST 5 // Reset pin (could connect to NodeMCU RST, see next line)
|
||||
//#define TFT_MISO 19
|
||||
//#define TFT_MOSI 23
|
||||
//#define TFT_SCLK 18
|
||||
//#define TFT_BL 32
|
||||
*/
|
||||
|
||||
// ESP32 Marauder
|
||||
#define TFT_MISO 12
|
||||
#define TFT_MOSI 13
|
||||
#define TFT_SCLK 14
|
||||
#define TFT_CS 15 // Chip select control pin
|
||||
#define TFT_DC 2 // Data Command control pin
|
||||
#define TFT_RST -1 // Reset pin (could connect to RST pin)
|
||||
//#define TFT_RST -1 // Set TFT_RST to -1 if display RESET is connected to ESP32 board RST
|
||||
|
||||
#define TFT_BL 21 // LED back-light (only for ST7789 with backlight control pin)
|
||||
|
||||
#define TOUCH_CS 33 // 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
|
||||
315
User_Setup_dual_nrf24.h
Normal file
@@ -0,0 +1,315 @@
|
||||
// USER DEFINED SETTINGS
|
||||
// Set driver type, fonts to be loaded, pins used and SPI control method etc
|
||||
//
|
||||
// See the User_Setup_Select.h file if you wish to be able to define multiple
|
||||
// setups and then easily select which setup file is used by the compiler.
|
||||
//
|
||||
// If this file is edited correctly then all the library example sketches should
|
||||
// run without the need to make any more changes for a particular hardware setup!
|
||||
// Note that some sketches are designed for a particular TFT pixel width/height
|
||||
|
||||
|
||||
// ##################################################################################
|
||||
//
|
||||
// Section 1. Call up the right driver file and any options for it
|
||||
//
|
||||
// ##################################################################################
|
||||
|
||||
// Display type - only define if RPi display
|
||||
//#define RPI_DRIVER
|
||||
|
||||
// Only define one driver, the other ones must be commented out
|
||||
#define ILI9341_DRIVER // OG Marauder
|
||||
//#define ST7735_DRIVER // Marauder Mini // Define additional parameters below for this display
|
||||
//#define ILI9163_DRIVER // Define additional parameters below for this display
|
||||
//#define S6D02A1_DRIVER
|
||||
//#define RPI_ILI9486_DRIVER // 20MHz maximum SPI
|
||||
//#define HX8357D_DRIVER
|
||||
//#define ILI9481_DRIVER
|
||||
//#define ILI9486_DRIVER
|
||||
//#define ILI9488_DRIVER // WARNING: Do not connect ILI9488 display SDO to MISO if other devices share the SPI bus (TFT SDO does NOT tristate when CS is high)
|
||||
//#define ST7789_DRIVER // Full configuration option, define additional parameters below for this display
|
||||
//#define ST7789_2_DRIVER // Minimal configuration option, define additional parameters below for this display
|
||||
//#define R61581_DRIVER
|
||||
//#define RM68140_DRIVER
|
||||
//#define ST7796_DRIVER
|
||||
|
||||
// Some displays support SPI reads via the MISO pin, other displays have a single
|
||||
// bi-directional SDA pin and the library will try to read this via the MOSI line.
|
||||
// To use the SDA line for reading data from the TFT uncomment the following line:
|
||||
|
||||
// #define TFT_SDA_READ // This option is for ESP32 ONLY, tested with ST7789 display only
|
||||
|
||||
// For ST7789 and ILI9341 ONLY, define the colour order IF the blue and red are swapped on your display
|
||||
// Try ONE option at a time to find the correct colour order for your display
|
||||
|
||||
// #define TFT_RGB_ORDER TFT_RGB // Colour order Red-Green-Blue
|
||||
// #define TFT_RGB_ORDER TFT_BGR // Colour order Blue-Green-Red
|
||||
|
||||
// For M5Stack ESP32 module with integrated ILI9341 display ONLY, remove // in line below
|
||||
|
||||
// #define M5STACK
|
||||
|
||||
// For ST7789, ST7735 and ILI9163 ONLY, define the pixel width and height in portrait orientation
|
||||
// #define TFT_WIDTH 80
|
||||
// #define TFT_WIDTH 128 // Marauder Mini
|
||||
// #define TFT_WIDTH 240 // ST7789 240 x 240 and 240 x 320
|
||||
// #define TFT_HEIGHT 160
|
||||
// #define TFT_HEIGHT 128 // Marauder Mini
|
||||
// #define TFT_HEIGHT 240 // ST7789 240 x 240
|
||||
// #define TFT_HEIGHT 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 17 // Chip select control pin D8
|
||||
#define TFT_DC 16 // Data Command control pin
|
||||
#define TFT_RST 5 // Reset pin (could connect to NodeMCU RST, see next line)
|
||||
//#define TFT_MISO 19
|
||||
//#define TFT_MOSI 23
|
||||
//#define TFT_SCLK 18
|
||||
//#define TFT_BL 32
|
||||
*/
|
||||
|
||||
// ESP32 Marauder
|
||||
#define TFT_CS 17 // Chip select control pin D8
|
||||
#define TFT_DC 26 // Data Command control pin
|
||||
#define TFT_RST -1 // Reset pin (could connect to NodeMCU RST, see next line)
|
||||
#define TOUCH_CS -1
|
||||
//#define TFT_MISO 16
|
||||
#define TFT_MOSI 23
|
||||
#define TFT_SCLK 18
|
||||
#define TFT_BL 32
|
||||
|
||||
//#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
|
||||
328
User_Setup_marauder_m5cardputer.h
Normal file
@@ -0,0 +1,328 @@
|
||||
// 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 HIGH // 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
|
||||
|
||||
// M5 Cardputer
|
||||
#define TFT_BL 38
|
||||
#define TFT_RST 33 // Reset pin (could connect to NodeMCU RST, see next line)
|
||||
#define TFT_DC 34 // Data Command control pin
|
||||
#define TFT_MOSI 35
|
||||
#define TFT_SCLK 36
|
||||
#define TFT_CS 37 // Chip select control pin D8
|
||||
#define TOUCH_CS -1
|
||||
// #define TFT_MISO -1
|
||||
|
||||
// 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
|
||||
|
||||
/*
|
||||
// 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
|
||||
391
User_Setup_marauder_m5stickcp2.h
Normal file
@@ -0,0 +1,391 @@
|
||||
// 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
|
||||
|
||||
// User defined information reported by "Read_User_Setup" test & diagnostics example
|
||||
#define USER_SETUP_INFO "User_Setup"
|
||||
|
||||
// Define to disable all #warnings in library (can be put in User_Setup_Select.h)
|
||||
//#define DISABLE_ALL_LIBRARY_WARNINGS
|
||||
|
||||
#define CGRAM_OFFSET
|
||||
|
||||
// ##################################################################################
|
||||
//
|
||||
// Section 1. Call up the right driver file and any options for it
|
||||
//
|
||||
// ##################################################################################
|
||||
|
||||
// Define STM32 to invoke optimised processor support (only for STM32)
|
||||
//#define STM32
|
||||
|
||||
// Defining the STM32 board allows the library to optimise the performance
|
||||
// for UNO compatible "MCUfriend" style shields
|
||||
//#define NUCLEO_64_TFT
|
||||
//#define NUCLEO_144_TFT
|
||||
|
||||
// STM32 8 bit parallel only:
|
||||
// If STN32 Port A or B pins 0-7 are used for 8 bit parallel data bus bits 0-7
|
||||
// then this will improve rendering performance by a factor of ~8x
|
||||
//#define STM_PORTA_DATA_BUS
|
||||
//#define STM_PORTB_DATA_BUS
|
||||
|
||||
// Tell the library to use parallel mode (otherwise SPI is assumed)
|
||||
//#define TFT_PARALLEL_8_BIT
|
||||
//#defined TFT_PARALLEL_16_BIT // **** 16 bit parallel ONLY for RP2040 processor ****
|
||||
|
||||
// Display type - only define if RPi display
|
||||
//#define RPI_DISPLAY_TYPE // 20MHz maximum SPI
|
||||
|
||||
// Only define one driver, the other ones must be commented out
|
||||
//#define ILI9341_DRIVER // Generic driver for common displays
|
||||
//#define ILI9341_2_DRIVER // Alternative ILI9341 driver, see https://github.com/Bodmer/TFT_eSPI/issues/1172
|
||||
//#define ST7735_DRIVER // 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
|
||||
//#define SSD1351_DRIVER
|
||||
//#define SSD1963_480_DRIVER
|
||||
//#define SSD1963_800_DRIVER
|
||||
//#define SSD1963_800ALT_DRIVER
|
||||
//#define ILI9225_DRIVER
|
||||
//#define GC9A01_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 and GC9A01 display only
|
||||
|
||||
// For ST7735, 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, ILI9163 and GC9A01 ONLY, define the pixel width and height in portrait orientation
|
||||
// #define TFT_WIDTH 80
|
||||
#define TFT_WIDTH 135
|
||||
// #define TFT_WIDTH 172 // ST7789 172 x 320
|
||||
// #define TFT_WIDTH 170 // ST7789 170 x 320
|
||||
// #define TFT_WIDTH 240 // ST7789 240 x 240 and 240 x 320
|
||||
// #define TFT_HEIGHT 160
|
||||
// #define TFT_HEIGHT 128
|
||||
#define TFT_HEIGHT 240 // ST7789 240 x 240
|
||||
// #define TFT_HEIGHT 320 // ST7789 240 x 320
|
||||
// #define TFT_HEIGHT 240 // GC9A01 240 x 240
|
||||
|
||||
// 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 stray 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_ROBOTLCD // For some RobotLCD arduino shields (128x160, BGR, https://docs.arduino.cc/retired/getting-started-guides/TFT)
|
||||
// #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
|
||||
|
||||
|
||||
// ##################################################################################
|
||||
//
|
||||
// Section 2. Define the pins that are used to interface with the display here
|
||||
//
|
||||
// ##################################################################################
|
||||
|
||||
// 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_BL 32 // LED back-light control pin
|
||||
// #define TFT_BACKLIGHT_ON HIGH // Level to turn ON back-light (HIGH or LOW)
|
||||
|
||||
|
||||
|
||||
// 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 labelled 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_MISO PIN_D6 // Automatically assigned with ESP8266 if not defined
|
||||
//#define TFT_MOSI PIN_D7 // Automatically assigned with ESP8266 if not defined
|
||||
//#define TFT_SCLK PIN_D5 // Automatically assigned with ESP8266 if not defined
|
||||
|
||||
//#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 when chip select is high!
|
||||
// Note: Only one SPI device can share the FLASH SPI lines, so a SPI touch controller
|
||||
// cannot be connected as well to the same SPI signals.
|
||||
// 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
|
||||
|
||||
//#define TFT_MISO 19
|
||||
//#define TFT_MOSI 23
|
||||
//#define TFT_SCLK 18
|
||||
//#define TFT_CS 15 // Chip select control pin
|
||||
//#define TFT_DC 2 // Data Command control pin
|
||||
//#define TFT_RST 4 // 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
|
||||
|
||||
// For ESP32 Dev board (only tested with GC9A01 display)
|
||||
// The hardware SPI can be mapped to any pins
|
||||
|
||||
//#define TFT_MOSI 15 // In some display driver board, it might be written as "SDA" and so on.
|
||||
//#define TFT_SCLK 14
|
||||
//#define TFT_CS 5 // 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 22 // LED back-light
|
||||
|
||||
#define TOUCH_CS -1 // 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 15
|
||||
#define TFT_SCLK 13
|
||||
#define TFT_CS 5 // Chip select control pin
|
||||
#define TFT_DC 14 // Data Command control pin
|
||||
#define TFT_RST 12 // Reset pin (could connect to Arduino RESET pin)
|
||||
#define TFT_BL 27 // 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 for the STM32 and ESP32
|
||||
// Example below is for ESP32 Parallel interface with UNO displays
|
||||
|
||||
// Tell the library to use 8 bit parallel mode (otherwise SPI is assumed)
|
||||
//#define TFT_PARALLEL_8_BIT
|
||||
|
||||
// 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
|
||||
|
||||
// ###### EDIT THE PINs BELOW TO SUIT YOUR STM32 SPI TFT SETUP ######
|
||||
|
||||
// The TFT can be connected to SPI port 1 or 2
|
||||
//#define TFT_SPI_PORT 1 // SPI port 1 maximum clock rate is 55MHz
|
||||
//#define TFT_MOSI PA7
|
||||
//#define TFT_MISO PA6
|
||||
//#define TFT_SCLK PA5
|
||||
|
||||
//#define TFT_SPI_PORT 2 // SPI port 2 maximum clock rate is 27MHz
|
||||
//#define TFT_MOSI PB15
|
||||
//#define TFT_MISO PB14
|
||||
//#define TFT_SCLK PB13
|
||||
|
||||
// Can use Ardiuno pin references, arbitrary allocation, TFT_eSPI controls chip select
|
||||
//#define TFT_CS D5 // Chip select control pin to TFT CS
|
||||
//#define TFT_DC D6 // Data Command control pin to TFT DC (may be labelled RS = Register Select)
|
||||
//#define TFT_RST D7 // Reset pin to TFT RST (or RESET)
|
||||
// OR alternatively, we can use STM32 port reference names PXnn
|
||||
//#define TFT_CS PE11 // Nucleo-F767ZI equivalent of D5
|
||||
//#define TFT_DC PE9 // Nucleo-F767ZI equivalent of D6
|
||||
//#define TFT_RST PF13 // Nucleo-F767ZI equivalent of D7
|
||||
|
||||
//#define TFT_RST -1 // Set TFT_RST to -1 if the display RESET is connected to processor reset
|
||||
// Use an Arduino pin for initial testing as connecting to processor reset
|
||||
// may not work (pulse too short at power up?)
|
||||
|
||||
// ##################################################################################
|
||||
//
|
||||
// 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
|
||||
//
|
||||
// ##################################################################################
|
||||
|
||||
// For RP2040 processor and SPI displays, uncomment the following line to use the PIO interface.
|
||||
//#define RP2040_PIO_SPI // Leave commented out to use standard RP2040 SPI port interface
|
||||
|
||||
// For RP2040 processor and 8 or 16 bit parallel displays:
|
||||
// The parallel interface write cycle period is derived from a division of the CPU clock
|
||||
// speed so scales with the processor clock. This means that the divider ratio may need
|
||||
// to be increased when overclocking. It may also need to be adjusted dependant on the
|
||||
// display controller type (ILI94341, HX8357C etc). If RP2040_PIO_CLK_DIV is not defined
|
||||
// the library will set default values which may not suit your display.
|
||||
// The display controller data sheet will specify the minimum write cycle period. The
|
||||
// controllers often work reliably for shorter periods, however if the period is too short
|
||||
// the display may not initialise or graphics will become corrupted.
|
||||
// PIO write cycle frequency = (CPU clock/(4 * RP2040_PIO_CLK_DIV))
|
||||
//#define RP2040_PIO_CLK_DIV 1 // 32ns write cycle at 125MHz CPU clock
|
||||
//#define RP2040_PIO_CLK_DIV 2 // 64ns write cycle at 125MHz CPU clock
|
||||
//#define RP2040_PIO_CLK_DIV 3 // 96ns write cycle at 125MHz CPU clock
|
||||
|
||||
// For the RP2040 processor define the SPI port channel used (default 0 if undefined)
|
||||
//#define TFT_SPI_PORT 1 // Set to 0 if SPI0 pins are used, or 1 if spi1 pins used
|
||||
|
||||
// For the STM32 processor define the SPI port channel used (default 1 if undefined)
|
||||
//#define TFT_SPI_PORT 2 // Set to 1 for SPI port 1, or 2 for SPI port 2
|
||||
|
||||
// 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
|
||||
#define SPI_FREQUENCY 40000000
|
||||
// #define SPI_FREQUENCY 55000000 // STM32 SPI1 only (SPI2 maximum is 27MHz)
|
||||
// #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
|
||||
330
User_Setup_pocket_sdr_3.h
Normal file
@@ -0,0 +1,330 @@
|
||||
// USER DEFINED SETTINGS
|
||||
// Set driver type, fonts to be loaded, pins used and SPI control method etc
|
||||
//
|
||||
// See the User_Setup_Select.h file if you wish to be able to define multiple
|
||||
// setups and then easily select which setup file is used by the compiler.
|
||||
//
|
||||
// If this file is edited correctly then all the library example sketches should
|
||||
// run without the need to make any more changes for a particular hardware setup!
|
||||
// Note that some sketches are designed for a particular TFT pixel width/height
|
||||
|
||||
|
||||
// ##################################################################################
|
||||
//
|
||||
// Section 1. Call up the right driver file and any options for it
|
||||
//
|
||||
// ##################################################################################
|
||||
|
||||
// Display type - only define if RPi display
|
||||
//#define RPI_DRIVER
|
||||
|
||||
// Only define one driver, the other ones must be commented out
|
||||
//#define ILI9341_DRIVER // OG Marauder
|
||||
#define ST7735_DRIVER // Marauder Mini // Define additional parameters below for this display
|
||||
//#define ILI9163_DRIVER // Define additional parameters below for this display
|
||||
//#define S6D02A1_DRIVER
|
||||
//#define RPI_ILI9486_DRIVER // 20MHz maximum SPI
|
||||
//#define HX8357D_DRIVER
|
||||
//#define ILI9481_DRIVER
|
||||
//#define ILI9486_DRIVER
|
||||
//#define ILI9488_DRIVER // WARNING: Do not connect ILI9488 display SDO to MISO if other devices share the SPI bus (TFT SDO does NOT tristate when CS is high)
|
||||
//#define ST7789_DRIVER // Full configuration option, define additional parameters below for this display
|
||||
//#define ST7789_2_DRIVER // Minimal configuration option, define additional parameters below for this display
|
||||
//#define R61581_DRIVER
|
||||
//#define RM68140_DRIVER
|
||||
//#define ST7796_DRIVER
|
||||
|
||||
// Some displays support SPI reads via the MISO pin, other displays have a single
|
||||
// bi-directional SDA pin and the library will try to read this via the MOSI line.
|
||||
// To use the SDA line for reading data from the TFT uncomment the following line:
|
||||
|
||||
// #define TFT_SDA_READ // This option is for ESP32 ONLY, tested with ST7789 display only
|
||||
|
||||
// For ST7789 and ILI9341 ONLY, define the colour order IF the blue and red are swapped on your display
|
||||
// Try ONE option at a time to find the correct colour order for your display
|
||||
|
||||
// #define TFT_RGB_ORDER TFT_RGB // Colour order Red-Green-Blue
|
||||
#define TFT_RGB_ORDER TFT_BGR // Colour order Blue-Green-Red
|
||||
|
||||
// For M5Stack ESP32 module with integrated ILI9341 display ONLY, remove // in line below
|
||||
|
||||
// #define M5STACK
|
||||
|
||||
// For ST7789, ST7735 and ILI9163 ONLY, define the pixel width and height in portrait orientation
|
||||
#define TFT_WIDTH 80
|
||||
// #define TFT_WIDTH 128 // Marauder Mini
|
||||
// #define TFT_WIDTH 240 // ST7789 240 x 240 and 240 x 320
|
||||
#define TFT_HEIGHT 160
|
||||
// #define TFT_HEIGHT 128 // Marauder Mini
|
||||
// #define TFT_HEIGHT 240 // ST7789 240 x 240
|
||||
// #define TFT_HEIGHT 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
|
||||
// Drone Detector v1
|
||||
|
||||
#define TFT_CS 23 // Chip select control pin D8
|
||||
#define TFT_DC 24 // Data Command control pin
|
||||
#define TFT_RST -1 // Reset pin (could connect to NodeMCU RST, see next line)
|
||||
#define TOUCH_CS -1
|
||||
//#define TFT_MISO 16
|
||||
#define TFT_MOSI 7
|
||||
#define TFT_SCLK 6
|
||||
#define TFT_BL 27
|
||||
|
||||
|
||||
// Drone Detector v2
|
||||
/*
|
||||
#define TFT_CS 17 // Chip select control pin D8
|
||||
#define TFT_DC 26 // Data Command control pin
|
||||
#define TFT_RST -1 // Reset pin (could connect to NodeMCU RST, see next line)
|
||||
#define TOUCH_CS -1
|
||||
//#define TFT_MISO 16
|
||||
#define TFT_MOSI 23
|
||||
#define TFT_SCLK 18
|
||||
#define TFT_BL 32
|
||||
*/
|
||||
/*
|
||||
// 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
|
||||
@@ -203,7 +203,37 @@ PROGMEM static const unsigned char menu_icons[][66] = {
|
||||
0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0x3F},
|
||||
{0xFF, 0xFF, 0xFD, 0xBF, 0x0B, 0xD0, 0xE7, 0xE7, 0xEF, 0xF7, 0xCF, 0xF3, // DISABLED TOUCH: 34
|
||||
0xAF, 0xF5, 0x6F, 0xF6, 0x6F, 0xF6, 0xAF, 0xF5, 0xCF, 0xF3, 0x0F, 0xF0,
|
||||
0xE7, 0xE7, 0x0B, 0xD0, 0xFD, 0xBF, 0xFF, 0xFF}
|
||||
0xE7, 0xE7, 0x0B, 0xD0, 0xFD, 0xBF, 0xFF, 0xFF},
|
||||
{0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0x3F, 0x0F, 0xFE, 0x3F, 0xF3, 0xF9, 0x3F, // FLIPPER: 35
|
||||
0x8D, 0xF7, 0x3F, 0x7D, 0xEE, 0x3F, 0xC6, 0x2D, 0x38, 0xBB, 0x9D, 0x3B,
|
||||
0xBB, 0x63, 0x38, 0x87, 0x3C, 0x3E, 0xFB, 0x0F, 0x3F, 0xFF, 0x81, 0x3F,
|
||||
0xFF, 0x3F, 0x38, 0xFF, 0xFF, 0x3C, 0xFF, 0x07, 0x3E, 0xFF, 0xEB, 0x3F,
|
||||
0xFF, 0xEF, 0x3F, 0xFF, 0xEF, 0x3F, 0xFF, 0xDF, 0x3F, 0xFF, 0xFF, 0x3F,
|
||||
0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0x3F},
|
||||
{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // BLANK: 36
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
|
||||
{0xFF, 0xFF, 0x3F, 0xFF, 0xF7, 0x3F, 0x7F, 0x96, 0x3F, 0xFF, 0xED, 0x3F, // PINESCAN_SNIFF: 37
|
||||
0x3F, 0x25, 0x3F, 0xDF, 0xD2, 0x3E, 0xFF, 0xED, 0x3F, 0x7F, 0x8E, 0x3F,
|
||||
0x3B, 0x77, 0x37, 0xBD, 0x6A, 0x2F, 0xD6, 0xBD, 0x1A, 0xDA, 0xDA, 0x16,
|
||||
0x5A, 0x6F, 0x16, 0x9A, 0xF7, 0x16, 0xD6, 0x5A, 0x1A, 0xDD, 0xBD, 0x2E,
|
||||
0xBB, 0x5A, 0x37, 0x3F, 0x6F, 0x3F, 0x7F, 0xB7, 0x3F, 0xFF, 0xCC, 0x3F,
|
||||
0xFF, 0xF3, 0x3F, 0xFF, 0xFF, 0x3F},
|
||||
{0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xFC, 0xFF, 0xF3, 0x87, 0xF7, // JOINED: 38
|
||||
0x7F, 0xEE, 0xFF, 0xED, 0xC7, 0xDD, 0xBF, 0xDB, 0x7F, 0xDB, 0x67, 0xDB,
|
||||
0x67, 0xDB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
|
||||
{0xFF, 0xFF, 0x1F, 0xF8, 0x0F, 0xF0, 0x07, 0xE0, 0x07, 0xE0, 0x07, 0xE0, // FORCE: 39
|
||||
0x67, 0xE6, 0x77, 0xEE, 0x87, 0xE0, 0x8F, 0xF1, 0x0F, 0xF0, 0x4F, 0xF5,
|
||||
0x1F, 0xF8, 0x3F, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF},
|
||||
{0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0x3F, 0xFF, 0xC0, 0x3F, 0x3F, 0x3F, 0x3F, // FUNNY BEACON: 40
|
||||
0xDF, 0xFF, 0x3E, 0xEF, 0xFF, 0x3D, 0x77, 0xBF, 0x3B, 0x77, 0x3E, 0x3B,
|
||||
0x7B, 0x3E, 0x37, 0x7B, 0xBF, 0x37, 0xFB, 0xF7, 0x37, 0xFB, 0xF7, 0x37,
|
||||
0xFB, 0xF3, 0x37, 0xBB, 0x7F, 0x37, 0x37, 0x3F, 0x3B, 0x77, 0x80, 0x3B,
|
||||
0xEF, 0xE1, 0x3D, 0xDF, 0xFF, 0x3E, 0x3F, 0x3F, 0x3F, 0xFF, 0xC0, 0x3F,
|
||||
0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0x3F}
|
||||
};
|
||||
|
||||
/*#ifndef MARAUDER_MINI
|
||||
|
||||
@@ -14,30 +14,94 @@ void BatteryInterface::main(uint32_t currentTime) {
|
||||
if (this->battery_level != new_level) {
|
||||
Serial.println(text00 + (String)new_level);
|
||||
this->battery_level = new_level;
|
||||
Serial.println("Battery Level: " + (String)this->battery_level);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void BatteryInterface::RunSetup() {
|
||||
Wire.begin(I2C_SDA, I2C_SCL);
|
||||
this->initTime = millis();
|
||||
byte error;
|
||||
byte addr;
|
||||
|
||||
#ifdef HAS_BATTERY
|
||||
|
||||
Serial.println("Checking for battery monitors...");
|
||||
|
||||
#ifndef HAS_AXP2101
|
||||
Wire.begin(I2C_SDA, I2C_SCL);
|
||||
|
||||
Wire.beginTransmission(IP5306_ADDR);
|
||||
error = Wire.endTransmission();
|
||||
|
||||
if (error == 0) {
|
||||
Serial.println("Detected IP5306");
|
||||
this->has_ip5306 = true;
|
||||
this->i2c_supported = true;
|
||||
}
|
||||
|
||||
Wire.beginTransmission(MAX17048_ADDR);
|
||||
error = Wire.endTransmission();
|
||||
|
||||
if (error == 0) {
|
||||
if (maxlipo.begin()) {
|
||||
Serial.println("Detected MAX17048");
|
||||
this->has_max17048 = true;
|
||||
this->i2c_supported = true;
|
||||
}
|
||||
}
|
||||
#else
|
||||
bool result = this->power.begin(Wire, AXP2101_SLAVE_ADDRESS, I2C_SDA, I2C_SCL);
|
||||
|
||||
if (!result)
|
||||
return;
|
||||
|
||||
Serial.println("Detected AXP2101");
|
||||
|
||||
this->i2c_supported = true;
|
||||
this->has_axp2101 = true;
|
||||
#endif
|
||||
|
||||
this->initTime = millis();
|
||||
#endif
|
||||
}
|
||||
|
||||
int8_t BatteryInterface::getBatteryLevel() {
|
||||
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;
|
||||
|
||||
if (this->has_ip5306) {
|
||||
Wire.beginTransmission(IP5306_ADDR);
|
||||
Wire.write(0x78);
|
||||
if (Wire.endTransmission(false) == 0 &&
|
||||
Wire.requestFrom(IP5306_ADDR, 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;
|
||||
}
|
||||
this->i2c_supported = false;
|
||||
return -1;
|
||||
|
||||
|
||||
if (this->has_max17048) {
|
||||
float percent = this->maxlipo.cellPercent();
|
||||
|
||||
// Sometimes we dumb
|
||||
if (percent >= 100)
|
||||
return 100;
|
||||
else if (percent <= 0)
|
||||
return 0;
|
||||
else
|
||||
return percent;
|
||||
}
|
||||
|
||||
#ifdef HAS_AXP2101
|
||||
if (this->has_axp2101) {
|
||||
return this->power.getBatteryPercent();
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -6,21 +6,34 @@
|
||||
#include <Arduino.h>
|
||||
|
||||
#include "configs.h"
|
||||
#include "Adafruit_MAX1704X.h"
|
||||
|
||||
#ifdef HAS_AXP2101
|
||||
#define XPOWERS_CHIP_AXP2101
|
||||
#include "XPowersLib.h"
|
||||
#endif
|
||||
|
||||
#include <Wire.h>
|
||||
|
||||
#define I2C_SDA 33
|
||||
#define I2C_SCL 22
|
||||
#define IP5306_ADDR 0x75
|
||||
#define MAX17048_ADDR 0x36
|
||||
|
||||
class BatteryInterface {
|
||||
private:
|
||||
uint32_t initTime = 0;
|
||||
Adafruit_MAX17048 maxlipo;
|
||||
|
||||
#ifdef HAS_AXP2101
|
||||
XPowersPMU power;
|
||||
#endif
|
||||
|
||||
public:
|
||||
int8_t battery_level = 0;
|
||||
int8_t old_level = 0;
|
||||
bool i2c_supported = false;
|
||||
bool has_max17048 = false;
|
||||
bool has_ip5306 = false;
|
||||
bool has_axp2101 = false;
|
||||
|
||||
BatteryInterface();
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ Buffer::Buffer(){
|
||||
bufB = (uint8_t*)malloc(BUF_SIZE);
|
||||
}
|
||||
|
||||
void Buffer::createFile(String name, bool is_pcap){
|
||||
void Buffer::createFile(String name, bool is_pcap, bool is_gpx){
|
||||
int i=0;
|
||||
if (is_pcap) {
|
||||
do{
|
||||
@@ -14,12 +14,18 @@ void Buffer::createFile(String name, bool is_pcap){
|
||||
i++;
|
||||
} while(fs->exists(fileName));
|
||||
}
|
||||
else {
|
||||
else if ((!is_pcap) && (!is_gpx)) {
|
||||
do{
|
||||
fileName = "/"+name+"_"+(String)i+".log";
|
||||
i++;
|
||||
} while(fs->exists(fileName));
|
||||
}
|
||||
else {
|
||||
do{
|
||||
fileName = "/"+name+"_"+(String)i+".gpx";
|
||||
i++;
|
||||
} while(fs->exists(fileName));
|
||||
}
|
||||
|
||||
Serial.println(fileName);
|
||||
|
||||
@@ -46,7 +52,7 @@ void Buffer::open(bool is_pcap){
|
||||
}
|
||||
}
|
||||
|
||||
void Buffer::openFile(String file_name, fs::FS* fs, bool serial, bool is_pcap) {
|
||||
void Buffer::openFile(String file_name, fs::FS* fs, bool serial, bool is_pcap, bool is_gpx) {
|
||||
bool save_pcap = settings_obj.loadSetting<bool>("SavePCAP");
|
||||
if (!save_pcap) {
|
||||
this->fs = NULL;
|
||||
@@ -57,7 +63,7 @@ void Buffer::openFile(String file_name, fs::FS* fs, bool serial, bool is_pcap) {
|
||||
this->fs = fs;
|
||||
this->serial = serial;
|
||||
if (this->fs) {
|
||||
createFile(file_name, is_pcap);
|
||||
createFile(file_name, is_pcap, is_gpx);
|
||||
}
|
||||
if (this->fs || this->serial) {
|
||||
open(is_pcap);
|
||||
@@ -74,6 +80,10 @@ void Buffer::logOpen(String file_name, fs::FS* fs, bool serial) {
|
||||
openFile(file_name, fs, serial, false);
|
||||
}
|
||||
|
||||
void Buffer::gpxOpen(String file_name, fs::FS* fs, bool serial) {
|
||||
openFile(file_name, fs, serial, false, true);
|
||||
}
|
||||
|
||||
void Buffer::add(const uint8_t* buf, uint32_t len, bool is_pcap){
|
||||
// buffer is full -> drop packet
|
||||
if((useA && bufSizeA + len >= BUF_SIZE && bufSizeB > 0) || (!useA && bufSizeB + len >= BUF_SIZE && bufSizeA > 0)){
|
||||
|
||||
@@ -7,9 +7,10 @@
|
||||
#include "FS.h"
|
||||
#include "settings.h"
|
||||
#include "esp_wifi_types.h"
|
||||
#include "configs.h"
|
||||
|
||||
#define BUF_SIZE 3 * 1024 // Had to reduce buffer size to save RAM. GG @spacehuhn
|
||||
#define SNAP_LEN 2324 // max len of each recieved packet
|
||||
//#define BUF_SIZE 3 * 1024 // Had to reduce buffer size to save RAM. GG @spacehuhn
|
||||
//#define SNAP_LEN 2324 // max len of each recieved packet
|
||||
|
||||
//extern bool useSD;
|
||||
|
||||
@@ -20,13 +21,14 @@ class Buffer {
|
||||
Buffer();
|
||||
void pcapOpen(String file_name, fs::FS* fs, bool serial);
|
||||
void logOpen(String file_name, fs::FS* fs, bool serial);
|
||||
void gpxOpen(String file_name, fs::FS* fs, bool serial);
|
||||
void append(wifi_promiscuous_pkt_t *packet, int len);
|
||||
void append(String log);
|
||||
void save();
|
||||
private:
|
||||
void createFile(String name, bool is_pcap);
|
||||
void createFile(String name, bool is_pcap, bool is_gpx = false);
|
||||
void open(bool is_pcap);
|
||||
void openFile(String file_name, fs::FS* fs, bool serial, bool is_pcap);
|
||||
void openFile(String file_name, fs::FS* fs, bool serial, bool is_pcap, bool is_gpx = false);
|
||||
void add(const uint8_t* buf, uint32_t len, bool is_pcap);
|
||||
void write(int32_t n);
|
||||
void write(uint32_t n);
|
||||
|
||||
@@ -217,16 +217,26 @@ void CommandLine::runCommand(String input) {
|
||||
Serial.println(HELP_GPS_DATA_CMD);
|
||||
Serial.println(HELP_GPS_CMD);
|
||||
Serial.println(HELP_NMEA_CMD);
|
||||
Serial.println(HELP_GPS_POI_CMD);
|
||||
Serial.println(HELP_GPS_TRACKER_CMD);
|
||||
|
||||
// WiFi sniff/scan
|
||||
Serial.println(HELP_EVIL_PORTAL_CMD);
|
||||
Serial.println(HELP_KARMA_CMD);
|
||||
Serial.println(HELP_PACKET_COUNT_CMD);
|
||||
Serial.println(HELP_PING_CMD);
|
||||
Serial.println(HELP_ARP_SCAN_CMD);
|
||||
Serial.println(HELP_PORT_SCAN_CMD);
|
||||
Serial.println(HELP_SIGSTREN_CMD);
|
||||
Serial.println(HELP_SCAN_ALL_CMD);
|
||||
Serial.println(HELP_SCANAP_CMD);
|
||||
Serial.println(HELP_SCANSTA_CMD);
|
||||
Serial.println(HELP_SNIFF_RAW_CMD);
|
||||
Serial.println(HELP_SNIFF_BEACON_CMD);
|
||||
Serial.println(HELP_SNIFF_PROBE_CMD);
|
||||
Serial.println(HELP_SNIFF_PWN_CMD);
|
||||
Serial.println(HELP_SNIFF_PINESCAN_CMD);
|
||||
Serial.println(HELP_SNIFF_MULTISSID_CMD);
|
||||
Serial.println(HELP_SNIFF_ESP_CMD);
|
||||
Serial.println(HELP_SNIFF_DEAUTH_CMD);
|
||||
Serial.println(HELP_SNIFF_PMKID_CMD);
|
||||
@@ -239,19 +249,25 @@ void CommandLine::runCommand(String input) {
|
||||
Serial.println(HELP_ATTACK_CMD);
|
||||
|
||||
// WiFi Aux
|
||||
Serial.println(HELP_INFO_CMD);
|
||||
Serial.println(HELP_LIST_AP_CMD_A);
|
||||
Serial.println(HELP_LIST_AP_CMD_B);
|
||||
Serial.println(HELP_LIST_AP_CMD_C);
|
||||
Serial.println(HELP_LIST_AP_CMD_D);
|
||||
Serial.println(HELP_LIST_AP_CMD_E);
|
||||
Serial.println(HELP_LIST_AP_CMD_F);
|
||||
Serial.println(HELP_SEL_CMD_A);
|
||||
Serial.println(HELP_SSID_CMD_A);
|
||||
Serial.println(HELP_SSID_CMD_B);
|
||||
Serial.println(HELP_SAVE_CMD);
|
||||
Serial.println(HELP_LOAD_CMD);
|
||||
Serial.println(HELP_JOIN_CMD);
|
||||
|
||||
// Bluetooth sniff/scan
|
||||
#ifdef HAS_BT
|
||||
Serial.println(HELP_BT_SNIFF_CMD);
|
||||
Serial.println(HELP_BT_SPAM_CMD);
|
||||
Serial.println(HELP_BT_SPOOFAT_CMD);
|
||||
//Serial.println(HELP_BT_SWIFTPAIR_SPAM_CMD);
|
||||
//Serial.println(HELP_BT_SAMSUNG_SPAM_CMD);
|
||||
//Serial.println(HELP_BT_SPAM_ALL_CMD);
|
||||
@@ -275,9 +291,16 @@ void CommandLine::runCommand(String input) {
|
||||
// web_obj.shutdownServer();
|
||||
// return;
|
||||
//}
|
||||
|
||||
int f_arg = this->argSearch(&cmd_args, "-f");
|
||||
|
||||
uint8_t old_scan_mode=wifi_scan_obj.currentScanMode;
|
||||
|
||||
if (f_arg != -1) {
|
||||
WiFi.disconnect(true);
|
||||
delay(100);
|
||||
}
|
||||
|
||||
wifi_scan_obj.StartScan(WIFI_SCAN_OFF);
|
||||
|
||||
if(old_scan_mode == WIFI_SCAN_GPS_NMEA)
|
||||
@@ -289,7 +312,7 @@ void CommandLine::runCommand(String input) {
|
||||
|
||||
// If we don't do this, the text and button coordinates will be off
|
||||
#ifdef HAS_SCREEN
|
||||
display_obj.tft.init();
|
||||
display_obj.init();
|
||||
menu_function_obj.changeMenu(menu_function_obj.current_menu);
|
||||
#endif
|
||||
}
|
||||
@@ -309,6 +332,7 @@ void CommandLine::runCommand(String input) {
|
||||
#ifdef HAS_GPS
|
||||
if (gps_obj.getGpsModuleStatus()) {
|
||||
int get_arg = this->argSearch(&cmd_args, "-g");
|
||||
int track_arg = this->argSearch(&cmd_args, "-t");
|
||||
int nmea_arg = this->argSearch(&cmd_args, "-n");
|
||||
|
||||
if (get_arg != -1) {
|
||||
@@ -365,6 +389,13 @@ void CommandLine::runCommand(String input) {
|
||||
else
|
||||
Serial.println("You did not provide a valid argument");
|
||||
}
|
||||
else if (track_arg != -1) {
|
||||
wifi_scan_obj.currentScanMode = GPS_TRACKER;
|
||||
#ifdef HAS_SCREEN
|
||||
menu_function_obj.changeMenu(&menu_function_obj.gpsInfoMenu);
|
||||
#endif
|
||||
wifi_scan_obj.StartScan(GPS_TRACKER, TFT_CYAN);
|
||||
}
|
||||
else if(cmd_args.size()>1)
|
||||
Serial.println("You did not provide a valid flag");
|
||||
else
|
||||
@@ -518,6 +549,16 @@ void CommandLine::runCommand(String input) {
|
||||
menu_function_obj.drawStatusBar();
|
||||
#endif
|
||||
wifi_scan_obj.StartScan(WIFI_SCAN_SIG_STREN, TFT_MAGENTA);
|
||||
wifi_scan_obj.renderPacketRate();
|
||||
}
|
||||
// Packet count
|
||||
else if (cmd_args.get(0) == PACKET_COUNT_CMD) {
|
||||
Serial.println("Starting Packet Count Scan. Stop with " + (String)STOPSCAN_CMD);
|
||||
#ifdef HAS_SCREEN
|
||||
display_obj.clearScreen();
|
||||
menu_function_obj.drawStatusBar();
|
||||
#endif
|
||||
wifi_scan_obj.StartScan(WIFI_SCAN_PACKET_RATE, TFT_ORANGE);
|
||||
}
|
||||
// Wardrive
|
||||
else if (cmd_args.get(0) == WARDRIVE_CMD) {
|
||||
@@ -547,6 +588,37 @@ void CommandLine::runCommand(String input) {
|
||||
Serial.println("GPS not supported");
|
||||
#endif
|
||||
}
|
||||
// Karma
|
||||
else if (cmd_args.get(0) == KARMA_CMD) {
|
||||
int pr_sw = this->argSearch(&cmd_args, "-p");
|
||||
|
||||
if (pr_sw == -1) {
|
||||
Serial.println("You did not provide a target index");
|
||||
return;
|
||||
}
|
||||
|
||||
int pr_index = cmd_args.get(pr_sw + 1).toInt();
|
||||
|
||||
if ((pr_index < 0) || (pr_index > probe_req_ssids->size() - 1)) {
|
||||
Serial.println("The provided index was not in range");
|
||||
return;
|
||||
}
|
||||
|
||||
if (evil_portal_obj.setAP(probe_req_ssids->get(pr_index).essid)) {
|
||||
Serial.println("Starting Karma Attack with " + probe_req_ssids->get(pr_index).essid + ". Stop with " + (String)STOPSCAN_CMD);
|
||||
#ifdef HAS_SCREEN
|
||||
display_obj.clearScreen();
|
||||
menu_function_obj.drawStatusBar();
|
||||
#endif
|
||||
wifi_scan_obj.StartScan(WIFI_SCAN_EVIL_PORTAL, TFT_ORANGE);
|
||||
wifi_scan_obj.setMac();
|
||||
}
|
||||
else {
|
||||
Serial.println("Unable to set AP ESSID");
|
||||
return;
|
||||
}
|
||||
|
||||
}
|
||||
// AP Scan
|
||||
else if (cmd_args.get(0) == EVIL_PORTAL_CMD) {
|
||||
int cmd_sw = this->argSearch(&cmd_args, "-c");
|
||||
@@ -587,10 +659,22 @@ void CommandLine::runCommand(String input) {
|
||||
evil_portal_obj.setHtmlFromSerial();
|
||||
}
|
||||
else if (et_command == "setap") {
|
||||
int target_ap_index = cmd_args.get(cmd_sw + 2).toInt();
|
||||
if ((target_ap_index >= 0) && (target_ap_index < access_points->size())) {
|
||||
evil_portal_obj.setAP(access_points->get(target_ap_index).essid);
|
||||
AccessPoint new_ap = access_points->get(target_ap_index);
|
||||
new_ap.selected = true;
|
||||
access_points->set(target_ap_index, new_ap);
|
||||
|
||||
evil_portal_obj.ap_index = target_ap_index;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (cmd_args.get(0) == SCAN_ALL_CMD) {
|
||||
Serial.println("Scanning for APs and Stations. Stop with " + (String)STOPSCAN_CMD);
|
||||
wifi_scan_obj.StartScan(WIFI_SCAN_AP_STA, TFT_MAGENTA);
|
||||
}
|
||||
else if (cmd_args.get(0) == SCANAP_CMD) {
|
||||
int full_sw = -1;
|
||||
#ifdef HAS_SCREEN
|
||||
@@ -664,6 +748,24 @@ void CommandLine::runCommand(String input) {
|
||||
#endif
|
||||
wifi_scan_obj.StartScan(WIFI_SCAN_PWN, TFT_MAGENTA);
|
||||
}
|
||||
// PineScan sniff
|
||||
else if (cmd_args.get(0) == SNIFF_PINESCAN_CMD) {
|
||||
Serial.println("Starting Pinescan sniff. Stop with " + (String)STOPSCAN_CMD);
|
||||
#ifdef HAS_SCREEN
|
||||
display_obj.clearScreen();
|
||||
menu_function_obj.drawStatusBar();
|
||||
#endif
|
||||
wifi_scan_obj.StartScan(WIFI_SCAN_PINESCAN, TFT_MAGENTA);
|
||||
}
|
||||
// MultiSSID sniff
|
||||
else if (cmd_args.get(0) == SNIFF_MULTISSID_CMD) {
|
||||
Serial.println("Starting MultiSSID sniff. Stop with " + (String)STOPSCAN_CMD);
|
||||
#ifdef HAS_SCREEN
|
||||
display_obj.clearScreen();
|
||||
menu_function_obj.drawStatusBar();
|
||||
#endif
|
||||
wifi_scan_obj.StartScan(WIFI_SCAN_MULTISSID, TFT_MAGENTA);
|
||||
}
|
||||
// Espressif sniff
|
||||
else if (cmd_args.get(0) == SNIFF_ESP_CMD) {
|
||||
Serial.println("Starting Espressif device sniff. Stop with " + (String)STOPSCAN_CMD);
|
||||
@@ -774,6 +876,47 @@ void CommandLine::runCommand(String input) {
|
||||
wifi_scan_obj.StartScan(WIFI_ATTACK_DEAUTH_MANUAL, TFT_RED);
|
||||
}
|
||||
}
|
||||
// Bad Msg
|
||||
else if (attack_type == ATTACK_TYPE_BM) {
|
||||
// Attack all
|
||||
if (targ_sw == -1) {
|
||||
Serial.println("Starting Bad Msg attack against all stations. Stop with " + (String)STOPSCAN_CMD);
|
||||
#ifdef HAS_SCREEN
|
||||
display_obj.clearScreen();
|
||||
menu_function_obj.drawStatusBar();
|
||||
#endif
|
||||
wifi_scan_obj.StartScan(WIFI_ATTACK_BAD_MSG, TFT_RED);
|
||||
}
|
||||
// Target clients
|
||||
else {
|
||||
Serial.println("Starting targeted Bad Msg attack. Stop with " + (String)STOPSCAN_CMD);
|
||||
#ifdef HAS_SCREEN
|
||||
display_obj.clearScreen();
|
||||
menu_function_obj.drawStatusBar();
|
||||
#endif
|
||||
wifi_scan_obj.StartScan(WIFI_ATTACK_BAD_MSG_TARGETED, TFT_YELLOW);
|
||||
}
|
||||
}
|
||||
else if (attack_type == ATTACK_TYPE_S) {
|
||||
// Attack all
|
||||
if (targ_sw == -1) {
|
||||
Serial.println("Starting Sleep attack against all stations. Stop with " + (String)STOPSCAN_CMD);
|
||||
#ifdef HAS_SCREEN
|
||||
display_obj.clearScreen();
|
||||
menu_function_obj.drawStatusBar();
|
||||
#endif
|
||||
wifi_scan_obj.StartScan(WIFI_ATTACK_SLEEP, TFT_RED);
|
||||
}
|
||||
// Target clients
|
||||
else {
|
||||
Serial.println("Starting targeted Sleep attack. Stop with " + (String)STOPSCAN_CMD);
|
||||
#ifdef HAS_SCREEN
|
||||
display_obj.clearScreen();
|
||||
menu_function_obj.drawStatusBar();
|
||||
#endif
|
||||
wifi_scan_obj.StartScan(WIFI_ATTACK_SLEEP_TARGETED, TFT_MAGENTA);
|
||||
}
|
||||
}
|
||||
// Beacon
|
||||
else if (attack_type == ATTACK_TYPE_BEACON) {
|
||||
// spam by list
|
||||
@@ -835,6 +978,14 @@ void CommandLine::runCommand(String input) {
|
||||
#endif
|
||||
wifi_scan_obj.StartScan(WIFI_ATTACK_RICK_ROLL, TFT_YELLOW);
|
||||
}
|
||||
else if (attack_type == ATTACK_TYPE_FUNNY) {
|
||||
Serial.println("Starting Funny SSID Beacon spam. Stop with " + (String)STOPSCAN_CMD);
|
||||
#ifdef HAS_SCREEN
|
||||
display_obj.clearScreen();
|
||||
menu_function_obj.drawStatusBar();
|
||||
#endif
|
||||
wifi_scan_obj.StartScan(WIFI_ATTACK_FUNNY_BEACON, TFT_CYAN);
|
||||
}
|
||||
else {
|
||||
Serial.println("Attack type not properly defined");
|
||||
return;
|
||||
@@ -846,16 +997,73 @@ void CommandLine::runCommand(String input) {
|
||||
// Bluetooth scan
|
||||
if (cmd_args.get(0) == BT_SNIFF_CMD) {
|
||||
#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);
|
||||
int bt_type_sw = this->argSearch(&cmd_args, "-t");
|
||||
|
||||
// Specifying type of bluetooth sniff
|
||||
if (bt_type_sw != -1) {
|
||||
String bt_type = cmd_args.get(bt_type_sw + 1);
|
||||
|
||||
bt_type.toLowerCase();
|
||||
|
||||
// Airtag sniff
|
||||
if (bt_type == "airtag") {
|
||||
Serial.println("Starting Airtag sniff. Stop with " + (String)STOPSCAN_CMD);
|
||||
#ifdef HAS_SCREEN
|
||||
display_obj.clearScreen();
|
||||
menu_function_obj.drawStatusBar();
|
||||
#endif
|
||||
wifi_scan_obj.StartScan(BT_SCAN_AIRTAG, TFT_WHITE);
|
||||
}
|
||||
else if (bt_type == "flipper") {
|
||||
Serial.println("Starting Flipper sniff. Stop with " + (String)STOPSCAN_CMD);
|
||||
#ifdef HAS_SCREEN
|
||||
display_obj.clearScreen();
|
||||
menu_function_obj.drawStatusBar();
|
||||
#endif
|
||||
wifi_scan_obj.StartScan(BT_SCAN_FLIPPER, TFT_ORANGE);
|
||||
}
|
||||
}
|
||||
// General bluetooth sniff
|
||||
else {
|
||||
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
|
||||
}
|
||||
else if (cmd_args.get(0) == BT_SPOOFAT_CMD) {
|
||||
int at_sw = this->argSearch(&cmd_args, "-t");
|
||||
if (at_sw != -1) {
|
||||
#ifdef HAS_BT
|
||||
int target_mac = cmd_args.get(at_sw + 1).toInt();
|
||||
if (target_mac < airtags->size()) {
|
||||
for (int i = 0; i < airtags->size(); i++) {
|
||||
AirTag at = airtags->get(i);
|
||||
if (i == target_mac)
|
||||
at.selected = true;
|
||||
else
|
||||
at.selected = false;
|
||||
airtags->set(i, at);
|
||||
}
|
||||
Serial.println("Spoofing Airtag: " + airtags->get(target_mac).mac);
|
||||
#ifdef HAS_SCREEN
|
||||
display_obj.clearScreen();
|
||||
menu_function_obj.drawStatusBar();
|
||||
#endif
|
||||
wifi_scan_obj.StartScan(BT_SPOOF_AIRTAG, TFT_WHITE);
|
||||
}
|
||||
else {
|
||||
Serial.println("Provided index is out of range: " + (String)target_mac);
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
else if (cmd_args.get(0) == BT_SPAM_CMD) {
|
||||
int bt_type_sw = this->argSearch(&cmd_args, "-t");
|
||||
if (bt_type_sw != -1) {
|
||||
@@ -909,6 +1117,18 @@ void CommandLine::runCommand(String input) {
|
||||
Serial.println("Bluetooth not supported");
|
||||
#endif
|
||||
}
|
||||
else if (bt_type == "flipper") {
|
||||
#ifdef HAS_BT
|
||||
Serial.println("Starting Flipper Spam attack. Stop with " + (String)STOPSCAN_CMD);
|
||||
#ifdef HAS_SCREEN
|
||||
display_obj.clearScreen();
|
||||
menu_function_obj.drawStatusBar();
|
||||
#endif
|
||||
wifi_scan_obj.StartScan(BT_ATTACK_FLIPPER_SPAM, TFT_ORANGE);
|
||||
#else
|
||||
Serial.println("Bluetooth not supported");
|
||||
#endif
|
||||
}
|
||||
else if (bt_type == "all") {
|
||||
#ifdef HAS_BT
|
||||
Serial.println("Starting BT Spam All attack. Stop with " + (String)STOPSCAN_CMD);
|
||||
@@ -926,54 +1146,6 @@ void CommandLine::runCommand(String input) {
|
||||
}
|
||||
}
|
||||
}
|
||||
/*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_SAMSUNG_SPAM_CMD) {
|
||||
#ifdef HAS_BT
|
||||
Serial.println("Starting Samsung Spam attack. Stop with " + (String)STOPSCAN_CMD);
|
||||
#ifdef HAS_SCREEN
|
||||
display_obj.clearScreen();
|
||||
menu_function_obj.drawStatusBar();
|
||||
#endif
|
||||
wifi_scan_obj.StartScan(BT_ATTACK_SAMSUNG_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
|
||||
@@ -1052,6 +1224,144 @@ void CommandLine::runCommand(String input) {
|
||||
}
|
||||
}
|
||||
|
||||
if (wifi_scan_obj.wifi_connected) {
|
||||
// Ping Scan
|
||||
if (cmd_args.get(0) == PING_CMD) {
|
||||
Serial.println("Starting Ping Scan. Stop with " + (String)STOPSCAN_CMD);
|
||||
#ifdef HAS_SCREEN
|
||||
display_obj.clearScreen();
|
||||
menu_function_obj.drawStatusBar();
|
||||
#endif
|
||||
wifi_scan_obj.StartScan(WIFI_PING_SCAN, TFT_GREEN);
|
||||
}
|
||||
|
||||
if (cmd_args.get(0) == ARP_SCAN_CMD) {
|
||||
Serial.println("Starting ARP Scan. Stop with " + (String)STOPSCAN_CMD);
|
||||
#ifdef HAS_SCREEN
|
||||
display_obj.clearScreen();
|
||||
menu_function_obj.drawStatusBar();
|
||||
#endif
|
||||
wifi_scan_obj.StartScan(WIFI_ARP_SCAN, TFT_CYAN);
|
||||
}
|
||||
|
||||
// GPS POI
|
||||
if (cmd_args.get(0) == GPS_POI_CMD) {
|
||||
#ifdef HAS_GPS
|
||||
int start_sw = this->argSearch(&cmd_args, "-s");
|
||||
int mark_sw = this->argSearch(&cmd_args, "-m");
|
||||
int end_sw = this->argSearch(&cmd_args, "-e");
|
||||
|
||||
if (start_sw != -1) {
|
||||
wifi_scan_obj.StartScan(GPS_POI, TFT_CYAN);
|
||||
wifi_scan_obj.currentScanMode = WIFI_SCAN_OFF;
|
||||
#ifdef HAS_SCREEN
|
||||
menu_function_obj.changeMenu(&menu_function_obj.gpsPOIMenu);
|
||||
#endif
|
||||
}
|
||||
else if (mark_sw != -1) {
|
||||
wifi_scan_obj.currentScanMode = GPS_POI;
|
||||
#ifdef HAS_SCREEN
|
||||
display_obj.tft.setCursor(0, TFT_HEIGHT / 2);
|
||||
display_obj.clearScreen();
|
||||
#endif
|
||||
if (wifi_scan_obj.RunGPSInfo(true, false, true)) {
|
||||
#ifdef HAS_SCREEN
|
||||
display_obj.showCenterText("POI Logged", TFT_HEIGHT / 2);
|
||||
#endif
|
||||
}
|
||||
else {
|
||||
#ifdef HAS_SCREEN
|
||||
display_obj.showCenterText("POI Log Failed", TFT_HEIGHT / 2);
|
||||
#endif
|
||||
}
|
||||
wifi_scan_obj.currentScanMode = WIFI_SCAN_OFF;
|
||||
delay(2000);
|
||||
//wifi_scan_obj.StartScan(WIFI_SCAN_OFF);
|
||||
#ifdef HAS_SCREEN
|
||||
menu_function_obj.changeMenu(&menu_function_obj.gpsPOIMenu);
|
||||
#endif
|
||||
}
|
||||
else if (end_sw != -1) {
|
||||
wifi_scan_obj.currentScanMode = GPS_POI;
|
||||
wifi_scan_obj.StartScan(WIFI_SCAN_OFF);
|
||||
#ifdef HAS_SCREEN
|
||||
menu_function_obj.changeMenu(menu_function_obj.gpsPOIMenu.parentMenu);
|
||||
#endif
|
||||
}
|
||||
#else
|
||||
Serial.println("Your hardware doesn't have GPS, silly");
|
||||
return;
|
||||
#endif
|
||||
}
|
||||
|
||||
// Port Scan
|
||||
if (cmd_args.get(0) == PORT_SCAN_CMD) {
|
||||
int all_sw = this->argSearch(&cmd_args, "-a");
|
||||
int ip_sw = this->argSearch(&cmd_args, "-t");
|
||||
int port_sw = this->argSearch(&cmd_args, "-s");
|
||||
|
||||
// Check they specified ip index
|
||||
if (ip_sw != -1) {
|
||||
int ip_index = cmd_args.get(ip_sw + 1).toInt();
|
||||
|
||||
// Check provided index is in list
|
||||
if (ip_index < ipList->size()) {
|
||||
|
||||
// Full port scan
|
||||
if (all_sw != -1) {
|
||||
Serial.println("Selected: " + ipList->get(ip_index).toString());
|
||||
wifi_scan_obj.current_scan_ip = ipList->get(ip_index);
|
||||
#ifdef HAS_SCREEN
|
||||
display_obj.clearScreen();
|
||||
menu_function_obj.drawStatusBar();
|
||||
#endif
|
||||
wifi_scan_obj.StartScan(WIFI_PORT_SCAN_ALL, TFT_BLUE);
|
||||
}
|
||||
}
|
||||
else {
|
||||
Serial.println("The IP index specified is out of range");
|
||||
return;
|
||||
}
|
||||
}
|
||||
else if (port_sw != -1) {
|
||||
String port_name = cmd_args.get(port_sw + 1);
|
||||
port_name.toUpperCase();
|
||||
uint8_t target_mode = 0;
|
||||
if (port_name == "SSH")
|
||||
target_mode = WIFI_SCAN_SSH;
|
||||
else if (port_name == "TELNET")
|
||||
target_mode = WIFI_SCAN_TELNET;
|
||||
else if (port_name == "DNS")
|
||||
target_mode = WIFI_SCAN_DNS;
|
||||
else if (port_name == "HTTP")
|
||||
target_mode = WIFI_SCAN_HTTP;
|
||||
else if (port_name == "SMTP")
|
||||
target_mode = WIFI_SCAN_SMTP;
|
||||
else if (port_name == "HTTPS")
|
||||
target_mode = WIFI_SCAN_HTTPS;
|
||||
else if (port_name == "RDP")
|
||||
target_mode = WIFI_SCAN_RDP;
|
||||
|
||||
if (target_mode != 0) {
|
||||
Serial.println("Starting port scan for service " + port_name);
|
||||
#ifdef HAS_SCREEN
|
||||
display_obj.clearScreen();
|
||||
menu_function_obj.drawStatusBar();
|
||||
#endif
|
||||
wifi_scan_obj.StartScan(target_mode, TFT_CYAN);
|
||||
}
|
||||
else {
|
||||
Serial.println("You did not specify a supported service");
|
||||
return;
|
||||
}
|
||||
}
|
||||
else {
|
||||
Serial.println("You did not specify an IP index");
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
int count_selected = 0;
|
||||
//// WiFi aux commands
|
||||
@@ -1060,6 +1370,9 @@ 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 at_sw = this->argSearch(&cmd_args, "-t");
|
||||
int ip_sw = this->argSearch(&cmd_args, "-i");
|
||||
int pr_sw = this->argSearch(&cmd_args, "-p");
|
||||
|
||||
// List APs
|
||||
if (ap_sw != -1) {
|
||||
@@ -1073,6 +1386,18 @@ void CommandLine::runCommand(String input) {
|
||||
}
|
||||
this->showCounts(count_selected);
|
||||
}
|
||||
// List IPs
|
||||
else if (ip_sw != -1) {
|
||||
for (int i = 0; i < ipList->size(); i++) {
|
||||
Serial.println("[" + (String)i + "] " + ipList->get(i).toString());
|
||||
}
|
||||
}
|
||||
// List Probes
|
||||
else if (pr_sw != -1) {
|
||||
for (int i = 0; i < probe_req_ssids->size(); i++) {
|
||||
Serial.println("[" + (String)i + "] " + probe_req_ssids->get(i).essid);
|
||||
}
|
||||
}
|
||||
// List SSIDs
|
||||
else if (ss_sw != -1) {
|
||||
for (int i = 0; i < ssids->size(); i++) {
|
||||
@@ -1106,11 +1431,69 @@ void CommandLine::runCommand(String input) {
|
||||
}
|
||||
this->showCounts(count_selected);
|
||||
}
|
||||
// List airtags
|
||||
else if (at_sw != -1) {
|
||||
for (int i = 0; i < airtags->size(); i++) {
|
||||
Serial.println("[" + (String)i + "]MAC: " + airtags->get(i).mac);
|
||||
}
|
||||
}
|
||||
else {
|
||||
Serial.println("You did not specify which list to show");
|
||||
return;
|
||||
}
|
||||
}
|
||||
else if (cmd_args.get(0) == INFO_CMD) {
|
||||
int ap_sw = this->argSearch(&cmd_args, "-a");
|
||||
|
||||
if (ap_sw != -1) {
|
||||
int filter_ap = cmd_args.get(ap_sw + 1).toInt();
|
||||
wifi_scan_obj.RunAPInfo(filter_ap, false);
|
||||
}
|
||||
else {
|
||||
wifi_scan_obj.currentScanMode = SHOW_INFO;
|
||||
#ifdef HAS_SCREEN
|
||||
menu_function_obj.changeMenu(&menu_function_obj.infoMenu);
|
||||
#endif
|
||||
wifi_scan_obj.RunInfo();
|
||||
}
|
||||
}
|
||||
else if (cmd_args.get(0) == JOIN_CMD) {
|
||||
int ap_sw = this->argSearch(&cmd_args, "-a");
|
||||
int pw_sw = this->argSearch(&cmd_args, "-p");
|
||||
int s_sw = this->argSearch(&cmd_args, "-s");
|
||||
|
||||
if ((ap_sw != -1) && (pw_sw != -1)) {
|
||||
int index = cmd_args.get(ap_sw + 1).toInt();
|
||||
String password = cmd_args.get(pw_sw + 1);
|
||||
Serial.println("Using SSID: " + (String)access_points->get(index).essid + " Password: " + (String)password);
|
||||
//wifi_scan_obj.currentScanMode = LV_JOIN_WIFI;
|
||||
//wifi_scan_obj.StartScan(LV_JOIN_WIFI, TFT_YELLOW);
|
||||
wifi_scan_obj.joinWiFi(access_points->get(index).essid, password, false);
|
||||
#ifdef HAS_SCREEN
|
||||
#ifdef HAS_MINI_KB
|
||||
menu_function_obj.changeMenu(menu_function_obj.current_menu);
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
else if (s_sw != -1) {
|
||||
String ssid = settings_obj.loadSetting<String>("ClientSSID");
|
||||
String pw = settings_obj.loadSetting<String>("ClientPW");
|
||||
|
||||
if ((ssid != "") && (pw != "")) {
|
||||
wifi_scan_obj.joinWiFi(ssid, pw, false);
|
||||
#ifdef HAS_SCREEN
|
||||
menu_function_obj.changeMenu(menu_function_obj.current_menu);
|
||||
#endif
|
||||
}
|
||||
else {
|
||||
Serial.println("There are no saved WiFi credentials");
|
||||
}
|
||||
}
|
||||
else {
|
||||
Serial.println("You did not provide the proper args");
|
||||
return;
|
||||
}
|
||||
}
|
||||
// Select access points or stations
|
||||
else if (cmd_args.get(0) == SEL_CMD) {
|
||||
// Get switches
|
||||
@@ -1235,26 +1618,43 @@ void CommandLine::runCommand(String input) {
|
||||
// Get list of indices
|
||||
LinkedList<String> ss_index = this->parseCommand(cmd_args.get(ss_sw + 1), ",");
|
||||
|
||||
// Mark APs as selected
|
||||
for (int i = 0; i < ss_index.size(); i++) {
|
||||
int index = ss_index.get(i).toInt();
|
||||
if (!this->inRange(ssids->size(), index)) {
|
||||
Serial.println("Index not in range: " + (String)index);
|
||||
continue;
|
||||
// Select ALL SSIDs
|
||||
if (cmd_args.get(ss_sw + 1) == "all") {
|
||||
for (int i = 0; i < ssids->size(); i++) {
|
||||
if (ssids->get(i).selected) {
|
||||
ssid new_ssid = ssids->get(i);
|
||||
new_ssid.selected = false;
|
||||
ssids->set(i, new_ssid);
|
||||
count_unselected += 1;
|
||||
}
|
||||
else {
|
||||
ssid new_ssid = ssids->get(i);
|
||||
new_ssid.selected = true;
|
||||
ssids->set(i, new_ssid);
|
||||
count_selected += 1;
|
||||
}
|
||||
}
|
||||
if (ssids->get(index).selected) {
|
||||
// Unselect "selected" ap
|
||||
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;
|
||||
}
|
||||
else {
|
||||
// Mark SSIDs as selected
|
||||
for (int i = 0; i < ss_index.size(); i++) {
|
||||
int index = ss_index.get(i).toInt();
|
||||
if (!this->inRange(ssids->size(), index)) {
|
||||
Serial.println("Index not in range: " + (String)index);
|
||||
continue;
|
||||
}
|
||||
if (ssids->get(index).selected) {
|
||||
ssid new_ssid = ssids->get(index);
|
||||
new_ssid.selected = false;
|
||||
ssids->set(index, new_ssid);
|
||||
count_unselected += 1;
|
||||
}
|
||||
else {
|
||||
ssid new_ssid = ssids->get(index);
|
||||
new_ssid.selected = true;
|
||||
ssids->set(index, new_ssid);
|
||||
count_selected += 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
this->showCounts(count_selected, count_unselected);
|
||||
|
||||
@@ -31,8 +31,11 @@ extern WiFiScan wifi_scan_obj;
|
||||
extern Settings settings_obj;
|
||||
extern LedInterface led_obj;
|
||||
extern LinkedList<AccessPoint>* access_points;
|
||||
extern LinkedList<AirTag>* airtags;
|
||||
extern LinkedList<ssid>* ssids;
|
||||
extern LinkedList<Station>* stations;
|
||||
extern LinkedList<IPAddress>* ipList;
|
||||
extern LinkedList<ProbeReqSsid>* probe_req_ssids;
|
||||
extern const String PROGMEM version_number;
|
||||
extern const String PROGMEM board_target;
|
||||
|
||||
@@ -50,39 +53,55 @@ const char PROGMEM LED_CMD[] = "led";
|
||||
const char PROGMEM GPS_DATA_CMD[] = "gpsdata";
|
||||
const char PROGMEM GPS_CMD[] = "gps";
|
||||
const char PROGMEM NMEA_CMD[] = "nmea";
|
||||
const char PROGMEM GPS_POI_CMD[] = "gpspoi";
|
||||
const char PROGMEM GPS_TRACKER_CMD[] = "gpstracker";
|
||||
|
||||
// WiFi sniff/scan
|
||||
const char PROGMEM EVIL_PORTAL_CMD[] = "evilportal";
|
||||
const char PROGMEM KARMA_CMD[] = "karma";
|
||||
const char PROGMEM PACKET_COUNT_CMD[] = "packetcount";
|
||||
const char PROGMEM SIGSTREN_CMD[] = "sigmon";
|
||||
const char PROGMEM SCAN_ALL_CMD[] = "scanall";
|
||||
const char PROGMEM SCANAP_CMD[] = "scanap";
|
||||
const char PROGMEM SCANSTA_CMD[] = "scansta";
|
||||
const char PROGMEM SNIFF_RAW_CMD[] = "sniffraw";
|
||||
const char PROGMEM SNIFF_BEACON_CMD[] = "sniffbeacon";
|
||||
const char PROGMEM SNIFF_PROBE_CMD[] = "sniffprobe";
|
||||
const char PROGMEM SNIFF_PWN_CMD[] = "sniffpwn";
|
||||
const char PROGMEM SNIFF_PINESCAN_CMD[] = "sniffpinescan";
|
||||
const char PROGMEM SNIFF_MULTISSID_CMD[] = "sniffmultissid";
|
||||
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";
|
||||
const char PROGMEM PING_CMD[] = "pingscan";
|
||||
const char PROGMEM PORT_SCAN_CMD[] = "portscan";
|
||||
const char PROGMEM ARP_SCAN_CMD[] = "arpscan";
|
||||
|
||||
// WiFi attack
|
||||
const char PROGMEM ATTACK_CMD[] = "attack";
|
||||
const char PROGMEM ATTACK_TYPE_DEAUTH[] = "deauth";
|
||||
const char PROGMEM ATTACK_TYPE_BEACON[] = "beacon";
|
||||
const char PROGMEM ATTACK_TYPE_PROBE[] = "probe";
|
||||
const char PROGMEM ATTACK_TYPE_FUNNY[] = "funny";
|
||||
const char PROGMEM ATTACK_TYPE_RR[] = "rickroll";
|
||||
const char PROGMEM ATTACK_TYPE_BM[] = "badmsg";
|
||||
const char PROGMEM ATTACK_TYPE_S[] = "sleep";
|
||||
|
||||
// WiFi Aux
|
||||
const char PROGMEM LIST_AP_CMD[] = "list";
|
||||
const char PROGMEM INFO_CMD[] = "info";
|
||||
const char PROGMEM SEL_CMD[] = "select";
|
||||
const char PROGMEM SSID_CMD[] = "ssid";
|
||||
const char PROGMEM SAVE_CMD[] = "save";
|
||||
const char PROGMEM LOAD_CMD[] = "load";
|
||||
const char PROGMEM JOIN_CMD[] = "join";
|
||||
|
||||
// Bluetooth sniff/scan
|
||||
const char PROGMEM BT_SPAM_CMD[] = "blespam";
|
||||
const char PROGMEM BT_SNIFF_CMD[] = "sniffbt";
|
||||
const char PROGMEM BT_SPOOFAT_CMD[] = "spoofat";
|
||||
//const char PROGMEM BT_SOUR_APPLE_CMD[] = "sourapple";
|
||||
//const char PROGMEM BT_SWIFTPAIR_SPAM_CMD[] = "swiftpair";
|
||||
//const char PROGMEM BT_SAMSUNG_SPAM_CMD[] = "samsungblespam";
|
||||
@@ -102,40 +121,56 @@ const char PROGMEM HELP_SETTINGS_CMD[] = "settings [-s <setting> enable/disable>
|
||||
const char PROGMEM HELP_LS_CMD[] = "ls <directory>";
|
||||
const char PROGMEM HELP_LED_CMD[] = "led -s <hex color>/-p <rainbow>";
|
||||
const char PROGMEM HELP_GPS_DATA_CMD[] = "gpsdata";
|
||||
const char PROGMEM HELP_GPS_CMD[] = "gps [-g] <fix/sat/lon/lat/alt/date/accuracy/text/nmea>\r\n [-n] <native/all/gps/glonass/galileo/navic/qzss/beidou>\r\n [-b = use BD vs GB for beidou]";
|
||||
const char PROGMEM HELP_GPS_CMD[] = "gps [-t] [-g] <fix/sat/lon/lat/alt/date/accuracy/text/nmea>\r\n [-n] <native/all/gps/glonass/galileo/navic/qzss/beidou>\r\n [-b = use BD vs GB for beidou]";
|
||||
const char PROGMEM HELP_GPS_POI_CMD[] = "gpspoi -s/-m/-e";
|
||||
const char PROGMEM HELP_GPS_TRACKER_CMD[] = "gpstracker -c <start/stop>";
|
||||
const char PROGMEM HELP_NMEA_CMD[] = "nmea";
|
||||
|
||||
// WiFi sniff/scan
|
||||
const char PROGMEM HELP_EVIL_PORTAL_CMD[] = "evilportal [-c start [-w html.html]/sethtml <html.html>]";
|
||||
const char PROGMEM HELP_KARMA_CMD[] = "karma -p <index>";
|
||||
const char PROGMEM HELP_PACKET_COUNT_CMD[] = "packetcount";
|
||||
const char PROGMEM HELP_SIGSTREN_CMD[] = "sigmon";
|
||||
const char PROGMEM HELP_SCAN_ALL_CMD[] = "scanall";
|
||||
const char PROGMEM HELP_SCANAP_CMD[] = "scanap";
|
||||
const char PROGMEM HELP_SCANSTA_CMD[] = "scansta";
|
||||
const char PROGMEM HELP_SNIFF_RAW_CMD[] = "sniffraw";
|
||||
const char PROGMEM HELP_SNIFF_BEACON_CMD[] = "sniffbeacon";
|
||||
const char PROGMEM HELP_SNIFF_PROBE_CMD[] = "sniffprobe";
|
||||
const char PROGMEM HELP_SNIFF_PWN_CMD[] = "sniffpwn";
|
||||
const char PROGMEM HELP_SNIFF_PINESCAN_CMD[] = "sniffpinescan";
|
||||
const char PROGMEM HELP_SNIFF_MULTISSID_CMD[] = "sniffmultissid";
|
||||
const char PROGMEM HELP_SNIFF_ESP_CMD[] = "sniffesp";
|
||||
const char PROGMEM HELP_SNIFF_DEAUTH_CMD[] = "sniffdeauth";
|
||||
const char PROGMEM HELP_SNIFF_PMKID_CMD[] = "sniffpmkid [-c <channel>][-d][-l]";
|
||||
const char PROGMEM HELP_STOPSCAN_CMD[] = "stopscan";
|
||||
const char PROGMEM HELP_STOPSCAN_CMD[] = "stopscan [-f]";
|
||||
const char PROGMEM HELP_WARDRIVE_CMD[] = "wardrive [-s]";
|
||||
const char PROGMEM HELP_PING_CMD[] = "pingscan";
|
||||
const char PROGMEM HELP_PORT_SCAN_CMD[] = "portscan [-a -t <ip index>]/[-s <ssh/telnet/dns/http/smtp/https/rdp>]";
|
||||
const char PROGMEM HELP_ARP_SCAN_CMD[] = "arpscan [-f]";
|
||||
|
||||
// WiFi attack
|
||||
const char PROGMEM HELP_ATTACK_CMD[] = "attack -t <beacon [-l/-r/-a]/deauth [-c]/[-s <src mac>] [-d <dst mac>]/probe/rickroll>";
|
||||
const char PROGMEM HELP_ATTACK_CMD[] = "attack -t <beacon [-l/-r/-a]/deauth [-c]/[-s <src mac>] [-d <dst mac>]/probe/rickroll/badmsg [-c]/sleep [-c]>";
|
||||
|
||||
// WiFi Aux
|
||||
const char PROGMEM HELP_LIST_AP_CMD_A[] = "list -s";
|
||||
const char PROGMEM HELP_LIST_AP_CMD_B[] = "list -a";
|
||||
const char PROGMEM HELP_LIST_AP_CMD_C[] = "list -c";
|
||||
const char PROGMEM HELP_LIST_AP_CMD_D[] = "list -t";
|
||||
const char PROGMEM HELP_LIST_AP_CMD_E[] = "list -i";
|
||||
const char PROGMEM HELP_LIST_AP_CMD_F[] = "list -p";
|
||||
const char PROGMEM HELP_INFO_CMD[] = "info [-a <index>]";
|
||||
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>";
|
||||
const char PROGMEM HELP_SAVE_CMD[] = "save -a/-s";
|
||||
const char PROGMEM HELP_LOAD_CMD[] = "load -a/-s";
|
||||
const char PROGMEM HELP_JOIN_CMD[] = "join -a <index> -p <password>/-s";
|
||||
|
||||
// Bluetooth sniff/scan
|
||||
const char PROGMEM HELP_BT_SNIFF_CMD[] = "sniffbt";
|
||||
const char PROGMEM HELP_BT_SPAM_CMD[] = "blespam -t <apple/google/samsung/windows/all>";
|
||||
const char PROGMEM HELP_BT_SNIFF_CMD[] = "sniffbt [-t] <airtag/flipper>";
|
||||
const char PROGMEM HELP_BT_SPAM_CMD[] = "blespam -t <apple/google/samsung/windows/flipper/all>";
|
||||
const char PROGMEM HELP_BT_SPOOFAT_CMD[] = "spoofat -t <index>";
|
||||
//const char PROGMEM HELP_BT_SOUR_APPLE_CMD[] = "sourapple";
|
||||
//const char PROGMEM HELP_BT_SWIFTPAIR_SPAM_CMD[] = "swiftpair";
|
||||
//const char PROGMEM HELP_BT_SAMSUNG_SPAM_CMD[] = "samsungblespam";
|
||||
|
||||
@@ -4,9 +4,152 @@
|
||||
#ifdef HAS_SCREEN
|
||||
|
||||
Display::Display()
|
||||
#ifdef HAS_CYD_TOUCH
|
||||
: touchscreenSPI(VSPI),
|
||||
touchscreen(XPT2046_CS, XPT2046_IRQ)
|
||||
#endif
|
||||
{
|
||||
}
|
||||
|
||||
int8_t Display::menuButton(uint16_t *x, uint16_t *y, bool pressed, bool check_hold) {
|
||||
#ifdef HAS_ILI9341
|
||||
for (uint8_t b = BUTTON_ARRAY_LEN; b < BUTTON_ARRAY_LEN + 3; b++) {
|
||||
if (pressed && this->key[b].contains(*x, *y)) {
|
||||
this->key[b].press(true); // tell the button it is pressed
|
||||
} else {
|
||||
this->key[b].press(false); // tell the button it is NOT pressed
|
||||
}
|
||||
}
|
||||
|
||||
for (uint8_t b = BUTTON_ARRAY_LEN; b < BUTTON_ARRAY_LEN + 3; b++) {
|
||||
if (!check_hold) {
|
||||
if ((this->key[b].justReleased()) && (!pressed)) {
|
||||
return b - BUTTON_ARRAY_LEN;
|
||||
}
|
||||
}
|
||||
else {
|
||||
if ((this->key[b].isPressed())) {
|
||||
return b - BUTTON_ARRAY_LEN;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
uint8_t Display::updateTouch(uint16_t *x, uint16_t *y, uint16_t threshold) {
|
||||
#ifdef HAS_ILI9341
|
||||
if (!this->headless_mode)
|
||||
#ifndef HAS_CYD_TOUCH
|
||||
return this->tft.getTouch(x, y, threshold);
|
||||
#else
|
||||
if (this->touchscreen.tirqTouched() && this->touchscreen.touched()) {
|
||||
TS_Point p = this->touchscreen.getPoint();
|
||||
|
||||
//*x = map(p.x, 200, 3700, 1, TFT_WIDTH);
|
||||
//*y = map(p.y, 240, 3800, 1, TFT_HEIGHT);
|
||||
|
||||
uint8_t rot = this->tft.getRotation();
|
||||
|
||||
//#ifdef HAS_CYD_PORTRAIT
|
||||
// rot = 0;
|
||||
//#endif
|
||||
|
||||
switch (rot) {
|
||||
case 0: // Standard Protrait
|
||||
*x = map(p.x, 200, 3700, 1, TFT_WIDTH);
|
||||
*y = map(p.y, 240, 3800, 1, TFT_HEIGHT);
|
||||
break;
|
||||
case 1:
|
||||
*x = map(p.y, 143, 3715, 0, TFT_HEIGHT); // Horizontal (Y axis in touch, X on screen)
|
||||
*y = map(p.x, 3786, 216, 0, TFT_WIDTH); // Vertical (X axis in touch, Y on screen)
|
||||
break;
|
||||
case 2:
|
||||
*x = map(p.x, 3700, 200, 1, TFT_WIDTH);
|
||||
*y = map(p.y, 3800, 240, 1, TFT_HEIGHT);
|
||||
break;
|
||||
case 3:
|
||||
*x = map(p.y, 3800, 240, 1, TFT_WIDTH);
|
||||
*y = map(p.x, 200, 3700, 1, TFT_HEIGHT);
|
||||
break;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
return 0;
|
||||
#endif
|
||||
else
|
||||
return !this->headless_mode;
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool Display::isTouchHeld(uint16_t threshold) {
|
||||
static unsigned long touchStartTime = 0;
|
||||
static bool touchHeld = false;
|
||||
uint16_t x, y;
|
||||
|
||||
if (this->updateTouch(&x, &y, threshold)) {
|
||||
// Touch detected
|
||||
if (touchStartTime == 0) {
|
||||
touchStartTime = millis(); // First touch timestamp
|
||||
} else if (!touchHeld && millis() - touchStartTime >= 1000) {
|
||||
touchHeld = true; // Held for at least 1000ms
|
||||
return true;
|
||||
}
|
||||
} else {
|
||||
// Touch released
|
||||
touchStartTime = 0;
|
||||
touchHeld = false;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void Display::init() {
|
||||
tft.init();
|
||||
|
||||
#ifdef HAS_DUAL_BAND
|
||||
digitalWrite(TFT_BL, HIGH);
|
||||
#endif
|
||||
}
|
||||
|
||||
void Display::setCalData(bool landscape) {
|
||||
#ifndef HAS_CYD_TOUCH
|
||||
if (!landscape) {
|
||||
#ifdef TFT_SHIELD
|
||||
uint16_t calData[5] = { 275, 3494, 361, 3528, 4 }; // tft.setRotation(0); // Portrait with TFT Shield
|
||||
#elif defined(MARAUDER_CYD_3_5_INCH)
|
||||
uint16_t calData[5] = { 239, 3560, 262, 3643, 4 };
|
||||
#elif defined(MARAUDER_V8)
|
||||
uint16_t calData[5] = { 351, 3279, 214, 3394, 2 };
|
||||
#elif defined(TFT_DIY)
|
||||
uint16_t calData[5] = { 339, 3470, 237, 3438, 2 }; // tft.setRotation(0); // Portrait with DIY TFT
|
||||
#endif
|
||||
#ifdef HAS_ILI9341
|
||||
tft.setTouch(calData);
|
||||
#endif
|
||||
}
|
||||
else {
|
||||
#ifdef TFT_SHIELD
|
||||
uint16_t calData[5] = { 391, 3491, 266, 3505, 7 }; // Landscape TFT Shield
|
||||
#elif defined(MARAUDER_CYD_3_5_INCH)
|
||||
uint16_t calData[5] = { 272, 3648, 234, 3565, 7 };
|
||||
#elif defined(MARAUDER_V8)
|
||||
uint16_t calData[5] = { 213, 3396, 350, 3275, 1 };
|
||||
#else if defined(TFT_DIY)
|
||||
uint16_t calData[5] = { 213, 3469, 320, 3446, 1 }; // Landscape TFT DIY
|
||||
#endif
|
||||
#ifdef HAS_ILI9341
|
||||
tft.setTouch(calData);
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
// Function to prepare the display and the menus
|
||||
void Display::RunSetup()
|
||||
{
|
||||
@@ -18,42 +161,29 @@ void Display::RunSetup()
|
||||
#ifdef SCREEN_BUFFER
|
||||
screen_buffer = new LinkedList<String>();
|
||||
#endif
|
||||
|
||||
#ifdef HAS_CYD_TOUCH
|
||||
this->touchscreenSPI.begin(XPT2046_CLK, XPT2046_MISO, XPT2046_MOSI, XPT2046_CS);
|
||||
this->touchscreen.begin(touchscreenSPI);
|
||||
this->touchscreen.setRotation(0);
|
||||
#endif
|
||||
|
||||
tft.init();
|
||||
#ifndef MARAUDER_M5STICKC
|
||||
tft.setRotation(0); // Portrait
|
||||
#endif
|
||||
|
||||
#ifdef MARAUDER_M5STICKC
|
||||
tft.setRotation(1);
|
||||
#endif
|
||||
|
||||
#ifdef MARAUDER_REV_FEATHER
|
||||
tft.setRotation(1);
|
||||
#endif
|
||||
tft.setRotation(SCREEN_ORIENTATION);
|
||||
|
||||
tft.setCursor(0, 0);
|
||||
|
||||
#ifdef HAS_ILI9341
|
||||
|
||||
#ifdef TFT_SHIELD
|
||||
uint16_t calData[5] = { 275, 3494, 361, 3528, 4 }; // tft.setRotation(0); // Portrait with TFT Shield
|
||||
//Serial.println(F("Using TFT Shield"));
|
||||
#else if defined(TFT_DIY)
|
||||
uint16_t calData[5] = { 339, 3470, 237, 3438, 2 }; // tft.setRotation(0); // Portrait with DIY TFT
|
||||
//Serial.println(F("Using TFT DIY"));
|
||||
#ifndef HAS_CYD_TOUCH
|
||||
this->setCalData();
|
||||
#endif
|
||||
tft.setTouch(calData);
|
||||
|
||||
#endif
|
||||
|
||||
//tft.fillScreen(TFT_BLACK);
|
||||
clearScreen();
|
||||
|
||||
//Serial.println("SPI_FREQUENCY: " + (String)SPI_FREQUENCY);
|
||||
//Serial.println("SPI_READ_FREQUENCY:" + (String)SPI_READ_FREQUENCY);
|
||||
//Serial.println("SPI_TOUCH_FREQUENCY: " + (String)SPI_TOUCH_FREQUENCY);
|
||||
|
||||
#ifdef KIT
|
||||
pinMode(KIT_LED_BUILTIN, OUTPUT);
|
||||
#endif
|
||||
@@ -107,11 +237,16 @@ void Display::tftDrawGraphObjects(byte x_scale)
|
||||
tft.setCursor(3, 228); tft.print("0"); // "-" at bottom of y axis
|
||||
}
|
||||
|
||||
void Display::tftDrawEapolColorKey()
|
||||
void Display::tftDrawEapolColorKey(bool filter)
|
||||
{
|
||||
//Display color key
|
||||
tft.setTextSize(1); tft.setTextColor(TFT_WHITE);
|
||||
tft.fillRect(14, 0, 15, 8, TFT_CYAN); tft.setCursor(30, 0); tft.print(" - EAPOL");
|
||||
tft.fillRect(14, 0, 15, 8, TFT_CYAN); tft.setCursor(30, 0); tft.println(" - EAPOL");
|
||||
if (filter) {
|
||||
uint16_t y = tft.getCursorY();
|
||||
tft.setCursor(14, y);
|
||||
tft.println("Filter Active");
|
||||
}
|
||||
}
|
||||
|
||||
void Display::tftDrawColorKey()
|
||||
@@ -189,31 +324,56 @@ void Display::tftDrawYScaleButtons(byte y_scale)
|
||||
key[3].drawButton();
|
||||
}
|
||||
|
||||
void Display::tftDrawChannelScaleButtons(int set_channel)
|
||||
void Display::tftDrawChannelScaleButtons(int set_channel, bool lnd_an)
|
||||
{
|
||||
tft.drawFastVLine(178, 0, 20, TFT_WHITE);
|
||||
tft.setCursor(145, 21); tft.setTextColor(TFT_WHITE); tft.setTextSize(1); tft.print(text10); tft.print(set_channel);
|
||||
if (lnd_an) {
|
||||
tft.drawFastVLine(178, 0, 20, TFT_WHITE);
|
||||
tft.setCursor(145, 21); tft.setTextColor(TFT_WHITE); tft.setTextSize(1); tft.print(text10); tft.print(set_channel);
|
||||
|
||||
key[4].initButton(&tft, // channel - box
|
||||
164,
|
||||
10, // x, y, w, h, outline, fill, text
|
||||
20,
|
||||
20,
|
||||
TFT_BLACK, // Outline
|
||||
TFT_BLUE, // Fill
|
||||
TFT_BLACK, // Text
|
||||
"-",
|
||||
2);
|
||||
key[5].initButton(&tft, // channel + box
|
||||
193,
|
||||
10, // x, y, w, h, outline, fill, text
|
||||
20,
|
||||
20,
|
||||
TFT_BLACK, // Outline
|
||||
TFT_BLUE, // Fill
|
||||
TFT_BLACK, // Text
|
||||
"+",
|
||||
2);
|
||||
key[4].initButton(&tft, // channel - box
|
||||
164,
|
||||
10, // x, y, w, h, outline, fill, text
|
||||
EXT_BUTTON_WIDTH,
|
||||
EXT_BUTTON_WIDTH,
|
||||
TFT_BLACK, // Outline
|
||||
TFT_BLUE, // Fill
|
||||
TFT_BLACK, // Text
|
||||
"-",
|
||||
2);
|
||||
key[5].initButton(&tft, // channel + box
|
||||
193,
|
||||
10, // x, y, w, h, outline, fill, text
|
||||
EXT_BUTTON_WIDTH,
|
||||
EXT_BUTTON_WIDTH,
|
||||
TFT_BLACK, // Outline
|
||||
TFT_BLUE, // Fill
|
||||
TFT_BLACK, // Text
|
||||
"+",
|
||||
2);
|
||||
}
|
||||
|
||||
else {
|
||||
key[4].initButton(&tft, // channel - box
|
||||
(EXT_BUTTON_WIDTH / 2) * 6,
|
||||
(STATUS_BAR_WIDTH * 2) + CHAR_WIDTH - 1, // x, y, w, h, outline, fill, text
|
||||
EXT_BUTTON_WIDTH,
|
||||
EXT_BUTTON_WIDTH,
|
||||
TFT_BLACK, // Outline
|
||||
TFT_BLUE, // Fill
|
||||
TFT_BLACK, // Text
|
||||
"-",
|
||||
2);
|
||||
key[5].initButton(&tft, // channel + box
|
||||
(EXT_BUTTON_WIDTH / 2) * 10,
|
||||
(STATUS_BAR_WIDTH * 2) + CHAR_WIDTH - 1, // x, y, w, h, outline, fill, text
|
||||
EXT_BUTTON_WIDTH,
|
||||
EXT_BUTTON_WIDTH,
|
||||
TFT_BLACK, // Outline
|
||||
TFT_BLUE, // Fill
|
||||
TFT_BLACK, // Text
|
||||
"+",
|
||||
2);
|
||||
}
|
||||
|
||||
key[4].setLabelDatum(1, 5, MC_DATUM);
|
||||
key[5].setLabelDatum(1, 5, MC_DATUM);
|
||||
@@ -222,21 +382,37 @@ void Display::tftDrawChannelScaleButtons(int set_channel)
|
||||
key[5].drawButton();
|
||||
}
|
||||
|
||||
void Display::tftDrawExitScaleButtons()
|
||||
void Display::tftDrawExitScaleButtons(bool lnd_an)
|
||||
{
|
||||
//tft.drawFastVLine(178, 0, 20, TFT_WHITE);
|
||||
//tft.setCursor(145, 21); tft.setTextColor(TFT_WHITE); tft.setTextSize(1); tft.print("Channel:"); tft.print(set_channel);
|
||||
|
||||
key[6].initButton(&tft, // Exit box
|
||||
137,
|
||||
10, // x, y, w, h, outline, fill, text
|
||||
20,
|
||||
20,
|
||||
TFT_ORANGE, // Outline
|
||||
TFT_RED, // Fill
|
||||
TFT_BLACK, // Text
|
||||
"X",
|
||||
2);
|
||||
if (lnd_an) {
|
||||
|
||||
key[6].initButton(&tft, // Exit box
|
||||
137,
|
||||
10, // x, y, w, h, outline, fill, text
|
||||
EXT_BUTTON_WIDTH,
|
||||
EXT_BUTTON_WIDTH,
|
||||
TFT_ORANGE, // Outline
|
||||
TFT_RED, // Fill
|
||||
TFT_BLACK, // Text
|
||||
"X",
|
||||
2);
|
||||
}
|
||||
|
||||
else {
|
||||
key[6].initButton(&tft, // Exit box
|
||||
EXT_BUTTON_WIDTH / 2,
|
||||
(STATUS_BAR_WIDTH * 2) + CHAR_WIDTH - 1, // x, y, w, h, outline, fill, text
|
||||
EXT_BUTTON_WIDTH,
|
||||
EXT_BUTTON_WIDTH,
|
||||
TFT_ORANGE, // Outline
|
||||
TFT_RED, // Fill
|
||||
TFT_BLACK, // Text
|
||||
"X",
|
||||
2);
|
||||
}
|
||||
|
||||
key[6].setLabelDatum(1, 5, MC_DATUM);
|
||||
|
||||
@@ -262,7 +438,7 @@ void Display::touchToExit()
|
||||
{
|
||||
tft.setTextColor(TFT_BLACK, TFT_LIGHTGREY);
|
||||
tft.fillRect(0,32,HEIGHT_1,16, TFT_LIGHTGREY);
|
||||
tft.drawCentreString(text11,120,32,2);
|
||||
tft.drawCentreString(text11,TFT_WIDTH / 2,32,2);
|
||||
}
|
||||
|
||||
|
||||
@@ -270,8 +446,16 @@ void Display::touchToExit()
|
||||
void Display::clearScreen()
|
||||
{
|
||||
//Serial.println(F("clearScreen()"));
|
||||
tft.fillScreen(TFT_BLACK);
|
||||
tft.setCursor(0, 0);
|
||||
#ifndef MARAUDER_V7
|
||||
tft.fillScreen(TFT_BLACK);
|
||||
tft.setCursor(0, 0);
|
||||
#elif defined(MARAUDER_MINI)
|
||||
tft.fillRect(0, 0, TFT_WIDTH, TFT_HEIGHT, TFT_BLACK);
|
||||
tft.setCursor(0, 0);
|
||||
#else
|
||||
tft.fillRect(0, 0, TFT_WIDTH, TFT_HEIGHT, TFT_BLACK);
|
||||
tft.setCursor(0, 0);
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef SCREEN_BUFFER
|
||||
@@ -283,13 +467,42 @@ void Display::scrollScreenBuffer(bool down) {
|
||||
}
|
||||
#endif
|
||||
|
||||
void Display::processAndPrintString(TFT_eSPI& tft, const String& originalString) {
|
||||
// Define colors
|
||||
uint16_t text_color = TFT_GREEN; // Default text color
|
||||
uint16_t background_color = TFT_BLACK; // Default background color
|
||||
|
||||
String new_string = originalString;
|
||||
|
||||
// Check for color macros at the start of the string
|
||||
if (new_string.startsWith(RED_KEY)) {
|
||||
text_color = TFT_RED;
|
||||
new_string.remove(0, strlen(RED_KEY)); // Remove the macro
|
||||
} else if (new_string.startsWith(GREEN_KEY)) {
|
||||
text_color = TFT_GREEN;
|
||||
new_string.remove(0, strlen(GREEN_KEY)); // Remove the macro
|
||||
} else if (new_string.startsWith(CYAN_KEY)) {
|
||||
text_color = TFT_CYAN;
|
||||
new_string.remove(0, strlen(CYAN_KEY)); // Remove the macro
|
||||
} else if (new_string.startsWith(WHITE_KEY)) {
|
||||
text_color = TFT_WHITE;
|
||||
new_string.remove(0, strlen(WHITE_KEY)); // Remove the macro
|
||||
} else if (new_string.startsWith(MAGENTA_KEY)) {
|
||||
text_color = TFT_MAGENTA;
|
||||
new_string.remove(0, strlen(MAGENTA_KEY)); // Remove the macro
|
||||
}
|
||||
|
||||
// Set text color and print the string
|
||||
tft.setTextColor(text_color, background_color);
|
||||
tft.print(new_string);
|
||||
}
|
||||
|
||||
void Display::displayBuffer(bool do_clear)
|
||||
{
|
||||
if (this->display_buffer->size() > 0)
|
||||
{
|
||||
delay(1);
|
||||
|
||||
while (display_buffer->size() > 0)
|
||||
int print_count = 1;
|
||||
while ((display_buffer->size() > 0) && (print_count > 0))
|
||||
{
|
||||
|
||||
#ifndef SCREEN_BUFFER
|
||||
@@ -311,20 +524,22 @@ void Display::displayBuffer(bool do_clear)
|
||||
blank[(18+(yStart - TOP_FIXED_AREA_2) / TEXT_HEIGHT)%19] = xPos;
|
||||
#else
|
||||
xPos = 0;
|
||||
if (this->screen_buffer->size() >= MAX_SCREEN_BUFFER)
|
||||
if (this->screen_buffer->size() >= MAX_SCREEN_BUFFER)
|
||||
this->scrollScreenBuffer();
|
||||
|
||||
screen_buffer->add(display_buffer->shift());
|
||||
|
||||
for (int i = 0; i < this->screen_buffer->size(); i++) {
|
||||
tft.setCursor(xPos, (i * 12) + (SCREEN_HEIGHT / 6));
|
||||
for (int x = 0; x < TFT_WIDTH / CHAR_WIDTH; x++)
|
||||
tft.print(" ");
|
||||
String spaces = String(' ', TFT_WIDTH / CHAR_WIDTH);
|
||||
tft.print(spaces);
|
||||
tft.setCursor(xPos, (i * 12) + (SCREEN_HEIGHT / 6));
|
||||
tft.setTextColor(TFT_GREEN, TFT_BLACK);
|
||||
tft.print(this->screen_buffer->get(i));
|
||||
|
||||
this->processAndPrintString(tft, this->screen_buffer->get(i));
|
||||
}
|
||||
#endif
|
||||
|
||||
print_count--;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -399,7 +614,13 @@ void Display::setupScrollArea(uint16_t tfa, uint16_t bfa) {
|
||||
//Serial.println(" bfa: " + (String)bfa);
|
||||
//Serial.println("yStart: " + (String)this->yStart);
|
||||
#ifdef HAS_ILI9341
|
||||
tft.writecommand(ILI9341_VSCRDEF); // Vertical scroll definition
|
||||
#ifdef HAS_ST7796
|
||||
tft.writecommand(0x33);
|
||||
#elif defined(HAS_ST7789)
|
||||
tft.writecommand(ST7789_VSCRDEF); // Vertical scroll definition
|
||||
#else
|
||||
tft.writecommand(ILI9341_VSCRDEF);
|
||||
#endif
|
||||
tft.writedata(tfa >> 8); // Top Fixed Area line count
|
||||
tft.writedata(tfa);
|
||||
tft.writedata((YMAX-tfa-bfa)>>8); // Vertical Scrolling Area line count
|
||||
@@ -412,7 +633,13 @@ void Display::setupScrollArea(uint16_t tfa, uint16_t bfa) {
|
||||
|
||||
void Display::scrollAddress(uint16_t vsp) {
|
||||
#ifdef HAS_ILI9341
|
||||
tft.writecommand(ILI9341_VSCRSADD); // Vertical scrolling pointer
|
||||
#ifdef HAS_ST7789
|
||||
tft.writecommand(ST7789_VSCRDEF); // Vertical scroll definition
|
||||
#elif defined(HAS_ST7796)
|
||||
tft.writecommand(0x33);
|
||||
#else
|
||||
tft.writecommand(ILI9341_VSCRDEF);
|
||||
#endif
|
||||
tft.writedata(vsp>>8);
|
||||
tft.writedata(vsp);
|
||||
#endif
|
||||
@@ -532,7 +759,7 @@ void Display::drawStylus()
|
||||
//====================================================================================
|
||||
// Decode and render the Jpeg image onto the TFT screen
|
||||
//====================================================================================
|
||||
void Display::jpegRender(int xpos, int ypos) {
|
||||
/*void Display::jpegRender(int xpos, int ypos) {
|
||||
|
||||
// retrieve infomration about the image
|
||||
uint16_t *pImg;
|
||||
@@ -599,13 +826,13 @@ void Display::jpegRender(int xpos, int ypos) {
|
||||
|
||||
// calculate how long it took to draw the image
|
||||
drawTime = millis() - drawTime; // Calculate the time it took
|
||||
}
|
||||
}*/
|
||||
|
||||
//====================================================================================
|
||||
// Print information decoded from the Jpeg image
|
||||
//====================================================================================
|
||||
void Display::jpegInfo() {
|
||||
/*
|
||||
/*void Display::jpegInfo() {
|
||||
|
||||
Serial.println("===============");
|
||||
Serial.println("JPEG image info");
|
||||
Serial.println("===============");
|
||||
@@ -619,13 +846,12 @@ void Display::jpegInfo() {
|
||||
Serial.print ("MCU height :"); Serial.println(JpegDec.MCUHeight);
|
||||
Serial.println("===============");
|
||||
Serial.println("");
|
||||
*/
|
||||
}
|
||||
}*/
|
||||
|
||||
//====================================================================================
|
||||
// Open a Jpeg file and send it to the Serial port in a C array compatible format
|
||||
//====================================================================================
|
||||
void createArray(const char *filename) {
|
||||
/*void createArray(const char *filename) {
|
||||
|
||||
// Open the named file
|
||||
fs::File jpgFile = SPIFFS.open( filename, "r"); // File handle reference for SPIFFS
|
||||
@@ -665,7 +891,7 @@ void createArray(const char *filename) {
|
||||
|
||||
Serial.println("};\r\n");
|
||||
jpgFile.close();
|
||||
}
|
||||
}*/
|
||||
|
||||
// End JPEG_functions
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
|
||||
#include <FS.h>
|
||||
#include <functional>
|
||||
#include <JPEGDecoder.h>
|
||||
//#include <JPEGDecoder.h>
|
||||
#include <LinkedList.h>
|
||||
#include <SPI.h>
|
||||
#include <lvgl.h>
|
||||
@@ -19,6 +19,10 @@
|
||||
|
||||
#include <TFT_eSPI.h>
|
||||
|
||||
#ifdef HAS_CYD_TOUCH
|
||||
#include <XPT2046_Touchscreen.h>
|
||||
#endif
|
||||
|
||||
// WiFi stuff
|
||||
#define OTA_UPDATE 100
|
||||
#define SHOW_INFO 101
|
||||
@@ -39,6 +43,16 @@
|
||||
#define LV_ADD_SSID 14
|
||||
#define WIFI_ATTACK_BEACON_LIST 15
|
||||
|
||||
#define RED_KEY ";red;"
|
||||
#define GREEN_KEY ";grn;"
|
||||
#define CYAN_KEY ";cyn;"
|
||||
#define MAGENTA_KEY ";mgn;"
|
||||
#define WHITE_KEY ";wht;"
|
||||
|
||||
#define UP_BUTTON 0
|
||||
#define SELECT_BUTTON 1
|
||||
#define DOWN_BUTTON 2
|
||||
|
||||
class Display
|
||||
{
|
||||
private:
|
||||
@@ -58,13 +72,19 @@ class Display
|
||||
#ifdef SCREEN_BUFFER
|
||||
void scrollScreenBuffer(bool down = false);
|
||||
#endif
|
||||
void processAndPrintString(TFT_eSPI& tft, const String& originalString);
|
||||
|
||||
public:
|
||||
Display();
|
||||
TFT_eSPI tft = TFT_eSPI();
|
||||
TFT_eSPI_Button key[BUTTON_ARRAY_LEN];
|
||||
TFT_eSPI_Button key[BUTTON_ARRAY_LEN + 3];
|
||||
const String PROGMEM version_number = MARAUDER_VERSION;
|
||||
|
||||
#ifdef HAS_CYD_TOUCH
|
||||
SPIClass touchscreenSPI;
|
||||
XPT2046_Touchscreen touchscreen;
|
||||
#endif
|
||||
|
||||
bool printing = false;
|
||||
bool loading = false;
|
||||
bool tteBar = false;
|
||||
@@ -98,25 +118,29 @@ 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
|
||||
|
||||
int8_t menuButton(uint16_t *x, uint16_t *y, bool pressed, bool check_hold = false);
|
||||
uint8_t updateTouch(uint16_t *x, uint16_t *y, uint16_t threshold = 600);
|
||||
bool isTouchHeld(uint16_t threshold = 600);
|
||||
void tftDrawRedOnOffButton();
|
||||
void tftDrawGreenOnOffButton();
|
||||
void tftDrawGraphObjects(byte x_scale);
|
||||
void tftDrawEapolColorKey();
|
||||
void tftDrawEapolColorKey(bool filter = false);
|
||||
void tftDrawColorKey();
|
||||
void tftDrawXScaleButtons(byte x_scale);
|
||||
void tftDrawYScaleButtons(byte y_scale);
|
||||
void tftDrawChannelScaleButtons(int set_channel);
|
||||
void tftDrawExitScaleButtons();
|
||||
void tftDrawChannelScaleButtons(int set_channel, bool lnd_an = true);
|
||||
void tftDrawExitScaleButtons(bool lnd_an = true);
|
||||
void buildBanner(String msg, int xpos);
|
||||
void clearScreen();
|
||||
void displayBuffer(bool do_clear = false);
|
||||
//void drawJpeg(const char *filename, int xpos, int ypos);
|
||||
void getTouchWhileFunction(bool pressed);
|
||||
void initScrollValues(bool tte = false);
|
||||
void jpegInfo();
|
||||
void jpegRender(int xpos, int ypos);
|
||||
//void jpegInfo();
|
||||
//void jpegRender(int xpos, int ypos);
|
||||
void listDir(fs::FS &fs, const char * dirname, uint8_t levels);
|
||||
void listFiles();
|
||||
void init();
|
||||
void main(uint8_t scan_mode);
|
||||
void RunSetup();
|
||||
void scrollAddress(uint16_t vsp);
|
||||
@@ -126,6 +150,7 @@ class Display
|
||||
void touchToExit();
|
||||
void twoPartDisplay(String center_text);
|
||||
void updateBanner(String msg);
|
||||
void setCalData(bool landscape = false);
|
||||
};
|
||||
#endif
|
||||
#endif
|
||||
|
||||
@@ -1,5 +1,9 @@
|
||||
#include "EvilPortal.h"
|
||||
|
||||
#ifdef HAS_PSRAM
|
||||
char* index_html = nullptr;
|
||||
#endif
|
||||
|
||||
AsyncWebServer server(80);
|
||||
|
||||
EvilPortal::EvilPortal() {
|
||||
@@ -14,8 +18,6 @@ void EvilPortal::setup() {
|
||||
|
||||
html_files = new LinkedList<String>();
|
||||
|
||||
html_files->add("Back");
|
||||
|
||||
#ifdef HAS_SD
|
||||
if (sd_obj.supported) {
|
||||
sd_obj.listDirToLinkedList(html_files, "/", "html");
|
||||
@@ -25,9 +27,20 @@ void EvilPortal::setup() {
|
||||
#endif
|
||||
}
|
||||
|
||||
void EvilPortal::cleanup() {
|
||||
this->ap_index = -1;
|
||||
|
||||
#ifdef HAS_PSRAM
|
||||
free(index_html);
|
||||
index_html = nullptr;
|
||||
#endif
|
||||
}
|
||||
|
||||
bool EvilPortal::begin(LinkedList<ssid>* ssids, LinkedList<AccessPoint>* access_points) {
|
||||
if (!this->setAP(ssids, access_points))
|
||||
return false;
|
||||
if (!this->has_ap) {
|
||||
if (!this->setAP(ssids, access_points))
|
||||
return false;
|
||||
}
|
||||
if (!this->setHtml())
|
||||
return false;
|
||||
|
||||
@@ -45,12 +58,50 @@ String EvilPortal::get_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");
|
||||
#ifndef HAS_PSRAM
|
||||
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
|
||||
});
|
||||
#else
|
||||
server.on("/", HTTP_GET, [this](AsyncWebServerRequest *request) {
|
||||
request->send(200, "text/html", index_html);
|
||||
Serial.println("client connected");
|
||||
#ifdef HAS_SCREEN
|
||||
this->sendToDisplay("Client connected to server");
|
||||
#endif
|
||||
});
|
||||
#endif
|
||||
|
||||
const char* captiveEndpoints[] = {
|
||||
"/hotspot-detect.html",
|
||||
"/library/test/success.html",
|
||||
"/success.txt",
|
||||
"/generate_204",
|
||||
"/gen_204",
|
||||
"/ncsi.txt",
|
||||
"/connecttest.txt",
|
||||
"/redirect"
|
||||
};
|
||||
|
||||
for (int i = 0; i < sizeof(captiveEndpoints) / sizeof(captiveEndpoints[0]); i++) {
|
||||
|
||||
#ifndef HAS_PSRAM
|
||||
server.on(captiveEndpoints[i], HTTP_GET, [this](AsyncWebServerRequest *request){
|
||||
request->send_P(200, "text/html", index_html);
|
||||
});
|
||||
#else
|
||||
server.on(captiveEndpoints[i], HTTP_GET, [this](AsyncWebServerRequest *request){
|
||||
request->send(200, "text/html", index_html);
|
||||
});
|
||||
#endif
|
||||
}
|
||||
|
||||
server.on("/get-ap-name", HTTP_GET, [this](AsyncWebServerRequest *request) {
|
||||
request->send(200, "text/plain", WiFi.softAPSSID());
|
||||
});
|
||||
|
||||
server.on("/get", HTTP_GET, [this](AsyncWebServerRequest *request) {
|
||||
@@ -74,13 +125,18 @@ void EvilPortal::setupServer() {
|
||||
200, "text/html",
|
||||
"<html><head><script>setTimeout(() => { window.location.href ='/' }, 100);</script></head><body></body></html>");
|
||||
});
|
||||
Serial.println("web server up");
|
||||
}
|
||||
|
||||
void EvilPortal::setHtmlFromSerial() {
|
||||
Serial.println("Setting HTML from serial...");
|
||||
const char *htmlStr = Serial.readString().c_str();
|
||||
strncpy(index_html, htmlStr, strlen(htmlStr));
|
||||
#ifdef HAS_PSRAM
|
||||
index_html = (char*) ps_malloc(MAX_HTML_SIZE);
|
||||
#endif
|
||||
strlcpy(index_html, htmlStr, strlen(htmlStr));
|
||||
#ifdef HAS_PSRAM
|
||||
index_html[MAX_HTML_SIZE - 1] = '\0';
|
||||
#endif
|
||||
this->has_html = true;
|
||||
this->using_serial_html = true;
|
||||
Serial.println("html set");
|
||||
@@ -121,7 +177,13 @@ bool EvilPortal::setHtml() {
|
||||
if (isPrintable(c))
|
||||
html.concat(c);
|
||||
}
|
||||
strncpy(index_html, html.c_str(), strlen(html.c_str()));
|
||||
#ifdef HAS_PSRAM
|
||||
index_html = (char*) ps_malloc(MAX_HTML_SIZE);
|
||||
#endif
|
||||
strlcpy(index_html, html.c_str(), strlen(html.c_str()));
|
||||
#ifdef HAS_PSRAM
|
||||
index_html[MAX_HTML_SIZE - 1] = '\0';
|
||||
#endif
|
||||
this->has_html = true;
|
||||
Serial.println("html set");
|
||||
html_file.close();
|
||||
@@ -132,11 +194,13 @@ bool EvilPortal::setHtml() {
|
||||
|
||||
bool EvilPortal::setAP(LinkedList<ssid>* ssids, LinkedList<AccessPoint>* access_points) {
|
||||
// See if there are selected APs first
|
||||
int targ_ap_index = -1;
|
||||
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;
|
||||
targ_ap_index = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -234,6 +298,7 @@ bool EvilPortal::setAP(LinkedList<ssid>* ssids, LinkedList<AccessPoint>* access_
|
||||
strncpy(apName, ap_config.c_str(), MAX_AP_NAME_SIZE);
|
||||
this->has_ap = true;
|
||||
Serial.println("ap config set");
|
||||
this->ap_index = targ_ap_index;
|
||||
return true;
|
||||
}
|
||||
else
|
||||
@@ -241,6 +306,20 @@ bool EvilPortal::setAP(LinkedList<ssid>* ssids, LinkedList<AccessPoint>* access_
|
||||
|
||||
}
|
||||
|
||||
bool EvilPortal::setAP(String essid) {
|
||||
if (essid == "")
|
||||
return false;
|
||||
|
||||
if (essid.length() > MAX_AP_NAME_SIZE) {
|
||||
return false;
|
||||
}
|
||||
|
||||
strncpy(apName, essid.c_str(), MAX_AP_NAME_SIZE);
|
||||
this->has_ap = true;
|
||||
Serial.println("ap config set");
|
||||
return true;
|
||||
}
|
||||
|
||||
void EvilPortal::startAP() {
|
||||
const IPAddress AP_IP(172, 0, 0, 1);
|
||||
|
||||
@@ -260,9 +339,14 @@ void EvilPortal::startAP() {
|
||||
|
||||
this->setupServer();
|
||||
|
||||
Serial.println("Server endpoints configured");
|
||||
|
||||
this->dnsServer.start(53, "*", WiFi.softAPIP());
|
||||
Serial.println("DNS Server started");
|
||||
server.addHandler(new CaptiveRequestHandler()).setFilter(ON_AP_FILTER);
|
||||
Serial.println("Captive Portal handler started");
|
||||
server.begin();
|
||||
Serial.println("Server started");
|
||||
#ifdef HAS_SCREEN
|
||||
this->sendToDisplay("Evil Portal READY");
|
||||
#endif
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
#include "ESPAsyncWebServer.h"
|
||||
#include <AsyncTCP.h>
|
||||
#include <DNSServer.h>
|
||||
#include <WiFi.h>
|
||||
|
||||
#include "configs.h"
|
||||
#include "settings.h"
|
||||
@@ -33,11 +34,16 @@ extern Buffer buffer_obj;
|
||||
#define RESET_CMD "reset"
|
||||
#define START_CMD "start"
|
||||
#define ACK_CMD "ack"
|
||||
#define MAX_AP_NAME_SIZE 30
|
||||
#define MAX_AP_NAME_SIZE 32
|
||||
#define WIFI_SCAN_EVIL_PORTAL 30
|
||||
|
||||
char apName[MAX_AP_NAME_SIZE] = "PORTAL";
|
||||
char index_html[MAX_HTML_SIZE] = "TEST";
|
||||
|
||||
#ifndef HAS_PSRAM
|
||||
char index_html[MAX_HTML_SIZE] = "TEST";
|
||||
#else
|
||||
extern char* index_html;
|
||||
#endif
|
||||
|
||||
struct ssid {
|
||||
String essid;
|
||||
@@ -51,9 +57,14 @@ struct AccessPoint {
|
||||
uint8_t channel;
|
||||
uint8_t bssid[6];
|
||||
bool selected;
|
||||
LinkedList<char>* beacon;
|
||||
char rssi;
|
||||
LinkedList<uint8_t>* stations;
|
||||
// LinkedList<char>* beacon;
|
||||
char beacon[2];
|
||||
int8_t rssi;
|
||||
LinkedList<uint16_t>* stations;
|
||||
uint16_t packets;
|
||||
uint8_t sec;
|
||||
bool wps;
|
||||
String man;
|
||||
};
|
||||
|
||||
class CaptiveRequestHandler : public AsyncWebHandler {
|
||||
@@ -79,7 +90,6 @@ class EvilPortal {
|
||||
String password;
|
||||
|
||||
bool has_html;
|
||||
bool has_ap;
|
||||
|
||||
DNSServer dnsServer;
|
||||
|
||||
@@ -95,15 +105,20 @@ class EvilPortal {
|
||||
public:
|
||||
EvilPortal();
|
||||
|
||||
int ap_index = -1;
|
||||
|
||||
String target_html_name = "index.html";
|
||||
uint8_t selected_html_index = 0;
|
||||
|
||||
bool using_serial_html;
|
||||
bool has_ap;
|
||||
|
||||
LinkedList<String>* html_files;
|
||||
|
||||
void cleanup();
|
||||
String get_user_name();
|
||||
String get_password();
|
||||
bool setAP(String essid);
|
||||
void setup();
|
||||
bool begin(LinkedList<ssid>* ssids, LinkedList<AccessPoint>* access_points);
|
||||
void main(uint8_t scan_mode);
|
||||
|
||||
@@ -32,7 +32,7 @@ void GpsInterface::begin() {
|
||||
|
||||
MicroNMEA::sendSentence(Serial2, "$PSTMSRR");
|
||||
|
||||
delay(3900);
|
||||
delay(1000);
|
||||
|
||||
if (Serial2.available()) {
|
||||
Serial.println("GPS Attached Successfully");
|
||||
@@ -469,16 +469,41 @@ String GpsInterface::dt_string_from_gps(){
|
||||
String datetime = "";
|
||||
if (nmea.isValid() && nmea.getYear() > 0){
|
||||
datetime += nmea.getYear();
|
||||
|
||||
datetime += "-";
|
||||
datetime += nmea.getMonth();
|
||||
|
||||
uint8_t month = nmea.getMonth();
|
||||
if (month < 10)
|
||||
datetime += "0";
|
||||
datetime += month;
|
||||
|
||||
datetime += "-";
|
||||
datetime += nmea.getDay();
|
||||
|
||||
uint8_t day = nmea.getDay();
|
||||
if (day < 10)
|
||||
datetime += "0";
|
||||
datetime += day;
|
||||
|
||||
datetime += " ";
|
||||
datetime += nmea.getHour();
|
||||
|
||||
uint8_t hour = nmea.getHour();
|
||||
if (hour < 10)
|
||||
datetime += "0";
|
||||
datetime += hour;
|
||||
|
||||
datetime += ":";
|
||||
datetime += nmea.getMinute();
|
||||
|
||||
uint8_t minute = nmea.getMinute();
|
||||
if (minute < 10)
|
||||
datetime += "0";
|
||||
datetime += minute;
|
||||
|
||||
datetime += ":";
|
||||
datetime += nmea.getSecond();
|
||||
|
||||
uint8_t seconds = nmea.getSecond();
|
||||
if (seconds < 10)
|
||||
datetime += "0";
|
||||
datetime += seconds;
|
||||
}
|
||||
return datetime;
|
||||
}
|
||||
|
||||
269
esp32_marauder/Keyboard.cpp
Normal file
@@ -0,0 +1,269 @@
|
||||
#include "Keyboard.h"
|
||||
|
||||
#ifdef MARAUDER_CARDPUTER
|
||||
#include <driver/gpio.h>
|
||||
#include <Arduino.h>
|
||||
|
||||
#define digitalWrite(pin, level) gpio_set_level((gpio_num_t)pin, level)
|
||||
#define digitalRead(pin) gpio_get_level((gpio_num_t)pin)
|
||||
|
||||
void Keyboard_Class::_set_output(const std::vector<int> &pinList,
|
||||
uint8_t output)
|
||||
{
|
||||
output = output & 0B00000111;
|
||||
|
||||
digitalWrite(pinList[0], (output & 0B00000001));
|
||||
digitalWrite(pinList[1], (output & 0B00000010));
|
||||
digitalWrite(pinList[2], (output & 0B00000100));
|
||||
}
|
||||
|
||||
uint8_t Keyboard_Class::_get_input(const std::vector<int> &pinList)
|
||||
{
|
||||
uint8_t buffer = 0x00;
|
||||
uint8_t pin_value = 0x00;
|
||||
|
||||
for (int i = 0; i < 7; i++)
|
||||
{
|
||||
pin_value = (digitalRead(pinList[i]) == 1) ? 0x00 : 0x01;
|
||||
pin_value = pin_value << i;
|
||||
buffer = buffer | pin_value;
|
||||
}
|
||||
|
||||
return buffer;
|
||||
}
|
||||
|
||||
void Keyboard_Class::begin()
|
||||
{
|
||||
for (auto i : output_list)
|
||||
{
|
||||
gpio_reset_pin((gpio_num_t)i);
|
||||
gpio_set_direction((gpio_num_t)i, GPIO_MODE_OUTPUT);
|
||||
gpio_set_pull_mode((gpio_num_t)i, GPIO_PULLUP_PULLDOWN);
|
||||
digitalWrite(i, 0);
|
||||
}
|
||||
|
||||
for (auto i : input_list)
|
||||
{
|
||||
gpio_reset_pin((gpio_num_t)i);
|
||||
gpio_set_direction((gpio_num_t)i, GPIO_MODE_INPUT);
|
||||
gpio_set_pull_mode((gpio_num_t)i, GPIO_PULLUP_ONLY);
|
||||
}
|
||||
|
||||
_set_output(output_list, 0);
|
||||
}
|
||||
|
||||
uint8_t Keyboard_Class::getKey(Point2D_t keyCoor)
|
||||
{
|
||||
uint8_t ret = 0;
|
||||
|
||||
if ((keyCoor.x < 0) || (keyCoor.y < 0))
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
if (_keys_state_buffer.ctrl || _keys_state_buffer.shift ||
|
||||
_is_caps_locked)
|
||||
{
|
||||
ret = _key_value_map[keyCoor.y][keyCoor.x].value_second;
|
||||
}
|
||||
else
|
||||
{
|
||||
ret = _key_value_map[keyCoor.y][keyCoor.x].value_first;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
void Keyboard_Class::updateKeyList()
|
||||
{
|
||||
_key_list_buffer.clear();
|
||||
Point2D_t coor;
|
||||
uint8_t input_value = 0;
|
||||
|
||||
for (int i = 0; i < 8; i++)
|
||||
{
|
||||
_set_output(output_list, i);
|
||||
input_value = _get_input(input_list);
|
||||
/* If key pressed */
|
||||
|
||||
if (input_value)
|
||||
{
|
||||
/* Get X */
|
||||
for (int j = 0; j < 7; j++)
|
||||
{
|
||||
if (input_value & (0x01 << j))
|
||||
{
|
||||
coor.x = (i > 3) ? X_map_chart[j].x_1 : X_map_chart[j].x_2;
|
||||
|
||||
/* Get Y */
|
||||
coor.y = (i > 3) ? (i - 4) : i;
|
||||
// printf("%d,%d\t", coor.x, coor.y);
|
||||
|
||||
/* Keep the same as picture */
|
||||
coor.y = -coor.y;
|
||||
coor.y = coor.y + 3;
|
||||
|
||||
_key_list_buffer.push_back(coor);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t Keyboard_Class::isPressed()
|
||||
{
|
||||
return _key_list_buffer.size();
|
||||
}
|
||||
|
||||
bool Keyboard_Class::isChange()
|
||||
{
|
||||
if (_last_key_size != _key_list_buffer.size())
|
||||
{
|
||||
_last_key_size = _key_list_buffer.size();
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
String Keyboard_Class::getPressedKeysString() {
|
||||
updateKeyList();
|
||||
String pressed = "";
|
||||
|
||||
for (auto &keyCoor : _key_list_buffer) {
|
||||
pressed += getKey(keyCoor);
|
||||
}
|
||||
|
||||
return pressed;
|
||||
}
|
||||
|
||||
bool Keyboard_Class::isKeyPressed(char c)
|
||||
{
|
||||
if (_key_list_buffer.size())
|
||||
{
|
||||
for (const auto &i : _key_list_buffer)
|
||||
{
|
||||
if (getKey(i) == c)
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
#include <cstring>
|
||||
|
||||
void Keyboard_Class::updateKeysState()
|
||||
{
|
||||
_keys_state_buffer.reset();
|
||||
_key_pos_print_keys.clear();
|
||||
_key_pos_hid_keys.clear();
|
||||
_key_pos_modifier_keys.clear();
|
||||
|
||||
// Get special keys
|
||||
for (auto &i : _key_list_buffer)
|
||||
{
|
||||
// modifier
|
||||
if (getKeyValue(i).value_first == KEY_FN)
|
||||
{
|
||||
_keys_state_buffer.fn = true;
|
||||
continue;
|
||||
}
|
||||
if (getKeyValue(i).value_first == KEY_OPT)
|
||||
{
|
||||
_keys_state_buffer.opt = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (getKeyValue(i).value_first == KEY_LEFT_CTRL)
|
||||
{
|
||||
_keys_state_buffer.ctrl = true;
|
||||
_key_pos_modifier_keys.push_back(i);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (getKeyValue(i).value_first == KEY_LEFT_SHIFT)
|
||||
{
|
||||
_keys_state_buffer.shift = true;
|
||||
_key_pos_modifier_keys.push_back(i);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (getKeyValue(i).value_first == KEY_LEFT_ALT)
|
||||
{
|
||||
_keys_state_buffer.alt = true;
|
||||
_key_pos_modifier_keys.push_back(i);
|
||||
continue;
|
||||
}
|
||||
|
||||
// function
|
||||
if (getKeyValue(i).value_first == KEY_TAB)
|
||||
{
|
||||
_keys_state_buffer.tab = true;
|
||||
_key_pos_hid_keys.push_back(i);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (getKeyValue(i).value_first == KEY_BACKSPACE)
|
||||
{
|
||||
_keys_state_buffer.del = true;
|
||||
_key_pos_hid_keys.push_back(i);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (getKeyValue(i).value_first == KEY_ENTER)
|
||||
{
|
||||
_keys_state_buffer.enter = true;
|
||||
_key_pos_hid_keys.push_back(i);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (getKeyValue(i).value_first == ' ')
|
||||
{
|
||||
_keys_state_buffer.space = true;
|
||||
}
|
||||
_key_pos_hid_keys.push_back(i);
|
||||
_key_pos_print_keys.push_back(i);
|
||||
}
|
||||
|
||||
for (auto &i : _key_pos_modifier_keys)
|
||||
{
|
||||
uint8_t key = getKeyValue(i).value_first;
|
||||
_keys_state_buffer.modifier_keys.push_back(key);
|
||||
}
|
||||
|
||||
for (auto &k : _keys_state_buffer.modifier_keys)
|
||||
{
|
||||
_keys_state_buffer.modifiers |= (1 << (k - 0x80));
|
||||
}
|
||||
|
||||
for (auto &i : _key_pos_hid_keys)
|
||||
{
|
||||
uint8_t k = getKeyValue(i).value_first;
|
||||
if (k == KEY_TAB || k == KEY_BACKSPACE || k == KEY_ENTER)
|
||||
{
|
||||
_keys_state_buffer.hid_keys.push_back(k);
|
||||
continue;
|
||||
}
|
||||
uint8_t key = _kb_asciimap[k];
|
||||
if (key)
|
||||
{
|
||||
_keys_state_buffer.hid_keys.push_back(key);
|
||||
}
|
||||
}
|
||||
|
||||
// Deal what left
|
||||
for (auto &i : _key_pos_print_keys)
|
||||
{
|
||||
if (_keys_state_buffer.ctrl || _keys_state_buffer.shift ||
|
||||
_is_caps_locked)
|
||||
{
|
||||
_keys_state_buffer.word.push_back(getKeyValue(i).value_second);
|
||||
}
|
||||
else
|
||||
{
|
||||
_keys_state_buffer.word.push_back(getKeyValue(i).value_first);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
206
esp32_marauder/Keyboard.h
Normal file
@@ -0,0 +1,206 @@
|
||||
#pragma once
|
||||
|
||||
#ifndef Keyboard_h
|
||||
#define Keyboard_h
|
||||
|
||||
#include "configs.h"
|
||||
|
||||
#ifdef MARAUDER_CARDPUTER
|
||||
|
||||
/**
|
||||
* @file keyboard.h
|
||||
* @author Forairaaaaa
|
||||
* @brief
|
||||
* @version 0.1
|
||||
* @date 2023-09-22
|
||||
*
|
||||
* @copyright Copyright (c) 2023
|
||||
*
|
||||
*/
|
||||
#include <iostream>
|
||||
#include <vector>
|
||||
#include "Arduino.h"
|
||||
#include "Keyboard_def.h"
|
||||
#include "configs.h"
|
||||
|
||||
struct Chart_t
|
||||
{
|
||||
uint8_t value;
|
||||
uint8_t x_1;
|
||||
uint8_t x_2;
|
||||
};
|
||||
|
||||
struct Point2D_t
|
||||
{
|
||||
int x;
|
||||
int y;
|
||||
};
|
||||
|
||||
const std::vector<int> output_list = {8, 9, 11};
|
||||
const std::vector<int> input_list = {13, 15, 3, 4, 5, 6, 7};
|
||||
|
||||
const Chart_t X_map_chart[7] = {{1, 0, 1}, {2, 2, 3}, {4, 4, 5}, {8, 6, 7}, {16, 8, 9}, {32, 10, 11}, {64, 12, 13}};
|
||||
|
||||
struct KeyValue_t
|
||||
{
|
||||
const char value_first;
|
||||
const char value_second;
|
||||
};
|
||||
|
||||
const KeyValue_t _key_value_map[4][14] = {{{'`', '~'},
|
||||
{'1', '!'},
|
||||
{'2', '@'},
|
||||
{'3', '#'},
|
||||
{'4', '$'},
|
||||
{'5', '%'},
|
||||
{'6', '^'},
|
||||
{'7', '&'},
|
||||
{'8', '*'},
|
||||
{'9', '('},
|
||||
{'0', ')'},
|
||||
{'-', '_'},
|
||||
{'=', '+'},
|
||||
{KEY_BACKSPACE, KEY_BACKSPACE}},
|
||||
{{KEY_TAB, KEY_TAB},
|
||||
{'q', 'Q'},
|
||||
{'w', 'W'},
|
||||
{'e', 'E'},
|
||||
{'r', 'R'},
|
||||
{'t', 'T'},
|
||||
{'y', 'Y'},
|
||||
{'u', 'U'},
|
||||
{'i', 'I'},
|
||||
{'o', 'O'},
|
||||
{'p', 'P'},
|
||||
{'[', '{'},
|
||||
{']', '}'},
|
||||
{'\\', '|'}},
|
||||
{{KEY_FN, KEY_FN},
|
||||
{KEY_LEFT_SHIFT, KEY_LEFT_SHIFT},
|
||||
{'a', 'A'},
|
||||
{'s', 'S'},
|
||||
{'d', 'D'},
|
||||
{'f', 'F'},
|
||||
{'g', 'G'},
|
||||
{'h', 'H'},
|
||||
{'j', 'J'},
|
||||
{'k', 'K'},
|
||||
{'l', 'L'},
|
||||
{';', ':'},
|
||||
{'\'', '\"'},
|
||||
{KEY_ENTER, KEY_ENTER}},
|
||||
{{KEY_LEFT_CTRL, KEY_LEFT_CTRL},
|
||||
{KEY_OPT, KEY_OPT},
|
||||
{KEY_LEFT_ALT, KEY_LEFT_ALT},
|
||||
{'z', 'Z'},
|
||||
{'x', 'X'},
|
||||
{'c', 'C'},
|
||||
{'v', 'V'},
|
||||
{'b', 'B'},
|
||||
{'n', 'N'},
|
||||
{'m', 'M'},
|
||||
{',', '<'},
|
||||
{'.', '>'},
|
||||
{'/', '?'},
|
||||
{' ', ' '}}};
|
||||
|
||||
class Keyboard_Class
|
||||
{
|
||||
public:
|
||||
struct KeysState
|
||||
{
|
||||
bool tab = false;
|
||||
bool fn = false;
|
||||
bool shift = false;
|
||||
bool ctrl = false;
|
||||
bool opt = false;
|
||||
bool alt = false;
|
||||
bool del = false;
|
||||
bool enter = false;
|
||||
bool space = false;
|
||||
uint8_t modifiers = 0;
|
||||
|
||||
std::vector<char> word;
|
||||
std::vector<uint8_t> hid_keys;
|
||||
std::vector<uint8_t> modifier_keys;
|
||||
|
||||
void reset()
|
||||
{
|
||||
tab = false;
|
||||
fn = false;
|
||||
shift = false;
|
||||
ctrl = false;
|
||||
opt = false;
|
||||
alt = false;
|
||||
del = false;
|
||||
enter = false;
|
||||
space = false;
|
||||
modifiers = 0;
|
||||
word.clear();
|
||||
hid_keys.clear();
|
||||
modifier_keys.clear();
|
||||
}
|
||||
};
|
||||
|
||||
private:
|
||||
std::vector<Point2D_t> _key_list_buffer;
|
||||
std::vector<Point2D_t> _key_pos_print_keys; // only text: eg A,B,C
|
||||
std::vector<Point2D_t> _key_pos_hid_keys; // print key + space, enter, del
|
||||
std::vector<Point2D_t>
|
||||
_key_pos_modifier_keys; // modifier key: eg shift, ctrl, alt
|
||||
KeysState _keys_state_buffer;
|
||||
bool _is_caps_locked;
|
||||
uint8_t _last_key_size;
|
||||
|
||||
void _set_output(const std::vector<int> &pinList, uint8_t output);
|
||||
uint8_t _get_input(const std::vector<int> &pinList);
|
||||
|
||||
public:
|
||||
const char _ascii_list[95] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p',
|
||||
'q','r','s','t','u','v','w','x','y','z','A','B','C','D','E','F',
|
||||
'G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V',
|
||||
'W','X','Y','Z',' ','0','1','2','3','4','5','6','7','8','9','-',
|
||||
'=','[',']',';','\'',',','.','/','`','\\','_','+','{','}',':',
|
||||
'"','<','>','?','~','|','!','@','#','$','%','^','&','*','(',')'};
|
||||
|
||||
Keyboard_Class() : _is_caps_locked(false)
|
||||
{
|
||||
}
|
||||
|
||||
void begin();
|
||||
uint8_t getKey(Point2D_t keyCoor);
|
||||
|
||||
void updateKeyList();
|
||||
inline std::vector<Point2D_t> &keyList()
|
||||
{
|
||||
return _key_list_buffer;
|
||||
}
|
||||
|
||||
inline KeyValue_t getKeyValue(const Point2D_t &keyCoor)
|
||||
{
|
||||
return _key_value_map[keyCoor.y][keyCoor.x];
|
||||
}
|
||||
|
||||
uint8_t isPressed();
|
||||
bool isChange();
|
||||
bool isKeyPressed(char c);
|
||||
String getPressedKeysString();
|
||||
|
||||
void updateKeysState();
|
||||
inline KeysState &keysState()
|
||||
{
|
||||
return _keys_state_buffer;
|
||||
}
|
||||
|
||||
inline bool capslocked(void)
|
||||
{
|
||||
return _is_caps_locked;
|
||||
}
|
||||
inline void setCapsLocked(bool isLocked)
|
||||
{
|
||||
_is_caps_locked = isLocked;
|
||||
}
|
||||
};
|
||||
#endif
|
||||
|
||||
#endif
|
||||
155
esp32_marauder/Keyboard_def.h
Normal file
@@ -0,0 +1,155 @@
|
||||
#ifndef M5CARDPUTER_KB_KEYS_DEF_H
|
||||
#define M5CARDPUTER_KB_KEYS_DEF_H
|
||||
|
||||
#include "configs.h"
|
||||
|
||||
#ifdef MARAUDER_CARDPUTER
|
||||
|
||||
#define SHIFT 0x80
|
||||
|
||||
#define KEY_LEFT_CTRL 0x80
|
||||
#define KEY_LEFT_SHIFT 0x81
|
||||
#define KEY_LEFT_ALT 0x82
|
||||
|
||||
#define KEY_FN 0xff
|
||||
#define KEY_OPT 0x00
|
||||
|
||||
#define KEY_BACKSPACE 0x2a
|
||||
#define KEY_TAB 0x2b
|
||||
#define KEY_ENTER 0x28
|
||||
|
||||
const uint8_t _kb_asciimap[128] = {
|
||||
0x00, // NUL
|
||||
0x00, // SOH
|
||||
0x00, // STX
|
||||
0x00, // ETX
|
||||
0x00, // EOT
|
||||
0x00, // ENQ
|
||||
0x00, // ACK
|
||||
0x00, // BEL
|
||||
KEY_BACKSPACE, // BS Backspace
|
||||
KEY_TAB, // TAB Tab
|
||||
KEY_ENTER, // LF Enter
|
||||
0x00, // VT
|
||||
0x00, // FF
|
||||
0x00, // CR
|
||||
0x00, // SO
|
||||
0x00, // SI
|
||||
0x00, // DEL
|
||||
0x00, // DC1
|
||||
0x00, // DC2
|
||||
0x00, // DC3
|
||||
0x00, // DC4
|
||||
0x00, // NAK
|
||||
0x00, // SYN
|
||||
0x00, // ETB
|
||||
0x00, // CAN
|
||||
0x00, // EM
|
||||
0x00, // SUB
|
||||
0x00, // ESC
|
||||
0x00, // FS
|
||||
0x00, // GS
|
||||
0x00, // RS
|
||||
0x00, // US
|
||||
|
||||
0x2c, // ' '
|
||||
0x1e | SHIFT, // !
|
||||
0x34 | SHIFT, // "
|
||||
0x20 | SHIFT, // #
|
||||
0x21 | SHIFT, // $
|
||||
0x22 | SHIFT, // %
|
||||
0x24 | SHIFT, // &
|
||||
0x34, // '
|
||||
0x26 | SHIFT, // (
|
||||
0x27 | SHIFT, // )
|
||||
0x25 | SHIFT, // *
|
||||
0x2e | SHIFT, // +
|
||||
0x36, // ,
|
||||
0x2d, // -
|
||||
0x37, // .
|
||||
0x38, // /
|
||||
0x27, // 0
|
||||
0x1e, // 1
|
||||
0x1f, // 2
|
||||
0x20, // 3
|
||||
0x21, // 4
|
||||
0x22, // 5
|
||||
0x23, // 6
|
||||
0x24, // 7
|
||||
0x25, // 8
|
||||
0x26, // 9
|
||||
0x33 | SHIFT, // :
|
||||
0x33, // ;
|
||||
0x36 | SHIFT, // <
|
||||
0x2e, // =
|
||||
0x37 | SHIFT, // >
|
||||
0x38 | SHIFT, // ?
|
||||
0x1f | SHIFT, // @
|
||||
0x04 | SHIFT, // A
|
||||
0x05 | SHIFT, // B
|
||||
0x06 | SHIFT, // C
|
||||
0x07 | SHIFT, // D
|
||||
0x08 | SHIFT, // E
|
||||
0x09 | SHIFT, // F
|
||||
0x0a | SHIFT, // G
|
||||
0x0b | SHIFT, // H
|
||||
0x0c | SHIFT, // I
|
||||
0x0d | SHIFT, // J
|
||||
0x0e | SHIFT, // K
|
||||
0x0f | SHIFT, // L
|
||||
0x10 | SHIFT, // M
|
||||
0x11 | SHIFT, // N
|
||||
0x12 | SHIFT, // O
|
||||
0x13 | SHIFT, // P
|
||||
0x14 | SHIFT, // Q
|
||||
0x15 | SHIFT, // R
|
||||
0x16 | SHIFT, // S
|
||||
0x17 | SHIFT, // T
|
||||
0x18 | SHIFT, // U
|
||||
0x19 | SHIFT, // V
|
||||
0x1a | SHIFT, // W
|
||||
0x1b | SHIFT, // X
|
||||
0x1c | SHIFT, // Y
|
||||
0x1d | SHIFT, // Z
|
||||
0x2f, // [
|
||||
0x31, // bslash
|
||||
0x30, // ]
|
||||
0x23 | SHIFT, // ^
|
||||
0x2d | SHIFT, // _
|
||||
0x35, // `
|
||||
0x04, // a
|
||||
0x05, // b
|
||||
0x06, // c
|
||||
0x07, // d
|
||||
0x08, // e
|
||||
0x09, // f
|
||||
0x0a, // g
|
||||
0x0b, // h
|
||||
0x0c, // i
|
||||
0x0d, // j
|
||||
0x0e, // k
|
||||
0x0f, // l
|
||||
0x10, // m
|
||||
0x11, // n
|
||||
0x12, // o
|
||||
0x13, // p
|
||||
0x14, // q
|
||||
0x15, // r
|
||||
0x16, // s
|
||||
0x17, // t
|
||||
0x18, // u
|
||||
0x19, // v
|
||||
0x1a, // w
|
||||
0x1b, // x
|
||||
0x1c, // y
|
||||
0x1d, // z
|
||||
0x2f | SHIFT, // {
|
||||
0x31 | SHIFT, // |
|
||||
0x30 | SHIFT, // }
|
||||
0x35 | SHIFT, // ~
|
||||
0 // DEL
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -1,19 +1,23 @@
|
||||
#include "LedInterface.h"
|
||||
|
||||
|
||||
LedInterface::LedInterface() {
|
||||
|
||||
}
|
||||
|
||||
void LedInterface::RunSetup() {
|
||||
//Serial.println("Setting neopixel to black...");
|
||||
strip.setBrightness(0);
|
||||
strip.begin();
|
||||
strip.setPixelColor(0, strip.Color(0, 0, 0));
|
||||
strip.show();
|
||||
delay(100);
|
||||
strip.setBrightness(50);
|
||||
strip.setPixelColor(0, strip.Color(0, 0, 0));
|
||||
strip.show();
|
||||
#ifdef HAS_NEOPIXEL_LED
|
||||
strip.setBrightness(0);
|
||||
strip.begin();
|
||||
strip.setPixelColor(0, strip.Color(0, 0, 0));
|
||||
strip.show();
|
||||
//delay(100);
|
||||
strip.setBrightness(50);
|
||||
strip.setPixelColor(0, strip.Color(0, 0, 0));
|
||||
strip.show();
|
||||
#endif
|
||||
|
||||
this->initTime = millis();
|
||||
}
|
||||
|
||||
@@ -50,8 +54,10 @@ uint8_t LedInterface::getMode() {
|
||||
}
|
||||
|
||||
void LedInterface::setColor(int r, int g, int b) {
|
||||
strip.setPixelColor(0, strip.Color(r, g, b));
|
||||
strip.show();
|
||||
#ifdef HAS_NEOPIXEL_LED
|
||||
strip.setPixelColor(0, strip.Color(r, g, b));
|
||||
strip.show();
|
||||
#endif
|
||||
}
|
||||
|
||||
void LedInterface::sniffLed() {
|
||||
@@ -67,25 +73,29 @@ void LedInterface::ledOff() {
|
||||
}
|
||||
|
||||
void LedInterface::rainbow() {
|
||||
strip.setPixelColor(0, this->Wheel((0 * 256 / 100 + this->wheel_pos) % 256));
|
||||
strip.show();
|
||||
#ifdef HAS_NEOPIXEL_LED
|
||||
strip.setPixelColor(0, this->Wheel((0 * 256 / 100 + this->wheel_pos) % 256));
|
||||
strip.show();
|
||||
|
||||
this->current_fade_itter++;
|
||||
this->current_fade_itter++;
|
||||
|
||||
this->wheel_pos = this->wheel_pos - this->wheel_speed;
|
||||
if (this->wheel_pos < 0)
|
||||
this->wheel_pos = 255;
|
||||
this->wheel_pos = this->wheel_pos - this->wheel_speed;
|
||||
if (this->wheel_pos < 0)
|
||||
this->wheel_pos = 255;
|
||||
#endif
|
||||
}
|
||||
|
||||
uint32_t LedInterface::Wheel(byte WheelPos) {
|
||||
WheelPos = 255 - WheelPos;
|
||||
if(WheelPos < 85) {
|
||||
return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
|
||||
}
|
||||
if(WheelPos < 170) {
|
||||
WheelPos -= 85;
|
||||
return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
|
||||
}
|
||||
WheelPos -= 170;
|
||||
return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
|
||||
#ifdef HAS_NEOPIXEL_LED
|
||||
WheelPos = 255 - WheelPos;
|
||||
if(WheelPos < 85) {
|
||||
return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
|
||||
}
|
||||
if(WheelPos < 170) {
|
||||
WheelPos -= 85;
|
||||
return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
|
||||
}
|
||||
WheelPos -= 170;
|
||||
return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
|
||||
#endif
|
||||
}
|
||||
@@ -6,7 +6,9 @@
|
||||
#include "configs.h"
|
||||
#include "settings.h"
|
||||
#include <Arduino.h>
|
||||
#include <Adafruit_NeoPixel.h>
|
||||
#ifdef HAS_NEOPIXEL_LED
|
||||
#include <Adafruit_NeoPixel.h>
|
||||
#endif
|
||||
|
||||
#define Pixels 1
|
||||
|
||||
@@ -17,7 +19,10 @@
|
||||
#define MODE_CUSTOM 4
|
||||
|
||||
extern Settings settings_obj;
|
||||
extern Adafruit_NeoPixel strip;
|
||||
|
||||
#ifdef HAS_NEOPIXEL_LED
|
||||
extern Adafruit_NeoPixel strip;
|
||||
#endif
|
||||
|
||||
class LedInterface {
|
||||
|
||||
|
||||
@@ -5,6 +5,10 @@
|
||||
|
||||
#include "configs.h"
|
||||
|
||||
#ifdef MARAUDER_CARDPUTER
|
||||
#include "Keyboard.h"
|
||||
#endif
|
||||
|
||||
#ifdef HAS_SCREEN
|
||||
|
||||
#define BATTERY_ANALOG_ON 0
|
||||
@@ -16,11 +20,21 @@
|
||||
|
||||
#ifdef HAS_BUTTONS
|
||||
#include "Switches.h"
|
||||
extern Switches u_btn;
|
||||
extern Switches d_btn;
|
||||
extern Switches l_btn;
|
||||
extern Switches r_btn;
|
||||
extern Switches c_btn;
|
||||
#if (U_BTN >= 0)
|
||||
extern Switches u_btn;
|
||||
#endif
|
||||
#if (D_BTN >= 0)
|
||||
extern Switches d_btn;
|
||||
#endif
|
||||
#if (L_BTN >= 0)
|
||||
extern Switches l_btn;
|
||||
#endif
|
||||
#if (R_BTN >= 0)
|
||||
extern Switches r_btn;
|
||||
#endif
|
||||
#if (C_BTN >= 0)
|
||||
extern Switches c_btn;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
extern WiFiScan wifi_scan_obj;
|
||||
@@ -72,6 +86,13 @@ extern Settings settings_obj;
|
||||
#define STATUS_GPS 32
|
||||
#define GPS_MENU 33
|
||||
#define DISABLE_TOUCH 34
|
||||
#define FLIPPER 35
|
||||
#define BLANK 36
|
||||
#define PINESCAN_SNIFF 37 // Use blanks icon
|
||||
#define MULTISSID_SNIFF 37 // Use blanks icon
|
||||
#define JOINED 38
|
||||
#define FORCE 39
|
||||
#define FUNNY_BEACON 40
|
||||
|
||||
PROGMEM void my_disp_flush(lv_disp_drv_t *disp, const lv_area_t *area, lv_color_t *color_p);
|
||||
PROGMEM bool my_touchpad_read(lv_indev_drv_t * indev_driver, lv_indev_data_t * data);
|
||||
@@ -80,9 +101,13 @@ PROGMEM static lv_disp_buf_t disp_buf;
|
||||
PROGMEM static lv_color_t buf[LV_HOR_RES_MAX * 10];
|
||||
|
||||
PROGMEM static void ta_event_cb(lv_obj_t * ta, lv_event_t event);
|
||||
PROGMEM static void join_wifi_keyboard_event_cb(lv_obj_t * keyboard, lv_event_t event);
|
||||
PROGMEM static void start_ap_keyboard_event_cb(lv_obj_t * keyboard, lv_event_t event);
|
||||
PROGMEM static void add_ssid_keyboard_event_cb(lv_obj_t * keyboard, lv_event_t event);
|
||||
PROGMEM static void html_list_cb(lv_obj_t * btn, lv_event_t event);
|
||||
PROGMEM static void ap_list_cb(lv_obj_t * btn, lv_event_t event);
|
||||
PROGMEM static void ap_info_list_cb(lv_obj_t * btn, lv_event_t event);
|
||||
PROGMEM static void at_list_cb(lv_obj_t * btn, lv_event_t event);
|
||||
PROGMEM static void station_list_cb(lv_obj_t * btn, lv_event_t event);
|
||||
PROGMEM static void setting_dropdown_cb(lv_obj_t * btn, lv_event_t event);
|
||||
|
||||
@@ -94,7 +119,7 @@ struct Menu;
|
||||
|
||||
// Individual Nodes of a menu
|
||||
|
||||
struct MenuNode {
|
||||
/*struct MenuNode {
|
||||
String name;
|
||||
bool command;
|
||||
uint16_t color;
|
||||
@@ -102,6 +127,16 @@ struct MenuNode {
|
||||
TFT_eSPI_Button* button;
|
||||
bool selected;
|
||||
std::function<void()> callable;
|
||||
};*/
|
||||
|
||||
struct MenuNode {
|
||||
String name;
|
||||
bool command;
|
||||
uint8_t color;
|
||||
uint8_t icon;
|
||||
TFT_eSPI_Button* button;
|
||||
bool selected;
|
||||
std::function<void()> callable;
|
||||
};
|
||||
|
||||
// Full Menus
|
||||
@@ -109,7 +144,7 @@ struct Menu {
|
||||
String name;
|
||||
LinkedList<MenuNode>* list;
|
||||
Menu * parentMenu;
|
||||
uint8_t selected = 0;
|
||||
uint16_t selected = 0;
|
||||
};
|
||||
|
||||
|
||||
@@ -119,16 +154,22 @@ class MenuFunctions
|
||||
|
||||
String u_result = "";
|
||||
|
||||
|
||||
float _graph_scale = 1.0;
|
||||
uint32_t initTime = 0;
|
||||
uint8_t menu_start_index = 0;
|
||||
int menu_start_index = 0;
|
||||
uint8_t mini_kb_index = 0;
|
||||
uint8_t old_gps_sat_count = 0;
|
||||
uint8_t max_graph_value = 0;
|
||||
|
||||
// Main menu stuff
|
||||
Menu mainMenu;
|
||||
|
||||
Menu wifiMenu;
|
||||
Menu bluetoothMenu;
|
||||
#ifdef HAS_GPS
|
||||
Menu gpsMenu; // H4W9 Added GPS Menu option to Main Menu
|
||||
#endif
|
||||
Menu badusbMenu;
|
||||
Menu deviceMenu;
|
||||
|
||||
@@ -139,23 +180,35 @@ class MenuFunctions
|
||||
Menu updateMenu;
|
||||
Menu settingsMenu;
|
||||
Menu specSettingMenu;
|
||||
Menu infoMenu;
|
||||
Menu languageMenu;
|
||||
Menu sdDeleteMenu;
|
||||
|
||||
// WiFi menu stuff
|
||||
Menu wifiSnifferMenu;
|
||||
Menu wifiScannerMenu;
|
||||
Menu wifiAttackMenu;
|
||||
#ifdef HAS_GPS
|
||||
Menu wardrivingMenu;
|
||||
#endif
|
||||
Menu wifiGeneralMenu;
|
||||
Menu wifiAPMenu;
|
||||
#ifndef HAS_ILI9341
|
||||
Menu wifiStationMenu;
|
||||
Menu wifiIPMenu;
|
||||
Menu ssidsMenu;
|
||||
#ifdef HAS_BT
|
||||
Menu airtagMenu;
|
||||
#endif
|
||||
//#ifndef HAS_ILI9341
|
||||
Menu wifiStationMenu;
|
||||
//#endif
|
||||
|
||||
// WiFi General Menu
|
||||
Menu htmlMenu;
|
||||
Menu miniKbMenu;
|
||||
Menu saveFileMenu;
|
||||
Menu genAPMacMenu;
|
||||
Menu cloneAPMacMenu;
|
||||
Menu setMacMenu;
|
||||
Menu selectProbeSSIDsMenu;
|
||||
|
||||
// Bluetooth menu stuff
|
||||
Menu bluetoothSnifferMenu;
|
||||
@@ -164,26 +217,48 @@ class MenuFunctions
|
||||
// Settings things menus
|
||||
Menu generateSSIDsMenu;
|
||||
|
||||
Menu evilPortalMenu;
|
||||
|
||||
static void lv_tick_handler();
|
||||
|
||||
// Menu icons
|
||||
|
||||
|
||||
|
||||
void addNodes(Menu* menu, String name, uint16_t color, Menu* child, int place, std::function<void()> callable, bool selected = false, String command = "");
|
||||
void setupSDFileList(bool update = false);
|
||||
void buildSDFileMenu(bool update = false);
|
||||
void displayMenuButtons();
|
||||
uint16_t getColor(uint16_t color);
|
||||
void drawAvgLine(int16_t value);
|
||||
void drawMaxLine(int16_t value, uint16_t color);
|
||||
void drawMaxLine(uint8_t value, uint16_t color);
|
||||
float calculateGraphScale(int16_t value);
|
||||
float calculateGraphScale(uint8_t value);
|
||||
float graphScaleCheck(const int16_t array[TFT_WIDTH]);
|
||||
#ifndef HAS_DUAL_BAND
|
||||
float graphScaleCheckSmall(const uint8_t array[MAX_CHANNEL]);
|
||||
#else
|
||||
float graphScaleCheckSmall(const uint8_t array[DUAL_BAND_CHANNELS]);
|
||||
#endif
|
||||
void drawGraph(int16_t *values);
|
||||
void drawGraphSmall(uint8_t *values);
|
||||
void renderGraphUI(uint8_t scan_mode = 0);
|
||||
//void addNodes(Menu* menu, String name, uint16_t color, Menu* child, int place, std::function<void()> callable, bool selected = false, String command = "");
|
||||
void addNodes(Menu* menu, String name, uint8_t color, Menu* child, int place, std::function<void()> callable, bool selected = false, String command = "");
|
||||
void battery(bool initial = false);
|
||||
void battery2(bool initial = false);
|
||||
void showMenuList(Menu* menu, int layer);
|
||||
String callSetting(String key);
|
||||
void runBoolSetting(String ley);
|
||||
void displaySetting(String key, Menu* menu, int index);
|
||||
void buttonSelected(uint8_t b, int8_t x = -1);
|
||||
void buttonNotSelected(uint8_t b, int8_t x = -1);
|
||||
#if (!defined(HAS_ILI9341) && defined(HAS_BUTTONS))
|
||||
void miniKeyboard(Menu * targetMenu);
|
||||
#endif
|
||||
void buttonSelected(int b, int x = -1);
|
||||
void buttonNotSelected(int b, int x = -1);
|
||||
//#if (!defined(HAS_ILI9341) && defined(HAS_BUTTONS))
|
||||
String miniKeyboard(Menu * targetMenu, bool do_pass = false);
|
||||
//#endif
|
||||
|
||||
uint8_t updateTouch(uint16_t *x, uint16_t *y, uint16_t threshold = 600);
|
||||
#ifdef MARAUDER_CARDPUTER
|
||||
Keyboard_Class M5CardputerKeyboard = Keyboard_Class();
|
||||
bool isKeyPressed(char c);
|
||||
#endif
|
||||
|
||||
public:
|
||||
MenuFunctions();
|
||||
@@ -197,12 +272,18 @@ class MenuFunctions
|
||||
Menu loadSSIDsMenu;
|
||||
Menu saveAPsMenu;
|
||||
Menu loadAPsMenu;
|
||||
Menu saveATsMenu;
|
||||
Menu loadATsMenu;
|
||||
|
||||
#ifdef HAS_GPS
|
||||
// GPS Menu
|
||||
Menu gpsInfoMenu;
|
||||
Menu gpsPOIMenu;
|
||||
#endif
|
||||
|
||||
Menu infoMenu;
|
||||
Menu apInfoMenu;
|
||||
|
||||
Ticker tick;
|
||||
|
||||
uint16_t x = -1, y = -1;
|
||||
@@ -212,17 +293,19 @@ class MenuFunctions
|
||||
|
||||
String loaded_file = "";
|
||||
|
||||
void joinWiFiGFX(String essid, bool start_ap = false);
|
||||
void setGraphScale(float scale);
|
||||
void initLVGL();
|
||||
void deinitLVGL();
|
||||
void selectEPHTMLGFX();
|
||||
void updateStatusBar();
|
||||
void addSSIDGFX();
|
||||
void addAPGFX();
|
||||
void addAPGFX(String type = "AP");
|
||||
void addStationGFX();
|
||||
void buildButtons(Menu* menu, int starting_index = 0, String button_name = "");
|
||||
void changeMenu(Menu* menu);
|
||||
void changeMenu(Menu* menu, bool simple_change = false);
|
||||
void drawStatusBar();
|
||||
void displayCurrentMenu(uint8_t start_index = 0);
|
||||
void displayCurrentMenu(int start_index = 0);
|
||||
void main(uint32_t currentTime);
|
||||
void RunSetup();
|
||||
void orientDisplay();
|
||||
@@ -231,3 +314,4 @@ class MenuFunctions
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
@@ -1,6 +1,10 @@
|
||||
#include "SDInterface.h"
|
||||
#include "lang_var.h"
|
||||
|
||||
#ifdef HAS_C5_SD
|
||||
SDInterface::SDInterface(SPIClass* spi, int cs)
|
||||
: _spi(spi), _cs(cs) {}
|
||||
#endif
|
||||
|
||||
bool SDInterface::initSD() {
|
||||
#ifdef HAS_SD
|
||||
@@ -21,7 +25,7 @@ bool SDInterface::initSD() {
|
||||
pinMode(SD_CS, OUTPUT);
|
||||
|
||||
delay(10);
|
||||
#if defined(MARAUDER_M5STICKC)
|
||||
#if (defined(MARAUDER_M5STICKC)) || (defined(HAS_CYD_TOUCH)) || (defined(MARAUDER_CARDPUTER))
|
||||
/* Set up SPI SD Card using external pin header
|
||||
StickCPlus Header - SPI SD Card Reader
|
||||
3v3 - 3v3
|
||||
@@ -31,10 +35,24 @@ bool SDInterface::initSD() {
|
||||
G26 - MOSI
|
||||
- CS (jumper to SD Card GND Pin)
|
||||
*/
|
||||
enum { SPI_SCK = 0, SPI_MISO = 36, SPI_MOSI = 26 };
|
||||
this->spiExt = new SPIClass();
|
||||
#if defined(MARAUDER_M5STICKC)
|
||||
enum { SPI_SCK = 0, SPI_MISO = 36, SPI_MOSI = 26 };
|
||||
#elif defined(HAS_CYD_TOUCH) || defined(MARAUDER_CARDPUTER) || defined(HAS_SEPARATE_SD)
|
||||
enum { SPI_SCK = SD_SCK, SPI_MISO = SD_MISO, SPI_MOSI = SD_MOSI };
|
||||
#else
|
||||
enum { SPI_SCK = 0, SPI_MISO = 36, SPI_MOSI = 26 };
|
||||
#endif
|
||||
#ifndef MARAUDER_CARDPUTER
|
||||
this->spiExt = new SPIClass();
|
||||
#else
|
||||
this->spiExt = new SPIClass(FSPI);
|
||||
#endif
|
||||
Serial.println("Using external SPI configuration...");
|
||||
this->spiExt->begin(SPI_SCK, SPI_MISO, SPI_MOSI, SD_CS);
|
||||
if (!SD.begin(SD_CS, *(this->spiExt))) {
|
||||
#elif defined(HAS_C5_SD)
|
||||
Serial.println("Using C5 SD configuration...");
|
||||
if (!SD.begin(SD_CS, *_spi)) {
|
||||
#else
|
||||
if (!SD.begin(SD_CS)) {
|
||||
#endif
|
||||
@@ -45,19 +63,9 @@ bool SDInterface::initSD() {
|
||||
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;
|
||||
|
||||
@@ -82,7 +90,7 @@ bool SDInterface::initSD() {
|
||||
|
||||
this->sd_files = new LinkedList<String>();
|
||||
|
||||
this->sd_files->add("Back");
|
||||
//this->sd_files->add("Back");
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -157,7 +165,10 @@ void SDInterface::listDir(String str_dir){
|
||||
}
|
||||
}
|
||||
|
||||
void SDInterface::runUpdate() {
|
||||
void SDInterface::runUpdate(String file_name) {
|
||||
if (file_name == "")
|
||||
file_name = "/update.bin";
|
||||
|
||||
#ifdef HAS_SCREEN
|
||||
display_obj.tft.setTextWrap(false);
|
||||
display_obj.tft.setFreeFont(NULL);
|
||||
@@ -165,16 +176,18 @@ void SDInterface::runUpdate() {
|
||||
display_obj.tft.setTextSize(1);
|
||||
display_obj.tft.setTextColor(TFT_WHITE);
|
||||
|
||||
display_obj.tft.println(F(text15));
|
||||
display_obj.tft.println("Opening " + file_name + "...");
|
||||
#endif
|
||||
File updateBin = SD.open("/update.bin");
|
||||
|
||||
File updateBin = SD.open(file_name);
|
||||
|
||||
if (updateBin) {
|
||||
if(updateBin.isDirectory()){
|
||||
#ifdef HAS_SCREEN
|
||||
display_obj.tft.setTextColor(TFT_RED);
|
||||
display_obj.tft.println(F(text_table2[0]));
|
||||
#endif
|
||||
Serial.println(F("Error, could not find \"update.bin\""));
|
||||
Serial.println("Error, could not find \"" + file_name + "\"");
|
||||
#ifdef HAS_SCREEN
|
||||
display_obj.tft.setTextColor(TFT_WHITE);
|
||||
#endif
|
||||
@@ -209,6 +222,15 @@ void SDInterface::runUpdate() {
|
||||
#ifdef HAS_SCREEN
|
||||
display_obj.tft.println(F(text_table2[3]));
|
||||
#endif
|
||||
const esp_partition_t *running = esp_ota_get_running_partition();
|
||||
Serial.printf("Currently running: %s at 0x%X\n", running->label, running->address);
|
||||
|
||||
const esp_partition_t *next = esp_ota_get_next_update_partition(NULL);
|
||||
Serial.printf("Next OTA partition: %s at 0x%X\n", next->label, next->address);
|
||||
|
||||
esp_err_t result = esp_ota_set_boot_partition(next);
|
||||
Serial.printf("esp_ota_set_boot_partition result: %s\n", esp_err_to_name(result));
|
||||
|
||||
Serial.println(F("rebooting..."));
|
||||
//SD.remove("/update.bin");
|
||||
delay(1000);
|
||||
|
||||
@@ -6,13 +6,23 @@
|
||||
#include "configs.h"
|
||||
|
||||
#include "settings.h"
|
||||
#ifdef HAS_C5_SD
|
||||
#include "FS.h"
|
||||
#endif
|
||||
#include "SD.h"
|
||||
#ifdef HAS_C5_SD
|
||||
#include "SPI.h"
|
||||
#endif
|
||||
#include "Buffer.h"
|
||||
#ifdef HAS_SCREEN
|
||||
#include "Display.h"
|
||||
#endif
|
||||
#include <Update.h>
|
||||
|
||||
#include "esp_ota_ops.h"
|
||||
#include "esp_partition.h"
|
||||
#include "esp_err.h"
|
||||
|
||||
extern Buffer buffer_obj;
|
||||
extern Settings settings_obj;
|
||||
#ifdef HAS_SCREEN
|
||||
@@ -26,12 +36,19 @@ extern Settings settings_obj;
|
||||
class SDInterface {
|
||||
|
||||
private:
|
||||
#if defined(MARAUDER_M5STICKC)
|
||||
SPIClass *spiExt;
|
||||
#endif
|
||||
#if (defined(MARAUDER_M5STICKC) || defined(HAS_CYD_TOUCH) || defined(MARAUDER_CARDPUTER))
|
||||
SPIClass *spiExt;
|
||||
#elif defined(HAS_C5_SD)
|
||||
SPIClass* _spi;
|
||||
int _cs;
|
||||
#endif
|
||||
bool checkDetectPin();
|
||||
|
||||
public:
|
||||
#ifdef HAS_C5_SD
|
||||
SDInterface(SPIClass* spi, int cs);
|
||||
#endif
|
||||
|
||||
uint8_t cardType;
|
||||
//uint64_t cardSizeBT;
|
||||
//uint64_t cardSizeKB;
|
||||
@@ -48,7 +65,7 @@ class SDInterface {
|
||||
void listDir(String str_dir);
|
||||
void listDirToLinkedList(LinkedList<String>* file_names, String str_dir = "/", String ext = "");
|
||||
File getFile(String path);
|
||||
void runUpdate();
|
||||
void runUpdate(String file_name = "");
|
||||
void performUpdate(Stream &updateSource, size_t updateSize);
|
||||
void main();
|
||||
bool removeFile(String file_path);
|
||||
|
||||
@@ -4,19 +4,35 @@
|
||||
#define WiFiScan_h
|
||||
|
||||
#include "configs.h"
|
||||
#include "utils.h"
|
||||
|
||||
#include <ArduinoJson.h>
|
||||
#include <algorithm>
|
||||
#include <vector>
|
||||
|
||||
#ifdef HAS_BT
|
||||
#include <NimBLEDevice.h>
|
||||
#include <NimBLEDevice.h> // 1.3.8, 2.3.2
|
||||
#endif
|
||||
|
||||
#ifdef HAS_DUAL_BAND
|
||||
extern "C" {
|
||||
#include "esp_netif.h"
|
||||
#include "esp_netif_net_stack.h"
|
||||
}
|
||||
#endif
|
||||
|
||||
#include <WiFi.h>
|
||||
#include <ESP32Ping.h>
|
||||
#include "EvilPortal.h"
|
||||
#include <math.h>
|
||||
#include "esp_wifi.h"
|
||||
#include "esp_wifi_types.h"
|
||||
#include <esp_timer.h>
|
||||
#include <lwip/etharp.h>
|
||||
#include <lwip/ip_addr.h>
|
||||
#ifdef HAS_DUAL_BAND
|
||||
#include "esp_system.h"
|
||||
#endif
|
||||
#ifdef HAS_BT
|
||||
#include "esp_bt.h"
|
||||
#endif
|
||||
@@ -35,7 +51,7 @@
|
||||
#endif
|
||||
#include "settings.h"
|
||||
#include "Assets.h"
|
||||
#ifdef MARAUDER_FLIPPER
|
||||
#ifdef HAS_FLIPPER_LED
|
||||
#include "flipperLED.h"
|
||||
#elif defined(XIAO_ESP32_S3)
|
||||
#include "xiaoLED.h"
|
||||
@@ -92,10 +108,78 @@
|
||||
#define BT_ATTACK_SAMSUNG_SPAM 39
|
||||
#define WIFI_SCAN_GPS_NMEA 40
|
||||
#define BT_ATTACK_GOOGLE_SPAM 41
|
||||
#define BT_ATTACK_FLIPPER_SPAM 42
|
||||
#define BT_SCAN_AIRTAG 43
|
||||
#define BT_SPOOF_AIRTAG 44
|
||||
#define BT_SCAN_FLIPPER 45
|
||||
#define WIFI_SCAN_CHAN_ANALYZER 46
|
||||
#define BT_SCAN_ANALYZER 47
|
||||
#define WIFI_SCAN_PACKET_RATE 48
|
||||
#define WIFI_SCAN_AP_STA 49
|
||||
#define WIFI_SCAN_PINESCAN 50
|
||||
#define WIFI_SCAN_MULTISSID 51
|
||||
#define WIFI_CONNECTED 52
|
||||
#define WIFI_PING_SCAN 53
|
||||
#define WIFI_PORT_SCAN_ALL 54
|
||||
#define GPS_TRACKER 55
|
||||
#define WIFI_ATTACK_BAD_MSG 56
|
||||
#define WIFI_ATTACK_BAD_MSG_TARGETED 57
|
||||
#define WIFI_SCAN_TELNET 58
|
||||
#define WIFI_SCAN_SSH 59
|
||||
#define WIFI_ARP_SCAN 60
|
||||
#define WIFI_ATTACK_SLEEP 61
|
||||
#define WIFI_ATTACK_SLEEP_TARGETED 62
|
||||
#define GPS_POI 63
|
||||
#define WIFI_SCAN_DNS 64
|
||||
#define WIFI_SCAN_HTTP 65
|
||||
#define WIFI_SCAN_HTTPS 66
|
||||
#define WIFI_SCAN_SMTP 67
|
||||
#define WIFI_SCAN_RDP 68
|
||||
#define WIFI_HOSTSPOT 69 // Nice
|
||||
#define BT_SCAN_AIRTAG_MON 70
|
||||
#define WIFI_SCAN_CHAN_ACT 71
|
||||
|
||||
#define GRAPH_REFRESH 100
|
||||
#define WIFI_ATTACK_FUNNY_BEACON 99
|
||||
|
||||
#define MAX_CHANNEL 14
|
||||
#define BASE_MULTIPLIER 4
|
||||
|
||||
#define ANALYZER_NAME_REFRESH 100 // Number of events to refresh the name
|
||||
|
||||
// PineScan and Multi SSID
|
||||
#define MULTISSID_THRESHOLD 3 // Threshold For Multi SSID
|
||||
#define MAX_MULTISSID_ENTRIES 100 // Max number of confirmed MultiSSIDs to store
|
||||
#define MAX_AP_ENTRIES 100 // Max number of APs to track for analysis
|
||||
#define MAX_DISPLAY_ENTRIES 1 // Max Unique MACs to display
|
||||
#define MAX_PINESCAN_ENTRIES 100 // PineScan Max Entries
|
||||
|
||||
#define MAX_CHANNEL 14
|
||||
|
||||
#define MAX_PORT 65535
|
||||
|
||||
#define WIFI_SECURITY_OPEN 0
|
||||
#define WIFI_SECURITY_WEP 1
|
||||
#define WIFI_SECURITY_WPA 2
|
||||
#define WIFI_SECURITY_WPA2 3
|
||||
#define WIFI_SECURITY_WPA3 4
|
||||
#define WIFI_SECURITY_WPA_WPA2_MIXED 5
|
||||
#define WIFI_SECURITY_WPA2_ENTERPRISE 6
|
||||
#define WIFI_SECURITY_WPA3_ENTERPRISE 7
|
||||
#define WIFI_SECURITY_WAPI 8
|
||||
#define WIFI_SECURITY_UNKNOWN 255
|
||||
|
||||
#define WPS_CONFIG_USBA 0x0001
|
||||
#define WPS_CONFIG_ETHERNET 0x0002
|
||||
#define WPS_CONFIG_LABEL 0x0004
|
||||
#define WPS_CONFIG_DISPLAY 0x0008
|
||||
#define WPS_CONFIG_EXT_NFC_TOKEN 0x0010
|
||||
#define WPS_CONFIG_INT_NFC_TOKEN 0x0020
|
||||
#define WPS_CONFIG_NFC_INTERFACE 0x0040
|
||||
#define WPS_CONFIG_PUSH_BUTTON 0x0080
|
||||
#define WPS_CONFIG_KEYPAD 0x0100
|
||||
#define WPS_CONFIG_VIRT_PUSH_BUTTON 0x1000
|
||||
#define WPS_CONFIG_PHY_PUSH_BUTTON 0x2000
|
||||
#define WPS_CONFIG_VIRT_DISPLAY 0x4000
|
||||
#define WPS_CONFIG_PHY_DISPLAY 0x8000
|
||||
|
||||
extern EvilPortal evil_portal_obj;
|
||||
|
||||
@@ -113,7 +197,7 @@ extern Buffer buffer_obj;
|
||||
extern BatteryInterface battery_obj;
|
||||
#endif
|
||||
extern Settings settings_obj;
|
||||
#ifdef MARAUDER_FLIPPER
|
||||
#ifdef HAS_FLIPPER_LED
|
||||
extern flipperLED flipper_led;
|
||||
#elif defined(XIAO_ESP32_S3)
|
||||
extern xiaoLED xiao_led;
|
||||
@@ -125,45 +209,49 @@ extern Settings settings_obj;
|
||||
|
||||
esp_err_t esp_wifi_80211_tx(wifi_interface_t ifx, const void *buffer, int len, bool en_sys_seq);
|
||||
|
||||
/*struct ssid {
|
||||
String essid;
|
||||
uint8_t channel;
|
||||
int bssid[6];
|
||||
bool selected;
|
||||
};*/
|
||||
#ifdef HAS_DUAL_BAND
|
||||
esp_err_t esp_base_mac_addr_set(uint8_t *Mac);
|
||||
#endif
|
||||
|
||||
/*struct AccessPoint {
|
||||
String essid;
|
||||
int channel;
|
||||
int bssid[6];
|
||||
bool selected;
|
||||
LinkedList<char>* beacon;
|
||||
int rssi;
|
||||
LinkedList<int>* stations;
|
||||
};*/
|
||||
|
||||
|
||||
struct mac_addr {
|
||||
unsigned char bytes[6];
|
||||
struct AirTag {
|
||||
String mac; // MAC address of the AirTag
|
||||
std::vector<uint8_t> payload; // Payload data
|
||||
uint16_t payloadSize;
|
||||
bool selected;
|
||||
int8_t rssi;
|
||||
uint32_t last_seen;
|
||||
};
|
||||
|
||||
struct Station {
|
||||
uint8_t mac[6];
|
||||
bool selected;
|
||||
struct Flipper {
|
||||
String mac;
|
||||
String name;
|
||||
};
|
||||
|
||||
#ifdef HAS_PSRAM
|
||||
extern struct mac_addr* mac_history;
|
||||
#endif
|
||||
|
||||
class WiFiScan
|
||||
{
|
||||
private:
|
||||
// Wardriver thanks to https://github.com/JosephHewitt
|
||||
struct mac_addr mac_history[mac_history_len];
|
||||
int arp_count = 0;
|
||||
#ifndef HAS_PSRAM
|
||||
struct mac_addr mac_history[mac_history_len];
|
||||
#endif
|
||||
|
||||
uint32_t chanActTime = 0;
|
||||
|
||||
uint8_t ap_mac[6] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
|
||||
uint8_t sta_mac[6] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
|
||||
|
||||
uint8_t dual_band_channels[DUAL_BAND_CHANNELS] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 32, 36, 40, 44, 48, 52, 56, 60, 64, 68, 72, 76, 80, 84, 88, 92, 96, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 144, 149, 153, 157, 161, 165, 169, 173, 177};
|
||||
|
||||
uint8_t dual_band_channel_index = 0;
|
||||
|
||||
// Settings
|
||||
uint mac_history_cursor = 0;
|
||||
uint8_t channel_hop_delay = 1;
|
||||
bool force_pmkid = false;
|
||||
bool force_probe = false;
|
||||
bool save_pcap = false;
|
||||
|
||||
int x_pos; //position along the graph x axis
|
||||
float y_pos_x; //current graph y axis position of X value
|
||||
@@ -180,6 +268,8 @@ class WiFiScan
|
||||
|
||||
bool wsl_bypass_enabled = false;
|
||||
|
||||
bool scan_complete = false;
|
||||
|
||||
//int num_beacon = 0; // GREEN
|
||||
//int num_probe = 0; // BLUE
|
||||
//int num_deauth = 0; // RED
|
||||
@@ -208,6 +298,22 @@ class WiFiScan
|
||||
"08 and hurt you"
|
||||
};
|
||||
|
||||
// H4W9 added Funny Beacon Spam
|
||||
const char* funny_beacon[12] = {
|
||||
"Abraham Linksys",
|
||||
"Benjamin FrankLAN",
|
||||
"Dora the Internet Explorer",
|
||||
"FBI Surveillance Van 4",
|
||||
"Get Off My LAN",
|
||||
"Loading...",
|
||||
"Martin Router King",
|
||||
"404 Wi-Fi Unavailable",
|
||||
"Test Wi-Fi Please Ignore",
|
||||
"This LAN is My LAN",
|
||||
"Titanic Syncing",
|
||||
"Winternet is Coming"
|
||||
};
|
||||
|
||||
char* prefix = "G";
|
||||
|
||||
typedef struct
|
||||
@@ -226,6 +332,74 @@ class WiFiScan
|
||||
WifiMgmtHdr hdr;
|
||||
} wifi_ieee80211_packet_t;
|
||||
|
||||
// Tracking structures for PineScan (similar to MultiSSID)
|
||||
struct PineScanTracker {
|
||||
uint8_t mac[6];
|
||||
bool suspicious_oui;
|
||||
bool tag_and_susp_cap;
|
||||
uint8_t channel;
|
||||
int8_t rssi;
|
||||
bool reported;
|
||||
};
|
||||
|
||||
// For confirmed Pineapple devices
|
||||
struct ConfirmedPineScan {
|
||||
uint8_t mac[6];
|
||||
String detection_type;
|
||||
String essid;
|
||||
uint8_t channel;
|
||||
int8_t rssi;
|
||||
bool displayed;
|
||||
};
|
||||
LinkedList<PineScanTracker>* pinescan_trackers;
|
||||
LinkedList<ConfirmedPineScan>* confirmed_pinescan;
|
||||
bool pinescan_list_full_reported;
|
||||
|
||||
// Security Conditions For Pineapple detection
|
||||
enum SecurityCondition {
|
||||
NONE = 0x00,
|
||||
SUSPICIOUS_WHEN_OPEN = 0x01,
|
||||
SUSPICIOUS_WHEN_PROTECTED = 0x02,
|
||||
SUSPICIOUS_ALWAYS = 0x04
|
||||
};
|
||||
|
||||
// SuspiciousVendor struct
|
||||
struct SuspiciousVendor {
|
||||
const char* vendor_name;
|
||||
uint8_t security_flags;
|
||||
uint32_t ouis[20]; // Array of OUIs (max 20 per vendor)
|
||||
uint8_t oui_count; // Number of OUIs for this vendor
|
||||
};
|
||||
|
||||
// Declare the table for Pineapple
|
||||
static const SuspiciousVendor suspicious_vendors[];
|
||||
static const int NUM_SUSPICIOUS_VENDORS;
|
||||
|
||||
// Track for AP list limit (Uninitialised, Done in RunSetup)
|
||||
bool ap_list_full_reported;
|
||||
|
||||
// MULTI SSID STRUCTS
|
||||
|
||||
struct MultiSSIDTracker {
|
||||
uint8_t mac[6];
|
||||
uint16_t ssid_hashes[MULTISSID_THRESHOLD];
|
||||
uint8_t unique_ssid_count;
|
||||
bool reported;
|
||||
};
|
||||
|
||||
// New struct for confirmed MultiSSID devices
|
||||
struct ConfirmedMultiSSID {
|
||||
uint8_t mac[6];
|
||||
String essid;
|
||||
uint8_t channel;
|
||||
int8_t rssi;
|
||||
uint8_t ssid_count;
|
||||
bool displayed;
|
||||
};
|
||||
LinkedList<MultiSSIDTracker>* multissid_trackers;
|
||||
LinkedList<ConfirmedMultiSSID>* confirmed_multissid;
|
||||
bool multissid_list_full_reported;
|
||||
|
||||
// barebones packet
|
||||
uint8_t packet[128] = { 0x80, 0x00, 0x00, 0x00, //Frame Control, Duration
|
||||
/*4*/ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, //Destination address
|
||||
@@ -257,12 +431,72 @@ class WiFiScan
|
||||
0xf0, 0xff, 0x02, 0x00
|
||||
};
|
||||
|
||||
uint8_t eapol_packet_bad_msg1[153] = {
|
||||
0x08, 0x02, // Frame Control (EAPOL)
|
||||
0x00, 0x00, // Duration
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // Destination (Broadcast)
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Source (BSSID)
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // BSSID
|
||||
0x30, 0x00, // Sequence Control
|
||||
/* LLC / SNAP */
|
||||
0xaa, 0xaa, 0x03, 0x00, 0x00, 0x00,
|
||||
0x88, 0x8e, // Ethertype = EAPOL
|
||||
/* -------- 802.1X Header -------- */
|
||||
0x02, // Version 802.1X‑2004
|
||||
0x03, // Type Key
|
||||
0x00, 0x75, // Length 117 bytes
|
||||
/* -------- EAPOL‑Key frame body (117 B) -------- */
|
||||
0x02, // Desc Type 2 (AES/CCMP)
|
||||
0x00, 0xCA, // Key Info (Install|Ack…)
|
||||
0x00, 0x10, // Key Length = 16
|
||||
/* Replay Counter (8) */
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
|
||||
/* Nonce (32) */
|
||||
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
|
||||
0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
|
||||
0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
|
||||
0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
|
||||
/* Key IV (16) */
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* Key RSC (8) */
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* Key ID (8) */
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* Key MIC (16) */
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* Key Data Len (2) */
|
||||
0x00, 0x16,
|
||||
/* Key Data (22 B) */
|
||||
0xDD, 0x14, // Vendor‑specific (PMKID IE)
|
||||
0x00, 0x0F, 0xAC, 0x04, // OUI + Type (PMKID)
|
||||
/* PMKID (16 byte zero) */
|
||||
0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88,
|
||||
0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0x11
|
||||
};
|
||||
|
||||
uint8_t association_packet[200] = {
|
||||
0x00, 0x10, // Frame Control (Association Request) PM=1
|
||||
0x3a, 0x01, // Duration
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // Destination (Broadcast)
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Source (Fake Source or BSSID)
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // BSSID
|
||||
0x00, 0x00, // Sequence Control
|
||||
0x31, 0x00, // Capability Information (PM=1)
|
||||
0x0a, 0x00, // Listen Interval
|
||||
0x00, // SSID tag
|
||||
0x00, // SSID length
|
||||
};
|
||||
|
||||
enum EBLEPayloadType
|
||||
{
|
||||
Microsoft,
|
||||
Apple,
|
||||
Samsung,
|
||||
Google
|
||||
Google,
|
||||
FlipperZero,
|
||||
Airtag
|
||||
};
|
||||
|
||||
#ifdef HAS_BT
|
||||
@@ -285,18 +519,37 @@ class WiFiScan
|
||||
NimBLEAdvertisementData GetUniversalAdvertisementData(EBLEPayloadType type);
|
||||
#endif
|
||||
|
||||
void fullARP();
|
||||
bool readARP(IPAddress targ_ip);
|
||||
bool singleARP(IPAddress ip_addr);
|
||||
void pingScan(uint8_t scan_mode = WIFI_PING_SCAN);
|
||||
void portScan(uint8_t scan_mode = WIFI_PORT_SCAN_ALL, uint16_t targ_port = 22);
|
||||
bool isHostAlive(IPAddress ip);
|
||||
bool checkHostPort(IPAddress ip, uint16_t port, uint16_t timeout = 100);
|
||||
String extractManufacturer(const uint8_t* payload);
|
||||
int checkMatchAP(char addr[]);
|
||||
bool beaconHasWPS(const uint8_t* payload, int len);
|
||||
uint8_t getSecurityType(const uint8_t* beacon, uint16_t len);
|
||||
void addAnalyzerValue(int16_t value, int rssi_avg, int16_t target_array[], int array_size);
|
||||
bool seen_mac(unsigned char* mac);
|
||||
bool mac_cmp(struct mac_addr addr1, struct mac_addr addr2);
|
||||
void save_mac(unsigned char* mac);
|
||||
void clearMacHistory();
|
||||
void executeWarDrive();
|
||||
void executeSourApple();
|
||||
void executeSpoofAirtag();
|
||||
void executeSwiftpairSpam(EBLEPayloadType type);
|
||||
void startWardriverWiFi();
|
||||
void generateRandomMac(uint8_t* mac);
|
||||
//void generateRandomMac(uint8_t* mac);
|
||||
//void generateRandomName(char *name, size_t length);
|
||||
String processPwnagotchiBeacon(const uint8_t* frame, int length);
|
||||
|
||||
void startWiFiAttacks(uint8_t scan_mode, uint16_t color, String title_string);
|
||||
|
||||
void signalAnalyzerLoop(uint32_t tick);
|
||||
void channelAnalyzerLoop(uint32_t tick);
|
||||
void channelActivityLoop(uint32_t tick);
|
||||
void packetRateLoop(uint32_t tick);
|
||||
void packetMonitorMain(uint32_t currentTime);
|
||||
void eapolMonitorMain(uint32_t currentTime);
|
||||
void updateMidway();
|
||||
@@ -307,17 +560,24 @@ class WiFiScan
|
||||
void tftDrawGraphObjects();
|
||||
void sendProbeAttack(uint32_t currentTime);
|
||||
void sendDeauthAttack(uint32_t currentTime, String dst_mac_str = "ff:ff:ff:ff:ff:ff");
|
||||
void sendBadMsgAttack(uint32_t currentTime, bool all = false);
|
||||
void sendAssocSleepAttack(uint32_t currentTime, bool all = false);
|
||||
void sendDeauthFrame(uint8_t bssid[6], int channel, String dst_mac_str = "ff:ff:ff:ff:ff:ff");
|
||||
void sendDeauthFrame(uint8_t bssid[6], int channel, uint8_t mac[6]);
|
||||
void sendEapolBagMsg1(uint8_t bssid[6], int channel, String dst_mac_str = "ff:ff:ff:ff:ff:ff", uint8_t sec = WIFI_SECURITY_WPA2);
|
||||
void sendEapolBagMsg1(uint8_t bssid[6], int channel, uint8_t mac[6], uint8_t sec = WIFI_SECURITY_WPA2);
|
||||
void sendAssociationSleep(const char* ESSID, uint8_t bssid[6], int channel, uint8_t mac[6]);
|
||||
void sendAssociationSleep(const char* ESSID, uint8_t bssid[6], int channel, String dst_mac_str = "ff:ff:ff:ff:ff:ff");
|
||||
void broadcastRandomSSID(uint32_t currentTime);
|
||||
void broadcastCustomBeacon(uint32_t current_time, ssid custom_ssid);
|
||||
void broadcastCustomBeacon(uint32_t current_time, AccessPoint custom_ssid);
|
||||
void broadcastSetSSID(uint32_t current_time, const char* ESSID);
|
||||
void RunAPScan(uint8_t scan_mode, uint16_t color);
|
||||
void RunGPSInfo();
|
||||
void RunGPSNmea();
|
||||
void RunMimicFlood(uint8_t scan_mode, uint16_t color);
|
||||
void RunPwnScan(uint8_t scan_mode, uint16_t color);
|
||||
void RunPineScan(uint8_t scan_mode, uint16_t color);
|
||||
void RunMultiSSIDScan(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);
|
||||
void RunStationScan(uint8_t scan_mode, uint16_t color);
|
||||
@@ -330,8 +590,12 @@ class WiFiScan
|
||||
void RunSwiftpairSpam(uint8_t scan_mode, uint16_t color);
|
||||
void RunLvJoinWiFi(uint8_t scan_mode, uint16_t color);
|
||||
void RunEvilPortal(uint8_t scan_mode, uint16_t color);
|
||||
void RunPingScan(uint8_t scan_mode, uint16_t color);
|
||||
void RunPortScanAll(uint8_t scan_mode, uint16_t color);
|
||||
bool checkMem();
|
||||
void parseBSSID(const char* bssidStr, uint8_t* bssid);
|
||||
void writeHeader(bool poi = false);
|
||||
void writeFooter(bool poi = false);
|
||||
|
||||
|
||||
public:
|
||||
@@ -341,47 +605,151 @@ class WiFiScan
|
||||
|
||||
//LinkedList<ssid>* ssids;
|
||||
|
||||
// Stuff for RAW stats
|
||||
uint32_t mgmt_frames = 0;
|
||||
uint32_t data_frames = 0;
|
||||
uint32_t beacon_frames = 0;
|
||||
uint32_t req_frames = 0;
|
||||
uint32_t resp_frames = 0;
|
||||
uint32_t deauth_frames = 0;
|
||||
uint32_t eapol_frames = 0;
|
||||
int8_t min_rssi = 0;
|
||||
int8_t max_rssi = -128;
|
||||
|
||||
bool force_pmkid = false;
|
||||
bool force_probe = false;
|
||||
bool save_pcap = false;
|
||||
bool ep_deauth = false;
|
||||
|
||||
#ifdef HAS_DUAL_BAND
|
||||
uint8_t channel_activity[DUAL_BAND_CHANNELS] = {};
|
||||
#else
|
||||
uint8_t channel_activity[MAX_CHANNEL] = {};
|
||||
#endif
|
||||
|
||||
uint8_t activity_page = 1;
|
||||
|
||||
String analyzer_name_string = "";
|
||||
|
||||
uint8_t analyzer_frames_recvd = 0;
|
||||
|
||||
bool analyzer_name_update = false;
|
||||
|
||||
uint8_t set_channel = 1;
|
||||
|
||||
uint8_t old_channel = 0;
|
||||
|
||||
int16_t _analyzer_value = 0;
|
||||
|
||||
bool orient_display = false;
|
||||
bool wifi_initialized = false;
|
||||
bool ble_initialized = false;
|
||||
bool wifi_connected = false;
|
||||
|
||||
String free_ram = "";
|
||||
String old_free_ram = "";
|
||||
String connected_network = "";
|
||||
|
||||
IPAddress ip_addr;
|
||||
IPAddress gateway;
|
||||
IPAddress subnet;
|
||||
|
||||
IPAddress current_scan_ip;
|
||||
|
||||
uint16_t current_scan_port = 1;
|
||||
|
||||
String dst_mac = "ff:ff:ff:ff:ff:ff";
|
||||
byte src_mac[6] = {};
|
||||
|
||||
#ifdef HAS_SCREEN
|
||||
int16_t _analyzer_values[TFT_WIDTH];
|
||||
int16_t _temp_analyzer_values[TFT_WIDTH];
|
||||
#endif
|
||||
|
||||
String current_mini_kb_ssid = "";
|
||||
|
||||
const String alfa = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ 0123456789-=[];',./`\\_+{}:\"<>?~|!@#$%^&*()";
|
||||
|
||||
wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
|
||||
|
||||
#ifndef HAS_DUAL_BAND
|
||||
wifi_init_config_t cfg2 = { \
|
||||
.event_handler = &esp_event_send_internal, \
|
||||
.osi_funcs = &g_wifi_osi_funcs, \
|
||||
.wpa_crypto_funcs = g_wifi_default_wpa_crypto_funcs, \
|
||||
.static_rx_buf_num = 6,\
|
||||
.dynamic_rx_buf_num = 6,\
|
||||
.tx_buf_type = 0,\
|
||||
.static_tx_buf_num = 1,\
|
||||
.dynamic_tx_buf_num = WIFI_DYNAMIC_TX_BUFFER_NUM,\
|
||||
.cache_tx_buf_num = 0,\
|
||||
.csi_enable = false,\
|
||||
.ampdu_rx_enable = false,\
|
||||
.ampdu_tx_enable = false,\
|
||||
.amsdu_tx_enable = false,\
|
||||
.nvs_enable = false,\
|
||||
.nano_enable = WIFI_NANO_FORMAT_ENABLED,\
|
||||
.rx_ba_win = 6,\
|
||||
.wifi_task_core_id = WIFI_TASK_CORE_ID,\
|
||||
.beacon_max_len = 752, \
|
||||
.mgmt_sbuf_num = 8, \
|
||||
.feature_caps = g_wifi_feature_caps, \
|
||||
.sta_disconnected_pm = WIFI_STA_DISCONNECTED_PM_ENABLED, \
|
||||
.espnow_max_encrypt_num = 0, \
|
||||
.magic = WIFI_INIT_CONFIG_MAGIC\
|
||||
};
|
||||
#else
|
||||
wifi_country_t country = {
|
||||
.cc = "PH",
|
||||
.schan = 1,
|
||||
.nchan = 13,
|
||||
.policy = WIFI_COUNTRY_POLICY_AUTO,
|
||||
};
|
||||
|
||||
wifi_init_config_t cfg2 = WIFI_INIT_CONFIG_DEFAULT();
|
||||
#endif
|
||||
|
||||
wifi_config_t ap_config;
|
||||
|
||||
void drawChannelLine();
|
||||
#ifdef HAS_SCREEN
|
||||
int8_t checkAnalyzerButtons(uint32_t currentTime);
|
||||
#endif
|
||||
bool filterActive();
|
||||
bool RunGPSInfo(bool tracker = false, bool display = true, bool poi = false);
|
||||
void logPoint(String lat, String lon, float alt, String datetime, bool poi = false);
|
||||
void setMac();
|
||||
void renderRawStats();
|
||||
void renderPacketRate();
|
||||
void displayAnalyzerString(String str);
|
||||
String security_int_to_string(int security_type);
|
||||
char* stringToChar(String string);
|
||||
void RunSetup();
|
||||
int clearSSIDs();
|
||||
int clearAPs();
|
||||
int clearIPs();
|
||||
int clearAirtags();
|
||||
int clearFlippers();
|
||||
int clearStations();
|
||||
int clearPineScanTrackers();
|
||||
int clearMultiSSID();
|
||||
bool addSSID(String essid);
|
||||
int generateSSIDs(int count = 20);
|
||||
bool shutdownWiFi();
|
||||
bool shutdownBLE();
|
||||
bool scanning();
|
||||
//void joinWiFi(String ssid, String password);
|
||||
bool joinWiFi(String ssid, String password, bool gui = true);
|
||||
bool startWiFi(String ssid, String password, bool gui = true);
|
||||
String getStaMAC();
|
||||
String getApMAC();
|
||||
String freeRAM();
|
||||
void changeChannel();
|
||||
void changeChannel(int chan);
|
||||
void RunAPInfo(uint16_t index, bool do_display = true);
|
||||
void RunInfo();
|
||||
//void RunShutdownBLE();
|
||||
void RunSetMac(uint8_t * mac, bool ap = true);
|
||||
void RunGenerateRandomMac(bool ap = true);
|
||||
void RunGenerateSSIDs(int count = 20);
|
||||
void RunClearSSIDs();
|
||||
void RunClearAPs();
|
||||
@@ -390,17 +758,22 @@ class WiFiScan
|
||||
void RunLoadSSIDList();
|
||||
void RunSaveAPList(bool save_as = true);
|
||||
void RunLoadAPList();
|
||||
void channelHop();
|
||||
void RunSaveATList(bool save_as = true);
|
||||
void RunLoadATList();
|
||||
void RunSetupGPSTracker(uint8_t scan_mode);
|
||||
void channelHop(bool filtered = false, bool ranged = false);
|
||||
uint8_t currentScanMode = 0;
|
||||
void main(uint32_t currentTime);
|
||||
void StartScan(uint8_t scan_mode, uint16_t color = 0);
|
||||
void StopScan(uint8_t scan_mode);
|
||||
const char* generateRandomName();
|
||||
void setBaseMacAddress(uint8_t macAddr[6]);
|
||||
//const char* generateRandomName();
|
||||
|
||||
bool save_serial = false;
|
||||
void startPcap(String file_name);
|
||||
void startLog(String file_name);
|
||||
String macToString(const Station& station);
|
||||
void startGPX(String file_name);
|
||||
//String macToString(const Station& station);
|
||||
|
||||
static void getMAC(char *addr, uint8_t* data, uint16_t offset);
|
||||
static void pwnSnifferCallback(void* buf, wifi_promiscuous_pkt_type_t type);
|
||||
@@ -415,58 +788,8 @@ 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);
|
||||
|
||||
/*#ifdef HAS_BT
|
||||
enum EBLEPayloadType
|
||||
{
|
||||
Microsoft,
|
||||
Apple,
|
||||
Samsung,
|
||||
Google
|
||||
};
|
||||
|
||||
struct BLEData
|
||||
{
|
||||
NimBLEAdvertisementData AdvData;
|
||||
NimBLEAdvertisementData ScanData;
|
||||
};
|
||||
|
||||
struct WatchModel
|
||||
{
|
||||
uint8_t value;
|
||||
const char *name;
|
||||
};
|
||||
|
||||
WatchModel* watch_models = nullptr;
|
||||
|
||||
const WatchModel watch_models[] = {
|
||||
{0x1A, "Fallback Watch"},
|
||||
{0x01, "White Watch4 Classic 44m"},
|
||||
{0x02, "Black Watch4 Classic 40m"},
|
||||
{0x03, "White Watch4 Classic 40m"},
|
||||
{0x04, "Black Watch4 44mm"},
|
||||
{0x05, "Silver Watch4 44mm"},
|
||||
{0x06, "Green Watch4 44mm"},
|
||||
{0x07, "Black Watch4 40mm"},
|
||||
{0x08, "White Watch4 40mm"},
|
||||
{0x09, "Gold Watch4 40mm"},
|
||||
{0x0A, "French Watch4"},
|
||||
{0x0B, "French Watch4 Classic"},
|
||||
{0x0C, "Fox Watch5 44mm"},
|
||||
{0x11, "Black Watch5 44mm"},
|
||||
{0x12, "Sapphire Watch5 44mm"},
|
||||
{0x13, "Purpleish Watch5 40mm"},
|
||||
{0x14, "Gold Watch5 40mm"},
|
||||
{0x15, "Black Watch5 Pro 45mm"},
|
||||
{0x16, "Gray Watch5 Pro 45mm"},
|
||||
{0x17, "White Watch5 44mm"},
|
||||
{0x18, "White & Black Watch5"},
|
||||
{0x1B, "Black Watch6 Pink 40mm"},
|
||||
{0x1C, "Gold Watch6 Gold 40mm"},
|
||||
{0x1D, "Silver Watch6 Cyan 44mm"},
|
||||
{0x1E, "Black Watch6 Classic 43m"},
|
||||
{0x20, "Green Watch6 Classic 43m"},
|
||||
};
|
||||
#endif*/
|
||||
static void pineScanSnifferCallback(void* buf, wifi_promiscuous_pkt_type_t type); // Pineapple
|
||||
static int extractPineScanChannel(const uint8_t* payload, int len); // Pineapple
|
||||
static void multiSSIDSnifferCallback(void* buf, wifi_promiscuous_pkt_type_t type); // MultiSSID
|
||||
};
|
||||
#endif
|
||||
|
||||
@@ -34,11 +34,11 @@ https://www.online-utility.org/image/convert/to/XBM
|
||||
#endif
|
||||
#include "Buffer.h"
|
||||
|
||||
#ifdef MARAUDER_FLIPPER
|
||||
#ifdef HAS_FLIPPER_LED
|
||||
#include "flipperLED.h"
|
||||
#elif defined(XIAO_ESP32_S3)
|
||||
#include "xiaoLED.h"
|
||||
#elif defined(MARAUDER_M5STICKC)
|
||||
#elif defined(MARAUDER_M5STICKC) || defined(MARAUDER_M5STICKCP2)
|
||||
#include "stickcLED.h"
|
||||
#elif defined(HAS_NEOPIXEL_LED)
|
||||
#include "LedInterface.h"
|
||||
@@ -97,7 +97,7 @@ CommandLine cli_obj;
|
||||
MenuFunctions menu_function_obj;
|
||||
#endif
|
||||
|
||||
#ifdef HAS_SD
|
||||
#if defined(HAS_SD) && !defined(HAS_C5_SD)
|
||||
SDInterface sd_obj;
|
||||
#endif
|
||||
|
||||
@@ -105,11 +105,11 @@ CommandLine cli_obj;
|
||||
AXP192 axp192_obj;
|
||||
#endif
|
||||
|
||||
#ifdef MARAUDER_FLIPPER
|
||||
#ifdef HAS_FLIPPER_LED
|
||||
flipperLED flipper_led;
|
||||
#elif defined(XIAO_ESP32_S3)
|
||||
xiaoLED xiao_led;
|
||||
#elif defined(MARAUDER_M5STICKC)
|
||||
#elif defined(MARAUDER_M5STICKC) || defined(MARAUDER_M5STICKCP2)
|
||||
stickcLED stickc_led;
|
||||
#else
|
||||
LedInterface led_obj;
|
||||
@@ -123,7 +123,6 @@ const String PROGMEM version_number = MARAUDER_VERSION;
|
||||
|
||||
uint32_t currentTime = 0;
|
||||
|
||||
|
||||
void backlightOn() {
|
||||
#ifdef HAS_SCREEN
|
||||
#ifdef MARAUDER_MINI
|
||||
@@ -148,29 +147,48 @@ void backlightOff() {
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef HAS_C5_SD
|
||||
SPIClass sharedSPI(SPI);
|
||||
SDInterface sd_obj = SDInterface(&sharedSPI, SD_CS);
|
||||
#endif
|
||||
|
||||
void setup()
|
||||
{
|
||||
#ifdef MARAUDER_M5STICKC
|
||||
#ifndef HAS_DUAL_BAND
|
||||
esp_spiram_init();
|
||||
#endif
|
||||
|
||||
#ifdef HAS_C5_SD
|
||||
Serial.println("Starting shared SPI for C5 SD configuration...");
|
||||
sharedSPI.begin(SD_SCK, SD_MISO, SD_MOSI);
|
||||
delay(100);
|
||||
#endif
|
||||
|
||||
#ifdef defined(MARAUDER_M5STICKC) && !defined(MARAUDER_M5STICKCP2)
|
||||
axp192_obj.begin();
|
||||
#endif
|
||||
|
||||
#if defined(MARAUDER_M5STICKCP2) // Prevent StickCP2 from turning off when disconnect USB cable
|
||||
pinMode(POWER_HOLD_PIN, OUTPUT);
|
||||
digitalWrite(POWER_HOLD_PIN, HIGH);
|
||||
#endif
|
||||
|
||||
#ifdef HAS_SCREEN
|
||||
pinMode(TFT_BL, OUTPUT);
|
||||
#endif
|
||||
|
||||
backlightOff();
|
||||
#if BATTERY_ANALOG_ON == 1
|
||||
pinMode(BATTERY_PIN, OUTPUT);
|
||||
pinMode(CHARGING_PIN, INPUT);
|
||||
#endif
|
||||
#if BATTERY_ANALOG_ON == 1
|
||||
pinMode(BATTERY_PIN, OUTPUT);
|
||||
pinMode(CHARGING_PIN, INPUT);
|
||||
#endif
|
||||
|
||||
// Preset SPI CS pins to avoid bus conflicts
|
||||
#ifdef HAS_SCREEN
|
||||
digitalWrite(TFT_CS, HIGH);
|
||||
#endif
|
||||
|
||||
#ifdef HAS_SD
|
||||
#if defined(HAS_SD) && !defined(HAS_C5_SD)
|
||||
pinMode(SD_CS, OUTPUT);
|
||||
|
||||
delay(10);
|
||||
@@ -182,8 +200,19 @@ void setup()
|
||||
|
||||
Serial.begin(115200);
|
||||
|
||||
while(!Serial)
|
||||
delay(10);
|
||||
|
||||
Serial.println("ESP-IDF version is: " + String(esp_get_idf_version()));
|
||||
|
||||
#ifdef HAS_PSRAM
|
||||
if (psramInit()) {
|
||||
Serial.println("PSRAM is correctly initialized");
|
||||
} else {
|
||||
Serial.println("PSRAM not available");
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef HAS_SCREEN
|
||||
display_obj.RunSetup();
|
||||
display_obj.tft.setTextColor(TFT_WHITE, TFT_BLACK);
|
||||
@@ -191,29 +220,22 @@ void setup()
|
||||
|
||||
backlightOff();
|
||||
|
||||
// Draw the title screen
|
||||
/*
|
||||
#ifdef HAS_SCREEN
|
||||
#ifndef MARAUDER_MINI
|
||||
display_obj.drawJpeg("/marauder3L.jpg", 0 , 0); // 240 x 320 image
|
||||
#ifndef MARAUDER_CARDPUTER
|
||||
display_obj.tft.drawCentreString("ESP32 Marauder", TFT_WIDTH/2, TFT_HEIGHT * 0.33, 1);
|
||||
display_obj.tft.drawCentreString("JustCallMeKoko", TFT_WIDTH/2, TFT_HEIGHT * 0.5, 1);
|
||||
display_obj.tft.drawCentreString(display_obj.version_number, TFT_WIDTH/2, TFT_HEIGHT * 0.66, 1);
|
||||
#else
|
||||
display_obj.drawJpeg("/marauder3L.jpg", 0, 0);
|
||||
display_obj.tft.drawCentreString("ESP32 Marauder", TFT_HEIGHT/2, TFT_WIDTH * 0.33, 1);
|
||||
display_obj.tft.drawCentreString("JustCallMeKoko", TFT_HEIGHT/2, TFT_WIDTH * 0.5, 1);
|
||||
display_obj.tft.drawCentreString(display_obj.version_number, TFT_HEIGHT/2, TFT_WIDTH * 0.66, 1);
|
||||
#endif
|
||||
#endif
|
||||
*/
|
||||
|
||||
#ifdef HAS_SCREEN
|
||||
display_obj.tft.drawCentreString("ESP32 Marauder", TFT_WIDTH/2, TFT_HEIGHT * 0.33, 1);
|
||||
display_obj.tft.drawCentreString("JustCallMeKoko", TFT_WIDTH/2, TFT_HEIGHT * 0.5, 1);
|
||||
display_obj.tft.drawCentreString(display_obj.version_number, TFT_WIDTH/2, TFT_HEIGHT * 0.66, 1);
|
||||
#endif
|
||||
|
||||
|
||||
backlightOn(); // Need this
|
||||
|
||||
#ifdef HAS_SCREEN
|
||||
delay(2000);
|
||||
|
||||
// Do some stealth mode stuff
|
||||
#ifdef HAS_BUTTONS
|
||||
if (c_btn.justPressed()) {
|
||||
@@ -224,43 +246,23 @@ void setup()
|
||||
Serial.println("Headless Mode enabled");
|
||||
}
|
||||
#endif
|
||||
|
||||
display_obj.clearScreen();
|
||||
|
||||
display_obj.tft.setTextColor(TFT_CYAN, TFT_BLACK);
|
||||
|
||||
display_obj.tft.println(text_table0[0]);
|
||||
|
||||
delay(2000);
|
||||
|
||||
display_obj.tft.println("Marauder " + display_obj.version_number + "\n");
|
||||
|
||||
display_obj.tft.println(text_table0[1]);
|
||||
#endif
|
||||
|
||||
settings_obj.begin();
|
||||
|
||||
wifi_scan_obj.RunSetup();
|
||||
|
||||
#ifdef HAS_SCREEN
|
||||
display_obj.tft.println(F(text_table0[2]));
|
||||
#endif
|
||||
|
||||
buffer_obj = Buffer();
|
||||
#if defined(HAS_SD)
|
||||
// Do some SD stuff
|
||||
if(sd_obj.initSD()) {
|
||||
#ifdef HAS_SCREEN
|
||||
display_obj.tft.println(F(text_table0[3]));
|
||||
#endif
|
||||
} else {
|
||||
if(!sd_obj.initSD())
|
||||
Serial.println(F("SD Card NOT Supported"));
|
||||
#ifdef HAS_SCREEN
|
||||
display_obj.tft.setTextColor(TFT_RED, TFT_BLACK);
|
||||
display_obj.tft.println(F(text_table0[4]));
|
||||
display_obj.tft.setTextColor(TFT_CYAN, TFT_BLACK);
|
||||
#endif
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
wifi_scan_obj.RunSetup();
|
||||
|
||||
#ifdef HAS_SCREEN
|
||||
display_obj.tft.setTextColor(TFT_GREEN, TFT_BLACK);
|
||||
display_obj.tft.drawCentreString("Initializing...", TFT_WIDTH/2, TFT_HEIGHT * 0.82, 1);
|
||||
#endif
|
||||
|
||||
evil_portal_obj.setup();
|
||||
@@ -268,21 +270,13 @@ void setup()
|
||||
#ifdef HAS_BATTERY
|
||||
battery_obj.RunSetup();
|
||||
#endif
|
||||
|
||||
#ifdef HAS_SCREEN
|
||||
display_obj.tft.println(F(text_table0[5]));
|
||||
#endif
|
||||
|
||||
#ifdef HAS_SCREEN
|
||||
display_obj.tft.println(F(text_table0[6]));
|
||||
#endif
|
||||
|
||||
#ifdef HAS_BATTERY
|
||||
battery_obj.battery_level = battery_obj.getBatteryLevel();
|
||||
#endif
|
||||
|
||||
// Do some LED stuff
|
||||
#ifdef MARAUDER_FLIPPER
|
||||
#ifdef HAS_FLIPPER_LED
|
||||
flipper_led.RunSetup();
|
||||
#elif defined(XIAO_ESP32_S3)
|
||||
xiao_led.RunSetup();
|
||||
@@ -292,33 +286,19 @@ void setup()
|
||||
led_obj.RunSetup();
|
||||
#endif
|
||||
|
||||
#ifdef HAS_SCREEN
|
||||
display_obj.tft.println(F(text_table0[7]));
|
||||
|
||||
delay(500);
|
||||
#endif
|
||||
|
||||
#ifdef HAS_GPS
|
||||
gps_obj.begin();
|
||||
#ifdef HAS_SCREEN
|
||||
if (gps_obj.getGpsModuleStatus())
|
||||
display_obj.tft.println("GPS Module connected");
|
||||
else
|
||||
display_obj.tft.println("GPS Module NOT connected");
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef HAS_SCREEN
|
||||
display_obj.tft.println(F(text_table0[8]));
|
||||
|
||||
#ifdef HAS_SCREEN
|
||||
display_obj.tft.setTextColor(TFT_WHITE, TFT_BLACK);
|
||||
|
||||
delay(2000);
|
||||
#endif
|
||||
|
||||
#ifdef HAS_SCREEN
|
||||
menu_function_obj.RunSetup();
|
||||
#endif
|
||||
|
||||
wifi_scan_obj.StartScan(WIFI_SCAN_OFF);
|
||||
|
||||
Serial.println(F("CLI Ready"));
|
||||
cli_obj.RunSetup();
|
||||
@@ -331,10 +311,12 @@ void loop()
|
||||
bool mini = false;
|
||||
|
||||
#ifdef SCREEN_BUFFER
|
||||
mini = true;
|
||||
#ifndef HAS_ILI9341
|
||||
mini = true;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef HAS_ILI9341
|
||||
#if (defined(HAS_ILI9341) && !defined(MARAUDER_CYD_2USB))
|
||||
#ifdef HAS_BUTTONS
|
||||
if (c_btn.isHeld()) {
|
||||
if (menu_function_obj.disable_touch)
|
||||
@@ -351,20 +333,11 @@ void loop()
|
||||
#endif
|
||||
|
||||
// Update all of our objects
|
||||
/*#ifdef HAS_SCREEN
|
||||
bool do_draw = display_obj.draw_tft;
|
||||
#else
|
||||
bool do_draw = false;
|
||||
#endif*/
|
||||
|
||||
//if ((!do_draw) && (wifi_scan_obj.currentScanMode != ESP_UPDATE))
|
||||
//{
|
||||
cli_obj.main(currentTime);
|
||||
#ifdef HAS_SCREEN
|
||||
display_obj.main(wifi_scan_obj.currentScanMode);
|
||||
#endif
|
||||
wifi_scan_obj.main(currentTime);
|
||||
//evil_portal_obj.main(wifi_scan_obj.currentScanMode);
|
||||
|
||||
#ifdef HAS_GPS
|
||||
gps_obj.main();
|
||||
@@ -380,7 +353,6 @@ void loop()
|
||||
|
||||
#ifdef HAS_BATTERY
|
||||
battery_obj.main(currentTime);
|
||||
//temp_obj.main(currentTime);
|
||||
#endif
|
||||
settings_obj.main(currentTime);
|
||||
if (((wifi_scan_obj.currentScanMode != WIFI_PACKET_MONITOR) && (wifi_scan_obj.currentScanMode != WIFI_SCAN_EAPOL)) ||
|
||||
@@ -388,9 +360,8 @@ void loop()
|
||||
#ifdef HAS_SCREEN
|
||||
menu_function_obj.main(currentTime);
|
||||
#endif
|
||||
//cli_obj.main(currentTime);
|
||||
}
|
||||
#ifdef MARAUDER_FLIPPER
|
||||
#ifdef HAS_FLIPPER_LED
|
||||
flipper_led.main();
|
||||
#elif defined(XIAO_ESP32_S3)
|
||||
xiao_led.main();
|
||||
@@ -400,29 +371,9 @@ void loop()
|
||||
led_obj.main(currentTime);
|
||||
#endif
|
||||
|
||||
//if (wifi_scan_obj.currentScanMode == OTA_UPDATE)
|
||||
// web_obj.main();
|
||||
#ifdef HAS_SCREEN
|
||||
delay(1);
|
||||
#else
|
||||
delay(50);
|
||||
#endif
|
||||
//}
|
||||
/*else if (wifi_scan_obj.currentScanMode == ESP_UPDATE) {
|
||||
#ifdef HAS_SCREEN
|
||||
display_obj.main(wifi_scan_obj.currentScanMode);
|
||||
menu_function_obj.main(currentTime);
|
||||
#endif
|
||||
|
||||
#ifdef MARAUDER_FLIPPER
|
||||
flipper_led.main();
|
||||
#elif defined(XIAO_ESP32_S3)
|
||||
xiao_led.main();
|
||||
#else
|
||||
led_obj.main(currentTime);
|
||||
#endif
|
||||
|
||||
//cli_obj.main(currentTime);
|
||||
delay(1);
|
||||
}*/
|
||||
}
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
#include "flipperLED.h"
|
||||
|
||||
#ifdef HAS_FLIPPER_LED
|
||||
|
||||
void flipperLED::RunSetup() {
|
||||
pinMode(B_PIN, OUTPUT);
|
||||
pinMode(G_PIN, OUTPUT);
|
||||
@@ -58,4 +60,6 @@ void flipperLED::offLED() {
|
||||
|
||||
void flipperLED::main() {
|
||||
// do nothing
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
@@ -8,10 +8,6 @@
|
||||
|
||||
#include <Arduino.h>
|
||||
|
||||
#define B_PIN 4
|
||||
#define G_PIN 5
|
||||
#define R_PIN 6
|
||||
|
||||
extern Settings settings_obj;
|
||||
|
||||
class flipperLED {
|
||||
|
||||
@@ -103,6 +103,11 @@ PROGMEM const char text1_59[] = "Station Sniff";
|
||||
PROGMEM const char text1_60[] = "Clear Stations";
|
||||
PROGMEM const char text1_61[] = "Select Stations";
|
||||
PROGMEM const char text1_62[] = "Deauth Targeted";
|
||||
PROGMEM const char text1_63[] = "Detect Pineapple";
|
||||
PROGMEM const char text1_64[] = "Detect MultiSSID";
|
||||
PROGMEM const char text1_65[] = "Select probe SSIDs";
|
||||
PROGMEM const char text1_66[] = "GPS"; // Text label for GPS Menu in Main Menu
|
||||
PROGMEM const char text1_67[] = "Funny SSID Beacon";
|
||||
|
||||
|
||||
//SDInterface.cpp texts
|
||||
@@ -163,9 +168,9 @@ PROGMEM const char text4_28[] = "SD Card: Connected";
|
||||
PROGMEM const char text4_29[] = "SD Card Size: ";
|
||||
PROGMEM const char text4_30[] = "SD Card: Not Connected";
|
||||
PROGMEM const char text4_31[] = "SD Card Size: 0";
|
||||
PROGMEM const char text4_32[] = "IP5306 I2C: supported";
|
||||
PROGMEM const char text4_32[] = "Battery Monitor: supported";
|
||||
PROGMEM const char text4_33[] = "Battery Lvl: ";
|
||||
PROGMEM const char text4_34[] = "IP5306 I2C: not supported";
|
||||
PROGMEM const char text4_34[] = "Battery Monitor: not supported";
|
||||
PROGMEM const char text4_35[] = "Internal temp: ";
|
||||
PROGMEM const char text4_36[] = " Detect Espressif ";
|
||||
PROGMEM const char text4_37[] = " Detect Pwnagotchi ";
|
||||
@@ -179,12 +184,14 @@ PROGMEM const char text4_44[] = " AP Scan ";
|
||||
PROGMEM const char text4_45[] = "Clearing Stations...";
|
||||
PROGMEM const char text4_46[] = "Stations Cleared: ";
|
||||
PROGMEM const char text4_47[] = "Targeted Deauth";
|
||||
PROGMEM const char text4_48[] = " Detect Pineapple ";
|
||||
PROGMEM const char text4_49[] = " Detect MultiSSID ";
|
||||
|
||||
//Making tables
|
||||
PROGMEM const char *text_table0[] = {text0_0,text0_1, text0_2, text0_3, text0_4, text0_5, text0_6, text0_7, text0_8};
|
||||
PROGMEM const char *text_table1[] = {text1_0,text1_1,text1_2,text1_3,text1_4,text1_5,text1_6,text1_7,text1_8,text1_9,text1_10,text1_11,text1_12,text1_13,text1_14,text1_15,text1_16,text1_17,text1_18,text1_19,text1_20,text1_21,text1_22,text1_23,text1_24,text1_25,text1_26,text1_27,text1_28,text1_29,text1_30,text1_31,text1_32,text1_33,text1_34,text1_35,text1_36,text1_37,text1_38,text1_39,text1_40,text1_41,text1_42,text1_43,text1_44,text1_45,text1_46,text1_47,text1_48,text1_49,text1_50,text1_51,text1_52,text1_53,text1_54,text1_55,text1_56,text1_57,text1_58,text1_59,text1_60,text1_61,text1_62};
|
||||
PROGMEM const char *text_table1[] = {text1_0,text1_1,text1_2,text1_3,text1_4,text1_5,text1_6,text1_7,text1_8,text1_9,text1_10,text1_11,text1_12,text1_13,text1_14,text1_15,text1_16,text1_17,text1_18,text1_19,text1_20,text1_21,text1_22,text1_23,text1_24,text1_25,text1_26,text1_27,text1_28,text1_29,text1_30,text1_31,text1_32,text1_33,text1_34,text1_35,text1_36,text1_37,text1_38,text1_39,text1_40,text1_41,text1_42,text1_43,text1_44,text1_45,text1_46,text1_47,text1_48,text1_49,text1_50,text1_51,text1_52,text1_53,text1_54,text1_55,text1_56,text1_57,text1_58,text1_59,text1_60,text1_61,text1_62,text1_63,text1_64, text1_65, text1_66, text1_67};
|
||||
PROGMEM const char *text_table2[] = {text2_0,text2_1,text2_2,text2_3,text2_4,text2_5,text2_6,text2_7,text2_8,text2_9,text2_10,text2_11,text2_12,text2_13,text2_14};
|
||||
PROGMEM const char *text_table3[] = {text3_0,text3_1,text3_2,text3_3,text3_4,text3_5};
|
||||
PROGMEM const char *text_table4[] = {text4_0,text4_1,text4_2,text4_3,text4_4,text4_5,text4_6,text4_7,text1_54,text4_9,text4_10,text4_11,text4_12,text4_13,text4_14,text4_15,text4_16,text4_17,text4_18,text4_19,text4_20,text4_21,text4_22,text4_23,text4_24,text4_25,text4_26,text4_27,text4_28,text4_29,text4_30,text4_31,text4_32,text4_33,text4_34,text4_35,text4_36,text4_37,text4_38,text4_39,text4_40,text4_41,text4_42,text4_43,text4_44,text4_45,text4_46,text4_47};
|
||||
PROGMEM const char *text_table4[] = {text4_0,text4_1,text4_2,text4_3,text4_4,text4_5,text4_6,text4_7,text1_54,text4_9,text4_10,text4_11,text4_12,text4_13,text4_14,text4_15,text4_16,text4_17,text4_18,text4_19,text4_20,text4_21,text4_22,text4_23,text4_24,text4_25,text4_26,text4_27,text4_28,text4_29,text4_30,text4_31,text4_32,text4_33,text4_34,text4_35,text4_36,text4_37,text4_38,text4_39,text4_40,text4_41,text4_42,text4_43,text4_44,text4_45,text4_46,text4_47,text4_48,text4_49};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -82,6 +82,10 @@ String Settings::loadSetting<String>(String key) {
|
||||
return json["Settings"][i]["value"];
|
||||
}
|
||||
|
||||
Serial.println("Did not find setting named " + (String)key + ". Creating...");
|
||||
if (this->createDefaultSettings(SPIFFS, true, json["Settings"].size(), "String", key))
|
||||
return "";
|
||||
|
||||
return "";
|
||||
}
|
||||
|
||||
@@ -91,7 +95,7 @@ bool Settings::loadSetting<bool>(String key) {
|
||||
DynamicJsonDocument json(1024); // ArduinoJson v6
|
||||
|
||||
if (deserializeJson(json, this->json_settings_string)) {
|
||||
Serial.println("\nCould not parse json");
|
||||
Serial.println("Could not parse json to load");
|
||||
}
|
||||
|
||||
for (int i = 0; i < json["Settings"].size(); i++) {
|
||||
@@ -99,6 +103,10 @@ bool Settings::loadSetting<bool>(String key) {
|
||||
return json["Settings"][i]["value"];
|
||||
}
|
||||
|
||||
Serial.println("Did not find setting named " + (String)key + ". Creating...");
|
||||
if (this->createDefaultSettings(SPIFFS, true, json["Settings"].size(), "bool", key))
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -165,6 +173,52 @@ bool Settings::saveSetting<bool>(String key, bool value) {
|
||||
return false;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
T Settings::saveSetting(String key, String value) {}
|
||||
|
||||
template<>
|
||||
bool Settings::saveSetting<bool>(String key, String value) {
|
||||
DynamicJsonDocument json(1024); // ArduinoJson v6
|
||||
|
||||
if (deserializeJson(json, this->json_settings_string)) {
|
||||
Serial.println("\nCould not parse json");
|
||||
}
|
||||
|
||||
String settings_string;
|
||||
|
||||
for (int i = 0; i < json["Settings"].size(); i++) {
|
||||
if (json["Settings"][i]["name"].as<String>() == key) {
|
||||
json["Settings"][i]["value"] = value;
|
||||
|
||||
Serial.println("Saving setting...");
|
||||
|
||||
File settingsFile = SPIFFS.open("/settings.json", FILE_WRITE);
|
||||
|
||||
if (!settingsFile) {
|
||||
Serial.println(F("Failed to create settings file"));
|
||||
return false;
|
||||
}
|
||||
|
||||
if (serializeJson(json, settingsFile) == 0) {
|
||||
Serial.println(F("Failed to write to file"));
|
||||
}
|
||||
if (serializeJson(json, settings_string) == 0) {
|
||||
Serial.println(F("Failed to write to string"));
|
||||
}
|
||||
|
||||
// Close the file
|
||||
settingsFile.close();
|
||||
|
||||
this->json_settings_string = settings_string;
|
||||
|
||||
this->printJsonSettings(settings_string);
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool Settings::toggleSetting(String key) {
|
||||
DynamicJsonDocument json(1024); // ArduinoJson v6
|
||||
|
||||
@@ -239,7 +293,7 @@ void Settings::printJsonSettings(String json_string) {
|
||||
}
|
||||
}
|
||||
|
||||
bool Settings::createDefaultSettings(fs::FS &fs) {
|
||||
bool Settings::createDefaultSettings(fs::FS &fs, bool spec, uint8_t index, String typeStr, String name) {
|
||||
Serial.println(F("Creating default settings file: settings.json"));
|
||||
|
||||
File settingsFile = fs.open("/settings.json", FILE_WRITE);
|
||||
@@ -249,51 +303,103 @@ bool Settings::createDefaultSettings(fs::FS &fs) {
|
||||
return false;
|
||||
}
|
||||
|
||||
DynamicJsonDocument jsonBuffer(1024);
|
||||
String settings_string;
|
||||
|
||||
//jsonBuffer["Settings"][0]["name"] = "Channel";
|
||||
//jsonBuffer["Settings"][0]["type"] = "uint8_t";
|
||||
//jsonBuffer["Settings"][0]["value"] = 11;
|
||||
//jsonBuffer["Settings"][0]["range"]["min"] = 1;
|
||||
//jsonBuffer["Settings"][0]["range"]["max"] = 14;
|
||||
if (!spec) {
|
||||
DynamicJsonDocument jsonBuffer(1024);
|
||||
|
||||
//jsonBuffer["Settings"][1]["name"] = "Channel Hop Delay";
|
||||
//jsonBuffer["Settings"][1]["type"] = "int";
|
||||
//jsonBuffer["Settings"][1]["value"] = 1;
|
||||
//jsonBuffer["Settings"][1]["range"]["min"] = 1;
|
||||
//jsonBuffer["Settings"][1]["range"]["max"] = 10;
|
||||
jsonBuffer["Settings"][0]["name"] = "ForcePMKID";
|
||||
jsonBuffer["Settings"][0]["type"] = "bool";
|
||||
jsonBuffer["Settings"][0]["value"] = false;
|
||||
jsonBuffer["Settings"][0]["range"]["min"] = false;
|
||||
jsonBuffer["Settings"][0]["range"]["max"] = true;
|
||||
|
||||
jsonBuffer["Settings"][0]["name"] = "ForcePMKID";
|
||||
jsonBuffer["Settings"][0]["type"] = "bool";
|
||||
jsonBuffer["Settings"][0]["value"] = true;
|
||||
jsonBuffer["Settings"][0]["range"]["min"] = false;
|
||||
jsonBuffer["Settings"][0]["range"]["max"] = true;
|
||||
jsonBuffer["Settings"][1]["name"] = "ForceProbe";
|
||||
jsonBuffer["Settings"][1]["type"] = "bool";
|
||||
jsonBuffer["Settings"][1]["value"] = false;
|
||||
jsonBuffer["Settings"][1]["range"]["min"] = false;
|
||||
jsonBuffer["Settings"][1]["range"]["max"] = true;
|
||||
|
||||
jsonBuffer["Settings"][1]["name"] = "ForceProbe";
|
||||
jsonBuffer["Settings"][1]["type"] = "bool";
|
||||
jsonBuffer["Settings"][1]["value"] = true;
|
||||
jsonBuffer["Settings"][1]["range"]["min"] = false;
|
||||
jsonBuffer["Settings"][1]["range"]["max"] = true;
|
||||
jsonBuffer["Settings"][2]["name"] = "SavePCAP";
|
||||
jsonBuffer["Settings"][2]["type"] = "bool";
|
||||
jsonBuffer["Settings"][2]["value"] = true;
|
||||
jsonBuffer["Settings"][2]["range"]["min"] = false;
|
||||
jsonBuffer["Settings"][2]["range"]["max"] = true;
|
||||
|
||||
jsonBuffer["Settings"][2]["name"] = "SavePCAP";
|
||||
jsonBuffer["Settings"][2]["type"] = "bool";
|
||||
jsonBuffer["Settings"][2]["value"] = true;
|
||||
jsonBuffer["Settings"][2]["range"]["min"] = false;
|
||||
jsonBuffer["Settings"][2]["range"]["max"] = true;
|
||||
jsonBuffer["Settings"][3]["name"] = "EnableLED";
|
||||
jsonBuffer["Settings"][3]["type"] = "bool";
|
||||
jsonBuffer["Settings"][3]["value"] = true;
|
||||
jsonBuffer["Settings"][3]["range"]["min"] = false;
|
||||
jsonBuffer["Settings"][3]["range"]["max"] = true;
|
||||
|
||||
jsonBuffer["Settings"][3]["name"] = "EnableLED";
|
||||
jsonBuffer["Settings"][3]["type"] = "bool";
|
||||
jsonBuffer["Settings"][3]["value"] = true;
|
||||
jsonBuffer["Settings"][3]["range"]["min"] = false;
|
||||
jsonBuffer["Settings"][3]["range"]["max"] = true;
|
||||
jsonBuffer["Settings"][4]["name"] = "EPDeauth";
|
||||
jsonBuffer["Settings"][4]["type"] = "bool";
|
||||
jsonBuffer["Settings"][4]["value"] = false;
|
||||
jsonBuffer["Settings"][4]["range"]["min"] = false;
|
||||
jsonBuffer["Settings"][4]["range"]["max"] = true;
|
||||
|
||||
//jsonBuffer.printTo(settingsFile);
|
||||
if (serializeJson(jsonBuffer, settingsFile) == 0) {
|
||||
Serial.println(F("Failed to write to file"));
|
||||
jsonBuffer["Settings"][5]["name"] = "ClientSSID";
|
||||
jsonBuffer["Settings"][5]["type"] = "String";
|
||||
jsonBuffer["Settings"][5]["value"] = "";
|
||||
jsonBuffer["Settings"][5]["range"]["min"] = "";
|
||||
jsonBuffer["Settings"][5]["range"]["max"] = "";
|
||||
|
||||
jsonBuffer["Settings"][6]["name"] = "ClientPW";
|
||||
jsonBuffer["Settings"][6]["type"] = "String";
|
||||
jsonBuffer["Settings"][6]["value"] = "";
|
||||
jsonBuffer["Settings"][6]["range"]["min"] = "";
|
||||
jsonBuffer["Settings"][6]["range"]["max"] = "";
|
||||
|
||||
//jsonBuffer.printTo(settingsFile);
|
||||
if (serializeJson(jsonBuffer, settingsFile) == 0) {
|
||||
Serial.println(F("Failed to write to file"));
|
||||
}
|
||||
if (serializeJson(jsonBuffer, settings_string) == 0) {
|
||||
Serial.println(F("Failed to write to string"));
|
||||
}
|
||||
}
|
||||
if (serializeJson(jsonBuffer, settings_string) == 0) {
|
||||
Serial.println(F("Failed to write to string"));
|
||||
|
||||
else {
|
||||
DynamicJsonDocument json(1024); // ArduinoJson v6
|
||||
|
||||
if (deserializeJson(json, this->json_settings_string)) {
|
||||
Serial.println("Could not parse json to create new setting");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (typeStr == "bool") {
|
||||
Serial.println("Creating bool setting...");
|
||||
json["Settings"][index]["name"] = name;
|
||||
json["Settings"][index]["type"] = typeStr;
|
||||
json["Settings"][index]["value"] = false;
|
||||
json["Settings"][index]["range"]["min"] = false;
|
||||
json["Settings"][index]["range"]["max"] = true;
|
||||
|
||||
if (serializeJson(json, settings_string) == 0) {
|
||||
Serial.println("Failed to write to string");
|
||||
}
|
||||
|
||||
if (serializeJson(json, settingsFile) == 0) {
|
||||
Serial.println("Failed to write to file");
|
||||
}
|
||||
}
|
||||
|
||||
else if (typeStr == "String") {
|
||||
Serial.println("Creating String setting...");
|
||||
json["Settings"][index]["name"] = name;
|
||||
json["Settings"][index]["type"] = typeStr;
|
||||
json["Settings"][index]["value"] = "";
|
||||
json["Settings"][index]["range"]["min"] = "";
|
||||
json["Settings"][index]["range"]["max"] = "";
|
||||
|
||||
if (serializeJson(json, settings_string) == 0) {
|
||||
Serial.println("Failed to write to string");
|
||||
}
|
||||
|
||||
if (serializeJson(json, settingsFile) == 0) {
|
||||
Serial.println("Failed to write to file");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Close the file
|
||||
|
||||
@@ -31,6 +31,9 @@ class Settings {
|
||||
template <typename T>
|
||||
T saveSetting(String key, bool value);
|
||||
|
||||
template <typename T>
|
||||
T saveSetting(String key, String value);
|
||||
|
||||
bool toggleSetting(String key);
|
||||
String getSettingType(String key);
|
||||
String setting_index_to_name(int i);
|
||||
@@ -49,7 +52,7 @@ class Settings {
|
||||
//uint8_t loadSetting<uint8_t>(String key);
|
||||
|
||||
String getSettingsString();
|
||||
bool createDefaultSettings(fs::FS &fs);
|
||||
bool createDefaultSettings(fs::FS &fs, bool spec = false, uint8_t index = 0, String typeStr = "bool", String name = "");
|
||||
void printJsonSettings(String json_string);
|
||||
void main(uint32_t currentTime);
|
||||
};
|
||||
|
||||
@@ -1,53 +1,64 @@
|
||||
#include "stickcLED.h"
|
||||
// NB M5Stick C Plus LED is active low, so digitalWrite() calls are inverted
|
||||
|
||||
#ifdef MARAUDER_M5STICKCP2
|
||||
#define M5LED_ON HIGH
|
||||
#define M5LED_OFF LOW
|
||||
#define STICKC_LED_PIN 19
|
||||
#else
|
||||
#define M5LED_ON LOW
|
||||
#define M5LED_OFF HIGH
|
||||
#define STICKC_LED_PIN 10
|
||||
#endif
|
||||
|
||||
void stickcLED::RunSetup() {
|
||||
pinMode(STICKC_LED_PIN, OUTPUT);
|
||||
|
||||
if (!settings_obj.loadSetting<bool>("EnableLED")) {
|
||||
digitalWrite(STICKC_LED_PIN, HIGH);
|
||||
digitalWrite(STICKC_LED_PIN, M5LED_OFF);
|
||||
return;
|
||||
}
|
||||
|
||||
delay(50);
|
||||
|
||||
digitalWrite(STICKC_LED_PIN, LOW);
|
||||
digitalWrite(STICKC_LED_PIN, M5LED_ON);
|
||||
delay(500);
|
||||
digitalWrite(STICKC_LED_PIN, HIGH);
|
||||
digitalWrite(STICKC_LED_PIN, M5LED_OFF);
|
||||
delay(250);
|
||||
digitalWrite(STICKC_LED_PIN, LOW);
|
||||
digitalWrite(STICKC_LED_PIN, M5LED_ON);
|
||||
delay(500);
|
||||
digitalWrite(STICKC_LED_PIN, HIGH);
|
||||
digitalWrite(STICKC_LED_PIN, M5LED_OFF);
|
||||
delay(250);
|
||||
digitalWrite(STICKC_LED_PIN, LOW);
|
||||
digitalWrite(STICKC_LED_PIN, M5LED_ON);
|
||||
delay(500);
|
||||
digitalWrite(STICKC_LED_PIN, HIGH);
|
||||
digitalWrite(STICKC_LED_PIN, M5LED_OFF);
|
||||
}
|
||||
|
||||
void stickcLED::attackLED() {
|
||||
if (!settings_obj.loadSetting<bool>("EnableLED"))
|
||||
return;
|
||||
|
||||
digitalWrite(STICKC_LED_PIN, LOW);
|
||||
digitalWrite(STICKC_LED_PIN, M5LED_ON);
|
||||
delay(300);
|
||||
digitalWrite(STICKC_LED_PIN, HIGH);
|
||||
digitalWrite(STICKC_LED_PIN, M5LED_OFF);
|
||||
}
|
||||
|
||||
void stickcLED::sniffLED() {
|
||||
if (!settings_obj.loadSetting<bool>("EnableLED"))
|
||||
return;
|
||||
|
||||
digitalWrite(STICKC_LED_PIN, LOW);
|
||||
digitalWrite(STICKC_LED_PIN, M5LED_ON);
|
||||
delay(300);
|
||||
digitalWrite(STICKC_LED_PIN, HIGH);
|
||||
digitalWrite(STICKC_LED_PIN, M5LED_OFF);
|
||||
}
|
||||
|
||||
void stickcLED::offLED() {
|
||||
if (!settings_obj.loadSetting<bool>("EnableLED"))
|
||||
return;
|
||||
|
||||
digitalWrite(STICKC_LED_PIN, HIGH);
|
||||
digitalWrite(STICKC_LED_PIN, M5LED_OFF);
|
||||
}
|
||||
|
||||
void stickcLED::main() {
|
||||
// do nothing
|
||||
}
|
||||
}
|
||||
@@ -8,7 +8,6 @@
|
||||
|
||||
#include <Arduino.h>
|
||||
|
||||
#define STICKC_LED_PIN 10
|
||||
|
||||
extern Settings settings_obj;
|
||||
|
||||
|
||||
412
esp32_marauder/utils.h
Normal file
@@ -0,0 +1,412 @@
|
||||
#pragma once
|
||||
#ifndef utils_h
|
||||
#define utils_h
|
||||
|
||||
#include <Arduino.h>
|
||||
#include <vector>
|
||||
#include <WiFi.h>
|
||||
|
||||
#include "configs.h"
|
||||
|
||||
#include "esp_heap_caps.h"
|
||||
|
||||
struct mac_addr {
|
||||
unsigned char bytes[6];
|
||||
};
|
||||
|
||||
struct Station {
|
||||
uint8_t mac[6];
|
||||
bool selected;
|
||||
uint16_t packets;
|
||||
uint16_t ap;
|
||||
};
|
||||
|
||||
struct ProbeReqSsid {
|
||||
String essid;
|
||||
bool selected;
|
||||
uint8_t requests;
|
||||
};
|
||||
|
||||
const char apple_ouis[][9] PROGMEM = {
|
||||
"00:17:F2", "00:1E:C2", "00:26:08", "F8:1E:DF", "BC:92:6B",
|
||||
"28:E0:2C", "3C:07:54", "7C:D1:C3", "DC:A9:04", "F0:D1:A9",
|
||||
"C0:2C:5C", "00:03:93", "00:03:94", "00:03:95", "00:03:96",
|
||||
"00:03:97", "00:03:98", "00:03:99", "00:03:9A", "00:03:9B",
|
||||
"00:03:9C", "00:03:9D", "00:03:9E", "00:03:9F", "00:03:A0",
|
||||
"00:03:A1", "00:03:A2", "00:03:A3", "00:03:A4", "00:03:A5",
|
||||
"00:03:A6", "00:03:A7", "00:03:A8", "00:03:A9", "00:03:AA",
|
||||
"00:03:AB", "00:03:AC", "00:03:AD", "00:03:AE", "00:03:AF",
|
||||
"00:03:B0", "00:03:B1", "00:03:B2", "00:03:B3", "00:03:B4",
|
||||
"00:03:B5", "00:03:B6", "00:03:B7", "00:03:B8", "00:03:B9",
|
||||
"00:03:BA", "00:03:BB", "00:03:BC", "00:03:BD", "00:03:BE",
|
||||
"00:03:BF", "00:03:C0", "00:03:C1", "00:03:C2", "00:03:C3",
|
||||
"00:03:C4", "00:03:C5", "00:03:C6", "00:03:C7", "00:03:C8",
|
||||
"00:03:C9", "00:03:CA", "00:03:CB", "00:03:CC", "00:03:CD",
|
||||
"00:03:CE", "00:03:CF", "00:03:D0", "00:03:D1", "00:03:D2",
|
||||
"00:03:D3", "00:03:D4", "00:03:D5", "00:03:D6", "00:03:D7",
|
||||
"00:03:D8", "00:03:D9", "00:03:DA", "00:03:DB", "00:03:DC",
|
||||
"00:03:DD", "00:03:DE", "00:03:DF", "00:03:E0", "00:03:E1",
|
||||
"00:03:E2", "00:03:E3", "00:03:E4", "00:03:E5", "00:03:E6",
|
||||
"00:03:E7", "00:03:E8", "00:03:E9", "00:03:EA", "00:03:EB",
|
||||
"00:03:EC", "00:03:ED", "00:03:EE", "00:03:EF", "00:03:F0",
|
||||
"00:03:F1", "00:03:F2", "00:03:F3", "00:03:F4", "00:03:F5",
|
||||
"00:03:F6", "00:03:F7", "00:03:F8", "00:03:F9", "00:03:FA",
|
||||
"00:03:FB", "00:03:FC", "00:03:FD", "00:03:FE", "00:03:FF"
|
||||
};
|
||||
|
||||
const char asus_ouis[][9] PROGMEM = {
|
||||
"00:0C:6E", "00:0E:A6", "00:11:2F", "00:11:D8", "00:13:D4", "00:15:F2", "00:17:31", "00:18:F3", "00:1A:92",
|
||||
"00:1B:FC", "00:1D:60", "00:1E:8C", "00:1F:C6", "00:22:15", "00:23:54", "00:24:8C", "00:26:18", "00:E0:18",
|
||||
"04:42:1A", "04:92:26", "04:D4:C4", "04:D9:F5", "08:60:6E", "08:62:66", "08:BF:B8", "0C:9D:92", "10:7B:44",
|
||||
"10:7C:61", "10:BF:48", "10:C3:7B", "14:DA:E9", "14:DD:A9", "18:31:BF", "1C:87:2C", "1C:B7:2C", "20:CF:30",
|
||||
"24:4B:FE", "2C:4D:54", "2C:56:DC", "2C:FD:A1", "30:5A:3A", "30:85:A9", "34:97:F6", "38:2C:4A", "38:D5:47",
|
||||
"3C:7C:3F", "40:16:7E", "40:B0:76", "48:5B:39", "4C:ED:FB", "50:46:5D", "50:EB:F6", "54:04:A6", "54:A0:50",
|
||||
"58:11:22", "60:45:CB", "60:A4:4C", "60:CF:84", "70:4D:7B", "70:8B:CD", "74:D0:2B", "78:24:AF", "7C:10:C9",
|
||||
"88:D7:F6", "90:E6:BA", "9C:5C:8E", "A0:36:BC", "A8:5E:45", "AC:22:0B", "AC:9E:17", "B0:6E:BF", "BC:AE:C5",
|
||||
"BC:EE:7B", "C8:60:00", "C8:7F:54", "CC:28:AA", "D0:17:C2", "D4:5D:64", "D8:50:E6", "E0:3F:49", "E0:CB:4E",
|
||||
"E8:9C:25", "F0:2F:74", "F0:79:59", "F4:6D:04", "F8:32:E4", "FC:34:97", "FC:C2:33"
|
||||
};
|
||||
|
||||
const char belkin_ouis[][9] PROGMEM = {
|
||||
"00:11:50", "00:17:3F", "00:30:BD", "08:BD:43", "14:91:82", "24:F5:A2", "30:23:03", "80:69:1A", "94:10:3E",
|
||||
"94:44:52", "B4:75:0E", "C0:56:27", "C4:41:1E", "D8:EC:5E", "E8:9F:80", "EC:1A:59", "EC:22:80"
|
||||
};
|
||||
|
||||
const char cisco_ouis[][9] PROGMEM = {
|
||||
"00:1B:0D", "00:1D:45", "00:1E:7A", "00:25:9C", "00:50:56",
|
||||
"40:55:39", "58:8D:09", "A4:4C:C8", "F8:0F:F9"
|
||||
};
|
||||
|
||||
const char dlink_ouis[][9] PROGMEM = {
|
||||
"00:05:5D", "00:0D:88", "00:0F:3D", "00:11:95", "00:13:46", "00:15:E9", "00:17:9A", "00:19:5B", "00:1B:11",
|
||||
"00:1C:F0", "00:1E:58", "00:21:91", "00:22:B0", "00:24:01", "00:26:5A", "00:AD:24", "04:BA:D6", "08:5A:11",
|
||||
"0C:0E:76", "0C:B6:D2", "10:62:EB", "10:BE:F5", "14:D6:4D", "18:0F:76", "1C:5F:2B", "1C:7E:E5", "1C:AF:F7",
|
||||
"1C:BD:B9", "28:3B:82", "30:23:03", "34:08:04", "34:0A:33", "3C:1E:04", "3C:33:32", "40:86:CB", "40:9B:CD",
|
||||
"54:B8:0A", "5C:D9:98", "60:63:4C", "64:29:43", "6C:19:8F", "6C:72:20", "74:44:01", "74:DA:DA", "78:32:1B",
|
||||
"78:54:2E", "78:98:E8", "80:26:89", "84:C9:B2", "88:76:B9", "90:8D:78", "90:94:E4", "9C:D6:43", "A0:63:91",
|
||||
"A0:AB:1B", "A4:2A:95", "A8:63:7D", "AC:F1:DF", "B4:37:D8", "B8:A3:86", "BC:0F:9A", "BC:22:28", "BC:F6:85",
|
||||
"C0:A0:BB", "C4:A8:1D", "C4:E9:0A", "C8:78:7D", "C8:BE:19", "C8:D3:A3", "CC:B2:55", "D8:FE:E3", "DC:EA:E7",
|
||||
"E0:1C:FC", "E4:6F:13", "E8:CC:18", "EC:22:80", "EC:AD:E0", "F0:7D:68", "F0:B4:D2", "F4:8C:EB", "F8:E9:03",
|
||||
"FC:75:16"
|
||||
};
|
||||
|
||||
const char google_ouis[][9] PROGMEM = {
|
||||
"3C:5A:B4", "5C:BF:C0", "78:4F:43", "A4:77:33", "D4:97:0B", "F0:72:8C"
|
||||
};
|
||||
|
||||
const char huawei_ouis[][9] PROGMEM = {
|
||||
"00:1A:2B", "28:FF:3C", "5C:4C:A9", "8C:71:F8", "C8:D1:5E",
|
||||
"E4:4C:A9", "F4:12:FA"
|
||||
};
|
||||
|
||||
const char lg_ouis[][9] PROGMEM = {
|
||||
"00:17:C0", "18:AF:8F", "38:2D:AE", "5C:87:9C", "68:27:37",
|
||||
"78:5D:C8", "94:65:2D", "A4:77:33", "C4:43:8F"
|
||||
};
|
||||
|
||||
const char linksys_ouis[][9] PROGMEM = {
|
||||
"00:04:5A", "00:06:25", "00:0C:41", "00:0E:08", "00:0F:66", "00:12:17", "00:13:10", "00:14:BF", "00:16:B6",
|
||||
"00:18:39", "00:18:F8", "00:1A:70", "00:1C:10", "00:1D:7E", "00:1E:E5", "00:21:29", "00:22:6B", "00:23:69",
|
||||
"00:25:9C", "00:23:54", "00:24:B2", "00:31:92", "00:5F:67", "10:27:F5", "14:EB:B6", "1C:61:B4", "20:36:26",
|
||||
"28:87:BA", "30:5A:3A", "2C:FD:A1", "30:23:03", "30:46:9A", "40:ED:00", "48:22:54", "50:91:E3", "54:AF:97",
|
||||
"5C:A2:F4", "5C:A6:E6", "5C:E9:31", "60:A4:B7", "68:7F:F0", "6C:5A:B0", "78:8C:B5", "7C:C2:C6", "9C:53:22",
|
||||
"9C:A2:F4", "A8:42:A1", "AC:15:A2", "B0:A7:B9", "B4:B0:24", "C0:06:C3", "CC:68:B6", "E8:48:B8", "F0:A7:31"
|
||||
};
|
||||
|
||||
const char netgear_ouis[][9] PROGMEM = {
|
||||
"00:09:5B", "00:0F:B5", "00:14:6C", "00:1B:2F", "00:1E:2A", "00:1F:33", "00:22:3F", "00:22:4B", "00:26:F2",
|
||||
"00:8E:F2", "08:02:8E", "08:36:C9", "08:BD:43", "10:0C:6B", "10:0D:7F", "10:DA:43", "14:59:C0", "20:4E:7F",
|
||||
"20:E5:2A", "28:80:88", "28:94:01", "28:C6:8E", "2C:30:33", "2C:B0:5D", "30:46:9A", "34:98:B5", "38:94:ED",
|
||||
"3C:37:86", "40:5D:82", "44:A5:6E", "4C:60:DE", "50:4A:6E", "50:6A:03", "54:07:7D", "58:EF:68", "60:38:E0",
|
||||
"6C:B0:CE", "6C:CD:D6", "74:44:01", "80:37:73", "84:1B:5E", "8C:3B:AD", "94:18:65", "9C:3D:CF", "9C:C9:EB",
|
||||
"9C:D3:6D", "A0:04:60", "A0:21:B7", "A0:40:A0", "A4:2B:8C", "B0:39:56", "B0:7F:B9", "B0:B9:8A", "BC:A5:11",
|
||||
"C0:3F:0E", "C0:FF:D4", "C4:04:15", "C4:3D:C7", "C8:9E:43", "CC:40:D0", "DC:EF:09", "E0:46:9A", "E0:46:EE",
|
||||
"E0:91:F5", "E4:F4:C6", "E8:FC:AF", "F8:73:94"
|
||||
};
|
||||
|
||||
const char oneplus_ouis[][9] PROGMEM = {
|
||||
"08:EC:A9", "30:9C:23", "38:78:62", "64:A2:F9", "74:AC:B9",
|
||||
"A8:14:51", "B4:86:55", "D8:CB:8A", "F4:8C:50"
|
||||
};
|
||||
|
||||
const char samsung_ouis[][9] PROGMEM = {
|
||||
"00:12:47", "00:15:99", "00:16:6B", "00:1B:FC", "10:5F:06",
|
||||
"18:59:36", "20:02:AF", "24:4B:03", "38:2D:3D", "40:B8:37",
|
||||
"00:1F:12", "00:1D:0F", "00:1A:9A", "00:19:E1", "00:18:FF",
|
||||
"00:17:77", "00:16:72", "00:14:69", "00:13:65", "00:12:60",
|
||||
"30:37:0D", "40:8C:47", "50:55:5F", "60:47:A1", "70:0A:AD",
|
||||
"80:61:43", "90:48:F7", "A0:4C:CB", "B0:5E:93", "C0:3D:F5",
|
||||
"D0:31:AA", "E0:4F:02", "F0:3B:94"
|
||||
};
|
||||
|
||||
const char sony_ouis[][9] PROGMEM = {
|
||||
"00:19:C5", "00:1B:59", "00:1E:DC", "10:68:3F", "54:42:49",
|
||||
"A8:E3:EE", "B8:F9:34", "CC:5D:4E", "E8:89:2F"
|
||||
};
|
||||
|
||||
const char tplink_ouis[][9] PROGMEM = {
|
||||
"00:31:92", "00:5F:67", "10:27:F5", "14:EB:B6", "1C:61:B4", "20:36:26", "28:87:BA", "30:DE:4B", "34:60:F9",
|
||||
"3C:52:A1", "40:ED:00", "48:22:54", "50:91:E3", "54:AF:97", "5C:62:8B", "5C:A6:E6", "5C:E9:31", "60:A4:B7",
|
||||
"68:7F:F0", "6C:5A:B0", "78:8C:B5", "7C:C2:C6", "9C:53:22", "9C:A2:F4", "A8:42:A1", "AC:15:A2", "B0:A7:B9",
|
||||
"B4:B0:24", "C0:06:C3", "CC:68:B6", "E8:48:B8", "F0:A7:31"
|
||||
};
|
||||
|
||||
const char xiaomi_ouis[][9] PROGMEM = {
|
||||
"04:CF:8C", "18:59:36", "38:1A:2D", "64:B4:73", "78:02:F8",
|
||||
"90:4E:91", "C4:0B:CB", "D0:DB:32"
|
||||
};
|
||||
|
||||
uint8_t getDRAMUsagePercent() {
|
||||
//size_t total = heap_caps_get_total_size(MALLOC_CAP_8BIT);
|
||||
//size_t free = heap_caps_get_free_size(MALLOC_CAP_8BIT);
|
||||
size_t free = ESP.getFreeHeap();
|
||||
size_t total = ESP.getHeapSize();
|
||||
|
||||
if (total == 0) return 0; // Avoid division by zero
|
||||
|
||||
size_t used = total - free;
|
||||
uint8_t percent = (used * 100) / total;
|
||||
return percent;
|
||||
}
|
||||
|
||||
#ifdef HAS_PSRAM
|
||||
uint8_t getPSRAMUsagePercent() {
|
||||
//size_t total = heap_caps_get_total_size(MALLOC_CAP_SPIRAM);
|
||||
//size_t free = heap_caps_get_free_size(MALLOC_CAP_SPIRAM);
|
||||
|
||||
size_t total = ESP.getPsramSize();
|
||||
size_t free = ESP.getFreePsram();
|
||||
|
||||
if (total == 0) return 0; // Avoid division by zero or PSRAM not available
|
||||
|
||||
size_t used = total - free;
|
||||
uint8_t percent = (used * 100) / total;
|
||||
return percent;
|
||||
}
|
||||
#endif
|
||||
|
||||
String byteArrayToHexString(const std::vector<uint8_t>& byteArray) {
|
||||
String result;
|
||||
|
||||
for (size_t i = 0; i < byteArray.size(); i++) {
|
||||
// Append the byte in "0xXX" format
|
||||
result += "0x";
|
||||
if (byteArray[i] < 0x10) {
|
||||
result += "0"; // Add leading zero for single-digit hex values
|
||||
}
|
||||
result += String(byteArray[i], HEX);
|
||||
|
||||
// Add a space between bytes, but not at the end
|
||||
if (i < byteArray.size() - 1) {
|
||||
result += " ";
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
std::vector<uint8_t> hexStringToByteArray(const String& hexString) {
|
||||
std::vector<uint8_t> byteArray;
|
||||
|
||||
// Split the input string by spaces
|
||||
int startIndex = 0;
|
||||
while (startIndex < hexString.length()) {
|
||||
// Find the next space or end of string
|
||||
int spaceIndex = hexString.indexOf(' ', startIndex);
|
||||
|
||||
// If no space is found, process the last token
|
||||
if (spaceIndex == -1) {
|
||||
spaceIndex = hexString.length();
|
||||
}
|
||||
|
||||
// Extract the "0xXX" part
|
||||
String byteString = hexString.substring(startIndex, spaceIndex);
|
||||
|
||||
// Convert "0xXX" to an integer and store it in the vector
|
||||
if (byteString.startsWith("0x") || byteString.startsWith("0X")) {
|
||||
uint8_t byte = strtol(byteString.c_str() + 2, nullptr, 16);
|
||||
byteArray.push_back(byte);
|
||||
}
|
||||
|
||||
// Move the start index to the next byte
|
||||
startIndex = spaceIndex + 1;
|
||||
}
|
||||
|
||||
return byteArray;
|
||||
}
|
||||
|
||||
void generateRandomName(char *name, size_t length) {
|
||||
static const char alphabet[] = "abcdefghijklmnopqrstuvwxyz";
|
||||
|
||||
// Generate the first character as uppercase
|
||||
name[0] = 'A' + (rand() % 26);
|
||||
|
||||
// Generate the remaining characters as lowercase
|
||||
for (size_t i = 1; i < length - 1; ++i) {
|
||||
name[i] = alphabet[rand() % (sizeof(alphabet) - 1)];
|
||||
}
|
||||
name[length - 1] = '\0'; // Null-terminate the string
|
||||
}
|
||||
|
||||
const char* generateRandomName() {
|
||||
const char* charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
|
||||
int len = rand() % 10 + 1; // Generate a random length between 1 and 10
|
||||
char* randomName = (char*)malloc((len + 1) * sizeof(char)); // Allocate memory for the random name
|
||||
for (int i = 0; i < len; ++i) {
|
||||
randomName[i] = charset[rand() % strlen(charset)]; // Select random characters from the charset
|
||||
}
|
||||
randomName[len] = '\0'; // Null-terminate the string
|
||||
return randomName;
|
||||
}
|
||||
|
||||
void generateRandomMac(uint8_t* mac) {
|
||||
// Set the locally administered bit and unicast bit for the first byte
|
||||
mac[0] = 0x02; // The locally administered bit is the second least significant bit
|
||||
|
||||
// Generate the rest of the MAC address
|
||||
for (int i = 1; i < 6; i++) {
|
||||
mac[i] = random(0, 255);
|
||||
}
|
||||
}
|
||||
|
||||
String macToString(const Station& station) {
|
||||
char macStr[18]; // 6 pairs of hex digits + 5 colons + null terminator
|
||||
snprintf(macStr, sizeof(macStr), "%02X:%02X:%02X:%02X:%02X:%02X",
|
||||
station.mac[0], station.mac[1], station.mac[2],
|
||||
station.mac[3], station.mac[4], station.mac[5]);
|
||||
return String(macStr);
|
||||
}
|
||||
|
||||
String macToString(uint8_t macAddr[6]) {
|
||||
char macStr[18]; // 17 characters for "XX:XX:XX:XX:XX:XX" + 1 null terminator
|
||||
snprintf(macStr, sizeof(macStr), "%02X:%02X:%02X:%02X:%02X:%02X",
|
||||
macAddr[0], macAddr[1], macAddr[2],
|
||||
macAddr[3], macAddr[4], macAddr[5]);
|
||||
return String(macStr);
|
||||
}
|
||||
|
||||
void convertMacStringToUint8(const String& macStr, uint8_t macAddr[6]) {
|
||||
// Ensure the input string is in the format "XX:XX:XX:XX:XX:XX"
|
||||
if (macStr.length() != 17) {
|
||||
Serial.println("Invalid MAC address format");
|
||||
return;
|
||||
}
|
||||
|
||||
// Parse the MAC address string and fill the uint8_t array
|
||||
for (int i = 0; i < 6; i++) {
|
||||
macAddr[i] = (uint8_t)strtol(macStr.substring(i * 3, i * 3 + 2).c_str(), nullptr, 16);
|
||||
}
|
||||
}
|
||||
|
||||
// Function to check if the given MAC address matches any known OUI
|
||||
const char* getManufacturer(const char *addr) {
|
||||
static char oui[9]; // Temporary buffer for extracted OUI
|
||||
|
||||
// Extract the first three bytes (OUI) from addr
|
||||
strncpy(oui, addr, 8);
|
||||
oui[8] = '\0'; // Ensure null termination
|
||||
|
||||
// Convert the addr (OUI) to lowercase
|
||||
for (int i = 0; i < 8; i++) {
|
||||
oui[i] = tolower(oui[i]);
|
||||
}
|
||||
|
||||
// Helper macro to check against an array stored in PROGMEM
|
||||
#define CHECK_OUI(manufacturer, list) \
|
||||
for (uint8_t i = 0; i < sizeof(list) / sizeof(list[0]); i++) { \
|
||||
char storedOUI[9]; \
|
||||
strcpy_P(storedOUI, list[i]); \
|
||||
/* Convert the stored OUI to lowercase */ \
|
||||
for (int j = 0; j < 8; j++) { \
|
||||
storedOUI[j] = tolower(storedOUI[j]); \
|
||||
} \
|
||||
if (strcmp(oui, storedOUI) == 0) return manufacturer; \
|
||||
}
|
||||
|
||||
// Check against known manufacturers
|
||||
CHECK_OUI("Apple", apple_ouis);
|
||||
CHECK_OUI("Asus", asus_ouis);
|
||||
CHECK_OUI("Belkin", belkin_ouis);
|
||||
CHECK_OUI("Cisco", cisco_ouis);
|
||||
CHECK_OUI("DLink", dlink_ouis);
|
||||
CHECK_OUI("Google", google_ouis);
|
||||
CHECK_OUI("Huawei", huawei_ouis);
|
||||
CHECK_OUI("LG", lg_ouis);
|
||||
CHECK_OUI("Linksys", linksys_ouis);
|
||||
CHECK_OUI("Netgear", netgear_ouis);
|
||||
CHECK_OUI("OnePlus", oneplus_ouis);
|
||||
CHECK_OUI("Samsung", samsung_ouis);
|
||||
CHECK_OUI("Sony", sony_ouis);
|
||||
CHECK_OUI("TP-Link", tplink_ouis);
|
||||
CHECK_OUI("Xiaomi", xiaomi_ouis);
|
||||
|
||||
return ""; // Return "Unknown" if no match is found
|
||||
}
|
||||
|
||||
String replaceOUIWithManufacturer(const char *sta_addr) {
|
||||
const char *manufacturer = getManufacturer(sta_addr);
|
||||
|
||||
if (manufacturer == nullptr || strlen(manufacturer) == 0) {
|
||||
return String(sta_addr); // Return original if no manufacturer found
|
||||
}
|
||||
|
||||
// Skip the first 8 characters (3 bytes and 2 colons)
|
||||
const char *mac_suffix = sta_addr + 8;
|
||||
|
||||
// Construct the new address: manufacturer + the remaining MAC address (after the first 3 bytes)
|
||||
return String(manufacturer) + mac_suffix;
|
||||
}
|
||||
|
||||
IPAddress getNextIP(IPAddress currentIP, IPAddress subnetMask) {
|
||||
// Convert IPAddress to uint32_t
|
||||
uint32_t ipInt = (currentIP[0] << 24) | (currentIP[1] << 16) | (currentIP[2] << 8) | currentIP[3];
|
||||
uint32_t maskInt = (subnetMask[0] << 24) | (subnetMask[1] << 16) | (subnetMask[2] << 8) | subnetMask[3];
|
||||
|
||||
uint32_t networkBase = ipInt & maskInt;
|
||||
uint32_t broadcast = networkBase | ~maskInt;
|
||||
|
||||
uint32_t nextIP = ipInt + 1;
|
||||
|
||||
if (nextIP <= networkBase) {
|
||||
nextIP = networkBase + 1;
|
||||
}
|
||||
if (nextIP >= broadcast) {
|
||||
return IPAddress(0, 0, 0, 0); // no more IPs
|
||||
}
|
||||
|
||||
return IPAddress(
|
||||
(nextIP >> 24) & 0xFF,
|
||||
(nextIP >> 16) & 0xFF,
|
||||
(nextIP >> 8) & 0xFF,
|
||||
nextIP & 0xFF
|
||||
);
|
||||
}
|
||||
|
||||
IPAddress getPrevIP(IPAddress currentIP, IPAddress subnetMask, uint16_t stepsBack) {
|
||||
// Convert IPAddress to uint32_t
|
||||
uint32_t ipInt = (currentIP[0] << 24) | (currentIP[1] << 16) | (currentIP[2] << 8) | currentIP[3];
|
||||
uint32_t maskInt = (subnetMask[0] << 24) | (subnetMask[1] << 16) | (subnetMask[2] << 8) | subnetMask[3];
|
||||
|
||||
uint32_t networkBase = ipInt & maskInt;
|
||||
uint32_t broadcast = networkBase | ~maskInt;
|
||||
|
||||
uint32_t prevIP = ipInt - stepsBack;
|
||||
|
||||
// Ensure prevIP is not below the usable range
|
||||
if (prevIP <= networkBase) {
|
||||
return IPAddress(0, 0, 0, 0); // No more IPs
|
||||
}
|
||||
|
||||
return IPAddress(
|
||||
(prevIP >> 24) & 0xFF,
|
||||
(prevIP >> 16) & 0xFF,
|
||||
(prevIP >> 8) & 0xFF,
|
||||
prevIP & 0xFF
|
||||
);
|
||||
}
|
||||
|
||||
uint16_t getNextPort(uint16_t port) {
|
||||
return port + 1;
|
||||
}
|
||||
|
||||
#endif
|
||||
BIN
mechanical/C5 Adapter/.DS_Store
vendored
Normal file
BIN
mechanical/C5 Adapter/Extra designs/.DS_Store
vendored
Normal file
BIN
mechanical/C5 Adapter/Extra designs/c5 adapter back - SMA.stl
Normal file
BIN
mechanical/C5 Adapter/Extra designs/c5 adapter front - SMA.stl
Normal file
BIN
mechanical/C5 Adapter/c5 adapter back.stl
Normal file
BIN
mechanical/C5 Adapter/c5 adapter front.stl
Normal file
BIN
mechanical/C5 Adapter/c5 adapter pin cover.stl
Normal file
BIN
mechanical/Flipper Zero BFFB/Enclosure/Back.stl
Normal file
BIN
mechanical/Flipper Zero BFFB/Enclosure/Front.stl
Normal file
BIN
mechanical/Flipper Zero BFFB/Enclosure/GPIO Cover.stl
Normal file
BIN
mechanical/V7/Back.stl
Normal file
BIN
mechanical/V7/Battery Cover.stl
Normal file
BIN
mechanical/V7/Front.stl
Normal file
BIN
mechanical/V7/Inlay/Front_debos.stl
Normal file
BIN
mechanical/V7/Inlay/v7 Fill.stl
Normal file
BIN
mechanical/V7/Inlay/v7 Outline.stl
Normal file
BIN
mechanical/V7/JCMK Inlay.stl
Normal file
BIN
mechanical/V7/Joystick.stl
Normal file
BIN
mechanical/V7/Power Switch.stl
Normal file
BIN
pictures/BFFB NRF24 Fix/DSC05049-Edit.jpg
Normal file
|
After Width: | Height: | Size: 1.1 MiB |
BIN
pictures/BFFB NRF24 Fix/DSC05050.jpg
Normal file
|
After Width: | Height: | Size: 1.8 MiB |
BIN
pictures/c5_marauder_flipper_adapter.png
Normal file
|
After Width: | Height: | Size: 3.3 KiB |
BIN
pictures/icons/flipper_22.bmp
Normal file
|
After Width: | Height: | Size: 326 B |
BIN
pictures/icons/force_16.bmp
Normal file
|
After Width: | Height: | Size: 1.3 KiB |
BIN
pictures/icons/funny_beacon_22.bmp
Normal file
|
After Width: | Height: | Size: 1.6 KiB |
BIN
pictures/icons/joined_16.bmp
Normal file
|
After Width: | Height: | Size: 1.3 KiB |