X-Git-Url: http://git.code-monkey.de/?p=pulseview.git;a=blobdiff_plain;f=pv%2Fdevices%2Fdevice.cpp;h=4ce055965167bc842d766269ff259f8cc45454fa;hp=d7a78afae546c972af6cbf0a012364118bab075a;hb=f4ab4b5c657e5613caba82feaa81a8a400e4f331;hpb=05b2276928535ae1f8e16b6f9c89802d8d261fee diff --git a/pv/devices/device.cpp b/pv/devices/device.cpp index d7a78af..4ce0559 100644 --- a/pv/devices/device.cpp +++ b/pv/devices/device.cpp @@ -14,21 +14,25 @@ * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * along with this program; if not, see . */ #include +#include + +#include +#include +#include #include #include "device.hpp" -using std::map; -using std::set; +using std::is_same; +using std::shared_ptr; using sigrok::ConfigKey; -using sigrok::Error; +using sigrok::Capability; using Glib::VariantBase; using Glib::Variant; @@ -36,62 +40,76 @@ using Glib::Variant; namespace pv { namespace devices { -Device::Device() { -} - -Device::~Device() { +Device::~Device() +{ if (session_) session_->remove_datafeed_callbacks(); } -std::shared_ptr Device::session() const { +shared_ptr Device::session() const +{ return session_; } -std::shared_ptr Device::device() const { +shared_ptr 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 T Device::read_config(const ConfigKey *key, const T default_value) { assert(key); - map< const ConfigKey*, set > keys; if (!device_) return default_value; - try { - keys = device_->config_keys(ConfigKey::DEVICE_OPTIONS); - } catch (const Error) { + 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; } - const auto iter = keys.find(key); - if (iter == keys.end() || - (*iter).second.find(sigrok::GET) == (*iter).second.end()) + 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; + } - return VariantBase::cast_dynamic>( - device_->config_get(ConfigKey::SAMPLERATE)).get(); + if (is_same::value) + return VariantBase::cast_dynamic>(value).get(); + if (is_same::value) + return VariantBase::cast_dynamic>(value).get(); + if (is_same::value) + return VariantBase::cast_dynamic>(value).get(); + if (is_same::value) + return VariantBase::cast_dynamic>(value).get(); + + qWarning() << QApplication::tr("Unknown type supplied when attempting to query %1") + .arg(QString::fromStdString(key->identifier())); + return default_value; } -void Device::start() { +void Device::start() +{ assert(session_); session_->start(); } -void Device::run() { +void Device::run() +{ assert(device_); assert(session_); session_->run(); } -void Device::stop() { +void Device::stop() +{ assert(session_); session_->stop(); }