X-Git-Url: https://sigrok.org/gitweb/?p=pulseview.git;a=blobdiff_plain;f=pv%2Fdevices%2Fdevice.cpp;h=e33d27af08d1013da9c40c4f6440cf444cdd6922;hp=004749c9462f5bee93bd983901151737d5ea3337;hb=a285ce3f0cba825ac302200d1078a6bcfaf60e27;hpb=da30ecb7e72bd2547e524258efa5ec642988b70b diff --git a/pv/devices/device.cpp b/pv/devices/device.cpp index 004749c9..e33d27af 100644 --- a/pv/devices/device.cpp +++ b/pv/devices/device.cpp @@ -24,6 +24,15 @@ #include "device.hpp" +using std::map; +using std::set; + +using sigrok::ConfigKey; +using sigrok::Error; + +using Glib::VariantBase; +using Glib::Variant; + namespace pv { namespace devices { @@ -43,6 +52,39 @@ std::shared_ptr Device::device() const { return device_; } +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) { + return default_value; + } + + const auto iter = keys.find(key); + if (iter == keys.end() || + (*iter).second.find(sigrok::GET) == (*iter).second.end()) + return default_value; + + return VariantBase::cast_dynamic>( + device_->config_get(ConfigKey::SAMPLERATE)).get(); +} + +void Device::start() { + assert(session_); + session_->start(); +} + void Device::run() { assert(device_); assert(session_);