From 748e5a4f5f175b8525531d3c1d6d34349a87ff82 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Tue, 13 Jun 2017 22:16:00 -0700 Subject: [PATCH] Init: Boot to HackRF mode if PortaPack CPLD not found. Worst case, customers can always pull off the PortaPack to get back to a working HackRF. --- firmware/application/main.cpp | 21 ++++++++++---------- firmware/application/portapack.cpp | 31 ++++++++++++++++++------------ firmware/application/portapack.hpp | 2 +- 3 files changed, 31 insertions(+), 23 deletions(-) diff --git a/firmware/application/main.cpp b/firmware/application/main.cpp index f2a262c8c..9cd1b93ec 100755 --- a/firmware/application/main.cpp +++ b/firmware/application/main.cpp @@ -68,22 +68,23 @@ static void event_loop() { } int main(void) { - portapack::init(); + if( portapack::init() ) { + portapack::display.init(); - portapack::display.init(); + sdcStart(&SDCD1, nullptr); - sdcStart(&SDCD1, nullptr); + controls_init(); + lcd_frame_sync_configure(); + rtc_interrupt_enable(); - controls_init(); - lcd_frame_sync_configure(); - rtc_interrupt_enable(); + event_loop(); - event_loop(); + sdcDisconnect(&SDCD1); + sdcStop(&SDCD1); - sdcDisconnect(&SDCD1); - sdcStop(&SDCD1); + portapack::shutdown(); + } - portapack::shutdown(); m4_init(portapack::spi_flash::image_tag_hackrf, portapack::memory::map::m4_code_hackrf); m0_halt(); diff --git a/firmware/application/portapack.cpp b/firmware/application/portapack.cpp index 3802e5c37..a54e7ab95 100644 --- a/firmware/application/portapack.cpp +++ b/firmware/application/portapack.cpp @@ -148,7 +148,20 @@ static const portapack::cpld::Config& portapack_cpld_config() { ; } -void init() { +static void shutdown_base() { + clock_manager.shutdown(); + + power.shutdown(); + // TODO: Wait a bit for supplies to discharge? + + chSysDisable(); + + systick_stop(); + + hackrf::one::reset(); +} + +bool init() { for(const auto& pin : pins) { pin.init(); } @@ -190,7 +203,8 @@ void init() { clock_manager.run_at_full_speed(); if( !portapack::cpld::update_if_necessary(portapack_cpld_config()) ) { - chSysHalt(); + shutdown_base(); + return false; } if( !hackrf::cpld::load_sram() ) { @@ -210,6 +224,8 @@ void init() { LPC_CREG->DMAMUX = portapack::gpdma_mux; gpdma::controller.enable(); + + return true; } void shutdown() { @@ -222,16 +238,7 @@ void shutdown() { hackrf::cpld::init_from_eeprom(); - clock_manager.shutdown(); - - power.shutdown(); - // TODO: Wait a bit for supplies to discharge? - - chSysDisable(); - - systick_stop(); - - hackrf::one::reset(); + shutdown_base(); } extern "C" { diff --git a/firmware/application/portapack.hpp b/firmware/application/portapack.hpp index 004ab5e99..a00b16c00 100644 --- a/firmware/application/portapack.hpp +++ b/firmware/application/portapack.hpp @@ -49,7 +49,7 @@ extern ReceiverModel receiver_model; extern TemperatureLogger temperature_logger; -void init(); +bool init(); void shutdown(); } /* namespace portapack */