From fb21c1332e357ae1e11d7c2e3af76f676fd3bf41 Mon Sep 17 00:00:00 2001 From: furrtek Date: Wed, 11 May 2016 12:45:03 +0200 Subject: [PATCH] Started close call dev --- firmware/Makefile | 2 +- firmware/application/Makefile | 59 ++-- firmware/application/receiver_model.hpp | 1 + firmware/application/ui_audiotx.hpp | 2 +- firmware/application/ui_closecall.cpp | 323 ++++++++++++++++++++ firmware/application/ui_closecall.hpp | 102 +++++++ firmware/application/ui_loadmodule.cpp | 32 +- firmware/application/ui_loadmodule.hpp | 14 +- firmware/application/ui_navigation.cpp | 20 +- firmware/application/ui_sigfrx.cpp | 1 + firmware/application/ui_sigfrx.hpp | 1 + firmware/baseband-tx.bin | Bin 33280 -> 33280 bytes firmware/baseband-tx/Makefile | 2 +- firmware/baseband-tx/spectrum_collector.cpp | 130 -------- firmware/baseband-tx/spectrum_collector.hpp | 74 ----- firmware/baseband.bin | Bin 33280 -> 33280 bytes firmware/baseband/baseband_thread.cpp | 1 + firmware/common/modules.h | 4 +- firmware/portapack-h1-firmware.bin | Bin 459128 -> 463896 bytes firmware/tools/make_baseband_file.py | 2 +- sdcard/baseband-tx.bin | Bin 33280 -> 33280 bytes sdcard/baseband.bin | Bin 33280 -> 33280 bytes 22 files changed, 502 insertions(+), 268 deletions(-) create mode 100644 firmware/application/ui_closecall.cpp create mode 100644 firmware/application/ui_closecall.hpp delete mode 100644 firmware/baseband-tx/spectrum_collector.cpp delete mode 100644 firmware/baseband-tx/spectrum_collector.hpp diff --git a/firmware/Makefile b/firmware/Makefile index 0def504ce..5bce1a9fc 100644 --- a/firmware/Makefile +++ b/firmware/Makefile @@ -65,7 +65,7 @@ modules: $(TARGET_BASEBAND).bin $(TARGET_BASEBAND_TX).bin cp $(PATH_BASEBAND_TX).bin ../sdcard/$(PATH_BASEBAND_TX).bin $(TARGET).bin: modules $(MAKE_SPI_IMAGE) $(TARGET_BOOTSTRAP).bin $(TARGET_HACKRF_FIRMWARE).dfu $(TARGET_BASEBAND_TX)_inc.bin $(TARGET_APPLICATION).bin - $(MAKE_SPI_IMAGE) $(TARGET_BOOTSTRAP).bin $(TARGET_HACKRF_FIRMWARE).dfu $(TARGET_BASEBAND_TX)_inc.bin $(TARGET_APPLICATION).bin $(TARGET).bin + $(MAKE_SPI_IMAGE) $(TARGET_BOOTSTRAP).bin $(TARGET_HACKRF_FIRMWARE).dfu $(TARGET_BASEBAND)_inc.bin $(TARGET_APPLICATION).bin $(TARGET).bin $(TARGET_BOOTSTRAP).bin: $(TARGET_BOOTSTRAP).elf $(CP) -O binary $(TARGET_BOOTSTRAP).elf $(TARGET_BOOTSTRAP).bin diff --git a/firmware/application/Makefile b/firmware/application/Makefile index d62a6588b..cbbdabd58 100755 --- a/firmware/application/Makefile +++ b/firmware/application/Makefile @@ -150,39 +150,40 @@ CPPSRC = main.cpp \ audio.cpp \ lcd_ili9341.cpp \ ui.cpp \ - ui_alphanum.cpp \ - ui_handwrite.cpp \ ui_about.cpp \ - ui_text.cpp \ - ui_widget.cpp \ - ui_painter.cpp \ - ui_focus.cpp \ - ui_navigation.cpp \ - ui_menu.cpp \ - ui_rssi.cpp \ - ui_channel.cpp \ - ui_audio.cpp \ - ui_audiotx.cpp \ - ui_soundboard.cpp \ - ui_lcr.cpp \ - ui_rds.cpp \ - ui_jammer.cpp \ - ui_font_fixed_8x16.cpp \ - ui_setup.cpp \ - ui_debug.cpp \ - ui_baseband_stats_view.cpp \ - ui_sd_card_status_view.cpp \ - ui_sd_card_debug.cpp \ - ui_console.cpp \ - ui_receiver.cpp \ - ui_record_view.cpp \ - ui_spectrum.cpp \ - ui_loadmodule.cpp \ ui_afskrx.cpp \ ui_afsksetup.cpp \ - ui_sigfrx.cpp \ - ui_xylos.cpp \ + ui_audio.cpp \ + ui_audiotx.cpp \ + ui_alphanum.cpp \ + ui_baseband_stats_view.cpp \ + ui_channel.cpp \ + ui_closecall.cpp \ + ui_console.cpp \ + ui_debug.cpp \ + ui_focus.cpp \ + ui_font_fixed_8x16.cpp \ + ui_handwrite.cpp \ + ui_jammer.cpp \ + ui_lcr.cpp \ + ui_loadmodule.cpp \ + ui_menu.cpp \ + ui_navigation.cpp \ ui_numbers.cpp \ + ui_painter.cpp \ + ui_rds.cpp \ + ui_receiver.cpp \ + ui_record_view.cpp \ + ui_rssi.cpp \ + ui_sd_card_debug.cpp \ + ui_sd_card_status_view.cpp \ + ui_setup.cpp \ + ui_sigfrx.cpp \ + ui_soundboard.cpp \ + ui_spectrum.cpp \ + ui_text.cpp \ + ui_widget.cpp \ + ui_xylos.cpp \ recent_entries.cpp \ receiver_model.cpp \ transmitter_model.cpp \ diff --git a/firmware/application/receiver_model.hpp b/firmware/application/receiver_model.hpp index ad6647002..3448f3691 100644 --- a/firmware/application/receiver_model.hpp +++ b/firmware/application/receiver_model.hpp @@ -38,6 +38,7 @@ public: WidebandFMAudio = 2, SpectrumAnalysis = 4, Capture = 7, + CloseCall = 10, }; rf::Frequency tuning_frequency() const; diff --git a/firmware/application/ui_audiotx.hpp b/firmware/application/ui_audiotx.hpp index d9074cf5a..c4c41e7ad 100644 --- a/firmware/application/ui_audiotx.hpp +++ b/firmware/application/ui_audiotx.hpp @@ -34,7 +34,7 @@ #include "transmitter_model.hpp" namespace ui { - + class AudioTXView : public View { public: AudioTXView(NavigationView& nav); diff --git a/firmware/application/ui_closecall.cpp b/firmware/application/ui_closecall.cpp new file mode 100644 index 000000000..8343e541a --- /dev/null +++ b/firmware/application/ui_closecall.cpp @@ -0,0 +1,323 @@ +/* + * 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_closecall.hpp" +#include "ui_receiver.hpp" + +#include "ch.h" +#include "evtimer.h" + +#include "event_m0.hpp" +#include "ff.h" +#include "hackrf_gpio.hpp" +#include "portapack.hpp" +#include "radio.hpp" +#include "baseband_api.hpp" +#include "string_format.hpp" + +#include "hackrf_hal.hpp" + +#include +#include +#include + +using namespace portapack; + +namespace ui { + +void CloseCallView::focus() { + button_exit.focus(); +} + +CloseCallView::~CloseCallView() { + receiver_model.disable(); +} + +void CloseCallView::do_detection() { + uint8_t xmax = 0; + uint16_t imax = 0; + uint8_t threshold; + size_t i; + + portapack::display.fill_rectangle({last_pos, 60, 1, 9}, Color::black()); + + mean /= (236 * (slices_max + 1)); + + for (i = 0; i < (slices_max + 1); i++) { + threshold = slicemax_db[i]; + if (threshold >= 40) { + if (((uint8_t)(threshold - 40) > mean) && (threshold > xmax)) { + xmax = threshold; + imax = slicemax_idx[i] + (i * 236); + } + } + } + + // Lock / release + if ((imax >= last_channel - 2) && (imax <= last_channel + 2)) { + if (detect_counter == 8) { + if (imax != last_channel) { + char finalstr[24] = {0}; + + // 236 steps = 10MHz + // Resolution = 42.4kHz + auto fstr = to_string_dec_int((slice_start + (42373 * (imax - 118))) / 1000); + + strcat(finalstr, "Locked: "); + strcat(finalstr, fstr.c_str()); + text_infos.set(finalstr); + } + + locked = true; + release_counter = 0; + } else { + detect_counter++; + } + } else { + if (locked == true) { + if (release_counter == 8) { + detect_counter = 0; + locked = false; + text_infos.set("Lost "); + } else { + release_counter++; + } + } + } + + last_channel = imax; + + last_pos = (ui::Coord)(imax + 2); + portapack::display.fill_rectangle({last_pos, 60, 1, 9}, Color::red()); +} + +void CloseCallView::on_channel_spectrum(const ChannelSpectrum& spectrum) { + uint8_t xmax = 0; + uint16_t imax = 0; + uint8_t threshold; + size_t i; + + if (!wait) { + // Spectrum line (for debug) + std::array pixel_row; + for(i = 0; i < 118; i++) { + const auto pixel_color = spectrum_rgb3_lut[spectrum.db[256 - 120 + i]]; + pixel_row[i + 2] = pixel_color; + } + + for(i = 122; i < 240; i++) { + const auto pixel_color = spectrum_rgb3_lut[spectrum.db[i - 120]]; + pixel_row[i - 2] = pixel_color; + } + + display.draw_pixels( + { { 0, 64 + slices_counter * 4 }, { pixel_row.size(), 1 } }, + pixel_row + ); + + // Find max for this slice + for (i = 0; i < 118; i++) { + threshold = spectrum.db[256 - 120 + i]; + if (threshold > xmax) { + xmax = threshold; + imax = i; + } + } + for (i = 122; i < 240; i++) { + threshold = spectrum.db[i - 120]; + if (threshold > xmax) { + xmax = threshold; + imax = i - 4; + } + } + slicemax_db[slices_counter] = xmax; + slicemax_idx[slices_counter] = imax; + + // Add to mean + for (i = 136; i < 254; i++) + mean += spectrum.db[i]; + for (i = 2; i < 120; i++) + mean += spectrum.db[i]; + + // Slice update + if (slicing) { + if (slices_counter >= slices_max) { + do_detection(); + mean = 0; + slices_counter = 0; + } else { + slices_counter++; + } + slice_frequency = slice_start + (slices_counter * CC_SLICE_WIDTH); + receiver_model.set_tuning_frequency(slice_frequency); + wait = 1; + } else { + do_detection(); + } + } else { + wait--; + } +} + +void CloseCallView::on_show() { + EventDispatcher::message_map().register_handler(Message::ID::ChannelSpectrumConfig, + [this](const Message* const p) { + const auto message = *reinterpret_cast(p); + this->fifo = message.fifo; + } + ); + EventDispatcher::message_map().register_handler(Message::ID::DisplayFrameSync, + [this](const Message* const) { + if( this->fifo ) { + ChannelSpectrum channel_spectrum; + while( fifo->out(channel_spectrum) ) { + this->on_channel_spectrum(channel_spectrum); + } + } + } + ); + + baseband::spectrum_streaming_start(); +} + +void CloseCallView::on_hide() { + baseband::spectrum_streaming_stop(); + + EventDispatcher::message_map().unregister_handler(Message::ID::DisplayFrameSync); + EventDispatcher::message_map().unregister_handler(Message::ID::ChannelSpectrumConfig); +} + +void CloseCallView::on_range_changed() { + rf::Frequency f_min, f_max; + rf::Frequency slices_span; + int64_t offset; + + f_max = field_frequency_max.value(); + f_min = field_frequency_min.value(); + scan_span = abs(f_max - f_min); + if (scan_span > CC_SLICE_WIDTH) { + // ex: 100~115 (15): 102.5(97.5~107.5) -> 112.5(107.5~117.5) = 2.5 lost left and right + slices_max = (scan_span + CC_SLICE_WIDTH - 1) / CC_SLICE_WIDTH; + // = 2 + slices_span = slices_max * CC_SLICE_WIDTH; + // = 20000000 + offset = (slices_span - scan_span) / 2; + // = (20000000 - 15000000) / 2 = 5000000 / 2 = 2500000 + slice_start = std::min(f_min, f_max) + offset; + + slices_max--; + slicing = true; + } else { + slice_frequency = (f_max + f_min) / 2; + //offset = (CC_SLICE_WIDTH - scan_span) / 2; + //slice_start = std::min(f_min, f_max) - offset; + slice_start = slice_frequency; + receiver_model.set_tuning_frequency(slice_frequency); + slices_max = 0; + slices_counter = 0; + slicing = false; + } + + text_slice.set(to_string_dec_int(slices_max + 1)); + slices_counter = 0; +} + +CloseCallView::CloseCallView( + NavigationView& nav +) +{ + add_children({ { + &field_frequency_min, + &field_frequency_max, + &text_slice, + &text_infos, + &button_exit + } }); + + field_frequency_min.set_value(receiver_model.tuning_frequency() - 2000000); + field_frequency_min.set_step(200000); + field_frequency_min.on_change = [this](rf::Frequency f) { + (void) f; + this->on_range_changed(); + }; + field_frequency_min.on_edit = [this, &nav]() { + auto new_view = nav.push(receiver_model.tuning_frequency()); + new_view->on_changed = [this](rf::Frequency f) { + this->on_range_changed(); + this->field_frequency_min.set_value(f); + }; + }; + + field_frequency_max.set_value(receiver_model.tuning_frequency() + 2000000); + field_frequency_max.set_step(200000); + field_frequency_max.on_change = [this](rf::Frequency f) { + (void) f; + this->on_range_changed(); + }; + field_frequency_max.on_edit = [this, &nav]() { + auto new_view = nav.push(receiver_model.tuning_frequency()); + new_view->on_changed = [this](rf::Frequency f) { + this->on_range_changed(); + this->field_frequency_max.set_value(f); + }; + }; + + on_range_changed(); + + button_exit.on_select = [&nav](Button&){ + nav.pop(); + }; + + /*field_lna.set_value(receiver_model.lna()); + field_lna.on_change = [this](int32_t v) { + this->on_lna_changed(v); + }; + + field_lna.on_show_options = [this]() { + this->on_show_options_rf_gain(); + }; + + field_vga.set_value(receiver_model.vga()); + field_vga.on_change = [this](int32_t v_db) { + this->on_vga_changed(v_db); + }; + field_vga.on_show_options = [this]() { + this->on_show_options_rf_gain(); + };*/ + + //receiver_model.set_lna(0); + //receiver_model.set_vga(0); + + + //audio::output::mute(); + receiver_model.set_baseband_configuration({ + .mode = toUType(ReceiverModel::Mode::CloseCall), + .sampling_rate = CC_SLICE_WIDTH, + .decimation_factor = 1, + }); + receiver_model.set_baseband_bandwidth(CC_SLICE_WIDTH); + receiver_model.enable(); + //audio::output::unmute(); + +} + +} /* namespace ui */ diff --git a/firmware/application/ui_closecall.hpp b/firmware/application/ui_closecall.hpp new file mode 100644 index 000000000..ad90f578f --- /dev/null +++ b/firmware/application/ui_closecall.hpp @@ -0,0 +1,102 @@ +/* + * 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 "clock_manager.hpp" +#include "message.hpp" +#include "rf_path.hpp" +#include "volume.hpp" +#include "receiver_model.hpp"*/ + +#include "receiver_model.hpp" + +#include "spectrum_color_lut.hpp" + +#include "ui_receiver.hpp" +#include "ui_spectrum.hpp" +#include "ui_record_view.hpp" + +#include "ui_font_fixed_8x16.hpp" + +namespace ui { + +#define CC_SLICE_WIDTH 10000000 + +class CloseCallView : public View { +public: + CloseCallView(NavigationView& nav); + ~CloseCallView(); + + void on_show() override; + void on_hide() override; + void focus() override; + std::string title() const override { return "Close call"; }; + +private: + Coord last_pos = 0; + ChannelSpectrumFIFO* fifo { nullptr }; + uint8_t detect_counter = 0, release_counter = 0; + uint8_t wait = 2; + uint32_t mean = 0; + rf::Frequency slice_start; + rf::Frequency slice_frequency; + uint8_t slices_max; + uint8_t slices_counter; + uint16_t last_channel; + rf::Frequency scan_span; + uint8_t slicemax_db[32]; // Todo: Cap max slices ! + uint8_t slicemax_idx[32]; + bool ignore = true; + bool slicing; + bool locked = false; + void on_channel_spectrum(const ChannelSpectrum& spectrum); + void on_range_changed(); + void do_detection(); + + FrequencyField field_frequency_min { + { 1 * 8, 0 * 16 }, + }; + FrequencyField field_frequency_max { + { 12 * 8, 0 * 16 }, + }; + + Text text_slice { + { 23 * 8, 0 * 16, 2 * 8, 16 }, + "--" + }; + + Text text_infos { + { 1 * 8, 1 * 16, 18 * 8, 16 }, + "..." + }; + + Button button_exit { + { 92, 264, 56, 32 }, + "Exit" + }; +}; + +} /* namespace ui */ diff --git a/firmware/application/ui_loadmodule.cpp b/firmware/application/ui_loadmodule.cpp index c6525ed69..4d782fce2 100644 --- a/firmware/application/ui_loadmodule.cpp +++ b/firmware/application/ui_loadmodule.cpp @@ -38,6 +38,7 @@ #include "analog_audio_app.hpp" #include "ui_soundboard.hpp" #include "ui_debug.hpp" +#include "ui_closecall.hpp" #include "ui_audiotx.hpp" #include @@ -51,10 +52,6 @@ void LoadModuleView::focus() { button_ok.focus(); } -void LoadModuleView::paint(Painter& painter) { - (void)painter; -} - void LoadModuleView::on_hide() { EventDispatcher::message_map().unregister_handler(Message::ID::ReadyForSwitch); EventDispatcher::message_map().unregister_handler(Message::ID::ModuleID); @@ -152,12 +149,10 @@ void LoadModuleView::loadmodule() { LoadModuleView::LoadModuleView( NavigationView& nav, const char * hash, - uint8_t ViewID, - bool loadplz + ViewID viewid ) { - if (loadplz == false) nav.pop(); // Useless, remove ! - + add_children({ { &text_info, &text_infob, @@ -165,17 +160,18 @@ LoadModuleView::LoadModuleView( } }); _hash = hash; - - button_ok.on_select = [this, &nav, ViewID](Button&){ + + button_ok.on_select = [this, &nav, viewid](Button&){ + nav.pop(); if (_mod_loaded == true) { - if (ViewID == 0) nav.push(); //nav.push(); - if (ViewID == 1) nav.push(); - if (ViewID == 2) nav.push(); - if (ViewID == 3) nav.push(); - - if (ViewID == 10) nav.push(); - } else { - nav.pop(); + if (viewid == AudioTX) nav.push(); + if (viewid == Xylos) nav.push(); + if (viewid == LCR) nav.push(); + if (viewid == SoundBoard) nav.push(); + if (viewid == AnalogAudio) nav.push(); + if (viewid == RDS) nav.push(); + if (viewid == CloseCall) nav.push(); + if (viewid == Receiver) nav.push(); } }; } diff --git a/firmware/application/ui_loadmodule.hpp b/firmware/application/ui_loadmodule.hpp index fa7c05a8e..d2d35e998 100644 --- a/firmware/application/ui_loadmodule.hpp +++ b/firmware/application/ui_loadmodule.hpp @@ -30,15 +30,25 @@ namespace ui { +enum ViewID { + Receiver, + AudioTX, + CloseCall, + Xylos, + LCR, + SoundBoard, + AnalogAudio, + RDS, +}; + class LoadModuleView : public View { public: - LoadModuleView(NavigationView& nav, const char * hash, uint8_t ViewID, bool loadplz); + LoadModuleView(NavigationView& nav, const char * hash, ViewID viewid); void loadmodule(); void on_show() override; void on_hide() override; void focus() override; - void paint(Painter& painter) override; private: int load_image(void); diff --git a/firmware/application/ui_navigation.cpp b/firmware/application/ui_navigation.cpp index f0712098f..f4130c68b 100644 --- a/firmware/application/ui_navigation.cpp +++ b/firmware/application/ui_navigation.cpp @@ -173,7 +173,7 @@ TranspondersMenuView::TranspondersMenuView(NavigationView& nav) { ReceiverMenuView::ReceiverMenuView(NavigationView& nav) { add_items<2>({ { - { "Audio", ui::Color::white(), [&nav](){ nav.push(md5_baseband, 10, true); } }, + { "Audio", ui::Color::white(), [&nav](){ nav.push(); } }, { "Transponders", ui::Color::white(), [&nav](){ nav.push(); } }, } }); on_left = [&nav](){ nav.pop(); }; @@ -182,19 +182,21 @@ ReceiverMenuView::ReceiverMenuView(NavigationView& nav) { /* SystemMenuView ********************************************************/ SystemMenuView::SystemMenuView(NavigationView& nav) { - add_items<10>({ { + add_items<12>({ { { "Play dead", ui::Color::red(), [&nav](){ nav.push(false); } }, - { "Receiver RX", ui::Color::cyan(), [&nav](){ nav.push(); } }, - { "Soundboard TX", ui::Color::orange(), [&nav](){ nav.push(md5_baseband_tx, 3, true); } }, - { "Audio TX TX", ui::Color::yellow(), [&nav](){ nav.push(md5_baseband_tx, 0, true); } }, - { "Xylos TX", ui::Color::yellow(), [&nav](){ nav.push(md5_baseband_tx, 1, true); } }, - { "TEDI/LCR TX", ui::Color::yellow(), [&nav](){ nav.push(md5_baseband_tx, 2, true); } }, + { "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); } }, + { "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); } }, //{ "Capture", ui::Color::white(), [&nav](){ nav.push(); } }, //{ "Analyze", ui::Color::white(), [&nav](){ nav.push(); } }, { "Setup", ui::Color::white(), [&nav](){ nav.push(); } }, - { "About", ui::Color::white(), [&nav](){ nav.push(); } }, { "Debug", ui::Color::white(), [&nav](){ nav.push(); } }, { "HackRF", ui::Color::white(), [&nav](){ nav.push(); } }, + { "About", ui::Color::white(), [&nav](){ nav.push(); } } } }); //{ "Nordic/BTLE RX", ui::Color::cyan(), [&nav](){ nav.push(new NotImplementedView { nav }); } }, @@ -225,7 +227,7 @@ SystemView::SystemView( { set_style(&style_default); - char debugtxt[21]; // DEBUG + //char debugtxt[21]; // DEBUG constexpr ui::Dim status_view_height = 16; diff --git a/firmware/application/ui_sigfrx.cpp b/firmware/application/ui_sigfrx.cpp index bc6c5f6e3..8ad9cd1e1 100644 --- a/firmware/application/ui_sigfrx.cpp +++ b/firmware/application/ui_sigfrx.cpp @@ -1,5 +1,6 @@ /* * Copyright (C) 2015 Jared Boone, ShareBrained Technology, Inc. + * Copyright (C) 2016 Furrtek * * This file is part of PortaPack. * diff --git a/firmware/application/ui_sigfrx.hpp b/firmware/application/ui_sigfrx.hpp index 3b83ac07b..15cd734a4 100644 --- a/firmware/application/ui_sigfrx.hpp +++ b/firmware/application/ui_sigfrx.hpp @@ -1,5 +1,6 @@ /* * Copyright (C) 2015 Jared Boone, ShareBrained Technology, Inc. + * Copyright (C) 2016 Furrtek * * This file is part of PortaPack. * diff --git a/firmware/baseband-tx.bin b/firmware/baseband-tx.bin index eed6adfe12113baed29d2c0bf2d121e5a95bfc6b..7ee70f4d51b695a4832316e1467a6f36f0a44a21 100644 GIT binary patch delta 683 zcmZvaO=uHA6vy9eQcYF~u|n9a2~E?lm_|s9mU^hrxTJzuS`R8JZSf#`6hRR`Fozt3 z9;%%pVS^CF9)v=v8>yEz1VL#}(OyiviI_qz5y4%_X4bcBJ;i}}!@T*unfL!QnJkyd za!*9>uf+5+zc!+8PJX?gHLkC$MUMx4Z%+Xo+{VbXS#v6FYO&w+a%AS>Qb)mjM}cS;)b-o-a>L_r&@X%I zV*Ta>lyW}s7ElntqcZ>ukBD#n7W2eK6Ug?$7Gi~=P z&z4^zc|nHerMA^2QK-x(=^WGQZIWYJ(Oj=X$-2~fq=GK~8{Rk0G&H{%)D<4&B5fKE zpYUxM5zM_dLKs&uj&49nNYQ&?(X(tHDRxpwsV~A=5-1u~G`ossSJ7;4&+Hg>xNgu? z|A;tm0dWKna(NF+S5d$O9xoVlv41Z5zU9bsN)@ekG|9qF_fOTJv@_Q6BmV%OH6EJ) delta 680 zcmZo@VQOe$njj^R^Ox0U+TBx@KUatUlkzkZ-Kb?GD<%|)_)Oq-OO7$uJVXPm(~%Q53{MneX-i?kG{Hv5f#-%tOaJWD0R?cYDnm3${9 zT^MIeWH5aA{%`;1_y+uZP>e@4Nm_ zj?u_)ll{vGR?PL91E^RGL-A6u;-ddkegqk=f5x!?f+fhW_0BNgLwr8DOJ0U)%Ad_A zW^uaBl4{iZ{zzFq$0nmxN{!EThw2$SXy5{Cxc;~F`N7wG z%*>N-L+MG+3)~s@gJP1w4&k@W9GY8%xEK`}7!JxZFbFDaPBT_w;cEo)1A%xW5DQ9x U#aJ&YGcY{dEbDUF79%+V0If9~8~^|S diff --git a/firmware/baseband-tx/Makefile b/firmware/baseband-tx/Makefile index 48f288b78..cfe010f90 100755 --- a/firmware/baseband-tx/Makefile +++ b/firmware/baseband-tx/Makefile @@ -139,9 +139,9 @@ CPPSRC = main.cpp \ dsp_demodulate.cpp \ matched_filter.cpp \ proc_audiotx.cpp \ + proc_fsk_lcr.cpp \ proc_playaudio.cpp \ proc_xylos.cpp \ - proc_fsk_lcr.cpp \ dsp_squelch.cpp \ clock_recovery.cpp \ packet_builder.cpp \ diff --git a/firmware/baseband-tx/spectrum_collector.cpp b/firmware/baseband-tx/spectrum_collector.cpp deleted file mode 100644 index 0d288beee..000000000 --- a/firmware/baseband-tx/spectrum_collector.cpp +++ /dev/null @@ -1,130 +0,0 @@ -/* - * Copyright (C) 2015 Jared Boone, ShareBrained Technology, Inc. - * - * 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 "spectrum_collector.hpp" - -#include "dsp_fft.hpp" - -#include "utility.hpp" -#include "event_m4.hpp" -#include "portapack_shared_memory.hpp" - -#include "event_m4.hpp" - -#include - -void SpectrumCollector::on_message(const Message* const message) { - switch(message->id) { - case Message::ID::UpdateSpectrum: - update(); - break; - - case Message::ID::SpectrumStreamingConfig: - set_state(*reinterpret_cast(message)); - break; - - default: - break; - } -} - -void SpectrumCollector::set_state(const SpectrumStreamingConfigMessage& message) { - if( message.mode == SpectrumStreamingConfigMessage::Mode::Running ) { - start(); - } else { - stop(); - } -} - -void SpectrumCollector::start() { - streaming = true; - ChannelSpectrumConfigMessage message { &fifo }; - shared_memory.application_queue.push(message); -} - -void SpectrumCollector::stop() { - streaming = false; - fifo.reset_in(); -} - -void SpectrumCollector::set_decimation_factor( - const size_t decimation_factor -) { - channel_spectrum_decimator.set_factor(decimation_factor); -} - -/* TODO: Refactor to register task with idle thread? - * It's sad that the idle thread has to call all the way back here just to - * perform the deferred task on the buffer of data we prepared. - */ - -void SpectrumCollector::feed( - const buffer_c16_t& channel, - const uint32_t filter_pass_frequency, - const uint32_t filter_stop_frequency -) { - // Called from baseband processing thread. - channel_filter_pass_frequency = filter_pass_frequency; - channel_filter_stop_frequency = filter_stop_frequency; - - channel_spectrum_decimator.feed( - channel, - [this](const buffer_c16_t& data) { - this->post_message(data); - } - ); -} - -void SpectrumCollector::post_message(const buffer_c16_t& data) { - // Called from baseband processing thread. - if( streaming && !channel_spectrum_request_update ) { - fft_swap(data, channel_spectrum); - channel_spectrum_sampling_rate = data.sampling_rate; - channel_spectrum_request_update = true; - EventDispatcher::events_flag(EVT_MASK_SPECTRUM); - } -} - -void SpectrumCollector::update() { - // Called from idle thread (after EVT_MASK_SPECTRUM is flagged) - if( streaming && channel_spectrum_request_update ) { - /* Decimated buffer is full. Compute spectrum. */ - fft_c_preswapped(channel_spectrum); - - ChannelSpectrum spectrum; - spectrum.sampling_rate = channel_spectrum_sampling_rate; - spectrum.channel_filter_pass_frequency = channel_filter_pass_frequency; - spectrum.channel_filter_stop_frequency = channel_filter_stop_frequency; - for(size_t i=0; i -#include - -#include "message.hpp" - -class SpectrumCollector { -public: - constexpr SpectrumCollector( - ) : channel_spectrum_decimator { 1 }, - fifo { fifo_data, ChannelSpectrumConfigMessage::fifo_k } - { - } - - void on_message(const Message* const message); - - void set_decimation_factor(const size_t decimation_factor); - - void feed( - const buffer_c16_t& channel, - const uint32_t filter_pass_frequency, - const uint32_t filter_stop_frequency - ); - -private: - BlockDecimator channel_spectrum_decimator; - ChannelSpectrumFIFO fifo; - ChannelSpectrum fifo_data[1 << ChannelSpectrumConfigMessage::fifo_k]; - - volatile bool channel_spectrum_request_update { false }; - bool streaming { false }; - std::array, 256> channel_spectrum; - uint32_t channel_spectrum_sampling_rate { 0 }; - uint32_t channel_filter_pass_frequency { 0 }; - uint32_t channel_filter_stop_frequency { 0 }; - - void post_message(const buffer_c16_t& data); - - void set_state(const SpectrumStreamingConfigMessage& message); - void start(); - void stop(); - - void update(); -}; - -#endif/*__SPECTRUM_COLLECTOR_H__*/ diff --git a/firmware/baseband.bin b/firmware/baseband.bin index ec73e7d396d9584cc2c97661a80725b1aaf422fe..187b9c21d9f8e4ad51fb6788edb426fe617c95bd 100644 GIT binary patch delta 834 zcmZWoUr19?7(e&!9v^bidJw;5#4R_dCDecY+~0 z7^1J}b$apTn|Pg=UVO1~Xz==js&MX|jE+q?AU51NHJ66p(++BdDhH{+4SXPt8qy4D zQh_VhFZsRY=`)OXDhuGp_BnJ@9#H?G@ zWb#`zIr%v#B$HpGPbPtmN0G&Rj`E^DGnY|9HsN!DD>jkOEZ!A4KHyIJIa^~O6bjHU zbNb%0vj9X}0q7?Cs1Hh(4_#Po|x&RnX;3eNma>k{)p`X&}!fJ=?}m@^2Ql_!s{jB1 delta 858 zcmZXTZAep57{|}9=V~7mH>@yQdiUBE63!R0g7jM647EFaDHDS^bYxJ7_@PF&fwLM^ z3daybBPwDAVQGOM5)~#CB!%?BqEbsuBjdQX+x6~-on`jshv)p^oWt|{`2WvwdnmVu zYD-e?8)(QpHon*~KJ>!*{rK?6gKb?~Dr3wbaIbk{PK6VI2wp0>DIfKblBjin6&jT^ zz9m5pVz0z-arX!2a4R2tXQgqcM6`tFfCh3j9+Srk^TpWRz-Zx293KRB8b6WIRh?e_ zNFL!Q#Kb;QH%TE22L+STrlqk@Mz3{hD%gueT{iXjJxbSKqf%uwrcX;wklBDQiw)e# zfT3=yg>#fgn$DKRrqP&|5o1U)^TD@-L#0Vo-Md?0KmgTWScoA|G zUN5hv#|G+iX$(c8d61+><2@uiaexB*{Rr$3R8AO uU7s|fmXs4ofU!@5!Je!m~DQ0sJW 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 JW#&XxJ^^o1_=f-h diff --git a/firmware/tools/make_baseband_file.py b/firmware/tools/make_baseband_file.py index 50ac5031b..f0c96f1da 100755 --- a/firmware/tools/make_baseband_file.py +++ b/firmware/tools/make_baseband_file.py @@ -23,7 +23,7 @@ import struct import md5 usage_message = """ -Baseband processors modules package file generator +Baseband module package file generator Usage: ... """ diff --git a/sdcard/baseband-tx.bin b/sdcard/baseband-tx.bin index eed6adfe12113baed29d2c0bf2d121e5a95bfc6b..7ee70f4d51b695a4832316e1467a6f36f0a44a21 100644 GIT binary patch delta 683 zcmZvaO=uHA6vy9eQcYF~u|n9a2~E?lm_|s9mU^hrxTJzuS`R8JZSf#`6hRR`Fozt3 z9;%%pVS^CF9)v=v8>yEz1VL#}(OyiviI_qz5y4%_X4bcBJ;i}}!@T*unfL!QnJkyd za!*9>uf+5+zc!+8PJX?gHLkC$MUMx4Z%+Xo+{VbXS#v6FYO&w+a%AS>Qb)mjM}cS;)b-o-a>L_r&@X%I zV*Ta>lyW}s7ElntqcZ>ukBD#n7W2eK6Ug?$7Gi~=P z&z4^zc|nHerMA^2QK-x(=^WGQZIWYJ(Oj=X$-2~fq=GK~8{Rk0G&H{%)D<4&B5fKE zpYUxM5zM_dLKs&uj&49nNYQ&?(X(tHDRxpwsV~A=5-1u~G`ossSJ7;4&+Hg>xNgu? z|A;tm0dWKna(NF+S5d$O9xoVlv41Z5zU9bsN)@ekG|9qF_fOTJv@_Q6BmV%OH6EJ) delta 680 zcmZo@VQOe$njj^R^Ox0U+TBx@KUatUlkzkZ-Kb?GD<%|)_)Oq-OO7$uJVXPm(~%Q53{MneX-i?kG{Hv5f#-%tOaJWD0R?cYDnm3${9 zT^MIeWH5aA{%`;1_y+uZP>e@4Nm_ zj?u_)ll{vGR?PL91E^RGL-A6u;-ddkegqk=f5x!?f+fhW_0BNgLwr8DOJ0U)%Ad_A zW^uaBl4{iZ{zzFq$0nmxN{!EThw2$SXy5{Cxc;~F`N7wG z%*>N-L+MG+3)~s@gJP1w4&k@W9GY8%xEK`}7!JxZFbFDaPBT_w;cEo)1A%xW5DQ9x U#aJ&YGcY{dEbDUF79%+V0If9~8~^|S diff --git a/sdcard/baseband.bin b/sdcard/baseband.bin index ec73e7d396d9584cc2c97661a80725b1aaf422fe..187b9c21d9f8e4ad51fb6788edb426fe617c95bd 100644 GIT binary patch delta 834 zcmZWoUr19?7(e&!9v^bidJw;5#4R_dCDecY+~0 z7^1J}b$apTn|Pg=UVO1~Xz==js&MX|jE+q?AU51NHJ66p(++BdDhH{+4SXPt8qy4D zQh_VhFZsRY=`)OXDhuGp_BnJ@9#H?G@ zWb#`zIr%v#B$HpGPbPtmN0G&Rj`E^DGnY|9HsN!DD>jkOEZ!A4KHyIJIa^~O6bjHU zbNb%0vj9X}0q7?Cs1Hh(4_#Po|x&RnX;3eNma>k{)p`X&}!fJ=?}m@^2Ql_!s{jB1 delta 858 zcmZXTZAep57{|}9=V~7mH>@yQdiUBE63!R0g7jM647EFaDHDS^bYxJ7_@PF&fwLM^ z3daybBPwDAVQGOM5)~#CB!%?BqEbsuBjdQX+x6~-on`jshv)p^oWt|{`2WvwdnmVu zYD-e?8)(QpHon*~KJ>!*{rK?6gKb?~Dr3wbaIbk{PK6VI2wp0>DIfKblBjin6&jT^ zz9m5pVz0z-arX!2a4R2tXQgqcM6`tFfCh3j9+Srk^TpWRz-Zx293KRB8b6WIRh?e_ zNFL!Q#Kb;QH%TE22L+STrlqk@Mz3{hD%gueT{iXjJxbSKqf%uwrcX;wklBDQiw)e# zfT3=yg>#fgn$DKRrqP&|5o1U)^TD@-L#0Vo-Md?0KmgTWScoA|G zUN5hv#|G+iX$(c8d61+><2@uiaexB*{Rr$3R8AO uU7s|fmXs4ofU!@5!Je