SDR: Add option to swap RX and TX frequencies (for testing)

This commit is contained in:
Andreas Eversberg 2017-08-10 17:42:54 +02:00
parent f2d439c1ae
commit 3afcac8342
4 changed files with 25 additions and 3 deletions

View File

@ -1,6 +1,7 @@
extern int num_kanal; extern int num_kanal;
extern int kanal[]; extern int kanal[];
extern int swap_links;
extern int num_audiodev; extern int num_audiodev;
extern const char *audiodev[]; extern const char *audiodev[];
extern int use_sdr; extern int use_sdr;

View File

@ -78,6 +78,8 @@ const char *write_iq_tx_wave = NULL;
const char *write_iq_rx_wave = NULL; const char *write_iq_rx_wave = NULL;
const char *read_iq_tx_wave = NULL; const char *read_iq_tx_wave = NULL;
const char *read_iq_rx_wave = NULL; const char *read_iq_rx_wave = NULL;
int sdr_swap_links = 0;
void print_help_common(const char *arg0, const char *ext_usage) void print_help_common(const char *arg0, const char *ext_usage)
{ {
printf("Usage: %s -k <kanal/channel> %s[options] [station-id]\n", arg0, ext_usage); printf("Usage: %s -k <kanal/channel> %s[options] [station-id]\n", arg0, ext_usage);
@ -179,6 +181,8 @@ void print_help_common(const char *arg0, const char *ext_usage)
printf(" Replace received IQ data by given wave file.\n"); printf(" Replace received IQ data by given wave file.\n");
printf(" --read-iq-tx-wave <file>\n"); printf(" --read-iq-tx-wave <file>\n");
printf(" Replace transmitted IQ data by given wave file.\n"); printf(" Replace transmitted IQ data by given wave file.\n");
printf(" --sdr-swap-links\n");
printf(" Swap RX and TX frequencies for loopback tests over the air.r\n");
#endif #endif
printf("\nNetwork specific options:\n"); printf("\nNetwork specific options:\n");
} }
@ -220,6 +224,7 @@ void print_hotkeys_common(void)
#define OPT_WRITE_IQ_TX_WAVE 1113 #define OPT_WRITE_IQ_TX_WAVE 1113
#define OPT_READ_IQ_RX_WAVE 1114 #define OPT_READ_IQ_RX_WAVE 1114
#define OPT_READ_IQ_TX_WAVE 1115 #define OPT_READ_IQ_TX_WAVE 1115
#define OPT_SDR_SWAP_LINKS 1116
static struct option long_options_common[] = { static struct option long_options_common[] = {
{"help", 0, 0, 'h'}, {"help", 0, 0, 'h'},
@ -260,6 +265,7 @@ static struct option long_options_common[] = {
{"write-iq-tx-wave", 1, 0, OPT_WRITE_IQ_TX_WAVE}, {"write-iq-tx-wave", 1, 0, OPT_WRITE_IQ_TX_WAVE},
{"read-iq-rx-wave", 1, 0, OPT_READ_IQ_RX_WAVE}, {"read-iq-rx-wave", 1, 0, OPT_READ_IQ_RX_WAVE},
{"read-iq-tx-wave", 1, 0, OPT_READ_IQ_TX_WAVE}, {"read-iq-tx-wave", 1, 0, OPT_READ_IQ_TX_WAVE},
{"sdr-swap-links", 0, 0, OPT_SDR_SWAP_LINKS},
{0, 0, 0, 0} {0, 0, 0, 0}
}; };
@ -487,6 +493,10 @@ void opt_switch_common(int c, char *arg0, int *skip_args)
read_iq_tx_wave = strdup(optarg); read_iq_tx_wave = strdup(optarg);
*skip_args += 2; *skip_args += 2;
break; break;
case OPT_SDR_SWAP_LINKS:
sdr_swap_links = 1;
*skip_args += 1;
break;
default: default:
exit (0); exit (0);
} }
@ -570,7 +580,7 @@ void main_common(int *quit, int latency, int interval, void (*myhandler)(void),
sdr_samplerate = samplerate; sdr_samplerate = samplerate;
if (sdr_bandwidth == 0.0) if (sdr_bandwidth == 0.0)
sdr_bandwidth = sdr_samplerate; sdr_bandwidth = sdr_samplerate;
rc = sdr_init(sdr_uhd, sdr_soapy, sdr_channel, sdr_device_args, sdr_stream_args, sdr_tune_args, sdr_tx_antenna, sdr_rx_antenna, sdr_tx_gain, sdr_rx_gain, sdr_samplerate, sdr_bandwidth, write_iq_tx_wave, write_iq_rx_wave, read_iq_tx_wave, read_iq_rx_wave, latspl); rc = sdr_init(sdr_uhd, sdr_soapy, sdr_channel, sdr_device_args, sdr_stream_args, sdr_tune_args, sdr_tx_antenna, sdr_rx_antenna, sdr_tx_gain, sdr_rx_gain, sdr_samplerate, sdr_bandwidth, write_iq_tx_wave, write_iq_rx_wave, read_iq_tx_wave, read_iq_rx_wave, latspl, sdr_swap_links);
if (rc < 0) if (rc < 0)
return; return;
#endif #endif

View File

@ -70,6 +70,7 @@ typedef struct sdr_thread {
double max_fill_timer; /* timer to display/reset maximum fill */ double max_fill_timer; /* timer to display/reset maximum fill */
} sdr_thread_t; } sdr_thread_t;
/* preferences */
static int sdr_use_uhd, sdr_use_soapy; static int sdr_use_uhd, sdr_use_soapy;
static int sdr_channel; static int sdr_channel;
static const char *sdr_device_args, *sdr_stream_args, *sdr_tune_args; static const char *sdr_device_args, *sdr_stream_args, *sdr_tune_args;
@ -82,8 +83,9 @@ static int sdr_oversample;
static int sdr_latspl; static int sdr_latspl;
static int sdr_threads; static int sdr_threads;
static sdr_thread_t sdr_thread_read, sdr_thread_write; static sdr_thread_t sdr_thread_read, sdr_thread_write;
static int sdr_swap_links;
int sdr_init(int sdr_uhd, int sdr_soapy, int channel, const char *device_args, const char *stream_args, const char *tune_args, const char *tx_antenna, const char *rx_antenna, double tx_gain, double rx_gain, int samplerate, double bandwidth, const char *write_iq_tx_wave, const char *write_iq_rx_wave, const char *read_iq_tx_wave, const char *read_iq_rx_wave, int latspl) int sdr_init(int sdr_uhd, int sdr_soapy, int channel, const char *device_args, const char *stream_args, const char *tune_args, const char *tx_antenna, const char *rx_antenna, double tx_gain, double rx_gain, int samplerate, double bandwidth, const char *write_iq_tx_wave, const char *write_iq_rx_wave, const char *read_iq_tx_wave, const char *read_iq_rx_wave, int latspl, int swap_links)
{ {
PDEBUG(DSDR, DEBUG_DEBUG, "Init SDR\n"); PDEBUG(DSDR, DEBUG_DEBUG, "Init SDR\n");
@ -106,6 +108,7 @@ int sdr_init(int sdr_uhd, int sdr_soapy, int channel, const char *device_args, c
sdr_samplerate = samplerate; sdr_samplerate = samplerate;
sdr_oversample = 1; sdr_oversample = 1;
sdr_latspl = latspl; sdr_latspl = latspl;
sdr_swap_links = swap_links;
return 0; return 0;
} }
@ -312,6 +315,14 @@ void *sdr_open(const char __attribute__((__unused__)) *audiodev, double *tx_freq
} }
} }
if (sdr_swap_links) {
double temp;
PDEBUG(DSDR, DEBUG_NOTICE, "Sapping RX and TX frequencies!\n");
temp = rx_center_frequency;
rx_center_frequency = tx_center_frequency;
tx_center_frequency = temp;
}
#ifdef HAVE_UHD #ifdef HAVE_UHD
if (sdr_use_uhd) { if (sdr_use_uhd) {
rc = uhd_open(sdr_channel, sdr_device_args, sdr_stream_args, sdr_tune_args, sdr_tx_antenna, sdr_rx_antenna, tx_center_frequency, rx_center_frequency, sdr_samplerate, sdr_tx_gain, sdr_rx_gain, sdr_bandwidth); rc = uhd_open(sdr_channel, sdr_device_args, sdr_stream_args, sdr_tune_args, sdr_tx_antenna, sdr_rx_antenna, tx_center_frequency, rx_center_frequency, sdr_samplerate, sdr_tx_gain, sdr_rx_gain, sdr_bandwidth);

View File

@ -1,5 +1,5 @@
int sdr_init(int sdr_uhd, int sdr_soapy, int channel, const char *device_args, const char *stream_args, const char *tune_args, const char *tx_antenna, const char *rx_antenna, double tx_gain, double rx_gain, int samplerate, double bandwidth, const char *write_iq_tx_wave, const char *write_iq_rx_wave, const char *read_iq_tx_wave, const char *read_iq_rx_wave, int latspl); int sdr_init(int sdr_uhd, int sdr_soapy, int channel, const char *device_args, const char *stream_args, const char *tune_args, const char *tx_antenna, const char *rx_antenna, double tx_gain, double rx_gain, int samplerate, double bandwidth, const char *write_iq_tx_wave, const char *write_iq_rx_wave, const char *read_iq_tx_wave, const char *read_iq_rx_wave, int latspl, int swap_links);
int sdr_start(void *inst); int sdr_start(void *inst);
void *sdr_open(const char *audiodev, double *tx_frequency, double *rx_frequency, int channels, double paging_frequency, int samplerate, double bandwidth, double sample_deviation); void *sdr_open(const char *audiodev, double *tx_frequency, double *rx_frequency, int channels, double paging_frequency, int samplerate, double bandwidth, double sample_deviation);
void sdr_close(void *inst); void sdr_close(void *inst);