#include <thread>
#include <vector>
+#include <boost/thread.hpp>
+
#include <QObject>
#include <QString>
~SigSession();
- std::shared_ptr<sigrok::Device> get_device() const;
+ DeviceManager& device_manager();
+
+ const DeviceManager& device_manager() const;
+
+ const std::shared_ptr<sigrok::Session>& session() const;
+
+ std::shared_ptr<sigrok::Device> device() const;
/**
* Sets device instance that will be used in the next capture session.
std::set< std::shared_ptr<data::SignalData> > get_data() const;
- std::vector< std::shared_ptr<view::Signal> >
- get_signals() const;
+ boost::shared_mutex& signals_mutex() const;
+
+ const std::vector< std::shared_ptr<view::Signal> >& signals() const;
#ifdef ENABLE_DECODE
bool add_decoder(srd_decoder *const dec);
private:
DeviceManager &_device_manager;
+ std::shared_ptr<sigrok::Session> _session;
/**
* The device instance that will be used in the next capture session.
mutable std::mutex _sampling_mutex;
capture_state _capture_state;
- mutable std::mutex _signals_mutex;
+ mutable boost::shared_mutex _signals_mutex;
std::vector< std::shared_ptr<view::Signal> > _signals;
mutable std::mutex _data_mutex;
void data_received();
void frame_ended();
-
-public:
- // Hack. The libsigrok API now allows for multiple sessions. However,
- // sigrok::Session calls are scattered around the PV architecture and a
- // single SigSession object is being used across multiple sequential
- // sessions. This is a mess. For now just keep a single sigrok::Session
- // pointer here which we can use for all those scattered calls.
- static std::shared_ptr<sigrok::Session> _sr_session;
};
} // namespace pv