From 966a758a0b8aad2d9d54bd780a9f018f8d016112 Mon Sep 17 00:00:00 2001 From: furrtek Date: Mon, 25 Jul 2016 16:21:27 +0200 Subject: [PATCH] Added frequency manager skeleton, LCR alt encoding, GPS jammer --- firmware/application/Makefile | 1 + firmware/application/main.cpp | 13 +-- firmware/application/ui_afsksetup.cpp | 25 +++-- firmware/application/ui_afsksetup.hpp | 6 ++ firmware/application/ui_alphanum.cpp | 11 +- firmware/application/ui_alphanum.hpp | 8 ++ firmware/application/ui_freqman.cpp | 80 +++++++++++++++ firmware/application/ui_freqman.hpp | 50 ++++++++++ firmware/application/ui_jammer.cpp | 80 ++++++++++++--- firmware/application/ui_jammer.hpp | 10 +- firmware/application/ui_lcr.cpp | 105 +++++++++++++------- firmware/application/ui_lcr.hpp | 36 +++++-- firmware/application/ui_loadmodule.cpp | 2 + firmware/application/ui_loadmodule.hpp | 1 + firmware/application/ui_navigation.cpp | 9 +- firmware/application/ui_xylos.cpp | 66 +++++++++++- firmware/application/ui_xylos.hpp | 14 +++ firmware/baseband-tx.bin | Bin 33280 -> 33280 bytes firmware/baseband-tx/Makefile | 1 + firmware/baseband-tx/baseband_thread.cpp | 2 + firmware/baseband-tx/proc_fsk_lcr.cpp | 29 ++++-- firmware/baseband-tx/proc_fsk_lcr.hpp | 3 +- firmware/baseband-tx/proc_jammer.cpp | 2 +- firmware/baseband-tx/proc_xylos.cpp | 12 +-- firmware/baseband-tx/proc_xylos.hpp | 14 +-- firmware/common/modules.h | 2 +- firmware/common/portapack_shared_memory.hpp | 1 + firmware/common/ui_widget.cpp | 11 ++ firmware/common/ui_widget.hpp | 1 + firmware/portapack-h1-firmware.bin | Bin 484272 -> 492048 bytes sdcard/baseband-tx.bin | Bin 33280 -> 33280 bytes 31 files changed, 485 insertions(+), 110 deletions(-) create mode 100644 firmware/application/ui_freqman.cpp create mode 100644 firmware/application/ui_freqman.hpp diff --git a/firmware/application/Makefile b/firmware/application/Makefile index d4192e14..b50dacdc 100755 --- a/firmware/application/Makefile +++ b/firmware/application/Makefile @@ -165,6 +165,7 @@ CPPSRC = main.cpp \ ui_epar.cpp \ ui_focus.cpp \ ui_font_fixed_8x16.cpp \ + ui_freqman.cpp \ ui_handwrite.cpp \ ui_jammer.cpp \ ui_lcr.cpp \ diff --git a/firmware/application/main.cpp b/firmware/application/main.cpp index 1d71aa8f..80423118 100755 --- a/firmware/application/main.cpp +++ b/firmware/application/main.cpp @@ -24,24 +24,24 @@ //BUG: No audio in about when shown second time //BUG: Description doesn't show up first time going to system>module info (UI drawn on top) -//TODO: Two players tic-tac-toe -//TODO: Breakout game +//BUG: Crash after TX stop (unregister message !) + +//TODO: Show MD5 mismatches for modules not found, etc... +//TODO: Frequency manager ! +//TODO: Weird LCR AFSK scrambling ? //TODO: SD card wiper //TODO: Draw on touchscreen and transmit as spectrum paint //TODO: Use progressbars -//TODO: Setting: Prefered input method //TODO: LCR receiver //TODO: Xylos receiver //TODO: Morse coder //TODO: Playdead amnesia and login //TODO: Touch screen calibration -//TODO: Show MD5 mismatches for modules not found, etc... //TODO: Check jammer bandwidths //TODO: GSM channel detector //TODO: AFSK receiver //TODO: SIGFOX RX/TX //TODO: Module name/filename in modules.hpp to indicate requirement in case it's not found ui_loadmodule -//BUG: Crash after TX stop (unregister message !) //TODO: Check bw setting in LCR TX //TODO: Bodet :) //TODO: Whistler @@ -51,7 +51,8 @@ //TODO: LCR EC=A,J,N //TODO: LCR full message former (see norm) //TODO: AFSK NRZI -//TODO: TX power +//TODO: TX power setting +//TODO: Two players tic-tac-toe #include "ch.h" diff --git a/firmware/application/ui_afsksetup.cpp b/firmware/application/ui_afsksetup.cpp index a835b20d..4b80b51b 100644 --- a/firmware/application/ui_afsksetup.cpp +++ b/firmware/application/ui_afsksetup.cpp @@ -82,17 +82,19 @@ AFSKSetupView::AFSKSetupView( &field_space, &text_bw, &field_bw, - &text_repeat, - &field_repeat, - &checkbox_lsb, - &checkbox_parity, - &checkbox_datasize, + //&text_repeat, + //&field_repeat, + //&checkbox_lsb, + //&checkbox_parity, + //&checkbox_datasize, + &checkbox_altformat, &button_done } }); - if (portapack::persistent_memory::afsk_config() & 1) checkbox_lsb.set_value(true); - if (portapack::persistent_memory::afsk_config() & 2) checkbox_parity.set_value(true); - if (portapack::persistent_memory::afsk_config() & 4) checkbox_datasize.set_value(true); + //if (portapack::persistent_memory::afsk_config() & 1) checkbox_lsb.set_value(true); + //if (portapack::persistent_memory::afsk_config() & 2) checkbox_parity.set_value(true); + //if (portapack::persistent_memory::afsk_config() & 4) checkbox_datasize.set_value(true); + if (portapack::persistent_memory::afsk_config() & 8) checkbox_altformat.set_value(true); updfreq(portapack::persistent_memory::tuned_frequency()); @@ -133,9 +135,10 @@ AFSKSetupView::AFSKSetupView( portapack::persistent_memory::set_afsk_space(field_space.value()/100); portapack::persistent_memory::set_afsk_bw(field_bw.value()); - if (checkbox_lsb.value() == true) afsk_config |= 1; - if (checkbox_parity.value() == true) afsk_config |= 2; - if (checkbox_datasize.value() == true) afsk_config |= 4; + //if (checkbox_lsb.value() == true) afsk_config |= 1; + //if (checkbox_parity.value() == true) afsk_config |= 2; + //if (checkbox_datasize.value() == true) afsk_config |= 4; + if (checkbox_altformat.value() == true) afsk_config |= 8; afsk_config |= (field_repeat.value() << 8); portapack::persistent_memory::set_afsk_config(afsk_config); diff --git a/firmware/application/ui_afsksetup.hpp b/firmware/application/ui_afsksetup.hpp index ed8a3ab5..5fcf8a25 100644 --- a/firmware/application/ui_afsksetup.hpp +++ b/firmware/application/ui_afsksetup.hpp @@ -105,6 +105,12 @@ private: ' ' }; + Checkbox checkbox_altformat { + { 8, 150 }, + 11, + "Alt. format" + }; + Checkbox checkbox_lsb { { 8, 150 }, 9, diff --git a/firmware/application/ui_alphanum.cpp b/firmware/application/ui_alphanum.cpp index eaf8f1ba..ca93e970 100644 --- a/firmware/application/ui_alphanum.cpp +++ b/firmware/application/ui_alphanum.cpp @@ -51,13 +51,13 @@ AlphanumView::AlphanumView( static constexpr Style style_alpha { .font = font::fixed_8x16, - .background = Color::red(), + .background = Color(191,31,31), .foreground = Color::black() }; static constexpr Style style_num { .font = font::fixed_8x16, - .background = Color::yellow(), + .background = Color(191,191,31), .foreground = Color::black() }; @@ -99,6 +99,13 @@ AlphanumView::AlphanumView( set_lowercase(); } }; + + /*add_child(&raw_char); + raw_char.set_value(0x30); + raw_char.on_select = [this, &nav, txt, max_len](Button&) { + char_add(raw_char.value()); + update_text(); + };*/ add_child(&button_done); button_done.on_select = [this, &nav, txt, max_len](Button&) { diff --git a/firmware/application/ui_alphanum.hpp b/firmware/application/ui_alphanum.hpp index 150303f1..10892750 100644 --- a/firmware/application/ui_alphanum.hpp +++ b/firmware/application/ui_alphanum.hpp @@ -72,6 +72,14 @@ private: { 88+64+16, 270, 32, 24 }, "UC" }; + + /*NumberField raw_char { + { 16, 270, 16, 16 }, + 3, + { 1, 255 }, + 1, + '0' + };*/ Button button_done { { 88, 270, 64, 24 }, diff --git a/firmware/application/ui_freqman.cpp b/firmware/application/ui_freqman.cpp new file mode 100644 index 00000000..cb8b6218 --- /dev/null +++ b/firmware/application/ui_freqman.cpp @@ -0,0 +1,80 @@ +/* + * Copyright (C) 2015 Jared Boone, ShareBrained Technology, Inc. + * Copyright (C) 2016 Furrtek + * + * This file is part of PortaPack. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#include "ui_freqman.hpp" + +#include "ch.h" + +#include "ff.h" +#include "portapack.hpp" +#include "event_m0.hpp" +#include "hackrf_hal.hpp" +#include "portapack_shared_memory.hpp" + +#include + +using namespace portapack; + +namespace ui { + +void FreqManView::paint(Painter& painter) { + (void)painter; +} + +FreqManView::FreqManView( + NavigationView& nav +) { + + add_children({ { + &button_ok + } }); + + size_t n = 0; + for(auto& text : text_list) { + add_child(&text); + text.set_parent_rect({ + static_cast(0), + static_cast(16 + (n * 16)), + 240, 16 + }); + const std::string label { + (char)(n + 0x30) + }; + text.set(label); + n++; + } + + button_ok.on_select = [this, &nav](Button&) { + nav.pop(); + }; + +} + +void FreqManView::on_show() { + +} + +void FreqManView::on_hide() { + +} + +} diff --git a/firmware/application/ui_freqman.hpp b/firmware/application/ui_freqman.hpp new file mode 100644 index 00000000..f18b385a --- /dev/null +++ b/firmware/application/ui_freqman.hpp @@ -0,0 +1,50 @@ +/* + * Copyright (C) 2015 Jared Boone, ShareBrained Technology, Inc. + * Copyright (C) 2016 Furrtek + * + * This file is part of PortaPack. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#include "ui.hpp" +#include "ui_widget.hpp" +#include "ui_painter.hpp" +#include "ui_menu.hpp" +#include "ui_navigation.hpp" + +namespace ui { + +class FreqManView : public View { +public: + FreqManView(NavigationView& nav); + //~FreqManView(); + std::string title() const override { return "Frequency list"; }; + + void paint(Painter& painter) override; + void on_show() override; + void on_hide() override; + +private: + std::array text_list; + + Button button_ok { + { 72, 264, 96, 32 }, + "OK" + }; +}; + +} /* namespace ui */ diff --git a/firmware/application/ui_jammer.cpp b/firmware/application/ui_jammer.cpp index 4f29b010..0d9257bb 100644 --- a/firmware/application/ui_jammer.cpp +++ b/firmware/application/ui_jammer.cpp @@ -171,7 +171,7 @@ JammerView::JammerView( }; transmitter_model.set_baseband_configuration({ - .mode = 3, + .mode = 6, .sampling_rate = 1536000, // ? .decimation_factor = 1, }); @@ -205,6 +205,8 @@ JammerView::JammerView( text_info1.set_style(&style_info); text_info2.set_style(&style_info); text_info3.set_style(&style_info); + + options_preset.set_selected_index(8); options_preset.on_change = [this](size_t n, OptionsField::value_t v) { (void)n; @@ -220,27 +222,25 @@ JammerView::JammerView( }; button_setfreq1_min.on_select = [this,&nav](Button&){ - auto new_view = new FrequencyKeypadView { nav, range1_min }; + auto new_view = nav.push(range1_min); new_view->on_changed = [this](rf::Frequency f) { updfreq(0, f); }; - nav.push(new_view); }; button_setfreq1_max.on_select = [this,&nav](Button&){ - auto new_view = new FrequencyKeypadView { nav, range1_max }; + auto new_view = nav.push(range1_max); new_view->on_changed = [this](rf::Frequency f) { - updfreq(1, f); + updfreq(0, f); }; - nav.push(new_view); }; - button_transmit.on_select = [this,&transmitter_model](Button&) { + button_transmit.on_select = [this](Button&) { uint8_t i = 0; rf::Frequency t, range_lower; EventDispatcher::message_map().unregister_handler(Message::ID::Retune); EventDispatcher::message_map().register_handler(Message::ID::Retune, - [this,&transmitter_model](Message* const p) { + [this](Message* const p) { const auto message = static_cast(p); if (message->freq > 0) { transmitter_model.set_tuning_frequency(message->freq); @@ -252,28 +252,80 @@ JammerView::JammerView( shared_memory.jammer_ranges[i].active = false; } + // Swap if (range1_min > range1_max) { t = range1_min; range1_min = range1_max; range1_max = t; } + i = 0; range_lower = range1_min; - for (i = 0;;) { +// for (i = 0; i < 3; i++) { + 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; + 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].width = (range1_max - range_lower) / 10; // ? shared_memory.jammer_ranges[i].active = true; - shared_memory.jammer_ranges[i].duration = 2280000/10; - break; + shared_memory.jammer_ranges[i].duration = 2280000 / 10; + //break; } - i++; +// } + + // Swap + if (range2_min > range2_max) { + t = range2_min; + range2_min = range2_max; + range2_max = t; } + i = 1; + range_lower = range2_min; +// for (i = 0; i < 3; i++) { + + 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; + } +// } + + // Swap + if (range3_min > range3_max) { + t = range3_min; + range3_min = range3_max; + range3_max = t; + } + i = 2; + range_lower = range3_min; +// for (i = 0; i < 3; i++) { + + 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; + } +// } transmitter_model.set_tuning_frequency(shared_memory.jammer_ranges[0].center); diff --git a/firmware/application/ui_jammer.hpp b/firmware/application/ui_jammer.hpp index 9edbf155..af1fe2b1 100644 --- a/firmware/application/ui_jammer.hpp +++ b/firmware/application/ui_jammer.hpp @@ -108,11 +108,11 @@ private: { false, 0, 0 }, { false, 0, 0 }}, - // Reims 164 - {{ true, 164000000 - 200000, 164000000 + 200000}, // BW: 400kHz - { false, 0, 0 }, + // GPS L1 & L2 + {{ true, 1575420000 - 50000, 1575420000 + 50000}, // BW: 100kHz + { true, 1227600000 - 50000, 1227600000 + 50000 }, // BW: 100kHz { false, 0, 0 }} - + }; bool jamming = false; @@ -185,7 +185,7 @@ private: { "DECT ", 5 }, { "Optifib ", 6 }, { "ISM 433 ", 7 }, - { "Reims ", 8 }, + { "GPS ", 8 }, } }; diff --git a/firmware/application/ui_lcr.cpp b/firmware/application/ui_lcr.cpp index d259b172..95d4e795 100644 --- a/firmware/application/ui_lcr.cpp +++ b/firmware/application/ui_lcr.cpp @@ -55,12 +55,18 @@ LCRView::~LCRView() { } void LCRView::make_frame() { + const char ec_lut[3][2] = { { 'A', 0x00 }, + { 'J', 0x00 }, + { 'N', 0x00 } + }; char eom[3] = { 3, 0, 0 }; // EOM and space for checksum uint8_t i, pm; uint16_t dp; uint8_t cp, pp, cur_byte, new_byte; - // Pad litterals right to 7 chars (not required ?) + button_setrgsb.set_text(rgsb); + + // Pad litterals to 7 chars (not required ?) for (i = 0; i < 5; i++) { while (strlen(litteral[i]) < 7) { strcat(litteral[i], " "); @@ -77,11 +83,10 @@ void LCRView::make_frame() { lcrframe[5] = 127; lcrframe[6] = 127; lcrframe[7] = 15; // SOM - - button_setrgsb.set_text(rgsb); strcat(lcrframe, rgsb); strcat(lcrframe, "PA "); + if (checkbox_am_a.value() == true) { strcat(lcrframe, "AM=1 AF=\""); strcat(lcrframe, litteral[0]); @@ -107,18 +112,20 @@ void LCRView::make_frame() { strcat(lcrframe, litteral[4]); strcat(lcrframe, "\" CL=0 "); } - strcat(lcrframe, "EC=A SAB=0"); + strcat(lcrframe, "EC="); + strcat(lcrframe, ec_lut[options_ec.selected_index()]); + strcat(lcrframe, " SAB=0"); memcpy(lcrstring, lcrframe, 256); - //Checksum + // Checksum checksum = 0; - i = 7; + i = 7; // Skip modem sync while (lcrframe[i]) { checksum ^= lcrframe[i]; i++; } - checksum ^= eom[0]; // EOM + checksum ^= eom[0]; // EOM char checksum &= 0x7F; eom[1] = checksum; @@ -129,8 +136,8 @@ void LCRView::make_frame() { //else // pm = 1; // Odd parity - //if (persistent_memory::afsk_config() & 1) { - // LSB first + if (!(persistent_memory::afsk_config() & 8)) { + // Clear format for (dp = 0; dp < strlen(lcrframe); dp++) { pp = pm; new_byte = 0; @@ -141,6 +148,24 @@ void LCRView::make_frame() { } lcrframe_f[dp] = new_byte | (pp & 1); } + lcrframe_f[dp] = 0; + } else { + // Alt format + for (dp = 0; dp < strlen(lcrframe); dp++) { + pp = pm; + cur_byte = alt_lookup[lcrframe[dp]]; + for (cp = 0; cp < 8; cp++) { + if ((cur_byte >> cp) & 1) pp++; + } + lcrframe_f[dp * 2] = cur_byte; + lcrframe_f[(dp * 2) + 1] = pp & 1; + } + lcrframe_f[dp * 2] = 0; + } + + //if (persistent_memory::afsk_config() & 1) { + // LSB first + // See above /*} else { // MSB first for (dp=0;dp> 8) & 0xFF).c_str()); text_status.set(str); progress.set_value(0); transmitter_model.disable(); @@ -237,7 +275,6 @@ void LCRView::start_tx() { text_status.set(" "); strcpy(str, to_string_dec_int(6 - message->n).c_str()); strcat(str, "/5"); - //strcat(str, to_string_dec_int((portapack::persistent_memory::afsk_config() >> 8) & 0xFF).c_str()); text_status.set(str); progress.set_value((6 - message->n) * 20); } @@ -297,11 +334,9 @@ LCRView::LCRView( NavigationView& nav ) { - char finalstr[24] = {0}; - transmitter_model.set_baseband_configuration({ .mode = 3, - .sampling_rate = 2280000, // Is this right ? + .sampling_rate = 2280000, .decimation_factor = 1, }); @@ -313,6 +348,7 @@ LCRView::LCRView( add_children({ { &text_recap, + &options_ec, &button_setrgsb, &button_txsetup, &checkbox_am_a, @@ -333,21 +369,14 @@ LCRView::LCRView( &button_clear } }); + options_ec.set_selected_index(0); + checkbox_am_a.set_value(true); checkbox_am_b.set_value(false); checkbox_am_c.set_value(false); checkbox_am_d.set_value(false); checkbox_am_e.set_value(false); - // Recap: tx freq @ bps - auto fstr = to_string_dec_int(portapack::persistent_memory::tuned_frequency() / 1000, 6); - auto bstr = to_string_dec_int(portapack::persistent_memory::afsk_bitrate(), 4); - strcat(finalstr, fstr.c_str()); - strcat(finalstr, " @ "); - strcat(finalstr, bstr.c_str()); - strcat(finalstr, "bps"); - text_recap.set(finalstr); - button_transmit.set_style(&style_val); button_scan.set_style(&style_val); @@ -397,14 +426,18 @@ LCRView::LCRView( }; button_clear.on_select = [this, &nav](Button&) { - memset(litteral, 0, 5 * 8); - checkbox_am_a.set_value(true); - checkbox_am_b.set_value(true); - checkbox_am_c.set_value(true); - checkbox_am_d.set_value(true); - checkbox_am_e.set_value(true); - set_dirty(); - start_tx(); + if (txing == false) { + scanning = false; + memset(litteral, 0, 5 * 8); + options_ec.set_selected_index(0); + checkbox_am_a.set_value(true); + checkbox_am_b.set_value(true); + checkbox_am_c.set_value(true); + checkbox_am_d.set_value(true); + checkbox_am_e.set_value(true); + set_dirty(); + start_tx(); + } }; } diff --git a/firmware/application/ui_lcr.hpp b/firmware/application/ui_lcr.hpp index c042ba20..2a7ef479 100644 --- a/firmware/application/ui_lcr.hpp +++ b/firmware/application/ui_lcr.hpp @@ -74,6 +74,28 @@ private: void make_frame(); void start_tx(); + // 2: 94 ? + // 9: 85 ? + + const char alt_lookup[256] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x0F, // 0 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 10 + 0xF8, 0, 0x99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 20 !"#$%&'()*+,-./ + 0xF5, 0, 0x94, 0x55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1C, 0, 0, // 30 0123456789:;<=>? + 0, 0x3C, 0x9C, 0x5D, 0, 0, 0, 0, 0, 0x44, 0x85, 0, 0xD5, 0x14, 0, 0, // 40 @ABCDEFGHIJKLMNO + 0xF0, 0, 0, 0x50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 50 PQRSTUVWXYZ[\]^_ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 60 `abcdefghijklmno + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x7F, // 70 pqrstuvwxyz{|}~ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 80 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 90 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // A0 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // B0 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // C0 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // D0 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // E0 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 // F0 + }; + const Style style_val { .font = font::fixed_8x16, .background = Color::green(), @@ -90,12 +112,14 @@ private: "-" }; - NumberField adr_code { - { 220, 6 }, - 2, - { 0, 36 }, - 1, - '0' + OptionsField options_ec { + { 20 * 8, 1 * 16 }, + 4, + { + { "Auto", 0 }, + { "Jour", 1 }, + { "Nuit", 2 } + } }; Button button_setrgsb { diff --git a/firmware/application/ui_loadmodule.cpp b/firmware/application/ui_loadmodule.cpp index 63eed8ef..60f80f7c 100644 --- a/firmware/application/ui_loadmodule.cpp +++ b/firmware/application/ui_loadmodule.cpp @@ -41,6 +41,7 @@ #include "ui_debug.hpp" #include "ui_closecall.hpp" #include "ui_audiotx.hpp" +#include "ui_jammer.hpp" #include #include @@ -174,6 +175,7 @@ LoadModuleView::LoadModuleView( if (viewid == RDS) nav.push(); if (viewid == CloseCall) nav.push(); if (viewid == Receiver) nav.push(); + if (viewid == Jammer) nav.push(); } }; } diff --git a/firmware/application/ui_loadmodule.hpp b/firmware/application/ui_loadmodule.hpp index e142d070..275ec4ab 100644 --- a/firmware/application/ui_loadmodule.hpp +++ b/firmware/application/ui_loadmodule.hpp @@ -40,6 +40,7 @@ enum ViewID { SoundBoard, AnalogAudio, RDS, + Jammer }; class LoadModuleView : public View { diff --git a/firmware/application/ui_navigation.cpp b/firmware/application/ui_navigation.cpp index fde5a135..d47956bc 100644 --- a/firmware/application/ui_navigation.cpp +++ b/firmware/application/ui_navigation.cpp @@ -36,6 +36,7 @@ #include "ui_handwrite.hpp" // DEBUG #include "ui_soundboard.hpp" // DEBUG #include "ui_closecall.hpp" // DEBUG +#include "ui_freqman.hpp" // DEBUG #include "analog_audio_app.hpp" #include "ais_app.hpp" @@ -209,13 +210,14 @@ ReceiverMenuView::ReceiverMenuView(NavigationView& nav) { /* SystemMenuView ********************************************************/ SystemMenuView::SystemMenuView(NavigationView& nav) { - add_items<11>({ { + add_items<12>({ { { "Play dead", ui::Color::red(), [&nav](){ nav.push(false); } }, { "Receiver RX", ui::Color::cyan(), [&nav](){ nav.push(md5_baseband, Receiver); } }, { "Close Call RX", ui::Color::cyan(), [&nav](){ nav.push(md5_baseband, CloseCall); } }, - { "Soundboard TX", ui::Color::yellow(), [&nav](){ nav.push(md5_baseband_tx, SoundBoard); } }, + { "Pokemon GO Away TX", ui::Color::blue(), [&nav](){ nav.push(md5_baseband_tx, Jammer); } }, + //{ "Soundboard TX", ui::Color::yellow(), [&nav](){ nav.push(md5_baseband_tx, SoundBoard); } }, //{ "Audio TX", ui::Color::yellow(), [&nav](){ nav.push(md5_baseband_tx, AudioTX); } }, - + { "Frequency manager", ui::Color::white(), [&nav](){ nav.push(); } }, //{ "EPAR TX", ui::Color::green(), [&nav](){ nav.push(md5_baseband_tx, EPAR); } }, { "Xylos TX", ui::Color::green(), [&nav](){ nav.push(md5_baseband_tx, Xylos); } }, { "TEDI/LCR TX", ui::Color::orange(), [&nav](){ nav.push(md5_baseband_tx, LCR); } }, @@ -293,6 +295,7 @@ SystemView::SystemView( //navigation_view.push(); //navigation_view.push(); //navigation_view.push(debugtxt, 20); + navigation_view.push(); } diff --git a/firmware/application/ui_xylos.cpp b/firmware/application/ui_xylos.cpp index 1ef6ac32..53e03888 100644 --- a/firmware/application/ui_xylos.cpp +++ b/firmware/application/ui_xylos.cpp @@ -197,6 +197,8 @@ XylosView::XylosView( NavigationView& nav ) { + int c; + transmitter_model.set_baseband_configuration({ .mode = 2, .sampling_rate = 1536000, @@ -325,7 +327,7 @@ XylosView::XylosView( XylosView::upd_message(); - button_txtest.on_select = [this](Button&) { + /*button_txtest.on_select = [this](Button&) { const uint8_t ccirtest[21] = { 11, 13, 15, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 14, 12, 10, 12, 14, 0, 9, 0xFF }; if (txing == false) { EventDispatcher::message_map().unregister_handler(Message::ID::TXDone); @@ -351,6 +353,68 @@ XylosView::XylosView( audio::headphone::set_volume(volume_t::decibel(90 - 99) + audio::headphone::volume_range().max); + txing = true; + button_txtest.set_style(&style_cancel); + button_txtest.set_text("Wait"); + transmitter_model.enable(); + } + };*/ + + // Sequence testing: + button_txtest.on_select = [this](Button&) { + int c; + + if (txing == false) { + sequence_idx = 0; + EventDispatcher::message_map().unregister_handler(Message::ID::TXDone); + + EventDispatcher::message_map().register_handler(Message::ID::TXDone, + [this](Message* const p) { + int c; + const auto message = static_cast(p); + if (message->n == 25) { + transmitter_model.disable(); + + if (sequence_idx != 9) { + chThdSleepMilliseconds(15000); + memcpy(ccirmessage, &xylos_sequence[sequence_idx][0], 21); + // ASCII to frequency LUT index + for (c=0; c<20; c++) { + if (ccirmessage[c] > '9') + ccirmessage[c] -= 0x37; + else + ccirmessage[c] -= 0x30; + } + ccirmessage[20] = 0xFF; + shared_memory.transmit_done = false; + memcpy(shared_memory.xylosdata, ccirmessage, 21); + sequence_idx++; + txing = true; + transmitter_model.enable(); + } else { + button_txtest.set_style(&style()); + button_txtest.set_text("TEST"); + } + } + } + ); + + memcpy(ccirmessage, &xylos_sequence[sequence_idx][0], 21); + // ASCII to frequency LUT index + for (c=0; c<20; c++) { + if (ccirmessage[c] > '9') + ccirmessage[c] -= 0x37; + else + ccirmessage[c] -= 0x30; + } + ccirmessage[20] = 0xFF; + shared_memory.transmit_done = false; + memcpy(shared_memory.xylosdata, ccirmessage, 21); + + sequence_idx++; + + transmitter_model.set_tuning_frequency(xylos_freqs[options_freq.selected_index()]); + txing = true; button_txtest.set_style(&style_cancel); button_txtest.set_text("Wait"); diff --git a/firmware/application/ui_xylos.hpp b/firmware/application/ui_xylos.hpp index 132b204b..ce819f85 100644 --- a/firmware/application/ui_xylos.hpp +++ b/firmware/application/ui_xylos.hpp @@ -157,6 +157,20 @@ private: const rf::Frequency xylos_freqs[7] = { 31325000, 31387500, 31437500, 31475000, 31687500, 31975000, 88000000 }; char ccirmessage[21]; + const char xylos_sequence[9][21] = { + "0E0E18920EB1E10B0E0E", + "0E0E1890E0B0E12B0E0E", + "0E0E18920EB1E20B0E0E", + "0E0E18920EB1210B0E0E", + "0E0E18920EB1E10B0E0E", + "0E0E18920EB1E10B0E0E", + "0E0E181AEAB10E0B0E0E", + "0E01E81AEAB10E0B0E0E", // 2016-05-22 05:22:29 0E01E81AEA/10E0/0E0E + "0E03181AEAB10E0B0E0E" + }; + + int sequence_idx; + void start_tx(); void upd_message(); diff --git a/firmware/baseband-tx.bin b/firmware/baseband-tx.bin index f37fb9eeb82e81ff34a97ec87f9db963346a2732..d7f2a1b1dffe5bbe69879b5e3009c34476d2c34c 100644 GIT binary patch delta 3596 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 VH=YCNCW4HP6LWIHnWz8S{SO&qf-?XB delta 2924 zcmZuz4RjRM6~1qFvzeXE&p<+4mIWuf`cMv1UC709%qDY@d1Wm+O8t zxa)<>gYUg@()KOk&SnC9g1DOLGcg>AVI*^ek?ujXMW{n#!iB$};75EGp$}?)!!y!E zguHGOUz{y?7%3Q`jMk#7Tmo=vCADeWwTzS>p?}vNWbUq{TcRvXgVT2?YMI9PKxf0! zQ?r2YKy)FzPV@;M`d8LCGw+toy-u2{7c}!H2;HGiU|OAYjb32b3F_4+GHp(JP;W^Z z2otNdn(w@s^th9Lgj*kn;RjpoPO9V5nf5SsaAxL|la_G;vo}l|Q0j8hUvp-DW5>;0 z7oGGpH&0mI0sfnp1Jiz!Qe!nE{kVh5TqD!#q>mcbF~d&!x#1&SFRI}5wU~{#;+q$H z2gC5Wv@G7uROiy8@u^IEF8v^Wlndkn`~%U2BL9j`$ODMUqg!T_F~7_6U6^5FbUelt zmiWF+Fq4@?+8lXrfMsF_q9EBrq(>t(aaIxOqpN1sGg~I;yR#hRfNx~h$Aob#p%-o& z#liQEv5DArhXs-ERD-?npHlhD?K&|Md{ZeO_PUTIjAMaTgk&OhhiSFR6T5W`(!U8L zy=piP(jNMmX)9kI=3lQ8H3J+G@Ze%po8xYd%77b3ykA`-QmW|Q{FEmDM)7hY`9e6l zr}*aLxl2o3a-y?**j1~ZkQnYtaovbmwWGzZ@?pLo>v`y${8kSI#$*j|ktLdd?lc{-l?E6fYdcY3S z_8n@*-zoK%U6R4O@H+D>JM!VG55=#pckFrz@pQXZj2HDoM!jK(H9*R-t*m`h4_J?F zx*~&ctezG$TtW-CIV+(_@Rq+>o9a@--6C=#y>M%^)50 zlB`ePgygR`y3P_L>V??<^JF_UfD>0?LEyUE?!EViL(X9l>BQ@JfAb-;5b?$!aw!$LK$oUo8>^V(! zjg|eDZ6wRm2$pqt+>R=ee5_8ToYA0?{_X#gmLh2&0v2MeZJaIU(V^6A_8C)j2HE$s z9_qCk?@k^ghc$;T%K)=Q=J4zyA{od0-~Hq{^vuC!e}KPA@VUrx%6yr_4uG;;R6}%7 z4FG*DO>ns*aF|TrTZ8uospJP%T@$L+o=ENXyCxkb^m6}{yOQYR(p!n~^Dt@EAIkTf z_js{v=9u*MXmsmJn4Zq?+?%TCUyXYoLweZg0qJ%{b&4FK9xj_!E5R4gR0%$;{23_$ zlmayhP&(Cu>M#E`zA&V>=p(i?{41k-Z8^(YCjPf;ZlCNLwOh2}Q|)o$iSnu6VsQQx=r2zJ#GSxcX=r{%HsSGq~I$~MK-9ssLJ?CY=FP&le&K3ib!`DH0~Z5uc8 zWhFbrvaK>W`cCeb-HwPok6yKBG;99TMcl}aRr}=%q4p6y7A|1f9tibdFZ5t9^k6T1 zpWF%Q;GmxlFK$RZa0dLmYKRXho(S$i*?g1yG|K6fbXQK!j|LaTLfQ6c_+~sBv|bio zkJZDKV|pkl;$V1?gMGg@!1{GDz+&`rvUPB6JPs-j>%cf84tBHAzDQ06ug{!|*FseI zGMA=lV=Hi4gLn)vgOb7oZl3_~GUBA*d$T-;joW9%Sft<@jzcLvU7= shared_memory.afsk_samples_per_bit) { - if (shared_memory.afsk_transmit_done == false) + if (shared_memory.afsk_transmit_done == false) { cur_byte = shared_memory.radio_data[byte_pos]; + ext_byte = shared_memory.radio_data[byte_pos + 1]; + } if (!cur_byte) { if (shared_memory.afsk_repeat) { shared_memory.afsk_repeat--; bit_pos = 0; byte_pos = 0; cur_byte = shared_memory.radio_data[0]; + ext_byte = shared_memory.radio_data[1]; message.n = shared_memory.afsk_repeat; shared_memory.application_queue.push(message); } else { @@ -49,18 +52,32 @@ void LCRFSKProcessor::execute(const buffer_c8_t& buffer) { shared_memory.afsk_transmit_done = true; shared_memory.application_queue.push(message); cur_byte = 0; + ext_byte = 0; } } - gbyte = 0; - gbyte = cur_byte << 1; - gbyte |= 1; + if (shared_memory.afsk_alt_format) { + // 0bbbbbbbbp + // Start, 8-bit data, parity + gbyte = 0; + gbyte = cur_byte << 1; + gbyte |= (ext_byte & 1); + } else { + // 0bbbbbbbp1 + // Start, 7-bit data, parity, stop + gbyte = 0; + gbyte = cur_byte << 1; + gbyte |= 1; + } - cur_bit = (gbyte >> (9-bit_pos)) & 1; + cur_bit = (gbyte >> (9 - bit_pos)) & 1; if (bit_pos == 9) { bit_pos = 0; - byte_pos++; + if (!shared_memory.afsk_alt_format) + byte_pos++; + else + byte_pos += 2; } else { bit_pos++; } diff --git a/firmware/baseband-tx/proc_fsk_lcr.hpp b/firmware/baseband-tx/proc_fsk_lcr.hpp index 06ad0361..70de97c3 100644 --- a/firmware/baseband-tx/proc_fsk_lcr.hpp +++ b/firmware/baseband-tx/proc_fsk_lcr.hpp @@ -31,8 +31,9 @@ public: private: int8_t re, im; uint8_t s; - uint8_t bit_pos, byte_pos = 0; + uint8_t bit_pos = 0, byte_pos = 0; char cur_byte = 0; + char ext_byte = 0; uint16_t gbyte; uint8_t cur_bit = 0; uint32_t sample_count; diff --git a/firmware/baseband-tx/proc_jammer.cpp b/firmware/baseband-tx/proc_jammer.cpp index c2dd47ad..001b503d 100644 --- a/firmware/baseband-tx/proc_jammer.cpp +++ b/firmware/baseband-tx/proc_jammer.cpp @@ -30,7 +30,7 @@ void JammerProcessor::execute(const buffer_c8_t& buffer) { for (size_t i = 0; i= 10000) { //shared_memory.jammer_ranges[ir].duration + if (s >= 10000) { //shared_memory.jammer_ranges[ir].duration s = 0; for (;;) { ir++; diff --git a/firmware/baseband-tx/proc_xylos.cpp b/firmware/baseband-tx/proc_xylos.cpp index 5c4e2069..57bcbf90 100644 --- a/firmware/baseband-tx/proc_xylos.cpp +++ b/firmware/baseband-tx/proc_xylos.cpp @@ -39,7 +39,7 @@ void XylosProcessor::execute(const buffer_c8_t& buffer) { for (size_t i = 0; i= 9) { + if (s >= (5-1)) { s = 0; if (silence) { @@ -78,7 +78,7 @@ void XylosProcessor::execute(const buffer_c8_t& buffer) { re = 0; im = 0; } else { - sample = (sine_table_f32[(aphase & 0x03FF0000)>>18]*255); + sample = (sine_table_f32[(aphase & 0x03FF0000)>>18]*127); // 255 here before :D // Audio preview sample generation: 1536000/48000 = 32 /*if (as >= 31) { @@ -87,15 +87,15 @@ void XylosProcessor::execute(const buffer_c8_t& buffer) { } else { as++; }*/ - + //FM - frq = sample * 500; // To check ! + frq = sample * 1000; // 500 was here phase = (phase + frq); sphase = phase + (256<<16); - re = (sine_table_f32[(sphase & 0x03FF0000)>>18]*127); - im = (sine_table_f32[(phase & 0x03FF0000)>>18]*127); + re = (sine_table_f32[(sphase & 0x03FF0000)>>18]*15); + im = (sine_table_f32[(phase & 0x03FF0000)>>18]*15); } buffer.p[i] = {(int8_t)re,(int8_t)im}; diff --git a/firmware/baseband-tx/proc_xylos.hpp b/firmware/baseband-tx/proc_xylos.hpp index 1a7b2cf3..db5baab0 100644 --- a/firmware/baseband-tx/proc_xylos.hpp +++ b/firmware/baseband-tx/proc_xylos.hpp @@ -31,23 +31,15 @@ #include "audio_output.hpp" #include "baseband_processor.hpp" -#define CCIR_TONELENGTH 15360-1 // 1536000/10/10 -#define PHASEV 436.91 // (65536*1024)/1536000*10 -#define SILENCE 61440-1 // 400ms +#define CCIR_TONELENGTH (15360*2)-1 // 1536000/10/10 +#define PHASEV (436.91/2) // (65536*1024)/1536000*10 +#define SILENCE (46080*2)-1 // 400ms class XylosProcessor : public BasebandProcessor { public: void execute(const buffer_c8_t& buffer) override; private: - /*int16_t audio_data[64]; - - std::array audio; - const buffer_s16_t audio_buffer { - audio.data(), - audio.size() - };*/ - uint32_t ccir_phases[16] = { (uint32_t)(1981*PHASEV), (uint32_t)(1124*PHASEV), diff --git a/firmware/common/modules.h b/firmware/common/modules.h index dfaf5445..33a0f7e4 100644 --- a/firmware/common/modules.h +++ b/firmware/common/modules.h @@ -1,2 +1,2 @@ const char md5_baseband[16] = {0xb8,0x9e,0x9b,0x08,0x44,0x34,0x04,0x20,0x0b,0xbc,0x60,0x7e,0x67,0x88,0x53,0xf7,}; -const char md5_baseband_tx[16] = {0x76,0x21,0x56,0xb0,0x12,0x45,0xdd,0x66,0x87,0xee,0x8a,0x97,0xda,0xee,0xc5,0xac,}; +const char md5_baseband_tx[16] = {0xd5,0xaf,0x76,0xd5,0xa3,0x32,0x5d,0x9a,0x9d,0x83,0x46,0x37,0x02,0x2d,0xd0,0x57,}; diff --git a/firmware/common/portapack_shared_memory.hpp b/firmware/common/portapack_shared_memory.hpp index 1995aadd..7ab097f7 100644 --- a/firmware/common/portapack_shared_memory.hpp +++ b/firmware/common/portapack_shared_memory.hpp @@ -63,6 +63,7 @@ struct SharedMemory { uint8_t afsk_repeat; uint32_t afsk_fmmod; bool afsk_transmit_done; + bool afsk_alt_format; JammerRange jammer_ranges[16]; diff --git a/firmware/common/ui_widget.cpp b/firmware/common/ui_widget.cpp index 2484b3d7..ef161f34 100644 --- a/firmware/common/ui_widget.cpp +++ b/firmware/common/ui_widget.cpp @@ -916,6 +916,17 @@ void NumberField::paint(Painter& painter) { ); } +bool NumberField::on_key(const KeyEvent key) { + /*if( key == KeyEvent::Select ) { + if( on_select ) { + on_select(*this); + return true; + } + }*/ + + return false; +} + bool NumberField::on_encoder(const EncoderEvent delta) { set_value(value() + (delta * step)); return true; diff --git a/firmware/common/ui_widget.hpp b/firmware/common/ui_widget.hpp index eda09257..11e931f2 100644 --- a/firmware/common/ui_widget.hpp +++ b/firmware/common/ui_widget.hpp @@ -384,6 +384,7 @@ public: void paint(Painter& painter) override; + bool on_key(const KeyEvent key) override; bool on_encoder(const EncoderEvent delta) override; bool on_touch(const TouchEvent event) override; diff --git a/firmware/portapack-h1-firmware.bin b/firmware/portapack-h1-firmware.bin index 74ab82e9175f7c0708adec4bf0773d4e2bf81310..7717ea9c14b88eb7e5a8850f166ef09dbe63d614 100644 GIT binary patch delta 68861 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�-_xf(1yc=52pLS8Y1kA{Y9L-P?0;dD!9;p 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 delta 61048 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 oELvU{C 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 MKX!fnU`L(wU!-HGl>h($ diff --git a/sdcard/baseband-tx.bin b/sdcard/baseband-tx.bin index f37fb9eeb82e81ff34a97ec87f9db963346a2732..d7f2a1b1dffe5bbe69879b5e3009c34476d2c34c 100644 GIT binary patch delta 3596 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 VH=YCNCW4HP6LWIHnWz8S{SO&qf-?XB delta 2924 zcmZuz4RjRM6~1qFvzeXE&p<+4mIWuf`cMv1UC709%qDY@d1Wm+O8t zxa)<>gYUg@()KOk&SnC9g1DOLGcg>AVI*^ek?ujXMW{n#!iB$};75EGp$}?)!!y!E zguHGOUz{y?7%3Q`jMk#7Tmo=vCADeWwTzS>p?}vNWbUq{TcRvXgVT2?YMI9PKxf0! zQ?r2YKy)FzPV@;M`d8LCGw+toy-u2{7c}!H2;HGiU|OAYjb32b3F_4+GHp(JP;W^Z z2otNdn(w@s^th9Lgj*kn;RjpoPO9V5nf5SsaAxL|la_G;vo}l|Q0j8hUvp-DW5>;0 z7oGGpH&0mI0sfnp1Jiz!Qe!nE{kVh5TqD!#q>mcbF~d&!x#1&SFRI}5wU~{#;+q$H z2gC5Wv@G7uROiy8@u^IEF8v^Wlndkn`~%U2BL9j`$ODMUqg!T_F~7_6U6^5FbUelt zmiWF+Fq4@?+8lXrfMsF_q9EBrq(>t(aaIxOqpN1sGg~I;yR#hRfNx~h$Aob#p%-o& z#liQEv5DArhXs-ERD-?npHlhD?K&|Md{ZeO_PUTIjAMaTgk&OhhiSFR6T5W`(!U8L zy=piP(jNMmX)9kI=3lQ8H3J+G@Ze%po8xYd%77b3ykA`-QmW|Q{FEmDM)7hY`9e6l zr}*aLxl2o3a-y?**j1~ZkQnYtaovbmwWGzZ@?pLo>v`y${8kSI#$*j|ktLdd?lc{-l?E6fYdcY3S z_8n@*-zoK%U6R4O@H+D>JM!VG55=#pckFrz@pQXZj2HDoM!jK(H9*R-t*m`h4_J?F zx*~&ctezG$TtW-CIV+(_@Rq+>o9a@--6C=#y>M%^)50 zlB`ePgygR`y3P_L>V??<^JF_UfD>0?LEyUE?!EViL(X9l>BQ@JfAb-;5b?$!aw!$LK$oUo8>^V(! zjg|eDZ6wRm2$pqt+>R=ee5_8ToYA0?{_X#gmLh2&0v2MeZJaIU(V^6A_8C)j2HE$s z9_qCk?@k^ghc$;T%K)=Q=J4zyA{od0-~Hq{^vuC!e}KPA@VUrx%6yr_4uG;;R6}%7 z4FG*DO>ns*aF|TrTZ8uospJP%T@$L+o=ENXyCxkb^m6}{yOQYR(p!n~^Dt@EAIkTf z_js{v=9u*MXmsmJn4Zq?+?%TCUyXYoLweZg0qJ%{b&4FK9xj_!E5R4gR0%$;{23_$ zlmayhP&(Cu>M#E`zA&V>=p(i?{41k-Z8^(YCjPf;ZlCNLwOh2}Q|)o$iSnu6VsQQx=r2zJ#GSxcX=r{%HsSGq~I$~MK-9ssLJ?CY=FP&le&K3ib!`DH0~Z5uc8 zWhFbrvaK>W`cCeb-HwPok6yKBG;99TMcl}aRr}=%q4p6y7A|1f9tibdFZ5t9^k6T1 zpWF%Q;GmxlFK$RZa0dLmYKRXho(S$i*?g1yG|K6fbXQK!j|LaTLfQ6c_+~sBv|bio zkJZDKV|pkl;$V1?gMGg@!1{GDz+&`rvUPB6JPs-j>%cf84tBHAzDQ06ug{!|*FseI zGMA=lV=Hi4gLn)vgOb7oZl3_~GUBA*d$T-;joW9%Sft<@jzcLvU7