// Check that at least one channel is enabled
assert(device_);
- const std::shared_ptr<sigrok::Device> device = device_->device();
- assert(device);
- auto channels = device->channels();
- bool enabled = std::any_of(channels.begin(), channels.end(),
- [](shared_ptr<Channel> channel) { return channel->enabled(); });
-
- if (!enabled) {
- error_handler(tr("No channels enabled."));
- return;
+ const shared_ptr<sigrok::Device> sr_dev = device_->device();
+ if (sr_dev) {
+ const auto channels = sr_dev->channels();
+ if (!std::any_of(channels.begin(), channels.end(),
+ [](shared_ptr<Channel> channel) {
+ return channel->enabled(); })) {
+ error_handler(tr("No channels enabled."));
+ return;
+ }
}
// Begin the session
void Session::update_signals()
{
assert(device_);
- assert(capture_state_ == Stopped);
+
+ lock_guard<recursive_mutex> lock(data_mutex_);
const shared_ptr<sigrok::Device> sr_dev = device_->device();
if (!sr_dev) {
return shared_ptr<view::Signal>();
}
-void Session::read_sample_rate(shared_ptr<sigrok::Device> device)
-{
- assert(device);
- map< const ConfigKey*, set<sigrok::Capability> > keys;
-
- try {
- keys = device->config_keys(ConfigKey::DEVICE_OPTIONS);
- } catch (const Error) {}
-
- const auto iter = keys.find(ConfigKey::SAMPLERATE);
- cur_samplerate_ = (iter != keys.end() &&
- (*iter).second.find(sigrok::GET) != (*iter).second.end()) ?
- VariantBase::cast_dynamic<Variant<guint64>>(
- device->config_get(ConfigKey::SAMPLERATE)).get() : 0;
-}
-
void Session::sample_thread_proc(shared_ptr<devices::Device> device,
function<void (const QString)> error_handler)
{
assert(device);
assert(error_handler);
- const std::shared_ptr<sigrok::Device> sr_dev = device->device();
- assert(sr_dev);
- read_sample_rate(sr_dev);
+ cur_samplerate_ = device_->read_config<uint64_t>(ConfigKey::SAMPLERATE);
try {
device_->session()->start();
void Session::feed_in_header()
{
- read_sample_rate(device_->device());
+ cur_samplerate_ = device_->read_config<uint64_t>(ConfigKey::SAMPLERATE);
}
void Session::feed_in_meta(shared_ptr<Meta> meta)
if (!logic_data_)
{
- qDebug() << "Unexpected logic packet";
- return;
+ // The only reason logic_data_ would not have been created is
+ // if it was not possible to determine the signals when the
+ // device was created.
+ update_signals();
}
if (!cur_logic_segment_)
set_capture_state(Running);
// Get sample limit.
- assert(device_);
- const std::shared_ptr<sigrok::Device> device =
- device_->device();
- assert(device);
- const auto keys = device->config_keys(
- ConfigKey::DEVICE_OPTIONS);
- const auto iter = keys.find(ConfigKey::LIMIT_SAMPLES);
- const uint64_t sample_limit = (iter != keys.end() &&
- (*iter).second.find(sigrok::GET) !=
- (*iter).second.end()) ?
- VariantBase::cast_dynamic<Variant<guint64>>(
- device->config_get(ConfigKey::LIMIT_SAMPLES)).get() : 0;
+ const uint64_t sample_limit = device_->read_config<uint64_t>(
+ ConfigKey::LIMIT_SAMPLES);
// Create a new data segment
cur_logic_segment_ = shared_ptr<data::LogicSegment>(