Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

IQ amplitude phase correction #3

Open
wants to merge 64 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
64 commits
Select commit Hold shift + click to select a range
284fd4d
driver: tejeez's no-mod direct sampling
keenerd Jan 25, 2014
7d70b00
utils: tejeez's no-mod direct sampling
keenerd Jan 25, 2014
389de6d
utils: rebase ppm in eeprom prototype
keenerd Jan 25, 2014
e8d1d26
modprobe rules
keenerd Jan 29, 2014
3dfa4ad
rtl_fm: esbensen's discriminant
keenerd Jan 30, 2014
3f2632d
r82xx: set_dithering()
keenerd Aug 2, 2014
a7caaac
r82xx: tejeez's if/bw filters
keenerd Aug 2, 2014
4198f7d
r82xx: register caching
keenerd Aug 3, 2014
a0b6131
r82xx: register batching
keenerd Aug 3, 2014
d59b178
lib: cache i2c repeater
keenerd Aug 3, 2014
29d2c84
r82xx: pll tweaks beyond my ken
keenerd Aug 3, 2014
0bba67a
r82xx: error on pll failure
keenerd Aug 4, 2014
c5d7ebe
rtl_test: r820t tuning range
keenerd Aug 4, 2014
fba7708
r82xx: build warning
keenerd Aug 5, 2014
588b673
rtl_fm: half working AGC
keenerd Aug 6, 2014
6d5cd16
rtl_fm: wav header
keenerd Aug 7, 2014
42d8f12
rtl_fm: mostly working AGC
keenerd Aug 11, 2014
9ed9ffa
lib: retry i2c on failure
keenerd Aug 11, 2014
3cb8bd6
rtl_fm: proportional squelch
keenerd Aug 12, 2014
08889ee
rtl_fm, power: stay open through broken pipes
keenerd Aug 14, 2014
00a74f0
rtl_sdr: units on -n
keenerd Aug 15, 2014
e98ab40
rtl_fm: half finished stream padding
keenerd Aug 16, 2014
3223086
rtl_power: fixed size bins, refactoring
keenerd Aug 20, 2014
40bf3cb
rtl_power: adjustable sample rate
keenerd Aug 22, 2014
6d9bb99
rtl_power: multiple frequency ranges
keenerd Aug 23, 2014
225f401
rtl_power: linear output
keenerd Aug 23, 2014
f232816
r82xx: improved tuner precision
mutability Aug 23, 2014
f9ce8bd
rtl_power: bugfix for odd bin numbers
keenerd Aug 25, 2014
ecae3d5
rtl_power: fix bugs with bin counting
keenerd Aug 26, 2014
ebb5f2a
rtl_fm: bugfix from M. Curtis
keenerd Aug 26, 2014
e23b92c
rtl_fm: in-place demodulators
keenerd Aug 26, 2014
34ab4ac
rtl_fm: no-copy architecture
keenerd Aug 26, 2014
6d57803
r82xx: remove incorrect error from reg caching
mutability Aug 26, 2014
f3b45e1
rtl_power: doc corrections
keenerd Aug 27, 2014
06af0f9
r82xx: direct sampling fixes from tejeez
keenerd Aug 27, 2014
15bb16b
rtl_fm: fix lockup on squelch
keenerd Aug 28, 2014
5e13808
rtl_power: more bug fixes
keenerd Aug 28, 2014
a710e4e
rtl_test: generic tuner range test
mutability Aug 28, 2014
1cf9215
r82xx: enforce PLL register limits.
mutability Aug 29, 2014
c918fda
rtl_fm: link librt
keenerd Aug 31, 2014
92a684c
rtl_test: refactor tuner_benchmark
keenerd Aug 31, 2014
05bee34
rtl_fm: handle no availible buffers
keenerd Aug 31, 2014
6bcea88
rtl_fm: arbitrary translation prototype
keenerd Sep 1, 2014
90706d4
rtl_fm: remove unused resamplers
keenerd Sep 1, 2014
df2a9c0
rtl_fm: software agc
keenerd Sep 1, 2014
88244c0
rtl_fm: sw-agc quantization correction
keenerd Sep 1, 2014
581b6b6
rtl_fm: pad out single channel underruns
keenerd Sep 2, 2014
c813134
rtl_fm: stream padding
keenerd Sep 3, 2014
53d212d
rtl_fm: half finished dual-channel mode
keenerd Sep 4, 2014
0037e5f
rtl_fm: arbitrary translation
keenerd Sep 8, 2014
8ad17c2
rtl_fm: three-quarters of dual channel
keenerd Sep 8, 2014
1b1c03d
rtl_power: fix NaN on 32 bit platforms (T. Kaminski)
keenerd Oct 17, 2014
012ca95
rtl_test: Support PPM error measurement on Windows.
kasper93 Nov 1, 2014
61e2b66
rtl_fm: Support output padding on Windows.
kasper93 Nov 1, 2014
d426cfd
convenience: No junk when device info isn't properly extracted.
kasper93 Nov 1, 2014
a2d23c5
rtl_fm: Avoid possible null pointer dereference.
kasper93 Nov 1, 2014
6aa5f17
Variable cleanup and corrections.
kasper93 Nov 1, 2014
5ba8898
build: Fix compilation on VS2013, Cygwin and MinGW.
kasper93 Oct 30, 2014
bc872cb
build: libusb pkgconfig for NixOS
keenerd Nov 13, 2014
f1e8e4d
rtl_power: improved hopping math
keenerd Dec 1, 2014
3c01571
rtl_power: fix peak hold
keenerd Dec 1, 2014
c6e6be5
rtl_power: epoch time
keenerd Dec 1, 2014
86f9503
rtl_fm: add swagc-aggressive
Mar 29, 2015
0d825fe
rtl_power: trough hold
keenerd Jan 1, 2016
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
# Project setup
########################################################################
cmake_minimum_required(VERSION 2.6)
set(CMAKE_LEGACY_CYGWIN_WIN32 0)
project(rtlsdr C)

