Added extra vertical divisions on display to increase dynamic range for DS1000Z series.

merge-requests/1/head
Teuniz 2016-12-18 16:36:21 +01:00
rodzic cfd6d3404d
commit fa24b5f932
6 zmienionych plików z 98 dodań i 18 usunięć

Wyświetl plik

@ -35,7 +35,7 @@
#define PROGRAM_NAME "DSRemote"
#define PROGRAM_VERSION "0.33_1612111915"
#define PROGRAM_VERSION "0.33_1612181629"
#define MAX_PATHLEN 4096
@ -121,6 +121,8 @@ struct device_settings
char softwvers[128];
int modelserie; // 1=DS1000, 2=DS2000, etc.
int hordivisions; // number of horizontal divisions, 12 or 14
int vertdivisions; // number of vertical divisions, 8 or 10
int use_extra_vertdivisions; // If 1: use 10 vertical divisions instead of 8, DS1000Z only
int screentimerival;

Wyświetl plik

@ -855,6 +855,8 @@ void UI_Mainwindow::get_device_model(const char *str)
devparms.hordivisions = 14;
devparms.vertdivisions = 8;
if(!strcmp(str, "DS6104"))
{
devparms.channel_cnt = 4;
@ -1053,6 +1055,8 @@ void UI_Mainwindow::get_device_model(const char *str)
devparms.modelserie = 1;
devparms.hordivisions = 12;
if(devparms.use_extra_vertdivisions) devparms.vertdivisions = 10;
}
if(!strcmp(str, "DS1074Z"))
@ -1064,6 +1068,8 @@ void UI_Mainwindow::get_device_model(const char *str)
devparms.modelserie = 1;
devparms.hordivisions = 12;
if(devparms.use_extra_vertdivisions) devparms.vertdivisions = 10;
}
if(!strcmp(str, "DS1074Z-S"))
@ -1075,6 +1081,8 @@ void UI_Mainwindow::get_device_model(const char *str)
devparms.modelserie = 1;
devparms.hordivisions = 12;
if(devparms.use_extra_vertdivisions) devparms.vertdivisions = 10;
}
if(!strcmp(str, "DS1104Z"))
@ -1086,6 +1094,8 @@ void UI_Mainwindow::get_device_model(const char *str)
devparms.modelserie = 1;
devparms.hordivisions = 12;
if(devparms.use_extra_vertdivisions) devparms.vertdivisions = 10;
}
if(!strcmp(str, "DS1104Z-S"))
@ -1097,6 +1107,8 @@ void UI_Mainwindow::get_device_model(const char *str)
devparms.modelserie = 1;
devparms.hordivisions = 12;
if(devparms.use_extra_vertdivisions) devparms.vertdivisions = 10;
}
if(devparms.channel_cnt && devparms.bandwidth && devparms.modelserie)

Wyświetl plik

@ -128,6 +128,23 @@ UI_Mainwindow::UI_Mainwindow()
devparms.hordivisions = 14;
devparms.vertdivisions = 8;
devparms.use_extra_vertdivisions = settings.value("gui/use_extra_vertdivisions", 1).toInt();
if(devparms.use_extra_vertdivisions)
{
devparms.use_extra_vertdivisions = 1;
settings.setValue("gui/use_extra_vertdivisions", devparms.use_extra_vertdivisions);
}
else
{
devparms.use_extra_vertdivisions = 0;
settings.setValue("gui/use_extra_vertdivisions", devparms.use_extra_vertdivisions);
}
devparms.current_screen_sf = 1;
devparms.fft_vscale = 10.0;

Wyświetl plik

