X-Git-Url: https://sigrok.org/gitweb/?p=pulseview.git;a=blobdiff_plain;f=pv%2Fdevicemanager.cpp;h=ca8f66bee5316e6116d4fb38afcbdd93ca78a24d;hp=15e791e128eb8e542ec705459be51d4ec41dd5ba;hb=f6b6c9bf50999dc99f9517318ffd3114cae4960f;hpb=58d8e4c6c50bb119d405d754a6fb122d932d6510 diff --git a/pv/devicemanager.cpp b/pv/devicemanager.cpp index 15e791e1..ca8f66be 100644 --- a/pv/devicemanager.cpp +++ b/pv/devicemanager.cpp @@ -48,8 +48,6 @@ using std::string; using std::unique_ptr; using std::vector; -using Glib::ustring; -using Glib::Variant; using Glib::VariantBase; using sigrok::ConfigKey; @@ -58,7 +56,8 @@ using sigrok::Driver; namespace pv { -DeviceManager::DeviceManager(shared_ptr context, std::string driver) : +DeviceManager::DeviceManager(shared_ptr context, + std::string driver, bool do_scan) : context_(context) { unique_ptr progress(new QProgressDialog("", @@ -86,6 +85,13 @@ DeviceManager::DeviceManager(shared_ptr context, std::string driver) : * best effort auto detection. */ for (auto entry : context->drivers()) { + if (!do_scan) + break; + + // Skip drivers we won't scan anyway + if (!driver_supported(entry.second)) + continue; + progress->setLabelText(QObject::tr("Scanning for %1...") .arg(QString::fromStdString(entry.first))); @@ -170,10 +176,10 @@ DeviceManager::user_spec_device() const /** * Convert generic options to data types that are specific to Driver::scan(). * - * @param[in] user_spec vector of tokenized words, string format - * @param[in] driver_opts driver's scan options, result of Driver::scan_options() + * @param[in] user_spec Vector of tokenized words, string format. + * @param[in] driver_opts Driver's scan options, result of Driver::scan_options(). * - * @return map of options suitable for Driver::scan() + * @return Map of options suitable for Driver::scan(). */ map DeviceManager::drive_scan_options(vector user_spec, @@ -217,14 +223,8 @@ DeviceManager::drive_scan_options(vector user_spec, return result; } -list< shared_ptr > -DeviceManager::driver_scan( - shared_ptr driver, map drvopts) +bool DeviceManager::driver_supported(shared_ptr driver) const { - list< shared_ptr > driver_devices; - - assert(driver); - /* * We currently only support devices that can deliver samples at * a fixed samplerate (i.e. oscilloscopes and logic analysers). @@ -232,9 +232,19 @@ DeviceManager::driver_scan( * @todo Add support for non-monotonic devices (DMMs, sensors, etc). */ const auto keys = driver->config_keys(); - bool supported_device = keys.count(ConfigKey::LOGIC_ANALYZER) | - keys.count(ConfigKey::OSCILLOSCOPE); - if (!supported_device) + + return keys.count(ConfigKey::LOGIC_ANALYZER) | keys.count(ConfigKey::OSCILLOSCOPE); +} + +list< shared_ptr > +DeviceManager::driver_scan( + shared_ptr driver, map drvopts) +{ + list< shared_ptr > driver_devices; + + assert(driver); + + if (!driver_supported(driver)) return driver_devices; // Remove any device instances from this driver from the device