Commit Graph

99 Commits

Author SHA1 Message Date
Steve Markgraf 81833a1cf6 lib: disable usbfs zero-copy support by default
Although we added a detection mechanism for the presence of the Kernel
bug earlier, reading from the incorrectly mapped memory might cause a
bus error on some ARM systems.

With the overall performance benefit being rather minimal for the
data rates of rtl-sdr, disable zero-copy by default.
2019-07-16 23:49:48 +02:00
Steve Markgraf be1d1206bf lib: fix memory leak in rtlsdr_open()
Thanks to Vincent Perrier for reporting the bug.
2019-07-16 23:31:31 +02:00
Steve Markgraf f68bb2fa77 lib: Add workaround for Linux usbfs mmap() bug
The Linux Kernel has a bug on ARM/ARM64 systems where the USB CMA
memory is incorrectly mapped to userspace, breaking zerocopy.

When the Kernel allocates the memory, it clears it with memset().
If the mapping worked correctly, we should have zeroed out buffers,
if it doesn't, we get random Kernel memory. We now check for this,
and fall back to buffers in userspace if that's the case.

Signed-off-by: Steve Markgraf <steve@steve-m.de>
2018-10-07 01:25:07 +02:00
Steve Markgraf a854ae8b48 lib: use USB zero-copy transfers if possible
Decreases CPU load especially for embedded machines.
Requires Linux >= 4.6 and libusb >= 1.0.21. If this
is not the case or the allocation fails, we will
fall back to buffers allocated in userspace.

Signed-off-by: Steve Markgraf <steve@steve-m.de>
2018-05-01 14:23:37 +02:00
Harald Welte e92b11bfb7 cosmetic: Fix "implicit fall-through" gcc 7.3.0 warnings 2018-04-18 23:59:17 +02:00
Steve Markgraf 4520f001d8 lib: fix FC0012 reset GPIO
Since a typo in rtlsdr_set_gpio_output() was fixed,
FC0012 tuners were not detected anymore, as the reset pin
is actually 4, not 5.

Thanks to David Basden et al for reporting the bug.

Signed-off-by: Steve Markgraf <steve@steve-m.de>
2018-02-20 22:24:46 +01:00
Lucas Teske 2be1612e60 lib: Use GPIO P0 to toggle an (optional) bias-t
At least one distributor of rtl-sdr dongles (rtl-sdr.com) added
a bias-t to their dongles which could be toggled via GPIO P0 of the
RTL2832U chip.

source: http://www.rtl-sdr.com/rtl-sdr-blog-v-3-dongles-user-guide/

Signed-off-by: Steve Markgraf <steve@steve-m.de>
2017-06-09 15:06:23 +02:00
Lucas Teske ba64a7459a lib: fix direction bit in GPIO code
source: http://lea.hamradio.si/~s57uuu/mischam/rtlsdr/ports.html

* Removed unnecessary comment of old code.
Signed-off-by: Fabian P. Schmidt <kerel-fs@gmx.de>
Signed-off-by: Steve Markgraf <steve@steve-m.de>
2017-06-09 15:06:09 +02:00
Steve Markgraf e3e6ee23b7 lib: add new HanfTek dongle
Signed-off-by: Steve Markgraf <steve@steve-m.de>
2016-11-27 12:19:44 +01:00
Hoernchen e3c03f738f lib: check for libusb init failure 2015-06-09 01:53:23 +02:00
Jiří Pinkava 92df068dc5 New functions rtlsdr_set_tuner_bandwidth()
Signed-off-by: Steve Markgraf <steve@steve-m.de>
2015-05-16 00:38:01 +02:00
Jiří Pinkava d892279085 Allow setting bandwidth for R820T
This improves SDR performence for nearby channel interference.
As a sideeffect also improves dynamic range becase ADC is not overloaded
by onwanted singlas.

Signed-off-by: Steve Markgraf <steve@steve-m.de>
2015-05-16 00:37:17 +02:00
Steve Markgraf 89f73b183f lib: change default number of transfers to 15
So far we had 32 * 256KB which was a bit overkill,
15 are more than enough.

15 was chosen instead of 16 because at least on Linux
there seems to be a system-wide limit of 63 transfers
(when they are 256KB large), so 4 dongles can be used
on a single machine without lowering the default transfer
number.

Signed-off-by: Steve Markgraf <steve@steve-m.de>
2014-02-10 23:57:19 +01:00
Steve Markgraf 5b0137abaf lib: handle events after canceling transfers
Otherwise the new transfer status does not propagate
into the xfer->status and we try to cancel all transfers
twice.