@ -172,6 +172,22 @@ UI_settings_window::UI_settings_window(QWidget *parnt)
showfpsCheckbox->setCheckState(Qt::Unchecked);
}
extendvertdivLabel = new QLabel(this);
extendvertdivLabel->setGeometry(40, 270, 120, 35);
extendvertdivLabel->setText("Use extended\n vertical range");
extendvertdivCheckbox = new QCheckBox(this);
extendvertdivCheckbox->setGeometry(180, 270, 120, 35);
extendvertdivCheckbox->setTristate(false);
if(mainwindow->devparms.use_extra_vertdivisions)
{
extendvertdivCheckbox->setCheckState(Qt::Checked);
}
else
{
extendvertdivCheckbox->setCheckState(Qt::Unchecked);
}
applyButton = new QPushButton(this);
applyButton->setGeometry(40, 450, 100, 25);
applyButton->setText("Apply");
@ -207,10 +223,11 @@ UI_settings_window::UI_settings_window(QWidget *parnt)
QObject::connect(applyButton, SIGNAL(clicked()), this, SLOT(applyButtonClicked()));
}
QObject::connect(cancelButton, SIGNAL(clicked()), this, SLOT(close()));
QObject::connect(refreshSpinbox, SIGNAL(valueChanged(int)), this, SLOT(refreshSpinboxChanged(int)));
QObject::connect(invScrShtCheckbox, SIGNAL(stateChanged(int)), this, SLOT(invScrShtCheckboxChanged(int)));
QObject::connect(showfpsCheckbox, SIGNAL(stateChanged(int)), this, SLOT(showfpsCheckboxChanged(int)));
QObject::connect(cancelButton, SIGNAL(clicked()), this, SLOT(close()));
QObject::connect(refreshSpinbox, SIGNAL(valueChanged(int)), this, SLOT(refreshSpinboxChanged(int)));
QObject::connect(invScrShtCheckbox, SIGNAL(stateChanged(int)), this, SLOT(invScrShtCheckboxChanged(int)));
QObject::connect(showfpsCheckbox, SIGNAL(stateChanged(int)), this, SLOT(showfpsCheckboxChanged(int)));
QObject::connect(extendvertdivCheckbox, SIGNAL(stateChanged(int)), this, SLOT(extendvertdivCheckboxChanged(int)));
exec();
}
@ -330,6 +347,35 @@ void UI_settings_window::showfpsCheckboxChanged(int state)
}
void UI_settings_window::extendvertdivCheckboxChanged(int state)
{
QSettings settings;
if(state == Qt::Checked)
{
mainwindow->devparms.use_extra_vertdivisions = 1;
}
else
{
mainwindow->devparms.use_extra_vertdivisions = 0;
}
settings.setValue("gui/use_extra_vertdivisions", mainwindow->devparms.use_extra_vertdivisions);
if(mainwindow->devparms.modelserie == 1)
{
if(mainwindow->devparms.use_extra_vertdivisions == 1)
{
mainwindow->devparms.vertdivisions = 10;
}
else
{
mainwindow->devparms.vertdivisions = 8;
}
}
}

Wyświetl plik

@ -77,10 +77,12 @@ QSpinBox *refreshSpinbox,
QLabel *refreshLabel,
*invScrShtLabel,
*showfpsLabel;
*showfpsLabel,
*extendvertdivLabel;
QCheckBox *invScrShtCheckbox,
*showfpsCheckbox;
*showfpsCheckbox,
*extendvertdivCheckbox;
UI_Mainwindow *mainwindow;
@ -90,6 +92,7 @@ void applyButtonClicked();
void refreshSpinboxChanged(int);
void invScrShtCheckboxChanged(int);
void showfpsCheckboxChanged(int);
void extendvertdivCheckboxChanged(int);
};

Wyświetl plik

