From 03f95329451ca1a981443103a145c416d3264c12 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/osmosdr_device.h | 3 +++ lib/file/file_source_c.cc | 13 ++++++++----- lib/file/file_source_c.h | 2 +- lib/osmosdr_device.cc | 11 ++++++++--- 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/osmosdr_device.h b/include/osmosdr/osmosdr_device.h index 1f59751..126f368 100644 --- a/include/osmosdr/osmosdr_device.h +++ b/include/osmosdr/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/file/file_source_c.cc b/lib/file/file_source_c.cc index 059c2d1..ceb6dd1 100644 --- a/lib/file/file_source_c.cc +++ b/lib/file/file_source_c.cc @@ -101,14 +101,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 4679b5a..e7bc067 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/osmosdr_device.cc b/lib/osmosdr_device.cc index 6941a9d..55fa20d 100644 --- a/lib/osmosdr_device.cc +++ b/lib/osmosdr_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/rtl_tcp/rtl_tcp_source_c.cc b/lib/rtl_tcp/rtl_tcp_source_c.cc index 392d98b..19747ff 100644 --- a/lib/rtl_tcp/rtl_tcp_source_c.cc +++ b/lib/rtl_tcp/rtl_tcp_source_c.cc @@ -149,13 +149,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 b452e68..aaeb515 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 );