mirror of
https://github.com/huuck/FlipperZeroNRFJammer.git
synced 2026-06-11 22:23:30 -07:00
Merge pull request #16 from W0rthlessS0ul/main
The jamming principle has been improved
This commit is contained in:
@@ -11,7 +11,7 @@ Demo:
|
||||
https://bsky.app/profile/hookgab.bsky.social/post/3lcgnsx7wfk2x
|
||||
|
||||
Example of the spectrum at 2.440 Ghz:
|
||||

|
||||

|
||||
|
||||
# FAQ
|
||||
It's crashing, what do I do?
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 666 KiB |
@@ -158,77 +158,26 @@ static void jammer_state_init(PluginState* const plugin_state) {
|
||||
static int32_t mj_worker_thread(void* ctx) {
|
||||
PluginState* plugin_state = ctx;
|
||||
plugin_state->is_thread_running = true;
|
||||
FURI_LOG_D(TAG, "starting to jam");
|
||||
char tmp[128];
|
||||
// make sure the NRF24 is powered down so we can do all the initial setup
|
||||
nrf24_set_idle(nrf24_HANDLE);
|
||||
uint8_t mac[] = { 0xDE, 0xAD}; // DEAD BEEF FEED
|
||||
uint8_t ping_packet[] = {0xDE, 0xAD, 0xBE, 0xEF,0xDE, 0xAD, 0xBE, 0xEF,0xDE, 0xAD, 0xBE, 0xEF,0xDE, 0xAD, 0xBE, 0xEF,0xDE, 0xAD, 0xBE, 0xEF,0xDE, 0xAD, 0xBE, 0xEF,0xDE, 0xAD, 0xBE, 0xEF,0xDE, 0xAD, 0xBE, 0xEF}; // 32 bytes, in case we ever need to experiment with bigger packets
|
||||
|
||||
uint8_t conf = 0;
|
||||
|
||||
nrf24_configure(nrf24_HANDLE, 2, mac, mac, 2, 1, true, true);
|
||||
// set PA level to maximum
|
||||
uint8_t setup;
|
||||
nrf24_read_reg(nrf24_HANDLE, REG_RF_SETUP, &setup,1);
|
||||
FURI_LOG_D(TAG, "Starting optimized carrier jamming");
|
||||
|
||||
setup &= 0xF8;
|
||||
setup |= 7;
|
||||
|
||||
snprintf(tmp, 128, "NRF24 SETUP REGISTER: %d", setup);
|
||||
FURI_LOG_D(TAG, tmp);
|
||||
|
||||
nrf24_read_reg(nrf24_HANDLE, REG_CONFIG, &conf,1);
|
||||
snprintf(tmp, 128, "NRF24 CONFIG REGISTER: %d", conf);
|
||||
FURI_LOG_D(TAG, tmp);
|
||||
nrf24_write_reg(nrf24_HANDLE, REG_RF_SETUP, setup);
|
||||
|
||||
#define size 32
|
||||
uint8_t status = 0;
|
||||
uint8_t tx[size + 1];
|
||||
uint8_t rx[size + 1];
|
||||
memset(tx, 0, size + 1);
|
||||
memset(rx, 0, size + 1);
|
||||
|
||||
tx[0] = W_TX_PAYLOAD_NOACK;
|
||||
|
||||
memcpy(&tx[1], ping_packet, size);
|
||||
|
||||
#define nrf24_TIMEOUT 500
|
||||
// push data to the TX register
|
||||
nrf24_spi_trx(nrf24_HANDLE, tx, 0, size + 1, nrf24_TIMEOUT);
|
||||
// put the module in TX mode
|
||||
nrf24_set_tx_mode(nrf24_HANDLE);
|
||||
// send one test packet (for debug reasons)
|
||||
while(!(status & (TX_DS | MAX_RT)))
|
||||
{
|
||||
status = nrf24_status(nrf24_HANDLE);
|
||||
snprintf(tmp, 128, "NRF24 STATUS REGISTER: %d", status);
|
||||
|
||||
FURI_LOG_D(TAG, tmp);
|
||||
}
|
||||
NotificationApp* notification = furi_record_open(RECORD_NOTIFICATION);
|
||||
|
||||
|
||||
uint8_t chan = 0;
|
||||
uint8_t limit = 0;
|
||||
notification_message(notification, &sequence_blink_red_100);
|
||||
|
||||
do {
|
||||
limit = hopping_channels_len[plugin_state->jam_type];
|
||||
for(int ch = 0;ch < limit; ch++) {
|
||||
chan = hopping_channels[ch];
|
||||
// change channel
|
||||
nrf24_write_reg(nrf24_HANDLE, REG_RF_CH, chan);
|
||||
// push new data to the TX register
|
||||
nrf24_spi_trx(nrf24_HANDLE, tx, 0, 3, nrf24_TIMEOUT);
|
||||
nrf24_startConstCarrier(nrf24_HANDLE, 3, hopping_channels[0]);
|
||||
|
||||
uint8_t current_channel = 0;
|
||||
uint8_t limit = hopping_channels_len[plugin_state->jam_type];
|
||||
|
||||
while(!plugin_state->close_thread_please) {
|
||||
for(int ch = 0; ch < limit && !plugin_state->close_thread_please; ch++) {
|
||||
current_channel = hopping_channels[ch];
|
||||
nrf24_write_reg(nrf24_HANDLE, REG_RF_CH, current_channel);
|
||||
}
|
||||
} while(!plugin_state->close_thread_please);
|
||||
}
|
||||
|
||||
nrf24_stopConstCarrier(nrf24_HANDLE);
|
||||
furi_record_close(RECORD_NOTIFICATION);
|
||||
|
||||
plugin_state->is_thread_running = false;
|
||||
nrf24_set_idle(nrf24_HANDLE);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -133,6 +133,51 @@ uint8_t nrf24_set_rate(FuriHalSpiBusHandle* handle, uint32_t rate) {
|
||||
return status;
|
||||
}
|
||||
|
||||
void nrf24_startConstCarrier(FuriHalSpiBusHandle* handle, uint8_t level, uint8_t channel) {
|
||||
nrf24_set_idle(handle);
|
||||
|
||||
nrf24_write_reg(handle, REG_RF_CH, channel);
|
||||
|
||||
uint8_t setup;
|
||||
nrf24_read_reg(handle, REG_RF_SETUP, &setup, 1);
|
||||
setup = (setup & 0xF8) | ((level & 0x3) << 1);
|
||||
nrf24_write_reg(handle, REG_RF_SETUP, setup);
|
||||
|
||||
setup |= NRF24_CONT_WAVE | NRF24_PLL_LOCK;
|
||||
nrf24_write_reg(handle, REG_RF_SETUP, setup);
|
||||
|
||||
nrf24_write_reg(handle, REG_EN_AA, 0x00);
|
||||
|
||||
uint8_t config;
|
||||
nrf24_read_reg(handle, REG_CONFIG, &config, 1);
|
||||
config &= ~NRF24_EN_CRC;
|
||||
nrf24_write_reg(handle, REG_CONFIG, config);
|
||||
|
||||
uint8_t dummy_payload[32];
|
||||
memset(dummy_payload, 0xFF, sizeof(dummy_payload));
|
||||
|
||||
uint8_t tx[33];
|
||||
tx[0] = W_TX_PAYLOAD;
|
||||
memcpy(&tx[1], dummy_payload, 32);
|
||||
nrf24_spi_trx(handle, tx, NULL, 33, nrf24_TIMEOUT);
|
||||
|
||||
nrf24_set_tx_mode(handle);
|
||||
}
|
||||
|
||||
void nrf24_stopConstCarrier(FuriHalSpiBusHandle* handle) {
|
||||
nrf24_set_idle(handle);
|
||||
|
||||
uint8_t setup;
|
||||
nrf24_read_reg(handle, REG_RF_SETUP, &setup, 1);
|
||||
setup &= ~(NRF24_CONT_WAVE | NRF24_PLL_LOCK);
|
||||
nrf24_write_reg(handle, REG_RF_SETUP, setup);
|
||||
|
||||
uint8_t config;
|
||||
nrf24_read_reg(handle, REG_CONFIG, &config, 1);
|
||||
config |= NRF24_EN_CRC;
|
||||
nrf24_write_reg(handle, REG_CONFIG, config);
|
||||
}
|
||||
|
||||
uint8_t nrf24_get_chan(FuriHalSpiBusHandle* handle) {
|
||||
uint8_t channel = 0;
|
||||
nrf24_read_reg(handle, REG_RF_CH, &channel, 1);
|
||||
|
||||
@@ -50,6 +50,10 @@ extern "C" {
|
||||
#define TX_DS 0x20
|
||||
#define MAX_RT 0x10
|
||||
|
||||
#define NRF24_CONT_WAVE (1 << 7)
|
||||
#define NRF24_PLL_LOCK (1 << 4)
|
||||
#define NRF24_EN_CRC (1 << 3)
|
||||
|
||||
#define nrf24_TIMEOUT 500
|
||||
#define nrf24_CE_PIN &gpio_ext_pb2
|
||||
// FuriHalSpiBusHandle* nrf24_HANDLE = (FuriHalSpiBusHandle*) &furi_hal_spi_bus_handle_external;
|
||||
@@ -120,6 +124,13 @@ uint8_t nrf24_set_idle(FuriHalSpiBusHandle* handle);
|
||||
*/
|
||||
uint8_t nrf24_set_rx_mode(FuriHalSpiBusHandle* handle);
|
||||
|
||||
|
||||
|
||||
void nrf24_startConstCarrier(FuriHalSpiBusHandle* handle, uint8_t level, uint8_t channel);
|
||||
void nrf24_stopConstCarrier(FuriHalSpiBusHandle* handle);
|
||||
|
||||
|
||||
|
||||
/** Sets the radio to TX mode
|
||||
*
|
||||
* @param handle - pointer to FuriHalSpiHandle
|
||||
|
||||
Reference in New Issue
Block a user