Skip to content

Commit dc5a58e

Browse files
authored
v2.5.0
1 parent 797eb40 commit dc5a58e

25 files changed

Lines changed: 2365 additions & 423 deletions

nRFBox_V2/analyzer.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,10 @@
55

66
#include <Arduino.h>
77
#include "analyzer.h"
8+
#include "setting.h"
89

910
extern U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2;
11+
extern Adafruit_NeoPixel pixels;
1012

1113
#define NRF24_CONFIG 0x00
1214
#define NRF24_EN_AA 0x01
@@ -72,12 +74,14 @@ void ScanChannels(void) {
7274
DIsable();
7375
// for (int j = 0; j < 10; j++) {
7476
for (int i = 0; i < CHANNELS; i++) {
77+
setNeoPixelColour("purple");
7578
setregister(NRF24_RF_CH, (128 * i) / CHANNELS);
7679
setrx();
7780
delayMicroseconds(40);
7881
DIsable();
7982
if (getregister(NRF24_RPD) > 0) CHannel[i]++;
8083
}
84+
setNeoPixelColour("0");
8185
// }
8286
}
8387

@@ -128,7 +132,7 @@ bool carrierDetected() {
128132
void analyzerSetup(){
129133

130134
Serial.begin(115200);
131-
135+
132136
esp_bt_controller_deinit();
133137
esp_wifi_stop();
134138
esp_wifi_deinit();
@@ -141,10 +145,6 @@ void analyzerSetup(){
141145
SPI.setFrequency(10000000);
142146
SPI.setBitOrder(MSBFIRST);
143147

144-
u8g2.begin();
145-
u8g2.clearBuffer();
146-
u8g2.sendBuffer();
147-
148148
digitalWrite(CSN, HIGH);
149149
digitalWrite(CE, LOW);
150150

@@ -193,6 +193,6 @@ void analyzerLoop(){
193193
u8g2.print("1...5...10...25..50...80...128");
194194
u8g2.sendBuffer();
195195

196-
delay(50);
196+
//delay(50);
197197

198198
}

nRFBox_V2/analyzer.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
#include <U8g2lib.h>
1111
#include "esp_bt.h"
1212
#include "esp_wifi.h"
13+
#include "neopixel.h"
1314

1415
void analyzerSetup();
1516
void analyzerLoop();

nRFBox_V2/blackout.cpp

Lines changed: 281 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,281 @@
1+
/* ____________________________
2+
This software is licensed under the MIT License:
3+
https://github.com/cifertech/nrfbox
4+
________________________________________ */
5+
6+
#include <Arduino.h>
7+
#include "blackout.h"
8+
#include "icon.h"
9+
10+
extern U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2;
11+
12+
#define CE_PIN_1 5
13+
#define CSN_PIN_1 17
14+
15+
#define CE_PIN_2 16
16+
#define CSN_PIN_2 4
17+
18+
#define CE_PIN_3 15
19+
#define CSN_PIN_3 2
20+
21+
#define MODE_BUTTON 25
22+
#define MODE_BUTTON1 27
23+
#define MODE_BUTTON2 26
24+
25+
RF24 radio_1(CE_PIN_1, CSN_PIN_1, 16000000);
26+
RF24 radio_2(CE_PIN_2, CSN_PIN_2, 16000000);
27+
RF24 radio_3(CE_PIN_3, CSN_PIN_3, 16000000);
28+
29+
enum OperationMode {WiFi_MODULE, VIDEO_TX_MODULE, RC_MODULE, BLE_MODULE, Bluetooth_MODULE, USB_WIRELESS_MODULE, ZIGBEE_MODULE, NRF24_MODULE};
30+
OperationMode current_Mode = WiFi_MODULE;
31+
32+
enum Operation {DEACTIVE_MODE, ACTIVE_MODE };
33+
Operation current = DEACTIVE_MODE;
34+
35+
36+
// Channel groups
37+
byte channelGroup_1[] = {2, 5, 8, 11};
38+
byte channelGroup_2[] = {26, 29, 32, 35};
39+
byte channelGroup_3[] = {80, 83, 86, 89};
40+
41+
// Protocol channel definitions
42+
const byte bluetooth_channels[] = {32, 34, 46, 48, 50, 52, 0, 1, 2, 4, 6, 8, 22, 24, 26, 28, 30, 74, 76, 78, 80};
43+
const byte ble_channels[] = {2, 26, 80};
44+
const byte WiFi_channels[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
45+
const byte usbWireless_channels[] = {40, 50, 60};
46+
const byte videoTransmitter_channels[] = {70, 75, 80};
47+
const byte rc_channels[] = {1, 3, 5, 7};
48+
const byte zigbee_channels[] = {11, 15, 20, 25};
49+
const byte nrf24_channels[] = {76, 78, 79};
50+
51+
volatile bool ChangeRequested = false;
52+
volatile bool ChangeRequested1 = false;
53+
volatile bool ChangeRequested2 = false;
54+
55+
unsigned long lastPressTime = 0;
56+
const unsigned long debounceDelay = 100;
57+
58+
59+
void IRAM_ATTR handleButton() {
60+
unsigned long currentTime = millis();
61+
if (currentTime - lastPressTime > debounceDelay) {
62+
ChangeRequested = true;
63+
lastPressTime = currentTime;
64+
}
65+
}
66+
67+
void IRAM_ATTR handleButton1() {
68+
unsigned long currentTime = millis();
69+
if (currentTime - lastPressTime > debounceDelay) {
70+
ChangeRequested1 = true;
71+
lastPressTime = currentTime;
72+
}
73+
}
74+
75+
void IRAM_ATTR handleButton2() {
76+
unsigned long currentTime = millis();
77+
if (currentTime - lastPressTime > debounceDelay) {
78+
if (current == DEACTIVE_MODE) {
79+
current = ACTIVE_MODE;
80+
} else {
81+
current = DEACTIVE_MODE;
82+
}
83+
lastPressTime = currentTime;
84+
}
85+
}
86+
87+
void configure_Radio(RF24 &radio, const byte *channels, size_t size) {
88+
radio.setAutoAck(false);
89+
radio.stopListening();
90+
radio.setRetries(0, 0);
91+
radio.setPALevel(RF24_PA_MAX, true);
92+
radio.setDataRate(RF24_2MBPS);
93+
radio.setCRCLength(RF24_CRC_DISABLED);
94+
radio.printPrettyDetails();
95+
96+
for (size_t i = 0; i < size; i++) {
97+
radio.setChannel(channels[i]);
98+
radio.startConstCarrier(RF24_PA_MAX, channels[i]);
99+
}
100+
}
101+
102+
void initialize_MultiMode() {
103+
if (radio_1.begin()) {
104+
configure_Radio(radio_1, channelGroup_1, sizeof(channelGroup_1));
105+
}
106+
if (radio_2.begin()) {
107+
configure_Radio(radio_2, channelGroup_2, sizeof(channelGroup_2));
108+
}
109+
if (radio_3.begin()) {
110+
configure_Radio(radio_3, channelGroup_3, sizeof(channelGroup_3));
111+
}
112+
}
113+
114+
void initialize_Radios() {
115+
if (current == ACTIVE_MODE) {
116+
initialize_MultiMode();
117+
} else if (current == DEACTIVE_MODE) {
118+
radio_1.powerDown();
119+
radio_2.powerDown();
120+
radio_3.powerDown();
121+
delay(100);
122+
}
123+
}
124+
125+
void update_OLED() {
126+
u8g2.clearBuffer();
127+
u8g2.setFont(u8g2_font_5x8_tr);
128+
129+
u8g2.setCursor(75, 7);
130+
if (current == ACTIVE_MODE) {
131+
u8g2.print("-ACTIVE-");
132+
} else if (current == DEACTIVE_MODE) {
133+
u8g2.print("-DEACTIVE-");
134+
}
135+
136+
u8g2.setCursor(0, 12);
137+
u8g2.println("-------------------------------");
138+
u8g2.setCursor(0, 7);
139+
//u8g2.print("Mode: ");
140+
u8g2.print("[");
141+
142+
u8g2.drawXBMP(0, 5, 128, 64, bitmap_arrow_left);
143+
u8g2.drawXBMP(0, 5, 128, 64, bitmap_arrow_right);
144+
145+
switch (current_Mode) {
146+
case WiFi_MODULE:
147+
u8g2.drawXBMP(0, 5, 128, 64, bitmap_wifi_jammer);
148+
u8g2.print("WiFi");
149+
break;
150+
case VIDEO_TX_MODULE:
151+
u8g2.drawXBMP(0, 5, 128, 64, bitmap_cctv);
152+
u8g2.print("Video TX");
153+
break;
154+
case RC_MODULE:
155+
u8g2.drawXBMP(0, 5, 128, 64, bitmap_rc);
156+
u8g2.print("RC");
157+
break;
158+
case BLE_MODULE:
159+
u8g2.drawXBMP(0, 5, 128, 64, bitmap_ble_jammer);
160+
u8g2.print("BLE");
161+
break;
162+
case Bluetooth_MODULE:
163+
u8g2.drawXBMP(0, 5, 128, 64, bitmap_bluetooth_jammer);
164+
u8g2.print("Bluetooth");
165+
break;
166+
case USB_WIRELESS_MODULE:
167+
u8g2.drawXBMP(0, 5, 128, 64, bitmap_usb);
168+
u8g2.print("USB Wireless");
169+
break;
170+
case ZIGBEE_MODULE:
171+
u8g2.drawXBMP(0, 5, 128, 64, bitmap_zigbee);
172+
u8g2.print("Zigbee");
173+
break;
174+
case NRF24_MODULE:
175+
u8g2.drawXBMP(0, 5, 128, 64, bitmap_nrf24);
176+
u8g2.print("NRF24");
177+
break;
178+
}
179+
u8g2.print("]");
180+
u8g2.sendBuffer();
181+
}
182+
183+
void checkMode() {
184+
if (ChangeRequested) {
185+
ChangeRequested = false;
186+
current_Mode = static_cast<OperationMode>((current_Mode == 0) ? 7 : (current_Mode - 1));
187+
update_OLED();
188+
} else if (ChangeRequested1) {
189+
ChangeRequested1 = false;
190+
current_Mode = static_cast<OperationMode>((current_Mode + 1) % 8);
191+
update_OLED();
192+
}
193+
}
194+
195+
void blackoutSetup() {
196+
Serial.begin(115200);
197+
198+
esp_bt_controller_deinit();
199+
esp_wifi_stop();
200+
esp_wifi_deinit();
201+
esp_wifi_disconnect();
202+
203+
pinMode(MODE_BUTTON, INPUT_PULLUP);
204+
pinMode(MODE_BUTTON1, INPUT_PULLUP);
205+
pinMode(MODE_BUTTON2, INPUT_PULLUP);
206+
attachInterrupt(digitalPinToInterrupt(MODE_BUTTON), handleButton, FALLING);
207+
attachInterrupt(digitalPinToInterrupt(MODE_BUTTON1), handleButton1, FALLING);
208+
attachInterrupt(digitalPinToInterrupt(MODE_BUTTON2), handleButton2, FALLING);
209+
210+
initialize_Radios();
211+
update_OLED();
212+
}
213+
214+
void blackoutLoop() {
215+
checkMode();
216+
217+
static Operation lastMode = DEACTIVE_MODE;
218+
219+
if (current != lastMode) {
220+
lastMode = current;
221+
initialize_Radios();
222+
update_OLED();
223+
}
224+
225+
if (current_Mode == BLE_MODULE) {
226+
int randomIndex = random(0, sizeof(ble_channels) / sizeof(ble_channels[0]));
227+
int channel = ble_channels[randomIndex];
228+
radio_1.setChannel(channel);
229+
radio_2.setChannel(channel);
230+
radio_3.setChannel(channel);
231+
232+
} else if (current_Mode == Bluetooth_MODULE) {
233+
int randomIndex = random(0, sizeof(bluetooth_channels) / sizeof(bluetooth_channels[0]));
234+
int channel = bluetooth_channels[randomIndex];
235+
radio_1.setChannel(channel);
236+
radio_2.setChannel(channel);
237+
radio_3.setChannel(channel);
238+
239+
}else if (current_Mode == WiFi_MODULE) {
240+
int randomIndex = random(0, sizeof(WiFi_channels) / sizeof(WiFi_channels[0]));
241+
int channel = WiFi_channels[randomIndex];
242+
radio_1.setChannel(channel);
243+
radio_2.setChannel(channel);
244+
radio_3.setChannel(channel);
245+
246+
}else if (current_Mode == USB_WIRELESS_MODULE) {
247+
int randomIndex = random(0, sizeof(usbWireless_channels) / sizeof(usbWireless_channels[0]));
248+
int channel = usbWireless_channels[randomIndex];
249+
radio_1.setChannel(channel);
250+
radio_2.setChannel(channel);
251+
radio_3.setChannel(channel);
252+
253+
}else if (current_Mode == VIDEO_TX_MODULE) {
254+
int randomIndex = random(0, sizeof(videoTransmitter_channels) / sizeof(videoTransmitter_channels[0]));
255+
int channel = videoTransmitter_channels[randomIndex];
256+
radio_1.setChannel(channel);
257+
radio_2.setChannel(channel);
258+
radio_3.setChannel(channel);
259+
260+
}else if (current_Mode == RC_MODULE) {
261+
int randomIndex = random(0, sizeof(rc_channels) / sizeof(rc_channels[0]));
262+
int channel = rc_channels[randomIndex];
263+
radio_1.setChannel(channel);
264+
radio_2.setChannel(channel);
265+
radio_3.setChannel(channel);
266+
267+
}else if (current_Mode == ZIGBEE_MODULE) {
268+
int randomIndex = random(0, sizeof(zigbee_channels) / sizeof(zigbee_channels[0]));
269+
int channel = zigbee_channels[randomIndex];
270+
radio_1.setChannel(channel);
271+
radio_2.setChannel(channel);
272+
radio_3.setChannel(channel);
273+
274+
}else if (current_Mode == NRF24_MODULE) {
275+
int randomIndex = random(0, sizeof(nrf24_channels) / sizeof(nrf24_channels[0]));
276+
int channel = nrf24_channels[randomIndex];
277+
radio_1.setChannel(channel);
278+
radio_2.setChannel(channel);
279+
radio_3.setChannel(channel);
280+
}
281+
}

nRFBox_V2/blackout.h

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
/* ____________________________
2+
This software is licensed under the MIT License:
3+
https://github.com/cifertech/nrfbox
4+
________________________________________ */
5+
6+
#ifndef blackout_H
7+
#define blackout_H
8+
9+
#include <SPI.h>
10+
#include <nRF24L01.h>
11+
#include <RF24.h>
12+
#include <Wire.h>
13+
#include <U8g2lib.h>
14+
#include "neopixel.h"
15+
#include "esp_bt.h"
16+
#include "esp_wifi.h"
17+
#include "neopixel.h"
18+
19+
void blackoutSetup();
20+
void blackoutLoop();
21+
22+
#endif

0 commit comments

Comments
 (0)