From bcbad4629f5f24a198ecb3d5ddc5a805c43146ef Mon Sep 17 00:00:00 2001 From: furrtek Date: Sat, 14 Nov 2015 03:44:49 +0100 Subject: [PATCH] Jammer ramp mode Jammer range splitting, hopping. Only 1MHz wide splits for now. --- firmware/application/main.cpp | 5 ++ firmware/application/ui_jammer.cpp | 83 ++++++++++++++------ firmware/application/ui_jammer.hpp | 17 +++- firmware/baseband/main.cpp | 60 +++++++++++--- firmware/common/message.hpp | 11 +++ firmware/common/portapack_shared_memory.hpp | 9 +++ firmware/portapack-h1-firmware.bin | Bin 392692 -> 393412 bytes 7 files changed, 148 insertions(+), 37 deletions(-) diff --git a/firmware/application/main.cpp b/firmware/application/main.cpp index a13e21257..a4e2eadb7 100755 --- a/firmware/application/main.cpp +++ b/firmware/application/main.cpp @@ -535,6 +535,11 @@ int main(void) { const auto message = static_cast(p); (void)message; }; + + context.message_map[Message::ID::Retune] = [](const Message* const p) { + const auto message = static_cast(p); + (void)message; + }; EventDispatcher event_dispatcher { &system_view, painter, context }; diff --git a/firmware/application/ui_jammer.cpp b/firmware/application/ui_jammer.cpp index 68a6137a3..a5c4e3dfb 100644 --- a/firmware/application/ui_jammer.cpp +++ b/firmware/application/ui_jammer.cpp @@ -98,13 +98,31 @@ void JammerView::updfreq(uint8_t id, rf::Frequency f) { std::string bw; for (c = 0; c < 3; c++) { - if (c == 0) center = (range1_min + range1_max) / 2; - if (c == 1) center = (range2_min + range2_max) / 2; - if (c == 2) center = (range3_min + range3_max) / 2; + if (c == 0) { + center = (range1_min + range1_max) / 2; + range1_center = center; + } + if (c == 1) { + center = (range2_min + range2_max) / 2; + range2_center = center; + } + if (c == 2) { + center = (range3_min + range3_max) / 2; + range3_center = center; + } - if (c == 0) bw = to_string_dec_int(abs(range1_max - range1_min) / 1000, 5); - if (c == 1) bw = to_string_dec_int(abs(range2_max - range2_min) / 1000, 5); - if (c == 2) bw = to_string_dec_int(abs(range3_max - range3_min) / 1000, 5); + if (c == 0) { + range1_width = abs(range1_max - range1_min) / 1000; + bw = to_string_dec_int(range1_width, 5); + } + if (c == 1) { + range2_width = abs(range2_max - range2_min) / 1000; + bw = to_string_dec_int(range2_width, 5); + } + if (c == 2) { + range3_width = abs(range3_max - range3_min) / 1000; + bw = to_string_dec_int(range3_width, 5); + } auto center_mhz = to_string_dec_int(center / 1000000, 4); auto center_hz100 = to_string_dec_int((center / 100) % 10000, 4, '0'); @@ -132,6 +150,7 @@ JammerView::JammerView( TransmitterModel& transmitter_model ) : transmitter_model(transmitter_model) { + static constexpr Style style_val { .font = font::fixed_8x16, .background = Color::green(), @@ -151,7 +170,6 @@ JammerView::JammerView( }; transmitter_model.set_modulation(18); - transmitter_model.set_tuning_frequency(persistent_memory::tuned_frequency()); add_children({ { &text_type, @@ -211,24 +229,45 @@ JammerView::JammerView( nav.push(new_view); }; - button_transmit.on_select = [this,&transmitter_model](Button&){ - /*uint16_t c; - ui::Context context; + button_transmit.on_select = [this,&transmitter_model](Button&) { + uint8_t i = 0; + rf::Frequency t, range_lower; - make_frame(); - - shared_memory.afsk_samples_per_bit = 228000/persistent_memory::afsk_bitrate(); - shared_memory.afsk_phase_inc_mark = persistent_memory::afsk_mark_freq()*(65536*1024)/2280; - shared_memory.afsk_phase_inc_space = persistent_memory::afsk_space_freq()*(65536*1024)/2280; - - for (c = 0; c < 256; c++) { - shared_memory.lcrdata[c] = this->lcrframe[c]; + context().message_map[Message::ID::Retune] = [this, &transmitter_model](const Message* const p) { + const auto message = static_cast(p); + if (message->freq > 0) { + transmitter_model.set_tuning_frequency(message->freq); + } + }; + + for (i = 0; i < 16; i++) { + shared_memory.jammer_ranges[i].active = false; } - shared_memory.afsk_transmit_done = false; - shared_memory.afsk_repeat = 5; // DEFAULT - - text_status.set("Send...");*/ + if (range1_min > range1_max) { + t = range1_min; + range1_min = range1_max; + range1_max = t; + } + range_lower = range1_min; + for (i = 0;;) { + if (range1_max - range_lower > 1000000) { + shared_memory.jammer_ranges[i].center = range_lower + (1000000/2); + shared_memory.jammer_ranges[i].width = 1000000 / 10; + shared_memory.jammer_ranges[i].active = true; + shared_memory.jammer_ranges[i].duration = 2280000/10; + range_lower += 1000000; + } else { + shared_memory.jammer_ranges[i].center = (range1_max + range_lower) / 2; + shared_memory.jammer_ranges[i].width = (range1_max - range_lower) / 10; + shared_memory.jammer_ranges[i].active = true; + shared_memory.jammer_ranges[i].duration = 2280000/10; + break; + } + i++; + } + + transmitter_model.set_tuning_frequency(shared_memory.jammer_ranges[0].center); if (jamming == true) { jamming = false; diff --git a/firmware/application/ui_jammer.hpp b/firmware/application/ui_jammer.hpp index d74ffc86d..f71744509 100644 --- a/firmware/application/ui_jammer.hpp +++ b/firmware/application/ui_jammer.hpp @@ -51,13 +51,20 @@ private: rf::Frequency range3_min; rf::Frequency range3_max; + rf::Frequency range1_center; + rf::Frequency range1_width; + rf::Frequency range2_center; + rf::Frequency range2_width; + rf::Frequency range3_center; + rf::Frequency range3_width; + typedef struct rangepreset { bool active; rf::Frequency min; rf::Frequency max; } rangepreset; - const rangepreset range_presets[8][3] = { + const rangepreset range_presets[9][3] = { // Orange {{ true, 935000000, 945000000 }, // GSM 900 { true, 1808000000, 1832000000 }, // GSM 1800 @@ -99,6 +106,11 @@ private: // ISM 433 {{ true, 433050000, 434790000 }, // BW: 0.2% { false, 0, 0 }, + { false, 0, 0 }}, + + // Reims 164 + {{ true, 164000000 - 200000, 164000000 + 200000}, // BW: 400kHz + { false, 0, 0 }, { false, 0, 0 }} }; @@ -164,7 +176,7 @@ private: }; OptionsField options_preset { { 10 * 8, 3 * 16 }, - 8, + 9, { { "Orange ", 0 }, { "SFR ", 1 }, @@ -174,6 +186,7 @@ private: { "DECT ", 5 }, { "Optifib ", 6 }, { "ISM 433 ", 7 }, + { "Reims ", 8 }, } }; diff --git a/firmware/baseband/main.cpp b/firmware/baseband/main.cpp index 73257bcf4..7f11a5bda 100755 --- a/firmware/baseband/main.cpp +++ b/firmware/baseband/main.cpp @@ -851,7 +851,7 @@ private: TXDoneMessage message; }; -class ToneProcessor : public BasebandProcessor { +/*class ToneProcessor : public BasebandProcessor { public: void execute(buffer_c8_t buffer) override { @@ -887,7 +887,7 @@ private: uint32_t sample_count; uint32_t aphase, phase, sphase; int32_t sample, sig, frq; -}; +};*/ #define POLY_MASK_32 0xB4BCD35C @@ -918,19 +918,50 @@ public: sample = sintab[(aphase & 0x03FF0000)>>16];*/ - if (s >= 10) { - if (sample < 128) - sample++; - else - sample = -127; + // Duration timer + // + if (s >= 10000) { //shared_memory.jammer_ranges[ir].duration s = 0; + for (;;) { + ir++; + if (ir > 15) ir = 0; + if (shared_memory.jammer_ranges[ir].active == true) break; + } + jammer_bw = shared_memory.jammer_ranges[ir].width; + + if( message.is_free() ) { + message.freq = shared_memory.jammer_ranges[ir].center; + shared_memory.application_queue.push(&message); + } } else { s++; } - //FM - frq = sample << 17; // Bandwidth + // Ramp + /*if (r >= 10) { + if (sample < 128) + sample++; + else + sample = -127; + r = 0; + } else { + r++; + }*/ + // Phase + if (r >= 70) { + aphase += ((aphase>>4) ^ 0x4573) << 14; + r = 0; + } else { + r++; + } + + aphase += 35320; + sample = sintab[(aphase & 0x03FF0000)>>16]; + + //FM + frq = sample * jammer_bw; // Bandwidth + //65536 -> 0.6M //131072 -> 1.2M @@ -945,13 +976,16 @@ public: } private: - int32_t s, lfsr32 = 0xABCDE; - int8_t re, im; + int32_t lfsr32 = 0xABCDE; + uint32_t s; + int8_t r, ir, re, im; + int64_t jammer_bw, jammer_center; int feedback; int32_t lfsr; uint32_t sample_count; uint32_t aphase, phase, sphase; int32_t sample, frq; + RetuneMessage message; }; static BasebandProcessor* baseband_processor { nullptr }; @@ -1224,10 +1258,10 @@ int main(void) { baseband_processor = new LCRFSKProcessor(); break; - case 17: + /*case 17: direction = baseband::Direction::Transmit; baseband_processor = new ToneProcessor(); - break; + break;*/ case 18: direction = baseband::Direction::Transmit; diff --git a/firmware/common/message.hpp b/firmware/common/message.hpp index 543e29c0a..bbf54c15c 100644 --- a/firmware/common/message.hpp +++ b/firmware/common/message.hpp @@ -43,6 +43,7 @@ public: FSKPacket = 7, TestResults = 8, TXDone = 9, + Retune = 10, MAX }; @@ -262,6 +263,16 @@ public: int n = 0; }; +class RetuneMessage : public Message { +public: + RetuneMessage( + ) : Message { ID::Retune } + { + } + + int64_t freq = 0; +}; + class MessageHandlerMap { public: using MessageHandler = std::function; diff --git a/firmware/common/portapack_shared_memory.hpp b/firmware/common/portapack_shared_memory.hpp index 9a8ccd554..3a0d151c7 100644 --- a/firmware/common/portapack_shared_memory.hpp +++ b/firmware/common/portapack_shared_memory.hpp @@ -30,6 +30,13 @@ struct TouchADCFrame { uint32_t dr[8]; }; +struct JammerRange { + bool active; + int64_t center; + int64_t width; + uint32_t duration; +}; + /* NOTE: These structures must be located in the same location in both M4 and M0 binaries */ struct SharedMemory { MessageQueue baseband_queue; @@ -50,6 +57,8 @@ struct SharedMemory { uint8_t afsk_repeat; uint32_t afsk_fmmod; bool afsk_transmit_done; + + JammerRange jammer_ranges[16]; }; extern SharedMemory& shared_memory; diff --git a/firmware/portapack-h1-firmware.bin b/firmware/portapack-h1-firmware.bin index a61a55407adbd438a6e53e8d883cff5a458fe511..9be40f82783b758567fc206e8d282dfeae027233 100644 GIT binary patch delta 34416 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 delta 34008 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