diff --git a/firmware/application/CMakeLists.txt b/firmware/application/CMakeLists.txt index 1020ed309..7b8bfd15a 100644 --- a/firmware/application/CMakeLists.txt +++ b/firmware/application/CMakeLists.txt @@ -274,7 +274,6 @@ set(CPPSRC apps/ble_tx_app.cpp apps/capture_app.cpp apps/pocsag_app.cpp - apps/soundboard_app.cpp apps/ui_about_simple.cpp apps/ui_adsb_rx.cpp apps/ui_aprs_rx.cpp diff --git a/firmware/application/bitmap.hpp b/firmware/application/bitmap.hpp index f3e1767d2..f3759aa06 100644 --- a/firmware/application/bitmap.hpp +++ b/firmware/application/bitmap.hpp @@ -3689,44 +3689,6 @@ static constexpr Bitmap bitmap_icon_sonde{ {16, 16}, bitmap_icon_sonde_data}; -static constexpr uint8_t bitmap_icon_soundboard_data[] = { - 0xF0, - 0x0F, - 0x1C, - 0x18, - 0x17, - 0x38, - 0x15, - 0x78, - 0x15, - 0xF8, - 0x15, - 0x82, - 0x15, - 0x8B, - 0xD5, - 0x83, - 0xD5, - 0xBB, - 0xD5, - 0x83, - 0x15, - 0x8B, - 0x15, - 0x92, - 0x15, - 0xA0, - 0x17, - 0x80, - 0x1C, - 0x80, - 0xF0, - 0xFF, -}; -static constexpr Bitmap bitmap_icon_soundboard{ - {16, 16}, - bitmap_icon_soundboard_data}; - static constexpr uint8_t bitmap_icon_speaker_data[] = { 0x00, 0x00, diff --git a/firmware/application/external/external.cmake b/firmware/application/external/external.cmake index e821138ae..5ff006557 100644 --- a/firmware/application/external/external.cmake +++ b/firmware/application/external/external.cmake @@ -241,6 +241,10 @@ set(EXTCPPSRC #epirb_rx external/epirb_rx/main.cpp external/epirb_rx/ui_epirb_rx.cpp + + #soundboard + external/soundboard/main.cpp + external/soundboard/soundboard_app.cpp ) set(EXTAPPLIST @@ -302,4 +306,5 @@ set(EXTAPPLIST battleship ert epirb_rx + soundboard ) diff --git a/firmware/application/external/external.ld b/firmware/application/external/external.ld index 5aa64124e..fc2bad31d 100644 --- a/firmware/application/external/external.ld +++ b/firmware/application/external/external.ld @@ -81,6 +81,8 @@ MEMORY ram_external_app_battleship (rwx) : org = 0xADE80000, len = 32k ram_external_app_ert (rwx) : org = 0xADE90000, len = 32k ram_external_app_epirb_rx (rwx) : org = 0xADEA0000, len = 32k + ram_external_app_soundboard (rwx) : org = 0xADEB0000, len = 32k + } SECTIONS @@ -409,29 +411,35 @@ SECTIONS *(*ui*external_app*spaceinv*); } > ram_external_app_spaceinv - .external_app_blackjack : ALIGN(4) SUBALIGN(4) + .external_app_blackjack : ALIGN(4) SUBALIGN(4) { KEEP(*(.external_app.app_blackjack.application_information)); *(*ui*external_app*blackjack*); } > ram_external_app_blackjack - .external_app_battleship : ALIGN(4) SUBALIGN(4) + .external_app_battleship : ALIGN(4) SUBALIGN(4) { KEEP(*(.external_app.app_battleship.application_information)); *(*ui*external_app*battleship*); } > ram_external_app_battleship - .external_app_ert : ALIGN(4) SUBALIGN(4) + .external_app_ert : ALIGN(4) SUBALIGN(4) { KEEP(*(.external_app.app_ert.application_information)); *(*ui*external_app*ert*); } > ram_external_app_ert - .external_app_epirb_rx : ALIGN(4) SUBALIGN(4) + .external_app_epirb_rx : ALIGN(4) SUBALIGN(4) { KEEP(*(.external_app.app_epirb_rx.application_information)); *(*ui*external_app*epirb_rx*); } > ram_external_app_epirb_rx + .external_app_soundboard : ALIGN(4) SUBALIGN(4) + { + KEEP(*(.external_app.app_soundboard.application_information)); + *(*ui*external_app*soundboard*); + } > ram_external_app_soundboard + } diff --git a/firmware/application/external/shoppingcart_lock/main.cpp b/firmware/application/external/shoppingcart_lock/main.cpp index 300c4b217..e7f483a49 100644 --- a/firmware/application/external/shoppingcart_lock/main.cpp +++ b/firmware/application/external/shoppingcart_lock/main.cpp @@ -10,7 +10,7 @@ namespace ui::external_app::shoppingcart_lock { void initialize_app(NavigationView& nav) { - baseband::run_image(portapack::spi_flash::image_tag_audio_tx); + baseband::run_prepared_image(portapack::memory::map::m4_code.base()); nav.push(); } } // namespace ui::external_app::shoppingcart_lock diff --git a/firmware/application/external/soundboard/main.cpp b/firmware/application/external/soundboard/main.cpp new file mode 100644 index 000000000..f5fd39d20 --- /dev/null +++ b/firmware/application/external/soundboard/main.cpp @@ -0,0 +1,83 @@ +/* + * Copyright (C) 2023 Bernd Herzog + * + * 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 "soundboard_app.hpp" +#include "ui_navigation.hpp" +#include "external_app.hpp" + +namespace ui::external_app::soundboard { +void initialize_app(ui::NavigationView& nav) { + nav.push(); +} +} // namespace ui::external_app::soundboard + +extern "C" { + +__attribute__((section(".external_app.app_soundboard.application_information"), used)) application_information_t _application_information_soundboard = { + /*.memory_location = */ (uint8_t*)0x00000000, + /*.externalAppEntry = */ ui::external_app::soundboard::initialize_app, + /*.header_version = */ CURRENT_HEADER_VERSION, + /*.app_version = */ VERSION_MD5, + + /*.app_name = */ "Soundbrd", + /*.bitmap_data = */ { + 0xF0, + 0x0F, + 0x1C, + 0x18, + 0x17, + 0x38, + 0x15, + 0x78, + 0x15, + 0xF8, + 0x15, + 0x82, + 0x15, + 0x8B, + 0xD5, + 0x83, + 0xD5, + 0xBB, + 0xD5, + 0x83, + 0x15, + 0x8B, + 0x15, + 0x92, + 0x15, + 0xA0, + 0x17, + 0x80, + 0x1C, + 0x80, + 0xF0, + 0xFF, + }, + /*.icon_color = */ ui::Color::orange().v, + /*.menu_location = */ app_location_t::TX, + /*.desired_menu_position = */ -1, + + /*.m4_app_tag = portapack::spi_flash::image_tag_soundboard */ {'P', 'A', 'T', 'X'}, + /*.m4_app_offset = */ 0x00000000, // will be filled at compile time +}; +} diff --git a/firmware/application/apps/soundboard_app.cpp b/firmware/application/external/soundboard/soundboard_app.cpp similarity index 99% rename from firmware/application/apps/soundboard_app.cpp rename to firmware/application/external/soundboard/soundboard_app.cpp index e8159a4a0..22399b529 100644 --- a/firmware/application/apps/soundboard_app.cpp +++ b/firmware/application/external/soundboard/soundboard_app.cpp @@ -33,7 +33,7 @@ using namespace tonekey; using namespace portapack; -namespace ui { +namespace ui::external_app::soundboard { #define FILE_PER_PAGE 50 @@ -323,4 +323,4 @@ SoundBoardView::~SoundBoardView() { baseband::shutdown(); } -} // namespace ui +} // namespace ui::external_app::soundboard diff --git a/firmware/application/apps/soundboard_app.hpp b/firmware/application/external/soundboard/soundboard_app.hpp similarity index 98% rename from firmware/application/apps/soundboard_app.hpp rename to firmware/application/external/soundboard/soundboard_app.hpp index 72b9fd063..fd69c9f04 100644 --- a/firmware/application/apps/soundboard_app.hpp +++ b/firmware/application/external/soundboard/soundboard_app.hpp @@ -33,7 +33,7 @@ #include "app_settings.hpp" #include "radio_state.hpp" -namespace ui { +namespace ui::external_app::soundboard { class SoundBoardView : public View { public: @@ -178,6 +178,6 @@ class SoundBoardView : public View { }}; }; -} /* namespace ui */ +} /* namespace ui::external_app::soundboard */ #endif /*__UI_SOUNDBOARD_H__*/ diff --git a/firmware/application/external/wav_view/ui_view_wav.cpp b/firmware/application/external/wav_view/ui_view_wav.cpp index 1594c1d96..30a8b34f5 100644 --- a/firmware/application/external/wav_view/ui_view_wav.cpp +++ b/firmware/application/external/wav_view/ui_view_wav.cpp @@ -262,7 +262,7 @@ void ViewWavView::on_playback_progress(const uint32_t progress) { ViewWavView::ViewWavView( NavigationView& nav) : nav_(nav) { - baseband::run_image(portapack::spi_flash::image_tag_audio_tx); + baseband::run_prepared_image(portapack::memory::map::m4_code.base()); wav_reader = std::make_unique(); add_children({&labels, diff --git a/firmware/application/ui_navigation.cpp b/firmware/application/ui_navigation.cpp index f40db57ea..dfdabd7c6 100644 --- a/firmware/application/ui_navigation.cpp +++ b/firmware/application/ui_navigation.cpp @@ -71,7 +71,6 @@ #include "ble_tx_app.hpp" #include "capture_app.hpp" #include "pocsag_app.hpp" -#include "soundboard_app.hpp" #include "core_control.hpp" #include "file.hpp" @@ -142,7 +141,6 @@ const NavigationView::AppList NavigationView::appList = { {"ooktx", "OOK", TX, ui::Color::yellow(), &bitmap_icon_remote, new ViewFactory()}, {"pocsagtx", "POCSAG TX", TX, ui::Color::green(), &bitmap_icon_pocsag, new ViewFactory()}, {"rdstx", "RDS", TX, ui::Color::green(), &bitmap_icon_rds, new ViewFactory()}, - {"soundbrd", "Soundbrd", TX, ui::Color::green(), &bitmap_icon_soundboard, new ViewFactory()}, {"touchtune", "TouchTune", TX, ui::Color::green(), &bitmap_icon_touchtunes, new ViewFactory()}, {"signalgen", "SignalGen", TX, Color::green(), &bitmap_icon_cwgen, new ViewFactory()}, /* TRX ********************************************************************/ diff --git a/firmware/baseband/CMakeLists.txt b/firmware/baseband/CMakeLists.txt index 750a8f8f7..9ac499ebc 100644 --- a/firmware/baseband/CMakeLists.txt +++ b/firmware/baseband/CMakeLists.txt @@ -369,13 +369,6 @@ set(MODE_CPPSRC DeclareTargets(PAMA am_audio) -### Audio transmit - -set(MODE_CPPSRC - proc_audiotx.cpp -) -DeclareTargets(PATX audio_tx) - ### Capture set(MODE_CPPSRC @@ -690,6 +683,13 @@ set(MODE_CPPSRC ) DeclareTargets(PNOA noaaapt_rx) +### Audio transmit + +set(MODE_CPPSRC + proc_audiotx.cpp +) +DeclareTargets(PATX audio_tx) + ### HackRF "factory" firmware