Skip to content

Commit 6530ea8

Browse files
committed
Support new Praline configuration options in radio_* API and firmware.
1 parent d1be4db commit 6530ea8

21 files changed

+1773
-596
lines changed

firmware/common/fpga.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -78,16 +78,16 @@ void fpga_regs_commit(fpga_driver_t* const drv)
7878
}
7979
}
8080

81-
void fpga_set_hw_sync_enable(fpga_driver_t* const drv, const hw_sync_mode_t hw_sync_mode)
81+
void fpga_set_hw_sync_enable(fpga_driver_t* const drv, const bool enable)
8282
{
8383
fpga_reg_read(drv, FPGA_STANDARD_CTRL);
84-
set_FPGA_STANDARD_CTRL_TRIGGER_EN(drv, hw_sync_mode == 1);
84+
set_FPGA_STANDARD_CTRL_TRIGGER_EN(drv, enable & 0b1);
8585
fpga_regs_commit(drv);
8686
}
8787

8888
void fpga_set_rx_dc_block_enable(fpga_driver_t* const drv, const bool enable)
8989
{
90-
set_FPGA_STANDARD_CTRL_DC_BLOCK(drv, enable);
90+
set_FPGA_STANDARD_CTRL_DC_BLOCK(drv, enable & 0b1);
9191
fpga_regs_commit(drv);
9292
}
9393

firmware/common/fpga.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ extern void fpga_reg_write(fpga_driver_t* const drv, uint8_t r, uint8_t v);
6363
* provided routines for those operations. */
6464
extern void fpga_regs_commit(fpga_driver_t* const drv);
6565

