using sigrok::Analog;
using sigrok::Channel;
-using sigrok::ChannelType;
using sigrok::ConfigKey;
using sigrok::DatafeedCallbackFunction;
using sigrok::Error;
#ifdef ENABLE_DECODE
bool Session::add_decoder(srd_decoder *const dec)
{
+ if (!dec)
+ return false;
+
map<const srd_channel*, shared_ptr<data::SignalBase> > channels;
shared_ptr<data::DecoderStack> decoder_stack;
// Auto select the initial channels
for (const srd_channel *pdch : all_channels)
for (shared_ptr<data::SignalBase> b : signalbases_) {
- if (b->type() == ChannelType::LOGIC) {
+ if (b->logic_data()) {
if (QString::fromUtf8(pdch->name).toLower().
contains(b->name().toLower()))
channels[pdch] = b;
// Create the decode signal
shared_ptr<data::SignalBase> signalbase =
- make_shared<data::SignalBase>(nullptr);
+ make_shared<data::SignalBase>(nullptr, data::SignalBase::DecodeChannel);
signalbase->set_decoder_stack(decoder_stack);
signalbases_.insert(signalbase);
unsigned int logic_channel_count = count_if(
channels.begin(), channels.end(),
[] (shared_ptr<Channel> channel) {
- return channel->type() == ChannelType::LOGIC; });
+ return channel->type() == sigrok::ChannelType::LOGIC; });
// Create data containers for the logic data segments
{
switch(channel->type()->id()) {
case SR_CHANNEL_LOGIC:
if (!signalbase) {
- signalbase = make_shared<data::SignalBase>(channel);
+ signalbase = make_shared<data::SignalBase>(channel,
+ data::SignalBase::LogicChannel);
signalbases_.insert(signalbase);
all_signal_data_.insert(logic_data_);
case SR_CHANNEL_ANALOG:
{
if (!signalbase) {
- signalbase = make_shared<data::SignalBase>(channel);
+ signalbase = make_shared<data::SignalBase>(channel,
+ data::SignalBase::AnalogChannel);
signalbases_.insert(signalbase);
shared_ptr<data::Analog> data(new data::Analog());
// Create a new data segment
cur_logic_segment_ = make_shared<data::LogicSegment>(
- *logic_data_, logic, cur_samplerate_);
+ *logic_data_, logic->unit_size(), cur_samplerate_);
logic_data_->push_segment(cur_logic_segment_);
// @todo Putting this here means that only listeners querying
// frame_began is DecoderStack, but in future we need to signal
// this after both analog and logic sweeps have begun.
frame_began();
- } else {
- // Append to the existing data segment
- cur_logic_segment_->append_payload(logic);
}
+ cur_logic_segment_->append_payload(logic);
+
data_received();
}