2
0
forked from Ivasoft/DSView

Remove dynamic_cast

This commit is contained in:
dreamsourcelabTAI
2022-11-03 18:42:54 +08:00
parent 57ae013256
commit 55e3483bff
27 changed files with 267 additions and 251 deletions

View File

@@ -150,9 +150,8 @@ void DecoderStack::build_row()
_rows.clear();
// Add classes
for (auto &dec : _stack)
{
assert(dec);
for (auto dec : _stack)
{
const srd_decoder *const decc = dec->decoder();
assert(dec->decoder());
@@ -411,7 +410,6 @@ void DecoderStack::do_decode_work()
_stask_stauts->_decoder = this;
_decoder_status->clear(); //clear old items
pv::view::LogicSignal *logic_signal = NULL;
pv::data::Logic *data = NULL;
if (!_options_changed)
@@ -437,17 +435,20 @@ void DecoderStack::do_decode_work()
for (auto dec : _stack) {
if (!dec->channels().empty()) {
for(auto s : _session->get_signals()) {
if((s->get_index() == (*dec->channels().begin()).second) &&
(logic_signal = dynamic_cast<view::LogicSignal*>(s)) &&
(data = logic_signal->logic_data()))
break;
if(s->get_index() == (*dec->channels().begin()).second && s->signal_type() == LOGIC_SIGNAL)
{
pv::view::LogicSignal *logicSig = (pv::view::LogicSignal*)s;
data = logicSig->logic_data();
if (data != NULL)
break;
}
}
if (data)
if (data != NULL)
break;
}
}
if (!data)
if (!data == NULL)
return;
// Check we have a snapshot of data

View File

@@ -174,7 +174,8 @@ void SpectrumStack::calc_fft()
pv::view::DsoSignal *dsoSig = NULL;
for(auto s : _session->get_signals()) {
if ((dsoSig = dynamic_cast<view::DsoSignal*>(s))) {
if (s->signal_type() == DSO_SIGNAL) {
view::DsoSignal *dsoSig = (view::DsoSignal*)s;
if (dsoSig->get_index() == _index && dsoSig->enabled()) {
data = dsoSig->dso_data();
break;

View File

@@ -262,9 +262,9 @@ DsComboBox* DecoderOptionsDlg::create_probe_selector(
int dex = 0;
for(auto s : sigs) {
if (dynamic_cast<view::LogicSignal*>(s) && s->enabled())
{
for(auto s : sigs)
{
if (s->signal_type() == LOGIC_SIGNAL && s->enabled()){
selector->addItem(s->get_name(),QVariant::fromValue(s->get_index()));
if (probe_iter != _dec->channels().end()) {

View File

@@ -57,8 +57,8 @@ DsoMeasure::DsoMeasure(SigSession *session, View &parent,
_measure_tab->setUsesScrollButtons(false);
for(auto s : _session->get_signals()) {
view::DsoSignal *dsoSig;
if ((dsoSig = dynamic_cast<view::DsoSignal*>(s)) && dsoSig->enabled()) {
if (s->signal_type() == DSO_SIGNAL && s->enabled()) {
view::DsoSignal *dsoSig = (view::DsoSignal*)s;
QWidget *measure_widget = new QWidget(this);
this->add_measure(measure_widget, dsoSig);
_measure_tab->addTab(measure_widget, QString::number(dsoSig->get_index()));
@@ -160,9 +160,9 @@ void DsoMeasure::accept()
QVariant id = sc->property("id");
enum DSO_MEASURE_TYPE ms_type = DSO_MEASURE_TYPE(id.toInt());
for(auto s : _session->get_signals()) {
view::DsoSignal *dsoSig = NULL;
if ((dsoSig = dynamic_cast<view::DsoSignal*>(s))) {
for(auto s : _session->get_signals()) {
if (s->signal_type() == DSO_SIGNAL) {
view::DsoSignal *dsoSig = (view::DsoSignal*)s;
if (_measure_tab->currentWidget()->property("index").toInt() == dsoSig->get_index()) {
_view.get_viewstatus()->set_measure(_position, false, dsoSig->get_index(), ms_type);
break;

View File

@@ -69,8 +69,8 @@ FftOptions::FftOptions(QWidget *parent, SigSession *session) :
// setup _ch_combobox
for(auto s : _session->get_signals()) {
view::DsoSignal *dsoSig = NULL;
if ((dsoSig = dynamic_cast<view::DsoSignal*>(s))) {
if (s->signal_type() == DSO_SIGNAL) {
view::DsoSignal *dsoSig = (view::DsoSignal*)s;
_ch_combobox->addItem(dsoSig->get_name(), QVariant::fromValue(dsoSig->get_index()));
}
}

View File

@@ -76,8 +76,8 @@ LissajousOptions::LissajousOptions(SigSession *session, QWidget *parent) :
QHBoxLayout *ylayout = new QHBoxLayout();
for(auto s : _session->get_signals()) {
view::DsoSignal *dsoSig = NULL;
if ((dsoSig = dynamic_cast<view::DsoSignal*>(s))) {
if (s->signal_type() == DSO_SIGNAL) {
view::DsoSignal *dsoSig = (view::DsoSignal*)s;
QString index_str = QString::number(dsoSig->get_index());
QRadioButton *xradio = new QRadioButton(index_str, _x_group);
xradio->setProperty("index", dsoSig->get_index());
@@ -183,8 +183,8 @@ void LissajousOptions::accept()
_session->lissajous_rebuild(enable, xindex, yindex, _percent->value());
for(auto s : _session->get_signals()) {
view::DsoSignal *dsoSig = NULL;
if ((dsoSig = dynamic_cast<view::DsoSignal*>(s))) {
if (s->signal_type() == DSO_SIGNAL) {
view::DsoSignal *dsoSig = (view::DsoSignal*)s;
dsoSig->set_show(!enable);
}
}

View File

@@ -80,8 +80,8 @@ MathOptions::MathOptions(SigSession *session, QWidget *parent) :
QHBoxLayout *src2_layout = new QHBoxLayout();
for(auto s : _session->get_signals()) {
view::DsoSignal *dsoSig = NULL;;
if ((dsoSig = dynamic_cast<view::DsoSignal*>(s))) {
if (s->signal_type() == DSO_SIGNAL) {
view::DsoSignal *dsoSig = (view::DsoSignal*)s;
QString index_str = QString::number(dsoSig->get_index());
QRadioButton *xradio = new QRadioButton(index_str, _src1_group);
xradio->setProperty("index", dsoSig->get_index());
@@ -208,8 +208,8 @@ void MathOptions::accept()
view::DsoSignal *dsoSig2 = NULL;
for(auto s : _session->get_signals()) {
view::DsoSignal *dsoSig = NULL;;
if ((dsoSig = dynamic_cast<view::DsoSignal*>(s))) {
if (s->signal_type() == DSO_SIGNAL) {
view::DsoSignal *dsoSig = (view::DsoSignal*)s;
if (dsoSig->get_index() == src1)
dsoSig1 = dsoSig;
if (dsoSig->get_index() == src2)

View File

@@ -53,11 +53,11 @@ Search::Search(QWidget *parent, SigSession *session, std::map<uint16_t, QString>
int index = 0;
for(auto s : _session->get_signals()) {
view::LogicSignal *logic_sig = NULL;
if ((logic_sig = dynamic_cast<view::LogicSignal*>(s))) {
if (s->signal_type() == LOGIC_SIGNAL) {
view::LogicSignal *logicSig = (view::LogicSignal*)s;
QLineEdit *search_lineEdit = new QLineEdit(this);
if (pattern.find(logic_sig->get_index()) != pattern.end())
search_lineEdit->setText(pattern[logic_sig->get_index()]);
if (pattern.find(logicSig->get_index()) != pattern.end())
search_lineEdit->setText(pattern[logicSig->get_index()]);
else
search_lineEdit->setText("X");
search_lineEdit->setValidator(value_validator);
@@ -66,8 +66,8 @@ Search::Search(QWidget *parent, SigSession *session, std::map<uint16_t, QString>
search_lineEdit->setFont(font);
_search_lineEdit_vec.push_back(search_lineEdit);
search_layout->addWidget(new QLabel(logic_sig->get_name()+":"), index, 0, Qt::AlignRight);
search_layout->addWidget(new QLabel(QString::number(logic_sig->get_index())), index, 1, Qt::AlignRight);
search_layout->addWidget(new QLabel(logicSig->get_name()+":"), index, 0, Qt::AlignRight);
search_layout->addWidget(new QLabel(QString::number(logicSig->get_index())), index, 1, Qt::AlignRight);
search_layout->addWidget(search_lineEdit, index, 2);
connect(search_lineEdit, SIGNAL(editingFinished()), this, SLOT(format()));
@@ -113,9 +113,9 @@ std::map<uint16_t, QString> Search::get_pattern()
int index = 0;
for(auto s :_session->get_signals()) {
view::LogicSignal *logic_sig = NULL;
if ((logic_sig = dynamic_cast<view::LogicSignal*>(s))) {
pattern[logic_sig->get_index()] = _search_lineEdit_vec[index]->text();
if (s->signal_type() == LOGIC_SIGNAL) {
view::LogicSignal *logicSig = (view::LogicSignal*)s;
pattern[logicSig->get_index()] = _search_lineEdit_vec[index]->text();
index++;
}
}

View File

@@ -185,12 +185,13 @@ void WaitingDialog::changeText()
if (gvar != NULL) {
zero_fgain = g_variant_get_boolean(gvar);
g_variant_unref(gvar);
if (zero_fgain) {
view::DsoSignal *dsoSig = NULL;
if (zero_fgain) {
for(auto s : _session->get_signals()){
if ((dsoSig = dynamic_cast<view::DsoSignal*>(s)))
if (s->signal_type() == DSO_SIGNAL){
view::DsoSignal *dsoSig = (view::DsoSignal*)s;
dsoSig->set_enable(dsoSig->get_index() == 0);
}
}
std::this_thread::sleep_for(std::chrono::milliseconds(100));
_device_agent->set_config(NULL, NULL, SR_CONF_ZERO_COMB, g_variant_new_boolean(true));

View File

@@ -401,8 +401,8 @@ void DsoTriggerDock::init()
_channel_comboBox->clear();
for(auto s : _session->get_signals()) {
view::DsoSignal *dsoSig = NULL;
if ((dsoSig = dynamic_cast<view::DsoSignal*>(s))) {
if (s->signal_type() == DSO_SIGNAL) {
view::DsoSignal *dsoSig = (view::DsoSignal*)s;
_channel_comboBox->addItem(dsoSig->get_name(), QVariant::fromValue(dsoSig->get_index()));
}
}

View File

@@ -607,11 +607,11 @@ void MeasureDock::update_edge()
const auto &sigs = _session->get_signals();
for(auto s : _session->get_signals()) {
view::LogicSignal *logicSig = NULL;
if ((logicSig = dynamic_cast<view::LogicSignal*>(s)) &&
(logicSig->enabled()) &&
(logicSig->get_index() == _edge_ch_cmb_vec[edge_index]->currentText().toInt())){
if (s->signal_type() == LOGIC_SIGNAL
&& s->enabled()
&& s->get_index() == _edge_ch_cmb_vec[edge_index]->currentText().toInt())
{
view::LogicSignal *logicSig = (view::LogicSignal*)s;
if (logicSig->edges(_view.get_cursor_samples(end), _view.get_cursor_samples(start), rising_edges, falling_edges)) {
QString delta_text = QString::number(rising_edges) + "/" +
QString::number(falling_edges) + "/" +
@@ -658,7 +658,7 @@ void MeasureDock::update_probe_selector(DsComboBox *selector)
selector->clear();
for(auto s : _session->get_signals()) {
if (dynamic_cast<LogicSignal*>(s) && s->enabled()){
if (s->signal_type() == LOGIC_SIGNAL && s->enabled()){
selector->addItem(QString::number(s->get_index()));
}
}

View File

@@ -914,10 +914,9 @@ void TriggerDock::try_commit_trigger()
if (commit_trigger() == false)
{
/* simple trigger check trigger_enable */
for(auto s : _session->get_signals())
{
view::LogicSignal *logicSig = NULL;
if ((logicSig = dynamic_cast<view::LogicSignal*>(s))) {
for(auto s : _session->get_signals()){
if (s->signal_type() == LOGIC_SIGNAL) {
view::LogicSignal *logicSig = (view::LogicSignal*)s;
if (logicSig->commit_trig())
num++;
}
@@ -938,8 +937,8 @@ void TriggerDock::try_commit_trigger()
if (msg.mBox()->clickedButton() == cancelButton) {
for(auto s : _session->get_signals()){
view::LogicSignal *logicSig = NULL;
if ((logicSig = dynamic_cast<view::LogicSignal*>(s))) {
if (s->signal_type() == LOGIC_SIGNAL) {
view::LogicSignal *logicSig = (view::LogicSignal*)s;
logicSig->set_trig(view::LogicSignal::NONTRIG);
logicSig->commit_trig();
}

View File

@@ -665,7 +665,7 @@ namespace pv
}
}
for (auto &s : _session->get_signals())
for (auto s : _session->get_signals())
{
QJsonObject s_obj;
s_obj["index"] = s->get_index();
@@ -683,19 +683,20 @@ namespace pv
s_obj["strigger"] = logicSig->get_trig();
}
view::DsoSignal *dsoSig = NULL;
if ((dsoSig = dynamic_cast<view::DsoSignal *>(s)))
if (s->signal_type() == DSO_SIGNAL)
{
view::DsoSignal *dsoSig = (view::DsoSignal*)s;
s_obj["vdiv"] = QJsonValue::fromVariant(static_cast<qulonglong>(dsoSig->get_vDialValue()));
s_obj["vfactor"] = QJsonValue::fromVariant(static_cast<qulonglong>(dsoSig->get_factor()));
s_obj["coupling"] = dsoSig->get_acCoupling();
s_obj["trigValue"] = dsoSig->get_trig_vrate();
s_obj["zeroPos"] = dsoSig->get_zero_ratio();
}
view::AnalogSignal *analogSig = NULL;
if ((analogSig = dynamic_cast<view::AnalogSignal *>(s)))
if (s->signal_type() == ANALOG_SIGNAL)
{
view::AnalogSignal *analogSig = (view::AnalogSignal*)s;
s_obj["vdiv"] = QJsonValue::fromVariant(static_cast<qulonglong>(analogSig->get_vdiv()));
s_obj["vfactor"] = QJsonValue::fromVariant(static_cast<qulonglong>(analogSig->get_factor()));
s_obj["coupling"] = analogSig->get_acCoupling();
@@ -910,7 +911,7 @@ namespace pv
if (mode == DSO)
{
for (auto &s : _session->get_signals())
for (auto s : _session->get_signals())
{
for (const QJsonValue &value : sessionObj["channel"].toArray())
{
@@ -919,10 +920,10 @@ namespace pv
(s->get_type() == obj["type"].toDouble()))
{
s->set_colour(QColor(obj["colour"].toString()));
view::DsoSignal *dsoSig = NULL;
if ((dsoSig = dynamic_cast<view::DsoSignal *>(s)))
{
if (s->signal_type() == DSO_SIGNAL)
{
view::DsoSignal *dsoSig = (view::DsoSignal*)s;
dsoSig->load_settings();
dsoSig->set_zero_ratio(obj["zeroPos"].toDouble());
dsoSig->set_trig_ratio(obj["trigValue"].toDouble());
@@ -935,7 +936,7 @@ namespace pv
}
else
{
for (auto &s : _session->get_signals())
for (auto s : _session->get_signals())
{
for (const QJsonValue &value : sessionObj["channel"].toArray())
{
@@ -951,19 +952,19 @@ namespace pv
{
logicSig->set_trig(obj["strigger"].toDouble());
}
view::DsoSignal *dsoSig = NULL;
if ((dsoSig = dynamic_cast<view::DsoSignal *>(s)))
if (s->signal_type() == DSO_SIGNAL)
{
view::DsoSignal *dsoSig = (view::DsoSignal*)s;
dsoSig->load_settings();
dsoSig->set_zero_ratio(obj["zeroPos"].toDouble());
dsoSig->set_trig_ratio(obj["trigValue"].toDouble());
dsoSig->commit_settings();
}
view::AnalogSignal *analogSig = NULL;
if ((analogSig = dynamic_cast<view::AnalogSignal *>(s)))
{
if (s->signal_type() == ANALOG_SIGNAL)
{
view::AnalogSignal *analogSig = (view::AnalogSignal*)s;
analogSig->set_zero_ratio(obj["zeroPos"].toDouble());
analogSig->commit_settings();
}
@@ -1149,11 +1150,11 @@ namespace pv
_view->zoom(-1);
break;
case Qt::Key_0:
for (auto &s : sigs)
{
view::DsoSignal *dsoSig = NULL;
if ((dsoSig = dynamic_cast<view::DsoSignal *>(s)))
{
for (auto s : sigs)
{
if (s->signal_type() == DSO_SIGNAL)
{
view::DsoSignal *dsoSig = (view::DsoSignal*)s;
if (dsoSig->get_index() == 0)
dsoSig->set_vDialActive(!dsoSig->get_vDialActive());
else
@@ -1164,11 +1165,11 @@ namespace pv
update();
break;
case Qt::Key_1:
for (auto &s : sigs)
for (auto s : sigs)
{
view::DsoSignal *dsoSig = NULL;
if ((dsoSig = dynamic_cast<view::DsoSignal *>(s)))
if (s->signal_type() == DSO_SIGNAL)
{
view::DsoSignal *dsoSig = (view::DsoSignal*)s;
if (dsoSig->get_index() == 1)
dsoSig->set_vDialActive(!dsoSig->get_vDialActive());
else
@@ -1179,11 +1180,10 @@ namespace pv
update();
break;
case Qt::Key_Up:
for (auto &s : sigs)
{
view::DsoSignal *dsoSig = NULL;
if ((dsoSig = dynamic_cast<view::DsoSignal *>(s)))
{
for (auto s : sigs)
{
if (s->signal_type() == DSO_SIGNAL){
view::DsoSignal *dsoSig = (view::DsoSignal*)s;
if (dsoSig->get_vDialActive())
{
dsoSig->go_vDialNext(true);
@@ -1194,11 +1194,10 @@ namespace pv
}
break;
case Qt::Key_Down:
for (auto &s : sigs)
{
view::DsoSignal *dsoSig = NULL;
if ((dsoSig = dynamic_cast<view::DsoSignal *>(s)))
{
for (auto s : sigs)
{
if (s->signal_type() == DSO_SIGNAL){
view::DsoSignal *dsoSig = (view::DsoSignal*)s;
if (dsoSig->get_vDialActive())
{
dsoSig->go_vDialPre(true);

View File

@@ -340,7 +340,7 @@ namespace pv
_group_data->set_samplerate(_cur_snap_samplerate);
// DecoderStack
for (auto &d : _decode_traces)
for (auto d : _decode_traces)
{
d->decoder()->set_samplerate(_cur_snap_samplerate);
}
@@ -349,7 +349,7 @@ namespace pv
if (_math_trace && _math_trace->enabled())
_math_trace->get_math_stack()->set_samplerate(_device_agent.get_sample_rate());
// SpectrumStack
for (auto &m : _spectrum_traces)
for (auto m : _spectrum_traces)
m->get_spectrum_stack()->set_samplerate(_cur_snap_samplerate);
_callback->cur_snap_samplerate_changed();
@@ -388,16 +388,14 @@ namespace pv
container_init();
// update current hw offset
for (auto &s : _signals)
{
view::DsoSignal *dsoSig = NULL;
if ((dsoSig = dynamic_cast<view::DsoSignal *>(s)))
{
for (auto s : _signals)
{
if (s->signal_type() == DSO_SIGNAL){
view::DsoSignal *dsoSig = (view::DsoSignal*)s;
dsoSig->set_zero_ratio(dsoSig->get_zero_ratio());
}
view::AnalogSignal *analogSig = NULL;
if ((analogSig = dynamic_cast<view::AnalogSignal *>(s)))
{
}
else if (s->signal_type() == ANALOG_SIGNAL){
view::AnalogSignal *analogSig = (view::AnalogSignal*)s;
analogSig->set_zero_ratio(analogSig->get_zero_ratio());
}
}
@@ -422,7 +420,7 @@ namespace pv
_dso_data->init();
// SpectrumStack
for (auto &m : _spectrum_traces)
for (auto m : _spectrum_traces)
{
m->get_spectrum_stack()->init();
}
@@ -431,7 +429,7 @@ namespace pv
_math_trace->get_math_stack()->init();
// DecoderStack
for (auto &d : _decode_traces)
for (auto d : _decode_traces)
{
d->decoder()->init();
}
@@ -493,11 +491,12 @@ namespace pv
clear_all_decode_task(run_dex);
// reset measure of dso signal
for (auto &s : _signals)
{
view::DsoSignal *dsoSig = NULL;
if ((dsoSig = dynamic_cast<view::DsoSignal *>(s)))
for (auto s : _signals)
{
if (s->signal_type() == DSO_SIGNAL){
view::DsoSignal *dsoSig = (view::DsoSignal*)s;
dsoSig->set_mValid(false);
}
}
if (_device_agent.have_enabled_channel() == false)
@@ -619,7 +618,7 @@ namespace pv
{
std::set<data::SignalData *> data;
for (auto &s : _signals)
for (auto s : _signals)
{
data.insert(s->data());
}
@@ -842,10 +841,12 @@ namespace pv
while (i != _signals.end())
{
if ((*i)->get_index() == probe->index)
{
view::LogicSignal *logicSig = NULL;
if ((logicSig = dynamic_cast<view::LogicSignal *>(*i)))
{
if ((*i)->signal_type() == LOGIC_SIGNAL){
view::LogicSignal *logicSig = (view::LogicSignal*)(*i);
signal = new view::LogicSignal(logicSig, _logic_data, probe);
}
break;
}
i++;
@@ -865,9 +866,10 @@ namespace pv
{
if ((*i)->get_index() == probe->index)
{
view::AnalogSignal *analogSig = NULL;
if ((analogSig = dynamic_cast<view::AnalogSignal *>(*i)))
if ((*i)->signal_type() == ANALOG_SIGNAL){
view::AnalogSignal *analogSig = (view::AnalogSignal*)(*i);
signal = new view::AnalogSignal(analogSig, _analog_data, probe);
}
break;
}
i++;
@@ -903,7 +905,7 @@ namespace pv
{
_logic_data->init();
for (auto &d : _decode_traces)
for (auto d : _decode_traces)
{
d->decoder()->init();
}
@@ -913,7 +915,7 @@ namespace pv
{
_dso_data->init();
// SpectrumStack
for (auto &m : _spectrum_traces)
for (auto m : _spectrum_traces)
{
m->get_spectrum_stack()->init();
}
@@ -1061,11 +1063,10 @@ namespace pv
{
std::map<int, bool> sig_enable;
// reset scale of dso signal
for (auto &s : _signals)
{
view::DsoSignal *dsoSig = NULL;
if ((dsoSig = dynamic_cast<view::DsoSignal *>(s)))
{
for (auto s : _signals)
{
if (s->signal_type() == DSO_SIGNAL){
view::DsoSignal *dsoSig = (view::DsoSignal*)s;
dsoSig->set_scale(dsoSig->get_view_rect().height());
sig_enable[dsoSig->get_index()] = dsoSig->enabled();
}
@@ -1080,11 +1081,12 @@ namespace pv
_dso_data->snapshot()->append_payload(dso);
}
for (auto &s : _signals)
{
view::DsoSignal *dsoSig = NULL;
if ((dsoSig = dynamic_cast<view::DsoSignal *>(s)) && (dsoSig->enabled()))
for (auto s : _signals)
{
if (s->signal_type() == DSO_SIGNAL && (s->enabled())){
view::DsoSignal *dsoSig = (view::DsoSignal*)s;
dsoSig->paint_prepare();
}
}
if (dso.num_samples != 0)
@@ -1101,7 +1103,7 @@ namespace pv
}
// calculate related spectrum results
for (auto &m : _spectrum_traces)
for (auto m : _spectrum_traces)
{
if (m->enabled())
m->get_spectrum_stack()->calc_fft();
@@ -1139,11 +1141,10 @@ namespace pv
if (_analog_data->snapshot()->last_ended())
{
// reset scale of analog signal
for (auto &s : _signals)
{
view::AnalogSignal *analogSig = NULL;
if ((analogSig = dynamic_cast<view::AnalogSignal *>(s)))
{
for (auto s : _signals)
{
if (s->signal_type() == ANALOG_SIGNAL){
view::AnalogSignal *analogSig = (view::AnalogSignal*)s;
analogSig->set_scale(analogSig->get_totalHeight());
}
}
@@ -1232,7 +1233,7 @@ namespace pv
{
if (!_logic_data->snapshot()->empty())
{
for (auto &g : _group_traces)
for (auto g : _group_traces)
{
auto p = new data::GroupSnapshot(_logic_data->get_snapshots().front(), g->get_index_list());
_group_data->push_snapshot(p);
@@ -1283,20 +1284,17 @@ namespace pv
if (_device_agent.have_instance())
{
for (auto &s : _signals)
for (auto s : _signals)
{
if (dynamic_cast<view::LogicSignal *>(s) && s->enabled())
{
if (!s->enabled())
continue;
if (s->signal_type() == LOGIC_SIGNAL)
logic_ch_num++;
}
if (dynamic_cast<view::DsoSignal *>(s) && s->enabled())
{
else if (s->signal_type() == DSO_SIGNAL)
dso_ch_num++;
}
if (dynamic_cast<view::AnalogSignal *>(s) && s->enabled())
{
else if (s->signal_type() == ANALOG_SIGNAL)
analog_ch_num++;
}
}
}
@@ -1362,7 +1360,7 @@ namespace pv
sub_decoders.clear();
// set view early for decode start/end region setting
for (auto &s : _signals)
for (auto s : _signals)
{
if (s->get_view())
{
@@ -1478,25 +1476,23 @@ namespace pv
{
bool has_dso_signal = false;
for (auto &s : _signals)
{
view::DsoSignal *dsoSig = NULL;
if ((dsoSig = dynamic_cast<view::DsoSignal *>(s)))
{
for (auto s : _signals)
{
if (s->signal_type() == DSO_SIGNAL){
has_dso_signal = true;
// check already have
auto iter = _spectrum_traces.begin();
for (unsigned int i = 0; i < _spectrum_traces.size(); i++, iter++){
if ((*iter)->get_index() == dsoSig->get_index())
if ((*iter)->get_index() == s->get_index())
break;
}
// if not, rebuild
if (iter == _spectrum_traces.end())
{
auto spectrum_stack = new data::SpectrumStack(this, dsoSig->get_index());
auto spectrum_trace = new view::SpectrumTrace(this, spectrum_stack, dsoSig->get_index());
auto spectrum_stack = new data::SpectrumStack(this, s->get_index());
auto spectrum_trace = new view::SpectrumTrace(this, spectrum_stack, s->get_index());
_spectrum_traces.push_back(spectrum_trace);
}
}
@@ -1598,11 +1594,11 @@ namespace pv
void SigSession::auto_end()
{
for (auto &s : _signals)
{
view::DsoSignal *dsoSig = NULL;
if ((dsoSig = dynamic_cast<view::DsoSignal *>(s)))
for (auto s : _signals)
{
if (s->signal_type() == DSO_SIGNAL)
{
view::DsoSignal *dsoSig = (view::DsoSignal*)s;
dsoSig->auto_end();
}
}

View File

@@ -313,13 +313,13 @@ namespace pv
}
void SamplingBar::zero_adj()
{
view::DsoSignal *dsoSig = NULL;
for (auto &s : _session->get_signals())
{
for (auto s : _session->get_signals())
{
if ((dsoSig = dynamic_cast<view::DsoSignal *>(s)))
if (s->signal_type() == DSO_SIGNAL){
view::DsoSignal *dsoSig = (view::DsoSignal*)s;
dsoSig->set_enable(true);
}
}
const int index_back = _sample_count.currentIndex();
@@ -338,10 +338,12 @@ namespace pv
pv::dialogs::WaitingDialog wait(this, _session, SR_CONF_ZERO);
if (wait.start() == QDialog::Rejected)
{
for (auto &s : _session->get_signals())
for (auto s : _session->get_signals())
{
if ((dsoSig = dynamic_cast<view::DsoSignal *>(s)))
if (s->signal_type() == DSO_SIGNAL){
view::DsoSignal *dsoSig = (view::DsoSignal*)s;
dsoSig->commit_settings();
}
}
}

View File

@@ -56,6 +56,8 @@ AnalogSignal::AnalogSignal(data::Analog *data, sr_channel *probe) :
_typeWidth = 5;
_colour = SignalColours[probe->index % countof(SignalColours)];
_signal_type = ANALOG_SIGNAL;
GVariant *gvar;
// channel bits
gvar = session->get_device()->get_config(NULL, NULL, SR_CONF_UNIT_BITS);

View File

@@ -383,14 +383,12 @@ void DecodeTrace::draw_annotation(const pv::data::decode::Annotation &a,
int type = dec->get_channel_type(iter.first);
if ((type == SRD_CHANNEL_COMMON) ||
((type%100 != a.type()%100) && (type%100 != 0)))
continue;
LogicSignal *logic_sig = NULL;
continue;
for(auto s : _session->get_signals()) {
if((s->get_index() == iter.second) &&
(logic_sig = dynamic_cast<view::LogicSignal*>(s))) {
logic_sig->paint_mark(p, start, end, type/100);
if((s->get_index() == iter.second) && s->signal_type() == LOGIC_SIGNAL) {
view::LogicSignal *logicSig = (view::LogicSignal*)s;
logicSig->paint_mark(p, start, end, type/100);
break;
}
}

View File

@@ -79,6 +79,8 @@ DsoSignal::DsoSignal(data::Dso *data,
vUnit.append(vDialUnit[i]);
}
_signal_type = DSO_SIGNAL;
GVariant *gvar_list, *gvar_list_vdivs;
gvar_list = session->get_device()->get_config_list(NULL, SR_CONF_PROBE_VDIV);

View File

@@ -325,7 +325,7 @@ void Header::wheelEvent(QWheelEvent *event)
shift = delta / 80.0;
#endif
for (auto &t : traces)
for (auto t : traces)
{
if (t->mouse_wheel(width(), pos, shift))
break;
@@ -367,26 +367,26 @@ void Header::mouseMoveEvent(QMouseEvent *event)
const int delta = event->pos().y() - _mouse_down_point.y();
for (auto i = _drag_traces.begin(); i != _drag_traces.end(); i++) {
const auto sig = (*i).first;
if (sig) {
const auto t = (*i).first;
if (t) {
int y = (*i).second + delta;
if (sig->get_type() == SR_CHANNEL_DSO) {
if (t->get_type() == SR_CHANNEL_DSO) {
DsoSignal *dsoSig = NULL;
if ((dsoSig = dynamic_cast<DsoSignal*>(sig))) {
if ((dsoSig = dynamic_cast<DsoSignal*>(t))) {
dsoSig->set_zero_vpos(y);
_moveFlag = true;
traces_moved();
}
} else if (sig->get_type() == SR_CHANNEL_MATH) {
} else if (t->get_type() == SR_CHANNEL_MATH) {
MathTrace *mathTrace = NULL;
if ((mathTrace = dynamic_cast<MathTrace*>(sig))) {
if ((mathTrace = dynamic_cast<MathTrace*>(t))) {
mathTrace->set_zero_vpos(y);
_moveFlag = true;
traces_moved();
}
} else if (sig->get_type() == SR_CHANNEL_ANALOG) {
} else if (t->get_type() == SR_CHANNEL_ANALOG) {
AnalogSignal *analogSig = NULL;
if ((analogSig = dynamic_cast<AnalogSignal*>(sig))) {
if ((analogSig = dynamic_cast<AnalogSignal*>(t))) {
analogSig->set_zero_vpos(y);
_moveFlag = true;
traces_moved();
@@ -397,9 +397,9 @@ void Header::mouseMoveEvent(QMouseEvent *event)
((y + View::SignalSnapGridSize / 2) /
View::SignalSnapGridSize) *
View::SignalSnapGridSize;
if (y_snap != sig->get_v_offset()) {
if (y_snap != t->get_v_offset()) {
_moveFlag = true;
sig->set_v_offset(y_snap);
t->set_v_offset(y_snap);
}
}
}

View File

@@ -46,6 +46,7 @@ LogicSignal::LogicSignal(data::Logic *data,
_data(data)
{
_trig = NONTRIG;
_signal_type = LOGIC_SIGNAL;
}
LogicSignal::LogicSignal(view::LogicSignal *s,

View File

@@ -33,7 +33,8 @@ namespace view {
Signal::Signal(sr_channel *probe) :
Trace(probe->name, probe->index, probe->type),
_probe(probe)
_probe(probe),
_signal_type(UNKNOWN_SIGNAL)
{
session = AppControl::Instance()->GetSession();
}

View File

@@ -37,6 +37,14 @@
#include <libsigrok.h>
#include "trace.h"
enum SIGNAL_TYPE
{
UNKNOWN_SIGNAL = 0,
LOGIC_SIGNAL = 1,
DSO_SIGNAL = 2,
ANALOG_SIGNAL = 3,
};
namespace pv {
namespace data {
@@ -76,11 +84,14 @@ public:
*/
void set_name(QString name);
inline SIGNAL_TYPE signal_type(){
return _signal_type;
}
protected:
sr_channel *const _probe;
SigSession *session;
SigSession *session;
SIGNAL_TYPE _signal_type;
};
} // namespace view

View File

@@ -82,8 +82,9 @@ SpectrumTrace::SpectrumTrace(pv::SigSession *session,
_typeWidth = 0;
for(auto s : _session->get_signals()) {
if (dynamic_cast<DsoSignal*>(s) && index == s->get_index())
if (s->signal_type() == DSO_SIGNAL && index == s->get_index()){
_colour = s->get_colour();
}
}
}
@@ -304,8 +305,8 @@ void SpectrumTrace::paint_mid(QPainter &p, int left, int right, QColor fore, QCo
double vfactor = 0;
for(auto s : _session->get_signals()) {
DsoSignal *dsoSig = NULL;
if ((dsoSig = dynamic_cast<DsoSignal*>(s))) {
if (s->signal_type() == DSO_SIGNAL) {
view::DsoSignal *dsoSig = (view::DsoSignal*)s;
if(dsoSig->get_index() == _spectrum_stack->get_index()) {
vdiv = dsoSig->get_vDialValue();
vfactor = dsoSig->get_factor();

View File

@@ -722,8 +722,7 @@ void View::signals_changed()
if (!time_traces.empty() && _time_viewport) {
for(auto t : time_traces) {
if (dynamic_cast<DsoSignal*>(t) ||
t->enabled())
if (dynamic_cast<DsoSignal*>(t) || t->enabled())
total_rows += t->rows_size();
if (t->rows_size() != 0)
label_size++;

View File

@@ -513,11 +513,9 @@ void Viewport::mousePressEvent(QMouseEvent *event)
_view.session().get_device()->get_work_mode() == DSO) {
for(auto s : _view.session().get_signals())
{
if (!s->enabled())
continue;
DsoSignal *dsoSig = NULL;
if ((dsoSig = dynamic_cast<DsoSignal*>(s))) {
{
if (s->signal_type() == DSO_SIGNAL && s->enabled()) {
DsoSignal *dsoSig = (DsoSignal*)s;
if (dsoSig->get_trig_rect(0, _view.get_view_width()).contains(_mouse_point)) {
_drag_sig = s;
_action_type = DSO_TRIG_MOVE;
@@ -565,15 +563,16 @@ void Viewport::mousePressEvent(QMouseEvent *event)
if (_view.get_xcursorList().empty())
_view.show_xcursors(false);
break;
} else if ((*i)->get_map_rect(xrect).contains(_view.hover_point())) {
}
else if ((*i)->get_map_rect(xrect).contains(_view.hover_point())) {
auto &sigs = _view.session().get_signals();
auto s = sigs.begin();
bool sig_looped = ((*i)->channel() == NULL);
bool no_dsoSig = true;
while (1) {
view::DsoSignal *dsoSig = NULL;
if ((dsoSig = dynamic_cast<view::DsoSignal*>(*s)) &&
dsoSig->enabled()) {
while (true) {
if ((*s)->signal_type() == DSO_SIGNAL && (*s)->enabled()) {
view::DsoSignal *dsoSig = (view::DsoSignal*)(*s);
no_dsoSig = false;
if (sig_looped) {
(*i)->set_channel(dsoSig);
@@ -620,6 +619,7 @@ void Viewport::mouseMoveEvent(QMouseEvent *event)
{
assert(event);
_hover_hit = false;
int mode = _view.session().get_device()->get_work_mode();
if (event->buttons() & Qt::LeftButton) {
if (_type == TIME_VIEW) {
@@ -644,12 +644,10 @@ void Viewport::mouseMoveEvent(QMouseEvent *event)
if ((event->buttons() & Qt::LeftButton) ||
!(event->buttons() | Qt::NoButton)) {
if (_action_type == DSO_TRIG_MOVE) {
if (_drag_sig) {
view::DsoSignal *dsoSig = NULL;
if ((dsoSig = dynamic_cast<view::DsoSignal*>(_drag_sig))) {
dsoSig->set_trig_vpos(event->pos().y());
_dso_trig_moved = true;
}
if (_drag_sig && _drag_sig->signal_type() == DSO_SIGNAL) {
view::DsoSignal *dsoSig = (view::DsoSignal*)_drag_sig;
dsoSig->set_trig_vpos(event->pos().y());
_dso_trig_moved = true;
}
}
@@ -660,18 +658,16 @@ void Viewport::mouseMoveEvent(QMouseEvent *event)
uint64_t index0 = 0, index1 = 0, index2 = 0;
bool logic = false;
for(auto s : _view.session().get_signals()) {
view::LogicSignal *logicSig = NULL;
view::DsoSignal *dsoSig = NULL;
if ((_view.session().get_device()->get_work_mode() == LOGIC) &&
(logicSig = dynamic_cast<view::LogicSignal*>(s))) {
for(auto s : _view.session().get_signals()) {
if (mode == LOGIC && s->signal_type() == LOGIC_SIGNAL) {
view::LogicSignal *logicSig = (view::LogicSignal*)s;
if (logicSig->measure(event->pos(), index0, index1, index2)) {
logic = true;
break;
}
}
if ((_view.session().get_device()->get_work_mode() == DSO) &&
(dsoSig = dynamic_cast<view::DsoSignal*>(s))) {
if (mode == DSO && s->signal_type() == DSO_SIGNAL) {
view::DsoSignal *dsoSig = (view::DsoSignal*)s;
curX = min(dsoSig->get_view_rect().right(), curX);
break;
}
@@ -794,9 +790,9 @@ void Viewport::mouseReleaseEvent(QMouseEvent *event)
if (_mouse_down_point.x() == event->pos().x()) {
const auto &sigs = _view.session().get_signals();
for(auto s : sigs) {
view::LogicSignal *logicSig = NULL;
if ((logicSig = dynamic_cast<view::LogicSignal*>(s))) {
for(auto s : sigs) {
if (s->signal_type() == LOGIC_SIGNAL) {
view::LogicSignal *logicSig = (view::LogicSignal*)s;
if (logicSig->edge(event->pos(), _edge_start, 10)) {
_action_type = LOGIC_JUMP;
_cur_preX = _view.index2pixel(_edge_start);
@@ -960,8 +956,9 @@ void Viewport::mouseDoubleClickEvent(QMouseEvent *event)
if (!_view.get_view_rect().contains(event->pos()))
return;
if (_view.session().get_device()->get_work_mode() == LOGIC
&& _view.session().is_stopped_status())
int mode = _view.session().get_device()->get_work_mode();
if (mode == LOGIC && _view.session().is_stopped_status())
{
if (event->button() == Qt::RightButton) {
if (_view.scale() == _view.get_maxscale())
@@ -973,10 +970,11 @@ void Viewport::mouseDoubleClickEvent(QMouseEvent *event)
bool logic = false;
uint64_t index;
uint64_t index0 = 0, index1 = 0, index2 = 0;
if (_view.session().get_device()->get_work_mode() == LOGIC) {
if (mode == LOGIC) {
for(auto s : _view.session().get_signals()) {
view::LogicSignal *logicSig = NULL;
if ((logicSig = dynamic_cast<view::LogicSignal*>(s))) {
if (s->signal_type() == LOGIC_SIGNAL) {
view::LogicSignal *logicSig = (view::LogicSignal*)s;
if (logicSig->measure(event->pos(), index0, index1, index2)) {
logic = true;
break;
@@ -987,14 +985,17 @@ void Viewport::mouseDoubleClickEvent(QMouseEvent *event)
const double curX = event->pos().x();
const double curP = _view.index2pixel(index0);
const double curN = _view.index2pixel(index1);
if (logic && (curX - curP < SnapMinSpace || curN - curX < SnapMinSpace)) {
if (curX - curP < curN - curX)
index = index0;
else
index = index1;
} else {
}
else {
index = _view.pixel2index(curX);
}
_view.add_cursor(view::Ruler::CursorColor[_view.get_cursorList().size() % 8], index);
_view.show_cursors(true);
}
@@ -1057,7 +1058,7 @@ void Viewport::wheelEvent(QWheelEvent *event)
if (_type == FFT_VIEW)
{
for (auto &t : _view.session().get_spectrum_traces())
for (auto t : _view.session().get_spectrum_traces())
{
if (t->enabled())
{
@@ -1105,11 +1106,10 @@ void Viewport::wheelEvent(QWheelEvent *event)
}
const auto &sigs = _view.session().get_signals();
for (auto &s : sigs)
{
view::DsoSignal *dsoSig = NULL;
if ((dsoSig = dynamic_cast<view::DsoSignal *>(s)))
{
for (auto s : sigs)
{
if (s->signal_type() == DSO_SIGNAL){
view::DsoSignal *dsoSig = (view::DsoSignal*)s;
dsoSig->auto_end();
}
}
@@ -1217,11 +1217,8 @@ void Viewport::measure()
const uint64_t sample_rate = _view.session().cur_snap_samplerate();
for(auto s : _view.session().get_signals()) {
view::LogicSignal *logicSig = NULL;
view::DsoSignal *dsoSig = NULL;
view::AnalogSignal *analogSig = NULL;
if ((logicSig = dynamic_cast<view::LogicSignal*>(s))) {
if (s->signal_type() == LOGIC_SIGNAL) {
view::LogicSignal *logicSig = (view::LogicSignal*)s;
if (_action_type == NO_ACTION) {
if (logicSig->measure(_mouse_point, _cur_sample, _nxt_sample, _thd_sample)) {
_measure_type = LOGIC_FREQ;
@@ -1271,16 +1268,21 @@ void Viewport::measure()
_edge_hit = false;
}
}
} else if ((dsoSig = dynamic_cast<view::DsoSignal*>(s))) {
if (dsoSig->enabled()) {
}
else if (s->signal_type() == DSO_SIGNAL) {
view::DsoSignal *dsoSig = ( view::DsoSignal*)s;
if (s->enabled()) {
if (_measure_en && dsoSig->measure(_view.hover_point())) {
_measure_type = DSO_VALUE;
} else {
}
else {
_measure_type = NO_MEASURE;
}
}
} else if ((analogSig = dynamic_cast<view::AnalogSignal*>(s))) {
if (analogSig->enabled()) {
}
else if (s->signal_type() == ANALOG_SIGNAL) {
view::AnalogSignal *analogSig = (view::AnalogSignal*)s;
if (s->enabled()) {
if (_measure_en && analogSig->measure(_view.hover_point())) {
_measure_type = DSO_VALUE;
} else {
@@ -1373,12 +1375,10 @@ void Viewport::paintMeasure(QPainter &p, QColor fore, QColor back)
_measure_type == DSO_VALUE) {
for(auto s : _view.session().get_signals()) {
view::DsoSignal *dsoSig = NULL;
view::AnalogSignal* analogSig = NULL;
if ((dsoSig = dynamic_cast<view::DsoSignal*>(s))) {
if (s->signal_type() == DSO_SIGNAL) {
uint64_t index;
double value;
view::DsoSignal *dsoSig = (view::DsoSignal*)s;
QPointF hpoint;
if (dsoSig->get_hover(index, hpoint, value)) {
p.setPen(QPen(fore, 1, Qt::DashLine));
@@ -1386,10 +1386,12 @@ void Viewport::paintMeasure(QPainter &p, QColor fore, QColor back)
p.drawLine(hpoint.x(), dsoSig->get_view_rect().top(),
hpoint.x(), dsoSig->get_view_rect().bottom());
}
} else if ((analogSig = dynamic_cast<view::AnalogSignal*>(s))) {
}
else if (s->signal_type() == ANALOG_SIGNAL) {
uint64_t index;
double value;
QPointF hpoint;
view::AnalogSignal* analogSig = (view::AnalogSignal*)s;
if (analogSig->get_hover(index, hpoint, value)) {
p.setPen(QPen(fore, 1, Qt::DashLine));
p.setBrush(Qt::NoBrush);
@@ -1401,9 +1403,9 @@ void Viewport::paintMeasure(QPainter &p, QColor fore, QColor back)
}
if (_dso_ym_valid) {
for(auto s : _view.session().get_signals()) {
view::DsoSignal *dsoSig = NULL;
if ((dsoSig = dynamic_cast<view::DsoSignal*>(s))) {
for(auto s : _view.session().get_signals()) {
if (s->signal_type() == DSO_SIGNAL) {
view::DsoSignal *dsoSig = (view::DsoSignal*)s;
if (dsoSig->get_index() == _dso_ym_sig_index) {
p.setPen(QPen(dsoSig->get_colour(), 1, Qt::DotLine));
const int text_height = p.boundingRect(0, 0, INT_MAX, INT_MAX,

View File

@@ -86,9 +86,8 @@ void ViewStatus::paintEvent(QPaintEvent *)
view::DsoSignal *dsoSig = NULL;
for(auto s : _session->get_signals()) {
if (!s->enabled())
continue;
if ((dsoSig = dynamic_cast<DsoSignal*>(s))) {
if (s->signal_type() == DSO_SIGNAL && s->enabled()) {
dsoSig = (view::DsoSignal*)s;
if (sig_index == dsoSig->get_index())
break;
else

View File

@@ -44,13 +44,14 @@ XCursor::XCursor(View &view, QColor &colour,
{
_dsoSig = NULL;
for(auto s : _view.session().get_signals()) {
DsoSignal *dsoSig = NULL;
if ((dsoSig = dynamic_cast<DsoSignal*>(s)))
for(auto s : _view.session().get_signals()) {
if (s->signal_type() == DSO_SIGNAL){
DsoSignal *dsoSig = (DsoSignal*)s;
if (dsoSig->enabled()) {
_dsoSig = dsoSig;
break;
}
}
}
}