From b1df55a26e157b5a1dbd7cf386d51160877a9583 Mon Sep 17 00:00:00 2001 From: gullradriel Date: Sat, 8 Aug 2026 21:33:46 +0200 Subject: [PATCH] tuning.hpp: pass AFE rate and direction to tuning config, add quarter_shift field --- firmware/application/tuning.hpp | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/firmware/application/tuning.hpp b/firmware/application/tuning.hpp index b16b6c5a0..710127662 100644 --- a/firmware/application/tuning.hpp +++ b/firmware/application/tuning.hpp @@ -33,18 +33,21 @@ struct Config { : first_lo_frequency(0), second_lo_frequency(0), rf_path_band(rf::path::Band::Mid), - mixer_invert(false) { + mixer_invert(false), + quarter_shift(0) { } constexpr Config( rf::Frequency first_lo_frequency, rf::Frequency second_lo_frequency, rf::path::Band rf_path_band, - bool mixer_invert) + bool mixer_invert, + uint8_t quarter_shift = 0) : first_lo_frequency(first_lo_frequency), second_lo_frequency(second_lo_frequency), rf_path_band(rf_path_band), - mixer_invert(mixer_invert) { + mixer_invert(mixer_invert), + quarter_shift(quarter_shift) { } bool is_valid() const { @@ -55,9 +58,23 @@ struct Config { const rf::Frequency second_lo_frequency; const rf::path::Band rf_path_band; const bool mixer_invert; + + /* PRALINE only: FPGA RX quarter-rate shift mode, in the encoding the + * gateware expects in the top two bits of register 0x03 (rx_pstep): + * 0b00 = none, 0b11 = up, 0b01 = down. + * Matches fpga_quarter_shift_mode_t in hackrf/firmware/common/fpga.h. + * Always 0 on HackRF One (no FPGA). */ + const uint8_t quarter_shift; }; -Config create(const rf::Frequency target_frequency); +/* afe_rate is the ADC sample rate in Hz (output rate << decimation), needed on + * PRALINE to work out how far off centre the quarter-rate shift places the + * analogue passband. Pass 0 (or leave defaulted) to disable the shift. + * transmit selects the TX tuning table. Both are ignored on HackRF One. */ +Config create( + const rf::Frequency target_frequency, + const uint32_t afe_rate = 0, + const bool transmit = false); } /* namespace config */ } /* namespace tuning */