DS1000Z Plus series: trigger menu: trigger source: added logic analyzer sources D0 to D15.

merge-requests/1/merge
Teuniz 2021-05-29 17:41:22 +02:00
rodzic 835033ec0e
commit 9c0328387b
6 zmienionych plików z 259 dodań i 90 usunięć

107
global.h
Wyświetl plik

@ -35,64 +35,90 @@
#define PROGRAM_NAME "DSRemote"
#define PROGRAM_VERSION "0.37_2105291436"
#define PROGRAM_VERSION "0.37_2105291739"
#define MAX_PATHLEN 1024
#define MAX_PATHLEN (1024)
#define MAX_CHNS 4
#define MAX_CHNS (4)
#define ADJDIAL_TIMER_IVAL_1 4000
#define ADJDIAL_TIMER_IVAL_2 2000
#define ADJDIAL_TIMER_IVAL_1 (4000)
#define ADJDIAL_TIMER_IVAL_2 (2000)
#define SCRN_SHOT_BMP_SZ 1152054
#define SCRN_SHOT_BMP_SZ (1152054)
#define WAVFRM_MAX_BUFSZ (1024 * 1024 * 2)
#define FFT_MAX_BUFSZ 4096
#define FFT_MAX_BUFSZ (4096)
#define ADJ_DIAL_FUNC_NONE 0
#define ADJ_DIAL_FUNC_HOLDOFF 1
#define ADJ_DIAL_FUNC_ACQ_AVG 2
#define ADJ_DIAL_FUNC_NONE (0)
#define ADJ_DIAL_FUNC_HOLDOFF (1)
#define ADJ_DIAL_FUNC_ACQ_AVG (2)
#define NAV_DIAL_FUNC_NONE 0
#define NAV_DIAL_FUNC_HOLDOFF 1
#define NAV_DIAL_FUNC_NONE (0)
#define NAV_DIAL_FUNC_HOLDOFF (1)
#define LABEL_TIMER_IVAL 1500
#define LABEL_TIMER_IVAL (1500)
#define LABEL_ACTIVE_NONE 0
#define LABEL_ACTIVE_CHAN1 1
#define LABEL_ACTIVE_CHAN2 2
#define LABEL_ACTIVE_CHAN3 3
#define LABEL_ACTIVE_CHAN4 4
#define LABEL_ACTIVE_TRIG 5
#define LABEL_ACTIVE_FFT 6
#define LABEL_ACTIVE_NONE (0)
#define LABEL_ACTIVE_CHAN1 (1)
#define LABEL_ACTIVE_CHAN2 (2)
#define LABEL_ACTIVE_CHAN3 (3)
#define LABEL_ACTIVE_CHAN4 (4)
#define LABEL_ACTIVE_TRIG (5)
#define LABEL_ACTIVE_FFT (6)
#define TMC_GDS_DELAY 10000
#define TMC_GDS_DELAY (10000)
#define TMC_CMD_CUE_SZ 1024
#define TMC_CMD_CUE_SZ (1024)
#define TMC_THRD_RESULT_NONE 0
#define TMC_THRD_RESULT_SCRN 1
#define TMC_THRD_RESULT_CMD 2
#define TMC_THRD_RESULT_NONE (0)
#define TMC_THRD_RESULT_SCRN (1)
#define TMC_THRD_RESULT_CMD (2)
#define TMC_THRD_JOB_NONE 0
#define TMC_THRD_JOB_TRIGEDGELEV 1
#define TMC_THRD_JOB_TIMDELAY 2
#define TMC_THRD_JOB_FFTHZDIV 3
#define TMC_THRD_JOB_NONE (0)
#define TMC_THRD_JOB_TRIGEDGELEV (1)
#define TMC_THRD_JOB_TIMDELAY (2)
#define TMC_THRD_JOB_FFTHZDIV (3)
#define TMC_DIAL_TIMER_DELAY 300
#define TMC_DIAL_TIMER_DELAY (300)
#define DECODE_MODE_TAB_PAR 0
#define DECODE_MODE_TAB_UART 1
#define DECODE_MODE_TAB_SPI 2
#define DECODE_MODE_TAB_I2C 3
#define DECODE_MODE_TAB_PAR (0)
#define DECODE_MODE_TAB_UART (1)
#define DECODE_MODE_TAB_SPI (2)
#define DECODE_MODE_TAB_I2C (3)
#define DECODE_MODE_PAR 0
#define DECODE_MODE_UART 1
#define DECODE_MODE_SPI 2
#define DECODE_MODE_I2C 3
#define DECODE_MODE_PAR (0)
#define DECODE_MODE_UART (1)
#define DECODE_MODE_SPI (2)
#define DECODE_MODE_I2C (3)
#define DECODE_MAX_CHARS 512
#define DECODE_MAX_CHARS (512)
#define TRIG_SRC_CHAN1 (0)
#define TRIG_SRC_CHAN2 (1)
#define TRIG_SRC_CHAN3 (2)
#define TRIG_SRC_CHAN4 (3)
#define TRIG_SRC_EXT (4)
#define TRIG_SRC_EXT5 (5)
#define TRIG_SRC_ACL (6)
#define TRIG_SRC_LA_D0 (7)
#define TRIG_SRC_LA_D1 (8)
#define TRIG_SRC_LA_D2 (9)
#define TRIG_SRC_LA_D3 (10)
#define TRIG_SRC_LA_D4 (11)
#define TRIG_SRC_LA_D5 (12)
#define TRIG_SRC_LA_D6 (13)
#define TRIG_SRC_LA_D7 (14)
#define TRIG_SRC_LA_D8 (15)
#define TRIG_SRC_LA_D9 (16)
#define TRIG_SRC_LA_D10 (17)
#define TRIG_SRC_LA_D11 (18)
#define TRIG_SRC_LA_D12 (19)
#define TRIG_SRC_LA_D13 (20)
#define TRIG_SRC_LA_D14 (21)
#define TRIG_SRC_LA_D15 (22)
#define MAX_TRIG_SRCS (23)
@ -130,6 +156,7 @@ struct device_settings
int channel_cnt; // Device has 2 or 4 channels
int bandwidth; // Bandwidth in MHz
int la_channel_cnt; // Device has 0 or 16 logic analyzer channels
int chanbwlimit[MAX_CHNS]; // 20, 250 or 0MHz (off)
int chancoupling[MAX_CHNS]; // 0=GND, 1=DC, 2=AC
@ -160,7 +187,7 @@ struct device_settings
int timebasexy2display; // XY mode for channel 3 & 4, 1=on, 0=off
int triggercoupling; // 0=AC, 1=DC, 2=LFReject, 3=HFReject
double triggeredgelevel[7]; // Trigger level
double triggeredgelevel[MAX_TRIG_SRCS]; // Trigger level
int triggeredgeslope; // 0=POS, 1=NEG, 2= RFAL
int triggeredgesource; // 0=chan1, 1=chan2, 2=chan3, 3=chan4, 4=ext, 5=ext5, 6=acl, 7=D0, 8=D1, ... ,21=D14, 22=D15
double triggerholdoff; // min. is 16nSec or 100nSec depends on series

