From 21799ffe0009792d640738142dfeeee8e863e7ea Mon Sep 17 00:00:00 2001 From: dreamsourcelabTAI Date: Wed, 21 Dec 2022 11:47:07 +0800 Subject: [PATCH] On real-time mode, auto set the max scale when start capture data --- DSView/pv/mainwindow.cpp | 2 + DSView/pv/toolbars/samplingbar.cpp | 91 +++++++++-------- DSView/pv/toolbars/samplingbar.h | 12 ++- DSView/pv/view/view.cpp | 155 +++++------------------------ DSView/pv/view/view.h | 123 +++++++++++++++++------ 5 files changed, 179 insertions(+), 204 deletions(-) diff --git a/DSView/pv/mainwindow.cpp b/DSView/pv/mainwindow.cpp index a4c7cbe8..08819f18 100644 --- a/DSView/pv/mainwindow.cpp +++ b/DSView/pv/mainwindow.cpp @@ -234,6 +234,8 @@ namespace pv retranslateUi(); + _sampling_bar->set_view(_view); + // event connect(&_event, SIGNAL(session_error()), this, SLOT(on_session_error())); connect(&_event, SIGNAL(signals_changed()), this, SLOT(on_signals_changed())); diff --git a/DSView/pv/toolbars/samplingbar.cpp b/DSView/pv/toolbars/samplingbar.cpp index d292ad9d..efb89c1a 100644 --- a/DSView/pv/toolbars/samplingbar.cpp +++ b/DSView/pv/toolbars/samplingbar.cpp @@ -37,6 +37,7 @@ #include "../deviceagent.h" #include "../ui/msgbox.h" #include "../ui/langresource.h" +#include "../view/view.h" using std::map; using std::max; @@ -69,6 +70,7 @@ namespace pv _last_device_handle = NULL_HANDLE; _last_device_index = -1; _next_switch_device = NULL_HANDLE; + _view = NULL; _session = session; _device_agent = _session->get_device(); @@ -882,6 +884,11 @@ namespace pv } } + if (_device_agent->get_work_mode() == LOGIC && _session->is_realtime_mode()){ + if (_view != NULL) + _view->auto_set_max_scale(); + } + _is_run_as_instant = false; _session->start_capture(false); } @@ -892,8 +899,7 @@ namespace pv { bool wait_upload = false; - if (_session->is_repeat_mode() == false) - { + if (_session->is_repeat_mode() == false){ GVariant *gvar = _device_agent->get_config(NULL, NULL, SR_CONF_WAIT_UPLOAD); if (gvar != NULL) { @@ -901,57 +907,62 @@ namespace pv g_variant_unref(gvar); } } - if (!wait_upload) - { + if (!wait_upload){ _session->stop_capture(); } + + return; } - else + + + if (_device_agent->have_instance() == false) { - if (_device_agent->have_instance() == false) + dsv_info("%s", "Error! Have no device, can't to collect data."); + return; + } + + commit_settings(); + + if (_device_agent->get_work_mode() == DSO) + { + GVariant *gvar = _device_agent->get_config(NULL, NULL, SR_CONF_ZERO); + + if (gvar != NULL) { - dsv_info("%s", "Error! Have no device, can't to collect data."); - return; - } + bool zero = g_variant_get_boolean(gvar); + g_variant_unref(gvar); - commit_settings(); - - if (_device_agent->get_work_mode() == DSO) - { - GVariant *gvar = _device_agent->get_config(NULL, NULL, SR_CONF_ZERO); - - if (gvar != NULL) + if (zero) { - bool zero = g_variant_get_boolean(gvar); - g_variant_unref(gvar); + dialogs::DSMessageBox msg(this); + msg.mBox()->setText(L_S(STR_PAGE_MSG,S_ID(IDS_MSG_A_CAL), "Auto Calibration")); + msg.mBox()->setInformativeText(L_S(STR_PAGE_MSG,S_ID(IDS_MSG_A_CAL_START), "Auto Calibration program will be started. Don't connect any probes. It can take a while!")); - if (zero) + msg.mBox()->addButton(L_S(STR_PAGE_MSG,S_ID(IDS_MSG_OK), "Ok"), QMessageBox::AcceptRole); + msg.mBox()->addButton(L_S(STR_PAGE_MSG,S_ID(IDS_MSG_SKIP), "Skip"), QMessageBox::RejectRole); + msg.mBox()->setIcon(QMessageBox::Warning); + + if (msg.exec()) { - dialogs::DSMessageBox msg(this); - msg.mBox()->setText(L_S(STR_PAGE_MSG,S_ID(IDS_MSG_A_CAL), "Auto Calibration")); - msg.mBox()->setInformativeText(L_S(STR_PAGE_MSG,S_ID(IDS_MSG_A_CAL_START), "Auto Calibration program will be started. Don't connect any probes. It can take a while!")); - - msg.mBox()->addButton(L_S(STR_PAGE_MSG,S_ID(IDS_MSG_OK), "Ok"), QMessageBox::AcceptRole); - msg.mBox()->addButton(L_S(STR_PAGE_MSG,S_ID(IDS_MSG_SKIP), "Skip"), QMessageBox::RejectRole); - msg.mBox()->setIcon(QMessageBox::Warning); - - if (msg.exec()) - { - zero_adj(); - } - else - { - _device_agent->set_config(NULL, NULL, SR_CONF_ZERO, g_variant_new_boolean(false)); - update_view_status(); - } - return; + zero_adj(); } + else + { + _device_agent->set_config(NULL, NULL, SR_CONF_ZERO, g_variant_new_boolean(false)); + update_view_status(); + } + return; } } - - _is_run_as_instant = true; - _session->start_capture(true); } + + if (_device_agent->get_work_mode() == LOGIC && _session->is_realtime_mode()){ + if (_view != NULL) + _view->auto_set_max_scale(); + } + + _is_run_as_instant = true; + _session->start_capture(true); } void SamplingBar::on_device_selected() diff --git a/DSView/pv/toolbars/samplingbar.h b/DSView/pv/toolbars/samplingbar.h index c4a9c093..df04c3b2 100644 --- a/DSView/pv/toolbars/samplingbar.h +++ b/DSView/pv/toolbars/samplingbar.h @@ -48,7 +48,11 @@ namespace pv namespace device { class DevInst; - } + } + + namespace view{ + class View; + } namespace dialogs { @@ -87,6 +91,10 @@ namespace pv ds_device_handle get_next_device_handle(); void update_sample_rate_selector(); + inline void set_view(view::View *view){ + _view = view; + } + signals: void sig_store_session_data(); @@ -145,8 +153,8 @@ namespace pv ds_device_handle _last_device_handle; ds_device_handle _next_switch_device; int _last_device_index; - bool _is_run_as_instant; + view::View *_view; }; } // namespace toolbars diff --git a/DSView/pv/view/view.cpp b/DSView/pv/view/view.cpp index 38f509e0..b880f874 100644 --- a/DSView/pv/view/view.cpp +++ b/DSView/pv/view/view.cpp @@ -47,6 +47,7 @@ #include "../dialogs/calibration.h" #include "../dialogs/lissajousoptions.h" #include "../dsvdef.h" +#include "../log.h" using namespace std; @@ -207,41 +208,6 @@ void View::set_device() _devmode->set_device(); } -SigSession& View::session() -{ - return *_session; -} - -double View::scale() -{ - return _scale; -} - -int64_t View::offset() -{ - return _offset; -} - -double View::trig_hoff() -{ - return _trig_hoff; -} - -void View::set_trig_hoff(double hoff) -{ - _trig_hoff = hoff; -} - -double View::get_minscale() -{ - return _minscale; -} - -double View::get_maxscale() -{ - return _maxscale; -} - void View::capture_init() { int mode = _device_agent->get_work_mode(); @@ -425,21 +391,6 @@ bool View::compare_trace_v_offsets(const Trace *a, return a1->get_v_offset() < b1->get_v_offset(); } -bool View::cursors_shown() -{ - return _show_cursors; -} - -bool View::trig_cursor_shown() -{ - return _show_trig_cursor; -} - -bool View::search_cursor_shown() -{ - return _show_search_cursor; -} - void View::show_cursors(bool show) { _show_cursors = show; @@ -550,21 +501,6 @@ void View::set_search_pos(uint64_t search_pos, bool hit) } } -uint64_t View::get_search_pos() -{ - return _search_pos; -} - -bool View::get_search_hit() -{ - return _search_hit; -} - -const QPoint& View::hover_point() -{ - return _hover_point; -} - void View::normalize_layout() { int v_min = INT_MAX; @@ -585,16 +521,6 @@ void View::normalize_layout() v_scroll_value_changed(verticalScrollBar()->sliderPosition()); } -int View::get_spanY() -{ - return _spanY; -} - -int View::get_signalHeight() -{ - return _signalHeight; -} - void View::get_scroll_layout(int64_t &length, int64_t &offset) { const auto data_set = _session->get_data(); @@ -961,29 +887,6 @@ void View::on_traces_moved() viewport_update(); } -/* - * cursorList - */ -std::list& View::get_cursorList() -{ - return _cursorList; -} - -Cursor* View::get_trig_cursor() -{ - return _trig_cursor; -} - -Cursor* View::get_search_cursor() -{ - return _search_cursor; -} - -Ruler* View::get_ruler() -{ - return _ruler; -} - void View::add_cursor(QColor color, uint64_t index) { Cursor *newCursor = new Cursor(*this, color, index); @@ -1258,24 +1161,6 @@ bool View::get_dso_trig_moved() return _time_viewport->get_dso_trig_moved(); } -/* - * horizental cursors - */ -bool View::xcursors_shown() -{ - return _show_xcursors; -} - -void View::show_xcursors(bool show) -{ - _show_xcursors = show; -} - -std::list& View::get_xcursorList() -{ - return _xcursorList; -} - void View::add_xcursor(QColor color, double value0, double value1) { XCursor *newXCursor = new XCursor(*this, color, value0, value1); @@ -1292,21 +1177,6 @@ void View::del_xcursor(XCursor* xcursor) xcursor_update(); } -ViewStatus* View::get_viewstatus() -{ - return _viewbottom; -} - -bool View::back_ready() -{ - return _back_ready; -} - -void View::set_back(bool ready) -{ - _back_ready = ready; -} - double View::index2pixel(uint64_t index, bool has_hoff) { const double samples_per_pixel = session().cur_snap_samplerate() * scale(); @@ -1362,5 +1232,28 @@ void View::check_calibration() } } +void View::set_scale(double scale) +{ + if (scale < _minscale) + scale = _minscale; + if (scale > _maxscale) + scale = _maxscale; + + if (_scale != scale) + { + _scale = scale; + _header->update(); + _ruler->update(); + viewport_update(); + update_scroll(); + } +} + +void View::auto_set_max_scale() +{ + _maxscale = _session->cur_sampletime() / (get_view_width() * MaxViewRate); + set_scale(_maxscale); +} + } // namespace view } // namespace pv diff --git a/DSView/pv/view/view.h b/DSView/pv/view/view.h index 71ab7456..da25dbfb 100644 --- a/DSView/pv/view/view.h +++ b/DSView/pv/view/view.h @@ -109,24 +109,46 @@ public: ~View(); - SigSession& session(); + inline SigSession& session(){ + return *_session; + } /** * Returns the view time scale in seconds per pixel. */ - double scale(); + inline double scale(){ + return _scale; + } + + inline double get_minscale(){ + return _minscale; + } + + inline double get_maxscale(){ + return _maxscale; + } + + void set_scale(double scale); + + void auto_set_max_scale(); /** * Returns the pixels offset of the left edge of the view */ - int64_t offset(); - int v_offset(); + inline int64_t offset(){ + return _offset; + } /** * trigger position fix */ - double trig_hoff(); - void set_trig_hoff(double hoff); + inline double trig_hoff(){ + return _trig_hoff; + } + + inline void set_trig_hoff(double hoff){ + _trig_hoff = hoff; + } int64_t get_min_offset(); int64_t get_max_offset(); @@ -149,24 +171,40 @@ public: /** * Returns true if cursors are displayed. false otherwise. */ - bool cursors_shown(); - bool trig_cursor_shown(); - bool search_cursor_shown(); + inline bool cursors_shown(){ + return _show_cursors; + } - int get_spanY(); + inline bool trig_cursor_shown(){ + return _show_trig_cursor; + } - int get_signalHeight(); + inline bool search_cursor_shown(){ + return _show_search_cursor; + } + + inline int get_spanY(){ + return _spanY; + } + + inline int get_signalHeight(){ + return _signalHeight; + } int headerWidth(); - Ruler* get_ruler(); + inline Ruler* get_ruler(){ + return _ruler; + } /** * Shows or hides the cursors. */ void show_cursors(bool show = true); - const QPoint& hover_point(); + inline const QPoint& hover_point(){ + return _hover_point; + } void normalize_layout(); @@ -177,35 +215,51 @@ public: /* * cursorList */ - std::list& get_cursorList(); + inline std::list& get_cursorList(){ + return _cursorList; + } + void add_cursor(QColor color, uint64_t index); void del_cursor(Cursor* cursor); void clear_cursors(); void set_cursor_middle(int index); - Cursor* get_trig_cursor(); - Cursor* get_search_cursor(); - bool get_search_hit(); + inline Cursor* get_trig_cursor(){ + return _trig_cursor; + } + + inline Cursor* get_search_cursor(){ + return _search_cursor; + } + + inline bool get_search_hit(){ + return _search_hit; + } void set_search_pos(uint64_t search_pos, bool hit); - uint64_t get_search_pos(); + inline uint64_t get_search_pos(){ + return _search_pos; + } /* * horizental cursors */ - bool xcursors_shown(); - void show_xcursors(bool show); - std::list& get_xcursorList(); + inline bool xcursors_shown(){ + return _show_xcursors; + } + + inline void show_xcursors(bool show){ + _show_xcursors = show; + } + + inline std::list& get_xcursorList(){ + return _xcursorList; + } + void add_xcursor(QColor color, double value0, double value1); void del_xcursor(XCursor* xcursor); - - /* - * - */ - double get_minscale(); - double get_maxscale(); - + void set_update(Viewport *viewport, bool need_update); void set_all_update(bool need_update); @@ -230,13 +284,20 @@ public: bool get_dso_trig_moved(); - ViewStatus* get_viewstatus(); + inline ViewStatus* get_viewstatus(){ + return _viewbottom; + } /* * back paint status */ - bool back_ready(); - void set_back(bool ready); + inline bool back_ready(){ + return _back_ready; + } + + inline void set_back(bool ready){ + _back_ready = ready; + } /* * untils