diff --git a/firmware/common/hackrf_ui.c b/firmware/common/hackrf_ui.c index 23541e7c..39518f60 100644 --- a/firmware/common/hackrf_ui.c +++ b/firmware/common/hackrf_ui.c @@ -42,6 +42,7 @@ void hackrf_ui_set_first_if_frequency_null(const uint64_t frequency) { UNUSED(fr void hackrf_ui_set_filter_null(const rf_path_filter_t filter) { UNUSED(filter); } void hackrf_ui_set_antenna_bias_null(bool antenna_bias) { UNUSED(antenna_bias); } void hackrf_ui_set_clock_source_null(clock_source_t source) { UNUSED(source); } +bool hackrf_ui_operacake_gpio_compatible_null(void) { return true; } /* Null UI function table, used if there's no hardware UI detected. Eliminates the * need to check for null UI before calling a function in the table. @@ -60,6 +61,7 @@ static const hackrf_ui_t hackrf_ui_null = { &hackrf_ui_set_filter_null, &hackrf_ui_set_antenna_bias_null, &hackrf_ui_set_clock_source_null, + &hackrf_ui_operacake_gpio_compatible_null }; static const hackrf_ui_t* ui = NULL; diff --git a/firmware/common/hackrf_ui.h b/firmware/common/hackrf_ui.h index 5ac07ada..a3252b54 100644 --- a/firmware/common/hackrf_ui.h +++ b/firmware/common/hackrf_ui.h @@ -38,6 +38,7 @@ typedef void (*hackrf_ui_set_first_if_frequency_fn)(const uint64_t frequency); typedef void (*hackrf_ui_set_filter_fn)(const rf_path_filter_t filter); typedef void (*hackrf_ui_set_antenna_bias_fn)(bool antenna_bias); typedef void (*hackrf_ui_set_clock_source_fn)(clock_source_t source); +typedef bool (*hackrf_ui_operacake_gpio_compatible_fn)(void); typedef struct { hackrf_ui_init_fn init; @@ -53,6 +54,7 @@ typedef struct { hackrf_ui_set_filter_fn set_filter; hackrf_ui_set_antenna_bias_fn set_antenna_bias; hackrf_ui_set_clock_source_fn set_clock_source; + hackrf_ui_operacake_gpio_compatible_fn operacake_gpio_compatible; } hackrf_ui_t; /* TODO: Lame hack to know that PortaPack was detected. diff --git a/firmware/common/ui_portapack.c b/firmware/common/ui_portapack.c index d9dc90da..24383b7d 100644 --- a/firmware/common/ui_portapack.c +++ b/firmware/common/ui_portapack.c @@ -549,6 +549,10 @@ static void portapack_ui_set_clock_source(clock_source_t source) { portapack_lcd_draw_string(label_point, s); } +static bool portapack_ui_operacake_gpio_compatible(void) { + return false; +} + const hackrf_ui_t portapack_hackrf_ui = { &portapack_ui_init, &portapack_ui_set_frequency, @@ -563,6 +567,7 @@ const hackrf_ui_t portapack_hackrf_ui = { &portapack_ui_set_filter, &portapack_ui_set_antenna_bias, &portapack_ui_set_clock_source, + &portapack_ui_operacake_gpio_compatible, }; const hackrf_ui_t* portapack_hackrf_ui_init() { diff --git a/firmware/common/ui_rad1o.c b/firmware/common/ui_rad1o.c index af4e4fb8..d94fb53b 100644 --- a/firmware/common/ui_rad1o.c +++ b/firmware/common/ui_rad1o.c @@ -88,6 +88,10 @@ static void rad1o_ui_set_clock_source(clock_source_t source) { hackrf_ui_setClockSource(source); } +static bool rad1o_ui_operacake_gpio_compatible(void) { + return true; +} + static const hackrf_ui_t rad1o_ui = { &rad1o_ui_init, &rad1o_ui_set_frequency, @@ -102,6 +106,7 @@ static const hackrf_ui_t rad1o_ui = { &rad1o_ui_set_filter, &rad1o_ui_set_antenna_bias, &rad1o_ui_set_clock_source, + &rad1o_ui_operacake_gpio_compatible, }; const hackrf_ui_t* rad1o_ui_setup(void) { diff --git a/firmware/hackrf_usb/hackrf_usb.c b/firmware/hackrf_usb/hackrf_usb.c index 3589f97d..88159db4 100644 --- a/firmware/hackrf_usb/hackrf_usb.c +++ b/firmware/hackrf_usb/hackrf_usb.c @@ -241,7 +241,7 @@ int main(void) { rf_path_init(&rf_path); - if( hackrf_ui() == NULL ) { + if( hackrf_ui()->operacake_gpio_compatible() ) { operacake_allow_gpio = true; } else { operacake_allow_gpio = false;