static void switchctrl_set(const uint8_t gpo) { #ifdef JAWBREAKER rffc5071_set_gpo(gpo); #elif HACKRF_ONE switchctrl_set_hackrf_one(gpo); #else (void)gpo; #endif }
static void switchctrl_set(rf_path_t* const rf_path, const uint8_t gpo) { #ifdef JAWBREAKER rffc5071_set_gpo(&rffc5072, gpo); #elif HACKRF_ONE switchctrl_set_hackrf_one(rf_path, gpo); #else (void)gpo; #endif }
static void switchctrl_set_hackrf_one(uint8_t ctrl) { if (ctrl & SWITCHCTRL_TX) { gpio_set(PORT_TX, PIN_TX); gpio_clear(PORT_RX, PIN_RX); } else { gpio_clear(PORT_TX, PIN_TX); gpio_set(PORT_RX, PIN_RX); } if (ctrl & SWITCHCTRL_MIX_BYPASS) { gpio_set(PORT_MIX_BYPASS, PIN_MIX_BYPASS); gpio_clear(PORT_NO_MIX_BYPASS, PIN_NO_MIX_BYPASS); if (ctrl & SWITCHCTRL_TX) { gpio_set(PORT_TX_MIX_BP, PIN_TX_MIX_BP); gpio_clear(PORT_RX_MIX_BP, PIN_RX_MIX_BP); } else { gpio_clear(PORT_TX_MIX_BP, PIN_TX_MIX_BP); gpio_set(PORT_RX_MIX_BP, PIN_RX_MIX_BP); } } else { gpio_clear(PORT_MIX_BYPASS, PIN_MIX_BYPASS); gpio_set(PORT_NO_MIX_BYPASS, PIN_NO_MIX_BYPASS); gpio_clear(PORT_TX_MIX_BP, PIN_TX_MIX_BP); gpio_clear(PORT_RX_MIX_BP, PIN_RX_MIX_BP); } if (ctrl & SWITCHCTRL_HP) { gpio_set(PORT_HP, PIN_HP); gpio_clear(PORT_LP, PIN_LP); } else { gpio_clear(PORT_HP, PIN_HP); gpio_set(PORT_LP, PIN_LP); } if (ctrl & SWITCHCTRL_AMP_BYPASS) { gpio_set(PORT_AMP_BYPASS, PIN_AMP_BYPASS); gpio_clear(PORT_TX_AMP, PIN_TX_AMP); gpio_set(PORT_NO_TX_AMP_PWR, PIN_NO_TX_AMP_PWR); gpio_clear(PORT_RX_AMP, PIN_RX_AMP); gpio_set(PORT_NO_RX_AMP_PWR, PIN_NO_RX_AMP_PWR); } else if (ctrl & SWITCHCTRL_TX) { gpio_clear(PORT_AMP_BYPASS, PIN_AMP_BYPASS); gpio_set(PORT_TX_AMP, PIN_TX_AMP); gpio_clear(PORT_NO_TX_AMP_PWR, PIN_NO_TX_AMP_PWR); gpio_clear(PORT_RX_AMP, PIN_RX_AMP); gpio_set(PORT_NO_RX_AMP_PWR, PIN_NO_RX_AMP_PWR); } else { gpio_clear(PORT_AMP_BYPASS, PIN_AMP_BYPASS); gpio_clear(PORT_TX_AMP, PIN_TX_AMP); gpio_set(PORT_NO_TX_AMP_PWR, PIN_NO_TX_AMP_PWR); gpio_set(PORT_RX_AMP, PIN_RX_AMP); gpio_clear(PORT_NO_RX_AMP_PWR, PIN_NO_RX_AMP_PWR); } /* * These normally shouldn't be set post-Jawbreaker, but they can be * used to explicitly turn off power to the amplifiers while AMP_BYPASS * is unset: */ if (ctrl & SWITCHCTRL_NO_TX_AMP_PWR) gpio_set(PORT_NO_TX_AMP_PWR, PIN_NO_TX_AMP_PWR); if (ctrl & SWITCHCTRL_NO_RX_AMP_PWR) gpio_set(PORT_NO_RX_AMP_PWR, PIN_NO_RX_AMP_PWR); if (ctrl & SWITCHCTRL_ANT_PWR) { rffc5071_set_gpo(0x00); /* turn on antenna power by clearing GPO1 */ } else { rffc5071_set_gpo(0x01); /* turn off antenna power by setting GPO1 */ } }
static void switchctrl_set_hackrf_one(rf_path_t* const rf_path, uint8_t ctrl) { if (ctrl & SWITCHCTRL_TX) { gpio_set(rf_path->gpio_tx); gpio_clear(rf_path->gpio_rx); } else { gpio_clear(rf_path->gpio_tx); gpio_set(rf_path->gpio_rx); } if (ctrl & SWITCHCTRL_MIX_BYPASS) { gpio_set(rf_path->gpio_mix_bypass); gpio_clear(rf_path->gpio_no_mix_bypass); if (ctrl & SWITCHCTRL_TX) { gpio_set(rf_path->gpio_tx_mix_bp); gpio_clear(rf_path->gpio_rx_mix_bp); } else { gpio_clear(rf_path->gpio_tx_mix_bp); gpio_set(rf_path->gpio_rx_mix_bp); } } else { gpio_clear(rf_path->gpio_mix_bypass); gpio_set(rf_path->gpio_no_mix_bypass); gpio_clear(rf_path->gpio_tx_mix_bp); gpio_clear(rf_path->gpio_rx_mix_bp); } if (ctrl & SWITCHCTRL_HP) { gpio_set(rf_path->gpio_hp); gpio_clear(rf_path->gpio_lp); } else { gpio_clear(rf_path->gpio_hp); gpio_set(rf_path->gpio_lp); } if (ctrl & SWITCHCTRL_AMP_BYPASS) { gpio_set(rf_path->gpio_amp_bypass); gpio_clear(rf_path->gpio_tx_amp); gpio_set(rf_path->gpio_no_tx_amp_pwr); gpio_clear(rf_path->gpio_rx_amp); gpio_set(rf_path->gpio_no_rx_amp_pwr); } else if (ctrl & SWITCHCTRL_TX) { gpio_clear(rf_path->gpio_amp_bypass); gpio_set(rf_path->gpio_tx_amp); gpio_clear(rf_path->gpio_no_tx_amp_pwr); gpio_clear(rf_path->gpio_rx_amp); gpio_set(rf_path->gpio_no_rx_amp_pwr); } else { gpio_clear(rf_path->gpio_amp_bypass); gpio_clear(rf_path->gpio_tx_amp); gpio_set(rf_path->gpio_no_tx_amp_pwr); gpio_set(rf_path->gpio_rx_amp); gpio_clear(rf_path->gpio_no_rx_amp_pwr); } /* * These normally shouldn't be set post-Jawbreaker, but they can be * used to explicitly turn off power to the amplifiers while AMP_BYPASS * is unset: */ if (ctrl & SWITCHCTRL_NO_TX_AMP_PWR) gpio_set(rf_path->gpio_no_tx_amp_pwr); if (ctrl & SWITCHCTRL_NO_RX_AMP_PWR) gpio_set(rf_path->gpio_no_rx_amp_pwr); if (ctrl & SWITCHCTRL_ANT_PWR) { rffc5071_set_gpo(&rffc5072, 0x00); /* turn on antenna power by clearing GPO1 */ } else { rffc5071_set_gpo(&rffc5072, 0x01); /* turn off antenna power by setting GPO1 */ } }