aboutsummaryrefslogtreecommitdiff
path: root/src/rf/cc1101.cpp
diff options
context:
space:
mode:
authorkrolyxon <me@krolyxon.com>2026-05-14 23:14:31 +0530
committerkrolyxon <me@krolyxon.com>2026-05-14 23:14:31 +0530
commit206ed229198be252a9ae94342b39618aaab55925 (patch)
tree06d2ad100372c595974f1c6dcb1cd23ccdd26207 /src/rf/cc1101.cpp
parent3672abc8b44c50ab344aeaf3c720c8502ccc128d (diff)
apply code formatting
Diffstat (limited to 'src/rf/cc1101.cpp')
-rw-r--r--src/rf/cc1101.cpp535
1 files changed, 242 insertions, 293 deletions
diff --git a/src/rf/cc1101.cpp b/src/rf/cc1101.cpp
index 50530f4..f9b16b7 100644
--- a/src/rf/cc1101.cpp
+++ b/src/rf/cc1101.cpp
@@ -1,10 +1,10 @@
-#include <Arduino.h>
-#include "../libs/ELECHOUSE_CC1101_SRC_DRV.h"
#include "cc1101.h"
#include "../config.h"
-#include "SPI.h"
+#include "../libs/ELECHOUSE_CC1101_SRC_DRV.h"
#include "../ui/display.h"
#include "../utils/buttons.h"
+#include "SPI.h"
+#include <Arduino.h>
// ===== CONFIG =====
#define RAW_BUF_MAX 512
@@ -26,383 +26,332 @@ float rxBW = 325.0;
int powerLevel = 10;
// ===== ISR =====
-void IRAM_ATTR pulseISR()
-{
- unsigned long now = micros();
+void IRAM_ATTR pulseISR() {
+ unsigned long now = micros();
- if (!capturing) return;
- if (pulseIndex >= RAW_BUF_MAX) return;
+ if (!capturing)
+ return;
+ if (pulseIndex >= RAW_BUF_MAX)
+ return;
- unsigned long duration = now - lastEdgeTime;
+ unsigned long duration = now - lastEdgeTime;
- if (duration < 150) return;
+ if (duration < 150)
+ return;
- captureBuffer[pulseIndex++] = duration;
- lastEdgeTime = now;
+ captureBuffer[pulseIndex++] = duration;
+ lastEdgeTime = now;
}
// ===== OOK SETUP =====
-void setupOOKMode()
-{
- ELECHOUSE_cc1101.SetRx();
- ELECHOUSE_cc1101.setMHZ(currentFreq);
-
- ELECHOUSE_cc1101.setModulation(2); // ASK/OOK
- ELECHOUSE_cc1101.setDRate(dataRate);
- ELECHOUSE_cc1101.setDeviation(0);
- ELECHOUSE_cc1101.setRxBW(rxBW);
- ELECHOUSE_cc1101.setSyncMode(0);
- ELECHOUSE_cc1101.setPA(powerLevel);
+void setupOOKMode() {
+ ELECHOUSE_cc1101.SetRx();
+ ELECHOUSE_cc1101.setMHZ(currentFreq);
+
+ ELECHOUSE_cc1101.setModulation(2); // ASK/OOK
+ ELECHOUSE_cc1101.setDRate(dataRate);
+ ELECHOUSE_cc1101.setDeviation(0);
+ ELECHOUSE_cc1101.setRxBW(rxBW);
+ ELECHOUSE_cc1101.setSyncMode(0);
+ ELECHOUSE_cc1101.setPA(powerLevel);
}
// ===== INIT (LAZY, SAFE) =====
// ================= CC1101 INIT =================
-bool initCC1101()
-{
- Serial.println();
- Serial.println("===== CC1101 INIT =====");
-
- // ===== SPI =====
- SPI.begin(
- cc1101_SCK,
- cc1101_MISO,
- cc1101_MOSI,
- CC1101_CS
- );
-
- pinMode(CC1101_CS, OUTPUT);
- digitalWrite(CC1101_CS, HIGH);
-
- delay(100);
-
- // ===== GDO =====
- ELECHOUSE_cc1101.setGDO(
- CC1101_GDO0,
- -1
- );
-
- ELECHOUSE_cc1101.setSpiPin(
- cc1101_SCK,
- cc1101_MISO,
- cc1101_MOSI,
- CC1101_CS
- );
-
- // ===== DETECT =====
- Serial.println("Checking chip...");
-
- if (!ELECHOUSE_cc1101.getCC1101())
- {
- Serial.println("❌ CC1101 NOT FOUND");
- return false;
- }
+bool initCC1101() {
+ Serial.println();
+ Serial.println("===== CC1101 INIT =====");
+
+ // ===== SPI =====
+ SPI.begin(cc1101_SCK, cc1101_MISO, cc1101_MOSI, CC1101_CS);
+
+ pinMode(CC1101_CS, OUTPUT);
+ digitalWrite(CC1101_CS, HIGH);
+
+ delay(100);
+
+ // ===== GDO =====
+ ELECHOUSE_cc1101.setGDO(CC1101_GDO0, -1);
+
+ ELECHOUSE_cc1101.setSpiPin(cc1101_SCK, cc1101_MISO, cc1101_MOSI, CC1101_CS);
+
+ // ===== DETECT =====
+ Serial.println("Checking chip...");
- Serial.println("✅ CC1101 FOUND");
+ if (!ELECHOUSE_cc1101.getCC1101()) {
+ Serial.println("❌ CC1101 NOT FOUND");
+ return false;
+ }
- // ===== IMPORTANT =====
- // DO NOT CALL Init()
- // it freezes on some ESP32-S3 setups
+ Serial.println("✅ CC1101 FOUND");
- // ===== MANUAL CONFIG =====
- ELECHOUSE_cc1101.setMHZ(currentFreq);
+ // ===== IMPORTANT =====
+ // DO NOT CALL Init()
+ // it freezes on some ESP32-S3 setups
- // 2 = ASK/OOK
- ELECHOUSE_cc1101.setModulation(2);
+ // ===== MANUAL CONFIG =====
+ ELECHOUSE_cc1101.setMHZ(currentFreq);
- ELECHOUSE_cc1101.setDRate(dataRate);
+ // 2 = ASK/OOK
+ ELECHOUSE_cc1101.setModulation(2);
- ELECHOUSE_cc1101.setRxBW(rxBW);
+ ELECHOUSE_cc1101.setDRate(dataRate);
- ELECHOUSE_cc1101.setDeviation(0);
+ ELECHOUSE_cc1101.setRxBW(rxBW);
- // disable sync requirement
- ELECHOUSE_cc1101.setSyncMode(0);
+ ELECHOUSE_cc1101.setDeviation(0);
- ELECHOUSE_cc1101.setPA(powerLevel);
+ // disable sync requirement
+ ELECHOUSE_cc1101.setSyncMode(0);
- // async serial mode
- ELECHOUSE_cc1101.setCCMode(0);
+ ELECHOUSE_cc1101.setPA(powerLevel);
- // enter RX
- ELECHOUSE_cc1101.SetRx();
+ // async serial mode
+ ELECHOUSE_cc1101.setCCMode(0);
- pinMode(CC1101_GDO0, INPUT);
+ // enter RX
+ ELECHOUSE_cc1101.SetRx();
- Serial.println("✅ RX MODE READY");
+ pinMode(CC1101_GDO0, INPUT);
- cc1101Inited = true;
- return true;
+ Serial.println("✅ RX MODE READY");
+
+ cc1101Inited = true;
+ return true;
}
// ===== CAPTURE CONTROL =====
-void startCapture()
-{
- pulseIndex = 0;
- capturing = true;
- lastEdgeTime = micros();
-
- attachInterrupt(
- digitalPinToInterrupt(CC1101_GDO0),
- pulseISR,
- CHANGE
- );
-
- Serial.println("Looking for RF... ");
-}
+void startCapture() {
+ pulseIndex = 0;
+ capturing = true;
+ lastEdgeTime = micros();
-bool isCC1101Ready() {
- return cc1101Inited;
+ attachInterrupt(digitalPinToInterrupt(CC1101_GDO0), pulseISR, CHANGE);
+
+ Serial.println("Looking for RF... ");
}
-void stopCapture()
-{
- capturing = false;
+bool isCC1101Ready() { return cc1101Inited; }
+
+void stopCapture() {
+ capturing = false;
- detachInterrupt(digitalPinToInterrupt(CC1101_GDO0));
+ detachInterrupt(digitalPinToInterrupt(CC1101_GDO0));
- Serial.println("Capture stopped");
+ Serial.println("Capture stopped");
}
// ===== DEBUG PRINT =====
-void printCapture()
-{
- Serial.println("Captured pulses:");
+void printCapture() {
+ Serial.println("Captured pulses:");
- for (int i = 0; i < pulseIndex; i++)
- {
- Serial.println(captureBuffer[i]);
- }
+ for (int i = 0; i < pulseIndex; i++) {
+ Serial.println(captureBuffer[i]);
+ }
}
-
// ================= REPLAY =================
-void replaySignal()
-{
- Serial.println();
- Serial.println("Replaying signal...");
+void replaySignal() {
+ Serial.println();
+ Serial.println("Replaying signal...");
- stopCapture();
+ stopCapture();
- ELECHOUSE_cc1101.SetTx();
+ ELECHOUSE_cc1101.SetTx();
- pinMode(CC1101_GDO0, OUTPUT);
+ pinMode(CC1101_GDO0, OUTPUT);
- for (int i = 0; i < pulseIndex; i++)
- {
- digitalWrite(
- CC1101_GDO0,
- (i % 2 == 0) ? HIGH : LOW
- );
+ for (int i = 0; i < pulseIndex; i++) {
+ digitalWrite(CC1101_GDO0, (i % 2 == 0) ? HIGH : LOW);
- delayMicroseconds(captureBuffer[i]);
- }
+ delayMicroseconds(captureBuffer[i]);
+ }
- digitalWrite(CC1101_GDO0, LOW);
+ digitalWrite(CC1101_GDO0, LOW);
- ELECHOUSE_cc1101.SetRx();
+ ELECHOUSE_cc1101.SetRx();
- pinMode(CC1101_GDO0, INPUT);
+ pinMode(CC1101_GDO0, INPUT);
- Serial.println("Replay complete");
+ Serial.println("Replay complete");
}
-
-void captureAndDisplay()
-{
- if (!cc1101Inited)
- {
- if (!initCC1101())
- {
- u8g2.clearBuffer();
- u8g2.setFont(u8g2_font_6x10_tr);
- u8g2.drawStr(0, 20, "CC1101 Failed");
- u8g2.sendBuffer();
- return;
- }
+void captureAndDisplay() {
+ if (!cc1101Inited) {
+ if (!initCC1101()) {
+ u8g2.clearBuffer();
+ u8g2.setFont(u8g2_font_6x10_tr);
+ u8g2.drawStr(0, 20, "CC1101 Failed");
+ u8g2.sendBuffer();
+ return;
}
+ }
+
+ startCapture();
+
+ u8g2.clearBuffer();
+ u8g2.setFont(u8g2_font_6x10_tr);
+ u8g2.drawStr(0, 12, "CC1101 Capture");
+ u8g2.drawStr(0, 28, "Waiting RF...");
+ u8g2.drawStr(0, 60, "BACK = Exit");
+ u8g2.sendBuffer();
- startCapture();
+ unsigned long lastSignal = millis();
+ int lastPulseCount = 0;
+ while (true) {
+ // signal detected
+ if (pulseIndex > lastPulseCount) {
+ lastPulseCount = pulseIndex;
+ lastSignal = millis();
+ }
+
+ // update OLED
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_6x10_tr);
+
u8g2.drawStr(0, 12, "CC1101 Capture");
- u8g2.drawStr(0, 28, "Waiting RF...");
- u8g2.drawStr(0, 60, "BACK = Exit");
+
+ u8g2.setCursor(0, 28);
+ u8g2.print("Pulses: ");
+ u8g2.print(pulseIndex);
+
+ u8g2.setCursor(0, 42);
+ u8g2.print("Freq: ");
+ u8g2.print(currentFreq);
+ u8g2.print(" MHz");
+
+ if (pulseIndex > 0) {
+ u8g2.drawStr(0, 54, "Signal Detected");
+ } else {
+ u8g2.drawStr(0, 54, "Waiting...");
+ }
+
u8g2.sendBuffer();
- unsigned long lastSignal = millis();
- int lastPulseCount = 0;
-
- while (true)
- {
- // signal detected
- if (pulseIndex > lastPulseCount)
- {
- lastPulseCount = pulseIndex;
- lastSignal = millis();
- }
-
- // update OLED
- u8g2.clearBuffer();
- u8g2.setFont(u8g2_font_6x10_tr);
-
- u8g2.drawStr(0, 12, "CC1101 Capture");
-
- u8g2.setCursor(0, 28);
- u8g2.print("Pulses: ");
- u8g2.print(pulseIndex);
-
- u8g2.setCursor(0, 42);
- u8g2.print("Freq: ");
- u8g2.print(currentFreq);
- u8g2.print(" MHz");
-
- if (pulseIndex > 0)
- {
- u8g2.drawStr(0, 54, "Signal Detected");
- }
- else
- {
- u8g2.drawStr(0, 54, "Waiting...");
- }
-
- u8g2.sendBuffer();
-
- // auto print once capture stabilizes
- if (pulseIndex > 20 && (millis() - lastSignal > 1500))
- {
- stopCapture();
-
- Serial.println();
- Serial.println("===== RF CAPTURE =====");
-
- for (int i = 0; i < pulseIndex; i++)
- {
- Serial.print(captureBuffer[i]);
- Serial.print(", ");
- }
-
- Serial.println();
-
- u8g2.clearBuffer();
- u8g2.setFont(u8g2_font_6x10_tr);
- u8g2.drawStr(0, 15, "Capture Complete");
-
- u8g2.setCursor(0, 35);
-}
-}
-}
+ // auto print once capture stabilizes
+ if (pulseIndex > 20 && (millis() - lastSignal > 1500)) {
+ stopCapture();
+
+ Serial.println();
+ Serial.println("===== RF CAPTURE =====");
+
+ for (int i = 0; i < pulseIndex; i++) {
+ Serial.print(captureBuffer[i]);
+ Serial.print(", ");
+ }
-void handleMenu()
-{
- if (!isCC1101Ready())
- {
- if (!initCC1101())
- {
- u8g2.clearBuffer();
- u8g2.setFont(u8g2_font_6x10_tr);
- u8g2.drawStr(0, 20, "CC1101 Failed");
- u8g2.sendBuffer();
- delay(1500);
- return;
- }
+ Serial.println();
+
+ u8g2.clearBuffer();
+ u8g2.setFont(u8g2_font_6x10_tr);
+ u8g2.drawStr(0, 15, "Capture Complete");
+
+ u8g2.setCursor(0, 35);
}
+ }
+}
- pulseIndex = 0;
+void handleMenu() {
+ if (!isCC1101Ready()) {
+ if (!initCC1101()) {
+ u8g2.clearBuffer();
+ u8g2.setFont(u8g2_font_6x10_tr);
+ u8g2.drawStr(0, 20, "CC1101 Failed");
+ u8g2.sendBuffer();
+ delay(1500);
+ return;
+ }
+ }
- startCapture();
+ pulseIndex = 0;
- // ===== CAPTURE FOR 5 SEC =====
- unsigned long start = millis();
+ startCapture();
- while (millis() - start < 5000)
- {
- noInterrupts();
- int count = pulseIndex;
- interrupts();
+ // ===== CAPTURE FOR 5 SEC =====
+ unsigned long start = millis();
- u8g2.clearBuffer();
- u8g2.setFont(u8g2_font_6x10_tr);
+ while (millis() - start < 5000) {
+ noInterrupts();
+ int count = pulseIndex;
+ interrupts();
- u8g2.drawStr(0, 12, "RF Capturing...");
+ u8g2.clearBuffer();
+ u8g2.setFont(u8g2_font_6x10_tr);
- u8g2.setCursor(0, 30);
- u8g2.print("Pulses: ");
- u8g2.print(count);
+ u8g2.drawStr(0, 12, "RF Capturing...");
- u8g2.sendBuffer();
+ u8g2.setCursor(0, 30);
+ u8g2.print("Pulses: ");
+ u8g2.print(count);
- delay(50);
- }
+ u8g2.sendBuffer();
- stopCapture();
+ delay(50);
+ }
- // ===== DISPLAY CAPTURE BUFFER =====
- int scroll = 0;
+ stopCapture();
- while (1)
- {
- noInterrupts();
- int count = pulseIndex;
- interrupts();
+ // ===== DISPLAY CAPTURE BUFFER =====
+ int scroll = 0;
- u8g2.clearBuffer();
- u8g2.setFont(u8g2_font_5x8_tr);
+ while (1) {
+ noInterrupts();
+ int count = pulseIndex;
+ interrupts();
- u8g2.drawStr(0, 8, "Captured Buffer");
+ u8g2.clearBuffer();
+ u8g2.setFont(u8g2_font_5x8_tr);
- // display 6 lines
- for (int i = 0; i < 6; i++)
- {
- int idx = scroll + i;
+ u8g2.drawStr(0, 8, "Captured Buffer");
- if (idx >= count)
- break;
+ // display 6 lines
+ for (int i = 0; i < 6; i++) {
+ int idx = scroll + i;
- noInterrupts();
- unsigned long val = captureBuffer[idx];
- interrupts();
+ if (idx >= count)
+ break;
- char buf[32];
+ noInterrupts();
+ unsigned long val = captureBuffer[idx];
+ interrupts();
- snprintf(buf, sizeof(buf), "%03d: %lu", idx, val);
+ char buf[32];
- u8g2.drawStr(0, 20 + (i * 8), buf);
- }
+ snprintf(buf, sizeof(buf), "%03d: %lu", idx, val);
- u8g2.sendBuffer();
+ u8g2.drawStr(0, 20 + (i * 8), buf);
+ }
- // scroll down
- if (btnDown())
- {
- if (scroll < count - 1)
- scroll++;
+ u8g2.sendBuffer();
- delay(120);
- }
+ // scroll down
+ if (btnDown()) {
+ if (scroll < count - 1)
+ scroll++;
- // scroll up
- if (btnUp())
- {
- if (scroll > 0)
- scroll--;
+ delay(120);
+ }
- delay(120);
- }
+ // scroll up
+ if (btnUp()) {
+ if (scroll > 0)
+ scroll--;
- // replay
- if (btnSelect())
- {
- replaySignal();
- delay(300);
- }
+ delay(120);
+ }
- // exit
- if (btnBack())
- {
- delay(150);
- return;
- }
+ // replay
+ if (btnSelect()) {
+ replaySignal();
+ delay(300);
+ }
- delay(20);
+ // exit
+ if (btnBack()) {
+ delay(150);
+ return;
}
+
+ delay(20);
+ }
}