250 lines
5.9 KiB
C++
250 lines
5.9 KiB
C++
#include <Arduino.h>
|
|
#include <RF24.h>
|
|
#include "nrf24.h"
|
|
#include "../ui/display.h"
|
|
#include "../buttons.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;
|
|
}
|
|
}
|