From 6e1f5206c7a11c6e330253d5d4f4048b7ef74a50 Mon Sep 17 00:00:00 2001 From: Carlos de Paula Date: Mon, 25 Nov 2024 18:06:25 -0300 Subject: [PATCH 1/2] Merge DHO800-900 functionality into MacOS port --- README | 85 + global.h | 2 +- interface.cpp | 16 +- mainwindow.cpp | 3875 +++++++++++++++++--------------------- read_settings_thread.cpp | 241 ++- screen_thread.cpp | 25 +- signalcurve.cpp | 2 +- timer_handlers.cpp | 2 +- 8 files changed, 2065 insertions(+), 2183 deletions(-) create mode 100644 README diff --git a/README b/README new file mode 100644 index 0000000..f6d593a --- /dev/null +++ b/README @@ -0,0 +1,85 @@ +# DSRemote-macOS + +DSRemote ported to work with Rigol DHO800 and DHO900 series. Currently at experimental stage. + +This is a quick and dirty patched version of [DSRemote](https://teuniz.net/DSRemote/) to allow building on macOS without USB support. + +## Compiling on macOS without USB support + +Install [Homebrew](https://brew.sh). + +brew install make git qt@5 + +brew link qt@5 + +git clone + +cd DSRemote-macOS + +qmake + +make -j8 (replace 8 with the number of threads you'd like to use) + +Copy the resulting .app file into your Applications folder, right click and Open. + + + +Original README follows. + + + +# DSRemote + +Operate your Rigol oscilloscope from your Linux desktop +======================================================== + +webpage and info: + +Compiling and installing on Ubuntu Linux and derivatives +--------------------------------------------------------- + +sudo apt-get update +sudo apt-get install g++ make git qtbase5-dev-tools qtbase5-dev qt5-default +git clone +cd DSRemote +qmake +make -j4 +sudo make install +dsremote + +For USB connection setup use the following commands +---------------------------------------------------- + +sudo groupadd usbtmc +sudo usermod -a -G usbtmc +reboot + +Now you can run the program by typing: dsremote + +(USB connection does not work on modern USB host controllers thanks to +a bug in the scopes' firmware that Rigol does not want to fix.) + + Read also the file readme_usbtcm_driver.txt + and the file notes.txt. + +Supported devices +--------------- + +DS6000 and DS1000Z series oscilloscopes. + +### MSO4000/DS4000 series + +There is some basic support like capturing screenshots. + +Not tested yet: + +* Record & Playback function +* Wave Inspector +* serial decoding. + +Note: +This is a private project made available to the public. No pullrequests! +If you believe you found a bug or want to add some feature, open an issue on Gitlab or send me an email. +In case you want to add some code, send me a diff, no pull requests, they will be ignored. +Also, all requests regarding to support other platforms and/or other tools will be ignored. +Again, this a Linux & GCC & Make project. That means no Mac/windows/Clang/CMake etc. diff --git a/global.h b/global.h index 3951d26..160373b 100644 --- a/global.h +++ b/global.h @@ -35,7 +35,7 @@ #define PROGRAM_NAME "DSRemote" -#define PROGRAM_VERSION "0.41_2311302014" +#define PROGRAM_VERSION "0.41_2311302014_MAC" #define MAX_PATHLEN (1024) diff --git a/interface.cpp b/interface.cpp index 280b356..720376e 100644 --- a/interface.cpp +++ b/interface.cpp @@ -4143,7 +4143,7 @@ void UI_Mainwindow::trigAdjustDialClicked(QPoint) statusLabel->setText(str); - snprintf(str, 512, ":TRIG:EDG:LEV %e", devparms.triggeredgelevel[devparms.triggeredgesource]); + snprintf(str, 512, ":TRIGger:EDGE:LEVel %e", devparms.triggeredgelevel[devparms.triggeredgesource]); set_cue_cmd(str); } @@ -4155,7 +4155,11 @@ void UI_Mainwindow::toggle_fft() { devparms.math_fft = 0; - if(devparms.modelserie != 1) + if(devparms.modelserie == 7) + { + set_cue_cmd(":MATH1:DISP OFF"); + } + else if(devparms.modelserie != 1) { set_cue_cmd(":CALC:MODE OFF"); } @@ -4168,7 +4172,13 @@ void UI_Mainwindow::toggle_fft() } else { - if(devparms.modelserie != 1) + if(devparms.modelserie == 7) + { + set_cue_cmd(":MATH:OPER FFT"); + + set_cue_cmd(":MATH1:DISP ON"); + } + else if(devparms.modelserie != 1) { set_cue_cmd(":CALC:MODE FFT"); } diff --git a/mainwindow.cpp b/mainwindow.cpp index 0c1036a..8dc85d6 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -25,2185 +25,1834 @@ *************************************************************************** */ - #include "mainwindow.h" +#include "interface.cpp" #include "mainwindow_constr.cpp" -#include "timer_handlers.cpp" #include "save_data.cpp" -#include "interface.cpp" #include "serial_decoder.cpp" +#include "timer_handlers.cpp" - - -void UI_Mainwindow::open_settings_dialog() -{ - UI_settings_window settings(this); +void UI_Mainwindow::open_settings_dialog() { + UI_settings_window settings(this); } +void UI_Mainwindow::open_connection() { + int i, j, n, len; -void UI_Mainwindow::open_connection() -{ - int i, j, n, len; + char str[4096] = {""}, + dev_str[256] = {""}, + resp_str[2048] = {""}, + *ptr; - char str[4096] = {""}, - dev_str[256] = {""}, - resp_str[2048] = {""}, - *ptr; + QSettings settings; - QSettings settings; + QMessageBox msgBox; - QMessageBox msgBox; + lan_connect_thread lan_cn_thrd; - lan_connect_thread lan_cn_thrd; + if (device != NULL) { + return; + } - if(device != NULL) - { - return; - } + if (devparms.connected) { + return; + } - if(devparms.connected) - { - return; - } + strlcpy(str, settings.value("connection/type", "USB").toString().toLatin1().data(), 4096); - strlcpy(str, settings.value("connection/type", "USB").toString().toLatin1().data(), 4096); + if (!strcmp(str, "LAN")) { + devparms.connectiontype = 1; + } else { + devparms.connectiontype = 0; + } - if(!strcmp(str, "LAN")) - { - devparms.connectiontype = 1; - } - else - { - devparms.connectiontype = 0; - } + if (devparms.connectiontype == 0) // USB + { + strlcpy(dev_str, settings.value("connection/device", "/dev/usbtmc0").toString().toLatin1().data(), 256); - if(devparms.connectiontype == 0) // USB - { - strlcpy(dev_str, settings.value("connection/device", "/dev/usbtmc0").toString().toLatin1().data(), 256); + if (!strcmp(dev_str, "")) { + strlcpy(dev_str, "/dev/usbtmc0", 256); - if(!strcmp(dev_str, "")) - { - strlcpy(dev_str, "/dev/usbtmc0", 256); + settings.setValue("connection/device", QString(dev_str)); + } - settings.setValue("connection/device", QString(dev_str)); + device = tmc_open_usb(dev_str); + if (device == NULL) { + snprintf(str, 4096, "Can not open device %s", dev_str); + goto OC_OUT_ERROR; + } } - device = tmc_open_usb(dev_str); - if(device == NULL) + if (devparms.connectiontype == 1) // LAN { - snprintf(str, 4096, "Can not open device %s", dev_str); - goto OC_OUT_ERROR; - } - } + strlcpy(devparms.hostname, settings.value("connection/hostname", "").toString().toLatin1().data(), 128); - if(devparms.connectiontype == 1) // LAN - { - strlcpy(devparms.hostname, settings.value("connection/hostname", "").toString().toLatin1().data(), 128); - - if(strlen(devparms.hostname)) - { - strlcpy(dev_str, devparms.hostname, 256); - } - else - { - strlcpy(dev_str, settings.value("connection/ip", "192.168.1.100").toString().toLatin1().data(), 256); + if (strlen(devparms.hostname)) { + strlcpy(dev_str, devparms.hostname, 256); + } else { + strlcpy(dev_str, settings.value("connection/ip", "192.168.1.100").toString().toLatin1().data(), 256); - if(!strcmp(dev_str, "")) - { - snprintf(str, 4096, "No IP address or hostname set"); - goto OC_OUT_ERROR; - } + if (!strcmp(dev_str, "")) { + snprintf(str, 4096, "No IP address or hostname set"); + goto OC_OUT_ERROR; + } - len = strlen(dev_str); + len = strlen(dev_str); - if(len < 7) - { - snprintf(str, 4096, "No IP address set"); - goto OC_OUT_ERROR; - } + if (len < 7) { + snprintf(str, 4096, "No IP address set"); + goto OC_OUT_ERROR; + } - int cf = 0; + int cf = 0; - for(i=0; isetText("Trying to connect..."); + statusLabel->setText("Trying to connect..."); - snprintf(str, 4096, "Trying to connect to %s", dev_str); + snprintf(str, 4096, "Trying to connect to %s", dev_str); - msgBox.setIcon(QMessageBox::NoIcon); - msgBox.setText(str); - msgBox.addButton("Abort", QMessageBox::RejectRole); + msgBox.setIcon(QMessageBox::NoIcon); + msgBox.setText(str); + msgBox.addButton("Abort", QMessageBox::RejectRole); + + lan_cn_thrd.set_device_address(dev_str); + connect(&lan_cn_thrd, SIGNAL(finished()), &msgBox, SLOT(accept())); + lan_cn_thrd.start(); + + if (msgBox.exec() != QDialog::Accepted) { + statusLabel->setText("Connection aborted"); + lan_cn_thrd.terminate(); + lan_cn_thrd.wait(20000); + snprintf(str, 4096, "Connection aborted"); + disconnect(&lan_cn_thrd, 0, 0, 0); + goto OC_OUT_ERROR; + } + + disconnect(&lan_cn_thrd, 0, 0, 0); - lan_cn_thrd.set_device_address(dev_str); - connect(&lan_cn_thrd, SIGNAL(finished()), &msgBox, SLOT(accept())); - lan_cn_thrd.start(); + device = lan_cn_thrd.get_device(); + if (device == NULL) { + statusLabel->setText("Connection failed"); + snprintf(str, 4096, "Can not open connection to %s", dev_str); + goto OC_OUT_ERROR; + } + } - if(msgBox.exec() != QDialog::Accepted) + if (tmc_write("*IDN?") != 5) + // if(tmc_write("*IDN?;:SYST:ERR?") != 16) // This is a fix for the broken *IDN? command in older fw version { - statusLabel->setText("Connection aborted"); - lan_cn_thrd.terminate(); - lan_cn_thrd.wait(20000); - snprintf(str, 4096, "Connection aborted"); - disconnect(&lan_cn_thrd, 0, 0, 0); - goto OC_OUT_ERROR; + snprintf(str, 4096, "Can not write to device %s", dev_str); + goto OC_OUT_ERROR; } - disconnect(&lan_cn_thrd, 0, 0, 0); + n = tmc_read(); - device = lan_cn_thrd.get_device(); - if(device == NULL) - { - statusLabel->setText("Connection failed"); - snprintf(str, 4096, "Can not open connection to %s", dev_str); - goto OC_OUT_ERROR; - } - } - - if(tmc_write("*IDN?") != 5) -// if(tmc_write("*IDN?;:SYST:ERR?") != 16) // This is a fix for the broken *IDN? command in older fw version - { - snprintf(str, 4096, "Can not write to device %s", dev_str); - goto OC_OUT_ERROR; - } - - n = tmc_read(); - - if(n < 0) - { - snprintf(str, 4096, "Can not read from device %s", dev_str); - goto OC_OUT_ERROR; - } - - devparms.channel_cnt = 0; - - devparms.bandwidth = 0; - - devparms.modelname[0] = 0; - - strlcpy(resp_str, device->buf, 1024); - - ptr = strtok(resp_str, ","); - if(ptr == NULL) - { - snprintf(str, 1024, "Received an unknown identification string from device:\n\n%s\n ", device->buf); - goto OC_OUT_ERROR; - } - - if(strcmp(ptr, "RIGOL TECHNOLOGIES")) - { - snprintf(str, 1024, "Received an unknown identification string from device:\n\n%s\n ", device->buf); - goto OC_OUT_ERROR; - } - - ptr = strtok(NULL, ","); - if(ptr == NULL) - { - snprintf(str, 1024, "Received an unknown identification string from device:\n\n%s\n ", device->buf); - goto OC_OUT_ERROR; - } - - get_device_model(ptr); - - if((!devparms.channel_cnt) || (!devparms.bandwidth)) - { - snprintf(str, 1024, "Received an unknown identification string from device:\n\n%s\n ", device->buf); - goto OC_OUT_ERROR; - } - - ptr = strtok(NULL, ","); - if(ptr == NULL) - { - snprintf(str, 1024, "Received an unknown identification string from device:\n\n%s\n ", device->buf); - goto OC_OUT_ERROR; - } - - strlcpy(devparms.serialnr, ptr, 128); - - ptr = strtok(NULL, ","); - if(ptr == NULL) - { - snprintf(str, 1024, "Received an unknown identification string from device:\n\n%s\n ", device->buf); - goto OC_OUT_ERROR; - } - - strlcpy(devparms.softwvers, ptr, 128); - - for(i=0; ; i++) - { - if(devparms.softwvers[i] == 0) break; - - if(devparms.softwvers[i] == ';') - { - devparms.softwvers[i] = 0; - - break; - } - } - - if((devparms.modelserie != 6) && - (devparms.modelserie != 1)) - { - msgBox.setIcon(QMessageBox::Warning); - msgBox.setText("Unsupported device detected."); - msgBox.setInformativeText("This software has not been tested with your device.\n" - "It has been tested with the DS6000 and DS1000Z series only.\n" - "If you continue, it's likely that the program will not work correctly at some points.\n" - "\nDo you want to continue?\n"); - msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No); - msgBox.setDefaultButton(QMessageBox::Yes); - int ret = msgBox.exec(); - - if(ret == QMessageBox::No) - { - statusLabel->setText("Disconnected"); - - devparms.connected = 0; - - close_connection(); - - return; - } - } - - if(get_device_settings()) - { - strlcpy(str, "Can not read device settings", 4096); - - goto OC_OUT_ERROR; - } - - if(devparms.timebasedelayenable) - { - devparms.current_screen_sf = 100.0 / devparms.timebasedelayscale; - } - else - { - devparms.current_screen_sf = 100.0 / devparms.timebasescale; - } - - if((devparms.modelserie == 1) || (devparms.modelserie == 2)) - { - trig50pctButton->setEnabled(false); - } - - if(devparms.channel_cnt < 4) - { - ch4Button->setEnabled(false); - - ch4Button->setVisible(false); - } - - if(devparms.channel_cnt < 3) - { - ch3Button->setEnabled(false); + if (n < 0) { + snprintf(str, 4096, "Can not read from device %s", dev_str); + goto OC_OUT_ERROR; + } - ch3Button->setVisible(false); - } + devparms.channel_cnt = 0; - if(devparms.channel_cnt < 2) - { - ch2Button->setEnabled(false); + devparms.bandwidth = 0; - ch2Button->setVisible(false); - } + devparms.modelname[0] = 0; - devparms.cmd_cue_idx_in = 0; - devparms.cmd_cue_idx_out = 0; + strlcpy(resp_str, device->buf, 1024); - devparms.func_has_record = 0; + ptr = strtok(resp_str, ","); + if (ptr == NULL) { + snprintf(str, 1024, "Received an unknown identification string from device:\n\n%s\n ", device->buf); + goto OC_OUT_ERROR; + } - devparms.fftbufsz = devparms.hordivisions * 50; + if (strcmp(ptr, "RIGOL TECHNOLOGIES")) { + snprintf(str, 1024, "Received an unknown identification string from device:\n\n%s\n ", device->buf); + goto OC_OUT_ERROR; + } - if(devparms.k_cfg != NULL) - { - free(devparms.k_cfg); - } - devparms.k_cfg = kiss_fftr_alloc(devparms.fftbufsz * 2, 0, NULL, NULL); + ptr = strtok(NULL, ","); + if (ptr == NULL) { + snprintf(str, 1024, "Received an unknown identification string from device:\n\n%s\n ", device->buf); + goto OC_OUT_ERROR; + } - connect(adjDial, SIGNAL(valueChanged(int)), this, SLOT(adjDialChanged(int))); - connect(trigAdjustDial, SIGNAL(valueChanged(int)), this, SLOT(trigAdjustDialChanged(int))); - connect(horScaleDial, SIGNAL(valueChanged(int)), this, SLOT(horScaleDialChanged(int))); - connect(horPosDial, SIGNAL(valueChanged(int)), this, SLOT(horPosDialChanged(int))); - connect(vertOffsetDial, SIGNAL(valueChanged(int)), this, SLOT(vertOffsetDialChanged(int))); - connect(vertScaleDial, SIGNAL(valueChanged(int)), this, SLOT(vertScaleDialChanged(int))); - connect(navDial, SIGNAL(valueChanged(int)), this, SLOT(navDialChanged(int))); + get_device_model(ptr); - connect(ch1Button, SIGNAL(clicked()), this, SLOT(ch1ButtonClicked())); - connect(ch2Button, SIGNAL(clicked()), this, SLOT(ch2ButtonClicked())); - connect(ch3Button, SIGNAL(clicked()), this, SLOT(ch3ButtonClicked())); - connect(ch4Button, SIGNAL(clicked()), this, SLOT(ch4ButtonClicked())); - connect(chanMenuButton, SIGNAL(clicked()), this, SLOT(chan_menu())); - connect(mathMenuButton, SIGNAL(clicked()), this, SLOT(math_menu())); - connect(waveForm, SIGNAL(chan1Clicked()), this, SLOT(ch1ButtonClicked())); - connect(waveForm, SIGNAL(chan2Clicked()), this, SLOT(ch2ButtonClicked())); - connect(waveForm, SIGNAL(chan3Clicked()), this, SLOT(ch3ButtonClicked())); - connect(waveForm, SIGNAL(chan4Clicked()), this, SLOT(ch4ButtonClicked())); - connect(clearButton, SIGNAL(clicked()), this, SLOT(clearButtonClicked())); - connect(autoButton, SIGNAL(clicked()), this, SLOT(autoButtonClicked())); - connect(runButton, SIGNAL(clicked()), this, SLOT(runButtonClicked())); - connect(singleButton, SIGNAL(clicked()), this, SLOT(singleButtonClicked())); - connect(horMenuButton, SIGNAL(clicked()), this, SLOT(horMenuButtonClicked())); - connect(trigModeButton, SIGNAL(clicked()), this, SLOT(trigModeButtonClicked())); - connect(trigMenuButton, SIGNAL(clicked()), this, SLOT(trigMenuButtonClicked())); - connect(trigForceButton, SIGNAL(clicked()), this, SLOT(trigForceButtonClicked())); - connect(trig50pctButton, SIGNAL(clicked()), this, SLOT(trig50pctButtonClicked())); - connect(acqButton, SIGNAL(clicked()), this, SLOT(acqButtonClicked())); - connect(cursButton, SIGNAL(clicked()), this, SLOT(cursButtonClicked())); - connect(saveButton, SIGNAL(clicked()), this, SLOT(saveButtonClicked())); - connect(dispButton, SIGNAL(clicked()), this, SLOT(dispButtonClicked())); - connect(utilButton, SIGNAL(clicked()), this, SLOT(utilButtonClicked())); - connect(helpButton, SIGNAL(clicked()), this, SLOT(helpButtonClicked())); - connect(measureButton, SIGNAL(clicked()), this, SLOT(measureButtonClicked())); + if ((!devparms.channel_cnt) || (!devparms.bandwidth)) { + snprintf(str, 1024, "Received an unknown identification string from device:\n\n%s\n ", device->buf); + goto OC_OUT_ERROR; + } - connect(select_chan1_act, SIGNAL(triggered()), this, SLOT(ch1ButtonClicked())); - connect(select_chan2_act, SIGNAL(triggered()), this, SLOT(ch2ButtonClicked())); - connect(select_chan3_act, SIGNAL(triggered()), this, SLOT(ch3ButtonClicked())); - connect(select_chan4_act, SIGNAL(triggered()), this, SLOT(ch4ButtonClicked())); - connect(toggle_fft_act, SIGNAL(triggered()), this, SLOT(toggle_fft())); - - connect(horPosDial, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(horPosDialClicked(QPoint))); - connect(vertOffsetDial, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(vertOffsetDialClicked(QPoint))); - connect(horScaleDial, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(horScaleDialClicked(QPoint))); - connect(vertScaleDial, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(vertScaleDialClicked(QPoint))); - connect(trigAdjustDial, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(trigAdjustDialClicked(QPoint))); - connect(adjDial, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(adjustDialClicked(QPoint))); - - connect(playpauseButton, SIGNAL(clicked()), this, SLOT(playpauseButtonClicked())); - connect(stopButton, SIGNAL(clicked()), this, SLOT(stopButtonClicked())); - connect(recordButton, SIGNAL(clicked()), this, SLOT(recordButtonClicked())); - - snprintf(str, 4096, PROGRAM_NAME " " PROGRAM_VERSION " %s %s %s", - devparms.serialnr, devparms.softwvers, dev_str); -// sprintf(str, PROGRAM_NAME " " PROGRAM_VERSION " %s %s", -// devparms.softwvers, dev_str); - - setWindowTitle(str); - - statusLabel->setText("Connected"); - - scrn_thread->set_device(device); - - devparms.connected = 1; - -// test_timer->start(2000); - - DPRwidget->setEnabled(true); - - devparms.screenupdates_on = 1; - - scrn_thread->h_busy = 0; - - scrn_timer->start(devparms.screentimerival); - - return; + ptr = strtok(NULL, ","); + if (ptr == NULL) { + snprintf(str, 1024, "Received an unknown identification string from device:\n\n%s\n ", device->buf); + goto OC_OUT_ERROR; + } -OC_OUT_ERROR: + strlcpy(devparms.serialnr, ptr, 128); - statusLabel->setText("Disconnected"); + ptr = strtok(NULL, ","); + if (ptr == NULL) { + snprintf(str, 1024, "Received an unknown identification string from device:\n\n%s\n ", device->buf); + goto OC_OUT_ERROR; + } - devparms.connected = 0; + strlcpy(devparms.softwvers, ptr, 128); - QMessageBox mesgbox; - mesgbox.setIcon(QMessageBox::Critical); - mesgbox.setText(str); - mesgbox.exec(); + for (i = 0;; i++) { + if (devparms.softwvers[i] == 0) + break; - close_connection(); -} + if (devparms.softwvers[i] == ';') { + devparms.softwvers[i] = 0; + break; + } + } -void UI_Mainwindow::close_connection() -{ - DPRwidget->setEnabled(false); + if ((devparms.modelserie != 6) && + (devparms.modelserie != 1)) { + if (devparms.modelserie == 7) { + msgBox.setIcon(QMessageBox::Warning); + msgBox.setText("DHO800/900 device detected."); + msgBox.setInformativeText("DHO800 and DHO900 series support is at experimental stage.\n\n" + "If you continue, it's likely that the program will not work correctly at some points.\n" + "\nDo you want to continue?\n"); + } else { + msgBox.setIcon(QMessageBox::Warning); + msgBox.setText("Unsupported device detected."); + msgBox.setInformativeText("This software has not been tested with your device.\n" + "It has been tested with the DS6000 and DS1000Z series only.\n" + "If you continue, it's likely that the program will not work correctly at some points.\n" + "\nDo you want to continue?\n"); + } - test_timer->stop(); + msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No); + msgBox.setDefaultButton(QMessageBox::Yes); + int ret = msgBox.exec(); - scrn_timer->stop(); + if (ret != QMessageBox::Yes) { + statusLabel->setText("Disconnected"); - adjdial_timer->stop(); + devparms.connected = 0; - devparms.connected = 0; + close_connection(); - if(scrn_thread->wait(5000) == false) - { - scrn_thread->terminate(); + return; + } + } - scrn_thread->wait(5000); + if (get_device_settings()) { + strlcpy(str, "Can not read device settings", 4096); - pthread_mutex_trylock(&devparms.mutexx); - pthread_mutex_unlock(&devparms.mutexx); + goto OC_OUT_ERROR; + } - scrn_thread->h_busy = 0; - } - - devparms.screenupdates_on = 0; - - setWindowTitle(PROGRAM_NAME " " PROGRAM_VERSION); - - strlcpy(devparms.modelname, "-----", 128); - - adjDialFunc = ADJ_DIAL_FUNC_NONE; - navDialFunc = NAV_DIAL_FUNC_NONE; - - disconnect(adjDial, SIGNAL(valueChanged(int)), this, SLOT(adjDialChanged(int))); - disconnect(trigAdjustDial, SIGNAL(valueChanged(int)), this, SLOT(trigAdjustDialChanged(int))); - disconnect(horScaleDial, SIGNAL(valueChanged(int)), this, SLOT(horScaleDialChanged(int))); - disconnect(horPosDial, SIGNAL(valueChanged(int)), this, SLOT(horPosDialChanged(int))); - disconnect(vertOffsetDial, SIGNAL(valueChanged(int)), this, SLOT(vertOffsetDialChanged(int))); - disconnect(vertScaleDial, SIGNAL(valueChanged(int)), this, SLOT(vertScaleDialChanged(int))); - disconnect(navDial, SIGNAL(valueChanged(int)), this, SLOT(navDialChanged(int))); - - disconnect(ch1Button, SIGNAL(clicked()), this, SLOT(ch1ButtonClicked())); - disconnect(ch2Button, SIGNAL(clicked()), this, SLOT(ch2ButtonClicked())); - disconnect(ch3Button, SIGNAL(clicked()), this, SLOT(ch3ButtonClicked())); - disconnect(ch4Button, SIGNAL(clicked()), this, SLOT(ch4ButtonClicked())); - disconnect(chanMenuButton, SIGNAL(clicked()), this, SLOT(chan_menu())); - disconnect(mathMenuButton, SIGNAL(clicked()), this, SLOT(math_menu())); - disconnect(waveForm, SIGNAL(chan1Clicked()), this, SLOT(ch1ButtonClicked())); - disconnect(waveForm, SIGNAL(chan2Clicked()), this, SLOT(ch2ButtonClicked())); - disconnect(waveForm, SIGNAL(chan3Clicked()), this, SLOT(ch3ButtonClicked())); - disconnect(waveForm, SIGNAL(chan4Clicked()), this, SLOT(ch4ButtonClicked())); - disconnect(clearButton, SIGNAL(clicked()), this, SLOT(clearButtonClicked())); - disconnect(autoButton, SIGNAL(clicked()), this, SLOT(autoButtonClicked())); - disconnect(runButton, SIGNAL(clicked()), this, SLOT(runButtonClicked())); - disconnect(singleButton, SIGNAL(clicked()), this, SLOT(singleButtonClicked())); - disconnect(horMenuButton, SIGNAL(clicked()), this, SLOT(horMenuButtonClicked())); - disconnect(trigModeButton, SIGNAL(clicked()), this, SLOT(trigModeButtonClicked())); - disconnect(trigMenuButton, SIGNAL(clicked()), this, SLOT(trigMenuButtonClicked())); - disconnect(trigForceButton, SIGNAL(clicked()), this, SLOT(trigForceButtonClicked())); - disconnect(trig50pctButton, SIGNAL(clicked()), this, SLOT(trig50pctButtonClicked())); - disconnect(acqButton, SIGNAL(clicked()), this, SLOT(acqButtonClicked())); - disconnect(cursButton, SIGNAL(clicked()), this, SLOT(cursButtonClicked())); - disconnect(saveButton, SIGNAL(clicked()), this, SLOT(saveButtonClicked())); - disconnect(dispButton, SIGNAL(clicked()), this, SLOT(dispButtonClicked())); - disconnect(utilButton, SIGNAL(clicked()), this, SLOT(utilButtonClicked())); - disconnect(helpButton, SIGNAL(clicked()), this, SLOT(helpButtonClicked())); - disconnect(measureButton, SIGNAL(clicked()), this, SLOT(measureButtonClicked())); - - disconnect(select_chan1_act, SIGNAL(triggered()), this, SLOT(ch1ButtonClicked())); - disconnect(select_chan2_act, SIGNAL(triggered()), this, SLOT(ch2ButtonClicked())); - disconnect(select_chan3_act, SIGNAL(triggered()), this, SLOT(ch3ButtonClicked())); - disconnect(select_chan4_act, SIGNAL(triggered()), this, SLOT(ch4ButtonClicked())); - disconnect(toggle_fft_act, SIGNAL(triggered()), this, SLOT(toggle_fft())); - - disconnect(horPosDial, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(horPosDialClicked(QPoint))); - disconnect(vertOffsetDial, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(vertOffsetDialClicked(QPoint))); - disconnect(horScaleDial, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(horScaleDialClicked(QPoint))); - disconnect(vertScaleDial, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(vertScaleDialClicked(QPoint))); - disconnect(trigAdjustDial, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(trigAdjustDialClicked(QPoint))); - disconnect(adjDial, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(adjustDialClicked(QPoint))); - - disconnect(playpauseButton, SIGNAL(clicked()), this, SLOT(playpauseButtonClicked())); - disconnect(stopButton, SIGNAL(clicked()), this, SLOT(stopButtonClicked())); - disconnect(recordButton, SIGNAL(clicked()), this, SLOT(recordButtonClicked())); - - scrn_thread->set_device(NULL); - - devparms.math_fft = 0; - - devparms.math_fft_split = 0; - - waveForm->clear(); - - tmc_close(); - - device = NULL; - - if(devparms.k_cfg != NULL) - { - free(devparms.k_cfg); - - devparms.k_cfg = NULL; - } - - statusLabel->setText("Disconnected"); - - printf("Disconnected from device\n"); -} + if (devparms.timebasedelayenable) { + devparms.current_screen_sf = 100.0 / devparms.timebasedelayscale; + } else { + devparms.current_screen_sf = 100.0 / devparms.timebasescale; + } + if ((devparms.modelserie == 1) || (devparms.modelserie == 2)) { + trig50pctButton->setEnabled(false); + } -void UI_Mainwindow::closeEvent(QCloseEvent *cl_event) -{ - devparms.connected = 0; + if (devparms.channel_cnt < 4) { + ch4Button->setEnabled(false); - test_timer->stop(); + ch4Button->setVisible(false); + } - scrn_timer->stop(); + if (devparms.channel_cnt < 3) { + ch3Button->setEnabled(false); - adjdial_timer->stop(); + ch3Button->setVisible(false); + } - scrn_thread->wait(5000); + if (devparms.channel_cnt < 2) { + ch2Button->setEnabled(false); - scrn_thread->terminate(); + ch2Button->setVisible(false); + } - scrn_thread->wait(5000); + devparms.cmd_cue_idx_in = 0; + devparms.cmd_cue_idx_out = 0; - devparms.screenupdates_on = 0; + devparms.func_has_record = 0; - scrn_thread->set_device(NULL); + devparms.fftbufsz = devparms.hordivisions * 50; - tmc_close(); + if (devparms.k_cfg != NULL) { + free(devparms.k_cfg); + } + devparms.k_cfg = kiss_fftr_alloc(devparms.fftbufsz * 2, 0, NULL, NULL); - device = NULL; + connect(adjDial, SIGNAL(valueChanged(int)), this, SLOT(adjDialChanged(int))); + connect(trigAdjustDial, SIGNAL(valueChanged(int)), this, SLOT(trigAdjustDialChanged(int))); + connect(horScaleDial, SIGNAL(valueChanged(int)), this, SLOT(horScaleDialChanged(int))); + connect(horPosDial, SIGNAL(valueChanged(int)), this, SLOT(horPosDialChanged(int))); + connect(vertOffsetDial, SIGNAL(valueChanged(int)), this, SLOT(vertOffsetDialChanged(int))); + connect(vertScaleDial, SIGNAL(valueChanged(int)), this, SLOT(vertScaleDialChanged(int))); + connect(navDial, SIGNAL(valueChanged(int)), this, SLOT(navDialChanged(int))); - cl_event->accept(); -} + connect(ch1Button, SIGNAL(clicked()), this, SLOT(ch1ButtonClicked())); + connect(ch2Button, SIGNAL(clicked()), this, SLOT(ch2ButtonClicked())); + connect(ch3Button, SIGNAL(clicked()), this, SLOT(ch3ButtonClicked())); + connect(ch4Button, SIGNAL(clicked()), this, SLOT(ch4ButtonClicked())); + connect(chanMenuButton, SIGNAL(clicked()), this, SLOT(chan_menu())); + connect(mathMenuButton, SIGNAL(clicked()), this, SLOT(math_menu())); + connect(waveForm, SIGNAL(chan1Clicked()), this, SLOT(ch1ButtonClicked())); + connect(waveForm, SIGNAL(chan2Clicked()), this, SLOT(ch2ButtonClicked())); + connect(waveForm, SIGNAL(chan3Clicked()), this, SLOT(ch3ButtonClicked())); + connect(waveForm, SIGNAL(chan4Clicked()), this, SLOT(ch4ButtonClicked())); + connect(clearButton, SIGNAL(clicked()), this, SLOT(clearButtonClicked())); + connect(autoButton, SIGNAL(clicked()), this, SLOT(autoButtonClicked())); + connect(runButton, SIGNAL(clicked()), this, SLOT(runButtonClicked())); + connect(singleButton, SIGNAL(clicked()), this, SLOT(singleButtonClicked())); + connect(horMenuButton, SIGNAL(clicked()), this, SLOT(horMenuButtonClicked())); + connect(trigModeButton, SIGNAL(clicked()), this, SLOT(trigModeButtonClicked())); + connect(trigMenuButton, SIGNAL(clicked()), this, SLOT(trigMenuButtonClicked())); + connect(trigForceButton, SIGNAL(clicked()), this, SLOT(trigForceButtonClicked())); + connect(trig50pctButton, SIGNAL(clicked()), this, SLOT(trig50pctButtonClicked())); + connect(acqButton, SIGNAL(clicked()), this, SLOT(acqButtonClicked())); + connect(cursButton, SIGNAL(clicked()), this, SLOT(cursButtonClicked())); + connect(saveButton, SIGNAL(clicked()), this, SLOT(saveButtonClicked())); + connect(dispButton, SIGNAL(clicked()), this, SLOT(dispButtonClicked())); + connect(utilButton, SIGNAL(clicked()), this, SLOT(utilButtonClicked())); + connect(helpButton, SIGNAL(clicked()), this, SLOT(helpButtonClicked())); + connect(measureButton, SIGNAL(clicked()), this, SLOT(measureButtonClicked())); + connect(select_chan1_act, SIGNAL(triggered()), this, SLOT(ch1ButtonClicked())); + connect(select_chan2_act, SIGNAL(triggered()), this, SLOT(ch2ButtonClicked())); + connect(select_chan3_act, SIGNAL(triggered()), this, SLOT(ch3ButtonClicked())); + connect(select_chan4_act, SIGNAL(triggered()), this, SLOT(ch4ButtonClicked())); + connect(toggle_fft_act, SIGNAL(triggered()), this, SLOT(toggle_fft())); -int UI_Mainwindow::get_device_settings(int delay) -{ - int chn; + connect(horPosDial, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(horPosDialClicked(QPoint))); + connect(vertOffsetDial, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(vertOffsetDialClicked(QPoint))); + connect(horScaleDial, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(horScaleDialClicked(QPoint))); + connect(vertScaleDial, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(vertScaleDialClicked(QPoint))); + connect(trigAdjustDial, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(trigAdjustDialClicked(QPoint))); + connect(adjDial, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(adjustDialClicked(QPoint))); - char str[4096] = {""}; + connect(playpauseButton, SIGNAL(clicked()), this, SLOT(playpauseButtonClicked())); + connect(stopButton, SIGNAL(clicked()), this, SLOT(stopButtonClicked())); + connect(recordButton, SIGNAL(clicked()), this, SLOT(recordButtonClicked())); - statusLabel->setText("Reading instrument settings..."); + snprintf(str, 4096, PROGRAM_NAME " " PROGRAM_VERSION " %s %s %s", + devparms.serialnr, devparms.softwvers, dev_str); + // sprintf(str, PROGRAM_NAME " " PROGRAM_VERSION " %s %s", + // devparms.softwvers, dev_str); - read_settings_thread rd_set_thrd; - rd_set_thrd.set_device(device); - rd_set_thrd.set_delay(delay); - rd_set_thrd.set_devparm_ptr(&devparms); - rd_set_thrd.start(); + setWindowTitle(str); - QMessageBox msgBox; - msgBox.setIcon(QMessageBox::NoIcon); - msgBox.setText("Reading instrument settings..."); - msgBox.addButton("Abort", QMessageBox::RejectRole); + statusLabel->setText("Connected"); - connect(&rd_set_thrd, SIGNAL(finished()), &msgBox, SLOT(accept())); + scrn_thread->set_device(device); - if(msgBox.exec() != QDialog::Accepted) - { - statusLabel->setText("Reading settings aborted"); - rd_set_thrd.terminate(); - rd_set_thrd.wait(20000); - snprintf(str, 4096, "Reading settings aborted"); - disconnect(&rd_set_thrd, 0, 0, 0); - return -1; - } + devparms.connected = 1; - disconnect(&rd_set_thrd, 0, 0, 0); + // test_timer->start(2000); - if(rd_set_thrd.get_error_num() != 0) - { - statusLabel->setText("Error while reading settings"); - rd_set_thrd.get_error_str(str, 4096); - msgBox.setIcon(QMessageBox::Critical); - msgBox.setText(str); - msgBox.exec(); - strlcpy(str, "Can not read settings from device", 4096); - return -1; - } + DPRwidget->setEnabled(true); - for(chn=0; chnsetStyleSheet("background: #FFFF33;"); - break; - case 1: ch2Button->setStyleSheet("background: #33FFFF;"); - break; - case 2: ch3Button->setStyleSheet("background: #FF33FF;"); - break; - case 3: ch4Button->setStyleSheet("background: #0080FF;"); - break; - } - } - else - { - switch(chn) - { - case 0: ch1Button->setStyleSheet(def_stylesh); - break; - case 1: ch2Button->setStyleSheet(def_stylesh); - break; - case 2: ch3Button->setStyleSheet(def_stylesh); - break; - case 3: ch4Button->setStyleSheet(def_stylesh); - break; - } - } - } + devparms.screenupdates_on = 1; - if(devparms.triggersweep == 0) - { - trigModeAutoLed->setValue(true); - trigModeNormLed->setValue(false); - trigModeSingLed->setValue(false); - } - else if(devparms.triggersweep == 1) - { - trigModeAutoLed->setValue(false); - trigModeNormLed->setValue(true); - trigModeSingLed->setValue(false); - } - else if(devparms.triggersweep == 2) - { - trigModeAutoLed->setValue(false); - trigModeNormLed->setValue(false); - trigModeSingLed->setValue(true); - } + scrn_thread->h_busy = 0; - updateLabels(); + scrn_timer->start(devparms.screentimerival); - return 0; -} + return; + +OC_OUT_ERROR: + statusLabel->setText("Disconnected"); -int UI_Mainwindow::parse_preamble(char *str, int sz, struct waveform_preamble *wfp, int chn) -{ - char *ptr; + devparms.connected = 0; - if(sz < 19) - { - return -1; - } + QMessageBox mesgbox; + mesgbox.setIcon(QMessageBox::Critical); + mesgbox.setText(str); + mesgbox.exec(); - ptr = strtok(str, ","); - if(ptr == NULL) - { - return -1; - } + close_connection(); +} - wfp->format = atoi(ptr); +void UI_Mainwindow::close_connection() { + DPRwidget->setEnabled(false); - ptr = strtok(NULL, ","); - if(ptr == NULL) - { - return -1; - } + test_timer->stop(); - wfp->type = atoi(ptr); + scrn_timer->stop(); - ptr = strtok(NULL, ","); - if(ptr == NULL) - { - return -1; - } + adjdial_timer->stop(); - wfp->points = atoi(ptr); + devparms.connected = 0; - ptr = strtok(NULL, ","); - if(ptr == NULL) - { - return -1; - } + if (scrn_thread->wait(5000) == false) { + scrn_thread->terminate(); - wfp->count = atoi(ptr); + scrn_thread->wait(5000); - ptr = strtok(NULL, ","); - if(ptr == NULL) - { - return -1; - } + pthread_mutex_trylock(&devparms.mutexx); + pthread_mutex_unlock(&devparms.mutexx); - wfp->xincrement[chn] = atof(ptr); + scrn_thread->h_busy = 0; + } - ptr = strtok(NULL, ","); - if(ptr == NULL) - { - return -1; - } + devparms.screenupdates_on = 0; - wfp->xorigin[chn] = atof(ptr); + setWindowTitle(PROGRAM_NAME " " PROGRAM_VERSION); - ptr = strtok(NULL, ","); - if(ptr == NULL) - { - return -1; - } + strlcpy(devparms.modelname, "-----", 128); - wfp->xreference[chn] = atof(ptr); + adjDialFunc = ADJ_DIAL_FUNC_NONE; + navDialFunc = NAV_DIAL_FUNC_NONE; - ptr = strtok(NULL, ","); - if(ptr == NULL) - { - return -1; - } + disconnect(adjDial, SIGNAL(valueChanged(int)), this, SLOT(adjDialChanged(int))); + disconnect(trigAdjustDial, SIGNAL(valueChanged(int)), this, SLOT(trigAdjustDialChanged(int))); + disconnect(horScaleDial, SIGNAL(valueChanged(int)), this, SLOT(horScaleDialChanged(int))); + disconnect(horPosDial, SIGNAL(valueChanged(int)), this, SLOT(horPosDialChanged(int))); + disconnect(vertOffsetDial, SIGNAL(valueChanged(int)), this, SLOT(vertOffsetDialChanged(int))); + disconnect(vertScaleDial, SIGNAL(valueChanged(int)), this, SLOT(vertScaleDialChanged(int))); + disconnect(navDial, SIGNAL(valueChanged(int)), this, SLOT(navDialChanged(int))); - wfp->yincrement[chn] = atof(ptr); + disconnect(ch1Button, SIGNAL(clicked()), this, SLOT(ch1ButtonClicked())); + disconnect(ch2Button, SIGNAL(clicked()), this, SLOT(ch2ButtonClicked())); + disconnect(ch3Button, SIGNAL(clicked()), this, SLOT(ch3ButtonClicked())); + disconnect(ch4Button, SIGNAL(clicked()), this, SLOT(ch4ButtonClicked())); + disconnect(chanMenuButton, SIGNAL(clicked()), this, SLOT(chan_menu())); + disconnect(mathMenuButton, SIGNAL(clicked()), this, SLOT(math_menu())); + disconnect(waveForm, SIGNAL(chan1Clicked()), this, SLOT(ch1ButtonClicked())); + disconnect(waveForm, SIGNAL(chan2Clicked()), this, SLOT(ch2ButtonClicked())); + disconnect(waveForm, SIGNAL(chan3Clicked()), this, SLOT(ch3ButtonClicked())); + disconnect(waveForm, SIGNAL(chan4Clicked()), this, SLOT(ch4ButtonClicked())); + disconnect(clearButton, SIGNAL(clicked()), this, SLOT(clearButtonClicked())); + disconnect(autoButton, SIGNAL(clicked()), this, SLOT(autoButtonClicked())); + disconnect(runButton, SIGNAL(clicked()), this, SLOT(runButtonClicked())); + disconnect(singleButton, SIGNAL(clicked()), this, SLOT(singleButtonClicked())); + disconnect(horMenuButton, SIGNAL(clicked()), this, SLOT(horMenuButtonClicked())); + disconnect(trigModeButton, SIGNAL(clicked()), this, SLOT(trigModeButtonClicked())); + disconnect(trigMenuButton, SIGNAL(clicked()), this, SLOT(trigMenuButtonClicked())); + disconnect(trigForceButton, SIGNAL(clicked()), this, SLOT(trigForceButtonClicked())); + disconnect(trig50pctButton, SIGNAL(clicked()), this, SLOT(trig50pctButtonClicked())); + disconnect(acqButton, SIGNAL(clicked()), this, SLOT(acqButtonClicked())); + disconnect(cursButton, SIGNAL(clicked()), this, SLOT(cursButtonClicked())); + disconnect(saveButton, SIGNAL(clicked()), this, SLOT(saveButtonClicked())); + disconnect(dispButton, SIGNAL(clicked()), this, SLOT(dispButtonClicked())); + disconnect(utilButton, SIGNAL(clicked()), this, SLOT(utilButtonClicked())); + disconnect(helpButton, SIGNAL(clicked()), this, SLOT(helpButtonClicked())); + disconnect(measureButton, SIGNAL(clicked()), this, SLOT(measureButtonClicked())); - ptr = strtok(NULL, ","); - if(ptr == NULL) - { - return -1; - } + disconnect(select_chan1_act, SIGNAL(triggered()), this, SLOT(ch1ButtonClicked())); + disconnect(select_chan2_act, SIGNAL(triggered()), this, SLOT(ch2ButtonClicked())); + disconnect(select_chan3_act, SIGNAL(triggered()), this, SLOT(ch3ButtonClicked())); + disconnect(select_chan4_act, SIGNAL(triggered()), this, SLOT(ch4ButtonClicked())); + disconnect(toggle_fft_act, SIGNAL(triggered()), this, SLOT(toggle_fft())); - wfp->yorigin[chn] = atof(ptr); + disconnect(horPosDial, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(horPosDialClicked(QPoint))); + disconnect(vertOffsetDial, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(vertOffsetDialClicked(QPoint))); + disconnect(horScaleDial, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(horScaleDialClicked(QPoint))); + disconnect(vertScaleDial, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(vertScaleDialClicked(QPoint))); + disconnect(trigAdjustDial, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(trigAdjustDialClicked(QPoint))); + disconnect(adjDial, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(adjustDialClicked(QPoint))); - ptr = strtok(NULL, ","); - if(ptr == NULL) - { - return -1; - } + disconnect(playpauseButton, SIGNAL(clicked()), this, SLOT(playpauseButtonClicked())); + disconnect(stopButton, SIGNAL(clicked()), this, SLOT(stopButtonClicked())); + disconnect(recordButton, SIGNAL(clicked()), this, SLOT(recordButtonClicked())); - wfp->yreference[chn] = atoi(ptr); + scrn_thread->set_device(NULL); - ptr = strtok(NULL, ","); - if(ptr != NULL) - { - return -1; - } + devparms.math_fft = 0; - return 0; -} + devparms.math_fft_split = 0; + waveForm->clear(); -int UI_Mainwindow::get_metric_factor(double value) -{ - int suffix=0; + tmc_close(); - if(value < 0) - { - value *= -1; - } + device = NULL; - if(value >= 1e12 && value < 1e15) - { - suffix = 12; - } - else if(value >= 1e9 && value < 1e12) - { - suffix = 9; + if (devparms.k_cfg != NULL) { + free(devparms.k_cfg); + + devparms.k_cfg = NULL; } - else if(value >= 1e6 && value < 1e9) - { - suffix = 6; - } - else if(value >= 1e3 && value < 1e6) - { - suffix = 3; - } - else if(value >= 1e-3 && value < 1) - { - suffix = -3; - } - else if( value >= 1e-6 && value < 1e-3) - { - suffix = -6; - } - else if(value >= 1e-9 && value < 1e-6) - { - suffix = -9; - } - else if(value >= 1e-12 && value < 1e-9) - { - suffix = -12; - } - return suffix; + statusLabel->setText("Disconnected"); + + printf("Disconnected from device\n"); } +void UI_Mainwindow::closeEvent(QCloseEvent *cl_event) { + devparms.connected = 0; -double UI_Mainwindow::get_stepsize_divide_by_1000(double val) -{ - int exp=0; + test_timer->stop(); - if(val < 1e-9) - { - return 1e-9; - } + scrn_timer->stop(); - while(val < 1) - { - val *= 10; + adjdial_timer->stop(); - exp--; - } + scrn_thread->wait(5000); - while(val >= 10) - { - val /= 10; + scrn_thread->terminate(); - exp++; - } + scrn_thread->wait(5000); - val = pow(10, exp - 2); + devparms.screenupdates_on = 0; - if((val < 1e-13) && (val > -1e-13)) - { - return 0; - } + scrn_thread->set_device(NULL); - return val; -} + tmc_close(); + device = NULL; -void UI_Mainwindow::get_device_model(const char *str) -{ - devparms.channel_cnt = 0; + cl_event->accept(); +} - devparms.bandwidth = 0; +int UI_Mainwindow::get_device_settings(int delay) { + int chn; - devparms.hordivisions = 14; + char str[4096] = {""}; - devparms.vertdivisions = 8; + statusLabel->setText("Reading instrument settings..."); - if(!strcmp(str, "DS6104")) - { - devparms.channel_cnt = 4; + read_settings_thread rd_set_thrd; + rd_set_thrd.set_device(device); + rd_set_thrd.set_delay(delay); + rd_set_thrd.set_devparm_ptr(&devparms); + rd_set_thrd.start(); - devparms.bandwidth = 1000; + QMessageBox msgBox; + msgBox.setIcon(QMessageBox::NoIcon); + msgBox.setText("Reading instrument settings..."); + msgBox.addButton("Abort", QMessageBox::RejectRole); - devparms.modelserie = 6; - } + connect(&rd_set_thrd, SIGNAL(finished()), &msgBox, SLOT(accept())); - if(!strcmp(str, "DS6064")) - { - devparms.channel_cnt = 4; + if (msgBox.exec() != QDialog::Accepted) { + statusLabel->setText("Reading settings aborted"); + rd_set_thrd.terminate(); + rd_set_thrd.wait(20000); + snprintf(str, 4096, "Reading settings aborted"); + disconnect(&rd_set_thrd, 0, 0, 0); + return -1; + } - devparms.bandwidth = 600; + disconnect(&rd_set_thrd, 0, 0, 0); - devparms.modelserie = 6; - } + if (rd_set_thrd.get_error_num() != 0) { + statusLabel->setText("Error while reading settings"); + rd_set_thrd.get_error_str(str, 4096); + msgBox.setIcon(QMessageBox::Critical); + msgBox.setText(str); + msgBox.exec(); + strlcpy(str, "Can not read settings from device", 4096); + return -1; + } + + for (chn = 0; chn < devparms.channel_cnt; chn++) { + if (devparms.chandisplay[chn] == 1) { + switch (chn) { + case 0: + ch1Button->setStyleSheet("background: #FFFF33;"); + break; + case 1: + ch2Button->setStyleSheet("background: #33FFFF;"); + break; + case 2: + ch3Button->setStyleSheet("background: #FF33FF;"); + break; + case 3: + ch4Button->setStyleSheet("background: #0080FF;"); + break; + } + } else { + switch (chn) { + case 0: + ch1Button->setStyleSheet(def_stylesh); + break; + case 1: + ch2Button->setStyleSheet(def_stylesh); + break; + case 2: + ch3Button->setStyleSheet(def_stylesh); + break; + case 3: + ch4Button->setStyleSheet(def_stylesh); + break; + } + } + } - if(!strcmp(str, "DS6102")) - { - devparms.channel_cnt = 2; + if (devparms.triggersweep == 0) { + trigModeAutoLed->setValue(true); + trigModeNormLed->setValue(false); + trigModeSingLed->setValue(false); + } else if (devparms.triggersweep == 1) { + trigModeAutoLed->setValue(false); + trigModeNormLed->setValue(true); + trigModeSingLed->setValue(false); + } else if (devparms.triggersweep == 2) { + trigModeAutoLed->setValue(false); + trigModeNormLed->setValue(false); + trigModeSingLed->setValue(true); + } - devparms.bandwidth = 1000; + updateLabels(); - devparms.modelserie = 6; - } + return 0; +} - if(!strcmp(str, "DS6062")) - { - devparms.channel_cnt = 2; +int UI_Mainwindow::parse_preamble(char *str, int sz, struct waveform_preamble *wfp, int chn) { + char *ptr; - devparms.bandwidth = 600; + if (sz < 19) { + return -1; + } - devparms.modelserie = 6; - } + ptr = strtok(str, ","); + if (ptr == NULL) { + return -1; + } - if(!strcmp(str, "DS4012")) - { - devparms.channel_cnt = 2; + wfp->format = atoi(ptr); - devparms.bandwidth = 100; + ptr = strtok(NULL, ","); + if (ptr == NULL) { + return -1; + } - devparms.modelserie = 4; - } + wfp->type = atoi(ptr); - if(!strcmp(str, "DS4014")) - { - devparms.channel_cnt = 4; + ptr = strtok(NULL, ","); + if (ptr == NULL) { + return -1; + } - devparms.bandwidth = 100; + wfp->points = atoi(ptr); - devparms.modelserie = 4; - } + ptr = strtok(NULL, ","); + if (ptr == NULL) { + return -1; + } - if(!strcmp(str, "DS4022")) - { - devparms.channel_cnt = 2; + wfp->count = atoi(ptr); - devparms.bandwidth = 200; + ptr = strtok(NULL, ","); + if (ptr == NULL) { + return -1; + } - devparms.modelserie = 4; - } + wfp->xincrement[chn] = atof(ptr); - if(!strcmp(str, "DS4024")) - { - devparms.channel_cnt = 4; + ptr = strtok(NULL, ","); + if (ptr == NULL) { + return -1; + } - devparms.bandwidth = 200; + wfp->xorigin[chn] = atof(ptr); - devparms.modelserie = 4; - } + ptr = strtok(NULL, ","); + if (ptr == NULL) { + return -1; + } - if(!strcmp(str, "DS4032")) - { - devparms.channel_cnt = 2; + wfp->xreference[chn] = atof(ptr); - devparms.bandwidth = 350; + ptr = strtok(NULL, ","); + if (ptr == NULL) { + return -1; + } - devparms.modelserie = 4; - } + wfp->yincrement[chn] = atof(ptr); - if(!strcmp(str, "DS4034")) - { - devparms.channel_cnt = 4; + ptr = strtok(NULL, ","); + if (ptr == NULL) { + return -1; + } - devparms.bandwidth = 350; + wfp->yorigin[chn] = atof(ptr); - devparms.modelserie = 4; - } + ptr = strtok(NULL, ","); + if (ptr == NULL) { + return -1; + } - if(!strcmp(str, "DS4052")) - { - devparms.channel_cnt = 2; + wfp->yreference[chn] = atoi(ptr); - devparms.bandwidth = 500; + ptr = strtok(NULL, ","); + if (ptr != NULL) { + return -1; + } - devparms.modelserie = 4; - } + return 0; +} - if(!strcmp(str, "DS4054")) - { - devparms.channel_cnt = 4; +int UI_Mainwindow::get_metric_factor(double value) { + int suffix = 0; - devparms.bandwidth = 500; + if (value < 0) { + value *= -1; + } - devparms.modelserie = 4; - } + if (value >= 1e12 && value < 1e15) { + suffix = 12; + } else if (value >= 1e9 && value < 1e12) { + suffix = 9; + } else if (value >= 1e6 && value < 1e9) { + suffix = 6; + } else if (value >= 1e3 && value < 1e6) { + suffix = 3; + } else if (value >= 1e-3 && value < 1) { + suffix = -3; + } else if (value >= 1e-6 && value < 1e-3) { + suffix = -6; + } else if (value >= 1e-9 && value < 1e-6) { + suffix = -9; + } else if (value >= 1e-12 && value < 1e-9) { + suffix = -12; + } + + return suffix; +} - if(!strcmp(str, "MSO4012")) - { - devparms.channel_cnt = 2; +double UI_Mainwindow::get_stepsize_divide_by_1000(double val) { + int exp = 0; - devparms.bandwidth = 100; + if (val < 1e-9) { + return 1e-9; + } - devparms.modelserie = 4; - } + while (val < 1) { + val *= 10; - if(!strcmp(str, "MSO4024")) - { - devparms.channel_cnt = 4; + exp--; + } - devparms.bandwidth = 200; + while (val >= 10) { + val /= 10; - devparms.modelserie = 4; - } + exp++; + } - if(!strcmp(str, "DS2072A")) - { - devparms.channel_cnt = 2; + val = exp10(exp - 2); - devparms.bandwidth = 70; + if ((val < 1e-13) && (val > -1e-13)) { + return 0; + } - devparms.modelserie = 2; - } + return val; +} - if(!strcmp(str, "DS2072A-S")) - { - devparms.channel_cnt = 2; +void UI_Mainwindow::get_device_model(const char *str) { + devparms.channel_cnt = 0; - devparms.bandwidth = 70; + devparms.bandwidth = 0; - devparms.modelserie = 2; - } + devparms.hordivisions = 14; - if(!strcmp(str, "DS2102")) - { - devparms.channel_cnt = 2; + devparms.vertdivisions = 8; - devparms.bandwidth = 100; + if (!strcmp(str, "DS6104")) { + devparms.channel_cnt = 4; - devparms.modelserie = 2; - } + devparms.bandwidth = 1000; - if(!strcmp(str, "DS2102A")) - { - devparms.channel_cnt = 2; + devparms.modelserie = 6; + } - devparms.bandwidth = 100; + if (!strcmp(str, "DS6064")) { + devparms.channel_cnt = 4; - devparms.modelserie = 2; - } + devparms.bandwidth = 600; - if(!strcmp(str, "DS2102A-S")) - { - devparms.channel_cnt = 2; + devparms.modelserie = 6; + } - devparms.bandwidth = 100; + if (!strcmp(str, "DS6102")) { + devparms.channel_cnt = 2; - devparms.modelserie = 2; - } + devparms.bandwidth = 1000; - if(!strcmp(str, "DS2202")) - { - devparms.channel_cnt = 2; + devparms.modelserie = 6; + } - devparms.bandwidth = 200; + if (!strcmp(str, "DS6062")) { + devparms.channel_cnt = 2; - devparms.modelserie = 2; - } + devparms.bandwidth = 600; - if(!strcmp(str, "DS2202A")) - { - devparms.channel_cnt = 2; + devparms.modelserie = 6; + } - devparms.bandwidth = 200; + if (!strcmp(str, "DS4012")) { + devparms.channel_cnt = 2; - devparms.modelserie = 2; - } + devparms.bandwidth = 100; - if(!strcmp(str, "DS2202A-S")) - { - devparms.channel_cnt = 2; + devparms.modelserie = 4; + } - devparms.bandwidth = 200; + if (!strcmp(str, "DS4014")) { + devparms.channel_cnt = 4; - devparms.modelserie = 2; - } + devparms.bandwidth = 100; - if(!strcmp(str, "DS2302")) - { - devparms.channel_cnt = 2; + devparms.modelserie = 4; + } - devparms.bandwidth = 300; + if (!strcmp(str, "DS4022")) { + devparms.channel_cnt = 2; - devparms.modelserie = 2; - } + devparms.bandwidth = 200; - if(!strcmp(str, "DS2302A")) - { - devparms.channel_cnt = 2; + devparms.modelserie = 4; + } - devparms.bandwidth = 300; + if (!strcmp(str, "DS4024")) { + devparms.channel_cnt = 4; - devparms.modelserie = 2; - } + devparms.bandwidth = 200; - if(!strcmp(str, "DS2302A-S")) - { - devparms.channel_cnt = 2; + devparms.modelserie = 4; + } - devparms.bandwidth = 300; + if (!strcmp(str, "DS4032")) { + devparms.channel_cnt = 2; - devparms.modelserie = 2; - } + devparms.bandwidth = 350; - if(!strcmp(str, "DS1054Z")) - { - devparms.channel_cnt = 4; + devparms.modelserie = 4; + } - devparms.bandwidth = 50; + if (!strcmp(str, "DS4034")) { + devparms.channel_cnt = 4; - devparms.modelserie = 1; - } + devparms.bandwidth = 350; - if(!strcmp(str, "DS1074Z")) - { - devparms.channel_cnt = 4; + devparms.modelserie = 4; + } - devparms.bandwidth = 70; + if (!strcmp(str, "DS4052")) { + devparms.channel_cnt = 2; - devparms.modelserie = 1; - } + devparms.bandwidth = 500; - if(!strcmp(str, "DS1074Z-S")) - { - devparms.channel_cnt = 4; + devparms.modelserie = 4; + } - devparms.bandwidth = 70; + if (!strcmp(str, "DS4054")) { + devparms.channel_cnt = 4; - devparms.modelserie = 1; - } + devparms.bandwidth = 500; - if(!strcmp(str, "DS1074Z Plus")) - { - devparms.channel_cnt = 4; + devparms.modelserie = 4; + } - devparms.la_channel_cnt = 16; + if (!strcmp(str, "MSO4012")) { + devparms.channel_cnt = 2; - devparms.bandwidth = 70; + devparms.bandwidth = 100; - devparms.modelserie = 1; - } + devparms.modelserie = 4; + } - if(!strcmp(str, "DS1074Z-S Plus")) - { - devparms.channel_cnt = 4; + if (!strcmp(str, "MSO4024")) { + devparms.channel_cnt = 4; - devparms.la_channel_cnt = 16; + devparms.bandwidth = 200; - devparms.bandwidth = 70; + devparms.modelserie = 4; + } - devparms.modelserie = 1; - } + if (!strcmp(str, "DS2072A")) { + devparms.channel_cnt = 2; - if(!strcmp(str, "DS1104Z")) - { - devparms.channel_cnt = 4; + devparms.bandwidth = 70; - devparms.bandwidth = 100; + devparms.modelserie = 2; + } - devparms.modelserie = 1; - } + if (!strcmp(str, "DS2072A-S")) { + devparms.channel_cnt = 2; - if(!strcmp(str, "DS1104Z-S")) - { - devparms.channel_cnt = 4; + devparms.bandwidth = 70; - devparms.bandwidth = 100; + devparms.modelserie = 2; + } - devparms.modelserie = 1; - } + if (!strcmp(str, "DS2102")) { + devparms.channel_cnt = 2; - if(!strcmp(str, "DS1104Z Plus")) - { - devparms.channel_cnt = 4; + devparms.bandwidth = 100; - devparms.la_channel_cnt = 16; + devparms.modelserie = 2; + } - devparms.bandwidth = 100; + if (!strcmp(str, "DS2102A")) { + devparms.channel_cnt = 2; - devparms.modelserie = 1; - } + devparms.bandwidth = 100; - if(!strcmp(str, "DS1104Z-S Plus")) - { - devparms.channel_cnt = 4; + devparms.modelserie = 2; + } - devparms.la_channel_cnt = 16; + if (!strcmp(str, "DS2102A-S")) { + devparms.channel_cnt = 2; - devparms.bandwidth = 100; + devparms.bandwidth = 100; - devparms.modelserie = 1; - } + devparms.modelserie = 2; + } - if(!strcmp(str, "MSO1074Z")) - { - devparms.channel_cnt = 4; + if (!strcmp(str, "DS2202")) { + devparms.channel_cnt = 2; - devparms.bandwidth = 70; + devparms.bandwidth = 200; - devparms.modelserie = 1; - } + devparms.modelserie = 2; + } - if(!strcmp(str, "MSO1104Z")) - { - devparms.channel_cnt = 4; + if (!strcmp(str, "DS2202A")) { + devparms.channel_cnt = 2; - devparms.bandwidth = 100; + devparms.bandwidth = 200; - devparms.modelserie = 1; - } + devparms.modelserie = 2; + } - if(!strcmp(str, "MSO1074Z-S")) - { - devparms.channel_cnt = 4; + if (!strcmp(str, "DS2202A-S")) { + devparms.channel_cnt = 2; - devparms.bandwidth = 70; + devparms.bandwidth = 200; - devparms.modelserie = 1; - } + devparms.modelserie = 2; + } - if(!strcmp(str, "MSO1104Z-S")) - { - devparms.channel_cnt = 4; + if (!strcmp(str, "DS2302")) { + devparms.channel_cnt = 2; - devparms.bandwidth = 100; + devparms.bandwidth = 300; - devparms.modelserie = 1; - } + devparms.modelserie = 2; + } - if(!strcmp(str, "DS1202Z-E")) - { - devparms.channel_cnt = 2; + if (!strcmp(str, "DS2302A")) { + devparms.channel_cnt = 2; - devparms.bandwidth = 200; + devparms.bandwidth = 300; - devparms.modelserie = 1; - } + devparms.modelserie = 2; + } - if(!strcmp(str, "DS1102Z-E")) - { - devparms.channel_cnt = 2; + if (!strcmp(str, "DS2302A-S")) { + devparms.channel_cnt = 2; - devparms.bandwidth = 100; + devparms.bandwidth = 300; - devparms.modelserie = 1; - } + devparms.modelserie = 2; + } - if(devparms.modelserie == 1) - { - if(devparms.use_extra_vertdivisions) devparms.vertdivisions = 10; + if (!strcmp(str, "DS1054Z")) { + devparms.channel_cnt = 4; - devparms.hordivisions = 12; - } + devparms.bandwidth = 50; - if(devparms.channel_cnt && devparms.bandwidth && devparms.modelserie) - { - strlcpy(devparms.modelname, str, 128); - } -} + devparms.modelserie = 1; + } + if (!strcmp(str, "DS1074Z")) { + devparms.channel_cnt = 4; -void UI_Mainwindow::former_page() -{ - char str[512]; + devparms.bandwidth = 70; - if(device == NULL) - { - return; - } + devparms.modelserie = 1; + } - if(!devparms.connected) - { - return; - } + if (!strcmp(str, "DS1074Z-S")) { + devparms.channel_cnt = 4; - if(devparms.activechannel < 0) - { - return; - } + devparms.bandwidth = 70; - if(devparms.timebasedelayenable) - { - if(devparms.timebasedelayoffset <= -(((devparms.hordivisions / 2) * devparms.timebasescale) - devparms.timebaseoffset - ((devparms.hordivisions / 2) * devparms.timebasedelayscale))) - { - return; + devparms.modelserie = 1; } - devparms.timebasedelayoffset -= devparms.timebasedelayscale * devparms.hordivisions; + if (!strcmp(str, "DS1074Z Plus")) { + devparms.channel_cnt = 4; - if(devparms.timebasedelayoffset <= -(((devparms.hordivisions / 2) * devparms.timebasescale) - devparms.timebaseoffset - ((devparms.hordivisions / 2) * devparms.timebasedelayscale))) - { - devparms.timebasedelayoffset = -(((devparms.hordivisions / 2) * devparms.timebasescale) - devparms.timebaseoffset - ((devparms.hordivisions / 2) * devparms.timebasedelayscale)); - } + devparms.la_channel_cnt = 16; - strlcpy(str, "Delayed timebase position: ", 512); + devparms.bandwidth = 70; - convert_to_metric_suffix(str + strlen(str), devparms.timebasedelayoffset, 2, 512 - strlen(str)); + devparms.modelserie = 1; + } - strlcat(str, "s", 512); + if (!strcmp(str, "DS1074Z-S Plus")) { + devparms.channel_cnt = 4; - statusLabel->setText(str); + devparms.la_channel_cnt = 16; - horPosDial_timer->start(TMC_DIAL_TIMER_DELAY); - } - else - { - devparms.timebaseoffset -= devparms.timebasescale * devparms.hordivisions; + devparms.bandwidth = 70; - if(devparms.acquirememdepth > 10) - { - if(devparms.timebaseoffset <= -(((double)devparms.acquirememdepth / devparms.samplerate) / 2)) - { - devparms.timebaseoffset = -(((double)devparms.acquirememdepth / devparms.samplerate) / 2); - } - } - else - { - if(devparms.timebaseoffset <= -((devparms.hordivisions / 2) * devparms.timebasescale)) - { - devparms.timebaseoffset = -((devparms.hordivisions / 2) * devparms.timebasescale); - } + devparms.modelserie = 1; } - strlcpy(str, "Horizontal position: ", 512); + if (!strcmp(str, "DS1104Z")) { + devparms.channel_cnt = 4; - convert_to_metric_suffix(str + strlen(str), devparms.timebaseoffset, 2, 512 - strlen(str)); + devparms.bandwidth = 100; - strlcat(str, "s", 512); + devparms.modelserie = 1; + } - statusLabel->setText(str); + if (!strcmp(str, "DS1104Z-S")) { + devparms.channel_cnt = 4; - horPosDial_timer->start(TMC_DIAL_TIMER_DELAY); - } + devparms.bandwidth = 100; - waveForm->update(); -} + devparms.modelserie = 1; + } + if (!strcmp(str, "DS1104Z Plus")) { + devparms.channel_cnt = 4; -void UI_Mainwindow::next_page() -{ - char str[512]; + devparms.la_channel_cnt = 16; - if(device == NULL) - { - return; - } + devparms.bandwidth = 100; - if(!devparms.connected) - { - return; - } + devparms.modelserie = 1; + } - if(devparms.activechannel < 0) - { - return; - } + if (!strcmp(str, "DS1104Z-S Plus")) { + devparms.channel_cnt = 4; - if(devparms.timebasedelayenable) - { - if(devparms.timebasedelayoffset >= (((devparms.hordivisions / 2) * devparms.timebasescale) + devparms.timebaseoffset - ((devparms.hordivisions / 2) * devparms.timebasedelayscale))) - { - return; - } + devparms.la_channel_cnt = 16; - devparms.timebasedelayoffset += devparms.timebasedelayscale * devparms.hordivisions; + devparms.bandwidth = 100; - if(devparms.timebasedelayoffset >= (((devparms.hordivisions / 2) * devparms.timebasescale) + devparms.timebaseoffset - ((devparms.hordivisions / 2) * devparms.timebasedelayscale))) - { - devparms.timebasedelayoffset = (((devparms.hordivisions / 2) * devparms.timebasescale) + devparms.timebaseoffset - ((devparms.hordivisions / 2) * devparms.timebasedelayscale)); + devparms.modelserie = 1; } - strlcpy(str, "Delayed timebase position: ", 512); + if (!strcmp(str, "MSO1074Z")) { + devparms.channel_cnt = 4; - convert_to_metric_suffix(str + strlen(str), devparms.timebasedelayoffset, 2, 512 - strlen(str)); + devparms.bandwidth = 70; - strlcat(str, "s", 512); + devparms.modelserie = 1; + } - statusLabel->setText(str); + if (!strcmp(str, "MSO1104Z")) { + devparms.channel_cnt = 4; - horPosDial_timer->start(TMC_DIAL_TIMER_DELAY); - } - else - { - devparms.timebaseoffset += devparms.timebasescale * devparms.hordivisions; + devparms.bandwidth = 100; - if(devparms.acquirememdepth > 10) - { - if(devparms.timebaseoffset >= (((double)devparms.acquirememdepth / devparms.samplerate) / 2)) - { - devparms.timebaseoffset = (((double)devparms.acquirememdepth / devparms.samplerate) / 2); - } - } - else - { - if(devparms.timebaseoffset >= (devparms.hordivisions / 2) * devparms.timebasescale) - { - devparms.timebaseoffset = (devparms.hordivisions / 2) * devparms.timebasescale; - } + devparms.modelserie = 1; } - strlcpy(str, "Horizontal position: ", 512); + if (!strcmp(str, "MSO1074Z-S")) { + devparms.channel_cnt = 4; - convert_to_metric_suffix(str + strlen(str), devparms.timebaseoffset, 2, 512 - strlen(str)); + devparms.bandwidth = 70; - strlcat(str, "s", 512); + devparms.modelserie = 1; + } - statusLabel->setText(str); + if (!strcmp(str, "MSO1104Z-S")) { + devparms.channel_cnt = 4; - horPosDial_timer->start(TMC_DIAL_TIMER_DELAY); - } + devparms.bandwidth = 100; - waveForm->update(); -} + devparms.modelserie = 1; + } + if (!strcmp(str, "DS1202Z-E")) { + devparms.channel_cnt = 2; -void UI_Mainwindow::shift_page_left() -{ - char str[512]; + devparms.bandwidth = 200; - if(device == NULL) - { - return; - } + devparms.modelserie = 1; + } - if(!devparms.connected) - { - return; - } + if (!strcmp(str, "DS1102Z-E")) { + devparms.channel_cnt = 2; - if(devparms.math_fft && devparms.math_fft_split) - { - devparms.math_fft_hcenter -= devparms.math_fft_hscale; + devparms.bandwidth = 100; - if(devparms.math_fft_hcenter <= 0.0) - { - devparms.math_fft_hcenter = 0.0; + devparms.modelserie = 1; } - if(devparms.modelserie != 1) - { - snprintf(str, 512, ":CALC:FFT:HCEN %e", devparms.math_fft_hcenter); - } - else - { - snprintf(str, 512, ":MATH:FFT:HCEN %e", devparms.math_fft_hcenter); - } + if (!strcmp(str, "DHO802") || !strcmp(str, "DHO812")) { + devparms.channel_cnt = 2; - set_cue_cmd(str); + devparms.bandwidth = 625; - strlcpy(str, "FFT center: ", 512); + devparms.modelserie = 7; - convert_to_metric_suffix(str + strlen(str), devparms.math_fft_hcenter, 0, 512 - strlen(str)); + devparms.hordivisions = 10; - strlcat(str, "Hz", 512); + devparms.vertdivisions = 8; + } - statusLabel->setText(str); + if (!strcmp(str, "DHO804") || !strcmp(str, "DHO814") || !strcmp(str, "DHO914") || !strcmp(str, "DHO924") || !strcmp(str, "DHO914S") || !strcmp(str, "DHO924S")) { + devparms.channel_cnt = 4; - waveForm->update(); + devparms.bandwidth = 625; - return; - } + devparms.modelserie = 7; - if(devparms.activechannel < 0) - { - return; - } + devparms.hordivisions = 10; - if(devparms.timebasedelayenable) - { - if(devparms.timebasedelayoffset <= -(((devparms.hordivisions / 2) * devparms.timebasescale) - devparms.timebaseoffset - ((devparms.hordivisions / 2) * devparms.timebasedelayscale))) - { - return; + devparms.vertdivisions = 8; } - devparms.timebasedelayoffset -= devparms.timebasedelayscale; + if (devparms.modelserie == 1) { + if (devparms.use_extra_vertdivisions) + devparms.vertdivisions = 10; - if(devparms.timebasedelayoffset <= -(((devparms.hordivisions / 2) * devparms.timebasescale) - devparms.timebaseoffset - ((devparms.hordivisions / 2) * devparms.timebasedelayscale))) - { - devparms.timebasedelayoffset = -(((devparms.hordivisions / 2) * devparms.timebasescale) - devparms.timebaseoffset - ((devparms.hordivisions / 2) * devparms.timebasedelayscale)); + devparms.hordivisions = 12; } - strlcpy(str, "Delayed timebase position: ", 512); + if (devparms.channel_cnt && devparms.bandwidth && devparms.modelserie) { + strlcpy(devparms.modelname, str, 128); + } +} - convert_to_metric_suffix(str + strlen(str), devparms.timebasedelayoffset, 2, 512 - strlen(str)); +void UI_Mainwindow::former_page() { + char str[512]; - strlcat(str, "s", 512); + if (device == NULL) { + return; + } - statusLabel->setText(str); + if (!devparms.connected) { + return; + } - horPosDial_timer->start(TMC_DIAL_TIMER_DELAY); - } - else - { - devparms.timebaseoffset -= devparms.timebasescale; - - if(devparms.acquirememdepth > 10) - { - if(devparms.timebaseoffset <= -(((double)devparms.acquirememdepth / devparms.samplerate) / 2)) - { - devparms.timebaseoffset = -(((double)devparms.acquirememdepth / devparms.samplerate) / 2); - } - } - else - { - if(devparms.timebaseoffset <= -((devparms.hordivisions / 2) * devparms.timebasescale)) - { - devparms.timebaseoffset = -((devparms.hordivisions / 2) * devparms.timebasescale); - } + if (devparms.activechannel < 0) { + return; } - strlcpy(str, "Horizontal position: ", 512); + if (devparms.timebasedelayenable) { + if (devparms.timebasedelayoffset <= -(((devparms.hordivisions / 2) * devparms.timebasescale) - devparms.timebaseoffset - ((devparms.hordivisions / 2) * devparms.timebasedelayscale))) { + return; + } - convert_to_metric_suffix(str + strlen(str), devparms.timebaseoffset, 2, 512 - strlen(str)); + devparms.timebasedelayoffset -= devparms.timebasedelayscale * devparms.hordivisions; - strlcat(str, "s", 512); + if (devparms.timebasedelayoffset <= -(((devparms.hordivisions / 2) * devparms.timebasescale) - devparms.timebaseoffset - ((devparms.hordivisions / 2) * devparms.timebasedelayscale))) { + devparms.timebasedelayoffset = -(((devparms.hordivisions / 2) * devparms.timebasescale) - devparms.timebaseoffset - ((devparms.hordivisions / 2) * devparms.timebasedelayscale)); + } - statusLabel->setText(str); + strlcpy(str, "Delayed timebase position: ", 512); - horPosDial_timer->start(TMC_DIAL_TIMER_DELAY); - } + convert_to_metric_suffix(str + strlen(str), devparms.timebasedelayoffset, 2, 512 - strlen(str)); - waveForm->update(); -} + strlcat(str, "s", 512); + statusLabel->setText(str); -void UI_Mainwindow::shift_page_right() -{ - char str[512]; + horPosDial_timer->start(TMC_DIAL_TIMER_DELAY); + } else { + devparms.timebaseoffset -= devparms.timebasescale * devparms.hordivisions; - if(device == NULL) - { - return; - } + if (devparms.acquirememdepth > 10) { + if (devparms.timebaseoffset <= -(((double)devparms.acquirememdepth / devparms.samplerate) / 2)) { + devparms.timebaseoffset = -(((double)devparms.acquirememdepth / devparms.samplerate) / 2); + } + } else { + if (devparms.timebaseoffset <= -((devparms.hordivisions / 2) * devparms.timebasescale)) { + devparms.timebaseoffset = -((devparms.hordivisions / 2) * devparms.timebasescale); + } + } - if(!devparms.connected) - { - return; - } + strlcpy(str, "Horizontal position: ", 512); - if(devparms.math_fft && devparms.math_fft_split) - { - devparms.math_fft_hcenter += devparms.math_fft_hscale; + convert_to_metric_suffix(str + strlen(str), devparms.timebaseoffset, 2, 512 - strlen(str)); - if(devparms.math_fft_hcenter >= (devparms.current_screen_sf * 0.4)) - { - devparms.math_fft_hcenter = devparms.current_screen_sf * 0.4; + strlcat(str, "s", 512); + + statusLabel->setText(str); + + horPosDial_timer->start(TMC_DIAL_TIMER_DELAY); } - if(devparms.modelserie != 1) - { - snprintf(str, 512, ":CALC:FFT:HCEN %e", devparms.math_fft_hcenter); + waveForm->update(); +} + +void UI_Mainwindow::next_page() { + char str[512]; + + if (device == NULL) { + return; } - else - { - snprintf(str, 512, ":MATH:FFT:HCEN %e", devparms.math_fft_hcenter); + + if (!devparms.connected) { + return; } - set_cue_cmd(str); + if (devparms.activechannel < 0) { + return; + } - strlcpy(str, "FFT center: ", 512); + if (devparms.timebasedelayenable) { + if (devparms.timebasedelayoffset >= (((devparms.hordivisions / 2) * devparms.timebasescale) + devparms.timebaseoffset - ((devparms.hordivisions / 2) * devparms.timebasedelayscale))) { + return; + } - convert_to_metric_suffix(str + strlen(str), devparms.math_fft_hcenter, 0, 512 - strlen(str)); + devparms.timebasedelayoffset += devparms.timebasedelayscale * devparms.hordivisions; - strlcat(str, "Hz", 512); + if (devparms.timebasedelayoffset >= (((devparms.hordivisions / 2) * devparms.timebasescale) + devparms.timebaseoffset - ((devparms.hordivisions / 2) * devparms.timebasedelayscale))) { + devparms.timebasedelayoffset = (((devparms.hordivisions / 2) * devparms.timebasescale) + devparms.timebaseoffset - ((devparms.hordivisions / 2) * devparms.timebasedelayscale)); + } - statusLabel->setText(str); + strlcpy(str, "Delayed timebase position: ", 512); - waveForm->update(); + convert_to_metric_suffix(str + strlen(str), devparms.timebasedelayoffset, 2, 512 - strlen(str)); - return; - } + strlcat(str, "s", 512); - if(devparms.activechannel < 0) - { - return; - } + statusLabel->setText(str); - if(devparms.timebasedelayenable) - { - if(devparms.timebasedelayoffset >= (((devparms.hordivisions / 2) * devparms.timebasescale) + devparms.timebaseoffset - ((devparms.hordivisions / 2) * devparms.timebasedelayscale))) - { - return; + horPosDial_timer->start(TMC_DIAL_TIMER_DELAY); + } else { + devparms.timebaseoffset += devparms.timebasescale * devparms.hordivisions; + + if (devparms.acquirememdepth > 10) { + if (devparms.timebaseoffset >= (((double)devparms.acquirememdepth / devparms.samplerate) / 2)) { + devparms.timebaseoffset = (((double)devparms.acquirememdepth / devparms.samplerate) / 2); + } + } else { + if (devparms.timebaseoffset >= (devparms.hordivisions / 2) * devparms.timebasescale) { + devparms.timebaseoffset = (devparms.hordivisions / 2) * devparms.timebasescale; + } + } + + strlcpy(str, "Horizontal position: ", 512); + + convert_to_metric_suffix(str + strlen(str), devparms.timebaseoffset, 2, 512 - strlen(str)); + + strlcat(str, "s", 512); + + statusLabel->setText(str); + + horPosDial_timer->start(TMC_DIAL_TIMER_DELAY); } - devparms.timebasedelayoffset += devparms.timebasedelayscale; + waveForm->update(); +} - if(devparms.timebasedelayoffset >= (((devparms.hordivisions / 2) * devparms.timebasescale) + devparms.timebaseoffset - ((devparms.hordivisions / 2) * devparms.timebasedelayscale))) - { - devparms.timebasedelayoffset = (((devparms.hordivisions / 2) * devparms.timebasescale) + devparms.timebaseoffset - ((devparms.hordivisions / 2) * devparms.timebasedelayscale)); +void UI_Mainwindow::shift_page_left() { + char str[512]; + + if (device == NULL) { + return; } - strlcpy(str, "Delayed timebase position: ", 512); + if (!devparms.connected) { + return; + } - convert_to_metric_suffix(str + strlen(str), devparms.timebasedelayoffset, 2, 512 - strlen(str)); + if (devparms.math_fft && devparms.math_fft_split) { + devparms.math_fft_hcenter -= devparms.math_fft_hscale; - strlcat(str, "s", 512); + if (devparms.math_fft_hcenter <= 0.0) { + devparms.math_fft_hcenter = 0.0; + } - statusLabel->setText(str); + if (devparms.modelserie != 1) { + snprintf(str, 512, ":CALC:FFT:HCEN %e", devparms.math_fft_hcenter); + } else { + snprintf(str, 512, ":MATH:FFT:HCEN %e", devparms.math_fft_hcenter); + } - horPosDial_timer->start(TMC_DIAL_TIMER_DELAY); - } - else - { - devparms.timebaseoffset += devparms.timebasescale; + set_cue_cmd(str); - if(devparms.acquirememdepth > 10) - { - if(devparms.timebaseoffset >= (((double)devparms.acquirememdepth / devparms.samplerate) / 2)) - { - devparms.timebaseoffset = (((double)devparms.acquirememdepth / devparms.samplerate) / 2); - } + strlcpy(str, "FFT center: ", 512); + + convert_to_metric_suffix(str + strlen(str), devparms.math_fft_hcenter, 0, 512 - strlen(str)); + + strlcat(str, "Hz", 512); + + statusLabel->setText(str); + + waveForm->update(); + + return; } - else - { - if(devparms.timebaseoffset >= (devparms.hordivisions / 2) * devparms.timebasescale) - { - devparms.timebaseoffset = (devparms.hordivisions / 2) * devparms.timebasescale; - } + + if (devparms.activechannel < 0) { + return; } - strlcpy(str, "Horizontal position: ", 512); + if (devparms.timebasedelayenable) { + if (devparms.timebasedelayoffset <= -(((devparms.hordivisions / 2) * devparms.timebasescale) - devparms.timebaseoffset - ((devparms.hordivisions / 2) * devparms.timebasedelayscale))) { + return; + } - convert_to_metric_suffix(str + strlen(str), devparms.timebaseoffset, 2, 512 - strlen(str)); + devparms.timebasedelayoffset -= devparms.timebasedelayscale; - strlcat(str, "s", 512); + if (devparms.timebasedelayoffset <= -(((devparms.hordivisions / 2) * devparms.timebasescale) - devparms.timebaseoffset - ((devparms.hordivisions / 2) * devparms.timebasedelayscale))) { + devparms.timebasedelayoffset = -(((devparms.hordivisions / 2) * devparms.timebasescale) - devparms.timebaseoffset - ((devparms.hordivisions / 2) * devparms.timebasedelayscale)); + } - statusLabel->setText(str); + strlcpy(str, "Delayed timebase position: ", 512); - horPosDial_timer->start(TMC_DIAL_TIMER_DELAY); - } + convert_to_metric_suffix(str + strlen(str), devparms.timebasedelayoffset, 2, 512 - strlen(str)); - waveForm->update(); -} + strlcat(str, "s", 512); + statusLabel->setText(str); -void UI_Mainwindow::center_trigger() -{ - char str[512]; + horPosDial_timer->start(TMC_DIAL_TIMER_DELAY); + } else { + devparms.timebaseoffset -= devparms.timebasescale; - if(device == NULL) - { - return; - } + if (devparms.acquirememdepth > 10) { + if (devparms.timebaseoffset <= -(((double)devparms.acquirememdepth / devparms.samplerate) / 2)) { + devparms.timebaseoffset = -(((double)devparms.acquirememdepth / devparms.samplerate) / 2); + } + } else { + if (devparms.timebaseoffset <= -((devparms.hordivisions / 2) * devparms.timebasescale)) { + devparms.timebaseoffset = -((devparms.hordivisions / 2) * devparms.timebasescale); + } + } - if(!devparms.connected) - { - return; - } + strlcpy(str, "Horizontal position: ", 512); - if(devparms.math_fft && devparms.math_fft_split) - { - devparms.math_fft_hcenter = 0; + convert_to_metric_suffix(str + strlen(str), devparms.timebaseoffset, 2, 512 - strlen(str)); - if(devparms.modelserie != 1) - { - snprintf(str, 512, ":CALC:FFT:HCEN %e", devparms.math_fft_hcenter); + strlcat(str, "s", 512); + + statusLabel->setText(str); + + horPosDial_timer->start(TMC_DIAL_TIMER_DELAY); } - else - { - snprintf(str, 512, ":MATH:FFT:HCEN %e", devparms.math_fft_hcenter); + + waveForm->update(); +} + +void UI_Mainwindow::shift_page_right() { + char str[512]; + + if (device == NULL) { + return; } - set_cue_cmd(str); + if (!devparms.connected) { + return; + } - strlcpy(str, "FFT center: ", 512); + if (devparms.math_fft && devparms.math_fft_split) { + devparms.math_fft_hcenter += devparms.math_fft_hscale; - convert_to_metric_suffix(str + strlen(str), devparms.math_fft_hcenter, 0, 512 - strlen(str)); + if (devparms.math_fft_hcenter >= (devparms.current_screen_sf * 0.4)) { + devparms.math_fft_hcenter = devparms.current_screen_sf * 0.4; + } - strlcat(str, "Hz", 512); + if (devparms.modelserie != 1) { + snprintf(str, 512, ":CALC:FFT:HCEN %e", devparms.math_fft_hcenter); + } else { + snprintf(str, 512, ":MATH:FFT:HCEN %e", devparms.math_fft_hcenter); + } - statusLabel->setText(str); + set_cue_cmd(str); - waveForm->update(); + strlcpy(str, "FFT center: ", 512); - return; - } + convert_to_metric_suffix(str + strlen(str), devparms.math_fft_hcenter, 0, 512 - strlen(str)); - if(devparms.activechannel < 0) - { - return; - } + strlcat(str, "Hz", 512); - if(devparms.timebasedelayenable) - { - devparms.timebasedelayoffset = 0; + statusLabel->setText(str); - strlcpy(str, "Delayed timebase position: ", 512); + waveForm->update(); - convert_to_metric_suffix(str + strlen(str), devparms.timebasedelayoffset, 2, 512 - strlen(str)); + return; + } - strlcat(str, "s", 512); + if (devparms.activechannel < 0) { + return; + } - statusLabel->setText(str); + if (devparms.timebasedelayenable) { + if (devparms.timebasedelayoffset >= (((devparms.hordivisions / 2) * devparms.timebasescale) + devparms.timebaseoffset - ((devparms.hordivisions / 2) * devparms.timebasedelayscale))) { + return; + } - horPosDial_timer->start(TMC_DIAL_TIMER_DELAY); - } - else - { - devparms.timebaseoffset = 0; + devparms.timebasedelayoffset += devparms.timebasedelayscale; - strlcpy(str, "Horizontal position: ", 512); + if (devparms.timebasedelayoffset >= (((devparms.hordivisions / 2) * devparms.timebasescale) + devparms.timebaseoffset - ((devparms.hordivisions / 2) * devparms.timebasedelayscale))) { + devparms.timebasedelayoffset = (((devparms.hordivisions / 2) * devparms.timebasescale) + devparms.timebaseoffset - ((devparms.hordivisions / 2) * devparms.timebasedelayscale)); + } - convert_to_metric_suffix(str + strlen(str), devparms.timebaseoffset, 2, 512 - strlen(str)); + strlcpy(str, "Delayed timebase position: ", 512); - strlcat(str, "s", 512); + convert_to_metric_suffix(str + strlen(str), devparms.timebasedelayoffset, 2, 512 - strlen(str)); - statusLabel->setText(str); + strlcat(str, "s", 512); - horPosDial_timer->start(TMC_DIAL_TIMER_DELAY); - } + statusLabel->setText(str); - waveForm->update(); -} + horPosDial_timer->start(TMC_DIAL_TIMER_DELAY); + } else { + devparms.timebaseoffset += devparms.timebasescale; + if (devparms.acquirememdepth > 10) { + if (devparms.timebaseoffset >= (((double)devparms.acquirememdepth / devparms.samplerate) / 2)) { + devparms.timebaseoffset = (((double)devparms.acquirememdepth / devparms.samplerate) / 2); + } + } else { + if (devparms.timebaseoffset >= (devparms.hordivisions / 2) * devparms.timebasescale) { + devparms.timebaseoffset = (devparms.hordivisions / 2) * devparms.timebasescale; + } + } -void UI_Mainwindow::zoom_in() -{ - char str[512]; + strlcpy(str, "Horizontal position: ", 512); - if(device == NULL) - { - return; - } + convert_to_metric_suffix(str + strlen(str), devparms.timebaseoffset, 2, 512 - strlen(str)); - if(!devparms.connected) - { - return; - } + strlcat(str, "s", 512); - if(devparms.activechannel < 0) - { - return; - } + statusLabel->setText(str); - if(devparms.math_fft && devparms.math_fft_split) - { - if(!dblcmp(devparms.math_fft_hscale, devparms.current_screen_sf / 200.0)) - { - return; + horPosDial_timer->start(TMC_DIAL_TIMER_DELAY); } - if(!dblcmp(devparms.math_fft_hscale, devparms.current_screen_sf / 20.0)) - { - devparms.math_fft_hscale = devparms.current_screen_sf / 40.0; - } - else if(!dblcmp(devparms.math_fft_hscale, devparms.current_screen_sf / 40.0)) - { - devparms.math_fft_hscale = devparms.current_screen_sf / 100.0; - } - else - { - devparms.math_fft_hscale = devparms.current_screen_sf / 200.0; - } - - if(devparms.modelserie != 1) - { - snprintf(str, 512, ":CALC:FFT:HSP %e", devparms.math_fft_hscale); + waveForm->update(); +} + +void UI_Mainwindow::center_trigger() { + char str[512]; + + if (device == NULL) { + return; } - else - { - snprintf(str, 512, ":MATH:FFT:HSC %e", devparms.math_fft_hscale); + + if (!devparms.connected) { + return; } - set_cue_cmd(str); + if (devparms.math_fft && devparms.math_fft_split) { + devparms.math_fft_hcenter = 0; - strlcpy(str, "FFT scale: ", 512); + if (devparms.modelserie != 1) { + snprintf(str, 512, ":CALC:FFT:HCEN %e", devparms.math_fft_hcenter); + } else { + snprintf(str, 512, ":MATH:FFT:HCEN %e", devparms.math_fft_hcenter); + } - convert_to_metric_suffix(str + strlen(str), devparms.math_fft_hscale, 0, 512 - strlen(str)); + set_cue_cmd(str); - strlcat(str, "Hz/Div", 512); + strlcpy(str, "FFT center: ", 512); - statusLabel->setText(str); + convert_to_metric_suffix(str + strlen(str), devparms.math_fft_hcenter, 0, 512 - strlen(str)); - waveForm->update(); + strlcat(str, "Hz", 512); - return; - } + statusLabel->setText(str); - if(devparms.activechannel < 0) - { - return; - } + waveForm->update(); - if(devparms.timebasedelayenable) - { - if(devparms.modelserie == 1) - { - if(devparms.timebasescale <= 5.001e-9) - { - devparms.timebasescale = 5e-9; + return; + } + if (devparms.activechannel < 0) { return; - } } - else - { - if(devparms.bandwidth == 1000) - { - if(devparms.timebasedelayscale <= 5.001e-10) - { - devparms.timebasedelayscale = 5e-10; - return; - } - } - else - { - if(devparms.timebasedelayscale <= 1.001e-9) - { - devparms.timebasedelayscale = 1e-9; + if (devparms.timebasedelayenable) { + devparms.timebasedelayoffset = 0; - return; - } - } - } + strlcpy(str, "Delayed timebase position: ", 512); - devparms.timebasedelayscale = round_down_step125(devparms.timebasedelayscale, NULL); + convert_to_metric_suffix(str + strlen(str), devparms.timebasedelayoffset, 2, 512 - strlen(str)); - devparms.current_screen_sf = 100.0 / devparms.timebasedelayscale; + strlcat(str, "s", 512); - strlcpy(str, "Delayed timebase: ", 512); + statusLabel->setText(str); - convert_to_metric_suffix(str + strlen(str), devparms.timebasedelayscale, 2, 512 - strlen(str)); + horPosDial_timer->start(TMC_DIAL_TIMER_DELAY); + } else { + devparms.timebaseoffset = 0; - strlcat(str, "s", 512); + strlcpy(str, "Horizontal position: ", 512); - statusLabel->setText(str); + convert_to_metric_suffix(str + strlen(str), devparms.timebaseoffset, 2, 512 - strlen(str)); - snprintf(str, 512, ":TIM:DEL:SCAL %e", devparms.timebasedelayscale); + strlcat(str, "s", 512); - set_cue_cmd(str); - } - else - { - if(devparms.modelserie == 1) - { - if(devparms.timebasescale <= 5.001e-9) - { - devparms.timebasescale = 5e-9; + statusLabel->setText(str); + horPosDial_timer->start(TMC_DIAL_TIMER_DELAY); + } + + waveForm->update(); +} + +void UI_Mainwindow::zoom_in() { + char str[512]; + + if (device == NULL) { return; - } } - else - { - if(devparms.bandwidth == 1000) - { - if(devparms.timebasescale <= 5.001e-10) - { - devparms.timebasescale = 5e-10; - return; - } - } - else - { - if(devparms.timebasescale <= 1.001e-9) - { - devparms.timebasescale = 1e-9; + if (!devparms.connected) { + return; + } - return; - } - } + if (devparms.activechannel < 0) { + return; } - devparms.timebasescale = round_down_step125(devparms.timebasescale, NULL); + if (devparms.math_fft && devparms.math_fft_split) { + if (!dblcmp(devparms.math_fft_hscale, devparms.current_screen_sf / 200.0)) { + return; + } - devparms.current_screen_sf = 100.0 / devparms.timebasescale; + if (!dblcmp(devparms.math_fft_hscale, devparms.current_screen_sf / 20.0)) { + devparms.math_fft_hscale = devparms.current_screen_sf / 40.0; + } else if (!dblcmp(devparms.math_fft_hscale, devparms.current_screen_sf / 40.0)) { + devparms.math_fft_hscale = devparms.current_screen_sf / 100.0; + } else { + devparms.math_fft_hscale = devparms.current_screen_sf / 200.0; + } - strlcpy(str, "Timebase: ", 512); + if (devparms.modelserie != 1) { + snprintf(str, 512, ":CALC:FFT:HSP %e", devparms.math_fft_hscale); + } else { + snprintf(str, 512, ":MATH:FFT:HSC %e", devparms.math_fft_hscale); + } - convert_to_metric_suffix(str + strlen(str), devparms.timebasescale, 2, 512 - strlen(str)); + set_cue_cmd(str); - strlcat(str, "s", 512); + strlcpy(str, "FFT scale: ", 512); - statusLabel->setText(str); + convert_to_metric_suffix(str + strlen(str), devparms.math_fft_hscale, 0, 512 - strlen(str)); - snprintf(str, 512, ":TIM:SCAL %e", devparms.timebasescale); + strlcat(str, "Hz/Div", 512); - set_cue_cmd(str); - } + statusLabel->setText(str); - waveForm->update(); -} + waveForm->update(); + return; + } -void UI_Mainwindow::zoom_out() -{ - char str[512]; + if (devparms.activechannel < 0) { + return; + } - if(device == NULL) - { - return; - } + if (devparms.timebasedelayenable) { + if (devparms.modelserie == 1) { + if (devparms.timebasescale <= 5.001e-9) { + devparms.timebasescale = 5e-9; - if(!devparms.connected) - { - return; - } + return; + } + } else { + if (devparms.bandwidth == 1000) { + if (devparms.timebasedelayscale <= 5.001e-10) { + devparms.timebasedelayscale = 5e-10; - if(devparms.activechannel < 0) - { - return; - } + return; + } + } else { + if (devparms.timebasedelayscale <= 1.001e-9) { + devparms.timebasedelayscale = 1e-9; - if(devparms.math_fft && devparms.math_fft_split) - { - if(!dblcmp(devparms.math_fft_hscale, devparms.current_screen_sf / 20.0)) - { - return; - } + return; + } + } + } - if(!dblcmp(devparms.math_fft_hscale, devparms.current_screen_sf / 200.0)) - { - devparms.math_fft_hscale = devparms.current_screen_sf / 100.0; - } - else if(!dblcmp(devparms.math_fft_hscale, devparms.current_screen_sf / 100.0)) - { - devparms.math_fft_hscale = devparms.current_screen_sf / 40.0; - } - else - { - devparms.math_fft_hscale = devparms.current_screen_sf / 20.0; - } - - if(devparms.modelserie != 1) - { - snprintf(str, 512, ":CALC:FFT:HSP %e", devparms.math_fft_hscale); - } - else - { - snprintf(str, 512, ":MATH:FFT:HSC %e", devparms.math_fft_hscale); - } + devparms.timebasedelayscale = round_down_step125(devparms.timebasedelayscale, NULL); - set_cue_cmd(str); + devparms.current_screen_sf = 100.0 / devparms.timebasedelayscale; - strlcpy(str, "FFT scale: ", 512); + strlcpy(str, "Delayed timebase: ", 512); - convert_to_metric_suffix(str + strlen(str), devparms.math_fft_hscale, 0, 512 - strlen(str)); + convert_to_metric_suffix(str + strlen(str), devparms.timebasedelayscale, 2, 512 - strlen(str)); - strlcat(str, "Hz/Div", 512); + strlcat(str, "s", 512); - statusLabel->setText(str); + statusLabel->setText(str); - waveForm->update(); + snprintf(str, 512, ":TIM:DEL:SCAL %e", devparms.timebasedelayscale); - return; - } + set_cue_cmd(str); + } else { + if (devparms.modelserie == 1) { + if (devparms.timebasescale <= 5.001e-9) { + devparms.timebasescale = 5e-9; - if(devparms.timebasedelayenable) - { - if(devparms.timebasedelayscale >= devparms.timebasescale / 2) - { - devparms.timebasedelayscale = devparms.timebasescale / 2; + return; + } + } else { + if (devparms.bandwidth == 1000) { + if (devparms.timebasescale <= 5.001e-10) { + devparms.timebasescale = 5e-10; - return; - } + return; + } + } else { + if (devparms.timebasescale <= 1.001e-9) { + devparms.timebasescale = 1e-9; - if(devparms.timebasedelayscale >= 0.1) - { - devparms.timebasedelayscale = 0.1; + return; + } + } + } - return; - } + devparms.timebasescale = round_down_step125(devparms.timebasescale, NULL); - devparms.timebasedelayscale = round_up_step125(devparms.timebasedelayscale, NULL); + devparms.current_screen_sf = 100.0 / devparms.timebasescale; - devparms.current_screen_sf = 100.0 / devparms.timebasedelayscale; + strlcpy(str, "Timebase: ", 512); - strlcpy(str, "Delayed timebase: ", 512); + convert_to_metric_suffix(str + strlen(str), devparms.timebasescale, 2, 512 - strlen(str)); - convert_to_metric_suffix(str + strlen(str), devparms.timebasedelayscale, 2, 512 - strlen(str)); + strlcat(str, "s", 512); - strlcat(str, "s", 512); + statusLabel->setText(str); - statusLabel->setText(str); + snprintf(str, 512, ":TIM:SCAL %e", devparms.timebasescale); - snprintf(str, 512, ":TIM:DEL:SCAL %e", devparms.timebasedelayscale); + set_cue_cmd(str); + } - set_cue_cmd(str); + waveForm->update(); +} - if(devparms.timebasedelayscale > 0.1000001) - { - devparms.func_wrec_enable = 0; +void UI_Mainwindow::zoom_out() { + char str[512]; + + if (device == NULL) { + return; } - } - else - { - if(devparms.timebasescale >= 10) - { - devparms.timebasescale = 10; - return; + if (!devparms.connected) { + return; } - devparms.timebasescale = round_up_step125(devparms.timebasescale, NULL); + if (devparms.activechannel < 0) { + return; + } - devparms.current_screen_sf = 100.0 / devparms.timebasescale; + if (devparms.math_fft && devparms.math_fft_split) { + if (!dblcmp(devparms.math_fft_hscale, devparms.current_screen_sf / 20.0)) { + return; + } - strlcpy(str, "Timebase: ", 512); + if (!dblcmp(devparms.math_fft_hscale, devparms.current_screen_sf / 200.0)) { + devparms.math_fft_hscale = devparms.current_screen_sf / 100.0; + } else if (!dblcmp(devparms.math_fft_hscale, devparms.current_screen_sf / 100.0)) { + devparms.math_fft_hscale = devparms.current_screen_sf / 40.0; + } else { + devparms.math_fft_hscale = devparms.current_screen_sf / 20.0; + } - convert_to_metric_suffix(str + strlen(str), devparms.timebasescale, 2, 512 - strlen(str)); + if (devparms.modelserie != 1) { + snprintf(str, 512, ":CALC:FFT:HSP %e", devparms.math_fft_hscale); + } else { + snprintf(str, 512, ":MATH:FFT:HSC %e", devparms.math_fft_hscale); + } - strlcat(str, "s", 512); + set_cue_cmd(str); - statusLabel->setText(str); + strlcpy(str, "FFT scale: ", 512); - snprintf(str, 512, ":TIM:SCAL %e", devparms.timebasescale); + convert_to_metric_suffix(str + strlen(str), devparms.math_fft_hscale, 0, 512 - strlen(str)); - set_cue_cmd(str); + strlcat(str, "Hz/Div", 512); - if(devparms.timebasescale > 0.1000001) - { - devparms.func_wrec_enable = 0; - } - } + statusLabel->setText(str); - waveForm->update(); -} + waveForm->update(); + return; + } -void UI_Mainwindow::chan_scale_plus() -{ - int chn; + if (devparms.timebasedelayenable) { + if (devparms.timebasedelayscale >= devparms.timebasescale / 2) { + devparms.timebasedelayscale = devparms.timebasescale / 2; - double val, ltmp; + return; + } - char str[512]; + if (devparms.timebasedelayscale >= 0.1) { + devparms.timebasedelayscale = 0.1; - if(device == NULL) - { - return; - } + return; + } - if(!devparms.connected) - { - return; - } + devparms.timebasedelayscale = round_up_step125(devparms.timebasedelayscale, NULL); - if(devparms.activechannel < 0) - { - return; - } + devparms.current_screen_sf = 100.0 / devparms.timebasedelayscale; - if(devparms.math_fft && devparms.math_fft_split) - { - devparms.fft_vscale = round_up_step125(devparms.fft_vscale, NULL); + strlcpy(str, "Delayed timebase: ", 512); - if(devparms.math_fft_unit == 0) - { - if(devparms.fft_vscale > 50.0) - { - devparms.fft_vscale = 50.0; - } - } - else - { - if(devparms.fft_vscale > 20.0) - { - devparms.fft_vscale = 20.0; - } - } + convert_to_metric_suffix(str + strlen(str), devparms.timebasedelayscale, 2, 512 - strlen(str)); - if(devparms.fft_voffset > (devparms.fft_vscale * 4.0)) - { - devparms.fft_voffset = (devparms.fft_vscale * 4.0); - } + strlcat(str, "s", 512); - if(devparms.fft_voffset < (devparms.fft_vscale * -4.0)) - { - devparms.fft_voffset = (devparms.fft_vscale * -4.0); - } + statusLabel->setText(str); - if(devparms.modelserie != 1) - { - if(devparms.math_fft_unit == 1) - { - snprintf(str, 512, ":CALC:FFT:VSC %e", devparms.fft_vscale); + snprintf(str, 512, ":TIM:DEL:SCAL %e", devparms.timebasedelayscale); set_cue_cmd(str); - } - else - { - snprintf(str, 512, ":CALC:FFT:VSC %e", devparms.fft_vscale / devparms.chanscale[devparms.math_fft_src]); - set_cue_cmd(str); - } - } - else - { - snprintf(str, 512, ":MATH:SCAL %e", devparms.fft_vscale); + if (devparms.timebasedelayscale > 0.1000001) { + devparms.func_wrec_enable = 0; + } + } else { + if (devparms.timebasescale >= 10) { + devparms.timebasescale = 10; - set_cue_cmd(str); - } + return; + } - if(devparms.math_fft_unit == 0) - { - strlcpy(str, "FFT scale: ", 512); + devparms.timebasescale = round_up_step125(devparms.timebasescale, NULL); - convert_to_metric_suffix(str + strlen(str), devparms.fft_vscale, 1, 512 - strlen(str)); + devparms.current_screen_sf = 100.0 / devparms.timebasescale; - strlcat(str, "V/Div", 512); - } - else - { - snprintf(str, 512, "FFT scale: %.1fdB/Div", devparms.fft_vscale); - } + strlcpy(str, "Timebase: ", 512); - statusLabel->setText(str); + convert_to_metric_suffix(str + strlen(str), devparms.timebasescale, 2, 512 - strlen(str)); - waveForm->update(); + strlcat(str, "s", 512); - return; - } + statusLabel->setText(str); - chn = devparms.activechannel; + snprintf(str, 512, ":TIM:SCAL %e", devparms.timebasescale); - if(devparms.chanscale[chn] >= 20) - { - devparms.chanscale[chn] = 20; + set_cue_cmd(str); - return; - } + if (devparms.timebasescale > 0.1000001) { + devparms.func_wrec_enable = 0; + } + } - ltmp = devparms.chanscale[chn]; + waveForm->update(); +} - val = round_up_step125(devparms.chanscale[chn], NULL); +void UI_Mainwindow::chan_scale_plus() { + int chn; - if(devparms.chanvernier[chn]) - { - val /= 100; + double val, ltmp; - devparms.chanscale[chn] += val; - } - else - { - devparms.chanscale[chn] = val; - } + char str[512]; - ltmp /= val; + if (device == NULL) { + return; + } - devparms.chanoffset[chn] /= ltmp; + if (!devparms.connected) { + return; + } - snprintf(str, 512, "Channel %i scale: ", chn + 1); + if (devparms.activechannel < 0) { + return; + } - convert_to_metric_suffix(str + strlen(str), devparms.chanscale[chn], 2, 512 - strlen(str)); + if (devparms.math_fft && devparms.math_fft_split) { + devparms.fft_vscale = round_up_step125(devparms.fft_vscale, NULL); - strlcat(str, "V", 512); + if (devparms.math_fft_unit == 0) { + if (devparms.fft_vscale > 50.0) { + devparms.fft_vscale = 50.0; + } + } else { + if (devparms.fft_vscale > 20.0) { + devparms.fft_vscale = 20.0; + } + } - statusLabel->setText(str); + if (devparms.fft_voffset > (devparms.fft_vscale * 4.0)) { + devparms.fft_voffset = (devparms.fft_vscale * 4.0); + } - snprintf(str, 512, ":CHAN%i:SCAL %e", chn + 1, devparms.chanscale[chn]); + if (devparms.fft_voffset < (devparms.fft_vscale * -4.0)) { + devparms.fft_voffset = (devparms.fft_vscale * -4.0); + } - set_cue_cmd(str); + if (devparms.modelserie != 1) { + if (devparms.math_fft_unit == 1) { + snprintf(str, 512, ":CALC:FFT:VSC %e", devparms.fft_vscale); - waveForm->update(); -} + set_cue_cmd(str); + } else { + snprintf(str, 512, ":CALC:FFT:VSC %e", devparms.fft_vscale / devparms.chanscale[devparms.math_fft_src]); + set_cue_cmd(str); + } + } else { + snprintf(str, 512, ":MATH:SCAL %e", devparms.fft_vscale); -void UI_Mainwindow::chan_scale_plus_all() -{ - int chn; + set_cue_cmd(str); + } - double val, ltmp; + if (devparms.math_fft_unit == 0) { + strlcpy(str, "FFT scale: ", 512); - char str[512]; + convert_to_metric_suffix(str + strlen(str), devparms.fft_vscale, 1, 512 - strlen(str)); - if(device == NULL) - { - return; - } + strlcat(str, "V/Div", 512); + } else { + snprintf(str, 512, "FFT scale: %.1fdB/Div", devparms.fft_vscale); + } - if(!devparms.connected) - { - return; - } + statusLabel->setText(str); - if(devparms.activechannel < 0) - { - return; - } + waveForm->update(); - if(devparms.math_fft && devparms.math_fft_split) - { - return; - } + return; + } - for(chn=0; chn= 20) - { - devparms.chanscale[chn] = 20; + if (devparms.chanscale[chn] >= 20) { + devparms.chanscale[chn] = 20; - return; + return; } ltmp = devparms.chanscale[chn]; val = round_up_step125(devparms.chanscale[chn], NULL); - if(devparms.chanvernier[chn]) - { - val /= 100; + if (devparms.chanvernier[chn]) { + val /= 100; - devparms.chanscale[chn] += val; - } - else - { - devparms.chanscale[chn] = val; + devparms.chanscale[chn] += val; + } else { + devparms.chanscale[chn] = val; } ltmp /= val; @@ -2221,216 +1870,170 @@ void UI_Mainwindow::chan_scale_plus_all() snprintf(str, 512, ":CHAN%i:SCAL %e", chn + 1, devparms.chanscale[chn]); set_cue_cmd(str); - } - - waveForm->update(); -} - - -void UI_Mainwindow::chan_scale_minus() -{ - int chn; - - double val, ltmp; - - char str[512]; - if(device == NULL) - { - return; - } + waveForm->update(); +} - if(!devparms.connected) - { - return; - } +void UI_Mainwindow::chan_scale_plus_all() { + int chn; - if(devparms.activechannel < 0) - { - return; - } + double val, ltmp; - if(devparms.math_fft && devparms.math_fft_split) - { - devparms.fft_vscale = round_down_step125(devparms.fft_vscale, NULL); + char str[512]; - if(devparms.math_fft_unit == 0) - { - if(devparms.fft_vscale < 1.0) - { - devparms.fft_vscale = 1.0; - } + if (device == NULL) { + return; } - else - { - if(devparms.fft_vscale < 1.0) - { - devparms.fft_vscale = 1.0; - } + + if (!devparms.connected) { + return; } - if(devparms.fft_voffset > (devparms.fft_vscale * 4.0)) - { - devparms.fft_voffset = (devparms.fft_vscale * 4.0); + if (devparms.activechannel < 0) { + return; } - if(devparms.fft_voffset < (devparms.fft_vscale * -4.0)) - { - devparms.fft_voffset = (devparms.fft_vscale * -4.0); + if (devparms.math_fft && devparms.math_fft_split) { + return; } - if(devparms.modelserie != 1) - { - if(devparms.math_fft_unit == 1) - { - snprintf(str, 512, ":CALC:FFT:VSC %e", devparms.fft_vscale); + for (chn = 0; chn < devparms.channel_cnt; chn++) { + if (!devparms.chandisplay[chn]) + continue; - set_cue_cmd(str); - } - else - { - snprintf(str, 512, ":CALC:FFT:VSC %e", devparms.fft_vscale / devparms.chanscale[devparms.math_fft_src]); + if (devparms.chanscale[chn] >= 20) { + devparms.chanscale[chn] = 20; - set_cue_cmd(str); - } - } - else - { - snprintf(str, 512, ":MATH:SCAL %e", devparms.fft_vscale); + return; + } - set_cue_cmd(str); - } + ltmp = devparms.chanscale[chn]; - if(devparms.math_fft_unit == 0) - { - strlcpy(str, "FFT scale: ", 512); + val = round_up_step125(devparms.chanscale[chn], NULL); - convert_to_metric_suffix(str + strlen(str), devparms.fft_vscale, 1, 512 - strlen(str)); + if (devparms.chanvernier[chn]) { + val /= 100; - strlcat(str, "V/Div", 512); - } - else - { - snprintf(str, 512, "FFT scale: %.1fdB/Div", devparms.fft_vscale); - } + devparms.chanscale[chn] += val; + } else { + devparms.chanscale[chn] = val; + } - statusLabel->setText(str); + ltmp /= val; - waveForm->update(); + devparms.chanoffset[chn] /= ltmp; - return; - } + snprintf(str, 512, "Channel %i scale: ", chn + 1); - chn = devparms.activechannel; + convert_to_metric_suffix(str + strlen(str), devparms.chanscale[chn], 2, 512 - strlen(str)); - if(devparms.chanscale[chn] <= 1e-2) - { - devparms.chanscale[chn] = 1e-2; + strlcat(str, "V", 512); - return; - } + statusLabel->setText(str); - ltmp = devparms.chanscale[chn]; + snprintf(str, 512, ":CHAN%i:SCAL %e", chn + 1, devparms.chanscale[chn]); - if(devparms.chanvernier[chn]) - { - val = round_up_step125(devparms.chanscale[chn], NULL); - } - else - { - val = round_down_step125(devparms.chanscale[chn], NULL); - } + set_cue_cmd(str); + } + + waveForm->update(); +} - if(devparms.chanvernier[chn]) - { - val /= 100; +void UI_Mainwindow::chan_scale_minus() { + int chn; - devparms.chanscale[chn] -= val; - } - else - { - devparms.chanscale[chn] = val; - } + double val, ltmp; - ltmp /= val; + char str[512]; - devparms.chanoffset[chn] /= ltmp; + if (device == NULL) { + return; + } - snprintf(str, 512, "Channel %i scale: ", chn + 1); + if (!devparms.connected) { + return; + } - convert_to_metric_suffix(str + strlen(str), devparms.chanscale[chn], 2, 512 - strlen(str)); + if (devparms.activechannel < 0) { + return; + } - strlcat(str, "V", 512); + if (devparms.math_fft && devparms.math_fft_split) { + devparms.fft_vscale = round_down_step125(devparms.fft_vscale, NULL); - statusLabel->setText(str); + if (devparms.math_fft_unit == 0) { + if (devparms.fft_vscale < 1.0) { + devparms.fft_vscale = 1.0; + } + } else { + if (devparms.fft_vscale < 1.0) { + devparms.fft_vscale = 1.0; + } + } - snprintf(str, 512, ":CHAN%i:SCAL %e", chn + 1, devparms.chanscale[chn]); + if (devparms.fft_voffset > (devparms.fft_vscale * 4.0)) { + devparms.fft_voffset = (devparms.fft_vscale * 4.0); + } - set_cue_cmd(str); + if (devparms.fft_voffset < (devparms.fft_vscale * -4.0)) { + devparms.fft_voffset = (devparms.fft_vscale * -4.0); + } - waveForm->update(); -} + if (devparms.modelserie != 1) { + if (devparms.math_fft_unit == 1) { + snprintf(str, 512, ":CALC:FFT:VSC %e", devparms.fft_vscale); + set_cue_cmd(str); + } else { + snprintf(str, 512, ":CALC:FFT:VSC %e", devparms.fft_vscale / devparms.chanscale[devparms.math_fft_src]); -void UI_Mainwindow::chan_scale_minus_all() -{ - int chn; + set_cue_cmd(str); + } + } else { + snprintf(str, 512, ":MATH:SCAL %e", devparms.fft_vscale); - double val, ltmp; + set_cue_cmd(str); + } - char str[512]; + if (devparms.math_fft_unit == 0) { + strlcpy(str, "FFT scale: ", 512); - if(device == NULL) - { - return; - } + convert_to_metric_suffix(str + strlen(str), devparms.fft_vscale, 1, 512 - strlen(str)); - if(!devparms.connected) - { - return; - } + strlcat(str, "V/Div", 512); + } else { + snprintf(str, 512, "FFT scale: %.1fdB/Div", devparms.fft_vscale); + } - if(devparms.activechannel < 0) - { - return; - } + statusLabel->setText(str); - if(devparms.math_fft && devparms.math_fft_split) - { - return; - } + waveForm->update(); + + return; + } - for(chn=0; chnupdate(); + waveForm->update(); } +void UI_Mainwindow::chan_scale_minus_all() { + int chn; -void UI_Mainwindow::shift_trace_up() -{ - int chn; - - char str[512]; + double val, ltmp; - if(device == NULL) - { - return; - } - - if(!devparms.connected) - { - return; - } + char str[512]; - if(devparms.activechannel < 0) - { - return; - } + if (device == NULL) { + return; + } - if(devparms.math_fft && devparms.math_fft_split) - { - devparms.fft_voffset += devparms.fft_vscale; + if (!devparms.connected) { + return; + } - if(devparms.fft_voffset > (devparms.fft_vscale * 4.0)) - { - devparms.fft_voffset = (devparms.fft_vscale * 4.0); + if (devparms.activechannel < 0) { + return; } - if(devparms.math_fft_unit && (devparms.fft_vscale > 9.9)) - { - devparms.fft_voffset = nearbyint(devparms.fft_voffset); + if (devparms.math_fft && devparms.math_fft_split) { + return; } - if(devparms.modelserie != 1) - { - snprintf(str, 512, ":CALC:FFT:VOFF %e", devparms.fft_voffset); + for (chn = 0; chn < devparms.channel_cnt; chn++) { + if (!devparms.chandisplay[chn]) + continue; - set_cue_cmd(str); - } - else - { - snprintf(str, 512, ":MATH:OFFS %e", devparms.fft_voffset); + if (devparms.chanscale[chn] <= 1e-2) { + devparms.chanscale[chn] = 1e-2; - set_cue_cmd(str); - } + return; + } - if(devparms.math_fft_unit == 0) - { - strlcpy(str, "FFT position: ", 512); + ltmp = devparms.chanscale[chn]; - convert_to_metric_suffix(str + strlen(str), devparms.fft_voffset, 1, 512 - strlen(str)); + if (devparms.chanvernier[chn]) { + val = round_up_step125(devparms.chanscale[chn], NULL); + } else { + val = round_down_step125(devparms.chanscale[chn], NULL); + } - strlcat(str, "V", 512); - } - else - { - snprintf(str, 512, "FFT position: %+.0fdB", devparms.fft_voffset); - } + if (devparms.chanvernier[chn]) { + val /= 100; - statusLabel->setText(str); + devparms.chanscale[chn] -= val; + } else { + devparms.chanscale[chn] = val; + } - waveForm->label_active = LABEL_ACTIVE_FFT; + ltmp /= val; - label_timer->start(LABEL_TIMER_IVAL); + devparms.chanoffset[chn] /= ltmp; - waveForm->update(); + snprintf(str, 512, "Channel %i scale: ", chn + 1); - return; - } + convert_to_metric_suffix(str + strlen(str), devparms.chanscale[chn], 2, 512 - strlen(str)); - chn = devparms.activechannel; + strlcat(str, "V", 512); - if(devparms.chanoffset[chn] >= 20) - { - devparms.chanoffset[chn] = 20; + statusLabel->setText(str); - return; - } + snprintf(str, 512, ":CHAN%i:SCAL %e", chn + 1, devparms.chanscale[chn]); - devparms.chanoffset[chn] += devparms.chanscale[chn]; + set_cue_cmd(str); + } - snprintf(str, 512, "Channel %i offset: ", chn + 1); + waveForm->update(); +} - convert_to_metric_suffix(str + strlen(str), devparms.chanoffset[chn], 2, 512 - strlen(str)); +void UI_Mainwindow::shift_trace_up() { + int chn; - strlcat(str, devparms.chanunitstr[devparms.chanunit[chn]], 512); + char str[512]; - statusLabel->setText(str); + if (device == NULL) { + return; + } - waveForm->label_active = chn + 1; + if (!devparms.connected) { + return; + } - label_timer->start(LABEL_TIMER_IVAL); + if (devparms.activechannel < 0) { + return; + } - vertOffsDial_timer->start(TMC_DIAL_TIMER_DELAY); + if (devparms.math_fft && devparms.math_fft_split) { + devparms.fft_voffset += devparms.fft_vscale; - waveForm->update(); -} + if (devparms.fft_voffset > (devparms.fft_vscale * 4.0)) { + devparms.fft_voffset = (devparms.fft_vscale * 4.0); + } + if (devparms.math_fft_unit && (devparms.fft_vscale > 9.9)) { + devparms.fft_voffset = nearbyint(devparms.fft_voffset); + } -void UI_Mainwindow::shift_trace_down() -{ - int chn; + if (devparms.modelserie != 1) { + snprintf(str, 512, ":CALC:FFT:VOFF %e", devparms.fft_voffset); - char str[512]; + set_cue_cmd(str); + } else { + snprintf(str, 512, ":MATH:OFFS %e", devparms.fft_voffset); - if(device == NULL) - { - return; - } + set_cue_cmd(str); + } - if(!devparms.connected) - { - return; - } + if (devparms.math_fft_unit == 0) { + strlcpy(str, "FFT position: ", 512); - if(devparms.activechannel < 0) - { - return; - } + convert_to_metric_suffix(str + strlen(str), devparms.fft_voffset, 1, 512 - strlen(str)); - if(devparms.math_fft && devparms.math_fft_split) - { - devparms.fft_voffset -= devparms.fft_vscale; + strlcat(str, "V", 512); + } else { + snprintf(str, 512, "FFT position: %+.0fdB", devparms.fft_voffset); + } - if(devparms.fft_voffset < (devparms.fft_vscale * -4.0)) - { - devparms.fft_voffset = (devparms.fft_vscale * -4.0); - } + statusLabel->setText(str); - if(devparms.math_fft_unit) - { - if(devparms.fft_vscale > 9.0) - { - devparms.fft_voffset = nearbyint(devparms.fft_voffset); - } - else - { - devparms.fft_voffset = nearbyint(devparms.fft_voffset * 10.0) / 10.0; - } - } + waveForm->label_active = LABEL_ACTIVE_FFT; - if(devparms.modelserie != 1) - { - snprintf(str, 512, ":CALC:FFT:VOFF %e", devparms.fft_voffset); + label_timer->start(LABEL_TIMER_IVAL); - set_cue_cmd(str); - } - else - { - snprintf(str, 512, ":MATH:OFFS %e", devparms.fft_voffset); + waveForm->update(); - set_cue_cmd(str); + return; } - if(devparms.math_fft_unit == 0) - { - strlcpy(str, "FFT position: ", 512); + chn = devparms.activechannel; - convert_to_metric_suffix(str + strlen(str), devparms.fft_voffset, 1, 512 - strlen(str)); + if (devparms.chanoffset[chn] >= 20) { + devparms.chanoffset[chn] = 20; - strlcat(str, "V", 512); - } - else - { - snprintf(str, 512, "FFT position: %+.0fdB", devparms.fft_voffset); + return; } - statusLabel->setText(str); + devparms.chanoffset[chn] += devparms.chanscale[chn]; - waveForm->label_active = LABEL_ACTIVE_FFT; + snprintf(str, 512, "Channel %i offset: ", chn + 1); - label_timer->start(LABEL_TIMER_IVAL); + convert_to_metric_suffix(str + strlen(str), devparms.chanoffset[chn], 2, 512 - strlen(str)); - waveForm->update(); + strlcat(str, devparms.chanunitstr[devparms.chanunit[chn]], 512); - return; - } + statusLabel->setText(str); - chn = devparms.activechannel; + waveForm->label_active = chn + 1; - if(devparms.chanoffset[chn] <= -20) - { - devparms.chanoffset[chn] = -20; + label_timer->start(LABEL_TIMER_IVAL); - return; - } + vertOffsDial_timer->start(TMC_DIAL_TIMER_DELAY); - devparms.chanoffset[chn] -= devparms.chanscale[chn]; + waveForm->update(); +} - snprintf(str, 512, "Channel %i offset: ", chn + 1); +void UI_Mainwindow::shift_trace_down() { + int chn; - convert_to_metric_suffix(str + strlen(str), devparms.chanoffset[chn], 2, 512 - strlen(str)); + char str[512]; - strlcat(str, devparms.chanunitstr[devparms.chanunit[chn]], 512); + if (device == NULL) { + return; + } - statusLabel->setText(str); + if (!devparms.connected) { + return; + } - waveForm->label_active = chn + 1; + if (devparms.activechannel < 0) { + return; + } - label_timer->start(LABEL_TIMER_IVAL); + if (devparms.math_fft && devparms.math_fft_split) { + devparms.fft_voffset -= devparms.fft_vscale; - vertOffsDial_timer->start(TMC_DIAL_TIMER_DELAY); + if (devparms.fft_voffset < (devparms.fft_vscale * -4.0)) { + devparms.fft_voffset = (devparms.fft_vscale * -4.0); + } - waveForm->update(); -} + if (devparms.math_fft_unit) { + if (devparms.fft_vscale > 9.0) { + devparms.fft_voffset = nearbyint(devparms.fft_voffset); + } else { + devparms.fft_voffset = nearbyint(devparms.fft_voffset * 10.0) / 10.0; + } + } + if (devparms.modelserie != 1) { + snprintf(str, 512, ":CALC:FFT:VOFF %e", devparms.fft_voffset); -void UI_Mainwindow::set_to_factory() -{ - int i; + set_cue_cmd(str); + } else { + snprintf(str, 512, ":MATH:OFFS %e", devparms.fft_voffset); - char str[512]; + set_cue_cmd(str); + } - if((device == NULL) || (!devparms.connected)) - { - return; - } + if (devparms.math_fft_unit == 0) { + strlcpy(str, "FFT position: ", 512); - QMessageBox msgBox2; - msgBox2.setText("Do you want to reset the instrument to the factory settings?"); - msgBox2.setStandardButtons(QMessageBox::No | QMessageBox::Yes); - msgBox2.setDefaultButton(QMessageBox::No); - if(msgBox2.exec() != QMessageBox::Yes) return; + convert_to_metric_suffix(str + strlen(str), devparms.fft_voffset, 1, 512 - strlen(str)); - scrn_timer->stop(); + strlcat(str, "V", 512); + } else { + snprintf(str, 512, "FFT position: %+.0fdB", devparms.fft_voffset); + } - scrn_thread->wait(); + statusLabel->setText(str); - tmc_write("*RST"); + waveForm->label_active = LABEL_ACTIVE_FFT; - devparms.timebasescale = 1e-6; + label_timer->start(LABEL_TIMER_IVAL); - devparms.timebaseoffset = 0; + waveForm->update(); - devparms.timebasedelayenable = 0; + return; + } - devparms.timebasedelayoffset = 0; + chn = devparms.activechannel; - for(i=0; isetText(str); - devparms.chanvernier[i] = 0; + waveForm->label_active = chn + 1; - devparms.triggeredgelevel[i] = 0; - } + label_timer->start(LABEL_TIMER_IVAL); - devparms.chandisplay[0] = 1; + vertOffsDial_timer->start(TMC_DIAL_TIMER_DELAY); - devparms.activechannel = 0; + waveForm->update(); +} - devparms.acquiretype = 0; +void UI_Mainwindow::set_to_factory() { + int i; - devparms.acquirememdepth = 0; + char str[512]; - devparms.triggermode = 0; + if ((device == NULL) || (!devparms.connected)) { + return; + } - devparms.triggeredgesource = 0; + QMessageBox msgBox2; + msgBox2.setText("Do you want to reset the instrument to the factory settings?"); + msgBox2.setStandardButtons(QMessageBox::No | QMessageBox::Yes); + msgBox2.setDefaultButton(QMessageBox::No); + if (msgBox2.exec() != QMessageBox::Yes) + return; - devparms.triggeredgeslope = 0; + scrn_timer->stop(); - devparms.triggerstatus = 3; + scrn_thread->wait(); - devparms.triggercoupling = 1; + tmc_write("*RST"); - if(devparms.modelserie == 1) - { - devparms.triggerholdoff = 1.6e-8; - } - else - { - devparms.triggerholdoff = 1e-7; - } + devparms.timebasescale = 1e-6; - devparms.displaytype = 0; + devparms.timebaseoffset = 0; - devparms.displaygrid = 2; + devparms.timebasedelayenable = 0; - devparms.countersrc = 0; + devparms.timebasedelayoffset = 0; - devparms.func_wrec_enable = 0; + for (i = 0; i < MAX_CHNS; i++) { + devparms.chanscale[i] = 1; - statusLabel->setText("Reset to factory settings"); + devparms.chanoffset[i] = 0; - waveForm->update(); + devparms.chandisplay[i] = 0; - QMessageBox msgBox; - msgBox.setText("Resetting the instrument to the factory settings.\n" - "Please wait..."); + devparms.chancoupling[i] = 1; - QTimer t_rst_1; - t_rst_1.setSingleShot(true); -#if QT_VERSION >= 0x050000 - t_rst_1.setTimerType(Qt::PreciseTimer); -#endif - connect(&t_rst_1, SIGNAL(timeout()), &msgBox, SLOT(accept())); - t_rst_1.start(9000); + devparms.chanbwlimit[i] = 0; - msgBox.exec(); + devparms.chanprobe[i] = 10; - if(devparms.modelserie == 6) - { - for(i=0; istart(devparms.screentimerival); -} + devparms.chandisplay[0] = 1; + devparms.activechannel = 0; -// this function is called when screen_thread has finished -void UI_Mainwindow::screenUpdate() -{ - int i, chns=0; + devparms.acquiretype = 0; - char str[512]; + devparms.acquirememdepth = 0; - if(device == NULL) - { - pthread_mutex_unlock(&devparms.mutexx); + devparms.triggermode = 0; - return; - } + devparms.triggeredgesource = 0; - if(!devparms.connected) - { - pthread_mutex_unlock(&devparms.mutexx); + devparms.triggeredgeslope = 0; - return; - } + devparms.triggerstatus = 3; - if(!devparms.screenupdates_on) - { - pthread_mutex_unlock(&devparms.mutexx); + devparms.triggercoupling = 1; - return; - } + if (devparms.modelserie == 1) { + devparms.triggerholdoff = 1.6e-8; + } else { + devparms.triggerholdoff = 1e-7; + } - scrn_thread->get_params(&devparms); + devparms.displaytype = 0; - if(devparms.thread_error_stat) - { - scrn_timer->stop(); + devparms.displaygrid = 2; - snprintf(str, 512, "An error occurred while reading screen data from device.\n" - "File screen_thread.cpp line %i", devparms.thread_error_line); + devparms.countersrc = 0; - QMessageBox msgBox; - msgBox.setIcon(QMessageBox::Critical); - msgBox.setText(str); - msgBox.exec(); + devparms.func_wrec_enable = 0; - pthread_mutex_unlock(&devparms.mutexx); + statusLabel->setText("Reset to factory settings"); - close_connection(); + waveForm->update(); - return; - } + QMessageBox msgBox; + msgBox.setText("Resetting the instrument to the factory settings.\n" + "Please wait..."); - if(devparms.thread_result == TMC_THRD_RESULT_NONE) - { - pthread_mutex_unlock(&devparms.mutexx); + QTimer t_rst_1; + t_rst_1.setSingleShot(true); +#if QT_VERSION >= 0x050000 + t_rst_1.setTimerType(Qt::PreciseTimer); +#endif + connect(&t_rst_1, SIGNAL(timeout()), &msgBox, SLOT(accept())); + t_rst_1.start(9000); - return; - } + msgBox.exec(); - if(devparms.thread_result == TMC_THRD_RESULT_CMD) - { - if(devparms.thread_job == TMC_THRD_JOB_TRIGEDGELEV) - { - devparms.triggeredgelevel[devparms.triggeredgesource] = devparms.thread_value; + if (devparms.modelserie == 6) { + for (i = 0; i < MAX_CHNS; i++) { + snprintf(str, 512, ":CHAN%i:SCAL 1", i + 1); -// waveForm->setTrigLineVisible(); + tmc_write(str); + + usleep(20000); + } } - pthread_mutex_unlock(&devparms.mutexx); + scrn_timer->start(devparms.screentimerival); +} - return; - } +// this function is called when screen_thread has finished +void UI_Mainwindow::screenUpdate() { + int i, chns = 0; - if(scrn_timer->isActive() == false) - { - pthread_mutex_unlock(&devparms.mutexx); + char str[512]; - return; - } + if (device == NULL) { + pthread_mutex_unlock(&devparms.mutexx); - runButton->setStyleSheet(def_stylesh); + return; + } - singleButton->setStyleSheet(def_stylesh); + if (!devparms.connected) { + pthread_mutex_unlock(&devparms.mutexx); - if(devparms.triggerstatus == 0) - { - runButton->setStyleSheet("background: #66FF99;"); - } - else if(devparms.triggerstatus == 1) - { - singleButton->setStyleSheet("background: #FF9966;"); + return; } - else if(devparms.triggerstatus == 2) - { - runButton->setStyleSheet("background: #66FF99;"); - } - else if(devparms.triggerstatus == 3) - { - runButton->setStyleSheet("background: #66FF99;"); - } - else if(devparms.triggerstatus == 5) - { - runButton->setStyleSheet("background: #FF0066;"); - } - - if(devparms.triggersweep == 0) - { - trigModeAutoLed->setValue(true); - trigModeNormLed->setValue(false); - trigModeSingLed->setValue(false); - } - else if(devparms.triggersweep == 1) - { - trigModeAutoLed->setValue(false); - trigModeNormLed->setValue(true); - trigModeSingLed->setValue(false); + + if (!devparms.screenupdates_on) { + pthread_mutex_unlock(&devparms.mutexx); + + return; } - else if(devparms.triggersweep == 2) - { - trigModeAutoLed->setValue(false); - trigModeNormLed->setValue(false); - trigModeSingLed->setValue(true); - } - if(waveForm->hasMoveEvent() == true) - { - pthread_mutex_unlock(&devparms.mutexx); + scrn_thread->get_params(&devparms); - return; - } + if (devparms.thread_error_stat) { + scrn_timer->stop(); - for(i=0; iclear(); + pthread_mutex_unlock(&devparms.mutexx); - pthread_mutex_unlock(&devparms.mutexx); + close_connection(); - return; - } + return; + } -// if(devparms.triggerstatus != 1) // Don't plot waveform data when triggerstatus is "wait" - if(1) - { - if(devparms.math_decode_display) - { - serial_decoder(&devparms); + if (devparms.thread_result == TMC_THRD_RESULT_NONE) { + pthread_mutex_unlock(&devparms.mutexx); + + return; } - waveForm->drawCurve(&devparms, device); - } - else // trigger status is "wait" - { - waveForm->update(); - } + if (devparms.thread_result == TMC_THRD_RESULT_CMD) { + if (devparms.thread_job == TMC_THRD_JOB_TRIGEDGELEV) { + devparms.triggeredgelevel[devparms.triggeredgesource] = devparms.thread_value; - pthread_mutex_unlock(&devparms.mutexx); -} + // waveForm->setTrigLineVisible(); + } + pthread_mutex_unlock(&devparms.mutexx); -void UI_Mainwindow::set_cue_cmd(const char *str) -{ - strlcpy(devparms.cmd_cue[devparms.cmd_cue_idx_in], str, 128); + return; + } - devparms.cmd_cue_resp[devparms.cmd_cue_idx_in] = NULL; + if (scrn_timer->isActive() == false) { + pthread_mutex_unlock(&devparms.mutexx); + + return; + } - devparms.cmd_cue_idx_in++; + runButton->setStyleSheet(def_stylesh); - devparms.cmd_cue_idx_in %= TMC_CMD_CUE_SZ; + singleButton->setStyleSheet(def_stylesh); - scrn_timer_handler(); -} + if (devparms.triggerstatus == 0) { + runButton->setStyleSheet("background: #66FF99;"); + } else if (devparms.triggerstatus == 1) { + singleButton->setStyleSheet("background: #FF9966;"); + } else if (devparms.triggerstatus == 2) { + runButton->setStyleSheet("background: #66FF99;"); + } else if (devparms.triggerstatus == 3) { + runButton->setStyleSheet("background: #66FF99;"); + } else if (devparms.triggerstatus == 5) { + runButton->setStyleSheet("background: #FF0066;"); + } + + if (devparms.triggersweep == 0) { + trigModeAutoLed->setValue(true); + trigModeNormLed->setValue(false); + trigModeSingLed->setValue(false); + } else if (devparms.triggersweep == 1) { + trigModeAutoLed->setValue(false); + trigModeNormLed->setValue(true); + trigModeSingLed->setValue(false); + } else if (devparms.triggersweep == 2) { + trigModeAutoLed->setValue(false); + trigModeNormLed->setValue(false); + trigModeSingLed->setValue(true); + } + if (waveForm->hasMoveEvent() == true) { + pthread_mutex_unlock(&devparms.mutexx); -void UI_Mainwindow::set_cue_cmd(const char *str, char *ptr) -{ - strlcpy(devparms.cmd_cue[devparms.cmd_cue_idx_in], str, 128); + return; + } - ptr[0] = 0; + for (i = 0; i < MAX_CHNS; i++) { + if (!devparms.chandisplay[i]) // Display data only when channel is switched on + { + continue; + } - devparms.cmd_cue_resp[devparms.cmd_cue_idx_in] = ptr; + chns++; + } - devparms.cmd_cue_idx_in++; + if (!chns) { + waveForm->clear(); - devparms.cmd_cue_idx_in %= TMC_CMD_CUE_SZ; + pthread_mutex_unlock(&devparms.mutexx); - scrn_timer_handler(); -} + return; + } + // if(devparms.triggerstatus != 1) // Don't plot waveform data when triggerstatus is "wait" + if (1) { + if (devparms.math_decode_display) { + serial_decoder(&devparms); + } + waveForm->drawCurve(&devparms, device); + } else // trigger status is "wait" + { + waveForm->update(); + } + pthread_mutex_unlock(&devparms.mutexx); +} +void UI_Mainwindow::set_cue_cmd(const char *str) { + strlcpy(devparms.cmd_cue[devparms.cmd_cue_idx_in], str, 128); + devparms.cmd_cue_resp[devparms.cmd_cue_idx_in] = NULL; + devparms.cmd_cue_idx_in++; + devparms.cmd_cue_idx_in %= TMC_CMD_CUE_SZ; + scrn_timer_handler(); +} +void UI_Mainwindow::set_cue_cmd(const char *str, char *ptr) { + strlcpy(devparms.cmd_cue[devparms.cmd_cue_idx_in], str, 128); + ptr[0] = 0; + devparms.cmd_cue_resp[devparms.cmd_cue_idx_in] = ptr; + devparms.cmd_cue_idx_in++; + devparms.cmd_cue_idx_in %= TMC_CMD_CUE_SZ; + scrn_timer_handler(); +} diff --git a/read_settings_thread.cpp b/read_settings_thread.cpp index 564ccfd..9417444 100644 --- a/read_settings_thread.cpp +++ b/read_settings_thread.cpp @@ -202,7 +202,7 @@ void read_settings_thread::run() goto GDS_OUT_ERROR; } - if(devparms->modelserie != 1) + if(devparms->modelserie != 1 && devparms->modelserie != 7) { snprintf(str, 512, ":CHAN%i:IMP?", chn + 1); @@ -235,11 +235,11 @@ void read_settings_thread::run() } } - snprintf(str, 512, ":CHAN%i:INV?", chn + 1); + snprintf(str, 512, ":CHAN%i:INVert?", chn + 1); usleep(TMC_GDS_DELAY); - if(tmc_write(str) != 11) + if(tmc_write(str) != 14) { line = __LINE__; goto GDS_OUT_ERROR; @@ -611,7 +611,7 @@ void read_settings_thread::run() } } - if((devparms->modelserie != 1) && (devparms->modelserie != 2)) + if((devparms->modelserie != 1) && (devparms->modelserie != 2) && (devparms->modelserie != 7)) { usleep(TMC_GDS_DELAY); @@ -884,6 +884,18 @@ void read_settings_thread::run() usleep(TMC_GDS_DELAY); + if(devparms->modelserie == 7) + { + strlcpy(str, ":TRIGger:EDGe:SLOPe?", 512); + + if(tmc_write(str) != 20) + { + line = __LINE__; + goto GDS_OUT_ERROR; + } + } + else + { strlcpy(str, ":TRIG:EDG:SLOP?", 512); if(tmc_write(str) != 15) @@ -891,6 +903,9 @@ void read_settings_thread::run() line = __LINE__; goto GDS_OUT_ERROR; } + } + + if(tmc_read() < 1) { @@ -918,6 +933,18 @@ void read_settings_thread::run() usleep(TMC_GDS_DELAY); + if(devparms->modelserie == 7) + { + strlcpy(str, ":TRIGger:EDGe:SOURce?", 512); + + if(tmc_write(str) != 21) + { + line = __LINE__; + goto GDS_OUT_ERROR; + } + } + else + { strlcpy(str, ":TRIG:EDG:SOUR?", 512); if(tmc_write(str) != 15) @@ -925,6 +952,7 @@ void read_settings_thread::run() line = __LINE__; goto GDS_OUT_ERROR; } + } if(tmc_read() < 1) { @@ -972,7 +1000,7 @@ void read_settings_thread::run() usleep(TMC_GDS_DELAY); - strlcpy(str, ":TRIG:EDG:SOUR CHAN1", 512); + strlcpy(str, ":TRIG:EDGe:SOUR CHAN1", 512); if(tmc_write(str) != 20) { @@ -992,11 +1020,11 @@ void read_settings_thread::run() /* temporary change the trigger source so that we can retrieve the respective trigger levels */ for(chn=0; chnchannel_cnt; chn++) { - snprintf(str, 512, ":TRIG:EDG:SOUR CHAN%i", chn + 1); + snprintf(str, 512, ":TRIG:EDGe:SOUR CHAN%i", chn + 1); usleep(TMC_GDS_DELAY); - if(tmc_write(str) != 20) + if(tmc_write(str) != 21) { line = __LINE__; goto GDS_OUT_ERROR; @@ -1004,9 +1032,9 @@ void read_settings_thread::run() usleep(TMC_GDS_DELAY); - strlcpy(str, ":TRIG:EDG:LEV?", 512); + strlcpy(str, ":TRIG:EDGe:LEV?", 512); - if(tmc_write(str) != 14) + if(tmc_write(str) != 15) { line = __LINE__; goto GDS_OUT_ERROR; @@ -1024,11 +1052,11 @@ void read_settings_thread::run() /* now set the trigger source back to what it was before */ if(devparms->triggeredgesource <= TRIG_SRC_CHAN4) { - snprintf(str, 512, ":TRIG:EDG:SOUR CHAN%i", devparms->triggeredgesource + 1); + snprintf(str, 512, ":TRIG:EDGe:SOUR CHAN%i", devparms->triggeredgesource + 1); usleep(TMC_GDS_DELAY); - if(tmc_write(str) != 20) + if(tmc_write(str) != 21) { line = __LINE__; goto GDS_OUT_ERROR; @@ -1038,9 +1066,9 @@ void read_settings_thread::run() { usleep(TMC_GDS_DELAY); - strlcpy(str, ":TRIG:EDG:SOUR EXT", 512); + strlcpy(str, ":TRIG:EDGe:SOUR EXT", 512); - if(tmc_write(str) != 18) + if(tmc_write(str) != 19) { line = __LINE__; goto GDS_OUT_ERROR; @@ -1050,9 +1078,9 @@ void read_settings_thread::run() { usleep(TMC_GDS_DELAY); - strlcpy(str, ":TRIG:EDG:SOUR EXT5", 512); + strlcpy(str, ":TRIG:EDGe:SOUR EXT5", 512); - if(tmc_write(str) != 19) + if(tmc_write(str) != 20) { line = __LINE__; goto GDS_OUT_ERROR; @@ -1062,9 +1090,9 @@ void read_settings_thread::run() { usleep(TMC_GDS_DELAY); - strlcpy(str, ":TRIG:EDG:SOUR AC", 512); + strlcpy(str, ":TRIG:EDGe:SOUR AC", 512); - if(tmc_write(str) != 17) + if(tmc_write(str) != 18) { line = __LINE__; goto GDS_OUT_ERROR; @@ -1072,11 +1100,11 @@ void read_settings_thread::run() } else if((devparms->triggeredgesource >= TRIG_SRC_LA_D0) && (devparms->la_channel_cnt > 0)) { - snprintf(str, 512, ":TRIG:EDG:SOUR D%i", devparms->triggeredgesource - TRIG_SRC_LA_D0); + snprintf(str, 512, ":TRIG:EDGe:SOUR D%i", devparms->triggeredgesource - TRIG_SRC_LA_D0); usleep(TMC_GDS_DELAY); - if((tmc_write(str) != 17) && (tmc_write(str) != 18)) + if((tmc_write(str) != 18) && (tmc_write(str) != 19)) { line = __LINE__; goto GDS_OUT_ERROR; @@ -1341,6 +1369,12 @@ void read_settings_thread::run() usleep(TMC_GDS_DELAY); + if(devparms->modelserie == 7) + { + devparms->math_fft_split = 0; + } + else + { if(devparms->modelserie != 1) { strlcpy(str, ":CALC:FFT:SPL?", 512); @@ -1371,8 +1405,9 @@ void read_settings_thread::run() devparms->math_fft_split = atoi(device->buf); usleep(TMC_GDS_DELAY); + } - if(devparms->modelserie != 1) + if(devparms->modelserie != 1 && devparms->modelserie != 7) { strlcpy(str, ":CALC:MODE?", 512); @@ -1399,6 +1434,18 @@ void read_settings_thread::run() } else { + if(devparms->modelserie == 7) + { + strlcpy(str, ":MATH1:DISP?", 512); + + if(tmc_write(str) != 12) + { + line = __LINE__; + goto GDS_OUT_ERROR; + } + } + else + { strlcpy(str, ":MATH:DISP?", 512); if(tmc_write(str) != 11) @@ -1406,6 +1453,7 @@ void read_settings_thread::run() line = __LINE__; goto GDS_OUT_ERROR; } + } if(tmc_read() < 1) { @@ -1419,6 +1467,18 @@ void read_settings_thread::run() { usleep(TMC_GDS_DELAY); + if(devparms->modelserie == 7) + { + strlcpy(str, ":MATH1:OPER?", 512); + + if(tmc_write(str) != 12) + { + line = __LINE__; + goto GDS_OUT_ERROR; + } + } + else + { strlcpy(str, ":MATH:OPER?", 512); if(tmc_write(str) != 11) @@ -1426,6 +1486,7 @@ void read_settings_thread::run() line = __LINE__; goto GDS_OUT_ERROR; } + } if(tmc_read() < 1) { @@ -1446,7 +1507,17 @@ void read_settings_thread::run() usleep(TMC_GDS_DELAY); - if(devparms->modelserie != 1) + if(devparms->modelserie == 7) + { + strlcpy(str, ":MATH1:FFT:UNIT?", 512); + + if(tmc_write(str) != 16) + { + line = __LINE__; + goto GDS_OUT_ERROR; + } + } + else if(devparms->modelserie != 1) { strlcpy(str, ":CALC:FFT:VSM?", 512); @@ -1492,7 +1563,17 @@ void read_settings_thread::run() usleep(TMC_GDS_DELAY); - if(devparms->modelserie != 1) + if(devparms->modelserie == 7) + { + strlcpy(str, ":MATH1:FFT:SOUR?", 512); + + if(tmc_write(str) != 16) + { + line = __LINE__; + goto GDS_OUT_ERROR; + } + } + else if(devparms->modelserie != 1) { strlcpy(str, ":CALC:FFT:SOUR?", 512); @@ -1544,7 +1625,25 @@ void read_settings_thread::run() devparms->current_screen_sf = 100.0 / devparms->timebasescale; - if(devparms->modelserie != 1) + if(devparms->modelserie == 7) + { + strlcpy(str, ":MATH1:FFT:HSC?", 512); + + if(tmc_write(str) != 15) + { + line = __LINE__; + goto GDS_OUT_ERROR; + } + + if(tmc_read() < 1) + { + line = __LINE__; + goto GDS_OUT_ERROR; + } + + devparms->math_fft_hscale = atof(device->buf); + } + else if(devparms->modelserie != 1) { strlcpy(str, ":CALC:FFT:HSP?", 512); @@ -1611,7 +1710,17 @@ void read_settings_thread::run() usleep(TMC_GDS_DELAY); - if(devparms->modelserie != 1) + if(devparms->modelserie == 7) + { + strlcpy(str, ":MATH1:FFT:HCEN?", 512); + + if(tmc_write(str) != 16) + { + line = __LINE__; + goto GDS_OUT_ERROR; + } + } + else if(devparms->modelserie != 1) { strlcpy(str, ":CALC:FFT:HCEN?", 512); @@ -1642,7 +1751,25 @@ void read_settings_thread::run() usleep(TMC_GDS_DELAY); - if(devparms->modelserie != 1) + if(devparms->modelserie == 7) + { + strlcpy(str, ":MATH1:OFFS?", 512); + + if(tmc_write(str) != 12) + { + line = __LINE__; + goto GDS_OUT_ERROR; + } + + if(tmc_read() < 1) + { + line = __LINE__; + goto GDS_OUT_ERROR; + } + + devparms->fft_voffset = atof(device->buf); + } + else if(devparms->modelserie != 1) { strlcpy(str, ":CALC:FFT:VOFF?", 512); @@ -1681,7 +1808,25 @@ void read_settings_thread::run() usleep(TMC_GDS_DELAY); - if(devparms->modelserie != 1) + if(devparms->modelserie == 7) + { + strlcpy(str, ":MATH1:SCAL?", 512); + + if(tmc_write(str) != 12) + { + line = __LINE__; + goto GDS_OUT_ERROR; + } + + if(tmc_read() < 1) + { + line = __LINE__; + goto GDS_OUT_ERROR; + } + + devparms->fft_vscale = atof(device->buf); + } + else if(devparms->modelserie != 1) { strlcpy(str, ":CALC:FFT:VSC?", 512); @@ -1858,7 +2003,17 @@ void read_settings_thread::run() usleep(TMC_GDS_DELAY); - if(devparms->modelserie != 1) + if(devparms->modelserie == 7) + { + strlcpy(str, ":BUS1:POSition?", 512); + + if(tmc_write(str) != 15) + { + line = __LINE__; + goto GDS_OUT_ERROR; + } + } + else if(devparms->modelserie != 1) { strlcpy(str, ":BUS1:SPI:OFFS?", 512); @@ -2869,7 +3024,37 @@ void read_settings_thread::run() usleep(TMC_GDS_DELAY); - if(devparms->modelserie == 1) + if(devparms->modelserie == 7) + { + strlcpy(str, ":RECord:WRECord:ENABle?", 512); + + if(tmc_write(str) != 23) + { + line = __LINE__; + goto GDS_OUT_ERROR; + } + + if(tmc_read() < 1) + { + line = __LINE__; + goto GDS_OUT_ERROR; + } + + if(!strcmp(device->buf, "1")) + { + devparms->func_wrec_enable = 1; + } + else if(!strcmp(device->buf, "0")) + { + devparms->func_wrec_enable = 0; + } + else + { + line = __LINE__; + goto GDS_OUT_ERROR; + } + } + else if(devparms->modelserie == 1) { strlcpy(str, ":FUNC:WREC:ENAB?", 512); diff --git a/screen_thread.cpp b/screen_thread.cpp index 8ed0e5a..8c5db89 100644 --- a/screen_thread.cpp +++ b/screen_thread.cpp @@ -498,7 +498,7 @@ void screen_thread::run() { usleep(TMC_GDS_DELAY); - if(tmc_write(":TRIG:EDG:LEV?") != 14) + if(tmc_write(":TRIGger:EDGE:LEVel?") != 20) { printf("Can not write to device.\n"); line = __LINE__; @@ -561,11 +561,21 @@ void screen_thread::run() { if((!strncmp(deviceparms->cmd_cue[params.cmd_cue_idx_out], ":TIM:SCAL ", 10)) || (!strncmp(deviceparms->cmd_cue[params.cmd_cue_idx_out], ":MATH:OPER FFT", 14)) || + (!strncmp(deviceparms->cmd_cue[params.cmd_cue_idx_out], ":MATH1:OPER FFT", 15)) || (!strncmp(deviceparms->cmd_cue[params.cmd_cue_idx_out], ":CALC:MODE FFT", 14))) { usleep(TMC_GDS_DELAY * 10); - if(params.modelserie != 1) + if(params.modelserie == 7) + { + if(tmc_write(":MATH1:FFT:HSC?") != 15) + { + printf("Can not write to device.\n"); + line = __LINE__; + goto OUT_ERROR; + } + } + else if(params.modelserie != 1) { if(tmc_write(":CALC:FFT:HSP?") != 14) { @@ -594,7 +604,16 @@ void screen_thread::run() usleep(TMC_GDS_DELAY); - if(params.modelserie != 1) + if(params.modelserie == 7) + { + if(tmc_write(":MATH1:FFT:HCEN?") != 16) + { + printf("Can not write to device.\n"); + line = __LINE__; + goto OUT_ERROR; + } + } + else if(params.modelserie != 1) { if(tmc_write(":CALC:FFT:HCEN?") != 15) { diff --git a/signalcurve.cpp b/signalcurve.cpp index d0e7651..f71e34e 100644 --- a/signalcurve.cpp +++ b/signalcurve.cpp @@ -1992,7 +1992,7 @@ void SignalCurve::mouseReleaseEvent(QMouseEvent *release_event) mainwindow->statusLabel->setText(str); - snprintf(str, 512, ":TRIG:EDG:LEV %e", devparms->triggeredgelevel[devparms->triggeredgesource]); + snprintf(str, 512, ":TRIGger:EDGE:LEVel %e", devparms->triggeredgelevel[devparms->triggeredgesource]); mainwindow->set_cue_cmd(str); diff --git a/timer_handlers.cpp b/timer_handlers.cpp index 98d7b0c..7250b74 100644 --- a/timer_handlers.cpp +++ b/timer_handlers.cpp @@ -164,7 +164,7 @@ void UI_Mainwindow::trigAdjDial_timer_handler() return; } - snprintf(str, 512, ":TRIG:EDG:LEV %e", devparms.triggeredgelevel[chn]); + snprintf(str, 512, ":TRIGger:EDGE:LEVel %e", devparms.triggeredgelevel[chn]); set_cue_cmd(str); } From 18c9eb44c6c5eec4f726cc591334fec2c0b77b50 Mon Sep 17 00:00:00 2001 From: Carlos de Paula Date: Mon, 25 Nov 2024 18:18:34 -0300 Subject: [PATCH 2/2] Fix exp -> pow --- mainwindow.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mainwindow.cpp b/mainwindow.cpp index 8dc85d6..8430abf 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -762,7 +762,7 @@ double UI_Mainwindow::get_stepsize_divide_by_1000(double val) { exp++; } - val = exp10(exp - 2); + val = pow(10, exp - 2); if ((val < 1e-13) && (val > -1e-13)) { return 0;