From 9b8b0e53f6a670b4809ff98775d8c61d50fc913e Mon Sep 17 00:00:00 2001 From: Steve Markgraf Date: Sun, 7 Oct 2012 17:43:32 +0200 Subject: [PATCH] add getters for direct sampling and offset tuning mode Signed-off-by: Steve Markgraf --- include/rtl-sdr.h | 17 +++++++++++++++++ src/librtlsdr.c | 19 +++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/include/rtl-sdr.h b/include/rtl-sdr.h index 0b130bb..157d2a5 100644 --- a/include/rtl-sdr.h +++ b/include/rtl-sdr.h @@ -241,6 +241,15 @@ RTLSDR_API int rtlsdr_set_agc_mode(rtlsdr_dev_t *dev, int on); */ RTLSDR_API int rtlsdr_set_direct_sampling(rtlsdr_dev_t *dev, int on); +/*! + * Get state of the direct sampling mode + * + * \param dev the device handle given by rtlsdr_open() + * \return -1 on error, 0 means disabled, 1 I-ADC input enabled + * 2 Q-ADC input enabled + */ +RTLSDR_API int rtlsdr_get_direct_sampling(rtlsdr_dev_t *dev); + /*! * Enable or disable offset tuning for zero-IF tuners, which allows to avoid * problems caused by the DC offset of the ADCs and 1/f noise. @@ -251,6 +260,14 @@ RTLSDR_API int rtlsdr_set_direct_sampling(rtlsdr_dev_t *dev, int on); */ RTLSDR_API int rtlsdr_set_offset_tuning(rtlsdr_dev_t *dev, int on); +/*! + * Get state of the offset tuning mode + * + * \param dev the device handle given by rtlsdr_open() + * \return -1 on error, 0 means disabled, 1 enabled + */ +RTLSDR_API int rtlsdr_get_offset_tuning(rtlsdr_dev_t *dev); + /* streaming functions */ RTLSDR_API int rtlsdr_reset_buffer(rtlsdr_dev_t *dev); diff --git a/src/librtlsdr.c b/src/librtlsdr.c index 75dd1f3..1b2fb52 100644 --- a/src/librtlsdr.c +++ b/src/librtlsdr.c @@ -1020,6 +1020,14 @@ int rtlsdr_set_direct_sampling(rtlsdr_dev_t *dev, int on) return r; } +int rtlsdr_get_direct_sampling(rtlsdr_dev_t *dev) +{ + if (!dev) + return -1; + + return dev->direct_sampling; +} + int rtlsdr_set_offset_tuning(rtlsdr_dev_t *dev, int on) { int r = 0; @@ -1030,6 +1038,9 @@ int rtlsdr_set_offset_tuning(rtlsdr_dev_t *dev, int on) if (dev->tuner_type == RTLSDR_TUNER_R820T) return -2; + if (dev->direct_sampling) + return -3; + /* based on keenerds 1/f noise measurements */ dev->offs_freq = on ? ((dev->rate / 2) * 170 / 100) : 0; r |= rtlsdr_set_if_freq(dev, dev->offs_freq); @@ -1045,6 +1056,14 @@ int rtlsdr_set_offset_tuning(rtlsdr_dev_t *dev, int on) return r; } +int rtlsdr_get_offset_tuning(rtlsdr_dev_t *dev) +{ + if (!dev) + return -1; + + return (dev->offs_freq) ? 1 : 0; +} + static rtlsdr_dongle_t *find_known_device(uint16_t vid, uint16_t pid) { unsigned int i;