Skip to content

Commit

Permalink
Added a config key/value 'absdb-mode = [0..3]'
Browse files Browse the repository at this point in the history
setting for SDRPlay.
  • Loading branch information
gvanem committed Mar 11, 2024
1 parent f192658 commit 8e1aeb0
Show file tree
Hide file tree
Showing 5 changed files with 56 additions and 32 deletions.
19 changes: 15 additions & 4 deletions dump1090.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ silent = false # Silent mode for testing network I/O (
tui = curses # Select 'curses' or 'wincon' text-user interface for option `--interactive'.

#
# RTLSDR / SDRplay settings used with option `--device <N / name>':
# Common RTLSDR / SDRplay settings used with option `--device <N / name>':
#
agc = false # Enable Digital AGC.
bias-t = false # Enable Bias-T output.
Expand All @@ -91,12 +91,23 @@ freq = 1090.0M # Set frequency.
gain = auto # Set gain.
gain = 31

if-mode = lif # IF-mode; 'ZIF' or 'LIF'.
ppm = 0 # Set frequency correction (in parts-per-million).
rtl-reset = false # Do a USB power-down/up cycle before starting the RTLSDR API
samplerate = 2M # Set sample-rate.

#
# SDRplay specific settings used with option `--device sdrplay':
#
if-mode = lif # IF-mode; 'ZIF' or 'LIF'.
usb-bulk = false # Use USB bulk mode (instead of isochronous) for SDRPlay

ppm = 0 # Set frequency correction (in parts-per-million).
samplerate = 2M # Set sample-rate.
#
# ADSB mode:
#
adsb-mode = 0 # 0 = sdrplay_api_ADSB_DECIMATION (default)
# 1 = sdrplay_api_ADSB_NO_DECIMATION_LOWPASS
# 2 = sdrplay_api_ADSB_NO_DECIMATION_BANDPASS_2MHZ
# 3 = sdrplay_api_ADSB_NO_DECIMATION_BANDPASS_3MHZ

#
# Include-file of hostile hosts. Some very active IPs.
Expand Down
1 change: 1 addition & 0 deletions src/dump1090.c
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,7 @@ static void background_tasks (void);
static void modeS_exit (void);

