From 7b86403ce83f96f2bb95ace5e8c0e747d596bc89 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Thu, 31 Jan 2019 09:24:59 +0000 Subject: [PATCH] PortaPack: If hardware not detected, try to init OperaCake. --- firmware/common/hackrf-ui.h | 34 ++++++++++++++++++++++++++++++++ firmware/common/ui_portapack.c | 4 ++++ firmware/common/ui_portapack.h | 28 -------------------------- firmware/hackrf_usb/hackrf_usb.c | 6 +++--- 4 files changed, 41 insertions(+), 31 deletions(-) diff --git a/firmware/common/hackrf-ui.h b/firmware/common/hackrf-ui.h index 2bff25e8..ad295d78 100644 --- a/firmware/common/hackrf-ui.h +++ b/firmware/common/hackrf-ui.h @@ -4,6 +4,40 @@ #include #include +typedef void (*hackrf_ui_init_fn)(void); +typedef void (*hackrf_ui_set_frequency_fn)(uint64_t frequency); +typedef void (*hackrf_ui_set_sample_rate_fn)(uint32_t sample_rate); +typedef void (*hackrf_ui_set_direction_fn)(const rf_path_direction_t direction); +typedef void (*hackrf_ui_set_filter_bw_fn)(uint32_t bandwidth); +typedef void (*hackrf_ui_set_lna_power_fn)(bool lna_on); +typedef void (*hackrf_ui_set_bb_lna_gain_fn)(const uint32_t gain_db); +typedef void (*hackrf_ui_set_bb_vga_gain_fn)(const uint32_t gain_db); +typedef void (*hackrf_ui_set_bb_tx_vga_gain_fn)(const uint32_t gain_db); +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 struct { + hackrf_ui_init_fn init; + hackrf_ui_set_frequency_fn set_frequency; + hackrf_ui_set_sample_rate_fn set_sample_rate; + hackrf_ui_set_direction_fn set_direction; + hackrf_ui_set_filter_bw_fn set_filter_bw; + hackrf_ui_set_lna_power_fn set_lna_power; + hackrf_ui_set_bb_lna_gain_fn set_bb_lna_gain; + hackrf_ui_set_bb_vga_gain_fn set_bb_vga_gain; + hackrf_ui_set_bb_tx_vga_gain_fn set_bb_tx_vga_gain; + hackrf_ui_set_first_if_frequency_fn set_first_if_frequency; + hackrf_ui_set_filter_fn set_filter; + hackrf_ui_set_antenna_bias_fn set_antenna_bias; +} hackrf_ui_t; + +/* TODO: Lame hack to know that PortaPack was detected. + * In the future, whatever UI was detected will be returned here, + * or NULL if no UI was detected. + */ +const hackrf_ui_t* hackrf_ui(void) __attribute__((weak)); + void hackrf_ui_init(void) __attribute__((weak)); void hackrf_ui_setFrequency(uint64_t _freq) __attribute__((weak)); void hackrf_ui_setSampleRate(uint32_t _sample_rate) __attribute__((weak)); diff --git a/firmware/common/ui_portapack.c b/firmware/common/ui_portapack.c index b68a2e07..0539f80f 100644 --- a/firmware/common/ui_portapack.c +++ b/firmware/common/ui_portapack.c @@ -1046,6 +1046,10 @@ const hackrf_ui_t* portapack_detect(void) { static const hackrf_ui_t* ui = NULL; +const hackrf_ui_t* hackrf_ui(void) { + return ui; +} + void hackrf_ui_init(void) { ui = portapack_detect(); if( ui != NULL ) { diff --git a/firmware/common/ui_portapack.h b/firmware/common/ui_portapack.h index dffcdf47..d4ddda18 100644 --- a/firmware/common/ui_portapack.h +++ b/firmware/common/ui_portapack.h @@ -56,32 +56,4 @@ typedef struct ui_font_t { size_t data_stride; } ui_font_t; -typedef void (*hackrf_ui_init_fn)(void); -typedef void (*hackrf_ui_set_frequency_fn)(uint64_t frequency); -typedef void (*hackrf_ui_set_sample_rate_fn)(uint32_t sample_rate); -typedef void (*hackrf_ui_set_direction_fn)(const rf_path_direction_t direction); -typedef void (*hackrf_ui_set_filter_bw_fn)(uint32_t bandwidth); -typedef void (*hackrf_ui_set_lna_power_fn)(bool lna_on); -typedef void (*hackrf_ui_set_bb_lna_gain_fn)(const uint32_t gain_db); -typedef void (*hackrf_ui_set_bb_vga_gain_fn)(const uint32_t gain_db); -typedef void (*hackrf_ui_set_bb_tx_vga_gain_fn)(const uint32_t gain_db); -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 struct { - hackrf_ui_init_fn init; - hackrf_ui_set_frequency_fn set_frequency; - hackrf_ui_set_sample_rate_fn set_sample_rate; - hackrf_ui_set_direction_fn set_direction; - hackrf_ui_set_filter_bw_fn set_filter_bw; - hackrf_ui_set_lna_power_fn set_lna_power; - hackrf_ui_set_bb_lna_gain_fn set_bb_lna_gain; - hackrf_ui_set_bb_vga_gain_fn set_bb_vga_gain; - hackrf_ui_set_bb_tx_vga_gain_fn set_bb_tx_vga_gain; - hackrf_ui_set_first_if_frequency_fn set_first_if_frequency; - hackrf_ui_set_filter_fn set_filter; - hackrf_ui_set_antenna_bias_fn set_antenna_bias; -} hackrf_ui_t; - #endif/*__UI_PORTAPACK_H__*/ diff --git a/firmware/hackrf_usb/hackrf_usb.c b/firmware/hackrf_usb/hackrf_usb.c index 75601f42..6c65da9f 100644 --- a/firmware/hackrf_usb/hackrf_usb.c +++ b/firmware/hackrf_usb/hackrf_usb.c @@ -243,9 +243,9 @@ int main(void) { rf_path_init(&rf_path); -#ifndef USER_INTERFACE_PORTAPACK - operacake_init(); -#endif + if( hackrf_ui() == NULL ) { + operacake_init(); + } unsigned int phase = 0;