summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteve Markgraf <steve@steve-m.de>2012-10-07 17:43:32 +0200
committerSteve Markgraf <steve@steve-m.de>2012-10-07 17:43:32 +0200
commit9b8b0e53f6a670b4809ff98775d8c61d50fc913e (patch)
treebfd28b5e4f2c7424df49b4bc5ee903527989d5f6
parent22549e0da01c08d1cab99ce76702d93c15711e4d (diff)
add getters for direct sampling and offset tuning mode
Signed-off-by: Steve Markgraf <steve@steve-m.de>
-rw-r--r--include/rtl-sdr.h17
-rw-r--r--src/librtlsdr.c19
2 files changed, 36 insertions, 0 deletions
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
@@ -242,6 +242,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;