+ signals_changed();
+ }
+}
+
+void SigSession::feed_in_meta_analog(const struct sr_dev_inst *sdi,
+ const sr_datafeed_meta_analog &meta_analog)
+{
+ using view::AnalogSignal;
+
+ {
+ lock_guard<mutex> data_lock(_data_mutex);
+ lock_guard<mutex> sampling_lock(_sampling_mutex);
+
+ // Create an empty data::Analog for coming data snapshots
+ _analog_data.reset(new data::Analog(
+ meta_analog, _sample_rate));
+ assert(_analog_data);
+ if (!_analog_data)
+ return;
+ }
+
+ {
+ lock_guard<mutex> lock(_signals_mutex);
+
+ // Add the signals
+ shared_ptr<AnalogSignal> signal(
+ new AnalogSignal(QString("???"), _analog_data));
+ _signals.push_back(signal);
+
+ signals_changed();
+ }
+}
+
+void SigSession::feed_in_logic(const sr_datafeed_logic &logic)
+{
+ lock_guard<mutex> lock(_data_mutex);
+ if (!_cur_logic_snapshot)
+ {
+ // Create a new data snapshot
+ _cur_logic_snapshot = shared_ptr<data::LogicSnapshot>(
+ new data::LogicSnapshot(logic));
+ _logic_data->push_snapshot(_cur_logic_snapshot);
+ }
+ else
+ {
+ // Append to the existing data snapshot
+ _cur_logic_snapshot->append_payload(logic);
+ }
+
+ data_updated();
+}
+
+void SigSession::feed_in_analog(const sr_datafeed_analog &analog)
+{
+ lock_guard<mutex> lock(_data_mutex);
+ if (!_cur_analog_snapshot)
+ {
+ // Create a new data snapshot
+ _cur_analog_snapshot = shared_ptr<data::AnalogSnapshot>(
+ new data::AnalogSnapshot(analog));
+ _analog_data->push_snapshot(_cur_analog_snapshot);
+ }
+ else
+ {
+ // Append to the existing data snapshot
+ _cur_analog_snapshot->append_payload(analog);
+ }
+
+ data_updated();
+}
+
+void SigSession::data_feed_in(const struct sr_dev_inst *sdi,
+ const struct sr_datafeed_packet *packet)
+{
+ assert(sdi);
+ assert(packet);
+
+ switch (packet->type) {
+ case SR_DF_HEADER:
+ {
+ lock_guard<mutex> lock(_signals_mutex);
+ _signals.clear();