From 7267de234d44a0ba26f584925a860b8e355d5b44 Mon Sep 17 00:00:00 2001 From: furrtek Date: Fri, 13 May 2016 09:34:15 +0200 Subject: [PATCH] Added EPAR transmit (slow FSK), bit bug for now --- firmware/application/Makefile | 1 + firmware/application/ui_epar.cpp | 207 ++++++++++++++++++++ firmware/application/ui_epar.hpp | 142 ++++++++++++++ firmware/application/ui_loadmodule.cpp | 2 + firmware/application/ui_loadmodule.hpp | 1 + firmware/application/ui_navigation.cpp | 3 +- firmware/application/ui_xylos.cpp | 8 +- firmware/application/ui_xylos.hpp | 1 - firmware/baseband-tx.bin | Bin 33280 -> 33280 bytes firmware/baseband-tx/Makefile | 1 + firmware/baseband-tx/baseband_thread.cpp | 2 + firmware/baseband-tx/proc_epar.cpp | 104 ++++++++++ firmware/baseband-tx/proc_epar.hpp | 70 +++++++ firmware/baseband-tx/proc_xylos.cpp | 8 +- firmware/common/modules.h | 2 +- firmware/common/portapack_shared_memory.hpp | 3 +- firmware/common/ui_widget.cpp | 4 + firmware/common/ui_widget.hpp | 1 + firmware/portapack-h1-firmware.bin | Bin 466088 -> 469352 bytes sdcard/baseband-tx.bin | Bin 33280 -> 33280 bytes 20 files changed, 548 insertions(+), 12 deletions(-) create mode 100644 firmware/application/ui_epar.cpp create mode 100644 firmware/application/ui_epar.hpp create mode 100644 firmware/baseband-tx/proc_epar.cpp create mode 100644 firmware/baseband-tx/proc_epar.hpp diff --git a/firmware/application/Makefile b/firmware/application/Makefile index cbbdabd5..0d2b97d4 100755 --- a/firmware/application/Makefile +++ b/firmware/application/Makefile @@ -161,6 +161,7 @@ CPPSRC = main.cpp \ ui_closecall.cpp \ ui_console.cpp \ ui_debug.cpp \ + ui_epar.cpp \ ui_focus.cpp \ ui_font_fixed_8x16.cpp \ ui_handwrite.cpp \ diff --git a/firmware/application/ui_epar.cpp b/firmware/application/ui_epar.cpp new file mode 100644 index 00000000..70ea8f8e --- /dev/null +++ b/firmware/application/ui_epar.cpp @@ -0,0 +1,207 @@ +/* + * 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_epar.hpp" + +#include "ch.h" +#include "hackrf_hal.hpp" + +#include "event_m0.hpp" +#include "ff.h" +#include "hackrf_gpio.hpp" +#include "portapack.hpp" +#include "radio.hpp" + +#include "hackrf_hal.hpp" +#include "portapack_shared_memory.hpp" +#include "portapack_persistent_memory.hpp" + +#include +#include + +using namespace portapack; + +namespace ui { + +void EPARView::focus() { + city_code.focus(); +} + +EPARView::~EPARView() { + transmitter_model.disable(); +} + +void EPARView::update_message() { + uint8_t c; + + // Start bit + epar_bits[0] = 1; + + // To binary + for (c = 0; c < 8; c++) + epar_bits[c + 1] = ((city_code.value() >> c) & 1); + + epar_bits[9] = options_group.selected_index_value() & 1; + epar_bits[10] = (options_group.selected_index_value() >> 1) & 1; + + if (checkbox_ra.value()) + epar_bits[11] = 1; // Bit 11 is relay 1 state + else + epar_bits[11] = 0; + + if (checkbox_rb.value()) + epar_bits[12] = 1; // Bit 12 is relay 2 state + else + epar_bits[12] = 0; + + // DEBUG + char debug_binary[14]; + for (c = 0; c < 13; c++) + debug_binary[c] = 0x30 + epar_bits[c]; + debug_binary[13] = 0; + + text_debug.set(debug_binary); +} + +void EPARView::journuit() { + chThdSleepMilliseconds(1000); + + // Invert relay states + checkbox_ra.set_value(~checkbox_ra.value()); + checkbox_rb.set_value(~checkbox_rb.value()); + + update_message(); + + shared_memory.transmit_done = false; + memcpy(shared_memory.epardata, epar_bits, 13); + transmitter_model.enable(); +} + +EPARView::EPARView( + NavigationView& nav +) +{ + static constexpr Style style_val { + .font = font::fixed_8x16, + .background = Color::green(), + .foreground = Color::black(), + }; + + static constexpr Style style_cancel { + .font = font::fixed_8x16, + .background = Color::red(), + .foreground = Color::black(), + }; + + transmitter_model.set_baseband_configuration({ + .mode = 4, + .sampling_rate = 1536000, + .decimation_factor = 1, + }); + + add_children({ { + &text_city, + &city_code, + &text_group, + &options_group, + &checkbox_ra, + &checkbox_rb, + &text_freq, + &options_freq, + &progressbar, + &text_debug, + &button_transmit, + &checkbox_cligno, + &button_exit + } }); + + city_code.set_value(220); + options_group.set_selected_index(3); // TP + options_freq.set_selected_index(6); // 5 ! DEBUG + + checkbox_ra.set_value(true); + checkbox_rb.set_value(true); + + city_code.on_change = [this](int32_t v) { + (void)v; + EPARView::update_message(); + }; + options_group.on_change = [this](size_t n, OptionsField::value_t v) { + (void)n; + (void)v; + EPARView::update_message(); + }; + checkbox_ra.on_select = [this](Checkbox&) { + EPARView::update_message(); + }; + checkbox_rb.on_select = [this](Checkbox&) { + EPARView::update_message(); + }; + + button_transmit.set_style(&style_val); + + EPARView::update_message(); + + button_transmit.on_select = [this](Button&) { + if (txing == false) { + update_message(); + + EventDispatcher::message_map().unregister_handler(Message::ID::TXDone); + + EventDispatcher::message_map().register_handler(Message::ID::TXDone, + [this](Message* const p) { + const auto message = static_cast(p); + if (message->n == 100) { + transmitter_model.disable(); + progressbar.set_value(0); + if (checkbox_cligno.value() == false) { + txing = false; + button_transmit.set_style(&style_val); + button_transmit.set_text("START"); + } else { + journuit(); + } + } else { + progressbar.set_value(message->n * 2); // 100/52 + } + } + ); + + shared_memory.transmit_done = false; + memcpy(shared_memory.epardata, epar_bits, 13); + + transmitter_model.set_tuning_frequency(epar_freqs[options_freq.selected_index()]); + + txing = true; + button_transmit.set_style(&style_cancel); + button_transmit.set_text("Wait"); + transmitter_model.enable(); + } + }; + + button_exit.on_select = [&nav](Button&){ + nav.pop(); + }; + +} + +} /* namespace ui */ diff --git a/firmware/application/ui_epar.hpp b/firmware/application/ui_epar.hpp new file mode 100644 index 00000000..d9d5762f --- /dev/null +++ b/firmware/application/ui_epar.hpp @@ -0,0 +1,142 @@ +/* + * 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" +#include "ui_font_fixed_8x16.hpp" +#include "clock_manager.hpp" +#include "message.hpp" +#include "rf_path.hpp" +#include "max2837.hpp" +#include "volume.hpp" +#include "transmitter_model.hpp" +#include "receiver_model.hpp" + +namespace ui { + +class EPARView : public View { +public: + EPARView(NavigationView& nav); + ~EPARView(); + std::string title() const override { return "EPAR transmit"; }; + void journuit(); + + void talk(); + void update_message(); + void focus() override; + +private: + bool txing = false; + const rf::Frequency epar_freqs[7] = { 31325000, 31387500, 31437500, 31475000, 31687500, 31975000, 88000000 }; + char epar_bits[13]; + + /* |012345678901234567890123456789| + * | Code ville: 000 | + * | Groupe: 00 | + * */ + + Text text_city { + { 6 * 8, 1 * 16, 11 * 8, 16 }, + "Code ville:" + }; + NumberField city_code { + { 18 * 8, 1 * 16 }, + 3, + { 0, 255 }, + 0, + ' ' + }; + + Text text_group { + { 10 * 8, 2 * 16, 7 * 8, 16 }, + "Groupe:" + }; + OptionsField options_group { + { 18 * 8, 2 * 16 }, + 4, + { + { "A ", 2 }, // See receiver PCB + { "B ", 1 }, + { "C ", 0 }, + { "TP", 3 } + } + }; + + Text text_freq { + { 5 * 8, 4 * 16, 10 * 8, 16 }, + "Frequence:" + }; + OptionsField options_freq { + { 16 * 8, 4 * 16}, + 7, + { + { "31.3250", 0 }, + { "31.3875", 1 }, + { "31.4375", 2 }, + { "31.4750", 3 }, + { "31.6875", 4 }, + { "31.9750", 5 }, + { "TEST 88", 6 } + } + }; + + Checkbox checkbox_ra { + { 7 * 8, 6 * 16 }, + 8, + "Relais 1" + }; + Checkbox checkbox_rb { + { 7 * 8, 8 * 16 }, + 8, + "Relais 2" + }; + + ProgressBar progressbar { + { 2 * 8, 12 * 16, 26 * 8, 20 }, + }; + + Text text_debug { + { 5 * 8, 14 * 16, 13 * 8, 16 }, + "-------------" + }; + + Button button_transmit { + { 2 * 8, 16 * 16, 64, 32 }, + "START" + }; + + Checkbox checkbox_cligno { + { 96, 16 * 16 + 4}, + 3, + "J/N" + }; + + Button button_exit { + { 21 * 8, 16 * 16, 64, 32 }, + "Exit" + }; +}; + +} /* namespace ui */ diff --git a/firmware/application/ui_loadmodule.cpp b/firmware/application/ui_loadmodule.cpp index 4d782fce..63eed8ef 100644 --- a/firmware/application/ui_loadmodule.cpp +++ b/firmware/application/ui_loadmodule.cpp @@ -34,6 +34,7 @@ #include "ui_rds.hpp" #include "ui_xylos.hpp" +#include "ui_epar.hpp" #include "ui_lcr.hpp" #include "analog_audio_app.hpp" #include "ui_soundboard.hpp" @@ -166,6 +167,7 @@ LoadModuleView::LoadModuleView( if (_mod_loaded == true) { if (viewid == AudioTX) nav.push(); if (viewid == Xylos) nav.push(); + if (viewid == EPAR) nav.push(); if (viewid == LCR) nav.push(); if (viewid == SoundBoard) nav.push(); if (viewid == AnalogAudio) nav.push(); diff --git a/firmware/application/ui_loadmodule.hpp b/firmware/application/ui_loadmodule.hpp index d2d35e99..e142d070 100644 --- a/firmware/application/ui_loadmodule.hpp +++ b/firmware/application/ui_loadmodule.hpp @@ -35,6 +35,7 @@ enum ViewID { AudioTX, CloseCall, Xylos, + EPAR, LCR, SoundBoard, AnalogAudio, diff --git a/firmware/application/ui_navigation.cpp b/firmware/application/ui_navigation.cpp index f4130c68..5ea4446b 100644 --- a/firmware/application/ui_navigation.cpp +++ b/firmware/application/ui_navigation.cpp @@ -187,7 +187,8 @@ SystemMenuView::SystemMenuView(NavigationView& nav) { { "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); } }, - { "Audio TX", ui::Color::yellow(), [&nav](){ nav.push(md5_baseband_tx, AudioTX); } }, + //{ "Audio TX", ui::Color::yellow(), [&nav](){ nav.push(md5_baseband_tx, AudioTX); } }, + { "EPAR TX", ui::Color::green(), [&nav](){ nav.push(md5_baseband_tx, EPAR); } }, { "Xylos TX", ui::Color::orange(), [&nav](){ nav.push(md5_baseband_tx, Xylos); } }, { "TEDI/LCR TX", ui::Color::orange(), [&nav](){ nav.push(md5_baseband_tx, LCR); } }, { "RDS TX", ui::Color::yellow(), [&nav](){ nav.push(md5_baseband_tx, RDS); } }, diff --git a/firmware/application/ui_xylos.cpp b/firmware/application/ui_xylos.cpp index f1c1d14a..deed06de 100644 --- a/firmware/application/ui_xylos.cpp +++ b/firmware/application/ui_xylos.cpp @@ -206,7 +206,7 @@ void XylosView::journuit() { upd_message(); audio::headphone::set_volume(volume_t::decibel(90 - 99) + audio::headphone::volume_range().max); - shared_memory.xylos_transmit_done = false; + shared_memory.transmit_done = false; memcpy(shared_memory.xylosdata, ccirmessage, 21); transmitter_model.enable(); } @@ -270,7 +270,7 @@ XylosView::XylosView( receiver_code.set_value(1); header_code_a.set_value(0); header_code_b.set_value(0); - options_freq.set_selected_index(6); // 5 ! DEBUG + options_freq.set_selected_index(5); checkbox_wcsubfamily.set_value(true); checkbox_wcid.set_value(true); @@ -352,7 +352,7 @@ XylosView::XylosView( ); memcpy(ccirmessage, ccirtest, 21); - shared_memory.xylos_transmit_done = false; + shared_memory.transmit_done = false; memcpy(shared_memory.xylosdata, ccirmessage, 21); transmitter_model.set_tuning_frequency(xylos_freqs[options_freq.selected_index()]); @@ -401,7 +401,7 @@ XylosView::XylosView( } ); - shared_memory.xylos_transmit_done = false; + shared_memory.transmit_done = false; memcpy(shared_memory.xylosdata, ccirmessage, 21); transmitter_model.set_tuning_frequency(xylos_freqs[options_freq.selected_index()]); diff --git a/firmware/application/ui_xylos.hpp b/firmware/application/ui_xylos.hpp index 0d8d79c6..96d88977 100644 --- a/firmware/application/ui_xylos.hpp +++ b/firmware/application/ui_xylos.hpp @@ -151,7 +151,6 @@ private: bool txing = false; const rf::Frequency xylos_freqs[7] = { 31325000, 31387500, 31437500, 31475000, 31687500, 31975000, 88000000 }; char ccirmessage[21]; - char ccir_received[21]; Text text_title { { 8, 8, 11, 16 }, diff --git a/firmware/baseband-tx.bin b/firmware/baseband-tx.bin index 002a8983c3ef4a0f7303d8ea2e3f90f7c955d662..b8c8e5b9be2e58288387be0b69675fe91fa97375 100644 GIT binary patch delta 2504 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 diff --git a/firmware/baseband-tx/Makefile b/firmware/baseband-tx/Makefile index cfe010f9..db9f9a07 100755 --- a/firmware/baseband-tx/Makefile +++ b/firmware/baseband-tx/Makefile @@ -140,6 +140,7 @@ CPPSRC = main.cpp \ matched_filter.cpp \ proc_audiotx.cpp \ proc_fsk_lcr.cpp \ + proc_epar.cpp \ proc_playaudio.cpp \ proc_xylos.cpp \ dsp_squelch.cpp \ diff --git a/firmware/baseband-tx/baseband_thread.cpp b/firmware/baseband-tx/baseband_thread.cpp index 51c62caf..eeb1fdea 100644 --- a/firmware/baseband-tx/baseband_thread.cpp +++ b/firmware/baseband-tx/baseband_thread.cpp @@ -31,6 +31,7 @@ #include "proc_playaudio.hpp" #include "proc_audiotx.hpp" #include "proc_xylos.hpp" +#include "proc_epar.hpp" #include "proc_fsk_lcr.hpp" #include "rssi.hpp" @@ -124,6 +125,7 @@ BasebandProcessor* BasebandThread::create_processor(const int32_t mode) { case 1: return new AudioTXProcessor(); case 2: return new XylosProcessor(); case 3: return new LCRFSKProcessor(); + case 4: return new EPARProcessor(); default: return nullptr; } } diff --git a/firmware/baseband-tx/proc_epar.cpp b/firmware/baseband-tx/proc_epar.cpp new file mode 100644 index 00000000..d186228f --- /dev/null +++ b/firmware/baseband-tx/proc_epar.cpp @@ -0,0 +1,104 @@ +/* + * 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 "proc_epar.hpp" + +#include "dsp_iir_config.hpp" +#include "audio_output.hpp" + +#include "portapack_shared_memory.hpp" +#include "sine_table.hpp" + +#include + +void EPARProcessor::execute(const buffer_c8_t& buffer) { + + // This is called at 1536000/2048 = 750Hz + + for (size_t i = 0; i= 9) { + s = 0; + + if (sample_count >= EPAR_TU) { + + if (state) { + // Send code + if (current_tu == 2) { + current_bit = shared_memory.epardata[bit_pos]; + if (bit_pos == 12) { + bit_pos = 0; + current_tu = 0; + state = 0; + } else { + bit_pos++; + } + + current_tu = 0; + } else { + current_tu++; + } + + sample = bitdef[current_bit][current_tu]; + } else { + // Pause + if (current_tu == EPAR_SPACE) { + if (repeat_count == EPAR_REPEAT) { + message.n = 100; // End of transmission code + shared_memory.transmit_done = true; + shared_memory.application_queue.push(message); + } + if (shared_memory.transmit_done == false) { + message.n = repeat_count; // Inform UI about progress (just as eye candy) + shared_memory.application_queue.push(message); + state = 1; + } + repeat_count++; + current_tu = 0; + } else { + current_tu++; + } + sample = 0; + } + + sample_count = 0; + } else { + sample_count++; + } + + } else { + s++; + } + + //FM + frq = sample * 1000; // ~25kHz wide + + phase = (phase + frq); + sphase = phase + (256<<16); + + re = (sine_table_f32[(sphase & 0x03FF0000)>>18]*127); + im = (sine_table_f32[(phase & 0x03FF0000)>>18]*127); + + buffer.p[i] = {(int8_t)re,(int8_t)im}; + } +} diff --git a/firmware/baseband-tx/proc_epar.hpp b/firmware/baseband-tx/proc_epar.hpp new file mode 100644 index 00000000..d1b060d0 --- /dev/null +++ b/firmware/baseband-tx/proc_epar.hpp @@ -0,0 +1,70 @@ +/* + * 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 __PROC_EPAR_H__ +#define __PROC_EPAR_H__ + +#include "baseband_processor.hpp" + +#include "dsp_decimate.hpp" +#include "dsp_demodulate.hpp" + +#include "audio_output.hpp" +#include "baseband_processor.hpp" + +// One bit is 0.005119048s (~200bps ?) +// Time unit is 0.001706349s (586Hz) + +#define EPAR_TU 262-1 // 1536000/10/586 +#define EPAR_SPACE 33-1 +#define EPAR_REPEAT 26*2 // DEBUG + +// 0: 011 +// 1: 001 + +// Good: 1001110111111 +// Bad: 1100111011111 + +class EPARProcessor : public BasebandProcessor { +public: + void execute(const buffer_c8_t& buffer) override; + +private: + const uint8_t bitdef[2][3] = { + {0, 255, 255}, + {0, 0, 255} + }; + int8_t re, im; + uint8_t s; + uint8_t state_length = 0; + uint8_t current_bit = 0; + uint8_t current_tu = 0; + uint8_t bit_pos = 0; + uint8_t repeat_count = 0; + uint32_t sample_count = 0; + uint32_t aphase, phase, sphase; + int32_t sample, frq; + uint8_t state = 1; + TXDoneMessage message; +}; + +#endif diff --git a/firmware/baseband-tx/proc_xylos.cpp b/firmware/baseband-tx/proc_xylos.cpp index 9caf1d19..8d6de4d9 100644 --- a/firmware/baseband-tx/proc_xylos.cpp +++ b/firmware/baseband-tx/proc_xylos.cpp @@ -43,7 +43,7 @@ void XylosProcessor::execute(const buffer_c8_t& buffer) { s = 0; if (sample_count >= CCIR_TONELENGTH) { - if (shared_memory.xylos_transmit_done == false) { + if (shared_memory.transmit_done == false) { message.n = byte_pos; // Inform UI about progress (just as eye candy) shared_memory.application_queue.push(message); digit = shared_memory.xylosdata[byte_pos++]; @@ -51,7 +51,7 @@ void XylosProcessor::execute(const buffer_c8_t& buffer) { if (digit == 0xFF) { message.n = 25; // End of message code - shared_memory.xylos_transmit_done = true; + shared_memory.transmit_done = true; shared_memory.application_queue.push(message); } @@ -60,7 +60,7 @@ void XylosProcessor::execute(const buffer_c8_t& buffer) { sample_count++; } - aphase += ccir_phases[digit]; // DEBUG + aphase += ccir_phases[digit]; } else { s++; } @@ -76,7 +76,7 @@ void XylosProcessor::execute(const buffer_c8_t& buffer) { }*/ //FM - frq = sample * 1000; // ~10kHz wide + frq = sample * 1000; // ~25kHz wide phase = (phase + frq); sphase = phase + (256<<16); diff --git a/firmware/common/modules.h b/firmware/common/modules.h index 3f5e744c..dfb335a0 100644 --- a/firmware/common/modules.h +++ b/firmware/common/modules.h @@ -1,2 +1,2 @@ const char md5_baseband[16] = {0x07,0xff,0xf6,0x7f,0x06,0x02,0xd1,0xd7,0x67,0x8f,0x67,0xdc,0xe8,0x36,0xa9,0xc0,}; -const char md5_baseband_tx[16] = {0xe9,0xeb,0x30,0xea,0x3f,0xf5,0xea,0x93,0xf9,0x62,0x1e,0x9c,0x5f,0x29,0xa7,0x95,}; +const char md5_baseband_tx[16] = {0xac,0xaf,0x2a,0x20,0x45,0x35,0x18,0x9c,0xdf,0x02,0x5c,0x2c,0x8f,0x76,0xd3,0xdc,}; diff --git a/firmware/common/portapack_shared_memory.hpp b/firmware/common/portapack_shared_memory.hpp index 8fbd689c..26492d7c 100644 --- a/firmware/common/portapack_shared_memory.hpp +++ b/firmware/common/portapack_shared_memory.hpp @@ -67,7 +67,8 @@ struct SharedMemory { JammerRange jammer_ranges[16]; char xylosdata[21]; - bool xylos_transmit_done; + char epardata[13]; + bool transmit_done; }; extern SharedMemory& shared_memory; diff --git a/firmware/common/ui_widget.cpp b/firmware/common/ui_widget.cpp index 77e36887..51d08d1e 100644 --- a/firmware/common/ui_widget.cpp +++ b/firmware/common/ui_widget.cpp @@ -729,6 +729,10 @@ size_t OptionsField::selected_index() const { return selected_index_; } +size_t OptionsField::selected_index_value() const { + return options[selected_index_].second; +} + void OptionsField::set_selected_index(const size_t new_index) { if( new_index < options.size() ) { if( new_index != selected_index() ) { diff --git a/firmware/common/ui_widget.hpp b/firmware/common/ui_widget.hpp index 42306d98..0ba7185d 100644 --- a/firmware/common/ui_widget.hpp +++ b/firmware/common/ui_widget.hpp @@ -322,6 +322,7 @@ public: void set_options(options_t new_options); size_t selected_index() const; + size_t selected_index_value() const; void set_selected_index(const size_t new_index); void set_by_value(value_t v); diff --git a/firmware/portapack-h1-firmware.bin b/firmware/portapack-h1-firmware.bin index f852f729261d5a64286cc42dbcb160c96c88e023..b3d7bdade480170e8958c604d776dcd3acda4012 100644 GIT binary patch delta 51542 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 diff --git a/sdcard/baseband-tx.bin b/sdcard/baseband-tx.bin index 002a8983c3ef4a0f7303d8ea2e3f90f7c955d662..b8c8e5b9be2e58288387be0b69675fe91fa97375 100644 GIT binary patch delta 2504 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