Fix clazy warnings regarding range-for references
[pulseview.git] / pv / devices / device.cpp
index ec4318b4632989dac05641839742f7fd5ff3080d..4ce055965167bc842d766269ff259f8cc45454fa 100644 (file)
  */
 
 #include <cassert>
+#include <type_traits>
+
+#include <QApplication>
+#include <QDebug>
+#include <QString>
 
 #include <libsigrokcxx/libsigrokcxx.hpp>
 
 #include "device.hpp"
 
-using std::map;
-using std::set;
+using std::is_same;
+using std::shared_ptr;
 
 using sigrok::ConfigKey;
 using sigrok::Capability;
-using sigrok::Error;
 
 using Glib::VariantBase;
 using Glib::Variant;
@@ -36,29 +40,23 @@ using Glib::Variant;
 namespace pv {
 namespace devices {
 
-Device::Device()
-{
-}
-
 Device::~Device()
 {
        if (session_)
                session_->remove_datafeed_callbacks();
 }
 
-std::shared_ptr<sigrok::Session> Device::session() const
+shared_ptr<sigrok::Session> Device::session() const
 {
        return session_;
 }
 
-std::shared_ptr<sigrok::Device> Device::device() const
+shared_ptr<sigrok::Device> Device::device() const
 {
        return device_;
 }
 
-template
-uint64_t Device::read_config(const sigrok::ConfigKey*,
-       const uint64_t);
+template uint64_t Device::read_config(const sigrok::ConfigKey*, const uint64_t);
 
 template<typename T>
 T Device::read_config(const ConfigKey *key, const T default_value)
@@ -68,11 +66,33 @@ T Device::read_config(const ConfigKey *key, const T default_value)
        if (!device_)
                return default_value;
 
-       if (!device_->config_check(key, Capability::GET))
+       if (!device_->config_check(key, Capability::GET)) {
+               qWarning() << QApplication::tr("Querying config key %1 is not allowed")
+                       .arg(QString::fromStdString(key->identifier()));
                return default_value;
-
-       return VariantBase::cast_dynamic<Glib::Variant<guint64>>(
-               device_->config_get(ConfigKey::SAMPLERATE)).get();
+       }
+
+       VariantBase value;
+       try {
+               value = device_->config_get(key);
+       } catch (const sigrok::Error &e) {
+               qWarning() << QApplication::tr("Querying config key %1 resulted in %2")
+                       .arg(QString::fromStdString(key->identifier()), e.what());
+               return default_value;
+       }
+
+       if (is_same<T, uint32_t>::value)
+               return VariantBase::cast_dynamic<Glib::Variant<guint32>>(value).get();
+       if (is_same<T, int32_t>::value)
+               return VariantBase::cast_dynamic<Glib::Variant<gint32>>(value).get();
+       if (is_same<T, uint64_t>::value)
+               return VariantBase::cast_dynamic<Glib::Variant<guint64>>(value).get();
+       if (is_same<T, int64_t>::value)
+               return VariantBase::cast_dynamic<Glib::Variant<gint64>>(value).get();
+
+       qWarning() << QApplication::tr("Unknown type supplied when attempting to query %1")
+               .arg(QString::fromStdString(key->identifier()));
+       return default_value;
 }
 
 void Device::start()