aboutsummaryrefslogtreecommitdiffstats
path: root/src/fl2k_file.c
diff options
context:
space:
mode:
authorMatthias P. Braendli <matthias.braendli@mpb.li>2018-04-30 20:12:42 +0200
committerMatthias P. Braendli <matthias.braendli@mpb.li>2018-05-20 19:45:38 +0200
commiteb11e68412b49b0945ab6bb332ac9486f1ebeb9e (patch)
tree768091baf5dd8150d33b3f8275316bb92d31608e /src/fl2k_file.c
parent16b102efcdae6c33b1761e4f2da8c507eed03bb4 (diff)
downloadosmo-fl2k-eb11e68412b49b0945ab6bb332ac9486f1ebeb9e.tar.gz
osmo-fl2k-eb11e68412b49b0945ab6bb332ac9486f1ebeb9e.tar.bz2
osmo-fl2k-eb11e68412b49b0945ab6bb332ac9486f1ebeb9e.zip
Add support for interleaved R/G samples
This is useful for transmitting complex I/Q data on the red and green DACs
Diffstat (limited to 'src/fl2k_file.c')
-rw-r--r--src/fl2k_file.c23
1 files changed, 17 insertions, 6 deletions
diff --git a/src/fl2k_file.c b/src/fl2k_file.c
index 1d3697d..0da1cbc 100644
--- a/src/fl2k_file.c
+++ b/src/fl2k_file.c
@@ -40,7 +40,8 @@
static fl2k_dev_t *dev = NULL;
static volatile int do_exit = 0;
-static volatile int repeat = 1;
+static int repeat = 1;
+static int interleaved = 1;
FILE *file;
char *txbuf = NULL;
@@ -52,6 +53,7 @@ void usage(void)
"\t[-d device_index (default: 0)]\n"
"\t[-r repeat file (default: 1)]\n"
"\t[-s samplerate (default: 100 MS/s)]\n"
+ "\t[-i interleave (input samples are interleaved Red/Green values, useful for I/Q data, default: 0)]\n"
"\tfilename (use '-' to read from stdin)\n\n"
);
exit(1);
@@ -80,14 +82,20 @@ static void sighandler(int signum)
void fl2k_callback(fl2k_data_info_t *data_info)
{
- int r, left = FL2K_BUF_LEN;
+ int r;
+ const int required_samples = FL2K_BUF_LEN * (interleaved ? 2 : 1);
+ int left = required_samples;
static uint32_t repeat_cnt = 0;
data_info->sampletype_signed = 1;
- data_info->r_buf = txbuf;
+ if (interleaved) {
+ data_info->iq_buf = txbuf;
+ } else {
+ data_info->r_buf = txbuf;
+ }
while (!do_exit && (left > 0)) {
- r = fread(txbuf + (FL2K_BUF_LEN - left), 1, left, file);
+ r = fread(txbuf + (required_samples - left), 1, left, file);
if (ferror(file))
fprintf(stderr, "File Error\n");
@@ -120,11 +128,14 @@ int main(int argc, char **argv)
void *status;
char *filename = NULL;
- while ((opt = getopt(argc, argv, "d:r:s:")) != -1) {
+ while ((opt = getopt(argc, argv, "d:i:r:s:")) != -1) {
switch (opt) {
case 'd':
dev_index = (uint32_t)atoi(optarg);
break;
+ case 'i':
+ interleaved = (int)atoi(optarg);
+ break;
case 'r':
repeat = (int)atoi(optarg);
break;
@@ -151,7 +162,7 @@ int main(int argc, char **argv)
goto out;
}
- txbuf = malloc(FL2K_BUF_LEN);
+ txbuf = malloc(FL2K_BUF_LEN * (interleaved ? 2 : 1));
if (!txbuf) {
fprintf(stderr, "malloc error!\n");
goto out;