forked from pool/rtl-sdr
Accepting request 1113642 from home:wkazubski:test:science
- new patch rtl-sdr-0022-add-rtl-sdr-blog-v4-support.patch adding support for new funcionality in RTL-SDR v4 dongle (taken from git tree) - fix for one minor rpmlint error OBS-URL: https://build.opensuse.org/request/show/1113642 OBS-URL: https://build.opensuse.org/package/show/hardware:sdr/rtl-sdr?expand=0&rev=23
This commit is contained in:
parent
a674f05f89
commit
20ffe1db6c
196
rtl-sdr-0022-add-rtl-sdr-blog-v4-support.patch
Normal file
196
rtl-sdr-0022-add-rtl-sdr-blog-v4-support.patch
Normal file
@ -0,0 +1,196 @@
|
|||||||
|
From 1261fbb285297da08f4620b18871b6d6d9ec2a7b Mon Sep 17 00:00:00 2001
|
||||||
|
From: rtlsdrblog <rtlsdrblog@gmail.com>
|
||||||
|
Date: Tue, 22 Aug 2023 04:16:00 +1200
|
||||||
|
Subject: [PATCH] add rtl-sdr blog v4 support
|
||||||
|
|
||||||
|
---
|
||||||
|
include/rtlsdr_i2c.h | 1 +
|
||||||
|
src/librtlsdr.c | 24 ++++++++++++-
|
||||||
|
src/tuner_r82xx.c | 83 ++++++++++++++++++++++++++++++++++++++------
|
||||||
|
3 files changed, 97 insertions(+), 11 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/include/rtlsdr_i2c.h b/include/rtlsdr_i2c.h
|
||||||
|
index 7676689..6faf141 100644
|
||||||
|
--- a/include/rtlsdr_i2c.h
|
||||||
|
+++ b/include/rtlsdr_i2c.h
|
||||||
|
@@ -1,6 +1,7 @@
|
||||||
|
#ifndef __I2C_H
|
||||||
|
#define __I2C_H
|
||||||
|
|
||||||
|
+int rtlsdr_check_dongle_model(void *dev, char *manufact_check, char *product_check);
|
||||||
|
uint32_t rtlsdr_get_tuner_clock(void *dev);
|
||||||
|
int rtlsdr_i2c_write_fn(void *dev, uint8_t addr, uint8_t *buf, int len);
|
||||||
|
int rtlsdr_i2c_read_fn(void *dev, uint8_t addr, uint8_t *buf, int len);
|
||||||
|
diff --git a/src/librtlsdr.c b/src/librtlsdr.c
|
||||||
|
index 096abae..ee13556 100644
|
||||||
|
--- a/src/librtlsdr.c
|
||||||
|
+++ b/src/librtlsdr.c
|
||||||
|
@@ -119,6 +119,8 @@ struct rtlsdr_dev {
|
||||||
|
int dev_lost;
|
||||||
|
int driver_active;
|
||||||
|
unsigned int xfer_errors;
|
||||||
|
+ char manufact[256];
|
||||||
|
+ char product[256];
|
||||||
|
};
|
||||||
|
|
||||||
|
void rtlsdr_set_gpio_bit(rtlsdr_dev_t *dev, uint8_t gpio, int val);
|
||||||
|
@@ -1430,6 +1432,16 @@ int rtlsdr_get_index_by_serial(const char *serial)
|
||||||
|
return -3;
|
||||||
|
}
|
||||||
|
|
||||||
|
+/* Returns true if the manufact_check and product_check strings match what is in the dongles EEPROM */
|
||||||
|
+int rtlsdr_check_dongle_model(void *dev, char *manufact_check, char *product_check)
|
||||||
|
+{
|
||||||
|
+ if ((strcmp(((rtlsdr_dev_t *)dev)->manufact, manufact_check) == 0&& strcmp(((rtlsdr_dev_t *)dev)->product, product_check) == 0))
|
||||||
|
+ return 1;
|
||||||
|
+
|
||||||
|
+ return 0;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+
|
||||||
|
int rtlsdr_open(rtlsdr_dev_t **out_dev, uint32_t index)
|
||||||
|
{
|
||||||
|
int r;
|
||||||
|
@@ -1528,6 +1540,9 @@ int rtlsdr_open(rtlsdr_dev_t **out_dev, uint32_t index)
|
||||||
|
rtlsdr_init_baseband(dev);
|
||||||
|
dev->dev_lost = 0;
|
||||||
|
|
||||||
|
+ /* Get device manufacturer and product id */
|
||||||
|
+ r = rtlsdr_get_usb_strings(dev, dev->manufact, dev->product, NULL);
|
||||||
|
+
|
||||||
|
/* Probe tuners */
|
||||||
|
rtlsdr_set_i2c_repeater(dev, 1);
|
||||||
|
|
||||||
|
@@ -1555,6 +1570,10 @@ int rtlsdr_open(rtlsdr_dev_t **out_dev, uint32_t index)
|
||||||
|
reg = rtlsdr_i2c_read_reg(dev, R828D_I2C_ADDR, R82XX_CHECK_ADDR);
|
||||||
|
if (reg == R82XX_CHECK_VAL) {
|
||||||
|
fprintf(stderr, "Found Rafael Micro R828D tuner\n");
|
||||||
|
+
|
||||||
|
+ if (rtlsdr_check_dongle_model(dev, "RTLSDRBlog", "Blog V4"))
|
||||||
|
+ fprintf(stderr, "RTL-SDR Blog V4 Detected\n");
|
||||||
|
+
|
||||||
|
dev->tuner_type = RTLSDR_TUNER_R828D;
|
||||||
|
goto found;
|
||||||
|
}
|
||||||
|
@@ -1588,7 +1607,10 @@ int rtlsdr_open(rtlsdr_dev_t **out_dev, uint32_t index)
|
||||||
|
|
||||||
|
switch (dev->tuner_type) {
|
||||||
|
case RTLSDR_TUNER_R828D:
|
||||||
|
- dev->tun_xtal = R828D_XTAL_FREQ;
|
||||||
|
+ /* If NOT an RTL-SDR Blog V4, set typical R828D 16 MHz freq. Otherwise, keep at 28.8 MHz. */
|
||||||
|
+ if (!(rtlsdr_check_dongle_model(dev, "RTLSDRBlog", "Blog V4"))) {
|
||||||
|
+ dev->tun_xtal = R828D_XTAL_FREQ;
|
||||||
|
+ }
|
||||||
|
/* fall-through */
|
||||||
|
case RTLSDR_TUNER_R820T:
|
||||||
|
/* disable Zero-IF mode */
|
||||||
|
diff --git a/src/tuner_r82xx.c b/src/tuner_r82xx.c
|
||||||
|
index 997abd7..1510fc3 100644
|
||||||
|
--- a/src/tuner_r82xx.c
|
||||||
|
+++ b/src/tuner_r82xx.c
|
||||||
|
@@ -33,6 +33,10 @@
|
||||||
|
#define MHZ(x) ((x)*1000*1000)
|
||||||
|
#define KHZ(x) ((x)*1000)
|
||||||
|
|
||||||
|
+#define HF 1
|
||||||
|
+#define VHF 2
|
||||||
|
+#define UHF 3
|
||||||
|
+
|
||||||
|
/*
|
||||||
|
* Static constants
|
||||||
|
*/
|
||||||
|
@@ -1098,8 +1102,23 @@ int r82xx_set_bandwidth(struct r82xx_priv *priv, int bw, uint32_t rate)
|
||||||
|
int r82xx_set_freq(struct r82xx_priv *priv, uint32_t freq)
|
||||||
|
{
|
||||||
|
int rc = -1;
|
||||||
|
- uint32_t lo_freq = freq + priv->int_freq;
|
||||||
|
+ int is_rtlsdr_blog_v4;
|
||||||
|
+ uint32_t upconvert_freq;
|
||||||
|
+ uint32_t lo_freq;
|
||||||
|
uint8_t air_cable1_in;
|
||||||
|
+ uint8_t open_d;
|
||||||
|
+ uint8_t band;
|
||||||
|
+ uint8_t cable_2_in;
|
||||||
|
+ uint8_t cable_1_in;
|
||||||
|
+ uint8_t air_in;
|
||||||
|
+
|
||||||
|
+ is_rtlsdr_blog_v4 = rtlsdr_check_dongle_model(priv->rtl_dev, "RTLSDRBlog", "Blog V4");
|
||||||
|
+
|
||||||
|
+ /* if it's an RTL-SDR Blog V4, automatically upconvert by 28.8 MHz if we tune to HF
|
||||||
|
+ * so that we don't need to manually set any upconvert offset in the SDR software */
|
||||||
|
+ upconvert_freq = is_rtlsdr_blog_v4 ? ((freq < MHZ(28.8)) ? (freq + MHZ(28.8)) : freq) : freq;
|
||||||
|
+
|
||||||
|
+ lo_freq = upconvert_freq + priv->int_freq;
|
||||||
|
|
||||||
|
rc = r82xx_set_mux(priv, lo_freq);
|
||||||
|
if (rc < 0)
|
||||||
|
@@ -1109,16 +1128,60 @@ int r82xx_set_freq(struct r82xx_priv *priv, uint32_t freq)
|
||||||
|
if (rc < 0 || !priv->has_lock)
|
||||||
|
goto err;
|
||||||
|
|
||||||
|
- /* switch between 'Cable1' and 'Air-In' inputs on sticks with
|
||||||
|
- * R828D tuner. We switch at 345 MHz, because that's where the
|
||||||
|
- * noise-floor has about the same level with identical LNA
|
||||||
|
- * settings. The original driver used 320 MHz. */
|
||||||
|
- air_cable1_in = (freq > MHZ(345)) ? 0x00 : 0x60;
|
||||||
|
+ if (is_rtlsdr_blog_v4) {
|
||||||
|
+ /* determine if notch filters should be on or off notches are turned OFF
|
||||||
|
+ * when tuned within the notch band and ON when tuned outside the notch band.
|
||||||
|
+ */
|
||||||
|
+ open_d = (freq <= MHZ(2.2) || (freq >= MHZ(85) && freq <= MHZ(112)) || (freq >= MHZ(172) && freq <= MHZ(242))) ? 0x00 : 0x08;
|
||||||
|
+ rc = r82xx_write_reg_mask(priv, 0x17, open_d, 0x08);
|
||||||
|
+
|
||||||
|
+ if (rc < 0)
|
||||||
|
+ return rc;
|
||||||
|
+
|
||||||
|
+ /* select tuner band based on frequency and only switch if there is a band change
|
||||||
|
+ *(to avoid excessive register writes when tuning rapidly)
|
||||||
|
+ */
|
||||||
|
+ band = (freq <= MHZ(28.8)) ? HF : ((freq > MHZ(28.8) && freq < MHZ(250)) ? VHF : UHF);
|
||||||
|
+
|
||||||
|
+ /* switch between tuner inputs on the RTL-SDR Blog V4 */
|
||||||
|
+ if (band != priv->input) {
|
||||||
|
+ priv->input = band;
|
||||||
|
+
|
||||||
|
+ /* activate cable 2 (HF input) */
|
||||||
|
+ cable_2_in = (band == HF) ? 0x08 : 0x00;
|
||||||
|
+ rc = r82xx_write_reg_mask(priv, 0x06, cable_2_in, 0x08);
|
||||||
|
|
||||||
|
- if ((priv->cfg->rafael_chip == CHIP_R828D) &&
|
||||||
|
- (air_cable1_in != priv->input)) {
|
||||||
|
- priv->input = air_cable1_in;
|
||||||
|
- rc = r82xx_write_reg_mask(priv, 0x05, air_cable1_in, 0x60);
|
||||||
|
+ if (rc < 0)
|
||||||
|
+ goto err;
|
||||||
|
+
|
||||||
|
+ /* activate cable 1 (VHF input) */
|
||||||
|
+ cable_1_in = (band == VHF) ? 0x40 : 0x00;
|
||||||
|
+ rc = r82xx_write_reg_mask(priv, 0x05, cable_1_in, 0x40);
|
||||||
|
+
|
||||||
|
+ if (rc < 0)
|
||||||
|
+ goto err;
|
||||||
|
+
|
||||||
|
+ /* activate air_in (UHF input) */
|
||||||
|
+ air_in = (band == UHF) ? 0x00 : 0x20;
|
||||||
|
+ rc = r82xx_write_reg_mask(priv, 0x05, air_in, 0x20);
|
||||||
|
+
|
||||||
|
+ if (rc < 0)
|
||||||
|
+ goto err;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ else /* Standard R828D dongle*/
|
||||||
|
+ {
|
||||||
|
+ /* switch between 'Cable1' and 'Air-In' inputs on sticks with
|
||||||
|
+ * R828D tuner. We switch at 345 MHz, because that's where the
|
||||||
|
+ * noise-floor has about the same level with identical LNA
|
||||||
|
+ * settings. The original driver used 320 MHz. */
|
||||||
|
+ air_cable1_in = (freq > MHZ(345)) ? 0x00 : 0x60;
|
||||||
|
+
|
||||||
|
+ if ((priv->cfg->rafael_chip == CHIP_R828D) &&
|
||||||
|
+ (air_cable1_in != priv->input)) {
|
||||||
|
+ priv->input = air_cable1_in;
|
||||||
|
+ rc = r82xx_write_reg_mask(priv, 0x05, air_cable1_in, 0x60);
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
|
||||||
|
err:
|
@ -1,3 +1,11 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Sat Sep 9 18:44:47 UTC 2023 - Wojciech Kazubski <wk@ire.pw.edu.pl>
|
||||||
|
|
||||||
|
- new patch rtl-sdr-0022-add-rtl-sdr-blog-v4-support.patch adding
|
||||||
|
support for new funcionality in RTL-SDR v4 dongle (taken from git
|
||||||
|
tree)
|
||||||
|
- fix for one minor rpmlint error
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Mon Jan 31 19:06:03 UTC 2022 - Wojciech Kazubski <wk@ire.pw.edu.pl>
|
Mon Jan 31 19:06:03 UTC 2022 - Wojciech Kazubski <wk@ire.pw.edu.pl>
|
||||||
|
|
||||||
|
@ -43,6 +43,7 @@ Patch14: rtl-sdr-0014-initialize-listensocket_in-rtl_tcp.patch
|
|||||||
Patch15: rtl-sdr-0015-modernize-cmake-usage.patch
|
Patch15: rtl-sdr-0015-modernize-cmake-usage.patch
|
||||||
Patch19: rtl-sdr-0019-fix-short-write-in-r82xx_read.patch
|
Patch19: rtl-sdr-0019-fix-short-write-in-r82xx_read.patch
|
||||||
Patch21: rtl-sdr-0021-rtl_fm-add-option-for-2nd-direct-sampling-mode.patch
|
Patch21: rtl-sdr-0021-rtl_fm-add-option-for-2nd-direct-sampling-mode.patch
|
||||||
|
Patch22: rtl-sdr-0022-add-rtl-sdr-blog-v4-support.patch
|
||||||
BuildRequires: cmake >= 3.7.2
|
BuildRequires: cmake >= 3.7.2
|
||||||
BuildRequires: gcc-c++
|
BuildRequires: gcc-c++
|
||||||
BuildRequires: pkgconfig
|
BuildRequires: pkgconfig
|
||||||
@ -72,7 +73,7 @@ Udev rules for rtl-sdr driver
|
|||||||
%package devel
|
%package devel
|
||||||
Summary: Development files for rtl-sdr
|
Summary: Development files for rtl-sdr
|
||||||
Group: Development/Libraries/Other
|
Group: Development/Libraries/Other
|
||||||
Requires: %{name} = %{version}
|
Requires: %{libname} = %{version}
|
||||||
|
|
||||||
%description devel
|
%description devel
|
||||||
Library headers for rtl-sdr driver.
|
Library headers for rtl-sdr driver.
|
||||||
@ -91,6 +92,7 @@ Library headers for rtl-sdr driver.
|
|||||||
%patch15 -p1
|
%patch15 -p1
|
||||||
%patch19 -p1
|
%patch19 -p1
|
||||||
%patch21 -p1
|
%patch21 -p1
|
||||||
|
%patch22 -p1
|
||||||
%patch0 -p1
|
%patch0 -p1
|
||||||
|
|
||||||
%build
|
%build
|
||||||
|
Loading…
Reference in New Issue
Block a user