Also replace the ifdefs with a single macro for backwards
compatibility.

Signed-off-by: Steve Markgraf <steve@steve-m.de>
2014-02-09 15:50:32 +01:00
Steve Markgraf 50743b1ccb remove unused variables, type fixes
Signed-off-by: Steve Markgraf <steve@steve-m.de>
2014-02-04 19:53:24 +01:00
Denys Berkovskyy 2c171630fa lib: add missing 'goto' in tuner detection code
Add missing ‘goto’ to avoid checks for other tuners when
R828D tuner is found.

Signed-off-by: Steve Markgraf <steve@steve-m.de>
2014-01-29 00:17:57 +01:00
Steve Markgraf a2bc5b5117 lib/cmake: check for libusb_handle_events_timeout_completed()
libusb < 1.0.9 doesn't have libusb_handle_events_timeout_completed(),
but libusb <= 1.0.8 doesn't have version.h, so we need to check
for the function.

The cmake-code was borrowed from UHD, which also checks
for libusb_error_name(), we add that as well since it might come
handy later on.

Signed-off-by: Steve Markgraf <steve@steve-m.de>
2014-01-24 03:57:53 +01:00
Steve Markgraf 929972f835 lib: add SVEON STV27, sort device list
Signed-off-by: Steve Markgraf <steve@steve-m.de>
2014-01-24 01:06:55 +01:00
Steve Markgraf 3409c0315f lib: speed up exiting from async handler
Now we're using libusb_handle_events_timeout_completed()
instead of the deprecated libusb_handle_events_timeout(),
and notify our async state machine when rtlsdr_cancel_async()
is called. This speeds up exiting from any program that uses the
device asynchronously.

Signed-off-by: Steve Markgraf <steve@steve-m.de>
2014-01-24 00:44:36 +01:00
Steve Markgraf 003bd51167 lib: check for validity of sample rates
Thanks to Joris van Rantwijk for finding what seems to be
a hardware limitation/bug (bit 28 of the rsamp register being
forced to the value of bit 27).

Signed-off-by: Steve Markgraf <steve@steve-m.de>
2014-01-05 22:51:44 +01:00
Steve Markgraf d683b128f9 lib: abort if submitting transfer fails, don't deadlock when cancelling fails
Signed-off-by: Steve Markgraf <steve@steve-m.de>
2014-01-03 05:56:43 +01:00
Steve Markgraf 67302f4665 lib: add yet another Terratec OEM stick
Signed-off-by: Steve Markgraf <steve@steve-m.de>
2013-12-26 19:33:30 +01:00
Steve Markgraf 1050b96b47 lib: add OEM versions of Terratec NOXON sticks
Signed-off-by: Steve Markgraf <steve@steve-m.de>
2013-12-24 02:10:05 +01:00
Steve Markgraf 5f38c0519d change device name of OEM dongles
Signed-off-by: Steve Markgraf <steve@steve-m.de>
2013-12-16 21:34:01 +01:00
Steve Markgraf e1bf239a6d lib: add KWorld KW-UB450-T to device list
The TUA9001 tuner it uses is unsupported
at the moment, though.

Signed-off-by: Steve Markgraf <steve@steve-m.de>
2013-12-08 16:48:07 +01:00
Jiri Pinkava a42659602d lib: use FIR coefficients instead of magic + documentation
Signed-off-by: Steve Markgraf <steve@steve-m.de>
2013-12-02 01:31:14 +01:00
Steve Markgraf fbfa127889 tuner_r82xx: enable multi-byte I2C transfers
This should speed some multi register reads up a bit.