static const struct cfg_table config[] = {
{ "adsb-mode", ARG_FUNC, (void*) sdrplay_set_adsb_mode },
{ "bias-t", ARG_FUNC, (void*) set_bias_tee },
{ "usb-bulk", ARG_ATOB, (void*) &Modes.sdrplay.USB_bulk_mode },
{ "calibrate", ARG_ATOB, (void*) &Modes.rtlsdr.calibrate },
Expand Down
2 changes: 1 addition & 1 deletion src/misc.h
Original file line number Diff line number Diff line change
Expand Up @@ -320,7 +320,7 @@ typedef struct sdrplay_conf {
bool disable_DAB_notch;
bool USB_bulk_mode;
int gain_reduction;
int ADSB_mode;
int ADSB_mode; /**< == sdrplay_api_ControlParamsT::adsbMode */
int BW_mode;
int *gains;
int gain_count;
Expand Down
55 changes: 33 additions & 22 deletions src/sdrplay.c
Original file line number Diff line number Diff line change
Expand Up @@ -268,7 +268,7 @@ static void sdrplay_event_callback (sdrplay_api_EventT event_id,
sdrplay_api_EventParamsT *params,
void *cb_context)
{
if (sdr.cancelling)
if (sdr.cancelling || Modes.exit)
return;

EnterCriticalSection (&Modes.print_mutex);
Expand Down Expand Up @@ -691,21 +691,7 @@ int sdrplay_read_async (sdrplay_dev *device,
sdr.ch_params->rspDuoTunerParams.rfDabNotchEnable = (1 - Modes.sdrplay.disable_DAB_notch);
}

switch (Modes.sdrplay.ADSB_mode)
{
case 0:
sdr.ch_params->ctrlParams.adsbMode = sdrplay_api_ADSB_DECIMATION;
break;
case 1:
sdr.ch_params->ctrlParams.adsbMode = sdrplay_api_ADSB_NO_DECIMATION_LOWPASS;
break;
case 2:
sdr.ch_params->ctrlParams.adsbMode = sdrplay_api_ADSB_NO_DECIMATION_BANDPASS_2MHZ;
break;
case 3:
sdr.ch_params->ctrlParams.adsbMode = sdrplay_api_ADSB_NO_DECIMATION_BANDPASS_3MHZ;
break;
}
sdr.ch_params->ctrlParams.adsbMode = Modes.sdrplay.ADSB_mode;

if (Modes.sdrplay.if_mode == false) /* Zero-IF mode */
{
Expand All @@ -724,8 +710,13 @@ int sdrplay_read_async (sdrplay_dev *device,

if (Modes.sdrplay.USB_bulk_mode)
{
TRACE ("Using streaming USB mode bulk.");
sdr.dev_params->devParams->mode = sdrplay_api_BULK;
TRACE ("Using USB bulk mode");
sdr.dev_params->devParams->mode = Modes.sdrplay.USB_bulk_mode;
}
else
{
TRACE ("Using USB isochronous mode (default)");
sdr.dev_params->devParams->mode = sdrplay_api_ISOCH;
}

if (sdr.ch_params == sdr.dev_params->rxChannelA)
Expand All @@ -734,8 +725,8 @@ int sdrplay_read_async (sdrplay_dev *device,
tuner = 'B';
else tuner = '?';

TRACE ("Tuner %c: sample-rate: %.0f MS/s, adsbMode: %s.\n"
" decimation-enable: %d, decimation-factor: %d",
TRACE ("'Tuner_%c': sample-rate: %.0f MS/s, adsbMode: %s.\n"
" decimation-enable: %d, decimation-factor: %d",
tuner, sdr.dev_params->devParams->fsFreq.fsHz / 1E6,
sdrplay_adsb_mode(sdr.ch_params->ctrlParams.adsbMode),
sdr.ch_params->ctrlParams.decimation.enable,
Expand All @@ -761,7 +752,6 @@ int sdrplay_read_async (sdrplay_dev *device,
TRACE ("'exit' was set");
break;
}

TRACE ("rx_num_callbacks: %llu, sdr.max_sig: %6d, sdr.rx_data_idx: %6u",
sdr.rx_num_callbacks, sdr.max_sig, sdr.rx_data_idx);
}
Expand Down Expand Up @@ -837,7 +827,6 @@ int sdrplay_init (const char *name, int index, sdrplay_dev **device)
Modes.sdrplay.tuner = sdrplay_api_Tuner_B; /* RSPduo default */
Modes.sdrplay.mode = sdrplay_api_RspDuoMode_Master; /* RSPduo default */
Modes.sdrplay.BW_mode = 1; /* 5 MHz */
Modes.sdrplay.ADSB_mode = 1; /* for Zero-IF */
Modes.sdrplay.over_sample = true;

sdr.rx_data = malloc (MODES_RSP_BUF_SIZE * MODES_RSP_BUFFERS * sizeof(short));
Expand Down Expand Up @@ -969,3 +958,25 @@ int sdrplay_exit (sdrplay_dev *device)
sdr.chosen_dev = NULL;
return (sdr.last_rc);
}

bool sdrplay_set_adsb_mode (const char *arg)
{
char *end;
sdrplay_api_AdsbModeT mode = strtod (arg, &end);

if (end == arg || *end != '\0') /* A non-numeric value */
goto fail;

if (mode == sdrplay_api_ADSB_DECIMATION ||
mode == sdrplay_api_ADSB_NO_DECIMATION_LOWPASS ||
mode == sdrplay_api_ADSB_NO_DECIMATION_BANDPASS_2MHZ ||
mode == sdrplay_api_ADSB_NO_DECIMATION_BANDPASS_3MHZ)
{
Modes.sdrplay.ADSB_mode = mode;
return (true);
}

fail:
LOG_STDERR ("\nIllegal 'adsb-mode = %s'\n", arg);
return (false);
}
11 changes: 6 additions & 5 deletions src/sdrplay.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,12 @@

typedef void (*sdrplay_cb) (uint8_t *buf, uint32_t len, void *ctx);

extern int sdrplay_init (const char *name, int index, sdrplay_dev **device);
extern int sdrplay_exit (sdrplay_dev *device);
extern int sdrplay_set_gain (sdrplay_dev *device, int gain);
extern int sdrplay_cancel_async (sdrplay_dev *device);
extern int sdrplay_read_async (sdrplay_dev *device,
extern int sdrplay_init (const char *name, int index, sdrplay_dev **device);
extern int sdrplay_exit (sdrplay_dev *device);
extern bool sdrplay_set_adsb_mode (const char *arg);
extern int sdrplay_set_gain (sdrplay_dev *device, int gain);
extern int sdrplay_cancel_async (sdrplay_dev *device);
extern int sdrplay_read_async (sdrplay_dev *device,
sdrplay_cb cb,
void *ctx,
uint32_t buf_num,
Expand Down

0 comments on commit 8e1aeb0

Please sign in to comment.