diff --git a/firmware/common/hackrf-ui.c b/firmware/common/hackrf-ui.c index 23974135..bca2e86a 100644 --- a/firmware/common/hackrf-ui.c +++ b/firmware/common/hackrf-ui.c @@ -21,7 +21,7 @@ #include "hackrf-ui.h" -#include "portapack.h" +#include "ui_portapack.h" #include "ui_rad1o.h" #include @@ -60,20 +60,14 @@ static const hackrf_ui_t hackrf_ui_null = { &hackrf_ui_set_antenna_bias_null, }; -const portapack_t* portapack_init(void) __attribute__((weak)); -const hackrf_ui_t* rad1o_ui_setup(void) __attribute__((weak)); - static const hackrf_ui_t* ui = NULL; const hackrf_ui_t* hackrf_ui(void) { /* Detect on first use. If no UI hardware is detected, use a stub function table. */ if( ui == NULL ) { #ifdef HACKRF_ONE - if( portapack_init ) { - const portapack_t* const portapack = portapack_init(); - if( portapack != NULL ) { - ui = portapack->hackrf_ui; - } + if( portapack_hackrf_ui_init ) { + ui = portapack_hackrf_ui_init(); } #endif #ifdef RAD1O diff --git a/firmware/common/portapack.c b/firmware/common/portapack.c index 4bbb2312..2931ff80 100644 --- a/firmware/common/portapack.c +++ b/firmware/common/portapack.c @@ -556,19 +556,22 @@ static bool portapack_detect(void) { return jtag_pp_idcode() == 0x020A50DD; } -extern const hackrf_ui_t portapack_hackrf_ui; - -const portapack_t portapack = { - &portapack_hackrf_ui, +static const portapack_t portapack_instance = { }; -const portapack_t* portapack_init(void) { +static const portapack_t* portapack_pointer = NULL; + +const portapack_t* portapack(void) { + return portapack_pointer; +} + +void portapack_init(void) { if( portapack_detect() ) { portapack_if_init(); portapack_lcd_reset(); portapack_lcd_init(); - return &portapack; + portapack_pointer = &portapack_instance; } else { - return NULL; + portapack_pointer = NULL; } } \ No newline at end of file diff --git a/firmware/common/portapack.h b/firmware/common/portapack.h index 9febdbbd..9c537b0b 100644 --- a/firmware/common/portapack.h +++ b/firmware/common/portapack.h @@ -22,9 +22,9 @@ #ifndef __PORTAPACK_H__ #define __PORTAPACK_H__ +#include #include - -#include "hackrf-ui.h" +#include #define ARRAY_SIZEOF(x) (sizeof(x) / sizeof(x[0])) @@ -60,11 +60,14 @@ typedef struct ui_font_t { size_t data_stride; } ui_font_t; -typedef struct { - const hackrf_ui_t* const hackrf_ui; +typedef struct portapack_t { } portapack_t; -const portapack_t* portapack_init(void); +void portapack_init(void); + +/* If the "portapack" symbol is defined, PortaPack support is compiled in */ +/* If the portapack() call returns non-NULL, a PortaPack was detected and is initialized. */ +const portapack_t* portapack(void); void portapack_backlight(const bool on); diff --git a/firmware/common/ui_portapack.c b/firmware/common/ui_portapack.c index f80c1c6c..a61c3b5a 100644 --- a/firmware/common/ui_portapack.c +++ b/firmware/common/ui_portapack.c @@ -500,3 +500,11 @@ const hackrf_ui_t portapack_hackrf_ui = { &portapack_ui_set_filter, &portapack_ui_set_antenna_bias, }; + +const hackrf_ui_t* portapack_hackrf_ui_init() { + if( portapack() ) { + return &portapack_hackrf_ui; + } else { + return NULL; + } +} diff --git a/firmware/common/ui_portapack.h b/firmware/common/ui_portapack.h index 69754c7e..22d27d9c 100644 --- a/firmware/common/ui_portapack.h +++ b/firmware/common/ui_portapack.h @@ -22,4 +22,8 @@ #ifndef __UI_PORTAPACK_H__ #define __UI_PORTAPACK_H__ +#include "hackrf-ui.h" + +const hackrf_ui_t* portapack_hackrf_ui_init() __attribute__((weak)); + #endif/*__UI_PORTAPACK_H__*/ diff --git a/firmware/common/ui_rad1o.c b/firmware/common/ui_rad1o.c index 4d3b1254..aac72369 100644 --- a/firmware/common/ui_rad1o.c +++ b/firmware/common/ui_rad1o.c @@ -19,7 +19,6 @@ * Boston, MA 02110-1301, USA. */ -#include "hackrf-ui.h" #include "ui_rad1o.h" /* Weak functions from rad1o app */ diff --git a/firmware/common/ui_rad1o.h b/firmware/common/ui_rad1o.h index 6e658e5b..7c14a79a 100644 --- a/firmware/common/ui_rad1o.h +++ b/firmware/common/ui_rad1o.h @@ -22,6 +22,8 @@ #ifndef __UI_RAD1O_H__ #define __UI_RAD1O_H__ -const hackrf_ui_t* rad1o_ui_setup(void); +#include "hackrf-ui.h" + +const hackrf_ui_t* rad1o_ui_setup(void) __attribute__((weak)); #endif/*__UI_RAD1O_H__*/ diff --git a/firmware/hackrf_usb/hackrf_usb.c b/firmware/hackrf_usb/hackrf_usb.c index 4714dbfe..92ab9aa2 100644 --- a/firmware/hackrf_usb/hackrf_usb.c +++ b/firmware/hackrf_usb/hackrf_usb.c @@ -46,6 +46,7 @@ #include "usb_api_transceiver.h" #include "usb_bulk_buffer.h" #include "cpld_xc2c.h" +#include "portapack.h" #include "hackrf-ui.h" @@ -235,6 +236,10 @@ int main(void) { halt_and_flash(6000000); } +#ifdef HACKRF_ONE + portapack_init(); +#endif + #ifndef DFU_MODE usb_set_descriptor_by_serial_number(); #endif