]> sigrok.org Git - pulseview.git/blobdiff - pv/devicemanager.cpp
Trace View: Move ruler time conversion from View to Ruler
[pulseview.git] / pv / devicemanager.cpp
index ca8f66bee5316e6116d4fb38afcbdd93ca78a24d..5090b480e3d49adc41bc4e861102ce9a6e6bbb8b 100644 (file)
@@ -30,6 +30,7 @@
 #include <libsigrokcxx/libsigrokcxx.hpp>
 
 #include <QApplication>
+#include <QDebug>
 #include <QObject>
 #include <QProgressDialog>
 
@@ -84,7 +85,7 @@ DeviceManager::DeviceManager(shared_ptr<Context> context,
         * Scan for devices. No specific options apply here, this is
         * best effort auto detection.
         */
-       for (auto entry : context->drivers()) {
+       for (auto& entry : context->drivers()) {
                if (!do_scan)
                        break;
 
@@ -187,7 +188,7 @@ DeviceManager::drive_scan_options(vector<string> user_spec,
 {
        map<const ConfigKey *, Glib::VariantBase> result;
 
-       for (auto entry : user_spec) {
+       for (auto& entry : user_spec) {
                /*
                 * Split key=value specs. Accept entries without separator
                 * (for simplified boolean specifications).
@@ -252,21 +253,27 @@ DeviceManager::driver_scan(
        devices_.remove_if([&](shared_ptr<devices::HardwareDevice> device) {
                return device->hardware_device()->driver() == driver; });
 
-       // Do the scan
-       auto devices = driver->scan(drvopts);
+       try {
+               // Do the scan
+               auto devices = driver->scan(drvopts);
 
-       // Add the scanned devices to the main list, set display names and sort.
-       for (shared_ptr<sigrok::HardwareDevice> device : devices) {
-               const shared_ptr<devices::HardwareDevice> d(
-                       new devices::HardwareDevice(context_, device));
-               driver_devices.push_back(d);
-       }
+               // Add the scanned devices to the main list, set display names and sort.
+               for (shared_ptr<sigrok::HardwareDevice>& device : devices) {
+                       const shared_ptr<devices::HardwareDevice> d(
+                               new devices::HardwareDevice(context_, device));
+                       driver_devices.push_back(d);
+               }
 
-       devices_.insert(devices_.end(), driver_devices.begin(),
-               driver_devices.end());
-       devices_.sort(bind(&DeviceManager::compare_devices, this, _1, _2));
-       driver_devices.sort(bind(
-               &DeviceManager::compare_devices, this, _1, _2));
+               devices_.insert(devices_.end(), driver_devices.begin(),
+                       driver_devices.end());
+               devices_.sort(bind(&DeviceManager::compare_devices, this, _1, _2));
+               driver_devices.sort(bind(
+                       &DeviceManager::compare_devices, this, _1, _2));
+
+       } catch (const sigrok::Error &e) {
+               qWarning() << QApplication::tr("Error when scanning device driver '%1': %2").
+                       arg(QString::fromStdString(driver->name()), e.what());
+       }
 
        return driver_devices;
 }