2
0
forked from Ivasoft/DSView

fix: Failed to show the xcursor on DSO mode

This commit is contained in:
dreamsourcelabTAI
2023-03-09 19:46:53 +08:00
parent 8e084fb0a9
commit e9a111379c
13 changed files with 653 additions and 18 deletions

View File

@@ -455,15 +455,14 @@ namespace pv
int run_dex = 0;
clear_all_decode_task(run_dex);
_view_data->clear();
// If switch the data buffer
if (_view_data != _capture_data){
_capture_data->clear();
_capture_data = _view_data;
}
_view_data->clear();
init_signals();
update_view();
// update setting
if (_device_agent.is_file())
@@ -743,8 +742,9 @@ namespace pv
break;
}
}
clear_signals();
RELEASE_ARRAY(_signals);
std::vector<view::Signal *>().swap(_signals);
_signals = sigs;
@@ -837,8 +837,8 @@ namespace pv
}
if (!sigs.empty())
{
RELEASE_ARRAY(_signals);
{
clear_signals();
std::vector<view::Signal *>().swap(_signals);
_signals = sigs;
}
@@ -2048,4 +2048,27 @@ namespace pv
}
}
void SigSession::clear_signals()
{
for (int i=0; i< (int)_signals.size(); i++)
{
auto *p = _signals[i];
p->sig_released(p);
DESTROY_QT_LATER(p);
}
_signals.clear();
}
view::Signal* SigSession::get_signal_by_index(int index)
{
for (int i=0; i< (int)_signals.size(); i++)
{
auto *p = _signals[i];
if (p->get_index() == index)
return p;
}
return NULL;
}
} // namespace pv

View File

@@ -381,6 +381,10 @@ public:
return _view_data == _capture_data;
}
inline void update_view(){
_callback->data_updated();
}
void auto_end();
bool have_hardware_data();
struct ds_device_base_info* get_device_list(int &out_count, int &actived_index);
@@ -391,6 +395,7 @@ public:
void set_decoder_row_label(int index, QString label);
view::DecodeTrace* get_decoder_trace(int index);
view::Signal* get_signal_by_index(int index);
private:
void set_cur_samplelimits(uint64_t samplelimits);
@@ -463,6 +468,8 @@ private:
void repeat_capture_wait_timeout();
void repeat_wait_prog_timeout();
void realtime_refresh_timeout();
void clear_signals();
private:
mutable std::mutex _sampling_mutex;

View File

