From 0a4c10438aead5b3f63d2c59448859f0e3a3012d Mon Sep 17 00:00:00 2001 From: dreamsourcelabTAI Date: Wed, 17 May 2023 15:51:47 +0800 Subject: [PATCH 1/6] An error log text --- libsigrok4DSL/hardware/demo/demo.c | 12 ++++++------ libsigrok4DSL/session_driver.c | 14 +++++++------- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/libsigrok4DSL/hardware/demo/demo.c b/libsigrok4DSL/hardware/demo/demo.c index 09978c16..f0e7d3e9 100644 --- a/libsigrok4DSL/hardware/demo/demo.c +++ b/libsigrok4DSL/hardware/demo/demo.c @@ -1445,7 +1445,7 @@ static int receive_data_logic_decoder(int fd, int revents, const struct sr_dev_i if (!bCheckFile) { - sr_err("cant't locate zip inner file:\"%s\"", file_name); + sr_err("can't locate zip inner file:\"%s\"", file_name); send_error_packet(sdi, vdev, &packet); return FALSE; } @@ -1492,7 +1492,7 @@ static int receive_data_logic_decoder(int fd, int revents, const struct sr_dev_i // Read the data to buffer. if (unzOpenCurrentFile(vdev->archive) != UNZ_OK) { - sr_err("cant't open zip inner file:\"%s\"", file_name); + sr_err("can't open zip inner file:\"%s\"", file_name); send_error_packet(sdi, vdev, &packet); return FALSE; } @@ -1752,7 +1752,7 @@ static int receive_data_dso(int fd, int revents, const struct sr_dev_inst *sdi) if (!bCheckFile) { - sr_err("cant't locate zip inner file:\"%s\"", file_name); + sr_err("can't locate zip inner file:\"%s\"", file_name); send_error_packet(sdi, vdev, &packet); return FALSE; } @@ -1799,7 +1799,7 @@ static int receive_data_dso(int fd, int revents, const struct sr_dev_inst *sdi) // Read the data to buffer. if (unzOpenCurrentFile(vdev->archive) != UNZ_OK) { - sr_err("cant't open zip inner file:\"%s\"", file_name); + sr_err("can't open zip inner file:\"%s\"", file_name); send_error_packet(sdi, vdev, &packet); return FALSE; } @@ -2060,13 +2060,13 @@ static int receive_data_analog(int fd, int revents, const struct sr_dev_inst *sd if (unzLocateFile(vdev->archive, file_name, 0) != UNZ_OK) { - sr_err("cant't locate zip inner file:\"%s\"", file_name); + sr_err("can't locate zip inner file:\"%s\"", file_name); send_error_packet(sdi, vdev, &packet); return FALSE; } if (unzOpenCurrentFile(vdev->archive) != UNZ_OK) { - sr_err("cant't open zip inner file:\"%s\"", file_name); + sr_err("can't open zip inner file:\"%s\"", file_name); send_error_packet(sdi, vdev, &packet); return FALSE; } diff --git a/libsigrok4DSL/session_driver.c b/libsigrok4DSL/session_driver.c index 65559262..1e0cbd6c 100644 --- a/libsigrok4DSL/session_driver.c +++ b/libsigrok4DSL/session_driver.c @@ -298,13 +298,13 @@ static int receive_data(int fd, int revents, const struct sr_dev_inst *sdi) if (unzLocateFile(vdev->archive, file_name, 0) != UNZ_OK) { - sr_err("cant't locate zip inner file:\"%s\"", file_name); + sr_err("can't locate zip inner file:\"%s\"", file_name); send_error_packet(sdi, vdev, &packet); return FALSE; } if (unzOpenCurrentFile(vdev->archive) != UNZ_OK) { - sr_err("cant't open zip inner file:\"%s\"", file_name); + sr_err("can't open zip inner file:\"%s\"", file_name); send_error_packet(sdi, vdev, &packet); return FALSE; } @@ -534,7 +534,7 @@ static int receive_data_logic_dso_v2(int fd, int revents, const struct sr_dev_in if (!bCheckFile) { - sr_err("cant't locate zip inner file:\"%s\"", file_name); + sr_err("can't locate zip inner file:\"%s\"", file_name); send_error_packet(sdi, vdev, &packet); return FALSE; } @@ -581,7 +581,7 @@ static int receive_data_logic_dso_v2(int fd, int revents, const struct sr_dev_in // Read the data to buffer. if (unzOpenCurrentFile(vdev->archive) != UNZ_OK) { - sr_err("cant't open zip inner file:\"%s\"", file_name); + sr_err("can't open zip inner file:\"%s\"", file_name); send_error_packet(sdi, vdev, &packet); return FALSE; } @@ -1369,13 +1369,13 @@ static int dev_acquisition_start(struct sr_dev_inst *sdi, void *cb_data) { if (unzLocateFile(vdev->archive, "data", 0) != UNZ_OK) { - sr_err("cant't locate zip inner file:\"%s\"", "data"); + sr_err("can't locate zip inner file:\"%s\"", "data"); close_archive(vdev); return SR_ERR; } if (unzOpenCurrentFile(vdev->archive) != UNZ_OK) { - sr_err("cant't open zip inner file:\"%s\"", "data"); + sr_err("can't open zip inner file:\"%s\"", "data"); close_archive(vdev); return SR_ERR; } @@ -1473,7 +1473,7 @@ SR_PRIV int sr_new_virtual_device(const char *filename, struct sr_dev_inst **out } if (unzOpenCurrentFile(archive) != UNZ_OK) { - sr_err("cant't open zip inner file:'header',%s", filename); + sr_err("can't open zip inner file:'header',%s", filename); unzClose(archive); return SR_ERR; } From 1de4f1d0c61c0968f1d4ea41a1a0987a4083f668 Mon Sep 17 00:00:00 2001 From: dreamsourcelabTAI Date: Thu, 18 May 2023 10:16:09 +0800 Subject: [PATCH 2/6] fix: Failed to load big dso file --- DSView/pv/data/dsosnapshot.cpp | 4 ++- libsigrok4DSL/session_driver.c | 63 +++++++++++++++++++++------------- 2 files changed, 42 insertions(+), 25 deletions(-) diff --git a/DSView/pv/data/dsosnapshot.cpp b/DSView/pv/data/dsosnapshot.cpp index fa0957b0..a3fc6163 100644 --- a/DSView/pv/data/dsosnapshot.cpp +++ b/DSView/pv/data/dsosnapshot.cpp @@ -98,6 +98,7 @@ void DsoSnapshot::clear() free_envelop(); init_all(); _have_data = false; + _envelope_en = false; } void DsoSnapshot::free_data() @@ -141,7 +142,8 @@ void DsoSnapshot::first_payload(const sr_datafeed_dso &dso, uint64_t total_sampl if (total_sample_count != _total_sample_count || channel_num != _channel_num - || channel_changed){ + || channel_changed + || isFile){ std::lock_guard lock(_mutex); diff --git a/libsigrok4DSL/session_driver.c b/libsigrok4DSL/session_driver.c index 1e0cbd6c..49f50f9b 100644 --- a/libsigrok4DSL/session_driver.c +++ b/libsigrok4DSL/session_driver.c @@ -165,6 +165,8 @@ static const char *probeMapUnits[] = { "m/s", }; +static void free_temp_buffer(struct session_vdev *vdev); + static int trans_data(struct sr_dev_inst *sdi) { // translate for old format @@ -483,7 +485,7 @@ static int receive_data_logic_dso_v2(int fd, int revents, const struct sr_dev_in if (sdi->mode == LOGIC) vdev->packet_buffer->post_buf_len = 8 * chan_num * 1000; else - vdev->packet_buffer->post_buf_len = chan_num * 1000; + vdev->packet_buffer->post_buf_len = chan_num * 10000; vdev->packet_buffer->post_buf = g_try_malloc0(vdev->packet_buffer->post_buf_len + 1); if (vdev->packet_buffer->post_buf == NULL){ @@ -495,7 +497,10 @@ static int receive_data_logic_dso_v2(int fd, int revents, const struct sr_dev_in pack_buffer->post_len; pack_buffer->block_buf_len = 0; pack_buffer->block_data_len = 0; - pack_buffer->block_chan_read_pos = 0; + pack_buffer->block_chan_read_pos = 0; + + if (sdi->mode == DSO) + vdev->num_blocks = 1; // Only one data file. } pack_buffer = vdev->packet_buffer; @@ -650,7 +655,7 @@ static int receive_data_logic_dso_v2(int fd, int revents, const struct sr_dev_in dso.mqflags = SR_MQFLAG_AC; dso.num_samples = pack_buffer->post_len / chan_num; dso.data = pack_buffer->post_buf; - } + } // Send data back. ds_data_forward(sdi, &packet); @@ -663,6 +668,7 @@ static int receive_data_logic_dso_v2(int fd, int revents, const struct sr_dev_in ds_data_forward(sdi, &packet); sr_session_source_remove(-1); close_archive(vdev); + free_temp_buffer(vdev); } return TRUE; @@ -755,35 +761,44 @@ static int dev_open(struct sr_dev_inst *sdi) return SR_OK; } +static void free_temp_buffer(struct session_vdev *vdev) +{ + struct session_packet_buffer *pack_buf; + int i; + + assert(vdev); + + pack_buf = vdev->packet_buffer; + + if (pack_buf != NULL) + { + g_safe_free(pack_buf->post_buf); + + for (i = 0; i < SESSION_MAX_CHANNEL_COUNT; i++){ + if (pack_buf->block_bufs[i] != NULL){ + g_free(pack_buf->block_bufs[i]); + pack_buf->block_bufs[i] = NULL; + } + else{ + break; + } + } + } + + g_safe_free(vdev->packet_buffer); + g_safe_free(vdev->buf); + g_safe_free(vdev->logic_buf); +} + static int dev_close(struct sr_dev_inst *sdi) { struct session_vdev *vdev; - int i; - struct session_packet_buffer *pack_buf; if (sdi && sdi->priv) { vdev = sdi->priv; - - if (vdev->packet_buffer != NULL){ - pack_buf = vdev->packet_buffer; + free_temp_buffer(vdev); - g_safe_free(pack_buf->post_buf); - - for (i = 0; i < SESSION_MAX_CHANNEL_COUNT; i++){ - if (pack_buf->block_bufs[i] != NULL){ - g_free(pack_buf->block_bufs[i]); - pack_buf->block_bufs[i] = NULL; - } - else{ - break; - } - } - } - - g_safe_free(vdev->packet_buffer); - g_safe_free(vdev->buf); - g_safe_free(vdev->logic_buf); g_safe_free(sdi->priv); sdi->status = SR_ST_INACTIVE; From 5a5512c3f0d7146822dc4d1af90a53076ce1cd97 Mon Sep 17 00:00:00 2001 From: dreamsourcelabTAI Date: Thu, 18 May 2023 14:51:19 +0800 Subject: [PATCH 3/6] fix: Trigger voltage cannot be adjusted correctly on DSO mode --- DSView/pv/view/dsosignal.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/DSView/pv/view/dsosignal.cpp b/DSView/pv/view/dsosignal.cpp index 468608ae..8418509b 100644 --- a/DSView/pv/view/dsosignal.cpp +++ b/DSView/pv/view/dsosignal.cpp @@ -453,11 +453,14 @@ void DsoSignal::set_trig_ratio(double ratio, bool delta_change) _trig_value = ratio2value(delta + 0.5); } else { + if (delta < 0.06f) + delta = 0.06f; + if (delta > 0.945f) + delta = 0.945f; + _trig_value = ratio2value(delta); } - - int margin = TrigMargin; - _trig_value = std::min(std::max(_trig_value, margin), (ratio2value(1) - margin)); + if (delta_change) _trig_delta = get_trig_vrate() - get_zero_ratio(); session->get_device()->set_config(_probe, NULL, SR_CONF_TRIGGER_VALUE, From 01d3a227714172cf395d6a8726cff04a22294223 Mon Sep 17 00:00:00 2001 From: dreamsourcelabTAI Date: Thu, 18 May 2023 15:30:32 +0800 Subject: [PATCH 4/6] The serial trig regular expression can only input letter:'0,1,x,X' --- DSView/pv/dock/triggerdock.cpp | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/DSView/pv/dock/triggerdock.cpp b/DSView/pv/dock/triggerdock.cpp index a6511d94..85196388 100644 --- a/DSView/pv/dock/triggerdock.cpp +++ b/DSView/pv/dock/triggerdock.cpp @@ -38,6 +38,8 @@ #include "../deviceagent.h" #include "../view/logicsignal.h" #include "../ui/langresource.h" +#include +#include namespace pv { namespace dock { @@ -587,6 +589,7 @@ void TriggerDock::setup_adv_tab() const QString mask = "N N N N N N N N N N N N N N N N"; QRegularExpression value_rx("[10XRFCxrfc ]+"); QValidator *value_validator = new QRegularExpressionValidator(value_rx, _stage_tabWidget); + for (int i = 0; i < TriggerStages; i++) { DsComboBox *_logic_comboBox = new DsComboBox(_stage_tabWidget); _logic_comboBox->addItem(L_S(STR_PAGE_DLG, S_ID(IDS_DLG_OR), "Or")); @@ -756,21 +759,27 @@ void TriggerDock::setup_adv_tab() _serial_data_label = new QLabel(_serial_groupBox); _serial_data_comboBox = new DsComboBox(_serial_groupBox); - for(int i = 0; i < _cur_ch_num; i++) + + for(int i = 0; i < _cur_ch_num; i++){ _serial_data_comboBox->addItem(QString::number(i)); + } _serial_value_label = new QLabel(_serial_groupBox); _serial_value_lineEdit = new QLineEdit("X X X X X X X X X X X X X X X X", _serial_groupBox); _serial_value_lineEdit->setFont(font); - _serial_value_lineEdit->setValidator(value_validator); _serial_value_lineEdit->setMaxLength(TriggerProbes * 2 - 1); _serial_value_lineEdit->setInputMask(mask); _serial_value_lineEdit->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred); - _serial_bits_comboBox = new DsComboBox(_serial_groupBox); - for(int i = 1; i <= 16; i++) - _serial_bits_comboBox->addItem(QString::number(i)); + QRegularExpression value_rx2("[10Xx ]+"); + QValidator *value_validator2 = new QRegularExpressionValidator(value_rx2, _stage_tabWidget); + _serial_value_lineEdit->setValidator(value_validator2); + _serial_bits_comboBox = new DsComboBox(_serial_groupBox); + + for(int i = 1; i <= 16; i++){ + _serial_bits_comboBox->addItem(QString::number(i)); + } QVBoxLayout *serial_layout = new QVBoxLayout(); QGridLayout *serial_glayout = new QGridLayout(); From c18f38d482213e9aa651f6d1aa02601ffe4b353c Mon Sep 17 00:00:00 2001 From: dreamsourcelabTAI Date: Thu, 18 May 2023 16:09:02 +0800 Subject: [PATCH 5/6] fix: The decoder have not check channel availability --- DSView/pv/data/decoderstack.cpp | 33 +++++++++++++++++++++++---------- 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/DSView/pv/data/decoderstack.cpp b/DSView/pv/data/decoderstack.cpp index 7383c967..63e298fb 100644 --- a/DSView/pv/data/decoderstack.cpp +++ b/DSView/pv/data/decoderstack.cpp @@ -415,7 +415,8 @@ void DecoderStack::do_decode_work() _decoder_status->clear(); //clear old items if (!_options_changed) - { + { + dsv_err("ERROR:Decoder options have not changed."); return; } _options_changed = false; @@ -452,17 +453,25 @@ void DecoderStack::do_decode_work() } if (_snapshot == NULL) - return; + { + _error_message = L_S(STR_PAGE_MSG, S_ID(IDS_MSG_DECODERSTACK_DECODE_WORK_ERROR), + "One or more required channels have not been specified"); + return; + } if (_session->is_realtime_refresh() == false && _snapshot->empty()) { + dsv_err("ERROR:Decode data is empty."); return; } // Get the samplerate _samplerate = _snapshot->samplerate(); if (_samplerate == 0.0) + { + dsv_err("ERROR:Decode data got an invalid sample rate."); return; + } execute_decode_stack(); } @@ -508,7 +517,7 @@ void DecoderStack::decode_data(const uint64_t decode_start, const uint64_t decod //struct srd_push_param push_param; if( i >= decode_end){ - dsv_info("%s", "decode data index have been end"); + dsv_info("%s", "decode data index have been to end"); } std::vector chunk; @@ -558,12 +567,14 @@ void DecoderStack::decode_data(const uint64_t decode_start, const uint64_t decod if (sig_index == -1) { chunk.push_back(NULL); chunk_const.push_back(0); - } else { + } + else { if (_snapshot->has_data(sig_index)) { auto data_ptr = _snapshot->get_decode_samples(i, chunk_end, sig_index); chunk.push_back(data_ptr); chunk_const.push_back(_snapshot->get_sample(i, sig_index)); - } else { + } + else { _error_message = L_S(STR_PAGE_MSG, S_ID(IDS_MSG_DECODERSTACK_DECODE_DATA_ERROR), "At least one of selected channels are not enabled."); return; @@ -622,13 +633,13 @@ void DecoderStack::decode_data(const uint64_t decode_start, const uint64_t decod if (!bError && bEndTime){ srd_session_end(session, &error); - if (error) + if (error != NULL) _error_message = QString::fromLocal8Bit(error); } dsv_info("%s%llu", "send to decoder times: ", entry_cnt); - if (error) + if (error != NULL) g_free(error); if (!_session->is_closed()) @@ -692,14 +703,16 @@ void DecoderStack::execute_decode_stack() _stask_stauts); char *error = NULL; - if (srd_session_start(session, &error) == SRD_OK) + if (srd_session_start(session, &error) == SRD_OK){ //need a lot time decode_data(decode_start, decode_end, session); - else + } + else if (error != NULL){ _error_message = QString::fromLocal8Bit(error); + } // Destroy the session - if (error) { + if (error != NULL) { g_free(error); } From f9caac74b8e75b01aade354c43d6fa9ec610e4c2 Mon Sep 17 00:00:00 2001 From: dreamsourcelabTAI Date: Thu, 18 May 2023 16:55:04 +0800 Subject: [PATCH 6/6] An label text form mutil-lang --- DSView/pv/dock/measuredock.cpp | 4 +++- DSView/pv/dock/measuredock.h | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/DSView/pv/dock/measuredock.cpp b/DSView/pv/dock/measuredock.cpp index e7296636..427067e0 100644 --- a/DSView/pv/dock/measuredock.cpp +++ b/DSView/pv/dock/measuredock.cpp @@ -94,7 +94,8 @@ MeasureDock::MeasureDock(QWidget *parent, View &view, SigSession *session) : _dist_layout->setVerticalSpacing(5); _dist_layout->addWidget(_dist_add_btn, 0, 0); _dist_layout->addWidget(new QLabel(_widget), 0, 1, 1, 3); - _dist_layout->addWidget(new QLabel(L_S(STR_PAGE_DLG, S_ID(IDS_DLG_TIME_SAMPLES), "Time/Samples"), _widget), 0, 4); + _add_dec_label = new QLabel(L_S(STR_PAGE_DLG, S_ID(IDS_DLG_TIME_SAMPLES), "Time/Samples"), _widget); + _dist_layout->addWidget(_add_dec_label, 0, 4); _dist_layout->addWidget(new QLabel(_widget), 0, 5, 1, 2); _dist_layout->setColumnStretch(1, 50); _dist_layout->setColumnStretch(6, 100); @@ -171,6 +172,7 @@ void MeasureDock::retranslateUi() _channel_label->setText(L_S(STR_PAGE_DLG, S_ID(IDS_DLG_CHANNEL), "Channel")); _edge_label->setText(L_S(STR_PAGE_DLG, S_ID(IDS_DLG_RIS_OR_FAL_EDGE), "Rising/Falling/Edges")); _time_label->setText(L_S(STR_PAGE_DLG, S_ID(IDS_DLG_TIME_SAMPLES), "Time/Samples")); + _add_dec_label->setText(_time_label->text()); _w_label->setText(L_S(STR_PAGE_DLG, S_ID(IDS_DLG_W), "W: ")); _p_label->setText(L_S(STR_PAGE_DLG, S_ID(IDS_DLG_P), "P: ")); diff --git a/DSView/pv/dock/measuredock.h b/DSView/pv/dock/measuredock.h index a1a9369e..52c6b683 100644 --- a/DSView/pv/dock/measuredock.h +++ b/DSView/pv/dock/measuredock.h @@ -111,6 +111,7 @@ private: QLabel *_period_label; QLabel *_freq_label; QLabel *_duty_label; + QLabel *_add_dec_label; QGridLayout *_dist_layout; QGroupBox *_dist_groupBox;