mirror of
https://github.com/eried/portapack-mayhem.git
synced 2024-12-24 06:49:24 -05:00
added delayed error message when hackrf cpld initialization fails (#1887)
* added delayed error message when hackrf cpld initialization fails * refactoring
This commit is contained in:
parent
1139b22141
commit
918ec0574f
@ -44,6 +44,8 @@ using namespace lpc43xx;
|
|||||||
|
|
||||||
#include "ui_navigation.hpp"
|
#include "ui_navigation.hpp"
|
||||||
|
|
||||||
|
static int delayed_error = 0;
|
||||||
|
|
||||||
extern "C" {
|
extern "C" {
|
||||||
|
|
||||||
CH_IRQ_HANDLER(M4Core_IRQHandler) {
|
CH_IRQ_HANDLER(M4Core_IRQHandler) {
|
||||||
@ -161,6 +163,10 @@ void EventDispatcher::dispatch(const eventmask_t events) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (events & EVT_MASK_RTC_TICK) {
|
if (events & EVT_MASK_RTC_TICK) {
|
||||||
|
// delay error message by 2 seconds to wait for LCD being ready
|
||||||
|
if (portapack::init_error != nullptr && ++delayed_error > 1)
|
||||||
|
draw_guru_meditation(CORTEX_M4, portapack::init_error);
|
||||||
|
|
||||||
handle_rtc_tick();
|
handle_rtc_tick();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -170,24 +170,31 @@ int main(void) {
|
|||||||
config_mode_set();
|
config_mode_set();
|
||||||
|
|
||||||
first_if.init(); /* To avoid initial short Ant_DC_Bias pulse ,we need quick set up GP01_RFF507X =1 */
|
first_if.init(); /* To avoid initial short Ant_DC_Bias pulse ,we need quick set up GP01_RFF507X =1 */
|
||||||
if (portapack::init()) {
|
|
||||||
portapack::display.init();
|
|
||||||
config_mode_clear();
|
|
||||||
|
|
||||||
// sdcStart(&SDCD1, nullptr); // Commented out as now happens in portapack.cpp
|
switch (portapack::init()) {
|
||||||
|
case portapack::init_status_t::INIT_HACKRF_CPLD_FAILED:
|
||||||
|
portapack::init_error = "HACKRF CPLD FAILED";
|
||||||
|
[[fallthrough]];
|
||||||
|
|
||||||
// controls_init(); // Commented out as now happens in portapack.cpp
|
case portapack::init_status_t::INIT_SUCCESS:
|
||||||
lcd_frame_sync_configure();
|
portapack::display.init();
|
||||||
rtc_interrupt_enable();
|
config_mode_clear();
|
||||||
|
|
||||||
event_loop();
|
lcd_frame_sync_configure();
|
||||||
|
rtc_interrupt_enable();
|
||||||
|
|
||||||
sdcDisconnect(&SDCD1);
|
event_loop();
|
||||||
sdcStop(&SDCD1);
|
|
||||||
|
|
||||||
portapack::shutdown();
|
sdcDisconnect(&SDCD1);
|
||||||
} else {
|
sdcStop(&SDCD1);
|
||||||
config_mode_clear();
|
|
||||||
|
portapack::shutdown();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case portapack::init_status_t::INIT_NO_PORTAPACK:
|
||||||
|
case portapack::init_status_t::INIT_PORTAPACK_CPLD_FAILED:
|
||||||
|
config_mode_clear();
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
m4_init(portapack::spi_flash::image_tag_hackrf, portapack::memory::map::m4_code_hackrf, true);
|
m4_init(portapack::spi_flash::image_tag_hackrf, portapack::memory::map::m4_code_hackrf, true);
|
||||||
|
@ -53,6 +53,8 @@ using asahi_kasei::ak4951::AK4951;
|
|||||||
|
|
||||||
namespace portapack {
|
namespace portapack {
|
||||||
|
|
||||||
|
const char* init_error = nullptr;
|
||||||
|
|
||||||
portapack::IO io{
|
portapack::IO io{
|
||||||
portapack::gpio_dir,
|
portapack::gpio_dir,
|
||||||
portapack::gpio_lcd_rdx,
|
portapack::gpio_lcd_rdx,
|
||||||
@ -389,7 +391,7 @@ static void shutdown_base() {
|
|||||||
* everything else = IRC
|
* everything else = IRC
|
||||||
*/
|
*/
|
||||||
|
|
||||||
bool init() {
|
init_status_t init() {
|
||||||
set_idivc_base_clocks(cgu::CLK_SEL::IDIVC);
|
set_idivc_base_clocks(cgu::CLK_SEL::IDIVC);
|
||||||
|
|
||||||
i2c0.start(i2c_config_boot_clock);
|
i2c0.start(i2c_config_boot_clock);
|
||||||
@ -481,7 +483,7 @@ bool init() {
|
|||||||
chThdSleepMilliseconds(10);
|
chThdSleepMilliseconds(10);
|
||||||
if (i2c0.transmit(0x12 /* ak4951 */, ak4951_init_command, 2, timeout) == false) {
|
if (i2c0.transmit(0x12 /* ak4951 */, ak4951_init_command, 2, timeout) == false) {
|
||||||
shutdown_base();
|
shutdown_base();
|
||||||
return false;
|
return init_status_t::INIT_NO_PORTAPACK;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -506,12 +508,14 @@ bool init() {
|
|||||||
// Mode center (autodetect), up (R1) and down (R2,H2,H2+) will go into hackrf mode after failing CPLD update
|
// Mode center (autodetect), up (R1) and down (R2,H2,H2+) will go into hackrf mode after failing CPLD update
|
||||||
if (load_config() != 3 /* left */ && load_config() != 4 /* right */) {
|
if (load_config() != 3 /* left */ && load_config() != 4 /* right */) {
|
||||||
shutdown_base();
|
shutdown_base();
|
||||||
return false;
|
return init_status_t::INIT_PORTAPACK_CPLD_FAILED;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
init_status_t return_code = init_status_t::INIT_SUCCESS;
|
||||||
|
|
||||||
if (!hackrf::cpld::load_sram()) {
|
if (!hackrf::cpld::load_sram()) {
|
||||||
chSysHalt();
|
return_code = init_status_t::INIT_HACKRF_CPLD_FAILED;
|
||||||
}
|
}
|
||||||
|
|
||||||
chThdSleepMilliseconds(10); // This delay seems to solve white noise audio issues
|
chThdSleepMilliseconds(10); // This delay seems to solve white noise audio issues
|
||||||
@ -523,7 +527,7 @@ bool init() {
|
|||||||
|
|
||||||
audio::init(portapack_audio_codec());
|
audio::init(portapack_audio_codec());
|
||||||
|
|
||||||
return true;
|
return return_code;
|
||||||
}
|
}
|
||||||
|
|
||||||
void shutdown(const bool leave_screen_on) {
|
void shutdown(const bool leave_screen_on) {
|
||||||
|
@ -41,6 +41,15 @@
|
|||||||
* guardrails on setting properties. */
|
* guardrails on setting properties. */
|
||||||
namespace portapack {
|
namespace portapack {
|
||||||
|
|
||||||
|
enum class init_status_t {
|
||||||
|
INIT_SUCCESS,
|
||||||
|
INIT_NO_PORTAPACK,
|
||||||
|
INIT_PORTAPACK_CPLD_FAILED,
|
||||||
|
INIT_HACKRF_CPLD_FAILED,
|
||||||
|
};
|
||||||
|
|
||||||
|
extern const char* init_error;
|
||||||
|
|
||||||
extern portapack::IO io;
|
extern portapack::IO io;
|
||||||
|
|
||||||
extern lcd::ILI9341 display;
|
extern lcd::ILI9341 display;
|
||||||
@ -65,7 +74,7 @@ extern TemperatureLogger temperature_logger;
|
|||||||
void set_antenna_bias(const bool v);
|
void set_antenna_bias(const bool v);
|
||||||
bool get_antenna_bias();
|
bool get_antenna_bias();
|
||||||
|
|
||||||
bool init();
|
init_status_t init();
|
||||||
void shutdown(const bool leave_screen_on = false);
|
void shutdown(const bool leave_screen_on = false);
|
||||||
|
|
||||||
void setEventDispatcherToUSBSerial(EventDispatcher* evt);
|
void setEventDispatcherToUSBSerial(EventDispatcher* evt);
|
||||||
|
Loading…
Reference in New Issue
Block a user