From d2e9a8dc064f8e54df64a7ff6c469dbacf0713dd Mon Sep 17 00:00:00 2001 From: Bernd Herzog Date: Tue, 14 Nov 2023 12:22:26 +0100 Subject: [PATCH] Hackrf mode when no pp attached (#1580) * added portapack presence detection * adjusted timeout * fixed ak4951 initialisation --- firmware/application/main.cpp | 2 ++ firmware/application/portapack.cpp | 14 ++++++++++++++ 2 files changed, 16 insertions(+) diff --git a/firmware/application/main.cpp b/firmware/application/main.cpp index eaad76cb3..28d9fd21f 100755 --- a/firmware/application/main.cpp +++ b/firmware/application/main.cpp @@ -186,6 +186,8 @@ int main(void) { sdcStop(&SDCD1); portapack::shutdown(); + } else { + config_mode_clear(); } m4_init(portapack::spi_flash::image_tag_hackrf, portapack::memory::map::m4_code_hackrf, true); diff --git a/firmware/application/portapack.cpp b/firmware/application/portapack.cpp index 86c4c4863..f9033a3d7 100644 --- a/firmware/application/portapack.cpp +++ b/firmware/application/portapack.cpp @@ -467,6 +467,20 @@ bool init() { i2c0.start(i2c_config_fast_clock); chThdSleepMilliseconds(10); + /* Check if portapack is attached by checking if any of the two audio chips is present. */ + systime_t timeout = 50; + uint8_t wm8731_reset_command[] = {0x0f, 0x00}; + if (i2c0.transmit(0x1a /* wm8731 */, wm8731_reset_command, 2, timeout) == false) { + audio_codec_ak4951.reset(); + uint8_t ak4951_init_command[] = {0x00, 0x00}; + i2c0.transmit(0x12 /* ak4951 */, ak4951_init_command, 2, timeout); + chThdSleepMilliseconds(10); + if (i2c0.transmit(0x12 /* ak4951 */, ak4951_init_command, 2, timeout) == false) { + shutdown_base(); + return false; + } + } + touch::adc::init(); controls_init(); chThdSleepMilliseconds(10);