#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: max CC1101 TX (+10 dBm). External PA removed — radiated power is chip + antenna gain only. // Jam always starts after boot self-test; use web “Stop Jamming” (or capture REC) to pause for RX/capture. #define DEFAULT_AUTO_START_JAM true // CC1101 only accepts 8 discrete power levels (index 0-7); jam path always uses max (10 dBm). #define JAM_POWER_LEVELS 8 #define DEFAULT_JAM_POWER_IDX 7 // 10 dBm — full device output (see TI SWRS061 PATABLE / output power) // Modulation parameters for jamming (LFSR drives GDO0 in direct async TX) #define JAM_BITRATE_KBPS 250.0f // baseband / channel filter context for RadioLib begin() #define JAM_FREQ_DEV_KHZ 380.0f // default passed to begin(); per-radio deviation applied after init #define JAM_RX_BW_KHZ 812.0f // wide RX BW for begin() // GDO0 toggle rate during jam (1 MHz timer tick). Higher → wider AM/FM splatter on both carriers; 100 kHz typical. #define JAM_LFSR_KEY_HZ 100000 // Fixed dual-carrier jamming: each radio holds one frequency at full TX power (TI CC1101 freq + deviation). // Many NA ~315 MHz RKE remotes are ASK/OOK (see TI CC1101 datasheet MDMCFG2.MOD_FORMAT). Jam path uses OOK on // R1 so LFSR on GDO0 keys the PA (broad AM sidebands). Set JAM_R1_USE_OOK 0 for 2-FSK only at JAM_DEV_KHZ_R1_WIDE. // Fobs may sit on 314.8–315.2 MHz — measure with an SDR and retune JAM_LOCK_FREQ_1_MHZ if needed. #define JAM_LOCK_FREQ_1_MHZ 315.0f #define JAM_LOCK_FREQ_2_MHZ 433.92f #define JAM_DEV_KHZ_R2_WIDE 380.0f #define JAM_DEV_KHZ_R1_NARROW 25.0f // probe / RadioLib begin() only #define JAM_DEV_KHZ_R1_WIDE 200.0f // FSK jam spread when JAM_R1_USE_OOK is 0 (or OOK setup fails) #define JAM_R1_USE_OOK 1 // 1 = R1 jam ASK/OOK (typical NA); 0 = wide 2-FSK on R1 // Precision jam: narrow 2-FSK on both + slower LFSR (energy in a smaller RF slice). #define JAM_PRECISION_DEV_R1_KHZ 28.0f #define JAM_PRECISION_DEV_R2_KHZ 55.0f #define JAM_PRECISION_LFSR_HZ 40000 // Pulse jam: slow square wave (spoofs preamble AGC) #define JAM_PULSE_HZ 2000 // Flood jam: packet-mode random payloads (mcore1976-style bursty TX); deviation for symbol spread. // 61 bytes max: CC1101 64-byte FIFO minus 1 length byte (variable-length mode) minus 2 bytes margin. // 64 caused TXFIFO_UNDERFLOW — RadioLib writes MIN(len, FIFO_SIZE-1)=63 bytes but CC1101 expects 64. #define JAM_FLOOD_PKT_BYTES 61 #define JAM_FLOOD_DEV_R1_KHZ 140.0f #define JAM_FLOOD_DEV_R2_KHZ 200.0f // Special/Flood jam timing: CC1101 at 250 kbps takes 2.59ms to send a 61-byte packet (preamble+sync+data). // 3ms restart gap allows each packet to complete naturally before startTransmit() is called again. // Duty cycle: ~85%. 10ms (original cypher-pulse) only achieves 26% — too many gaps for rolling-code fobs. #define JAM_SPECIAL_DELAY_MS 3 #define JAM_FLOOD_DELAY_MS 3 // SmartRF-style dump: config space only (TI SWRS061); PATABLE/ strobes not included. #define CC1101_CFG_REG_LAST 0x2E // 0.96" SSD1306 OLED display — I2C via SW_I2C (any free GPIO) #define OLED_SDA_PIN 17 #define OLED_SCL_PIN 18 // Rotary encoder — dial to cycle OLED pages #define ENC_CLK_PIN 14 #define ENC_DT_PIN 21 // Signal capture / replay #define CAP_SAMPLE_HZ 100000 #define CAP_DURATION_S 4 #define CAP_BUF_BYTES ((CAP_SAMPLE_HZ * CAP_DURATION_S) / 8 + 8) #define CAP_HISTORY_MAX 8 // ESP-NOW mesh #define ESPNOW_BEACON_MS 750 #define ESPNOW_PEER_STALE_MS 12000 #define ESPNOW_MAX_PEERS 8 #endif