aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthias P. Braendli <matthias.braendli@mpb.li>2022-01-09 13:56:30 +0100
committerMatthias P. Braendli <matthias.braendli@mpb.li>2022-01-09 13:56:30 +0100
commita0e7a58447006cdb1e10f781323c88bd08e66eea (patch)
tree23f5dc6ae6141e4630812fece0f4cb5eb8b54d41
parent3387a704bea2cb33ec389b7276ef7c293701fe5e (diff)
parent197f421c98f929d4266a09bc9d667b7869e09c27 (diff)
downloadosmo-fl2k-a0e7a58447006cdb1e10f781323c88bd08e66eea.tar.gz
osmo-fl2k-a0e7a58447006cdb1e10f781323c88bd08e66eea.tar.bz2
osmo-fl2k-a0e7a58447006cdb1e10f781323c88bd08e66eea.zip
Merge remote-tracking branch 'upstream/master' into iq
-rw-r--r--CMakeLists.txt5
-rw-r--r--src/libosmo-fl2k.c39
-rw-r--r--src/rds_mod.c4
3 files changed, 31 insertions, 17 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 5fb110f..84bc55d 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -24,6 +24,11 @@ project(libosmo-fl2k C)
include(GNUInstallDirs)
+# CMP0075 Include file check macros honor CMAKE_REQUIRED_LIBRARIES
+if(POLICY CMP0075)
+ cmake_policy(SET CMP0075 NEW)
+endif()
+
#select the release build type by default to get optimization flags
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE "Release")
diff --git a/src/libosmo-fl2k.c b/src/libosmo-fl2k.c
index afc4d4f..99dcd33 100644
--- a/src/libosmo-fl2k.c
+++ b/src/libosmo-fl2k.c
@@ -2,7 +2,7 @@
* osmo-fl2k, turns FL2000-based USB 3.0 to VGA adapters into
* low cost DACs
*
- * Copyright (C) 2016-2018 by Steve Markgraf <steve@steve-m.de>
+ * Copyright (C) 2016-2020 by Steve Markgraf <steve@steve-m.de>
*
* SPDX-License-Identifier: GPL-2.0+
*
@@ -250,9 +250,9 @@ int fl2k_set_sample_rate(fl2k_dev_t *dev, uint32_t target_freq)
error = sample_clock - (double)target_freq;
/* Keep closest match */
- if (fabsf(error) < last_error) {
+ if (fabs(error) < last_error) {
result_reg = reg;
- last_error = fabsf(error);
+ last_error = fabs(error);
}
}
}
@@ -262,7 +262,7 @@ int fl2k_set_sample_rate(fl2k_dev_t *dev, uint32_t target_freq)
error = sample_clock - (double)target_freq;
dev->rate = sample_clock;
- if (fabsf(error) > 1)
+ if (fabs(error) > 1)
fprintf(stderr, "Requested sample rate %d not possible, using"
" %f, error is %f\n", target_freq, sample_clock, error);
@@ -444,11 +444,16 @@ int fl2k_open(fl2k_dev_t **out_dev, uint32_t index)
fprintf(stderr, "usb_claim_interface 0 error %d\n", r);
goto err;
}
- r = libusb_claim_interface(dev->devh, 1);
+ r = libusb_set_interface_alt_setting(dev->devh, 0, 1);
if (r < 0) {
- fprintf(stderr, "usb_claim_interface 1 error %d\n", r);
- goto err;
+ fprintf(stderr, "Failed to switch interface 0 to "
+ "altsetting 1, trying to use interface 1\n");
+
+ r = libusb_claim_interface(dev->devh, 1);
+ if (r < 0) {
+ fprintf(stderr, "Could not claim interface 1: %d\n", r);
+ }
}
r = fl2k_init_device(dev);
@@ -573,6 +578,10 @@ static int fl2k_alloc_submit_transfers(fl2k_dev_t *dev)
{
unsigned int i;
int r = 0;
+ const char *incr_usbfs = "Please increase your allowed usbfs buffer"
+ " size with the following command:\n"
+ "echo 0 > /sys/module/usbcore/parameters/"
+ "usbfs_memory_mb\n";
if (!dev)
return FL2K_ERROR_INVALID_PARAM;
@@ -613,8 +622,9 @@ static int fl2k_alloc_submit_transfers(fl2k_dev_t *dev)
}
} else {
fprintf(stderr, "Failed to allocate zero-copy "
- "buffer for transfer %d\nFalling "
- "back to buffers in userspace\n", i);
+ "buffer for transfer %d\n%sFalling "
+ "back to buffers in userspace\n",
+ i, incr_usbfs);
dev->use_zerocopy = 0;
break;
}
@@ -668,12 +678,8 @@ static int fl2k_alloc_submit_transfers(fl2k_dev_t *dev)
dev->xfer_info[i].state = BUF_SUBMITTED;
if (r < 0) {
- fprintf(stderr, "Failed to submit transfer %i\n"
- "Please increase your allowed "
- "usbfs buffer size with the "
- "following command:\n"
- "echo 0 > /sys/module/usbcore"
- "/parameters/usbfs_memory_mb\n", i);
+ fprintf(stderr, "Failed to submit transfer %i\n%s",
+ i, incr_usbfs);
break;
}
}
@@ -781,6 +787,9 @@ static void *fl2k_usb_worker(void *arg)
}
}
+ /* wake up sample worker */
+ pthread_cond_signal(&dev->buf_cond);
+
/* wait for sample worker thread to finish before freeing buffers */
pthread_join(dev->sample_worker_thread, NULL);
_fl2k_free_async_buffers(dev);
diff --git a/src/rds_mod.c b/src/rds_mod.c
index 8e31b0d..687aa65 100644
--- a/src/rds_mod.c
+++ b/src/rds_mod.c
@@ -38,8 +38,8 @@ extern double waveform_biphase[576];
struct {
uint16_t pi;
int ta;
- char ps[PS_LENGTH];
- char rt[RT_LENGTH];
+ char ps[PS_LENGTH+1];
+ char rt[RT_LENGTH+1];
} rds_params = { 0 };
/* The RDS error-detection code generator polynomial is