66-
void fpga_set_hw_sync_enable(fpga_driver_t* const drv, const hw_sync_mode_t hw_sync_mode);
66+
void fpga_set_hw_sync_enable(fpga_driver_t* const drv, const bool enable);
6767
void fpga_set_rx_dc_block_enable(fpga_driver_t* const drv, const bool enable);
6868
void fpga_set_rx_decimation_ratio(fpga_driver_t* const drv, const uint8_t value);
6969
void fpga_set_rx_quarter_shift_mode(

firmware/common/hackrf_core.c

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323

2424
#include "hackrf_core.h"
2525
#include "hackrf_ui.h"
26+
#include "radio.h"
2627
#include "sgpio.h"
2728
#include "si5351c.h"
2829
#include "spi_ssp.h"
@@ -356,23 +357,23 @@ radio_t radio = {
356357
.id = RADIO_CHANNEL0,
357358
.config =
358359
{
359-
.sample_rate[RADIO_SAMPLE_RATE_CLOCKGEN] =
360+
.sample_rate[RADIO_SAMPLE_RATE] =
361+
{.num = 10000000, .denom = 1},
362+
.filter[RADIO_FILTER_BASEBAND_LPF] = {.hz = 0},
363+
.filter[RADIO_FILTER_RF_PATH] = {.mode = 0},
364+
.filter[RADIO_FILTER_RX_BASEBAND_HPF] =
365+
{.mode = MAX2831_RX_HPF_30_KHZ},
366+
.filter[RADIO_FILTER_RX_NARROWBAND_LPF] =
360367
{.hz = 0},
361-
.filter[RADIO_FILTER_BASEBAND] = {.hz = 0},
362-
.frequency[RADIO_FREQUENCY_RF] =
363-
{
364-
.hz = 0,
365-
.if_hz = 0,
366-
.lo_hz = 0,
367-
.path = 0,
368-
},
368+
.filter[RADIO_FILTER_RX_DC_BLOCK] = {.hz = 0},
369+
.frequency[RADIO_FREQUENCY] = {.hz = 0},
369370
.gain[RADIO_GAIN_RF_AMP] = {.enable = 0},
370371
.gain[RADIO_GAIN_RX_LNA] = {.db = 0},
371372
.gain[RADIO_GAIN_RX_VGA] = {.db = 0},
372373
.gain[RADIO_GAIN_TX_VGA] = {.db = 0},
373374
.antenna[RADIO_ANTENNA_BIAS_TEE] =
374375
{.enable = false},
375-
.mode = TRANSCEIVER_MODE_OFF,
376+
.mode = RADIO_MODE_OFF,
376377
.clock[RADIO_CLOCK_CLKIN] = {.enable = false},
377378
.clock[RADIO_CLOCK_CLKOUT] = {.enable = false},
378379
.trigger_mode = HW_SYNC_MODE_OFF,

firmware/common/hackrf_core.h

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@ extern "C" {
4040
#include "mixer.h"
4141
#include "w25q80bv.h"
4242
#include "sgpio.h"
43-
#include "radio.h"
4443
#include "rf_path.h"
4544
#include "cpld_jtag.h"
4645
#include "ice40_spi.h"
@@ -389,6 +388,26 @@ extern "C" {
389388
#define SCU_H1R9_NO_VAA_EN (P6_10) /* GPIO3[6] on P6_10 */
390389
#define SCU_H1R9_HW_SYNC_EN (P2_5) /* GPIO5[5] on P2_5 */
391390

391+
typedef enum {
392+
TRANSCEIVER_MODE_OFF = 0,
393+
TRANSCEIVER_MODE_RX = 1,
394+
TRANSCEIVER_MODE_TX = 2,
395+
TRANSCEIVER_MODE_SS = 3,
396+
TRANSCEIVER_MODE_CPLD_UPDATE = 4,
397+
TRANSCEIVER_MODE_RX_SWEEP = 5,
398+
} transceiver_mode_t;
399+
400+
typedef enum {
401+
HW_SYNC_MODE_OFF = 0,
402+
HW_SYNC_MODE_ON = 1,
403+
} hw_sync_mode_t;
404+
405+
typedef enum {
406+
CLOCK_SOURCE_HACKRF = 0,
407+
CLOCK_SOURCE_EXTERNAL = 1,
408+
CLOCK_SOURCE_PORTAPACK = 2,
409+
} clock_source_t;
410+
392411
void delay(uint32_t duration);
393412
void delay_us_at_mhz(uint32_t us, uint32_t mhz);
394413

@@ -410,7 +429,6 @@ extern max5864_driver_t max5864;
410429
extern mixer_driver_t mixer;
411430
extern w25q80bv_driver_t spi_flash;
412431
extern sgpio_config_t sgpio_config;
413-
extern radio_t radio;
414432
extern rf_path_t rf_path;
415433
extern jtag_t jtag_cpld;
416434
extern i2c_bus_t i2c0;

firmware/common/max2831.c

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -254,19 +254,9 @@ void max2831_set_frequency(max2831_driver_t* const drv, uint32_t freq)
254254
max2831_regs_commit(drv);
255255
}
256256

257-
typedef struct {
258-
uint32_t bandwidth_hz;
259-
uint8_t ft;
260-
} max2831_ft_t;
261-
262-
typedef struct {
263-
uint8_t percent;
264-
uint8_t ft_fine;
265-
} max2831_ft_fine_t;
266-
267257
// clang-format off
268258
/* measured -0.5 dB complex baseband bandwidth for each register setting */
269-
static const max2831_ft_t max2831_rx_ft[] = {
259+
static const max2831_ft_t _max2831_rx_ft[] = {
270260
{ 11600000, MAX2831_RX_LPF_7_5M },
271261
{ 15100000, MAX2831_RX_LPF_8_5M },
272262
{ 22600000, MAX2831_RX_LPF_15M },
@@ -283,7 +273,7 @@ static const max2831_ft_fine_t max2831_rx_ft_fine[] = {
283273
{ 0, 0 },
284274
};
285275

286-
static const max2831_ft_t max2831_tx_ft[] = {
276+
static const max2831_ft_t _max2831_tx_ft[] = {
287277
{ 16000000, MAX2831_TX_LPF_8M },
288278
{ 22000000, MAX2831_TX_LPF_11M },
289279
{ 33000000, MAX2831_TX_LPF_16_5M },
@@ -302,6 +292,9 @@ static const max2831_ft_fine_t max2831_tx_ft_fine[] = {
302292
};
303293
//clang-format on
304294

295+
// dirty hack is dirty
296+
const max2831_ft_t* max2831_rx_ft = _max2831_rx_ft;
297+
const max2831_ft_t* max2831_tx_ft = _max2831_tx_ft;
305298

306299
uint32_t max2831_set_lpf_bandwidth(max2831_driver_t* const drv, const uint32_t bandwidth_hz) {
307300
const max2831_ft_t* coarse;

firmware/common/max2831.h

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,20 @@ struct max2831_driver_t {
6565
uint32_t desired_lpf_bw;
6666
};
6767

68+
typedef struct {
69+
uint32_t bandwidth_hz;
70+
uint8_t ft;
71+
} max2831_ft_t;
72+
73+
typedef struct {
74+
uint8_t percent;
75+
uint8_t ft_fine;
76+
} max2831_ft_fine_t;
77+
78+
// dirty hack is dirty
79+
extern const max2831_ft_t* max2831_rx_ft;
80+
extern const max2831_ft_t* max2831_tx_ft;
81+
6882
/* Initialize chip. */
6983
extern void max2831_setup(max2831_driver_t* const drv);
7084

firmware/common/max2837.c

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -284,13 +284,8 @@ void max2837_set_frequency(max2837_driver_t* const drv, uint32_t freq)
284284
max2837_regs_commit(drv);
285285
}
286286

287-
typedef struct {
288-
uint32_t bandwidth_hz;
289-
uint32_t ft;
290-
} max2837_ft_t;
291-
292287
// clang-format off
293-
static const max2837_ft_t max2837_ft[] = {
288+
static const max2837_ft_t _max2837_ft[] = {
294289
{ 1750000, MAX2837_FT_1_75M },
295290
{ 2500000, MAX2837_FT_2_5M },
296291
{ 3500000, MAX2837_FT_3_5M },
@@ -311,6 +306,9 @@ static const max2837_ft_t max2837_ft[] = {
311306
};
312307
//clang-format on
313308

309+
// dirty hack is dirty
310+
const max2837_ft_t* max2837_ft = _max2837_ft;
311+
314312
uint32_t max2837_set_lpf_bandwidth(max2837_driver_t* const drv, const uint32_t bandwidth_hz) {
315313
const max2837_ft_t* p = max2837_ft;
316314
while( p->bandwidth_hz != 0 ) {

firmware/common/max2837.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,14 @@ struct max2837_driver_t {
5656
uint32_t regs_dirty;
5757
};
5858

59+
typedef struct {
60+
uint32_t bandwidth_hz;
61+
uint32_t ft;
62+
} max2837_ft_t;
63+
64+
// dirty hack is dirty
65+
extern const max2837_ft_t* max2837_ft;
66+
5967
/* Initialize chip. */
6068
extern void max2837_setup(max2837_driver_t* const drv);
6169

0 commit comments

Comments
 (0)