Wyświetl plik

@ -3745,6 +3745,25 @@ void UI_Mainwindow::trigMenuButtonClicked()
}
}
submenusource.addAction("AC Line", this, SLOT(trigger_source_acl()));
if(devparms.la_channel_cnt == 16)
{
submenusource.addAction("D0", this, SLOT(trigger_source_la_d0()));
submenusource.addAction("D1", this, SLOT(trigger_source_la_d1()));
submenusource.addAction("D2", this, SLOT(trigger_source_la_d2()));
submenusource.addAction("D3", this, SLOT(trigger_source_la_d3()));
submenusource.addAction("D4", this, SLOT(trigger_source_la_d4()));
submenusource.addAction("D5", this, SLOT(trigger_source_la_d5()));
submenusource.addAction("D6", this, SLOT(trigger_source_la_d6()));
submenusource.addAction("D7", this, SLOT(trigger_source_la_d7()));
submenusource.addAction("D8", this, SLOT(trigger_source_la_d8()));
submenusource.addAction("D9", this, SLOT(trigger_source_la_d9()));
submenusource.addAction("D10", this, SLOT(trigger_source_la_d10()));
submenusource.addAction("D11", this, SLOT(trigger_source_la_d11()));
submenusource.addAction("D12", this, SLOT(trigger_source_la_d12()));
submenusource.addAction("D13", this, SLOT(trigger_source_la_d13()));
submenusource.addAction("D14", this, SLOT(trigger_source_la_d14()));
submenusource.addAction("D15", this, SLOT(trigger_source_la_d15()));
}
actionList = submenusource.actions();
if(devparms.modelserie == 6 || devparms.modelserie == 4)
{
@ -3794,6 +3813,15 @@ void UI_Mainwindow::trigMenuButtonClicked()
actionList[4]->setCheckable(true);
actionList[4]->setChecked(true);
}
if(devparms.la_channel_cnt > 0)
{
if(devparms.triggeredgesource >= TRIG_SRC_LA_D0)
{
actionList[devparms.triggeredgesource - 2]->setCheckable(true);
actionList[devparms.triggeredgesource - 2]->setChecked(true);
}
}
}
menu.addMenu(&submenusource);
@ -3920,6 +3948,85 @@ void UI_Mainwindow::trigger_source_acl()
}
void UI_Mainwindow::trigger_source_la_d0(void)
{
trigger_source_la(0);
}
void UI_Mainwindow::trigger_source_la_d1(void)
{
trigger_source_la(1);
}
void UI_Mainwindow::trigger_source_la_d2(void)
{
trigger_source_la(2);
}
void UI_Mainwindow::trigger_source_la_d3(void)
{
trigger_source_la(3);
}
void UI_Mainwindow::trigger_source_la_d4(void)
{
trigger_source_la(4);
}
void UI_Mainwindow::trigger_source_la_d5(void)
{
trigger_source_la(5);
}
void UI_Mainwindow::trigger_source_la_d6(void)
{
trigger_source_la(6);
}
void UI_Mainwindow::trigger_source_la_d7(void)
{
trigger_source_la(7);
}
void UI_Mainwindow::trigger_source_la_d8(void)
{
trigger_source_la(8);
}
void UI_Mainwindow::trigger_source_la_d9(void)
{
trigger_source_la(9);
}
void UI_Mainwindow::trigger_source_la_d10(void)
{
trigger_source_la(10);
}
void UI_Mainwindow::trigger_source_la_d11(void)
{
trigger_source_la(11);
}
void UI_Mainwindow::trigger_source_la_d12(void)
{
trigger_source_la(12);
}
void UI_Mainwindow::trigger_source_la_d13(void)
{
trigger_source_la(13);
}
void UI_Mainwindow::trigger_source_la_d14(void)
{
trigger_source_la(14);
}
void UI_Mainwindow::trigger_source_la_d15(void)
{
trigger_source_la(15);
}
void UI_Mainwindow::trigger_source_la(int src)
{
char str[128]="";
devparms.triggeredgesource = TRIG_SRC_LA_D0 + src;
snprintf(str, 512, "Trigger source D%i", src);
statusLabel->setText(str);
snprintf(str, 512, ":TRIG:EDG:SOUR D%i", src);
set_cue_cmd(str);
}
void UI_Mainwindow::trigger_coupling_ac()
{
devparms.triggercoupling = 0;

Wyświetl plik

@ -1128,6 +1128,8 @@ void UI_Mainwindow::get_device_model(const char *str)
{
devparms.channel_cnt = 4;
devparms.la_channel_cnt = 16;
devparms.bandwidth = 70;
devparms.modelserie = 1;
@ -1137,6 +1139,8 @@ void UI_Mainwindow::get_device_model(const char *str)
{
devparms.channel_cnt = 4;
devparms.la_channel_cnt = 16;
devparms.bandwidth = 70;
devparms.modelserie = 1;
@ -1164,6 +1168,8 @@ void UI_Mainwindow::get_device_model(const char *str)
{
devparms.channel_cnt = 4;
devparms.la_channel_cnt = 16;
devparms.bandwidth = 100;
devparms.modelserie = 1;
@ -1173,6 +1179,8 @@ void UI_Mainwindow::get_device_model(const char *str)
{
devparms.channel_cnt = 4;
devparms.la_channel_cnt = 16;
devparms.bandwidth = 100;
devparms.modelserie = 1;

Wyświetl plik

@ -320,6 +320,23 @@ private slots:
void trigger_source_ext();
void trigger_source_ext5();
void trigger_source_acl();
void trigger_source_la_d0(void);
void trigger_source_la_d1(void);
void trigger_source_la_d2(void);
void trigger_source_la_d3(void);
void trigger_source_la_d4(void);
void trigger_source_la_d5(void);
void trigger_source_la_d6(void);
void trigger_source_la_d7(void);
void trigger_source_la_d8(void);
void trigger_source_la_d9(void);
void trigger_source_la_d10(void);
void trigger_source_la_d11(void);
void trigger_source_la_d12(void);
void trigger_source_la_d13(void);
void trigger_source_la_d14(void);
void trigger_source_la_d15(void);
void trigger_source_la(int);
void trigger_coupling_dc();
void trigger_coupling_ac();
void trigger_coupling_lfreject();

Wyświetl plik

@ -906,49 +906,54 @@ void read_settings_thread::run()
if(!strcmp(device->buf, "CHAN1"))
{
devparms->triggeredgesource = 0;
devparms->triggeredgesource = TRIG_SRC_CHAN1;
}
else if(!strcmp(device->buf, "CHAN2"))
{
devparms->triggeredgesource = 1;
devparms->triggeredgesource = TRIG_SRC_CHAN2;
}
else if(!strcmp(device->buf, "CHAN3"))
{
devparms->triggeredgesource = 2;
devparms->triggeredgesource = TRIG_SRC_CHAN3;
}
else if(!strcmp(device->buf, "CHAN4"))
{
devparms->triggeredgesource = 3;
devparms->triggeredgesource = TRIG_SRC_CHAN4;
}
else if(!strcmp(device->buf, "EXT"))
{
devparms->triggeredgesource = 4;
devparms->triggeredgesource = TRIG_SRC_EXT;
}
else if(!strcmp(device->buf, "EXT5"))
{
devparms->triggeredgesource = 5;
devparms->triggeredgesource = TRIG_SRC_EXT;
} // DS1000Z: "AC", DS6000: "ACL" !!
else if((!strcmp(device->buf, "AC")) || (!strcmp(device->buf, "ACL")))
{
devparms->triggeredgesource = 6;
devparms->triggeredgesource = TRIG_SRC_ACL;
}
else if((device->buf[0] == 'D') && (isdigit(device->buf[1])))
{
//FIXME (not supported yet!)
// devparms->triggeredgesource = 7 + atoi(device->buf + 1);
devparms->triggeredgesource = 0;
usleep(TMC_GDS_DELAY);
strlcpy(str, ":TRIG:EDG:SOUR CHAN1", 512);
if(tmc_write(str) != 20)
if(devparms->la_channel_cnt > 0)
{
line = __LINE__;
goto GDS_OUT_ERROR;
devparms->triggeredgesource = 7 + atoi(device->buf + 1);
}
else
{
devparms->triggeredgesource = 0;
usleep(TMC_GDS_DELAY);
usleep(TMC_GDS_DELAY);
strlcpy(str, ":TRIG:EDG:SOUR CHAN1", 512);
if(tmc_write(str) != 20)
{
line = __LINE__;
goto GDS_OUT_ERROR;
}
usleep(TMC_GDS_DELAY);
}
}
else
{

Wyświetl plik

@ -522,7 +522,7 @@ void SignalCurve::drawWidget(QPainter *painter, int curve_w, int curve_h)
}
else
{
if(devparms->triggeredgesource < 4)
if(devparms->triggeredgesource <= TRIG_SRC_CHAN4)
{
trig_level_arrow_pos = (curve_h / 2) - ((devparms->triggeredgelevel[devparms->triggeredgesource] + devparms->chanoffset[devparms->triggeredgesource]) / ((devparms->chanscale[devparms->triggeredgesource] * devparms->vertdivisions) / curve_h));
@ -1184,36 +1184,35 @@ void SignalCurve::drawTopLabels(QPainter *painter)
painter->drawText(670, 20, "T");
convert_to_metric_suffix(str, devparms->triggeredgelevel[devparms->triggeredgesource], 2, 512);
strlcat(str, devparms->chanunitstr[devparms->chanunit[devparms->triggeredgesource]], 512);
if(devparms->triggeredgesource < 4)
if(devparms->triggeredgesource <= TRIG_SRC_CHAN4)
{
convert_to_metric_suffix(str, devparms->triggeredgelevel[devparms->triggeredgesource], 2, 512);
strlcat(str, devparms->chanunitstr[devparms->chanunit[devparms->triggeredgesource]], 512);
painter->setPen(SignalColor[devparms->triggeredgesource]);
painter->drawText(735, 5, 85, 20, Qt::AlignCenter, str);
}
else
{
switch(devparms->triggeredgesource)
{
case 4:
case 5: painter->setPen(Qt::green);
break;
case 6: painter->setPen(QColor(255, 64, 0));
break;
case TRIG_SRC_EXT:
case TRIG_SRC_EXT5: painter->setPen(Qt::green);
break;
case TRIG_SRC_ACL: painter->setPen(QColor(255, 64, 0));
break;
default: painter->setPen(Qt::white);
break;
}
}
if(devparms->triggeredgesource != 6)
{
painter->drawText(735, 5, 85, 20, Qt::AlignCenter, str);
}
path = QPainterPath();
path.addRoundedRect(725, 7, 15, 15, 3, 3);
if(devparms->triggeredgesource < 4)
if(devparms->triggeredgesource <= TRIG_SRC_CHAN4)
{
painter->fillPath(path, SignalColor[devparms->triggeredgesource]);
@ -1223,13 +1222,16 @@ void SignalCurve::drawTopLabels(QPainter *painter)
{
switch(devparms->triggeredgesource)
{
case 4:
case 5: painter->fillPath(path, Qt::green);
strlcpy(str, "E", 512);
break;
case 6: painter->fillPath(path, QColor(255, 64, 0));
strlcpy(str, "AC", 512);
break;
case TRIG_SRC_EXT:
case TRIG_SRC_EXT5: painter->fillPath(path, Qt::green);
strlcpy(str, "E", 512);
break;
case TRIG_SRC_ACL: painter->fillPath(path, QColor(255, 64, 0));
strlcpy(str, "AC", 512);
break;
default: painter->fillPath(path, Qt::white);
snprintf(str, 512, "D%i", devparms->triggeredgesource - TRIG_SRC_LA_D0);
break;
}
}
@ -1755,12 +1757,15 @@ void SignalCurve::mousePressEvent(QMouseEvent *press_event)
((trig_level_arrow_pos < 0) && (m_x >= w) && (m_x < (w + 18)) && (m_y >= 0) && (m_y < 22)) ||
((trig_level_arrow_pos > h) && (m_x >= w) && (m_x < (w + 18)) && (m_y <= h) && (m_y > (h - 22))))
{
trig_level_arrow_moving = 1;
use_move_events = 1;
trig_line_visible = 1;
setMouseTracking(true);
mouse_old_x = m_x;
mouse_old_y = m_y;
if(devparms->triggeredgesource <= TRIG_SRC_CHAN4)
{
trig_level_arrow_moving = 1;
use_move_events = 1;
trig_line_visible = 1;
setMouseTracking(true);
mouse_old_x = m_x;
mouse_old_y = m_y;
}
}
else
{
@ -1946,7 +1951,7 @@ void SignalCurve::mouseReleaseEvent(QMouseEvent *release_event)
}
else if(trig_level_arrow_moving)
{
if(devparms->triggeredgesource > 3)
if(devparms->triggeredgesource > TRIG_SRC_CHAN4)
{
return;
}