Projects
osmocom:latest
rtl-sdr
Sign Up
Log In
Username
Password
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
Expand all
Collapse all
Changes of Revision 4
View file
rtl-sdr_2.0.1.dsc -> rtl-sdr_2.0.2.dsc
Changed
@@ -2,7 +2,7 @@ Source: rtl-sdr Binary: librtlsdr-dev, librtlsdr0, rtl-sdr Architecture: any -Version: 2.0.1 +Version: 2.0.2 Maintainer: A. Maitland Bottoms <bottoms@debian.org> Homepage: http://sdr.osmocom.org/trac/wiki/rtl-sdr Standards-Version: 4.1.4 @@ -14,8 +14,8 @@ librtlsdr0 deb libs optional arch=any rtl-sdr deb comm optional arch=any Checksums-Sha1: - 529c7c710955b49d0e6758217d298d3bec1b603e 109364 rtl-sdr_2.0.1.tar.xz + 6c40dedce8cc759a16a02e6e6ab9a9a0a58be01e 109896 rtl-sdr_2.0.2.tar.xz Checksums-Sha256: - a5b1248a6f52bdac0104d68cf3e68050553ce058a35cf923412ea177ba0da393 109364 rtl-sdr_2.0.1.tar.xz + 97846596c83d16b6049881015c8183f8cdf8990ba19bc15afc4f68e754300926 109896 rtl-sdr_2.0.2.tar.xz Files: - b409d1eea0e25c2174c5b60b23951c6e 109364 rtl-sdr_2.0.1.tar.xz + 69440d8db38ba2cb752d38e8f3409fa9 109896 rtl-sdr_2.0.2.tar.xz
View file
rtl-sdr_2.0.2.tar.xz/.github
Added
+(directory)
View file
rtl-sdr_2.0.2.tar.xz/.github/FUNDING.yml
Added
@@ -0,0 +1 @@ +open_collective: osmocom
View file
rtl-sdr_2.0.1.tar.xz/.tarball-version -> rtl-sdr_2.0.2.tar.xz/.tarball-version
Changed
@@ -1 +1 @@ -2.0.1 +2.0.2
View file
rtl-sdr_2.0.1.tar.xz/CMakeLists.txt -> rtl-sdr_2.0.2.tar.xz/CMakeLists.txt
Changed
@@ -71,6 +71,9 @@ if(PKG_CONFIG_FOUND) pkg_check_modules(LIBUSB libusb-1.0 IMPORTED_TARGET) + if(LIBUSB_LINK_LIBRARIES) + set(LIBUSB_LIBRARIES "${LIBUSB_LINK_LIBRARIES}") + endif() else() set(LIBUSB_LIBRARIES "" CACHE STRING "manual libusb path") set(LIBUSB_INCLUDE_DIRS "" CACHE STRING "manual libusb includepath")
View file
rtl-sdr_2.0.1.tar.xz/debian/changelog -> rtl-sdr_2.0.2.tar.xz/debian/changelog
Changed
@@ -1,3 +1,34 @@ +rtl-sdr (2.0.2) unstable; urgency=medium + + Mikael Falkvidd + * Fix small typo in rtl_sdr man page + + Clayton Smith + * Use library paths from pkg-config + * Only use LIBUSB_LINK_LIBRARIES if it exists + + hayati ayguen + * improve CLI usage docs: '-d' also accepts serial + + Oliver Jowett + * r82xx: improve tuner precision + + Sultan Qasim Khan + * r82xx: avoid redundant register writes for speed + * r82xx: batch register writes for tuning + + Ethan Halsall + * fix: set fc0012 gain to low on init + * fix: round gain input to nearest value + + Harald Welte + * Add funding link to github mirror + + Steve Markgraf + * lib: set SOVERSION back to 0 + + -- Oliver Smith <osmith@sysmocom.de> Tue, 23 Apr 2024 11:40:18 +0200 + rtl-sdr (2.0.1) unstable; urgency=medium * debian/changelog: update for 2.0.0 and 2.0.1
View file
rtl-sdr_2.0.1.tar.xz/debian/rtl_sdr.1 -> rtl-sdr_2.0.2.tar.xz/debian/rtl_sdr.1
Changed
@@ -26,7 +26,7 @@ and outputs the data in a form useful to other software radio programs. .SH SYNOPSIS -.B rtl_adsb -f freq OPTIONS output file +.B rtl_sdr -f freq OPTIONS output file .SH OPTIONS .IP "-f frequency_to_tune_to Hz" .IP "-s samplerate (default: 2048000 Hz)"
View file
rtl-sdr_2.0.1.tar.xz/src/CMakeLists.txt -> rtl-sdr_2.0.2.tar.xz/src/CMakeLists.txt
Changed
@@ -29,7 +29,7 @@ ) set_target_properties(rtlsdr PROPERTIES DEFINE_SYMBOL "rtlsdr_EXPORTS") set_target_properties(rtlsdr PROPERTIES OUTPUT_NAME rtlsdr) -set_target_properties(rtlsdr PROPERTIES SOVERSION ${MAJOR_VERSION}) +set_target_properties(rtlsdr PROPERTIES SOVERSION 0) set_target_properties(rtlsdr PROPERTIES VERSION ${LIBVER}) generate_export_header(rtlsdr)
View file
rtl-sdr_2.0.1.tar.xz/src/rtl_adsb.c -> rtl-sdr_2.0.2.tar.xz/src/rtl_adsb.c
Changed
@@ -89,7 +89,7 @@ fprintf(stderr, "rtl_adsb, a simple ADS-B decoder\n\n" "Use:\trtl_adsb -R -g gain -p ppm output file\n" - "\t-d device_index (default: 0)\n" + "\t-d device_index or serial (default: 0)\n" "\t-V verbove output (default: off)\n" "\t-S show short frames (default: off)\n" "\t-Q quality (0: no sanity checks, 0.5: half bit, 1: one bit (default), 2: two bits)\n"
View file
rtl-sdr_2.0.1.tar.xz/src/rtl_fm.c -> rtl-sdr_2.0.2.tar.xz/src/rtl_fm.c
Changed
@@ -192,7 +192,7 @@ "\t wbfm == -M fm -s 170k -o 4 -A fast -r 32k -l 0 -E deemp\n" "\t raw mode outputs 2x16 bit IQ pairs\n" "\t-s sample_rate (default: 24k)\n" - "\t-d device_index (default: 0)\n" + "\t-d device_index or serial (default: 0)\n" "\t-T enable bias-T on GPIO PIN 0 (works for rtl-sdr.com v3 dongles)\n" "\t-g tuner_gain (default: automatic)\n" "\t-l squelch_level (default: 0/off)\n"
View file
rtl-sdr_2.0.1.tar.xz/src/rtl_power.c -> rtl-sdr_2.0.2.tar.xz/src/rtl_power.c
Changed
@@ -130,7 +130,7 @@ "\t-e exit_timer (default: off/0)\n" //"\t-s avg/iir smoothing (default: avg)\n" //"\t-t threads (default: 1)\n" - "\t-d device_index (default: 0)\n" + "\t-d device_index or serial (default: 0)\n" "\t-g tuner_gain (default: automatic)\n" "\t-p ppm_error (default: 0)\n" "\t-T enable bias-T on GPIO PIN 0 (works for rtl-sdr.com v3 dongles)\n"
View file
rtl-sdr_2.0.1.tar.xz/src/rtl_sdr.c -> rtl-sdr_2.0.2.tar.xz/src/rtl_sdr.c
Changed
@@ -49,7 +49,7 @@ "rtl_sdr, an I/Q recorder for RTL2832 based DVB-T receivers\n\n" "Usage:\t -f frequency_to_tune_to Hz\n" "\t-s samplerate (default: 2048000 Hz)\n" - "\t-d device_index (default: 0)\n" + "\t-d device_index or serial (default: 0)\n" "\t-g gain (default: 0 for auto)\n" "\t-p ppm_error (default: 0)\n" "\t-b output_block_size (default: 16 * 16384)\n"
View file
rtl-sdr_2.0.1.tar.xz/src/rtl_tcp.c -> rtl-sdr_2.0.2.tar.xz/src/rtl_tcp.c
Changed
@@ -102,7 +102,7 @@ printf("\t-s samplerate in Hz (default: %d Hz)\n", DEFAULT_SAMPLE_RATE_HZ); printf("\t-b number of buffers (default: 15, set by library)\n"); printf("\t-n max number of linked list buffers to keep (default: %d)\n", DEFAULT_MAX_NUM_BUFFERS); - printf("\t-d device index (default: 0)\n"); + printf("\t-d device index or serial (default: 0)\n"); printf("\t-P ppm_error (default: 0)\n"); printf("\t-T enable bias-T on GPIO PIN 0 (works for rtl-sdr.com v3 dongles)\n"); printf("\t-D enable direct sampling (default: off)\n");
View file
rtl-sdr_2.0.1.tar.xz/src/rtl_test.c -> rtl-sdr_2.0.2.tar.xz/src/rtl_test.c
Changed
@@ -90,7 +90,7 @@ "rtl_test, a benchmark tool for RTL2832 based DVB-T receivers\n\n" "Usage:\n" "\t-s samplerate (default: 2048000 Hz)\n" - "\t-d device_index (default: 0)\n" + "\t-d device_index or serial (default: 0)\n" "\t-t enable Elonics E4000 tuner benchmark\n" #ifndef _WIN32 "\t-pseconds enable PPM error measurement (default: 10 seconds)\n"
View file
rtl-sdr_2.0.1.tar.xz/src/tuner_fc0012.c -> rtl-sdr_2.0.2.tar.xz/src/tuner_fc0012.c
Changed
@@ -114,7 +114,7 @@ 0x00, /* reg. 0x10: may also be 0x0d */ 0x00, /* reg. 0x11 */ 0x1f, /* reg. 0x12: Set to maximum gain */ - 0x08, /* reg. 0x13: Set to Middle Gain: 0x08, + 0x00, /* reg. 0x13: Set to Low Gain: 0x00, Low Gain: 0x00, High Gain: 0x10, enable IX2: 0x80 */ 0x00, /* reg. 0x14 */ 0x04, /* reg. 0x15: Enable LNA COMPS */ @@ -321,23 +321,11 @@ /* mask bits off */ tmp &= 0xe0; - switch (gain) { - case -99: /* -9.9 dB */ - tmp |= 0x02; - break; - case -40: /* -4 dB */ - break; - case 71: - tmp |= 0x08; /* 7.1 dB */ - break; - case 179: - tmp |= 0x17; /* 17.9 dB */ - break; - case 192: - default: - tmp |= 0x10; /* 19.2 dB */ - break; - } + if (gain < -40) tmp |= 0x02; /* -9.9 dB */ + else if (gain < 71) tmp |= 0x00; /* -4.0 dB */ + else if (gain < 179) tmp |= 0x08; /* 7.1 dB */ + else if (gain < 192) tmp |= 0x17; /* 17.9 dB */ + else tmp |= 0x10; /* 19.2 dB */ ret = fc0012_writereg(dev, 0x13, tmp);
View file
rtl-sdr_2.0.1.tar.xz/src/tuner_r82xx.c -> rtl-sdr_2.0.2.tar.xz/src/tuner_r82xx.c
Changed
@@ -25,6 +25,7 @@ #include <stdio.h> #include <stdint.h> #include <string.h> +#include <stdbool.h> #include "rtlsdr_i2c.h" #include "tuner_r82xx.h" @@ -243,6 +244,7 @@ if (r < 0) { len += r; + val -= r; r = 0; } if (len <= 0) @@ -253,11 +255,29 @@ memcpy(&priv->regsr, val, len); } +static bool shadow_equal(struct r82xx_priv *priv, uint8_t reg, const uint8_t *val, + int len) +{ + int r = reg - REG_SHADOW_START; + + if (r < 0 || len < 0 || len > NUM_REGS - r) + return false; + + if (memcmp(&priv->regsr, val, len) == 0) + return true; + + return false; +} + static int r82xx_write(struct r82xx_priv *priv, uint8_t reg, const uint8_t *val, unsigned int len) { int rc, size, pos = 0; + /* Avoid setting registers unnecessarily since it's slow */ + if (shadow_equal(priv, reg, val, len)) + return 0; + /* Store the shadow registers */ shadow_store(priv, reg, val, len); @@ -424,17 +444,21 @@ return rc; } +static inline uint8_t mask_reg8(uint8_t reg, uint8_t val, uint8_t mask) +{ + return (reg & ~mask) | (val & mask); +} + static int r82xx_set_pll(struct r82xx_priv *priv, uint32_t freq) { int rc, i; unsigned sleep_time = 10000; uint64_t vco_freq; - uint32_t vco_fra; /* VCO contribution by SDM (kHz) */ - uint32_t vco_min = 1770000; - uint32_t vco_max = vco_min * 2; - uint32_t freq_khz, pll_ref, pll_ref_khz; - uint16_t n_sdm = 2; - uint16_t sdm = 0; + uint64_t vco_div; + uint32_t vco_min = 1770000; /* kHz */ + uint32_t vco_max = vco_min * 2; /* kHz */ + uint32_t freq_khz, pll_ref; + uint32_t sdm = 0; uint8_t mix_div = 2; uint8_t div_buf = 0; uint8_t div_num = 0; @@ -442,25 +466,24 @@ uint8_t refdiv2 = 0; uint8_t ni, si, nint, vco_fine_tune, val; uint8_t data5; + uint8_t regs7; /* Frequency in kHz */ freq_khz = (freq + 500) / 1000; pll_ref = priv->cfg->xtal; - pll_ref_khz = (priv->cfg->xtal + 500) / 1000; - - rc = r82xx_write_reg_mask(priv, 0x10, refdiv2, 0x10); - if (rc < 0) - return rc; /* set pll autotune = 128kHz */ rc = r82xx_write_reg_mask(priv, 0x1a, 0x00, 0x0c); if (rc < 0) return rc; + /* regs 0x10 to 0x16 */ + memcpy(regs, &priv->regs0x10 - REG_SHADOW_START, 7); + + regs0 = mask_reg8(regs0, refdiv2, 0x10); + /* set VCO current = 100 */ - rc = r82xx_write_reg_mask(priv, 0x12, 0x80, 0xe0); - if (rc < 0) - return rc; + regs2 = mask_reg8(regs2, 0x80, 0xe0); /* Calculate divider */ while (mix_div <= 64) { @@ -490,13 +513,27 @@ else if (vco_fine_tune < vco_power_ref) div_num = div_num + 1; - rc = r82xx_write_reg_mask(priv, 0x10, div_num << 5, 0xe0); - if (rc < 0) - return rc; + regs0 = mask_reg8(regs0, div_num << 5, 0xe0); vco_freq = (uint64_t)freq * (uint64_t)mix_div; - nint = vco_freq / (2 * pll_ref); - vco_fra = (vco_freq - 2 * pll_ref * nint) / 1000; + + /* We want to approximate: + * vco_freq / (2 * pll_ref) + * + * in the form: + * nint + sdm/65536 + * + * where nint,sdm are integers and 0 < nint, 0 <= sdm < 65536 + * + * Scaling to fixed point and rounding: + * + * vco_div = 65536*(nint + sdm/65536) = int( 0.5 + 65536 * vco_freq / (2 * pll_ref) ) + * vco_div = 65536*nint + sdm = int( (pll_ref + 65536 * vco_freq) / (2 * pll_ref) ) + */ + + vco_div = (pll_ref + 65536 * vco_freq) / (2 * pll_ref); + nint = (uint32_t) (vco_div / 65536); + sdm = (uint32_t) (vco_div % 65536); if (nint > ((128 / vco_power_ref) - 1)) { fprintf(stderr, "R82XX No valid PLL values for %u Hz!\n", freq); @@ -506,35 +543,20 @@ ni = (nint - 13) / 4; si = nint - 4 * ni - 13; - rc = r82xx_write_reg(priv, 0x14, ni + (si << 6)); - if (rc < 0) - return rc; + regs4 = ni + (si << 6); /* pw_sdm */ - if (!vco_fra) + if (sdm == 0) val = 0x08; else val = 0x00; - rc = r82xx_write_reg_mask(priv, 0x12, val, 0x08); - if (rc < 0) - return rc; + regs2 = mask_reg8(regs2, val, 0x08); - /* sdm calculator */ - while (vco_fra > 1) { - if (vco_fra > (2 * pll_ref_khz / n_sdm)) { - sdm = sdm + 32768 / (n_sdm / 2); - vco_fra = vco_fra - 2 * pll_ref_khz / n_sdm; - if (n_sdm >= 0x8000) - break; - } - n_sdm <<= 1; - } + regs5 = sdm & 0xff; + regs6 = sdm >> 8; - rc = r82xx_write_reg(priv, 0x16, sdm >> 8); - if (rc < 0) - return rc; - rc = r82xx_write_reg(priv, 0x15, sdm & 0xff); + rc = r82xx_write(priv, 0x10, regs, 7); if (rc < 0) return rc; @@ -1317,6 +1339,7 @@ priv->xtal_cap_sel = XTAL_HIGH_CAP_0P; /* Initialize registers */ + memset(priv->regs, 0, NUM_REGS); rc = r82xx_write(priv, 0x05, r82xx_init_array, sizeof(r82xx_init_array));
Locations
Projects
Search
Status Monitor
Help
Open Build Service
OBS Manuals
API Documentation
OBS Portal
Reporting a Bug
Contact
Mailing List
Forums
Chat (IRC)
Twitter
Open Build Service (OBS)
is an
openSUSE project
.