rtl433  UNKNOWN
RTL-433 utility
sdr.c File Reference

SDR input from RTLSDR or SoapySDR. More...

Data Structures

struct  sdr_dev
 
struct  rtl_tcp_info
 
struct  command
 

Functions

static int rtltcp_open (sdr_dev_t **out_dev, int *sample_size, char *dev_query, int verbose)
 
static int rtltcp_close (SOCKET sock)
 
static int rtltcp_read_loop (sdr_dev_t *dev, sdr_read_cb_t cb, void *ctx, uint32_t buf_num, uint32_t buf_len)
 
static int rtltcp_command (sdr_dev_t *dev, char cmd, int param)
 
static int sdr_open_rtl (sdr_dev_t **out_dev, int *sample_size, char *dev_query, int verbose)
 
static int soapysdr_set_bandwidth (SoapySDRDevice *dev, uint32_t bandwidth)
 
static int soapysdr_direct_sampling (SoapySDRDevice *dev, int on)
 
static int soapysdr_offset_tuning (SoapySDRDevice *dev)
 
static int soapysdr_auto_gain (SoapySDRDevice *dev, int verbose)
 
static int soapysdr_gain_str_set (SoapySDRDevice *dev, char *gain_str, int verbose)
 
static void soapysdr_show_device_info (SoapySDRDevice *dev)
 
static int sdr_open_soapy (sdr_dev_t **out_dev, int *sample_size, char *dev_query, int verbose)
 
static int soapysdr_read_loop (sdr_dev_t *dev, sdr_read_cb_t cb, void *ctx, uint32_t buf_num, uint32_t buf_len)
 
int sdr_open (sdr_dev_t **out_dev, int *sample_size, char *dev_query, int verbose)
 Find the closest matching device, optionally report status. More...
 
int sdr_close (sdr_dev_t *dev)
 Close the device, optionally report status. More...
 
int sdr_set_center_freq (sdr_dev_t *dev, uint32_t freq, int verbose)
 Set device frequency, optionally report status. More...
 
uint32_t sdr_get_center_freq (sdr_dev_t *dev)
 Get device frequency. More...
 
int sdr_set_freq_correction (sdr_dev_t *dev, int ppm, int verbose)
 Set the frequency correction value for the device, optionally report status. More...
 
int sdr_set_auto_gain (sdr_dev_t *dev, int verbose)
 Enable auto gain, optionally report status. More...
 
int sdr_set_tuner_gain (sdr_dev_t *dev, char *gain_str, int verbose)
 Set tuner gain or gain elements, optionally report status. More...
 
int sdr_set_antenna (sdr_dev_t *dev, char *antenna_str, int verbose)
 Set device antenna. More...
 
int sdr_set_sample_rate (sdr_dev_t *dev, uint32_t rate, int verbose)
 Set device sample rate, optionally report status. More...
 
uint32_t sdr_get_sample_rate (sdr_dev_t *dev)
 Get device sample rate. More...
 
int sdr_apply_settings (sdr_dev_t *dev, char const *sdr_settings, int verbose)
 Apply a list of sdr settings. More...
 
int sdr_activate (sdr_dev_t *dev)
 Activate stream (only needed for SoapySDR). More...
 
int sdr_deactivate (sdr_dev_t *dev)
 Deactivate stream (only needed for SoapySDR). More...
 
int sdr_reset (sdr_dev_t *dev, int verbose)
 Reset buffer (only needed for RTL-SDR), optionally report status. More...
 
int sdr_start (sdr_dev_t *dev, sdr_read_cb_t cb, void *ctx, uint32_t buf_num, uint32_t buf_len)
 
int sdr_stop (sdr_dev_t *dev)
 

Detailed Description

SDR input from RTLSDR or SoapySDR.

Copyright (C) 2018 Christian Zuckschwerdt based on code Copyright (C) 2012 by Steve Markgraf steve.nosp@m.@ste.nosp@m.ve-m..nosp@m.de Copyright (C) 2014 by Kyle Keen keene.nosp@m.rd@g.nosp@m.mail..nosp@m.com Copyright (C) 2016 by Robert X. Seger

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 the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

Function Documentation

◆ rtltcp_close()

static int rtltcp_close ( SOCKET  sock)
static

Referenced by sdr_close().

◆ rtltcp_command()

