import subprocess import numpy as np # type: ignore import pytest # type: ignore from ria_toolkit_oss.datatypes.recording import Recording from ria_toolkit_oss.sdr.hackrf import HackRF SAMPLE_RATE = int(1e6) CENTER_FREQUENCY = int(3440e6) CHANNEL = 0 ABS_GAIN = 10 REL_GAIN = -37 t = np.linspace(0, 1, int(1e6 * 1), endpoint=False) angular_frequency = 2 * np.pi * 1 SINE_WAVE = 10 * np.exp(1j * angular_frequency * t) def radio_connected() -> bool: try: # Example: check if a specific USB device is present result = subprocess.run(["lsusb"], capture_output=True, text=True, check=True) return "hackrf" in result.stdout.lower() except Exception: return False @pytest.mark.skipif(not radio_connected(), reason="Required radio not connected") def test_hackrf_relative_mode(): try: radio = HackRF() radio.init_tx( sample_rate=SAMPLE_RATE, center_frequency=CENTER_FREQUENCY, channel=CHANNEL, gain=REL_GAIN, gain_mode="relative", ) assert int(radio.radio.txvga_gain) == ABS_GAIN finally: radio.close() @pytest.mark.skipif(not radio_connected(), reason="Required radio not connected") def test_hackrf_rx(): try: rx_radio = HackRF() try: rx_radio.init_rx( sample_rate=SAMPLE_RATE, center_frequency=CENTER_FREQUENCY, channel=CHANNEL, gain=ABS_GAIN, gain_mode="absolute", ) except NotImplementedError: assert True finally: rx_radio.close() @pytest.mark.skipif(not radio_connected(), reason="Required radio not connected") def test_hackrf_tx(): try: tx_radio = HackRF() tx_radio.init_tx( sample_rate=SAMPLE_RATE, center_frequency=CENTER_FREQUENCY, channel=CHANNEL, gain=ABS_GAIN, ) recording = Recording(data=SINE_WAVE, metadata={"data": "sine_wave"}) tx_radio.tx_recording(recording=recording, num_samples=SAMPLE_RATE) assert True finally: tx_radio.close()