diff --git a/firmware/application/ais_app.cpp b/firmware/application/ais_app.cpp index f8e948789..47da4bbda 100644 --- a/firmware/application/ais_app.cpp +++ b/firmware/application/ais_app.cpp @@ -286,6 +286,8 @@ void AISRecentEntryDetailView::set_entry(const AISRecentEntry& entry) { } AISAppView::AISAppView(NavigationView&) { + baseband::run_image(portapack::spi_flash::baseband); + add_children({ { &label_channel, &options_channel, @@ -333,6 +335,8 @@ AISAppView::AISAppView(NavigationView&) { AISAppView::~AISAppView() { baseband::stop(); radio::disable(); + + baseband::shutdown(); } void AISAppView::focus() { diff --git a/firmware/application/analog_audio_app.cpp b/firmware/application/analog_audio_app.cpp index 4145d2c48..a7304aca7 100644 --- a/firmware/application/analog_audio_app.cpp +++ b/firmware/application/analog_audio_app.cpp @@ -21,6 +21,8 @@ #include "analog_audio_app.hpp" +#include "baseband_api.hpp" + #include "portapack.hpp" #include "portapack_persistent_memory.hpp" using namespace portapack; @@ -77,6 +79,8 @@ NBFMOptionsView::NBFMOptionsView( AnalogAudioView::AnalogAudioView( NavigationView& nav ) { + baseband::run_image(portapack::spi_flash::baseband); + add_children({ { &rssi, &channel, @@ -145,6 +149,8 @@ AnalogAudioView::~AnalogAudioView() { audio::output::stop(); receiver_model.disable(); + + baseband::shutdown(); } void AnalogAudioView::on_hide() { diff --git a/firmware/application/baseband_api.cpp b/firmware/application/baseband_api.cpp index e3acad311..391b8f1f7 100644 --- a/firmware/application/baseband_api.cpp +++ b/firmware/application/baseband_api.cpp @@ -26,6 +26,8 @@ #include "portapack_shared_memory.hpp" +#include "core_control.hpp" + namespace baseband { void AMConfig::apply() const { @@ -81,6 +83,10 @@ void stop() { ); } +void run_image(const portapack::spi_flash::region_t image_region) { + m4_init(image_region, portapack::memory::map::m4_code); +} + void shutdown() { ShutdownMessage shutdown_message; shared_memory.baseband_queue.push(shutdown_message); diff --git a/firmware/application/baseband_api.hpp b/firmware/application/baseband_api.hpp index b029e2ece..f909b1a63 100644 --- a/firmware/application/baseband_api.hpp +++ b/firmware/application/baseband_api.hpp @@ -26,6 +26,8 @@ #include "dsp_fir_taps.hpp" +#include "spi_image.hpp" + #include namespace baseband { @@ -53,6 +55,7 @@ struct WFMConfig { void start(BasebandConfiguration configuration); void stop(); +void run_image(const portapack::spi_flash::region_t image_region); void shutdown(); void spectrum_streaming_start(); diff --git a/firmware/application/capture_app.cpp b/firmware/application/capture_app.cpp index 772cb2a8d..58af2526a 100644 --- a/firmware/application/capture_app.cpp +++ b/firmware/application/capture_app.cpp @@ -32,6 +32,8 @@ using namespace portapack; namespace ui { CaptureAppView::CaptureAppView(NavigationView& nav) { + baseband::run_image(portapack::spi_flash::baseband); + add_children({ { &rssi, &channel, @@ -83,6 +85,8 @@ CaptureAppView::CaptureAppView(NavigationView& nav) { CaptureAppView::~CaptureAppView() { baseband::stop(); radio::disable(); + + baseband::shutdown(); } void CaptureAppView::on_hide() { diff --git a/firmware/application/ert_app.cpp b/firmware/application/ert_app.cpp index 61501b473..467dbbc24 100644 --- a/firmware/application/ert_app.cpp +++ b/firmware/application/ert_app.cpp @@ -121,6 +121,8 @@ void RecentEntriesView::draw( } ERTAppView::ERTAppView(NavigationView&) { + baseband::run_image(portapack::spi_flash::baseband); + add_children({ { &recent_entries_view, } }); @@ -149,6 +151,8 @@ ERTAppView::ERTAppView(NavigationView&) { ERTAppView::~ERTAppView() { baseband::stop(); radio::disable(); + + baseband::shutdown(); } void ERTAppView::focus() { diff --git a/firmware/application/main.cpp b/firmware/application/main.cpp index 0475073c5..5e52ee7e0 100755 --- a/firmware/application/main.cpp +++ b/firmware/application/main.cpp @@ -59,13 +59,6 @@ static void event_loop() { }; EventDispatcher event_dispatcher { &system_view, context }; - - MessageHandlerRegistration message_handler_shutdown { - Message::ID::Shutdown, - [&event_dispatcher](const Message* const) { - event_dispatcher.request_stop(); - } - }; MessageHandlerRegistration message_handler_display_sleep { Message::ID::DisplaySleep, [&event_dispatcher](const Message* const) { @@ -88,8 +81,6 @@ int main(void) { sdcStart(&SDCD1, nullptr); - m4_init(portapack::spi_flash::baseband, portapack::memory::map::m4_code); - controls_init(); lcd_frame_sync_configure(); rtc_interrupt_enable(); diff --git a/firmware/application/tpms_app.cpp b/firmware/application/tpms_app.cpp index 19d84f4ac..f46b1549f 100644 --- a/firmware/application/tpms_app.cpp +++ b/firmware/application/tpms_app.cpp @@ -164,6 +164,8 @@ void RecentEntriesView::draw( } TPMSAppView::TPMSAppView(NavigationView&) { + baseband::run_image(portapack::spi_flash::baseband); + add_children({ { &rssi, &channel, @@ -205,6 +207,8 @@ TPMSAppView::TPMSAppView(NavigationView&) { TPMSAppView::~TPMSAppView() { baseband::stop(); radio::disable(); + + baseband::shutdown(); } void TPMSAppView::focus() {