@ -264,9 +264,9 @@ void SignalCurve::drawWidget(QPainter *painter, int curve_w, int curve_h)
painter->drawLine(step * i, curve_h - 1, step * i, 0);
}
step = curve_h / 8.0;
step = curve_h / (double)devparms->vertdivisions;
for(i=1; i<8; i++)
for(i=1; i<devparms->vertdivisions; i++)
{
painter->drawLine(0, step * i, curve_w - 1, step * i);
}
@ -306,9 +306,9 @@ void SignalCurve::drawWidget(QPainter *painter, int curve_w, int curve_h)
}
}
step = curve_h / 40.0;
step = curve_h / (5.0 * devparms->vertdivisions);
for(i=1; i<40; i++)
for(i=1; i<(5 * devparms->vertdivisions); i++)
{
step2 = step * i;
@ -346,7 +346,7 @@ void SignalCurve::drawWidget(QPainter *painter, int curve_w, int curve_h)
}
else
{
v_sense = -((double)curve_h / 200.0);
v_sense = -((double)curve_h / (25.0 * devparms->vertdivisions));
}
drawTrigCenterArrow(painter, curve_w / 2, 0);
@ -364,7 +364,7 @@ void SignalCurve::drawWidget(QPainter *painter, int curve_w, int curve_h)
}
else
{
chan_arrow_pos[chn] = (curve_h / 2) - (devparms->chanoffset[chn] / ((devparms->chanscale[chn] * 8) / curve_h));
chan_arrow_pos[chn] = (curve_h / 2) - (devparms->chanoffset[chn] / ((devparms->chanscale[chn] * devparms->vertdivisions) / curve_h));
if(chan_arrow_pos[chn] < 0)
{
@ -468,7 +468,7 @@ void SignalCurve::drawWidget(QPainter *painter, int curve_w, int curve_h)
{
if(devparms->triggeredgesource < 4)
{
trig_level_arrow_pos = (curve_h / 2) - ((devparms->triggeredgelevel[devparms->triggeredgesource] + devparms->chanoffset[devparms->triggeredgesource]) / ((devparms->chanscale[devparms->triggeredgesource] * 8) / curve_h));
trig_level_arrow_pos = (curve_h / 2) - ((devparms->triggeredgelevel[devparms->triggeredgesource] + devparms->chanoffset[devparms->triggeredgesource]) / ((devparms->chanscale[devparms->triggeredgesource] * devparms->vertdivisions) / curve_h));
if(trig_level_arrow_pos < 0)
{
@ -1903,7 +1903,7 @@ void SignalCurve::mouseReleaseEvent(QMouseEvent *release_event)
// printf("chanoffset[chn] is: %e chanscale[chn] is %e trig_level_arrow_pos is: %i v_sense is: %e\n",
// devparms->chanoffset[chn], devparms->chanscale[chn], trig_level_arrow_pos, v_sense);
devparms->triggeredgelevel[devparms->triggeredgesource] = (((h / 2) - trig_level_arrow_pos) * ((devparms->chanscale[devparms->triggeredgesource] * 8) / h))
devparms->triggeredgelevel[devparms->triggeredgesource] = (((h / 2) - trig_level_arrow_pos) * ((devparms->chanscale[devparms->triggeredgesource] * devparms->vertdivisions) / h))
- devparms->chanoffset[devparms->triggeredgesource];
tmp = devparms->triggeredgelevel[devparms->triggeredgesource] / (devparms->chanscale[devparms->triggeredgesource] / 50);
@ -1950,7 +1950,7 @@ void SignalCurve::mouseReleaseEvent(QMouseEvent *release_event)
// printf("chanoffset[chn] is: %e chanscale[chn] is %e chan_arrow_pos[chn] is: %i v_sense is: %e\n",
// devparms->chanoffset[chn], devparms->chanscale[chn], chan_arrow_pos[chn], v_sense);
devparms->chanoffset[chn] = ((h / 2) - chan_arrow_pos[chn]) * ((devparms->chanscale[chn] * 8) / h);
devparms->chanoffset[chn] = ((h / 2) - chan_arrow_pos[chn]) * ((devparms->chanscale[chn] * devparms->vertdivisions) / h);
tmp = devparms->chanoffset[chn] / (devparms->chanscale[chn] / 50);
@ -2081,7 +2081,7 @@ void SignalCurve::mouseMoveEvent(QMouseEvent *move_event)
trig_level_arrow_pos = h;
}
devparms->triggeredgelevel[devparms->triggeredgesource] = (((h / 2) - trig_level_arrow_pos) * ((devparms->chanscale[devparms->triggeredgesource] * 8) / h))
devparms->triggeredgelevel[devparms->triggeredgesource] = (((h / 2) - trig_level_arrow_pos) * ((devparms->chanscale[devparms->triggeredgesource] * devparms->vertdivisions) / h))
- devparms->chanoffset[devparms->triggeredgesource];
dtmp = devparms->triggeredgelevel[devparms->triggeredgesource] / (devparms->chanscale[devparms->triggeredgesource] / 50);
@ -2115,7 +2115,7 @@ void SignalCurve::mouseMoveEvent(QMouseEvent *move_event)
chan_arrow_pos[chn] = h;
}
devparms->chanoffset[chn] = ((h / 2) - chan_arrow_pos[chn]) * ((devparms->chanscale[chn] * 8) / h);
devparms->chanoffset[chn] = ((h / 2) - chan_arrow_pos[chn]) * ((devparms->chanscale[chn] * devparms->vertdivisions) / h);
// chan_tmp_y_pixel_offset[chn] = (h / 2) - chan_arrow_pos[chn];