+void DecodeSignal::connect_input_segment_notifiers(uint32_t segment_id)
+{
+ for (decode::DecodeChannel& ch : channels_)
+ if (ch.assigned_signal) {
+ const shared_ptr<Logic> logic_data = ch.assigned_signal->logic_data();
+
+ shared_ptr<const LogicSegment> segment;
+ if (segment_id < logic_data->logic_segments().size()) {
+ segment = logic_data->logic_segments().at(segment_id)->get_shared_ptr();
+ } else {
+ qWarning() << "Signal" << name() << ":" << ch.assigned_signal->name() \
+ << "has no logic segment, can't connect notifier" << segment_id;
+ continue;
+ }
+
+ if (!segment)
+ continue;
+
+ connect(segment.get(), SIGNAL(completed()), this, SLOT(on_input_segment_completed()));
+ }
+}
+
+void DecodeSignal::disconnect_input_segment_notifiers(uint32_t segment_id)
+{
+ for (decode::DecodeChannel& ch : channels_)
+ if (ch.assigned_signal) {
+ const shared_ptr<Logic> logic_data = ch.assigned_signal->logic_data();
+
+ shared_ptr<const LogicSegment> segment;
+ if (segment_id < logic_data->logic_segments().size()) {
+ segment = logic_data->logic_segments().at(segment_id)->get_shared_ptr();
+ } else {
+ continue;
+ }
+
+ if (!segment)
+ continue;
+
+ disconnect(segment.get(), SIGNAL(completed()), this, SLOT(on_input_segment_completed()));
+ }
+}
+