aboutsummaryrefslogtreecommitdiff
path: root/src/ui/menu.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/ui/menu.cpp')
-rw-r--r--src/ui/menu.cpp531
1 files changed, 242 insertions, 289 deletions
diff --git a/src/ui/menu.cpp b/src/ui/menu.cpp
index 43c3de4..9898f64 100644
--- a/src/ui/menu.cpp
+++ b/src/ui/menu.cpp
@@ -1,71 +1,55 @@
-#include <Arduino.h>
#include "menu.h"
+#include "BleMouse.h"
+#include "bluetooth/ble_mouse.h"
+#include "bluetooth/blescanner.h"
#include "display.h"
-#include "utils/buttons.h"
#include "hid/badusb.h"
-#include "rf/nrf24.h"
+#include "nfc/nfc.h"
#include "rf/cc1101.h"
-#include "wifi/wifi_scan.h"
-#include "wifi/wifi_analyzer.h"
+#include "rf/nrf24.h"
+#include "utils/buttons.h"
#include "utils/device_check.h"
-#include "bluetooth/ble_mouse.h"
-#include "bluetooth/blescanner.h"
#include "utils/sysinfo.h"
-#include "BleMouse.h"
-#include "nfc/nfc.h"
+#include "wifi/wifi_analyzer.h"
+#include "wifi/wifi_scan.h"
+#include <Arduino.h>
// ================= MENU DATA =================
extern BleMouse bleMouse;
// Root menu
-const char *mainMenuItems[] = {
- "BadUSB",
- "RF Capture",
- "NRF Tools",
- "BLE Scan",
- "Wifi Scan",
- "Wifi Analyzer",
- "System Info",
- "Device Check",
- "Restart",
- "Ble Mouse",
- "NFC Tools"
-};
-
-Menu mainMenu = {mainMenuItems, sizeof(mainMenuItems) / sizeof(mainMenuItems[0])};
+const char *mainMenuItems[] = {"BadUSB", "RF Capture", "NRF Tools",
+ "BLE Scan", "Wifi Scan", "Wifi Analyzer",
+ "System Info", "Device Check", "Restart",
+ "Ble Mouse", "NFC Tools"};
+Menu mainMenu = {mainMenuItems,
+ sizeof(mainMenuItems) / sizeof(mainMenuItems[0])};
// NRF Tools menu
const char *nrfToolsItems[] = {
- "BLE Jammer",
- "Bluetooth Jammer",
- "Wifi Jammer",
- "USB Wireless",
- "Video TX",
- "Zigbee",
- "RC"
+ "BLE Jammer", "Bluetooth Jammer", "Wifi Jammer", "USB Wireless",
+ "Video TX", "Zigbee", "RC"
};
-Menu nrfToolsMenu = {nrfToolsItems, sizeof(nrfToolsItems) / sizeof(nrfToolsItems[0])};
-
-
-const char *badusbItems[] = {
- "ORION Demo",
- "RickRoll",
- "Matrix Rain",
- "Fake Terminal",
- "Wifi Password Extractor",
- "Fake Update",
- "Fake BSOD",
- "Glitch Screen",
- "ASCII Spam",
- "Hacker Typer",
- "PWN Reverse shell",
- "Phishing attack",
- "Desktop Ghost",
- "System Stresser"
-};
+Menu nrfToolsMenu = {nrfToolsItems,
+ sizeof(nrfToolsItems) / sizeof(nrfToolsItems[0])};
+
+const char *badusbItems[] = {"ORION Demo",
+ "RickRoll",
+ "Matrix Rain",
+ "Fake Terminal",
+ "Wifi Password Extractor",
+ "Fake Update",
+ "Fake BSOD",
+ "Glitch Screen",
+ "ASCII Spam",
+ "Hacker Typer",
+ "PWN Reverse shell",
+ "Phishing attack",
+ "Desktop Ghost",
+ "System Stresser"};
Menu badusbMenu = {badusbItems, sizeof(badusbItems) / sizeof(badusbItems[0])};
@@ -82,282 +66,251 @@ bool insideFeature = false;
// ================= DRAW =================
-void drawMenu()
-{
- u8g2.clearBuffer();
+void drawMenu() {
+ u8g2.clearBuffer();
- // scroll handling
- if (menuIndex < menuOffset)
- menuOffset = menuIndex;
+ // scroll handling
+ if (menuIndex < menuOffset)
+ menuOffset = menuIndex;
- if (menuIndex >= menuOffset + MENU_VISIBLE_ROWS)
- menuOffset = menuIndex - MENU_VISIBLE_ROWS + 1;
+ if (menuIndex >= menuOffset + MENU_VISIBLE_ROWS)
+ menuOffset = menuIndex - MENU_VISIBLE_ROWS + 1;
- for (int i = 0; i < MENU_VISIBLE_ROWS; i++)
- {
- int item = menuOffset + i;
+ for (int i = 0; i < MENU_VISIBLE_ROWS; i++) {
+ int item = menuOffset + i;
- if (item >= currentMenu->size)
- break;
+ if (item >= currentMenu->size)
+ break;
- if (item == menuIndex)
- u8g2.drawStr(0, 14 + i * 14, ">");
+ if (item == menuIndex)
+ u8g2.drawStr(0, 14 + i * 14, ">");
- u8g2.drawStr(10, 14 + i * 14, currentMenu->items[item]);
- }
+ u8g2.drawStr(10, 14 + i * 14, currentMenu->items[item]);
+ }
- // scroll indicators
- if (menuOffset > 0)
- u8g2.drawStr(118, 10, "^");
+ // scroll indicators
+ if (menuOffset > 0)
+ u8g2.drawStr(118, 10, "^");
- if (menuOffset + MENU_VISIBLE_ROWS < currentMenu->size)
- u8g2.drawStr(118, 62, "v");
+ if (menuOffset + MENU_VISIBLE_ROWS < currentMenu->size)
+ u8g2.drawStr(118, 62, "v");
- u8g2.sendBuffer();
+ u8g2.sendBuffer();
}
// ================= FEATURE EXECUTION =================
-void launchFeature()
-{
- insideFeature = true;
-
- if (currentMenu == &mainMenu)
- {
- switch (menuIndex)
- {
- case 0: // BadUSB → enter submenu
- currentMenu = &badusbMenu;
- menuIndex = 0;
- menuOffset = 0;
- break;
-
- case 1:
- handleMenu();
- break;
- case 2:
- // startNRFJammer();
- //startBleJammer();
- //startBluetoothJammer();
- currentMenu = &nrfToolsMenu;
- menuIndex = 0;
- menuOffset = 0;
- break;
-
- break;
- case 3:
- ble_scan();
- ble_drawMenu();
- while (1) {
- ble_loop();
- if (btnBack())
- break;
- }
- break;
-
- case 4:
- {
- // Start scan once
- wifi_scan_start();
- wifi_scan_draw();
-
- while (1) {
- wifi_scan_loop();
- // EXIT condition handled ONLY here
- if (btnBack()) {
- delay(150); // debounce
- break;
- }
- }
- break;
- }
- case 5:
- {
-
- wifi_analyzer_start();
-
- bool prevBack = false;
- while (1)
- {
- wifi_analyzer_loop();
- bool nowBack = btnBack();
- if (nowBack && !prevBack)
- {
- delay(150);
- break;
- }
- prevBack = nowBack;
- }
- break;
- }
-
- case 6:
- runSystemInfoFeature();
- break;
- case 7:
- device_check_run();
- break;
- case 8:
- {
- // wait for button release
- delay(200);
-
- while (btnSelect())
- delay(10);
- bool confirm = false;
-
- while (1)
- {
- u8g2.clearBuffer();
- u8g2.setFont(u8g2_font_6x13_tr);
-
- u8g2.drawStr(18, 18, "Restart Device?");
-
- if (confirm)
- {
- u8g2.drawBox(10, 35, 45, 15);
- u8g2.setDrawColor(0);
- u8g2.drawStr(20, 47, "YES");
- u8g2.setDrawColor(1);
-
- u8g2.drawStr(75, 47, "NO");
- }
- else
- {
- u8g2.drawStr(20, 47, "YES");
-
- u8g2.drawBox(65, 35, 45, 15);
- u8g2.setDrawColor(0);
- u8g2.drawStr(78, 47, "NO");
- u8g2.setDrawColor(1);
- }
-
- u8g2.sendBuffer();
-
- if (btnLeft() || btnUp())
- {
- confirm = true;
- delay(150);
- }
-
- if (btnRight() || btnDown())
- {
- confirm = false;
- delay(150);
- }
-
- if (btnSelect())
- {
- delay(150);
-
- if (confirm)
- {
- u8g2.clearBuffer();
- u8g2.drawStr(28, 30, "Restarting...");
- u8g2.sendBuffer();
-
- delay(1000);
- ESP.restart();
- }
- else
- {
- break;
- }
- }
-
- if (btnBack())
- {
- delay(150);
- break;
- }
- }
- }
- break;
-
- case 9:
- // Begin Ble mouse
- bleMouse.begin();
- ble_mouse_run();
- break;
- case 10:
- pn532_scan_loop();
- break;
+void launchFeature() {
+ insideFeature = true;
+
+ if (currentMenu == &mainMenu) {
+ switch (menuIndex) {
+ case 0: // BadUSB → enter submenu
+ currentMenu = &badusbMenu;
+ menuIndex = 0;
+ menuOffset = 0;
+ break;
+
+ case 1:
+ handleMenu();
+ break;
+ case 2:
+ // startNRFJammer();
+ // startBleJammer();
+ // startBluetoothJammer();
+ currentMenu = &nrfToolsMenu;
+ menuIndex = 0;
+ menuOffset = 0;
+ break;
+
+ break;
+ case 3:
+ ble_scan();
+ ble_drawMenu();
+ while (1) {
+ ble_loop();
+ if (btnBack())
+ break;
+ }
+ break;
+
+ case 4: {
+ // Start scan once
+ wifi_scan_start();
+ wifi_scan_draw();
+
+ while (1) {
+ wifi_scan_loop();
+ // EXIT condition handled ONLY here
+ if (btnBack()) {
+ delay(150); // debounce
+ break;
}
+ }
+ break;
}
- else if (currentMenu == &badusbMenu)
- {
- badUSBMenu(menuIndex);
- } else if (currentMenu == &nrfToolsMenu) {
- NRFToolsMenu(menuIndex);
+ case 5: {
+
+ wifi_analyzer_start();
+
+ bool prevBack = false;
+ while (1) {
+ wifi_analyzer_loop();
+ bool nowBack = btnBack();
+ if (nowBack && !prevBack) {
+ delay(150);
+ break;
+ }
+ prevBack = nowBack;
+ }
+ break;
}
- insideFeature = false;
+ case 6:
+ runSystemInfoFeature();
+ break;
+ case 7:
+ device_check_run();
+ break;
+ case 8: {
+ // wait for button release
+ delay(200);
+
+ while (btnSelect())
+ delay(10);
+ bool confirm = false;
+
+ while (1) {
+ u8g2.clearBuffer();
+ u8g2.setFont(u8g2_font_6x13_tr);
+
+ u8g2.drawStr(18, 18, "Restart Device?");
+
+ if (confirm) {
+ u8g2.drawBox(10, 35, 45, 15);
+ u8g2.setDrawColor(0);
+ u8g2.drawStr(20, 47, "YES");
+ u8g2.setDrawColor(1);
+
+ u8g2.drawStr(75, 47, "NO");
+ } else {
+ u8g2.drawStr(20, 47, "YES");
+
+ u8g2.drawBox(65, 35, 45, 15);
+ u8g2.setDrawColor(0);
+ u8g2.drawStr(78, 47, "NO");
+ u8g2.setDrawColor(1);
+ }
+
+ u8g2.sendBuffer();
- drawMenu();
+ if (btnLeft() || btnUp()) {
+ confirm = true;
+ delay(150);
+ }
+
+ if (btnRight() || btnDown()) {
+ confirm = false;
+ delay(150);
+ }
+
+ if (btnSelect()) {
+ delay(150);
+
+ if (confirm) {
+ u8g2.clearBuffer();
+ u8g2.drawStr(28, 30, "Restarting...");
+ u8g2.sendBuffer();
+
+ delay(1000);
+ ESP.restart();
+ } else {
+ break;
+ }
+ }
+
+ if (btnBack()) {
+ delay(150);
+ break;
+ }
+ }
+ } break;
+
+ case 9:
+ // Begin Ble mouse
+ bleMouse.begin();
+ ble_mouse_run();
+ break;
+ case 10:
+ pn532_scan_loop();
+ break;
+ }
+ } else if (currentMenu == &badusbMenu) {
+ badUSBMenu(menuIndex);
+ } else if (currentMenu == &nrfToolsMenu) {
+ NRFToolsMenu(menuIndex);
+ }
+
+ insideFeature = false;
+
+ drawMenu();
}
// ================= INIT =================
-void menuInit()
-{
- currentMenu = &mainMenu;
- menuIndex = 0;
- menuOffset = 0;
+void menuInit() {
+ currentMenu = &mainMenu;
+ menuIndex = 0;
+ menuOffset = 0;
- drawMenu();
+ drawMenu();
}
// ================= LOOP =================
-void menuLoop()
-{
- static uint32_t lastPress = 0;
-
- if (insideFeature)
- return;
+void menuLoop() {
+ static uint32_t lastPress = 0;
- if (millis() - lastPress < 150)
- return;
+ if (insideFeature)
+ return;
- if (btnUp())
- {
- menuIndex--;
+ if (millis() - lastPress < 150)
+ return;
- if (menuIndex < 0)
- menuIndex = currentMenu->size - 1;
+ if (btnUp()) {
+ menuIndex--;
- drawMenu();
- lastPress = millis();
- }
+ if (menuIndex < 0)
+ menuIndex = currentMenu->size - 1;
- else if (btnDown())
- {
- menuIndex++;
+ drawMenu();
+ lastPress = millis();
+ }
- if (menuIndex >= currentMenu->size)
- menuIndex = 0;
+ else if (btnDown()) {
+ menuIndex++;
- drawMenu();
- lastPress = millis();
- }
+ if (menuIndex >= currentMenu->size)
+ menuIndex = 0;
- else if (btnSelect())
- {
- launchFeature();
- lastPress = millis();
- }
+ drawMenu();
+ lastPress = millis();
+ }
- else if (btnBack())
- {
- if (currentMenu != &mainMenu)
- {
- currentMenu = &mainMenu;
- menuIndex = 0;
- menuOffset = 0;
+ else if (btnSelect()) {
+ launchFeature();
+ lastPress = millis();
+ }
- drawMenu();
- }
+ else if (btnBack()) {
+ if (currentMenu != &mainMenu) {
+ currentMenu = &mainMenu;
+ menuIndex = 0;
+ menuOffset = 0;
- lastPress = millis();
+ drawMenu();
}
+
+ lastPress = millis();
+ }
}