diff --git a/firmware/common/hackrf_core.c b/firmware/common/hackrf_core.c index b11cfa05..b1985b70 100644 --- a/firmware/common/hackrf_core.c +++ b/firmware/common/hackrf_core.c @@ -82,11 +82,13 @@ spi_t spi_ssp1 = { max2837_driver_t max2837 = { .spi = &spi_ssp1, + .target_init = max2837_target_init, .set_mode = max2837_target_set_mode, }; max5864_driver_t max5864 = { .spi = &spi_ssp1, + .target_init = max5864_target_init, }; spi_t rffc5071_spi = { @@ -118,6 +120,7 @@ spi_t spi_ssp0 = { w25q80bv_driver_t spi_flash = { .spi = &spi_ssp0, + .target_init = w25q80bv_target_init, }; void delay(uint32_t duration) diff --git a/firmware/common/max2837.c b/firmware/common/max2837.c index 63bf7afc..8f58595f 100644 --- a/firmware/common/max2837.c +++ b/firmware/common/max2837.c @@ -31,7 +31,6 @@ #include #include #include "max2837.h" -#include "max2837_target.h" #include "max2837_regs.def" // private register def macros #include "hackrf_core.h" @@ -80,7 +79,7 @@ static const uint16_t max2837_regs_default[MAX2837_NUM_REGS] = { static void max2837_init(max2837_driver_t* const drv) { spi_init(drv->spi, &ssp_config_max2837); - max2837_target_init(drv); + drv->target_init(drv); max2837_set_mode(drv, MAX2837_MODE_SHUTDOWN); memcpy(drv->regs, max2837_regs_default, sizeof(drv->regs)); diff --git a/firmware/common/max2837.h b/firmware/common/max2837.h index 9c8698fa..7ca45580 100644 --- a/firmware/common/max2837.h +++ b/firmware/common/max2837.h @@ -39,13 +39,17 @@ typedef enum { MAX2837_MODE_RX } max2837_mode_t; -typedef struct { +struct max2837_driver_t; +typedef struct max2837_driver_t max2837_driver_t; + +struct max2837_driver_t { spi_t* const spi; + void (*target_init)(max2837_driver_t* const drv); void (*set_mode)(max2837_driver_t* const drv, const max2837_mode_t new_mode); max2837_mode_t mode; uint16_t regs[MAX2837_NUM_REGS]; uint32_t regs_dirty; -} max2837_driver_t; +}; /* Initialize chip. */ extern void max2837_setup(max2837_driver_t* const drv); diff --git a/firmware/common/max5864.c b/firmware/common/max5864.c index 5e87f97f..13644862 100644 --- a/firmware/common/max5864.c +++ b/firmware/common/max5864.c @@ -22,7 +22,6 @@ #include #include "max5864.h" -#include "max5864_target.h" #include "hackrf_core.h" @@ -32,7 +31,7 @@ static void max5864_write(max5864_driver_t* const drv, uint8_t value) { static void max5864_init(max5864_driver_t* const drv) { spi_init(drv->spi, &ssp_config_max5864); - max5864_target_init(drv); + drv->target_init(drv); } void max5864_setup(max5864_driver_t* const drv) { diff --git a/firmware/common/max5864.h b/firmware/common/max5864.h index 0b5a8bb9..ae1d1b15 100644 --- a/firmware/common/max5864.h +++ b/firmware/common/max5864.h @@ -24,9 +24,13 @@ #include "spi.h" -typedef struct max5864_driver_t { +struct max5864_driver_t; +typedef struct max5864_driver_t max5864_driver_t; + +struct max5864_driver_t { spi_t* const spi; -} max5864_driver_t; + void (*target_init)(max5864_driver_t* const drv); +}; void max5864_setup(max5864_driver_t* const drv); diff --git a/firmware/common/tuning.c b/firmware/common/tuning.c index 7cb8bdb5..91cbfdb1 100644 --- a/firmware/common/tuning.c +++ b/firmware/common/tuning.c @@ -26,7 +26,6 @@ #include #include #include -#include "max2837_target.h" #define FREQ_ONE_MHZ (1000*1000) diff --git a/firmware/common/w25q80bv.c b/firmware/common/w25q80bv.c index ad084950..5b3984ab 100644 --- a/firmware/common/w25q80bv.c +++ b/firmware/common/w25q80bv.c @@ -28,9 +28,9 @@ */ #include +#include #include "w25q80bv.h" -#include "w25q80bv_target.h" #include "hackrf_core.h" @@ -60,7 +60,7 @@ void w25q80bv_setup(w25q80bv_driver_t* const drv) drv->num_bytes = 1048576U; spi_init(drv->spi, &ssp_config_w25q80bv); - w25q80bv_target_init(drv); + drv->target_init(drv); device_id = 0; while(device_id != W25Q80BV_DEVICE_ID_RES) diff --git a/firmware/common/w25q80bv.h b/firmware/common/w25q80bv.h index 89c82653..fab11bda 100644 --- a/firmware/common/w25q80bv.h +++ b/firmware/common/w25q80bv.h @@ -36,12 +36,16 @@ typedef union uint8_t id_8b[8]; /* 8*8bits 64bits Unique ID */ } w25q80bv_unique_id_t; -typedef struct { +struct w25q80bv_driver_t; +typedef struct w25q80bv_driver_t w25q80bv_driver_t; + +struct w25q80bv_driver_t { spi_t* spi; + void (*target_init)(w25q80bv_driver_t* const drv); size_t page_len; size_t num_pages; size_t num_bytes; -} w25q80bv_driver_t; +}; void w25q80bv_setup(w25q80bv_driver_t* const drv); void w25q80bv_chip_erase(w25q80bv_driver_t* const drv);