Signed-off-by: Steve Markgraf <steve@steve-m.de>
2013-11-16 21:10:31 +01:00
Steve Markgraf 360dd369bd add Sveon STV21 stick to device list
Signed-off-by: Steve Markgraf <steve@steve-m.de>
2013-11-10 01:18:42 +01:00
Steve Markgraf 86be727e52 lib: declare fir coefficients as constant
Signed-off-by: Steve Markgraf <steve@steve-m.de>
2013-11-04 21:54:55 +01:00
Steve Markgraf 015c78a4ca remove e4k-specific I2C functions from library
Signed-off-by: Steve Markgraf <steve@steve-m.de>
2013-11-04 21:53:41 +01:00
Steve Markgraf aefd8b7d58 add Astrometa DVB-T/DVB-T2 stick
Signed-off-by: Steve Markgraf <steve@steve-m.de>
2013-11-04 21:52:31 +01:00
Steve Markgraf e61731d230 add support for R828D tuner
Signed-off-by: Steve Markgraf <steve@steve-m.de>
2013-11-04 21:51:35 +01:00
Steve Markgraf 230930e975 use new driver for R8XX tuners
Signed-off-by: Steve Markgraf <steve@steve-m.de>
2013-11-04 21:50:02 +01:00
Steve Markgraf cb8907dd4e add DigitalNow Quad DVB-T PCI-E card
Signed-off-by: Steve Markgraf <steve@steve-m.de>
2013-10-12 15:56:20 +02:00
Steve Markgraf 8c3a99c8f7 lib: add ASUS U3100MINI_PLUS_V2 to device list
Signed-off-by: Steve Markgraf <steve@steve-m.de>
2013-06-12 18:50:28 +02:00
Steve Markgraf 3e17ef2b55 lib: don't detach kernel driver by default
Since this feature also disconnects running instances
of librtlsdr that claimed the device, it is now disabled
by default and can only be enabled at compile time.

To enable it when building with cmake:
cmake . -DDETACH_KERNEL_DRIVER=ON

To enable it when building with automake:
./configure --enable-driver-detach

Signed-off-by: Steve Markgraf <steve@steve-m.de>
2013-06-04 20:57:43 +02:00
Steve Markgraf e202d0f92a lib: add WinFast DTV Dongle mini D
Thanks to Alan Beard for reporting.

Signed-off-by: Steve Markgraf <steve@steve-m.de>
2013-03-01 15:16:41 +01:00
Steve Markgraf 3c4aa46f5a lib: detach and reattach kernel driver if needed
Signed-off-by: Steve Markgraf <steve@steve-m.de>
2013-02-26 23:11:33 +01:00
Steve Markgraf f1803fe10f lib: special handling of dongle disconnect for OS != win32
libusb reacts differently to a device loss during runtime,
and sporadic errors can happen when starting a second
instance interfacing another dongle, thus we need to wait
for all transfers to fail before assuming the dongle has
been removed.

Signed-off-by: Steve Markgraf <steve@steve-m.de>
2013-02-17 16:43:29 +01:00
Steve Markgraf b656896f66 lib: remove "e.g. hama nano" from the default device description
This caused some confusion...

Signed-off-by: Steve Markgraf <steve@steve-m.de>
2013-01-29 00:30:09 +01:00
Hoernchen 3cbf139261 exit if our usb device disappears 2013-01-16 20:05:52 +01:00
Steve Markgraf 84f0a9084b lib: enable standby mode of e4k and r820t on exit
Since the R820T is a power hog and gets quite hot,
this makes sense, especially when being battery-
powered.

Signed-off-by: Steve Markgraf <steve@steve-m.de>
2013-01-16 01:43:45 +01:00
Hoernchen c338e5a8c1 let's not depend on libusb >= 1.0.9, avoid libusb_error_name() 2013-01-13 14:54:31 +01:00
Hoernchen 5d2d5a4ae4 more verbose error message if opening the usb device fails 2013-01-13 00:31:58 +01:00
Hoernchen f1ac20c371 disable force canceling for now to prevent crashes 2013-01-10 01:41:05 +01:00
Steve Markgraf 7840ec21d3 lib: reset device if needed
This improves the situation on hosts with flaky host
controllers like the Raspberry Pi and the WR703N.

Signed-off-by: Steve Markgraf <steve@steve-m.de>
2013-01-04 21:26:43 +01:00
Steve Markgraf 4b057fea0f rtlsdr_set_sample_rate(): don't access dev structure before checking for NULL
Thanks to Derek Lieber for reporting this bug.

Signed-off-by: Steve Markgraf <steve@steve-m.de>
2013-01-02 20:19:19 +01:00
Dimitri Stolnikov 314683a51e librtlsdr: remove unneeded casting
Signed-off-by: Hoernchen <la@tfc-server.de>
2012-12-29 16:06:26 +01:00
Steve Markgraf d3c9015d26 lib: add rtlsdr_get_index_by_serial()
This allows to open a device by a name (serial number string)
that has been programmed with rtl_eeprom -s.

Signed-off-by: Steve Markgraf <steve@steve-m.de>
2012-11-04 13:57:56 +01:00
Steve Markgraf b85ffcfea5 add library support for EEPROM access and tool for modification
rtl_eeprom can be used to modify the USB descriptor
strings etc.

Signed-off-by: Steve Markgraf <steve@steve-m.de>
2012-11-02 21:47:14 +01:00