Files
car-key-killer/include/config.h
drjones 05dfde60e9 Final review fixes: capture state, stopJamming idempotency, code cleanup
Critical bug fixes:
- stopJamming() was returning early when jammingEnabled=false, leaving radios
  in unknown state and breaking capture when jamming was off
- stopJamming() now idempotent: always stops noise timer (+ nulls pointer),
  drives GDO0 low, puts transmitting radios to standby — safe to call anytime
- Add capPrevJamming flag saved before stopJamming() clears jammingEnabled;
  used by stopCapture() and buffer-full handler to correctly restart jamming
  after capture/replay sessions end

Code quality:
- capAnalyze() called twice per /api/capture/status request — now called once
- Remove unused JAM_NOISE_PATTERN_LEN define (leftover from LEDC era)
- Fix stale "LEDC 120 kHz square wave" comment in startJamming()
- Web UI: show rec_bits (final stored count) instead of capIdx in Bits cell;
  progress bar shows 100% when in RECORDED/REPLAYING state

Made-with: Cursor
2026-03-11 10:47:37 -07:00

93 lines
3.7 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#ifndef CONFIG_H
#define CONFIG_H
// CC1101 #1 (315 MHz band)
#define CC1101_1_CS 7
#define CC1101_1_GDO0 4
#define CC1101_1_FREQ_MHZ 315.0f
// CC1101 #2 (433.92 MHz band)
#define CC1101_2_CS 8
#define CC1101_2_GDO0 5
#define CC1101_2_FREQ_MHZ 433.92f
// Shared SPI (FSPI default on ESP32-S3: 11=MOSI, 12=SCK, 13=MISO)
#define SPI_SCK_PIN 12
#define SPI_MISO_PIN 13
#define SPI_MOSI_PIN 11
#define SPI_SPEED_HZ 500000
// WiFi AP for read-only telemetry UI
#define WIFI_AP_SSID "killer"
#define WIFI_AP_PASS "password" // simple demo password
// Web server
#define WEB_PORT 80
// Jamming configuration
#define JAMMING_ENABLED true // Start jamming immediately on boot
// CC1101 only accepts 8 discrete power levels (index 0-7):
// { -30, -20, -15, -10, 0, 5, 7, 10 } dBm
#define JAM_POWER_LEVELS 8
#define DEFAULT_JAM_POWER_IDX 7 // index into power table (7 = 10 dBm, max)
// External amplifier gain in dB (used only for display — does not affect CC1101 output)
#define DEFAULT_AMP_GAIN_DB 20
// Modulation parameters for jamming
// Deviation 380 kHz = CC1101 hardware maximum.
// Carson's rule BW ≈ 2*(380 + 125) ≈ 1010 kHz of noise per hop.
// With ~1 MHz per hop we get solid overlap between steps and leave no gaps.
#define JAM_BITRATE_KBPS 250.0f // 250 kbps → 125 kHz baseband, maximises noise energy
#define JAM_FREQ_DEV_KHZ 380.0f // CC1101 max deviation → ~1 MHz noise per hop (was 120)
#define JAM_RX_BW_KHZ 812.0f // Maximum RX BW
// Frequency sweep — full coverage of all known car-key-fob sub-GHz bands
//
// Radio 1 (CC1101 #1) — 300320 MHz [CC1101 Band 1: 300348 MHz]
// Honda/Acura (US): 303.825 MHz
// Chamberlain/LiftMaster: 310.0 MHz
// Toyota/Lexus/Scion: 314.98 MHz
// Ford/GM/Chrysler/Dodge/Jeep: 315.0 MHz
// Linear Delta-3 / LiftMaster: 318.0 MHz
//
// With 1 MHz/hop: 25 steps × 0.83 MHz spacing → solid overlap, 75ms full cycle at 3ms dwell
#define SWEEP_1_CENTER_MHZ 310.0f
#define SWEEP_1_SPAN_MHZ 20.0f // 300320 MHz
#define SWEEP_1_STEPS 25 // 0.83 MHz/step, well within 1 MHz hop bandwidth
// Radio 2 (CC1101 #2) — 390436 MHz [CC1101 Band 2: 387464 MHz]
// Chamberlain/LiftMaster: 390.0 MHz
// Holtek-based remotes: 418.0 MHz
// Somfy RTS / SMC 5326: 433.42 MHz
// Global standard (BMW/VW/Audi/Mercedes/Hyundai/Kia…): 433.92 MHz
// Nero Radio / some Asian fobs: 434.42 MHz
//
// With 1 MHz/hop: 60 steps × 0.77 MHz spacing → no gaps, 180ms full cycle at 3ms dwell
#define SWEEP_2_CENTER_MHZ 413.0f
#define SWEEP_2_SPAN_MHZ 46.0f // 390436 MHz
#define SWEEP_2_STEPS 60 // increased from 47 for guaranteed overlap
// Dwell per hop — 3ms balances CC1101 lock time vs cycle speed
// Full cycle: R1 = 75ms, R2 = 180ms → any target frequency is jammed at least every 180ms
// Car fob TX window is typically 200500ms so every transmission gets hit
#define SWEEP_DWELL_MS 3
// 0.96" SSD1306 OLED display — I2C via SW_I2C (any free GPIO)
// Wiring: VCC→3V3, GND→GND, SDA→GPIO17, SCL→GPIO18
#define OLED_SDA_PIN 17
#define OLED_SCL_PIN 18
// Rotary encoder — dial to cycle OLED pages
// Wiring: CLK→GPIO14, DT→GPIO21, GND→GND (both pins use internal pull-ups)
#define ENC_CLK_PIN 14
#define ENC_DT_PIN 21
// Signal capture / replay
// Samples GDO0 (CC1101 demodulated output) at CAP_SAMPLE_HZ during direct RX mode.
// Bit-packed into a static buffer. Replay drives GDO0 in direct TX mode at same rate.
#define CAP_SAMPLE_HZ 100000 // 100 kHz sample clock
#define CAP_DURATION_S 4 // max capture window (seconds)
#define CAP_BUF_BYTES ((CAP_SAMPLE_HZ * CAP_DURATION_S) / 8 + 8) // ~50 KB
#endif