From e958b4bd7dc9738ba5b33933795c0fef1fb34d31 Mon Sep 17 00:00:00 2001 From: furrtek Date: Wed, 27 Jul 2016 21:26:03 +0200 Subject: [PATCH] Fixed LCR transmit and AFSK baseband module --- firmware/application/baseband_api.cpp | 15 ++ firmware/application/baseband_api.hpp | 3 + firmware/application/ui_lcr.cpp | 232 +++++++++--------- firmware/application/ui_lcr.hpp | 50 ++-- firmware/application/ui_rds.cpp | 10 +- firmware/application/ui_xylos.cpp | 39 ++- firmware/application/ui_xylos.hpp | 9 +- firmware/baseband/CMakeLists.txt | 6 +- .../{proc_fsk_lcr.cpp => proc_afsk.cpp} | 79 ++++-- .../{proc_fsk_lcr.hpp => proc_afsk.hpp} | 24 +- firmware/baseband/proc_rds.cpp | 3 +- firmware/baseband/proc_xylos.cpp | 51 ++-- firmware/baseband/proc_xylos.hpp | 52 ++-- firmware/common/message.hpp | 30 ++- firmware/common/portapack_shared_memory.hpp | 9 - firmware/common/sine_table_int8.hpp | 47 ++++ firmware/common/spi_image.hpp | 2 +- firmware/portapack-h1-firmware.bin | Bin 495712 -> 495408 bytes 18 files changed, 390 insertions(+), 271 deletions(-) rename firmware/baseband/{proc_fsk_lcr.cpp => proc_afsk.cpp} (52%) rename firmware/baseband/{proc_fsk_lcr.hpp => proc_afsk.hpp} (73%) create mode 100644 firmware/common/sine_table_int8.hpp diff --git a/firmware/application/baseband_api.cpp b/firmware/application/baseband_api.cpp index f6300779e..70a8235b2 100644 --- a/firmware/application/baseband_api.cpp +++ b/firmware/application/baseband_api.cpp @@ -85,6 +85,21 @@ void set_xylos_data(const char ccir_message[]) { send_message(&message); } +void set_afsk_data(const char message_data[], const uint32_t afsk_samples_per_bit, const uint32_t afsk_phase_inc_mark, + const uint32_t afsk_phase_inc_space, const uint8_t afsk_repeat, const uint32_t afsk_bw, + const bool afsk_alt_format) { + const AFSKConfigureMessage message { + message_data, + afsk_samples_per_bit, + afsk_phase_inc_mark, + afsk_phase_inc_space, + afsk_repeat, + afsk_bw, + afsk_alt_format + }; + send_message(&message); +} + static bool baseband_image_running = false; void run_image(const portapack::spi_flash::image_tag_t image_tag) { diff --git a/firmware/application/baseband_api.hpp b/firmware/application/baseband_api.hpp index a2bcea90f..5b04fae5d 100644 --- a/firmware/application/baseband_api.hpp +++ b/firmware/application/baseband_api.hpp @@ -53,6 +53,9 @@ struct WFMConfig { }; void set_xylos_data(const char ccir_message[]); +void set_afsk_data(const char message_data[], const uint32_t afsk_samples_per_bit, const uint32_t afsk_phase_inc_mark, + const uint32_t afsk_phase_inc_space, const uint8_t afsk_repeat, const uint32_t afsk_bw, + const bool afsk_alt_format); void run_image(const portapack::spi_flash::image_tag_t image_tag); void shutdown(); diff --git a/firmware/application/ui_lcr.cpp b/firmware/application/ui_lcr.cpp index 904e1fb2c..bff883674 100644 --- a/firmware/application/ui_lcr.cpp +++ b/firmware/application/ui_lcr.cpp @@ -32,7 +32,6 @@ #include "hackrf_gpio.hpp" #include "portapack.hpp" #include "event_m0.hpp" -#include "radio.hpp" #include "string_format.hpp" @@ -52,16 +51,19 @@ void LCRView::focus() { } LCRView::~LCRView() { - radio::disable(); + transmitter_model.disable(); + baseband::shutdown(); } -void LCRView::make_frame() { +void LCRView::generate_message() { + // Modem sync and SOM + const char lcr_init[8] = { 127, 127, 127, 127, 127, 127, 127, 15 }; + // Eclairage (Auto, Jour, Nuit) 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; + { 'N', 0x00 } }; + char eom[3] = { 3, 0, 0 }; // EOM and space for checksum + uint8_t i, pm, bit; uint16_t dp; uint8_t cp, pp, cur_byte, new_byte; @@ -74,63 +76,56 @@ void LCRView::make_frame() { } } - // Make LCR frame - memset(lcrframe, 0, 256); - lcrframe[0] = 127; // Modem sync - lcrframe[1] = 127; - lcrframe[2] = 127; - lcrframe[3] = 127; - lcrframe[4] = 127; - lcrframe[5] = 127; - lcrframe[6] = 127; - lcrframe[7] = 15; // SOM + // Compose LCR message + memset(lcr_message, 0, 256); + memcpy(lcr_message, lcr_init, 8); - strcat(lcrframe, rgsb); - strcat(lcrframe, "PA "); + strcat(lcr_message, rgsb); // Address + strcat(lcr_message, "PA "); if (checkbox_am_a.value() == true) { - strcat(lcrframe, "AM=1 AF=\""); - strcat(lcrframe, litteral[0]); - strcat(lcrframe, "\" CL=0 "); + strcat(lcr_message, "AM=1 AF=\""); + strcat(lcr_message, litteral[0]); + strcat(lcr_message, "\" CL=0 "); } if (checkbox_am_b.value() == true) { - strcat(lcrframe, "AM=2 AF=\""); - strcat(lcrframe, litteral[1]); - strcat(lcrframe, "\" CL=0 "); + strcat(lcr_message, "AM=2 AF=\""); + strcat(lcr_message, litteral[1]); + strcat(lcr_message, "\" CL=0 "); } if (checkbox_am_c.value() == true) { - strcat(lcrframe, "AM=3 AF=\""); - strcat(lcrframe, litteral[2]); - strcat(lcrframe, "\" CL=0 "); + strcat(lcr_message, "AM=3 AF=\""); + strcat(lcr_message, litteral[2]); + strcat(lcr_message, "\" CL=0 "); } if (checkbox_am_d.value() == true) { - strcat(lcrframe, "AM=4 AF=\""); - strcat(lcrframe, litteral[3]); - strcat(lcrframe, "\" CL=0 "); + strcat(lcr_message, "AM=4 AF=\""); + strcat(lcr_message, litteral[3]); + strcat(lcr_message, "\" CL=0 "); } if (checkbox_am_e.value() == true) { - strcat(lcrframe, "AM=5 AF=\""); - strcat(lcrframe, litteral[4]); - strcat(lcrframe, "\" CL=0 "); + strcat(lcr_message, "AM=5 AF=\""); + strcat(lcr_message, litteral[4]); + strcat(lcr_message, "\" CL=0 "); } - strcat(lcrframe, "EC="); - strcat(lcrframe, ec_lut[options_ec.selected_index()]); - strcat(lcrframe, " SAB=0"); + strcat(lcr_message, "EC="); + strcat(lcr_message, ec_lut[options_ec.selected_index()]); + strcat(lcr_message, " SAB=0"); - memcpy(lcrstring, lcrframe, 256); + memcpy(lcr_string, lcr_message, 256); // Checksum checksum = 0; i = 7; // Skip modem sync - while (lcrframe[i]) { - checksum ^= lcrframe[i]; + while (lcr_message[i]) { + checksum ^= lcr_message[i]; i++; } checksum ^= eom[0]; // EOM char - checksum &= 0x7F; + checksum &= 0x7F; // Trim eom[1] = checksum; - strcat(lcrframe, eom); + strcat(lcr_message, eom); //if (persistent_memory::afsk_config() & 2) pm = 0; // Even parity @@ -138,30 +133,31 @@ void LCRView::make_frame() { // pm = 1; // Odd parity if (!(persistent_memory::afsk_config() & 8)) { - // Clear format - for (dp = 0; dp < strlen(lcrframe); dp++) { + // Normal format + for (dp = 0; dp < strlen(lcr_message); dp++) { pp = pm; new_byte = 0; - cur_byte = lcrframe[dp]; + cur_byte = lcr_message[dp]; for (cp = 0; cp < 7; cp++) { - if ((cur_byte >> cp) & 1) pp++; - new_byte |= (((cur_byte >> cp) & 1) << (7 - cp)); + bit = (cur_byte >> cp) & 1; + pp += bit; + new_byte |= (bit << (7 - cp)); } - lcrframe_f[dp] = new_byte | (pp & 1); + lcr_message_data[dp] = new_byte | (pp & 1); } - lcrframe_f[dp] = 0; + lcr_message_data[dp] = 0; } else { // Alt format - for (dp = 0; dp < strlen(lcrframe); dp++) { + for (dp = 0; dp < strlen(lcr_message); dp++) { pp = pm; - cur_byte = alt_lookup[lcrframe[dp]]; + cur_byte = alt_lookup[(uint8_t)lcr_message[dp] & 0x7F]; 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; + lcr_message_data[dp * 2] = cur_byte; + lcr_message_data[(dp * 2) + 1] = pp & 1; } - lcrframe_f[dp * 2] = 0; + lcr_message_data[dp * 2] = 0; } //if (persistent_memory::afsk_config() & 1) { @@ -169,13 +165,13 @@ void LCRView::make_frame() { // See above /*} else { // MSB first - for (dp=0;dp>cp)&1) pp++; } - lcrframe_f[dp] = (cur_byte<<1)|(pp&1); + lcr_message_data[dp] = (cur_byte<<1)|(pp&1); } }*/ } @@ -206,14 +202,17 @@ void LCRView::paint(Painter& painter) { button_setrgsb.set_text(rgsb); - // Recap: tx freq @ bps / ALT + // Recap: freq @ bps / ALT 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); strcpy(finalstr, fstr.c_str()); strcat(finalstr, "@"); strcat(finalstr, bstr.c_str()); strcat(finalstr, "bps"); - if (portapack::persistent_memory::afsk_config() & 8) strcat(finalstr, " ALT"); + if (portapack::persistent_memory::afsk_config() & 8) + strcat(finalstr, " ALT"); + else + strcat(finalstr, " NRM"); text_recap.set(finalstr); } @@ -226,9 +225,8 @@ void LCRView::on_txdone(int n) { strcat(str, rgsb); text_status.set(str); progress.set_value(0); - radio::disable(); - txing = false; - scanning = false; + transmitter_model.disable(); + tx_mode = IDLE; abort_scan = false; button_scan.set_style(&style_val); button_scan.set_text("SCAN"); @@ -236,8 +234,8 @@ void LCRView::on_txdone(int n) { } if (n > 0) { - if (scanning) { - scan_progress += 0.555f; + if (tx_mode == SCAN) { + scan_progress += 0.555f; // 100/(37*5) progress.set_value(scan_progress); } else { text_status.set(" "); @@ -247,71 +245,52 @@ void LCRView::on_txdone(int n) { progress.set_value((6 - n) * 20); } } else { - if (scanning && (scan_index < 36)) { - radio::disable(); + if ((tx_mode == SCAN) && (scan_index < LCR_SCAN_COUNT)) { + transmitter_model.disable(); // Next address strcpy(rgsb, RGSB_list[scan_index]); - make_frame(); - - memset(shared_memory.radio_data, 0, 256); - memcpy(shared_memory.radio_data, lcrframe_f, 256); - shared_memory.afsk_transmit_done = false; - shared_memory.afsk_repeat = 5; + generate_message(); text_status.set(" "); strcpy(str, to_string_dec_int(scan_index).c_str()); - strcat(str, "/36"); + strcat(str, "/"); + strcat(str, to_string_dec_uint(LCR_SCAN_COUNT).c_str()); text_status.set(str); scan_progress += 0.694f; progress.set_value(scan_progress); scan_index++; - radio::disable(); + // start_tx ? } else { text_status.set("Ready "); progress.set_value(0); - radio::disable(); - txing = false; - scanning = false; + transmitter_model.disable(); + tx_mode = IDLE; button_scan.set_style(&style_val); button_scan.set_text("SCAN"); } } } -void LCRView::start_tx() { +void LCRView::start_tx(const bool scan) { char str[16]; + bool afsk_alt_format; - if (scanning) { + if (scan) { + tx_mode = SCAN; scan_index = 0; strcpy(rgsb, RGSB_list[0]); + } else { + tx_mode = SINGLE; } - make_frame(); - - lcr_radio_config.tuning_frequency = portapack::persistent_memory::tuned_frequency(); - - shared_memory.afsk_samples_per_bit = 228000 / portapack::persistent_memory::afsk_bitrate(); - shared_memory.afsk_phase_inc_mark = portapack::persistent_memory::afsk_mark_freq() * (0x40000 * 256) / 2280; - shared_memory.afsk_phase_inc_space = portapack::persistent_memory::afsk_space_freq() * (0x40000 * 256) / 2280; + generate_message(); - if (portapack::persistent_memory::afsk_config() & 8) - shared_memory.afsk_alt_format = true; - else - shared_memory.afsk_alt_format = false; - - shared_memory.afsk_fmmod = portapack::persistent_memory::afsk_bw() * 8; - - memset(shared_memory.radio_data, 0, 256); - memcpy(shared_memory.radio_data, lcrframe_f, 256); - - shared_memory.afsk_transmit_done = false; - shared_memory.afsk_repeat = 5; //(portapack::persistent_memory::afsk_config() >> 8) & 0xFF; - - if (scanning) { + if (tx_mode == SCAN) { text_status.set(" "); - strcat(str, "1/36"); + strcpy(str, "1/"); + strcat(str, to_string_dec_uint(LCR_SCAN_COUNT).c_str()); text_status.set(str); progress.set_value(1); scan_index++; @@ -321,19 +300,42 @@ void LCRView::start_tx() { text_status.set(str); progress.set_value(20); } + + if (portapack::persistent_memory::afsk_config() & 8) + afsk_alt_format = true; + else + afsk_alt_format = false; - txing = true; - radio::enable(lcr_radio_config); + transmitter_model.set_tuning_frequency(portapack::persistent_memory::tuned_frequency()); + transmitter_model.set_baseband_configuration({ + .mode = 0, + .sampling_rate = 2280000U, + .decimation_factor = 1, + }); + transmitter_model.set_rf_amp(true); + transmitter_model.set_lna(40); + transmitter_model.set_vga(40); + transmitter_model.set_baseband_bandwidth(1750000); + transmitter_model.enable(); + + baseband::set_afsk_data( + lcr_message_data, + 228000 / portapack::persistent_memory::afsk_bitrate(), + portapack::persistent_memory::afsk_mark_freq() * (0x40000 * 256) / 2280, + portapack::persistent_memory::afsk_space_freq() * (0x40000 * 256) / 2280, + 5, + portapack::persistent_memory::afsk_bw() * 115, // See proc_fsk_lcr.cpp + afsk_alt_format + ); } LCRView::LCRView(NavigationView& nav) { - baseband::run_image(portapack::spi_flash::image_tag_lcr); + baseband::run_image(portapack::spi_flash::image_tag_afsk); memset(litteral, 0, 5 * 8); memset(rgsb, 0, 5); strcpy(rgsb, RGSB_list[0]); - button_setrgsb.set_text(rgsb); add_children({ { &text_recap, @@ -358,7 +360,9 @@ LCRView::LCRView(NavigationView& nav) { &button_clear } }); - options_ec.set_selected_index(0); + button_setrgsb.set_text(rgsb); + + options_ec.set_selected_index(0); // Auto checkbox_am_a.set_value(true); checkbox_am_b.set_value(false); @@ -394,29 +398,27 @@ LCRView::LCRView(NavigationView& nav) { }; button_lcrdebug.on_select = [this,&nav](Button&) { - make_frame(); - nav.push(lcrstring, checksum); + generate_message(); + nav.push(lcr_string, checksum); }; button_transmit.on_select = [this](Button&) { - if (txing == false) start_tx(); + if (tx_mode == IDLE) start_tx(false); }; button_scan.on_select = [this](Button&) { - if (txing == false) { - scanning = true; + if (tx_mode == IDLE) { scan_progress = 0; button_scan.set_style(&style_cancel); button_scan.set_text("ABORT"); - start_tx(); + start_tx(true); } else { abort_scan = true; } }; button_clear.on_select = [this, &nav](Button&) { - if (txing == false) { - scanning = false; + if (tx_mode == IDLE) { memset(litteral, 0, 5 * 8); options_ec.set_selected_index(0); checkbox_am_a.set_value(true); @@ -425,7 +427,7 @@ LCRView::LCRView(NavigationView& nav) { checkbox_am_d.set_value(true); checkbox_am_e.set_value(true); set_dirty(); - start_tx(); + start_tx(false); } }; } diff --git a/firmware/application/ui_lcr.hpp b/firmware/application/ui_lcr.hpp index 8d455fa25..bcbed9ae3 100644 --- a/firmware/application/ui_lcr.hpp +++ b/firmware/application/ui_lcr.hpp @@ -36,43 +36,51 @@ namespace ui { +#define LCR_SCAN_COUNT 36 + class LCRView : public View { public: LCRView(NavigationView& nav); ~LCRView(); - std::string title() const override { return "LCR transmit"; }; void focus() override; void paint(Painter& painter) override; + + std::string title() const override { return "LCR transmit"; }; private: - bool txing = false; - bool scanning = false; + enum tx_modes { + IDLE = 0, + SINGLE, + SCAN + }; + + tx_modes tx_mode = IDLE; bool abort_scan = false; double scan_progress; - const char RGSB_list[37][5] = { + const char RGSB_list[LCR_SCAN_COUNT][5] = { + "AI10", "AI20", "AI30", "AI40", + "AI50", "AI60", "AI70", "AJ10", + "AJ20", "AJ30", "AJ40", "AJ50", + "AJ60", "AJ70", "AK10", "EAA0", "EAB0", "EAC0", "EAD0", "EbA0", "EbB0", "EbC0", "EbD0", "EbE0", "EbF0", "EbG0", "EbH0", "EbI0", "EbJ0", "EbK0", "EbL0", "EbM0", "EbN0", "EbO0", "EbP0", - "EbS0", "EAD0", "AI10", "AI20", - "AI30", "AI40", "AI50", "AI60", - "AI70", "AJ10", "AJ20", "AJ30", - "AJ40", "AJ50", "AJ60", "AJ70", - "AK10" + "EbS0" }; char litteral[5][8]; char rgsb[5]; - char lcrstring[256]; + char lcr_message[256]; + char lcr_string[256]; // For debugging, can remove + char lcr_message_data[256]; char checksum = 0; - char lcrframe[256]; - char lcrframe_f[256]; rf::Frequency f; int scan_index; - void make_frame(); - void start_tx(); + void generate_message(); + void start_tx(const bool scan); void on_txdone(int n); radio::Configuration lcr_radio_config = { @@ -89,7 +97,7 @@ private: // 2: 94 ? // 9: 85 ? - const char alt_lookup[256] = { + const char alt_lookup[128] = { 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 !"#$%&'()*+,-./ @@ -97,15 +105,7 @@ private: 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 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x7F // 70 pqrstuvwxyz{|}~ }; const Style style_val { @@ -125,7 +125,7 @@ private: }; OptionsField options_ec { - { 19 * 8, 6 }, + { 20 * 8, 6 }, 7, { { "EC:Auto", 0 }, diff --git a/firmware/application/ui_rds.cpp b/firmware/application/ui_rds.cpp index df98a1c97..2bdf52523 100644 --- a/firmware/application/ui_rds.cpp +++ b/firmware/application/ui_rds.cpp @@ -157,8 +157,9 @@ void RDSView::gen_PSN(const char * psname) { group[c][3] = makeblock(group[c][3], RDS_OFFSET_D); } - for (c = 0; c < 16; c++) - shared_memory.radio_data[c] = group[c >> 2][c & 3]; + // Todo + //for (c = 0; c < 16; c++) + // shared_memory.radio_data[c] = group[c >> 2][c & 3]; shared_memory.bit_length = 4 * 4 * 26; } @@ -197,8 +198,9 @@ void RDSView::gen_RadioText(const char * radiotext) { group[i + 3] = makeblock(group[i + 3], RDS_OFFSET_D); } - for (c = 0; c < (groups * 4); c++) - shared_memory.radio_data[c] = group[c]; + // Todo + //for (c = 0; c < (groups * 4); c++) + // shared_memory.radio_data[c] = group[c]; shared_memory.bit_length = groups * 4 * 26; } diff --git a/firmware/application/ui_xylos.cpp b/firmware/application/ui_xylos.cpp index 10634e1bf..705467e9e 100644 --- a/firmware/application/ui_xylos.cpp +++ b/firmware/application/ui_xylos.cpp @@ -31,7 +31,6 @@ #include "ff.h" #include "hackrf_gpio.hpp" #include "portapack.hpp" -#include "radio.hpp" #include "baseband_api.hpp" #include "hackrf_hal.hpp" @@ -118,7 +117,7 @@ void XylosView::focus() { } XylosView::~XylosView() { - receiver_model.disable(); + transmitter_model.disable(); baseband::shutdown(); } @@ -257,7 +256,7 @@ void XylosView::on_txdone(const int n) { start_tx(); } } else { - progress.set_value((n + 1) * 5); + progress.set_value(n * 5); } } } @@ -313,80 +312,80 @@ XylosView::XylosView(NavigationView& nav) { header_code_a.on_change = [this](int32_t v) { (void)v; - XylosView::generate_message(); + generate_message(); }; header_code_b.on_change = [this](int32_t v) { (void)v; - XylosView::generate_message(); + generate_message(); }; city_code.on_change = [this](int32_t v) { (void)v; - XylosView::generate_message(); + generate_message(); }; family_code.on_change = [this](int32_t v) { (void)v; - XylosView::generate_message(); + generate_message(); }; subfamily_code.on_change = [this](int32_t v) { (void)v; - XylosView::generate_message(); + generate_message(); }; receiver_code.on_change = [this](int32_t v) { (void)v; - XylosView::generate_message(); + generate_message(); }; subfamily_code.hidden(true); text_subfamily.set_style(&style_grey); checkbox_wcsubfamily.on_select = [this](Checkbox&) { if (checkbox_wcsubfamily.value() == true) { - subfamily_code.hidden(true); + receiver_code.set_focusable(false); text_subfamily.set_style(&style_grey); } else { - subfamily_code.hidden(false); + receiver_code.set_focusable(true); text_subfamily.set_style(&style()); } - XylosView::generate_message(); + generate_message(); }; receiver_code.hidden(true); text_receiver.set_style(&style_grey); checkbox_wcid.on_select = [this](Checkbox&) { if (checkbox_wcid.value() == true) { - receiver_code.hidden(true); + receiver_code.set_focusable(false); text_receiver.set_style(&style_grey); } else { - receiver_code.hidden(false); + receiver_code.set_focusable(true); text_receiver.set_style(&style()); } receiver_code.set_dirty(); - XylosView::generate_message(); + generate_message(); }; options_ra.on_change = [this](size_t n, OptionsField::value_t v) { (void)n; (void)v; - XylosView::generate_message(); + generate_message(); }; options_rb.on_change = [this](size_t n, OptionsField::value_t v) { (void)n; (void)v; - XylosView::generate_message(); + generate_message(); }; options_rc.on_change = [this](size_t n, OptionsField::value_t v) { (void)n; (void)v; - XylosView::generate_message(); + generate_message(); }; options_rd.on_change = [this](size_t n, OptionsField::value_t v) { (void)n; (void)v; - XylosView::generate_message(); + generate_message(); }; button_transmit.set_style(&style_val); - XylosView::generate_message(); + generate_message(); // Transmission and tones testing button_txtest.on_select = [this](Button&) { diff --git a/firmware/application/ui_xylos.hpp b/firmware/application/ui_xylos.hpp index 7ecf67c45..8cba3de28 100644 --- a/firmware/application/ui_xylos.hpp +++ b/firmware/application/ui_xylos.hpp @@ -145,9 +145,10 @@ class XylosView : public View { public: XylosView(NavigationView& nav); ~XylosView(); - std::string title() const override { return "Xylos transmit"; }; void focus() override; + + std::string title() const override { return "Xylos transmit"; }; private: enum tx_modes { @@ -158,7 +159,9 @@ private: }; tx_modes tx_mode = IDLE; + const rf::Frequency xylos_freqs[7] = { 31325000, 31387500, 31437500, 31475000, 31687500, 31975000, 88000000 }; + char ccir_message[21]; const char ccir_base[21] = "0000000000B0000B0000"; @@ -175,7 +178,7 @@ private: "0E03181AEAB10E0B0E0E" }; - int sequence_idx; + unsigned int sequence_idx; void ascii_to_ccir(char *ascii); void start_tx(); @@ -267,7 +270,7 @@ private: 2, { 0, 99 }, 1, - ' ' + '0' }; Checkbox checkbox_wcid { { 20 * 8, 6 * 16 }, diff --git a/firmware/baseband/CMakeLists.txt b/firmware/baseband/CMakeLists.txt index 118312382..7d571dbbb 100644 --- a/firmware/baseband/CMakeLists.txt +++ b/firmware/baseband/CMakeLists.txt @@ -340,12 +340,12 @@ set(MODE_CPPSRC ) DeclareTargets(PATX audio_tx) -### FSK LCR +### AFSK set(MODE_CPPSRC - proc_fsk_lcr.cpp + proc_afsk.cpp ) -DeclareTargets(PLCR lcr) +DeclareTargets(PAFS afsk) ### Epar diff --git a/firmware/baseband/proc_fsk_lcr.cpp b/firmware/baseband/proc_afsk.cpp similarity index 52% rename from firmware/baseband/proc_fsk_lcr.cpp rename to firmware/baseband/proc_afsk.cpp index 7ab5a8201..17a836d0c 100644 --- a/firmware/baseband/proc_fsk_lcr.cpp +++ b/firmware/baseband/proc_afsk.cpp @@ -1,5 +1,6 @@ /* * Copyright (C) 2014 Jared Boone, ShareBrained Technology, Inc. + * Copyright (C) 2016 Furrtek * * This file is part of PortaPack. * @@ -19,45 +20,49 @@ * Boston, MA 02110-1301, USA. */ -#include "proc_fsk_lcr.hpp" +#include "proc_afsk.hpp" #include "portapack_shared_memory.hpp" -#include "sine_table.hpp" +#include "sine_table_int8.hpp" #include "event_m4.hpp" #include -void LCRFSKProcessor::execute(const buffer_c8_t& buffer) { +void AFSKProcessor::execute(const buffer_c8_t& buffer) { + + // This is called at 2280000/2048 = 1113Hz + + if (!configured) return; for (size_t i = 0; i= 9) { + // Tone generation at 2280000/10 = 228kHz + if (s >= (10 - 1)) { s = 0; - if (sample_count >= shared_memory.afsk_samples_per_bit) { - 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 (sample_count >= afsk_samples_per_bit) { + if (configured == true) { + cur_byte = message_data[byte_pos]; + ext_byte = message_data[byte_pos + 1]; } if (!cur_byte) { - if (shared_memory.afsk_repeat) { - shared_memory.afsk_repeat--; + if (afsk_repeat) { + 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; + cur_byte = message_data[0]; + ext_byte = message_data[1]; + message.n = afsk_repeat; shared_memory.application_queue.push(message); } else { message.n = 0; - shared_memory.afsk_transmit_done = true; + configured = false; shared_memory.application_queue.push(message); cur_byte = 0; ext_byte = 0; } } - if (shared_memory.afsk_alt_format) { + if (afsk_alt_format) { // 0bbbbbbbbp // Start, 8-bit data, parity gbyte = 0; @@ -75,7 +80,7 @@ void LCRFSKProcessor::execute(const buffer_c8_t& buffer) { if (bit_pos == 9) { bit_pos = 0; - if (!shared_memory.afsk_alt_format) + if (!afsk_alt_format) byte_pos++; else byte_pos += 2; @@ -88,30 +93,52 @@ void LCRFSKProcessor::execute(const buffer_c8_t& buffer) { sample_count++; } if (cur_bit) - aphase += shared_memory.afsk_phase_inc_mark; + tone_phase += afsk_phase_inc_mark; else - aphase += shared_memory.afsk_phase_inc_space; + tone_phase += afsk_phase_inc_space; } else { s++; } - sample = (sine_table_f32[(aphase & 0x03FF0000)>>18]*255); + tone_sample = (sine_table_i8[(tone_phase & 0x03FC0000)>>18]); - //FM - frq = sample * shared_memory.afsk_fmmod; + // FM + // 1<<18 = 262144 + // m = (262144 * BW) / 2280000 (* 115, see ui_lcr afsk_bw setting) + frq = tone_sample * afsk_bw; phase = (phase + frq); - sphase = phase + (256<<16); + sphase = phase + (64<<18); - re = (sine_table_f32[(sphase & 0x03FF0000)>>18]*127); - im = (sine_table_f32[(phase & 0x03FF0000)>>18]*127); + re = (sine_table_i8[(sphase & 0x03FC0000)>>18]); + im = (sine_table_i8[(phase & 0x03FC0000)>>18]); buffer.p[i] = {(int8_t)re,(int8_t)im}; } } +void AFSKProcessor::on_message(const Message* const p) { + const auto message = *reinterpret_cast(p); + if (message.id == Message::ID::AFSKConfigure) { + memcpy(message_data, message.message_data, 256); + afsk_samples_per_bit = message.afsk_samples_per_bit; + afsk_phase_inc_mark = message.afsk_phase_inc_mark; + afsk_phase_inc_space = message.afsk_phase_inc_space; + afsk_repeat = message.afsk_repeat; + afsk_bw = message.afsk_bw; + afsk_alt_format = message.afsk_alt_format; + + bit_pos = 0; + byte_pos = 0; + cur_byte = 0; + ext_byte = 0; + cur_bit = 0; + configured = true; + } +} + int main() { - EventDispatcher event_dispatcher { std::make_unique() }; + EventDispatcher event_dispatcher { std::make_unique() }; event_dispatcher.run(); return 0; } diff --git a/firmware/baseband/proc_fsk_lcr.hpp b/firmware/baseband/proc_afsk.hpp similarity index 73% rename from firmware/baseband/proc_fsk_lcr.hpp rename to firmware/baseband/proc_afsk.hpp index bbcfca0bb..d198d8ba7 100644 --- a/firmware/baseband/proc_fsk_lcr.hpp +++ b/firmware/baseband/proc_afsk.hpp @@ -1,5 +1,6 @@ /* * Copyright (C) 2014 Jared Boone, ShareBrained Technology, Inc. + * Copyright (C) 2016 Furrtek * * This file is part of PortaPack. * @@ -19,19 +20,31 @@ * Boston, MA 02110-1301, USA. */ -#ifndef __PROC_FSK_LCR_H__ -#define __PROC_FSK_LCR_H__ +#ifndef __PROC_AFSK_H__ +#define __PROC_AFSK_H__ #include "baseband_processor.hpp" #include "baseband_thread.hpp" -class LCRFSKProcessor : public BasebandProcessor { +class AFSKProcessor : public BasebandProcessor { public: void execute(const buffer_c8_t& buffer) override; + + void on_message(const Message* const p) override; private: + bool configured = false; + BasebandThread baseband_thread { 2280000, this, NORMALPRIO + 20, baseband::Direction::Transmit }; + uint32_t afsk_samples_per_bit; + uint32_t afsk_phase_inc_mark; + uint32_t afsk_phase_inc_space; + uint8_t afsk_repeat; + uint32_t afsk_bw; + bool afsk_alt_format; + char message_data[256]; + int8_t re, im; uint8_t s; uint8_t bit_pos = 0, byte_pos = 0; @@ -40,8 +53,9 @@ private: uint16_t gbyte; uint8_t cur_bit = 0; uint32_t sample_count; - uint32_t aphase, phase, sphase; - int32_t sample, sig, frq; + uint32_t tone_phase, phase, sphase; + int32_t tone_sample, sig, frq; + TXDoneMessage message; }; diff --git a/firmware/baseband/proc_rds.cpp b/firmware/baseband/proc_rds.cpp index 01199f2ed..e06fe39f2 100644 --- a/firmware/baseband/proc_rds.cpp +++ b/firmware/baseband/proc_rds.cpp @@ -30,7 +30,8 @@ void RDSProcessor::execute(const buffer_c8_t& buffer) { uint32_t * rdsdata; - rdsdata = (uint32_t *)shared_memory.radio_data; + // TODO + //rdsdata = (uint32_t *)shared_memory.radio_data; for (size_t i = 0; i < buffer.count; i++) { diff --git a/firmware/baseband/proc_xylos.cpp b/firmware/baseband/proc_xylos.cpp index 29e8513c4..973441e49 100644 --- a/firmware/baseband/proc_xylos.cpp +++ b/firmware/baseband/proc_xylos.cpp @@ -26,7 +26,7 @@ #include "audio_output.hpp" #include "portapack_shared_memory.hpp" -#include "sine_table.hpp" +#include "sine_table_int8.hpp" #include "event_m4.hpp" #include @@ -35,18 +35,17 @@ void XylosProcessor::execute(const buffer_c8_t& buffer) { // This is called at 1536000/2048 = 750Hz - if( !configured ) { - return; - } + if (!configured) return; for (size_t i = 0; i= (2-1)) { + // Tone generation at 1536000/5 = 307.2kHz + if (s >= (5 - 1)) { s = 0; if (silence) { - if (sample_count >= SILENCE) { + // Just occupy channel with carrier + if (sample_count >= CCIR_SILENCE) { silence = false; sample_count = CCIR_TONELENGTH; } else { @@ -54,16 +53,14 @@ void XylosProcessor::execute(const buffer_c8_t& buffer) { } } else { if (sample_count >= CCIR_TONELENGTH) { - if (transmit_done == false) { - digit = xylosdata[byte_pos++]; - if ((digit == 0xFF) || (byte_pos >= 21)) { - message.n = 25; // End of message code - transmit_done = true; - shared_memory.application_queue.push(message); - } else { - message.n = byte_pos; // Inform UI about progress (just as eye candy) - shared_memory.application_queue.push(message); - } + digit = xylosdata[byte_pos++]; + if ((digit == 0xFF) || (byte_pos >= 21)) { + configured = false; + message.n = 25; // End of message code + shared_memory.application_queue.push(message); + } else { + message.n = byte_pos; // Inform UI about progress (just as eye candy) + shared_memory.application_queue.push(message); } sample_count = 0; @@ -71,7 +68,7 @@ void XylosProcessor::execute(const buffer_c8_t& buffer) { sample_count++; } - aphase += ccir_phases[digit]; + tone_phase += ccir_phases[digit]; } } else { s++; @@ -81,7 +78,7 @@ void XylosProcessor::execute(const buffer_c8_t& buffer) { re = 0; im = 0; } else { - sample = (sine_table_f32[(aphase & 0x03FC0000)>>18]*127); // 255 here before + tone_sample = (sine_table_i8[(tone_phase & 0x03FC0000)>>18]); // Audio preview sample generation: 1536000/48000 = 32 /*if (as >= 31) { @@ -90,15 +87,17 @@ void XylosProcessor::execute(const buffer_c8_t& buffer) { } else { as++; }*/ - - //FM - frq = sample * 800; // ? + + // FM + // 1<<18 = 262144 + // m = (262144 * BW) / 1536000 / 2 + frq = tone_sample * 853; // 10kHz BW phase = (phase + frq); - sphase = phase + (256<<16); + sphase = phase + (64<<18); - re = (sine_table_f32[(sphase & 0x03FC0000)>>18]*127); - im = (sine_table_f32[(phase & 0x03FC0000)>>18]*127); + re = (sine_table_i8[(sphase & 0x03FC0000)>>18]); + im = (sine_table_i8[(phase & 0x03FC0000)>>18]); } buffer.p[i] = {(int8_t)re,(int8_t)im}; @@ -115,7 +114,7 @@ void XylosProcessor::on_message(const Message* const p) { digit = 0; sample_count = CCIR_TONELENGTH; as = 0; - transmit_done = false; + silence = true; configured = true; } } diff --git a/firmware/baseband/proc_xylos.hpp b/firmware/baseband/proc_xylos.hpp index 761c01240..124ce9854 100644 --- a/firmware/baseband/proc_xylos.hpp +++ b/firmware/baseband/proc_xylos.hpp @@ -24,16 +24,13 @@ #define __PROC_XYLOS_H__ #include "baseband_processor.hpp" - -#include "dsp_decimate.hpp" -#include "dsp_demodulate.hpp" - -#include "audio_output.hpp" #include "baseband_thread.hpp" -#define CCIR_TONELENGTH (15360*5)-1 // 1536000/10/10 -#define PHASEV (436.91/5) // (65536*1024)/1536000*10 -#define SILENCE (46080*5)-1 // 400ms +//#include "audio_output.hpp" + +#define CCIR_TONELENGTH (15360*2)-1 // 1536000/10/10 +#define CCIR_PHASEINC (436.91/2) // (65536*1024)/1536000*10 +#define CCIR_SILENCE (122880)-1 // 400ms class XylosProcessor : public BasebandProcessor { public: @@ -43,27 +40,26 @@ public: private: bool configured = false; - bool transmit_done = false; BasebandThread baseband_thread { 1536000, this, NORMALPRIO + 20, baseband::Direction::Transmit }; - uint32_t ccir_phases[16] = { - (uint32_t)(1981*PHASEV), - (uint32_t)(1124*PHASEV), - (uint32_t)(1197*PHASEV), - (uint32_t)(1275*PHASEV), - (uint32_t)(1358*PHASEV), - (uint32_t)(1446*PHASEV), - (uint32_t)(1540*PHASEV), - (uint32_t)(1640*PHASEV), - (uint32_t)(1747*PHASEV), - (uint32_t)(1860*PHASEV), - (uint32_t)(2400*PHASEV), - (uint32_t)(930*PHASEV), - (uint32_t)(2247*PHASEV), - (uint32_t)(991*PHASEV), - (uint32_t)(2110*PHASEV), - (uint32_t)(1055*PHASEV) + const uint32_t ccir_phases[16] = { + (uint32_t)(1981*CCIR_PHASEINC), + (uint32_t)(1124*CCIR_PHASEINC), + (uint32_t)(1197*CCIR_PHASEINC), + (uint32_t)(1275*CCIR_PHASEINC), + (uint32_t)(1358*CCIR_PHASEINC), + (uint32_t)(1446*CCIR_PHASEINC), + (uint32_t)(1540*CCIR_PHASEINC), + (uint32_t)(1640*CCIR_PHASEINC), + (uint32_t)(1747*CCIR_PHASEINC), + (uint32_t)(1860*CCIR_PHASEINC), + (uint32_t)(2400*CCIR_PHASEINC), + (uint32_t)(930*CCIR_PHASEINC), + (uint32_t)(2247*CCIR_PHASEINC), + (uint32_t)(991*CCIR_PHASEINC), + (uint32_t)(2110*CCIR_PHASEINC), + (uint32_t)(1055*CCIR_PHASEINC) }; char xylosdata[21]; @@ -72,8 +68,8 @@ private: uint8_t byte_pos = 0; uint8_t digit = 0; uint32_t sample_count = CCIR_TONELENGTH; - uint32_t aphase, phase, sphase; - int32_t sample, frq; + uint32_t tone_phase, phase, sphase; + int32_t tone_sample, frq; bool silence = true; TXDoneMessage message; diff --git a/firmware/common/message.hpp b/firmware/common/message.hpp index a2643cd91..df1d1c9af 100644 --- a/firmware/common/message.hpp +++ b/firmware/common/message.hpp @@ -68,7 +68,7 @@ public: TXDone = 20, Retune = 21, XylosConfigure = 22, - AFSKData = 23, + AFSKConfigure = 23, ModuleID = 24, FIFOSignal = 25, FIFOData = 26, @@ -512,14 +512,34 @@ public: int64_t freq = 0; }; -class AFSKDataMessage : public Message { +class AFSKConfigureMessage : public Message { public: - constexpr AFSKDataMessage( - ) : Message { ID::AFSKData } + AFSKConfigureMessage( + const char data[], + const uint32_t afsk_samples_per_bit, + const uint32_t afsk_phase_inc_mark, + const uint32_t afsk_phase_inc_space, + const uint8_t afsk_repeat, + const uint32_t afsk_bw, + const bool afsk_alt_format + ) : Message { ID::AFSKConfigure }, + afsk_samples_per_bit(afsk_samples_per_bit), + afsk_phase_inc_mark(afsk_phase_inc_mark), + afsk_phase_inc_space(afsk_phase_inc_space), + afsk_repeat(afsk_repeat), + afsk_bw(afsk_bw), + afsk_alt_format(afsk_alt_format) { + memcpy(message_data, data, 256); } - int16_t data[128] = {0}; + uint32_t afsk_samples_per_bit; + uint32_t afsk_phase_inc_mark; + uint32_t afsk_phase_inc_space; + uint8_t afsk_repeat; + uint32_t afsk_bw; + bool afsk_alt_format; + char message_data[256]; }; class FIFOSignalMessage : public Message { diff --git a/firmware/common/portapack_shared_memory.hpp b/firmware/common/portapack_shared_memory.hpp index 2940688d4..45359aaa1 100644 --- a/firmware/common/portapack_shared_memory.hpp +++ b/firmware/common/portapack_shared_memory.hpp @@ -47,17 +47,8 @@ struct SharedMemory { char m4_panic_msg[32] { 0 }; - uint8_t radio_data[256]; size_t bit_length; - uint32_t afsk_samples_per_bit; - uint32_t afsk_phase_inc_mark; - uint32_t afsk_phase_inc_space; - uint8_t afsk_repeat; - uint32_t afsk_fmmod; - bool afsk_transmit_done; - bool afsk_alt_format; - JammerRange jammer_ranges[16]; char epardata[13]; diff --git a/firmware/common/sine_table_int8.hpp b/firmware/common/sine_table_int8.hpp new file mode 100644 index 000000000..828b6db5c --- /dev/null +++ b/firmware/common/sine_table_int8.hpp @@ -0,0 +1,47 @@ +/* + * 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. + */ + +#ifndef __SINE_TABLE_I8_H__ +#define __SINE_TABLE_I8_H__ + +#include + +static const int8_t sine_table_i8[256] = { + 0, 2, 5, 8, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, + 48, 51, 54, 57, 59, 62, 65, 67, 70, 73, 75, 78, 80, 83, 85, 87, + 90, 92, 94, 96, 98, 100, 102, 104, 105, 107, 109, 110, 112, 113, 115, 116, + 117, 118, 120, 121, 121, 122, 123, 124, 125, 125, 126, 126, 126, 127, 127, 127, + 127, 127, 127, 127, 126, 126, 126, 125, 125, 124, 123, 122, 121, 121, 120, 118, + 117, 116, 115, 113, 112, 110, 109, 107, 105, 104, 102, 100, 98, 96, 94, 92, + 90, 87, 85, 83, 80, 78, 75, 73, 70, 67, 65, 62, 59, 57, 54, 51, + 48, 45, 42, 39, 36, 33, 30, 27, 24, 21, 18, 15, 12, 8, 5, 2, + 0, -3, -6, -9, -13, -16, -19, -22, -25, -28, -31, -34, -37, -40, -43, -46, + -49, -52, -55, -58, -60, -63, -66, -68, -71, -74, -76, -79, -81, -84, -86, -88, + -91, -93, -95, -97, -99, -101, -103, -105, -106, -108, -110, -111, -113, -114, -116, -117, + -118, -119, -121, -122, -122, -123, -124, -125, -126, -126, -127, -127, -127, -128, -128, -128, + -128, -128, -128, -128, -127, -127, -127, -126, -126, -125, -124, -123, -122, -122, -121, -119, + -118, -117, -116, -114, -113, -111, -110, -108, -106, -105, -103, -101, -99, -97, -95, -93, + -91, -88, -86, -84, -81, -79, -76, -74, -71, -68, -66, -63, -60, -58, -55, -52, + -49, -46, -43, -40, -37, -34, -31, -28, -25, -22, -19, -16, -13, -9, -6, -3 +}; + +#endif/*__SINE_TABLE_I8_H__*/ diff --git a/firmware/common/spi_image.hpp b/firmware/common/spi_image.hpp index 0a95e282e..a6bf8eadc 100644 --- a/firmware/common/spi_image.hpp +++ b/firmware/common/spi_image.hpp @@ -73,7 +73,7 @@ constexpr image_tag_t image_tag_wideband_spectrum { 'P', 'S', 'P', 'E' }; constexpr image_tag_t image_tag_jammer { 'P', 'J', 'A', 'M' }; constexpr image_tag_t image_tag_audio_tx { 'P', 'A', 'T', 'X' }; -constexpr image_tag_t image_tag_lcr { 'P', 'L', 'C', 'R' }; +constexpr image_tag_t image_tag_afsk { 'P', 'A', 'F', 'S' }; constexpr image_tag_t image_tag_epar { 'P', 'E', 'P', 'R' }; constexpr image_tag_t image_tag_play_audio { 'P', 'P', 'A', 'U' }; constexpr image_tag_t image_tag_xylos { 'P', 'X', 'Y', 'L' }; diff --git a/firmware/portapack-h1-firmware.bin b/firmware/portapack-h1-firmware.bin index 335b0f0099fa06f61445a66cf9681425a63a1f57..e2157b8b0a0929546924a81bb200a3ea0ef12b7c 100644 GIT binary patch delta 54186 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%0DrqbJXG<~NLpXZa_zH+-! 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 G_x}L^tBI)q delta 53843 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