static int rtltcp_command ( sdr_dev_t dev,
char  cmd,
int  param 
)
static

◆ rtltcp_open()

static int rtltcp_open ( sdr_dev_t **  out_dev,
int *  sample_size,
char *  dev_query,
int  verbose 
)
static

◆ rtltcp_read_loop()

static int rtltcp_read_loop ( sdr_dev_t dev,
sdr_read_cb_t  cb,
void *  ctx,
uint32_t  buf_num,
uint32_t  buf_len 
)
static

◆ sdr_activate()

int sdr_activate ( sdr_dev_t dev)

Activate stream (only needed for SoapySDR).

Parameters
devthe device handle
Returns
0 on success

References sdr_dev::soapy_dev, and sdr_dev::soapy_stream.

Referenced by main().

◆ sdr_apply_settings()

int sdr_apply_settings ( sdr_dev_t dev,
char const *  sdr_settings,
int  verbose 
)

Apply a list of sdr settings.

Parameters
devthe device handle
sdr_settingskeyword list of settings
verbosethe verbosity level for reports to stderr
Returns
0 on success

References atouint32_metric(), and sdr_dev::soapy_dev.

Referenced by main().

◆ sdr_close()

int sdr_close ( sdr_dev_t dev)

Close the device, optionally report status.

Parameters
devthe device handle
verbosethe verbosity level for reports to stderr
Returns
0 on success

References sdr_dev::buffer, sdr_dev::rtl_tcp, sdr_dev::rtlsdr_dev, rtltcp_close(), and sdr_dev::soapy_dev.

Referenced by r_free_cfg().

◆ sdr_deactivate()

int sdr_deactivate ( sdr_dev_t dev)

Deactivate stream (only needed for SoapySDR).

Parameters
devthe device handle
Returns
0 on success

References sdr_dev::soapy_dev, and sdr_dev::soapy_stream.

Referenced by r_free_cfg().

◆ sdr_get_center_freq()

uint32_t sdr_get_center_freq ( sdr_dev_t dev)

Get device frequency.

Parameters
devthe device handle
Returns
frequency in Hz on success, 0 otherwise

References sdr_dev::rtlsdr_dev, and sdr_dev::soapy_dev.

Referenced by sdr_set_center_freq().

◆ sdr_get_sample_rate()

uint32_t sdr_get_sample_rate ( sdr_dev_t dev)

Get device sample rate.

Parameters
devthe device handle
Returns
sample rate in samples/second on success, 0 otherwise

References sdr_dev::rtlsdr_dev, and sdr_dev::soapy_dev.

Referenced by sdr_set_sample_rate().

◆ sdr_open()

int sdr_open ( sdr_dev_t **  out_dev,
int *  sample_size,
char *  dev_query,
int  verbose 
)

Find the closest matching device, optionally report status.

Parameters
out_devdevice output returned
sample_sizestream output sample width returned
dev_querya string to be parsed as device spec
verbosethe verbosity level for reports to stderr
Returns
dev 0 if successful

References rtltcp_open(), sdr_open_rtl(), and sdr_open_soapy().

Referenced by main().

◆ sdr_open_rtl()

static int sdr_open_rtl ( sdr_dev_t **  out_dev,
int *  sample_size,
char *  dev_query,
int  verbose 
)
static

References sdr_dev::rtlsdr_dev, and sdr_dev::sample_size.

Referenced by sdr_open().

◆ sdr_open_soapy()

static int sdr_open_soapy ( sdr_dev_t **  out_dev,
int *  sample_size,
char *  dev_query,
int  verbose 
)
static

◆ sdr_reset()

int sdr_reset ( sdr_dev_t dev,
int  verbose 
)

Reset buffer (only needed for RTL-SDR), optionally report status.

Parameters
devthe device handle
verbosethe verbosity level for reports to stderr
Returns
0 on success

References sdr_dev::rtlsdr_dev.

Referenced by main().

◆ sdr_set_antenna()

int sdr_set_antenna ( sdr_dev_t dev,
char *  antenna_str,
int  verbose 
)

Set device antenna.

Parameters
devthe device handle
antenna_strname of the antenna (example 'Tuner 2 50 ohm')
verbosethe verbosity level for reports to stderr
Returns
0 on success

References sdr_dev::soapy_dev.