#select the release build type by default to get optimization flags
Expand Down
2 changes: 1 addition & 1 deletion configure.ac
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ AC_CHECK_LIB(m, sqrt, [LIBS="$LIBS -lm"])
dnl libmath (for rtl_power)
AC_CHECK_LIB(m, atan2, [LIBS="$LIBS -lm"])

dnl librealtime (for rtl_test)
dnl librealtime (for rtl_test, rtl_fm)
AC_CHECK_LIB(rt, clock_gettime, [LIBS="$LIBS -lrt"])

# The following test is taken from WebKit's webkit.m4
Expand Down
15 changes: 15 additions & 0 deletions include/rtl-sdr.h
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,10 @@ RTLSDR_API int rtlsdr_read_eeprom(rtlsdr_dev_t *dev, uint8_t *data,

RTLSDR_API int rtlsdr_set_center_freq(rtlsdr_dev_t *dev, uint32_t freq);

RTLSDR_API int rtlsdr_set_if_freq(rtlsdr_dev_t *dev, uint32_t freq);

RTLSDR_API int rtlsdr_set_if_bandwidth(rtlsdr_dev_t *dev, int bw);

/*!
* Get actual frequency the device is tuned to.
*
Expand Down Expand Up @@ -322,6 +326,17 @@ RTLSDR_API int rtlsdr_set_offset_tuning(rtlsdr_dev_t *dev, int on);
*/
RTLSDR_API int rtlsdr_get_offset_tuning(rtlsdr_dev_t *dev);

/*!
* Enable or disable frequency dithering for r820t tuners.
* Must be performed before freq_set().
* Fails for other tuners.
*
* \param dev the device handle given by rtlsdr_open()
* \param on 0 means disabled, 1 enabled
* \return 0 on success
*/
RTLSDR_API int rtlsdr_set_dithering(rtlsdr_dev_t *dev, int dither);

/* streaming functions */

RTLSDR_API int rtlsdr_reset_buffer(rtlsdr_dev_t *dev);
Expand Down
11 changes: 9 additions & 2 deletions include/tuner_r82xx.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,8 @@
#define R82XX_CHECK_ADDR 0x00
#define R82XX_CHECK_VAL 0x69

#define R82XX_IF_FREQ 3570000
#define R82XX_DEFAULT_IF_FREQ 6000000
#define R82XX_DEFAULT_IF_BW 2000000

#define REG_SHADOW_START 5
#define NUM_REGS 30
Expand Down Expand Up @@ -82,8 +83,10 @@ struct r82xx_priv {
uint32_t int_freq;
uint8_t fil_cal_code;
uint8_t input;
int has_lock;
int init_done;
int disable_dither;
int reg_cache;
int reg_batch, reg_low, reg_high;

/* Store current mode */
uint32_t delsys;
Expand Down Expand Up @@ -115,5 +118,9 @@ int r82xx_standby(struct r82xx_priv *priv);
int r82xx_init(struct r82xx_priv *priv);
int r82xx_set_freq(struct r82xx_priv *priv, uint32_t freq);
int r82xx_set_gain(struct r82xx_priv *priv, int set_manual_gain, int gain);
int r82xx_set_nomod(struct r82xx_priv *priv);
int r82xx_set_dither(struct r82xx_priv *priv, int dither);
int r82xx_set_bw(struct r82xx_priv *priv, uint32_t bw);
int r82xx_set_if_freq(struct r82xx_priv *priv, uint32_t freq);

#endif
3 changes: 2 additions & 1 deletion librtlsdr.pc.in
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,6 @@ Name: RTL-SDR Library
Description: C Utility Library
Version: @VERSION@
Cflags: -I${includedir}/ @RTLSDR_PC_CFLAGS@
Libs: -L${libdir} -lrtlsdr -lusb-1.0
Libs: -L${libdir} -lrtlsdr
Libs.private: @RTLSDR_PC_LIBS@
Requires: libusb-1.0
2 changes: 2 additions & 0 deletions rtlsdr.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# disable DVB drivers
blacklist dvb_usb_rtl28xxu
45 changes: 16 additions & 29 deletions src/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -28,11 +28,9 @@ add_library(rtlsdr_shared SHARED
tuner_fc2580.c
tuner_r82xx.c
)

target_link_libraries(rtlsdr_shared
${LIBUSB_LIBRARIES}
)

set_target_properties(rtlsdr_shared PROPERTIES DEFINE_SYMBOL "rtlsdr_EXPORTS")
set_target_properties(rtlsdr_shared PROPERTIES OUTPUT_NAME rtlsdr)
set_target_properties(rtlsdr_shared PROPERTIES SOVERSION ${MAJOR_VERSION})
Expand All @@ -46,25 +44,17 @@ add_library(rtlsdr_static STATIC
tuner_fc2580.c
tuner_r82xx.c
)
target_link_libraries(rtlsdr_static
${LIBUSB_LIBRARIES}
)
set_property(TARGET rtlsdr_static APPEND PROPERTY COMPILE_DEFINITIONS "rtlsdr_STATIC" )

add_library(convenience_static STATIC
convenience/convenience.c
)

if(WIN32)
add_library(libgetopt_static STATIC
getopt/getopt.c
)
target_link_libraries(convenience_static
rtlsdr_shared
)
endif()

target_link_libraries(rtlsdr_static
${LIBUSB_LIBRARIES}
)

set_property(TARGET rtlsdr_static APPEND PROPERTY COMPILE_DEFINITIONS "rtlsdr_STATIC" )

if(NOT WIN32)
# Force same library filename for static and shared variants of the library
Expand All @@ -83,60 +73,57 @@ add_executable(rtl_adsb rtl_adsb.c)
add_executable(rtl_power rtl_power.c)
set(INSTALL_TARGETS rtlsdr_shared rtlsdr_static rtl_sdr rtl_tcp rtl_test rtl_fm rtl_eeprom rtl_adsb rtl_power)

target_link_libraries(rtl_sdr rtlsdr_shared convenience_static
target_link_libraries(rtl_sdr convenience_static rtlsdr_shared
${LIBUSB_LIBRARIES}
${CMAKE_THREAD_LIBS_INIT}
)
target_link_libraries(rtl_tcp rtlsdr_shared convenience_static
target_link_libraries(rtl_tcp convenience_static rtlsdr_shared
${LIBUSB_LIBRARIES}
${CMAKE_THREAD_LIBS_INIT}
)
target_link_libraries(rtl_test rtlsdr_shared convenience_static
target_link_libraries(rtl_test convenience_static rtlsdr_shared
${LIBUSB_LIBRARIES}
${CMAKE_THREAD_LIBS_INIT}
)
target_link_libraries(rtl_fm rtlsdr_shared convenience_static
target_link_libraries(rtl_fm convenience_static rtlsdr_shared
${LIBUSB_LIBRARIES}
${CMAKE_THREAD_LIBS_INIT}
)
target_link_libraries(rtl_eeprom rtlsdr_shared convenience_static
target_link_libraries(rtl_eeprom convenience_static rtlsdr_shared
${LIBUSB_LIBRARIES}
${CMAKE_THREAD_LIBS_INIT}
)
target_link_libraries(rtl_adsb rtlsdr_shared convenience_static
target_link_libraries(rtl_adsb convenience_static rtlsdr_shared
${LIBUSB_LIBRARIES}
${CMAKE_THREAD_LIBS_INIT}
)
target_link_libraries(rtl_power rtlsdr_shared convenience_static
target_link_libraries(rtl_power convenience_static rtlsdr_shared
${LIBUSB_LIBRARIES}
${CMAKE_THREAD_LIBS_INIT}
)
if(UNIX)
target_link_libraries(rtl_fm m)
target_link_libraries(rtl_adsb m)
target_link_libraries(rtl_power m)
if(APPLE)
target_link_libraries(rtl_test m)
target_link_libraries(rtl_fm m)
else()
target_link_libraries(rtl_test m rt)
target_link_libraries(rtl_fm m rt)
endif()
endif()

if(WIN32)
add_library(libgetopt_static STATIC
getopt/getopt.c
)
target_link_libraries(rtl_sdr libgetopt_static)
target_link_libraries(rtl_tcp ws2_32 libgetopt_static)
target_link_libraries(rtl_test libgetopt_static)
target_link_libraries(rtl_fm libgetopt_static)
target_link_libraries(rtl_eeprom libgetopt_static)
target_link_libraries(rtl_adsb libgetopt_static)
target_link_libraries(rtl_power libgetopt_static)
set_property(TARGET rtl_sdr APPEND PROPERTY COMPILE_DEFINITIONS "rtlsdr_STATIC" )
set_property(TARGET rtl_tcp APPEND PROPERTY COMPILE_DEFINITIONS "rtlsdr_STATIC" )
set_property(TARGET rtl_test APPEND PROPERTY COMPILE_DEFINITIONS "rtlsdr_STATIC" )
set_property(TARGET rtl_fm APPEND PROPERTY COMPILE_DEFINITIONS "rtlsdr_STATIC" )
set_property(TARGET rtl_eeprom APPEND PROPERTY COMPILE_DEFINITIONS "rtlsdr_STATIC" )
set_property(TARGET rtl_adsb APPEND PROPERTY COMPILE_DEFINITIONS "rtlsdr_STATIC" )
set_property(TARGET rtl_power APPEND PROPERTY COMPILE_DEFINITIONS "rtlsdr_STATIC" )
endif()
########################################################################
# Install built library files & utilities
Expand Down
41 changes: 37 additions & 4 deletions src/convenience/convenience.c
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (C) 2014 by Kyle Keen <[email protected]>
* Copyright (C) 2013-2014 by Kyle Keen <[email protected]>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Expand Down Expand Up @@ -174,6 +174,8 @@ int verbose_direct_sampling(rtlsdr_dev_t *dev, int on)
fprintf(stderr, "Enabled direct sampling mode, input 1/I.\n");}
if (on == 2) {
fprintf(stderr, "Enabled direct sampling mode, input 2/Q.\n");}
if (on == 3) {
fprintf(stderr, "Enabled no-mod direct sampling mode.\n");}
return r;
}

Expand Down Expand Up @@ -232,6 +234,34 @@ int verbose_ppm_set(rtlsdr_dev_t *dev, int ppm_error)
return r;
}

int verbose_ppm_eeprom(rtlsdr_dev_t *dev, int *ppm_error)
{
#define start_char ' '
#define stop_char 'p'
int i, r, len, status = -1;
char vendor[256], product[256], serial[256];
r = rtlsdr_get_usb_strings(dev, vendor, product, serial);
if (r) {
return r;
}
len = strlen(serial);
if (len <= 3) {
return -1;}
if (serial[len-1] != stop_char) {
return -1;}
serial[len-1] = '\0';
for (i=len-3; i>=0; i--) {
if (serial[i] != start_char) {
continue;}
fprintf(stderr, "PPM calibration found in eeprom.\n");
status = 0;
*ppm_error = atoi(serial + i + 1);
break;
}
serial[len-1] = stop_char;
return status;
}

int verbose_reset_buffer(rtlsdr_dev_t *dev)
{
int r;
Expand All @@ -245,16 +275,19 @@ int verbose_device_search(char *s)
{
int i, device_count, device, offset;
char *s2;
char vendor[256], product[256], serial[256];
char vendor[256] = {0}, product[256] = {0}, serial[256] = {0};
device_count = rtlsdr_get_device_count();
if (!device_count) {
fprintf(stderr, "No supported devices found.\n");
return -1;
}
fprintf(stderr, "Found %d device(s):\n", device_count);
for (i = 0; i < device_count; i++) {
rtlsdr_get_device_usb_strings(i, vendor, product, serial);
fprintf(stderr, " %d: %s, %s, SN: %s\n", i, vendor, product, serial);
if (rtlsdr_get_device_usb_strings(i, vendor, product, serial) == 0) {
fprintf(stderr, " %d: %s, %s, SN: %s\n", i, vendor, product, serial);
} else {
fprintf(stderr, " %d: %s\n", i, "Failed to query data");
}
}
fprintf(stderr, "\n");
/* does string look like raw id number */
Expand Down
11 changes: 10 additions & 1 deletion src/convenience/convenience.h
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (C) 2014 by Kyle Keen <[email protected]>
* Copyright (C) 2013-2014 by Kyle Keen <[email protected]>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Expand Down Expand Up @@ -122,6 +122,15 @@ int verbose_gain_set(rtlsdr_dev_t *dev, int gain);

int verbose_ppm_set(rtlsdr_dev_t *dev, int ppm_error);

/*!
* Attempts to extract a correction value from eeprom and store it to an int.
*
* \param dev the device handle given by rtlsdr_open()
* \param ppm_error correction value in parts per million (ppm)
* \return 0 on success
*/
int verbose_ppm_eeprom(rtlsdr_dev_t *dev, int *ppm_error);

/*!
* Reset buffer
*
Expand Down
Loading