Esempio n. 1
0
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
}
Esempio n. 2
0
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
}
Esempio n. 3
0
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 */
	}
}
Esempio n. 4
0
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 */
	}
}