◆ sdr_set_auto_gain()

int sdr_set_auto_gain ( sdr_dev_t dev,
int  verbose 
)

Enable auto gain, optionally report status.

Parameters
devthe device handle
verbosethe verbosity level for reports to stderr
Returns
0 on success

References sdr_dev::rtl_tcp, sdr_dev::rtlsdr_dev, rtltcp_command(), sdr_dev::soapy_dev, and soapysdr_auto_gain().

Referenced by sdr_set_tuner_gain().

◆ sdr_set_center_freq()

int sdr_set_center_freq ( sdr_dev_t dev,
uint32_t  freq,
int  verbose 
)

Set device frequency, optionally report status.

Parameters
devthe device handle
frequencyin Hz
verbosethe verbosity level for reports to stderr
Returns
0 on success

References nice_freq(), sdr_dev::rtl_tcp, sdr_dev::rtlsdr_dev, rtltcp_command(), sdr_get_center_freq(), and sdr_dev::soapy_dev.

Referenced by main().

◆ sdr_set_freq_correction()

int sdr_set_freq_correction ( sdr_dev_t dev,
int  ppm,
int  verbose 
)

Set the frequency correction value for the device, optionally report status.

Parameters
devthe device handle
ppm_errorcorrection value in parts per million (ppm)
verbosethe verbosity level for reports to stderr
Returns
0 on success

References sdr_dev::rtl_tcp, sdr_dev::rtlsdr_dev, rtltcp_command(), and sdr_dev::soapy_dev.

Referenced by main().

◆ sdr_set_sample_rate()

int sdr_set_sample_rate ( sdr_dev_t dev,
uint32_t  rate,
int  verbose 
)

Set device sample rate, optionally report status.

Parameters
devthe device handle
samp_ratein samples/second
verbosethe verbosity level for reports to stderr
Returns
0 on success

References sdr_dev::rtl_tcp, sdr_dev::rtlsdr_dev, rtltcp_command(), sdr_get_sample_rate(), and sdr_dev::soapy_dev.

Referenced by main().

◆ sdr_set_tuner_gain()

int sdr_set_tuner_gain ( sdr_dev_t dev,
char *  gain_str,
int  verbose 
)

Set tuner gain or gain elements, optionally report status.

Parameters
devthe device handle
gain_strin tenths of a dB for RTL-SDR, string of gain element pairs (example LNA=40,VGA=20,AMP=0), or string of overall gain, in dB
verbosethe verbosity level for reports to stderr
Returns
0 on success

References sdr_dev::rtl_tcp, sdr_dev::rtlsdr_dev, rtltcp_command(), sdr_set_auto_gain(), sdr_dev::soapy_dev, and soapysdr_gain_str_set().

Referenced by main().

◆ sdr_start()

int sdr_start ( sdr_dev_t dev,
sdr_read_cb_t  cb,
void *  ctx,
uint32_t  buf_num,
uint32_t  buf_len 
)

◆ sdr_stop()

int sdr_stop ( sdr_dev_t dev)

◆ soapysdr_auto_gain()

static int soapysdr_auto_gain ( SoapySDRDevice *  dev,
int  verbose 
)
static

Referenced by sdr_set_auto_gain().

◆ soapysdr_direct_sampling()

static int soapysdr_direct_sampling ( SoapySDRDevice *  dev,
int  on 
)
static

◆ soapysdr_gain_str_set()

static int soapysdr_gain_str_set ( SoapySDRDevice *  dev,
char *  gain_str,
int  verbose 
)
static

References getkwargs().

Referenced by sdr_set_tuner_gain().

◆ soapysdr_offset_tuning()

static int soapysdr_offset_tuning ( SoapySDRDevice *  dev)
static

◆ soapysdr_read_loop()

static int soapysdr_read_loop ( sdr_dev_t dev,
sdr_read_cb_t  cb,
void *  ctx,
uint32_t  buf_num,
uint32_t  buf_len 
)
static

◆ soapysdr_set_bandwidth()

static int soapysdr_set_bandwidth ( SoapySDRDevice *  dev,
uint32_t  bandwidth 
)
static

◆ soapysdr_show_device_info()

static void soapysdr_show_device_info ( SoapySDRDevice *  dev)
static

References sdr_dev::fullScale.

Referenced by sdr_open_soapy().