@@ -79,6 +79,7 @@ DsoSignal::DsoSignal(data::DsoSnapshot *data,
}
_signal_type = DSO_SIGNAL;
_vDial = NULL;
GVariant *gvar_list, *gvar_list_vdivs;
@@ -106,8 +107,19 @@ DsoSignal::DsoSignal(data::DsoSnapshot *data,
load_settings();
}
DsoSignal::DsoSignal(const DsoSignal &o)
:Signal(NULL)
{
}
DsoSignal::DsoSignal(DsoSignal &o)
:Signal(NULL)
{
}
DsoSignal::~DsoSignal()
{
DESTROY_OBJECT(_vDial);
}
void DsoSignal::set_scale(int height)
@@ -1495,6 +1507,15 @@ double DsoSignal::get_voltage(uint64_t index)
QString DsoSignal::get_voltage(double v, int p, bool scaled)
{
// if (_vDial == NULL)
// return "";
this->_hover_en = this->_hover_en;
if (_vDial == NULL){
assert(false);
}
if (scaled)
v = v * _vDial->get_value() * _vDial->get_factor() * DS_CONF_DSO_VDIVS / get_view_rect().height();
else

View File

@@ -81,6 +81,9 @@ private:
static const uint16_t MS_RectMargin = 10;
static const uint16_t MS_RectHeight = 25;
DsoSignal(const DsoSignal &o);
DsoSignal(DsoSignal &o);
public:
DsoSignal(pv::data::DsoSnapshot *data,
sr_channel *probe);

View File

@@ -60,6 +60,9 @@ class Signal : public Trace
{
Q_OBJECT
signals:
void sig_released(void *o);
protected:
Signal(sr_channel * const probe);
@@ -68,9 +71,7 @@ protected:
*/
Signal(const Signal &s, sr_channel * const probe);
public:
// virtual pv::data::SignalData* data() = 0;
public:
/**
* Returns true if the trace is visible and enabled.
*/

View File

@@ -607,10 +607,12 @@ void Viewport::mousePressEvent(QMouseEvent *event)
if (_action_type == NO_ACTION && _view.xcursors_shown()) {
auto i = _view.get_xcursorList().begin();
const QRect xrect = _view.get_view_rect();
while (i != _view.get_xcursorList().end()) {
const double cursorX = xrect.left() + (*i)->value(XCursor::XCur_Y)*xrect.width();
const double cursorY0 = xrect.top() + (*i)->value(XCursor::XCur_X0)*xrect.height();
const double cursorY1 = xrect.top() + (*i)->value(XCursor::XCur_X1)*xrect.height();
if ((*i)->get_close_rect(xrect).contains(_view.hover_point())) {
_view.del_xcursor(*i);
if (_view.get_xcursorList().empty())

View File

@@ -43,6 +43,7 @@ XCursor::XCursor(View &view, QColor &colour,
_colour(colour)
{
_dsoSig = NULL;
_sig_index = -1;
for(auto s : _view.session().get_signals()) {
if (s->signal_type() == DSO_SIGNAL){
@@ -53,18 +54,29 @@ XCursor::XCursor(View &view, QColor &colour,
}
}
}
if (_dsoSig != NULL){
connect(_dsoSig, SIGNAL(sig_released(void*)), this, SLOT(on_signal_deleted(void*)));
_sig_index = _dsoSig->get_index();
}
}
XCursor::XCursor(const XCursor &x) :
QObject(),
_view(x._view),
_dsoSig(x._dsoSig),
_yvalue(x._yvalue),
_value0(x._value0),
_value1(x._value1),
_grabbed(XCur_None),
_colour(x._colour)
_view(x._view)
{
_dsoSig = x._dsoSig;
_yvalue = x._yvalue;
_value0 = x._value0;
_value1 = x._value1;
_grabbed = XCur_None;
_colour = x._colour;
_sig_index = -1;
if (_dsoSig != NULL){
connect(_dsoSig, SIGNAL(sig_released(void*)), this, SLOT(on_signal_deleted(void*)));
_sig_index = _dsoSig->get_index();
}
}
QColor XCursor::colour()
@@ -84,15 +96,29 @@ DsoSignal* XCursor::channel()
{
return _dsoSig;
}
void XCursor::set_channel(DsoSignal *sig)
{
_dsoSig = sig;
if (_dsoSig != NULL){
connect(_dsoSig, SIGNAL(sig_released(void*)), this, SLOT(on_signal_deleted(void*)));
_sig_index = _dsoSig->get_index();
}
}
void XCursor::on_signal_deleted(void *o)
{
if (o == _dsoSig){
_dsoSig = NULL;
}
}
enum XCursor::XCur_type XCursor::grabbed()
{
return _grabbed;
}
void XCursor::set_grabbed(XCur_type type, bool grabbed)
{
if (_grabbed == XCur_None && grabbed)
@@ -100,6 +126,7 @@ void XCursor::set_grabbed(XCur_type type, bool grabbed)
else if (_grabbed == type && !grabbed)
_grabbed = XCur_None;
}
void XCursor::rel_grabbed()
{
_grabbed = XCur_None;
@@ -129,7 +156,15 @@ void XCursor::set_value(XCur_type type, double value)
}
void XCursor::paint(QPainter &p, const QRect &rect, XCur_type highlight, int order)
{
{
// Attach the channel
if (_dsoSig == NULL && _sig_index != -1){
auto sig = _view.session().get_signal_by_index(_sig_index);
if (sig != NULL){
_dsoSig = dynamic_cast<DsoSignal*>(sig);
}
}
const int arrow = 3;
const int x = rect.left() + _yvalue * rect.width();
const int y0 = rect.top() + _value0 * rect.height();
@@ -216,10 +251,14 @@ void XCursor::paint_label(QPainter &p, const QRect &rect)
QRect close = get_close_rect(rect);
p.setPen(Qt::NoPen);
if (close.contains(QPoint(_view.hover_point().x(), _view.hover_point().y())))
p.setBrush(View::Red);
else
else if (_dsoSig != NULL)
p.setBrush(_dsoSig->get_colour());
else
p.setBrush(View::Blue);
p.drawRect(close);
p.setPen(Qt::black);
p.drawLine(close.left() + 2, close.top() + 2, close.right() - 2, close.bottom() - 2);

View File

@@ -124,9 +124,13 @@ public:
signals:
void value_changed();
private slots:
void on_signal_deleted(void *o);
protected:
View &_view;
DsoSignal *_dsoSig;
int _sig_index;
double _yvalue;
double _value0;

View File

@@ -0,0 +1,74 @@
{
"Device": "DSCope",
"DeviceMode": 1,
"Horizontal trigger position": "50",
"Language": 31,
"Operation Mode": "Normal",
"Time base": "10000",
"Trigger channel": "0",
"Trigger hold off": "0",
"Trigger margin": "8",
"Trigger slope": "0",
"Trigger source": "0",
"Version": 2,
"channel": [
{
"colour": "#eeb211",
"coupling": 0,
"enabled": true,
"index": 0,
"name": "0",
"trigValue": 0.40157480314960631,
"type": 10001,
"vdiv": 1000,
"vfactor": 1,
"zeroPos": 0.40157480314960631
},
{
"colour": "#009925",
"coupling": 0,
"enabled": true,
"index": 1,
"name": "1",
"trigValue": 0.59842519685039375,
"type": 10001,
"vdiv": 1000,
"vfactor": 1,
"zeroPos": 0.59842519685039375
}
],
"decoder": [
],
"measure": [
{
"index": 0,
"site": 0,
"type": 1
},
{
"index": 0,
"site": 1,
"type": 17
},
{
"index": 0,
"site": 2,
"type": 18
},
{
"index": 1,
"site": 5,
"type": 1
},
{
"index": 1,
"site": 6,
"type": 17
},
{
"index": 1,
"site": 7,
"type": 18
}
]
}

View File

@@ -0,0 +1,48 @@
{
"Device": "DSCope",
"DeviceMode": 2,
"Horizontal trigger position": "0",
"Language": 31,
"Operation Mode": "Normal",
"Sample count": "10000000",
"Sample rate": "10000000",
"Time base": "10000",
"Trigger channel": "0",
"Trigger hold off": "0",
"Trigger margin": "8",
"Trigger slope": "0",
"Trigger source": "0",
"Version": 2,
"channel": [
{
"colour": "#eeb211",
"coupling": 0,
"enabled": true,
"index": 0,
"mapMax": 5,
"mapMin": -5,
"mapUnit": "V",
"name": "0",
"type": 10002,
"vdiv": 1000,
"vfactor": 1,
"zeroPos": 0.5
},
{
"colour": "#009925",
"coupling": 0,
"enabled": true,
"index": 1,
"mapMax": 5,
"mapMin": -5,
"mapUnit": "V",
"name": "1",
"type": 10002,
"vdiv": 1000,
"vfactor": 1,
"zeroPos": 0.5
}
],
"decoder": [
]
}

279
DSView/res/DSLogic0.def.dsc Normal file
View File

@@ -0,0 +1,279 @@
{
"Channel Mode": "Use 16 Channels (Max 20MHz)",
"Device": "DSLogic",
"DeviceMode": 0,
"Enable RLE Compress": 0,
"Filter Targets": "None",
"Horizontal trigger position": "0",
"Language": 31,
"Max Height": "1X",
"Operation Mode": "Stream Mode",
"Sample count": "1000000",
"Sample rate": "1000000",
"Stop Options": "Upload captured data",
"Threshold Level": 1,
"Trigger channel": "0",
"Trigger hold off": "0",
"Trigger margin": "8",
"Trigger slope": "0",
"Trigger source": "0",
"Using Clock Negedge": 0,
"Using External Clock": 0,
"Version": 2,
"channel": [
{
"colour": "default",
"enabled": true,
"index": 0,
"name": "0",
"strigger": 0,
"type": 10000
},
{
"colour": "default",
"enabled": true,
"index": 1,
"name": "1",
"strigger": 0,
"type": 10000
},
{
"colour": "default",
"enabled": true,
"index": 2,
"name": "2",
"strigger": 0,
"type": 10000
},
{
"colour": "default",
"enabled": true,
"index": 3,
"name": "3",
"strigger": 0,
"type": 10000
},
{
"colour": "default",
"enabled": true,
"index": 4,
"name": "4",
"strigger": 0,
"type": 10000
},
{
"colour": "default",
"enabled": true,
"index": 5,
"name": "5",
"strigger": 0,
"type": 10000
},
{
"colour": "default",
"enabled": true,
"index": 6,
"name": "6",
"strigger": 0,
"type": 10000
},
{
"colour": "default",
"enabled": true,
"index": 7,
"name": "7",
"strigger": 0,
"type": 10000
},
{
"colour": "default",
"enabled": true,
"index": 8,
"name": "8",
"strigger": 0,
"type": 10000
},
{
"colour": "default",
"enabled": true,
"index": 9,
"name": "9",
"strigger": 0,
"type": 10000
},
{
"colour": "default",
"enabled": true,
"index": 10,
"name": "10",
"strigger": 0,
"type": 10000
},
{
"colour": "default",
"enabled": true,
"index": 11,
"name": "11",
"strigger": 0,
"type": 10000
},
{
"colour": "default",
"enabled": true,
"index": 12,
"name": "12",
"strigger": 0,
"type": 10000
},
{
"colour": "default",
"enabled": true,
"index": 13,
"name": "13",
"strigger": 0,
"type": 10000
},
{
"colour": "default",
"enabled": true,
"index": 14,
"name": "14",
"strigger": 0,
"type": 10000
},
{
"colour": "default",
"enabled": true,
"index": 15,
"name": "15",
"strigger": 0,
"type": 10000
}
],
"decoder": [
],
"trigger": {
"advTriggerMode": false,
"serialTriggerBits": 0,
"serialTriggerChannel": 0,
"serialTriggerClock": "X X X X X X X X X X X X X X X X",
"serialTriggerData": "X X X X X X X X X X X X X X X X",
"serialTriggerStart": "X X X X X X X X X X X X X X X X",
"serialTriggerStop": "X X X X X X X X X X X X X X X X",
"stageTriggerContiguous0": false,
"stageTriggerContiguous1": false,
"stageTriggerContiguous10": false,
"stageTriggerContiguous11": false,
"stageTriggerContiguous12": false,
"stageTriggerContiguous13": false,
"stageTriggerContiguous14": false,
"stageTriggerContiguous15": false,
"stageTriggerContiguous2": false,
"stageTriggerContiguous3": false,
"stageTriggerContiguous4": false,
"stageTriggerContiguous5": false,
"stageTriggerContiguous6": false,
"stageTriggerContiguous7": false,
"stageTriggerContiguous8": false,
"stageTriggerContiguous9": false,
"stageTriggerCount0": 1,
"stageTriggerCount1": 1,
"stageTriggerCount10": 1,
"stageTriggerCount11": 1,
"stageTriggerCount12": 1,
"stageTriggerCount13": 1,
"stageTriggerCount14": 1,
"stageTriggerCount15": 1,
"stageTriggerCount2": 1,
"stageTriggerCount3": 1,
"stageTriggerCount4": 1,
"stageTriggerCount5": 1,
"stageTriggerCount6": 1,
"stageTriggerCount7": 1,
"stageTriggerCount8": 1,
"stageTriggerCount9": 1,
"stageTriggerInv00": 0,
"stageTriggerInv01": 0,
"stageTriggerInv010": 0,
"stageTriggerInv011": 0,
"stageTriggerInv012": 0,
"stageTriggerInv013": 0,
"stageTriggerInv014": 0,
"stageTriggerInv015": 0,
"stageTriggerInv02": 0,
"stageTriggerInv03": 0,
"stageTriggerInv04": 0,
"stageTriggerInv05": 0,
"stageTriggerInv06": 0,
"stageTriggerInv07": 0,
"stageTriggerInv08": 0,
"stageTriggerInv09": 0,
"stageTriggerInv10": 0,
"stageTriggerInv11": 0,
"stageTriggerInv110": 0,
"stageTriggerInv111": 0,
"stageTriggerInv112": 0,
"stageTriggerInv113": 0,
"stageTriggerInv114": 0,
"stageTriggerInv115": 0,
"stageTriggerInv12": 0,
"stageTriggerInv13": 0,
"stageTriggerInv14": 0,
"stageTriggerInv15": 0,
"stageTriggerInv16": 0,
"stageTriggerInv17": 0,
"stageTriggerInv18": 0,
"stageTriggerInv19": 0,
"stageTriggerLogic0": 1,
"stageTriggerLogic1": 1,
"stageTriggerLogic10": 1,
"stageTriggerLogic11": 1,
"stageTriggerLogic12": 1,
"stageTriggerLogic13": 1,
"stageTriggerLogic14": 1,
"stageTriggerLogic15": 1,
"stageTriggerLogic2": 1,
"stageTriggerLogic3": 1,
"stageTriggerLogic4": 1,
"stageTriggerLogic5": 1,
"stageTriggerLogic6": 1,
"stageTriggerLogic7": 1,
"stageTriggerLogic8": 1,
"stageTriggerLogic9": 1,
"stageTriggerValue00": "X X X X X X X X X X X X X X X X",
"stageTriggerValue01": "X X X X X X X X X X X X X X X X",
"stageTriggerValue010": "X X X X X X X X X X X X X X X X",
"stageTriggerValue011": "X X X X X X X X X X X X X X X X",
"stageTriggerValue012": "X X X X X X X X X X X X X X X X",
"stageTriggerValue013": "X X X X X X X X X X X X X X X X",
"stageTriggerValue014": "X X X X X X X X X X X X X X X X",
"stageTriggerValue015": "X X X X X X X X X X X X X X X X",
"stageTriggerValue02": "X X X X X X X X X X X X X X X X",
"stageTriggerValue03": "X X X X X X X X X X X X X X X X",
"stageTriggerValue04": "X X X X X X X X X X X X X X X X",
"stageTriggerValue05": "X X X X X X X X X X X X X X X X",
"stageTriggerValue06": "X X X X X X X X X X X X X X X X",
"stageTriggerValue07": "X X X X X X X X X X X X X X X X",
"stageTriggerValue08": "X X X X X X X X X X X X X X X X",
"stageTriggerValue09": "X X X X X X X X X X X X X X X X",
"stageTriggerValue10": "X X X X X X X X X X X X X X X X",
"stageTriggerValue11": "X X X X X X X X X X X X X X X X",
"stageTriggerValue110": "X X X X X X X X X X X X X X X X",
"stageTriggerValue111": "X X X X X X X X X X X X X X X X",
"stageTriggerValue112": "X X X X X X X X X X X X X X X X",
"stageTriggerValue113": "X X X X X X X X X X X X X X X X",
"stageTriggerValue114": "X X X X X X X X X X X X X X X X",
"stageTriggerValue115": "X X X X X X X X X X X X X X X X",
"stageTriggerValue12": "X X X X X X X X X X X X X X X X",
"stageTriggerValue13": "X X X X X X X X X X X X X X X X",
"stageTriggerValue14": "X X X X X X X X X X X X X X X X",
"stageTriggerValue15": "X X X X X X X X X X X X X X X X",
"stageTriggerValue16": "X X X X X X X X X X X X X X X X",
"stageTriggerValue17": "X X X X X X X X X X X X X X X X",
"stageTriggerValue18": "X X X X X X X X X X X X X X X X",
"stageTriggerValue19": "X X X X X X X X X X X X X X X X",
"triggerPos": 1,
"triggerStages": 0,
"triggerTab": 0
}
}

View File

@@ -0,0 +1,82 @@
{
"Channel Mode": "Use Channels 0~1 (Max 200MHz)",
"Device": "DSLogic",
"DeviceMode": 1,
"Enable RLE Compress": 1,
"Filter Targets": "None",
"Horizontal trigger position": "50",
"Language": 31,
"Max Height": "1X",
"Operation Mode": "Stream Mode",
"Sample count": "1000000",
"Sample rate": "100000000",
"Stop Options": "Upload captured data",
"Threshold Level": "1.8/2.5/3.3V Level",
"Trigger hold off": "0",
"Trigger margin": "8",
"Trigger slope": "0",
"Trigger source": "0",
"Using Clock Negedge": 0,
"Using External Clock": 0,
"Version": 2,
"channel": [
{
"colour": "#eeb211",
"coupling": 0,
"enabled": true,
"index": 0,
"name": "0",
"trigValue": 0.40157480314960631,
"type": 10001,
"vdiv": 1000,
"vfactor": 1,
"zeroPos": 0.40157480314960631
},
{
"colour": "#009925",
"coupling": 0,
"enabled": true,
"index": 1,
"name": "1",
"trigValue": 0.59842519685039375,
"type": 10001,
"vdiv": 1000,
"vfactor": 1,
"zeroPos": 0.59842519685039375
}
],
"decoder": [
],
"measure": [
{
"index": 0,
"site": 0,
"type": 1
},
{
"index": 0,
"site": 1,
"type": 17
},
{
"index": 0,
"site": 2,
"type": 18
},
{
"index": 1,
"site": 5,
"type": 1
},
{
"index": 1,
"site": 6,
"type": 17
},
{
"index": 1,
"site": 7,
"type": 18
}
]
}

View File

@@ -0,0 +1,52 @@
{
"Channel Mode": "Use Channels 0~1 (Max 10MHz)",
"Device": "DSLogic",
"DeviceMode": 2,
"Enable RLE Compress": 1,
"Filter Targets": "None",
"Horizontal trigger position": "0",
"Language": 31,
"Max Height": "1X",
"Operation Mode": "Stream Mode",
"Sample count": "1000000",
"Sample rate": "1000000",
"Stop Options": "Upload captured data",
"Threshold Level": "1.8/2.5/3.3V Level",
"Trigger hold off": "0",
"Trigger margin": "8",
"Trigger slope": "0",
"Trigger source": "0",
"Using Clock Negedge": 0,
"Using External Clock": 0,
"Version": 2,
"channel": [
{
"colour": "#eeb211",
"coupling": 0,
"enabled": true,
"index": 0,
"mapMax": 5,
"mapMin": -5,
"mapUnit": "V",
"name": "0",
"type": 10002,
"vdiv": 1000,
"zeroPos": 0.5
},
{
"colour": "#009925",
"coupling": 0,
"enabled": true,
"index": 1,
"mapMax": 5,
"mapMin": -5,
"mapUnit": "V",
"name": "1",
"type": 10002,
"vdiv": 1000,
"zeroPos": 0.5
}
],
"decoder": [
]
}