2828#include "platform_detect.h"
2929#include "radio.h"
3030#include "fixed_point.h"
31- #include "hackrf_ui.h"
3231
3332#define MIN (x , y ) ((x) < (y) ? (x) : (y))
3433#define MAX (x , y ) ((x) > (y) ? (x) : (y))
@@ -225,11 +224,6 @@ static bool radio_update_sample_rate(radio_t* const radio, uint64_t* bank)
225224 new_rate = (rate != radio -> config [RADIO_BANK_APPLIED ][RADIO_SAMPLE_RATE ]);
226225 if (new_rate ) {
227226 radio -> config [RADIO_BANK_APPLIED ][RADIO_SAMPLE_RATE ] = rate ;
228- if (rate != RADIO_UNSET ) {
229- /* Round to the nearest Hz for display. */
230- const uint32_t rate_hz = (rate + (FP_ONE_HZ >> 1 )) / FP_ONE_HZ ;
231- hackrf_ui ()-> set_sample_rate (rate_hz );
232- }
233227 }
234228
235229 return (new_afe_rate || new_rate || new_n );
@@ -613,6 +607,7 @@ bool radio_update(radio_t* const radio)
613607 uint64_t tmp_bank [RADIO_NUM_REGS ];
614608 nvic_disable_irq (NVIC_USB0_IRQ );
615609 uint32_t dirty = radio -> regs_dirty ;
610+ uint32_t changed = 0 ;
616611 if (dirty == 0 ) {
617612 nvic_enable_irq (NVIC_USB0_IRQ );
618613 return false;
@@ -621,56 +616,57 @@ bool radio_update(radio_t* const radio)
621616 memcpy (& tmp_bank [0 ], & (radio -> config [RADIO_BANK_ACTIVE ][0 ]), sizeof (tmp_bank ));
622617 nvic_enable_irq (NVIC_USB0_IRQ );
623618
624- bool dir = false;
625- bool rate = false;
626- bool freq = false;
627- bool bw = false;
628- bool gain = false;
629- bool bias = false;
630- bool trig = false;
631- bool dc = false;
632-
633- if ((dirty &
634- ((1 << RADIO_SAMPLE_RATE ) | (1 << RADIO_RESAMPLE_TX ) |
635- (1 << RADIO_RESAMPLE_RX ))) ||
619+ if ((dirty & RADIO_REG_GROUP_RATE ) ||
636620 ((detected_platform () == BOARD_ID_PRALINE ) &&
637621 (dirty & (1 << RADIO_OPMODE )))) {
638- rate = radio_update_sample_rate (radio , & tmp_bank [0 ]);
622+ if (radio_update_sample_rate (radio , & tmp_bank [0 ])) {
623+ changed |= RADIO_REG_GROUP_RATE ;
624+ }
639625 }
640- if ((dirty &
641- ((1 << RADIO_FREQUENCY_RF ) | (1 << RADIO_FREQUENCY_IF ) |
642- (1 << RADIO_FREQUENCY_LO ) | (1 << RADIO_IMAGE_REJECT ) |
643- (1 << RADIO_ROTATION ))) ||
626+ if ((dirty & RADIO_REG_GROUP_FREQ ) ||
644627 ((detected_platform () == BOARD_ID_PRALINE ) &&
645- (rate || (dirty & (1 << RADIO_OPMODE ))))) {
646- freq = radio_update_frequency (radio , & tmp_bank [0 ]);
628+ ((changed & RADIO_REG_GROUP_RATE ) || (dirty & (1 << RADIO_OPMODE ))))) {
629+ if (radio_update_frequency (radio , & tmp_bank [0 ])) {
630+ changed |= RADIO_REG_GROUP_FREQ ;
631+ }
647632 }
648- if ((dirty &
649- (( 1 << RADIO_BB_BANDWIDTH_TX ) | ( 1 << RADIO_BB_BANDWIDTH_RX ) |
650- ( 1 << RADIO_XCVR_TX_LPF ) | ( 1 << RADIO_XCVR_RX_LPF ) |
651- ( 1 << RADIO_XCVR_RX_HPF ) | ( 1 << RADIO_RX_NARROW_LPF ))) ||
652- (( detected_platform () == BOARD_ID_PRALINE ) && ( rate || freq ))) {
653- bw = radio_update_bandwidth ( radio , & tmp_bank [ 0 ]);
633+ if ((dirty & RADIO_REG_GROUP_BW ) ||
634+ (( detected_platform () == BOARD_ID_PRALINE ) &&
635+ ( changed & ( RADIO_REG_GROUP_RATE | RADIO_REG_GROUP_FREQ )))) {
636+ if ( radio_update_bandwidth ( radio , & tmp_bank [ 0 ])) {
637+ changed |= RADIO_REG_GROUP_BW ;
638+ }
654639 }
655- if (dirty &
656- (( 1 << RADIO_GAIN_TX_RF ) | ( 1 << RADIO_GAIN_TX_IF ) | ( 1 << RADIO_GAIN_RX_RF ) |
657- ( 1 << RADIO_GAIN_RX_IF ) | ( 1 << RADIO_GAIN_RX_BB ) | ( 1 << RADIO_OPMODE ))) {
658- gain = radio_update_gain ( radio , & tmp_bank [ 0 ]);
640+ if (dirty & ( RADIO_REG_GROUP_GAIN | ( 1 << RADIO_OPMODE ))) {
641+ if ( radio_update_gain ( radio , & tmp_bank [ 0 ])) {
642+ changed |= RADIO_REG_GROUP_GAIN ;
643+ }
659644 }
660645 if (dirty & ((1 << RADIO_BIAS_TEE ) | (1 << RADIO_OPMODE ))) {
661- bias = radio_update_bias_tee (radio , & tmp_bank [0 ]);
646+ if (radio_update_bias_tee (radio , & tmp_bank [0 ])) {
647+ changed |= (1 << RADIO_BIAS_TEE );
648+ }
662649 }
663650 if (dirty & (1 << RADIO_TRIGGER )) {
664- trig = radio_update_trigger (radio , & tmp_bank [0 ]);
651+ if (radio_update_trigger (radio , & tmp_bank [0 ])) {
652+ changed |= (1 << RADIO_TRIGGER );
653+ }
665654 }
666655 if (dirty & (1 << RADIO_DC_BLOCK )) {
667- dc = radio_update_dc_block (radio , & tmp_bank [0 ]);
656+ if (radio_update_dc_block (radio , & tmp_bank [0 ])) {
657+ changed |= (1 << RADIO_DC_BLOCK );
658+ }
668659 }
669660 if (dirty & (1 << RADIO_OPMODE )) {
670- dir = radio_update_direction (radio , & tmp_bank [0 ]);
661+ if (radio_update_direction (radio , & tmp_bank [0 ])) {
662+ changed |= (1 << RADIO_OPMODE );
663+ }
671664 }
672665
673- return trig || dir || rate || freq || bw || gain || bias || dc ;
666+ if (radio -> update_cb ) {
667+ radio -> update_cb (changed );
668+ }
669+ return (changed != 0 );
674670}
675671
676672void radio_switch_opmode (radio_t * const radio , const transceiver_mode_t mode )
0 commit comments