summaryrefslogtreecommitdiff
path: root/DSLogic-gui/pv/mainwindow.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'DSLogic-gui/pv/mainwindow.cpp')
-rw-r--r--DSLogic-gui/pv/mainwindow.cpp123
1 files changed, 103 insertions, 20 deletions
diff --git a/DSLogic-gui/pv/mainwindow.cpp b/DSLogic-gui/pv/mainwindow.cpp
index 32c7a94..9a7bb84 100644
--- a/DSLogic-gui/pv/mainwindow.cpp
+++ b/DSLogic-gui/pv/mainwindow.cpp
@@ -57,6 +57,7 @@
#include "dock/protocoldock.h"
#include "dock/triggerdock.h"
+#include "dock/dsotriggerdock.h"
#include "dock/measuredock.h"
#include "dock/searchdock.h"
@@ -235,6 +236,14 @@ void MainWindow::setup_ui()
_trigger_widget = new dock::TriggerDock(_trigger_dock, _session);
_trigger_dock->setWidget(_trigger_widget);
+ _dso_trigger_dock=new QDockWidget(tr("Trigger Setting..."),this);
+ _dso_trigger_dock->setFeatures(QDockWidget::NoDockWidgetFeatures);
+ _dso_trigger_dock->setAllowedAreas(Qt::RightDockWidgetArea);
+ _dso_trigger_dock->setVisible(false);
+ _dso_trigger_widget = new dock::DsoTriggerDock(_dso_trigger_dock, _session);
+ _dso_trigger_dock->setWidget(_dso_trigger_widget);
+
+
// Setup _view widget
_view = new pv::view::View(_session, this);
_vertical_layout->addWidget(_view);
@@ -242,15 +251,17 @@ void MainWindow::setup_ui()
// Populate the device list and select the initially selected device
update_device_list();
-// connect(_device_bar, SIGNAL(device_selected()), this,
-// SLOT(device_selected()));
connect(_device_bar, SIGNAL(device_selected()), this,
- SLOT(init()));
+ SLOT(device_selected()));
+// connect(_device_bar, SIGNAL(device_selected()), this,
+// SLOT(init()));
connect(_device_bar, SIGNAL(device_updated()), this,
SLOT(update()));
- connect(_sampling_bar, SIGNAL(run_stop()), this,
- SLOT(run_stop()));
- addToolBar(_sampling_bar);
+ connect(_sampling_bar, SIGNAL(device_reload()), this,
+ SLOT(init()));
+ connect(_sampling_bar, SIGNAL(run_stop()), this,
+ SLOT(run_stop()));
+ addToolBar(_sampling_bar);
addToolBar(_trig_bar);
addToolBar(_device_bar);
addToolBar(_file_bar);
@@ -294,11 +305,12 @@ void MainWindow::setup_ui()
_trigger_dock->setObjectName(tr("triggerDock"));
addDockWidget(Qt::RightDockWidgetArea,_protocol_dock);
addDockWidget(Qt::RightDockWidgetArea,_trigger_dock);
+ addDockWidget(Qt::RightDockWidgetArea,_dso_trigger_dock);
addDockWidget(Qt::RightDockWidgetArea, _measure_dock);
addDockWidget(Qt::BottomDockWidgetArea, _search_dock);
// Set the title
- setWindowTitle(QApplication::translate("MainWindow", "DSLogic", 0,
+ setWindowTitle(QApplication::translate("MainWindow", "DSLogic(Beta)", 0,
QApplication::UnicodeUTF8));
// Setup _session events
@@ -310,6 +322,8 @@ void MainWindow::setup_ui()
SLOT(device_detach()));
connect(&_session, SIGNAL(test_data_error()), this,
SLOT(test_data_error()));
+ connect(&_session, SIGNAL(dso_ch_changed(uint16_t)), this,
+ SLOT(dso_ch_changed(uint16_t)));
connect(_view, SIGNAL(cursor_update()), _measure_widget,
SLOT(cursor_update()));
@@ -325,6 +339,14 @@ void MainWindow::init()
_trigger_widget->device_change();
if (_session.get_device())
_session.init_signals(_session.get_device());
+ if (_session.get_device()->mode == DSO) {
+ _sampling_bar->set_record_length(DefaultDSODepth*2);
+ _sampling_bar->set_sample_rate(DefaultDSORate*2);
+ _sampling_bar->enable_toggle(false);
+ _view->hDial_changed(0);
+ } else if(_session.get_device()->mode == LOGIC) {
+ _sampling_bar->enable_toggle(true);
+ }
}
void MainWindow::update()
@@ -372,10 +394,12 @@ void MainWindow::update_device_list(struct sr_dev_inst *selected_device)
}
}
- #ifdef HAVE_LA_DSLOGIC
- _session.start_hot_plug_proc(boost::bind(&MainWindow::session_error, this,
+// #ifdef HAVE_LA_DSLOGIC
+ _session.start_hotplug_proc(boost::bind(&MainWindow::session_error, this,
QString("Hotplug failed"), _1));
- #endif
+ _session.start_dso_ctrl_proc(boost::bind(&MainWindow::session_error, this,
+ QString("Hotplug failed"), _1));
+// #endif
}
void MainWindow::device_change()
@@ -408,11 +432,11 @@ void MainWindow::device_change()
device_detach();
}
- #ifdef HAVE_LA_DSLOGIC
- _session.stop_hot_plug_proc();
- _session.start_hot_plug_proc(boost::bind(&MainWindow::session_error, this,
+// #ifdef HAVE_LA_DSLOGIC
+ _session.stop_hotplug_proc();
+ _session.start_hotplug_proc(boost::bind(&MainWindow::session_error, this,
QString("Hotplug failed"), _1));
- #endif
+// #endif
}
@@ -444,16 +468,44 @@ void MainWindow::device_selected()
_sampling_bar->set_device(_device_bar->get_selected_device());
_sampling_bar->update_sample_rate_selector();
_view->show_trig_cursor(false);
+ _trigger_dock->setVisible(false);
+ _dso_trigger_dock->setVisible(false);
+ _protocol_dock->setVisible(false);
+ _measure_dock->setVisible(false);
+ _search_dock->setVisible(false);
init();
} else {
show_session_error("Open Device Failed",
"the selected device can't be opened!");
}
+
+ if (_device_bar->get_selected_device()->mode == DSO) {
+ QMessageBox msg(this);
+ msg.setText("Zero Adjustment");
+ msg.setInformativeText("Please left both of channels unconnect for zero adjustment!");
+ msg.setStandardButtons(QMessageBox::Ok);
+ msg.setIcon(QMessageBox::Warning);
+ msg.exec();
+
+ int ret = sr_config_set(_device_bar->get_selected_device(), SR_CONF_ZERO, g_variant_new_boolean(TRUE));
+ if (ret != SR_OK) {
+ QMessageBox msg(this);
+ msg.setText("Zero Adjustment Issue");
+ msg.setInformativeText("Can't send out the command of zero adjustment!");
+ msg.setStandardButtons(QMessageBox::Ok);
+ msg.setIcon(QMessageBox::Warning);
+ msg.exec();
+ } else {
+ run_stop();
+ g_usleep(100000);
+ run_stop();
+ }
+ }
}
void MainWindow::device_attach()
{
- _session.stop_hot_plug_proc();
+ _session.stop_hotplug_proc();
if (_session.get_capture_state() == SigSession::Running)
_session.stop_capture();
@@ -470,7 +522,7 @@ void MainWindow::device_attach()
void MainWindow::device_detach()
{
- _session.stop_hot_plug_proc();
+ _session.stop_hotplug_proc();
if (_session.get_capture_state() == SigSession::Running)
_session.stop_capture();
@@ -506,8 +558,34 @@ void MainWindow::run_stop()
_sampling_bar->enable_run_stop(true);
}
+void MainWindow::dso_ch_changed(uint16_t num)
+{
+ if(num == 1) {
+ _sampling_bar->set_record_length(DefaultDSODepth*2);
+ _sampling_bar->set_sample_rate(DefaultDSORate*2);
+ _session.set_total_sample_len(_sampling_bar->get_record_length());
+ if (_session.get_capture_state() == SigSession::Running) {
+ _session.stop_capture();
+ _session.start_capture(_sampling_bar->get_record_length(),
+ boost::bind(&MainWindow::session_error, this,
+ QString("Capture failed"), _1));
+ }
+ } else {
+ _sampling_bar->set_record_length(DefaultDSODepth);
+ _sampling_bar->set_sample_rate(DefaultDSORate);
+ _session.set_total_sample_len(_sampling_bar->get_record_length());
+ if (_session.get_capture_state() == SigSession::Running) {
+ _session.stop_capture();
+ _session.start_capture(_sampling_bar->get_record_length(),
+ boost::bind(&MainWindow::session_error, this,
+ QString("Capture failed"), _1));
+ }
+ }
+}
+
void MainWindow::test_data_error()
{
+ _session.stop_capture();
QMessageBox msg(this);
msg.setText("Data Error");
msg.setInformativeText("the receive data are not consist with pre-defined test data");
@@ -518,12 +596,14 @@ void MainWindow::test_data_error()
void MainWindow::capture_state_changed(int state)
{
- _sampling_bar->enable_toggle(state != SigSession::Running);
- _trig_bar->enable_toggle(state != SigSession::Running);
+ if (_session.get_device()->mode != DSO) {
+ _sampling_bar->enable_toggle(state != SigSession::Running);
+ _trig_bar->enable_toggle(state != SigSession::Running);
+ _measure_dock->widget()->setEnabled(state != SigSession::Running);
+ }
_device_bar->enable_toggle(state != SigSession::Running);
_file_bar->enable_toggle(state != SigSession::Running);
_sampling_bar->set_sampling(state == SigSession::Running);
- _measure_dock->widget()->setEnabled(state != SigSession::Running);
_view->on_state_changed(state != SigSession::Running);
}
@@ -534,7 +614,10 @@ void MainWindow::on_protocol(bool visible)
void MainWindow::on_trigger(bool visible)
{
- _trigger_dock->setVisible(visible);
+ if (_session.get_device()->mode != DSO)
+ _trigger_dock->setVisible(visible);
+ else
+ _dso_trigger_dock->setVisible(visible);
}
void MainWindow::on_measure(bool visible)