Skip to content

Commit a444e90

Browse files
Merge pull request #45 from jketterl/biastee_support
Biastee support
2 parents 80b9acb + 4bd29a5 commit a444e90

File tree

3 files changed

+37
-1
lines changed

3 files changed

+37
-1
lines changed

CMakeLists.txt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,15 @@ if (APPLE)
5151
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wc++11-extensions")
5252
endif(APPLE)
5353

54+
# check if rtlsdr library includes support for bias-tee
55+
include(CheckFunctionExists)
56+
set(CMAKE_REQUIRED_LIBRARIES ${RTLSDR_LIBRARIES})
57+
check_function_exists(rtlsdr_set_bias_tee HAS_RTLSDR_SET_BIAS_TEE)
58+
unset(CMAKE_REQUIRED_LIBRARIES)
59+
if (HAS_RTLSDR_SET_BIAS_TEE)
60+
add_definitions(-DHAS_RTLSDR_SET_BIAS_TEE)
61+
endif()
62+
5463
set(OTHER_LIBS "" CACHE STRING "Other libraries")
5564

5665
SOAPY_SDR_MODULE_UTIL(

Settings.cpp

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,9 @@ SoapyRTLSDR::SoapyRTLSDR(const SoapySDR::Kwargs &args):
4242
gainMode(false),
4343
offsetMode(false),
4444
digitalAGC(false),
45+
#if HAS_RTLSDR_SET_BIAS_TEE
46+
biasTee(false),
47+
#endif
4548
ticks(false),
4649
bufferedElems(0),
4750
resetBuffer(false),
@@ -539,6 +542,18 @@ SoapySDR::ArgInfoList SoapyRTLSDR::getSettingInfo(void) const
539542

540543
setArgs.push_back(digitalAGCArg);
541544

545+
#if HAS_RTLSDR_SET_BIAS_TEE
546+
SoapySDR::ArgInfo biasTeeArg;
547+
548+
biasTeeArg.key = "biastee";
549+
biasTeeArg.value = "false";
550+
biasTeeArg.name = "Bias Tee";
551+
biasTeeArg.description = "RTL-SDR Blog V.3 Bias-Tee Mode";
552+
biasTeeArg.type = SoapySDR::ArgInfo::BOOL;
553+
554+
setArgs.push_back(biasTeeArg);
555+
#endif
556+
542557
SoapySDR_logf(SOAPY_SDR_DEBUG, "SETARGS?");
543558

544559
return setArgs;
@@ -576,6 +591,14 @@ void SoapyRTLSDR::writeSetting(const std::string &key, const std::string &value)
576591
SoapySDR_logf(SOAPY_SDR_DEBUG, "RTL-SDR digital agc mode: %s", digitalAGC ? "true" : "false");
577592
rtlsdr_set_agc_mode(dev, digitalAGC ? 1 : 0);
578593
}
594+
#if HAS_RTLSDR_SET_BIAS_TEE
595+
else if (key == "biastee")
596+
{
597+
biasTee = (value == "true") ? true: false;
598+
SoapySDR_logf(SOAPY_SDR_DEBUG, "RTL-SDR bias tee mode: %s", biasTee ? "true" : "false");
599+
rtlsdr_set_bias_tee(dev, biasTee ? 1 : 0);
600+
}
601+
#endif
579602
}
580603

581604
std::string SoapyRTLSDR::readSetting(const std::string &key) const
@@ -588,6 +611,10 @@ std::string SoapyRTLSDR::readSetting(const std::string &key) const
588611
return offsetMode?"true":"false";
589612
} else if (key == "digital_agc") {
590613
return digitalAGC?"true":"false";
614+
#if HAS_RTLSDR_SET_BIAS_TEE
615+
} else if (key == "biastee") {
616+
return biasTee?"true":"false";
617+
#endif
591618
}
592619

593620
SoapySDR_logf(SOAPY_SDR_WARNING, "Unknown setting '%s'", key.c_str());

SoapyRTLSDR.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -243,7 +243,7 @@ class SoapyRTLSDR: public SoapySDR::Device
243243
uint32_t sampleRate, centerFrequency;
244244
int ppm, directSamplingMode;
245245
size_t numBuffers, bufferLength, asyncBuffs;
246-
bool iqSwap, gainMode, offsetMode, digitalAGC;
246+
bool iqSwap, gainMode, offsetMode, digitalAGC, biasTee;
247247
double IFGain[6], tunerGain;
248248
std::atomic<long long> ticks;
249249

0 commit comments

Comments
 (0)