]> sigrok.org Git - pulseview.git/blobdiff - pv/devices/device.cpp
main window: Prefer the user specified device in new sessions
[pulseview.git] / pv / devices / device.cpp
index 004749c9462f5bee93bd983901151737d5ea3337..855a1d82fca65019952b1baf46f21aef60c859de 100644 (file)
@@ -14,8 +14,7 @@
  * 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 <http://www.gnu.org/licenses/>.
  */
 
 #include <cassert>
 
 #include "device.hpp"
 
+using std::shared_ptr;
+
+using sigrok::ConfigKey;
+using sigrok::Capability;
+
+using Glib::VariantBase;
+using Glib::Variant;
+
 namespace pv {
 namespace devices {
 
-Device::Device() {
-}
-
-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_;
 }
 
-void Device::run() {
+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)
+{
+       assert(key);
+
+       if (!device_)
+               return default_value;
+
+       if (!device_->config_check(key, Capability::GET))
+               return default_value;
+
+       return VariantBase::cast_dynamic<Glib::Variant<guint64>>(
+               device_->config_get(ConfigKey::SAMPLERATE)).get();
+}
+
+void Device::start()
+{
+       assert(session_);
+       session_->start();
+}
+
+void Device::run()
+{
        assert(device_);
        assert(session_);
        session_->run();
 }
 
-void Device::stop() {
+void Device::stop()
+{
        assert(session_);
        session_->stop();
 }