projects
/
pulseview.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
AnalogSignal: Prevent threshold bg from spilling beyond extents
[pulseview.git]
/
pv
/
session.cpp
diff --git
a/pv/session.cpp
b/pv/session.cpp
index 4edba0f7a2de9c5f428e9f07fe38d7532e69ad1e..ad4c17e246f0609079e470750c9c3f979d3f20cd 100644
(file)
--- a/
pv/session.cpp
+++ b/
pv/session.cpp
@@
-91,6
+91,9
@@
using sigrok::Session;
using Glib::VariantBase;
namespace pv {
using Glib::VariantBase;
namespace pv {
+
+shared_ptr<sigrok::Context> Session::sr_context;
+
Session::Session(DeviceManager &device_manager, QString name) :
device_manager_(device_manager),
default_name_(name),
Session::Session(DeviceManager &device_manager, QString name) :
device_manager_(device_manager),
default_name_(name),
@@
-316,9
+319,9
@@
void Session::restore_settings(QSettings &settings)
int decode_signals = settings.value("decode_signals").toInt();
for (int i = 0; i < decode_signals; i++) {
int decode_signals = settings.value("decode_signals").toInt();
for (int i = 0; i < decode_signals; i++) {
- settings.beginGroup("decode_signal" + QString::number(i
++
));
- // TODO Split up add_decoder() into add_decode_signal() and add_decoder(),
- // then call add_decode_signal() and signal->restore_settings() here
+ settings.beginGroup("decode_signal" + QString::number(i));
+ shared_ptr<data::DecodeSignal> signal = add_decode_signal();
+ signal->restore_settings(settings);
settings.endGroup();
}
#endif
settings.endGroup();
}
#endif
@@
-619,8
+622,6
@@
void Session::register_view(shared_ptr<views::ViewBase> view)
switch (signalbase->type()) {
case data::SignalBase::AnalogChannel:
case data::SignalBase::LogicChannel:
switch (signalbase->type()) {
case data::SignalBase::AnalogChannel:
case data::SignalBase::LogicChannel:
- case data::SignalBase::A2LChannel:
- break;
case data::SignalBase::DecodeChannel:
#ifdef ENABLE_DECODE
trace_view->add_decode_signal(
case data::SignalBase::DecodeChannel:
#ifdef ENABLE_DECODE
trace_view->add_decode_signal(
@@
-989,10
+990,26
@@
void Session::feed_in_trigger()
void Session::feed_in_frame_begin()
{
void Session::feed_in_frame_begin()
{
+ frame_began_ = true;
+
if (cur_logic_segment_ || !cur_analog_segments_.empty())
frame_began();
}
if (cur_logic_segment_ || !cur_analog_segments_.empty())
frame_began();
}
+void Session::feed_in_frame_end()
+{
+ {
+ lock_guard<recursive_mutex> lock(data_mutex_);
+ cur_logic_segment_.reset();
+ cur_analog_segments_.clear();
+ }
+
+ if (frame_began_) {
+ frame_began_ = false;
+ frame_ended();
+ }
+}
+
void Session::feed_in_logic(shared_ptr<Logic> logic)
{
lock_guard<recursive_mutex> lock(data_mutex_);
void Session::feed_in_logic(shared_ptr<Logic> logic)
{
lock_guard<recursive_mutex> lock(data_mutex_);
@@
-1089,8
+1106,6
@@
void Session::feed_in_analog(shared_ptr<Analog> analog)
void Session::data_feed_in(shared_ptr<sigrok::Device> device,
shared_ptr<Packet> packet)
{
void Session::data_feed_in(shared_ptr<sigrok::Device> device,
shared_ptr<Packet> packet)
{
- static bool frame_began = false;
-
(void)device;
assert(device);
(void)device;
assert(device);
@@
-1110,11
+1125,6
@@
void Session::data_feed_in(shared_ptr<sigrok::Device> device,
feed_in_trigger();
break;
feed_in_trigger();
break;
- case SR_DF_FRAME_BEGIN:
- feed_in_frame_begin();
- frame_began = true;
- break;
-
case SR_DF_LOGIC:
try {
feed_in_logic(dynamic_pointer_cast<Logic>(packet->payload()));
case SR_DF_LOGIC:
try {
feed_in_logic(dynamic_pointer_cast<Logic>(packet->payload()));
@@
-1133,20
+1143,25
@@
void Session::data_feed_in(shared_ptr<sigrok::Device> device,
}
break;
}
break;
+ case SR_DF_FRAME_BEGIN:
+ feed_in_frame_begin();
+ break;
+
case SR_DF_FRAME_END:
case SR_DF_FRAME_END:
+ feed_in_frame_end();
+ break;
+
case SR_DF_END:
case SR_DF_END:
- {
+ // Strictly speaking, this is performed when a frame end marker was
+ // received, so there's no point doing this again. However, not all
+ // devices use frames, and for those devices, we need to do it here.
{
lock_guard<recursive_mutex> lock(data_mutex_);
cur_logic_segment_.reset();
cur_analog_segments_.clear();
}
{
lock_guard<recursive_mutex> lock(data_mutex_);
cur_logic_segment_.reset();
cur_analog_segments_.clear();
}
- if (frame_began) {
- frame_began = false;
- frame_ended();
- }
break;
break;
- }
+
default:
break;
}
default:
break;
}