From 5410ee53b26f954f9895f84257526e5b0c88e1d4 Mon Sep 17 00:00:00 2001 From: Dimitri Stolnikov Date: Tue, 10 Dec 2013 16:59:01 +0100 Subject: [PATCH] device: implement "nofake" hint to exclude dummy devices from discovery usage example: osmosdr::device_t hint( "nofake" ); osmosdr::devices_t devs = osmosdr::device::find( hint ); --- include/osmosdr/device.h | 3 +++ lib/device.cc | 11 ++++++++--- lib/file/file_source_c.cc | 13 ++++++++----- lib/file/file_source_c.h | 2 +- lib/rtl_tcp/rtl_tcp_source_c.cc | 11 +++++++---- lib/rtl_tcp/rtl_tcp_source_c.h | 2 +- 6 files changed, 28 insertions(+), 14 deletions(-) diff --git a/include/osmosdr/device.h b/include/osmosdr/device.h index b43bef0..60e2718 100644 --- a/include/osmosdr/device.h +++ b/include/osmosdr/device.h @@ -101,6 +101,9 @@ namespace osmosdr { * The device hint should be used to narrow down the search * to particular transport types and/or transport arguments. * + * The device hint "nofake" switches off dummy devices created + * by "file" (and other) implementations. + * * \param hint a partially (or fully) filled in logical device * \return a vector of logical devices for all radios on the system */ diff --git a/lib/device.cc b/lib/device.cc index 72396a6..ee3070b 100644 --- a/lib/device.cc +++ b/lib/device.cc @@ -119,6 +119,11 @@ devices_t device::find(const device_t &hint) { boost::mutex::scoped_lock lock(_device_mutex); + bool fake = true; + + if ( hint.count("nofake") ) + fake = false; + devices_t devices; #ifdef ENABLE_OSMOSDR @@ -150,7 +155,7 @@ devices_t device::find(const device_t &hint) devices.push_back( device_t(dev) ); #endif #ifdef ENABLE_NETSDR - BOOST_FOREACH( std::string dev, netsdr_source_c::get_devices( true ) ) + BOOST_FOREACH( std::string dev, netsdr_source_c::get_devices( fake ) ) devices.push_back( device_t(dev) ); #endif @@ -159,11 +164,11 @@ devices_t device::find(const device_t &hint) * in a graphical interface etc... */ #ifdef ENABLE_RTL_TCP - BOOST_FOREACH( std::string dev, rtl_tcp_source_c::get_devices() ) + BOOST_FOREACH( std::string dev, rtl_tcp_source_c::get_devices( fake ) ) devices.push_back( device_t(dev) ); #endif #ifdef ENABLE_FILE - BOOST_FOREACH( std::string dev, file_source_c::get_devices() ) + BOOST_FOREACH( std::string dev, file_source_c::get_devices( fake ) ) devices.push_back( device_t(dev) ); #endif diff --git a/lib/file/file_source_c.cc b/lib/file/file_source_c.cc index 0669ec9..d4a0f1f 100644 --- a/lib/file/file_source_c.cc +++ b/lib/file/file_source_c.cc @@ -102,14 +102,17 @@ std::string file_source_c::name() return "IQ File Source"; } -std::vector file_source_c::get_devices() +std::vector file_source_c::get_devices( bool fake ) { std::vector devices; - std::string args = "file='/path/to/your/file'"; - args += ",rate=1e6,freq=100e6,repeat=true,throttle=true"; - args += ",label='Complex Sampled (IQ) File'"; - devices.push_back( args ); + if ( fake ) + { + std::string args = "file='/path/to/your/file'"; + args += ",rate=1e6,freq=100e6,repeat=true,throttle=true"; + args += ",label='Complex Sampled (IQ) File'"; + devices.push_back( args ); + } return devices; } diff --git a/lib/file/file_source_c.h b/lib/file/file_source_c.h index 298ecdc..d2d71ca 100644 --- a/lib/file/file_source_c.h +++ b/lib/file/file_source_c.h @@ -45,7 +45,7 @@ public: std::string name(); - static std::vector< std::string > get_devices(); + static std::vector< std::string > get_devices( bool fake = false ); size_t get_num_channels( void ); diff --git a/lib/rtl_tcp/rtl_tcp_source_c.cc b/lib/rtl_tcp/rtl_tcp_source_c.cc index 606254b..a365688 100644 --- a/lib/rtl_tcp/rtl_tcp_source_c.cc +++ b/lib/rtl_tcp/rtl_tcp_source_c.cc @@ -151,13 +151,16 @@ std::string rtl_tcp_source_c::name() return "RTL TCP Client"; } -std::vector rtl_tcp_source_c::get_devices() +std::vector rtl_tcp_source_c::get_devices( bool fake ) { std::vector devices; - std::string args = "rtl_tcp=localhost:1234"; - args += ",label='RTL-SDR Spectrum Server'"; - devices.push_back( args ); + if ( fake ) + { + std::string args = "rtl_tcp=localhost:1234"; + args += ",label='RTL-SDR Spectrum Server'"; + devices.push_back( args ); + } return devices; } diff --git a/lib/rtl_tcp/rtl_tcp_source_c.h b/lib/rtl_tcp/rtl_tcp_source_c.h index c875d95..454d1a2 100644 --- a/lib/rtl_tcp/rtl_tcp_source_c.h +++ b/lib/rtl_tcp/rtl_tcp_source_c.h @@ -46,7 +46,7 @@ public: std::string name(); - static std::vector< std::string > get_devices(); + static std::vector< std::string > get_devices( bool fake = false ); size_t get_num_channels( void );