kopia lustrzana https://gitlab.com/eliggett/wfview
Preliminary secondary meter support. See Settings tab for selection.
Some scales incomplete.merge-requests/5/head
rodzic
8257a3540f
commit
027815f4c0
16
meter.cpp
16
meter.cpp
|
@ -40,10 +40,19 @@ meter::meter(QWidget *parent) : QWidget(parent)
|
||||||
|
|
||||||
void meter::setMeterType(meterKind type)
|
void meter::setMeterType(meterKind type)
|
||||||
{
|
{
|
||||||
|
if(type == meterType)
|
||||||
|
return;
|
||||||
|
|
||||||
meterType = type;
|
meterType = type;
|
||||||
|
// clear average and peak vectors:
|
||||||
|
|
||||||
// re-draw scale:
|
// re-draw scale:
|
||||||
}
|
}
|
||||||
|
|
||||||
|
meterKind meter::getMeterType()
|
||||||
|
{
|
||||||
|
return meterType;
|
||||||
|
}
|
||||||
|
|
||||||
void meter::paintEvent(QPaintEvent *)
|
void meter::paintEvent(QPaintEvent *)
|
||||||
{
|
{
|
||||||
|
@ -57,15 +66,19 @@ void meter::paintEvent(QPaintEvent *)
|
||||||
switch(meterType)
|
switch(meterType)
|
||||||
{
|
{
|
||||||
case meterS:
|
case meterS:
|
||||||
|
peakRedLevel = 120; // S9+
|
||||||
drawScaleS(&painter);
|
drawScaleS(&painter);
|
||||||
break;
|
break;
|
||||||
case meterPower:
|
case meterPower:
|
||||||
|
peakRedLevel = 210; // 100%
|
||||||
drawScalePo(&painter);
|
drawScalePo(&painter);
|
||||||
break;
|
break;
|
||||||
case meterALC:
|
case meterALC:
|
||||||
|
peakRedLevel = 100;
|
||||||
drawScaleALC(&painter);
|
drawScaleALC(&painter);
|
||||||
break;
|
break;
|
||||||
case meterSWR:
|
case meterSWR:
|
||||||
|
peakRedLevel = 100; // SWR 2.5
|
||||||
drawScaleSWR(&painter);
|
drawScaleSWR(&painter);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@ -87,9 +100,8 @@ void meter::paintEvent(QPaintEvent *)
|
||||||
// Peak:
|
// Peak:
|
||||||
painter.setPen(peakColor);
|
painter.setPen(peakColor);
|
||||||
painter.setBrush(peakColor);
|
painter.setBrush(peakColor);
|
||||||
if(peak > 120)
|
if(peak > peakRedLevel)
|
||||||
{
|
{
|
||||||
// 120 = +S9
|
|
||||||
painter.setBrush(Qt::red);
|
painter.setBrush(Qt::red);
|
||||||
painter.setPen(Qt::red);
|
painter.setPen(Qt::red);
|
||||||
}
|
}
|
||||||
|
|
3
meter.h
3
meter.h
|
@ -20,6 +20,7 @@ public slots:
|
||||||
void updateDrawing(int num);
|
void updateDrawing(int num);
|
||||||
void setLevels(int current, int peak, int average);
|
void setLevels(int current, int peak, int average);
|
||||||
void setMeterType(meterKind type);
|
void setMeterType(meterKind type);
|
||||||
|
meterKind getMeterType();
|
||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -31,6 +32,8 @@ private:
|
||||||
int peak = 0;
|
int peak = 0;
|
||||||
int average = 0;
|
int average = 0;
|
||||||
|
|
||||||
|
int peakRedLevel=0;
|
||||||
|
|
||||||
int mXstart = 10; // Starting point for S=0.
|
int mXstart = 10; // Starting point for S=0.
|
||||||
int mYstart = 14; // height, down from top, where the drawing starts
|
int mYstart = 14; // height, down from top, where the drawing starts
|
||||||
int barHeight = 10; // Height of meter "bar" indicators
|
int barHeight = 10; // Height of meter "bar" indicators
|
||||||
|
|
|
@ -19,6 +19,7 @@
|
||||||
#define compCivAddr 0xE1
|
#define compCivAddr 0xE1
|
||||||
|
|
||||||
enum meterKind {
|
enum meterKind {
|
||||||
|
meterNone=0,
|
||||||
meterS,
|
meterS,
|
||||||
meterSWR,
|
meterSWR,
|
||||||
meterPower,
|
meterPower,
|
||||||
|
@ -28,7 +29,8 @@ enum meterKind {
|
||||||
meterCurrent,
|
meterCurrent,
|
||||||
meterRxdB,
|
meterRxdB,
|
||||||
meterTxMod,
|
meterTxMod,
|
||||||
meterRxAudio
|
meterRxAudio,
|
||||||
|
meterLatency
|
||||||
};
|
};
|
||||||
|
|
||||||
enum spectrumMode {
|
enum spectrumMode {
|
||||||
|
|
128
wfmain.cpp
128
wfmain.cpp
|
@ -661,6 +661,22 @@ void wfmain::setupMainUI()
|
||||||
ui->wfthemeCombo->addItem("Spectrum", QCPColorGradient::gpSpectrum);
|
ui->wfthemeCombo->addItem("Spectrum", QCPColorGradient::gpSpectrum);
|
||||||
ui->wfthemeCombo->addItem("Candy", QCPColorGradient::gpCandy);
|
ui->wfthemeCombo->addItem("Candy", QCPColorGradient::gpCandy);
|
||||||
|
|
||||||
|
ui->meter2selectionCombo->addItem("None", meterNone);
|
||||||
|
ui->meter2selectionCombo->addItem("SWR", meterSWR);
|
||||||
|
ui->meter2selectionCombo->addItem("ALC", meterALC);
|
||||||
|
ui->meter2selectionCombo->addItem("Compression", meterComp);
|
||||||
|
ui->meter2selectionCombo->addItem("Voltage", meterVoltage);
|
||||||
|
ui->meter2selectionCombo->addItem("Current", meterCurrent);
|
||||||
|
ui->meter2Widget->hide();
|
||||||
|
|
||||||
|
// Future ideas:
|
||||||
|
//ui->meter2selectionCombo->addItem("Transmit Audio", meterTxMod);
|
||||||
|
//ui->meter2selectionCombo->addItem("Receive Audio", meterRxAudio);
|
||||||
|
//ui->meter2selectionCombo->addItem("Latency", meterLatency);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
spans << "2.5k" << "5.0k" << "10k" << "25k";
|
spans << "2.5k" << "5.0k" << "10k" << "25k";
|
||||||
spans << "50k" << "100k" << "250k" << "500k";
|
spans << "50k" << "100k" << "250k" << "500k";
|
||||||
ui->scopeBWCombo->insertItems(0, spans);
|
ui->scopeBWCombo->insertItems(0, spans);
|
||||||
|
@ -2547,6 +2563,10 @@ void wfmain::doCmd(cmds cmd)
|
||||||
if(amTransmitting)
|
if(amTransmitting)
|
||||||
emit getMeters(meterPower);
|
emit getMeters(meterPower);
|
||||||
break;
|
break;
|
||||||
|
case cmdGetSWRMeter:
|
||||||
|
if(amTransmitting)
|
||||||
|
emit getMeters(meterSWR);
|
||||||
|
break;
|
||||||
case cmdGetIdMeter:
|
case cmdGetIdMeter:
|
||||||
emit getMeters(meterCurrent);
|
emit getMeters(meterCurrent);
|
||||||
break;
|
break;
|
||||||
|
@ -2983,6 +3003,31 @@ void wfmain::insertPeriodicCommand(cmds cmd, unsigned char priority)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void wfmain::insertPeriodicCommandUnique(cmds cmd)
|
||||||
|
{
|
||||||
|
// Use this function to insert a non-duplicate command
|
||||||
|
// into the fast periodic polling queue, typically
|
||||||
|
// meter commands where high refresh rates are desirable.
|
||||||
|
|
||||||
|
removePeriodicCommand(cmd);
|
||||||
|
periodicCmdQueue.push_front(cmd);
|
||||||
|
}
|
||||||
|
|
||||||
|
void wfmain::removePeriodicCommand(cmds cmd)
|
||||||
|
{
|
||||||
|
while(true)
|
||||||
|
{
|
||||||
|
auto it = std::find(this->periodicCmdQueue.begin(), this->periodicCmdQueue.end(), cmd);
|
||||||
|
if(it != periodicCmdQueue.end())
|
||||||
|
{
|
||||||
|
periodicCmdQueue.erase(it);
|
||||||
|
} else {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void wfmain::insertSlowPeriodicCommand(cmds cmd, unsigned char priority)
|
void wfmain::insertSlowPeriodicCommand(cmds cmd, unsigned char priority)
|
||||||
{
|
{
|
||||||
// TODO: meaningful priority
|
// TODO: meaningful priority
|
||||||
|
@ -4502,9 +4547,6 @@ void wfmain::receiveMeter(meterKind inMeter, unsigned char level)
|
||||||
ui->meterSPoWidget->setLevels(level, peak, average);
|
ui->meterSPoWidget->setLevels(level, peak, average);
|
||||||
ui->meterSPoWidget->repaint();
|
ui->meterSPoWidget->repaint();
|
||||||
break;
|
break;
|
||||||
case meterSWR:
|
|
||||||
//ui->levelIndicator->setValue((int)level);
|
|
||||||
break;
|
|
||||||
case meterPower:
|
case meterPower:
|
||||||
powerMeterReadings[(powerMeterPos++)%powerMeterReadings.length()] = level;
|
powerMeterReadings[(powerMeterPos++)%powerMeterReadings.length()] = level;
|
||||||
for(int i=0; i < powerMeterReadings.length(); i++)
|
for(int i=0; i < powerMeterReadings.length(); i++)
|
||||||
|
@ -4518,19 +4560,11 @@ void wfmain::receiveMeter(meterKind inMeter, unsigned char level)
|
||||||
ui->meterSPoWidget->setLevels(level, peak, average);
|
ui->meterSPoWidget->setLevels(level, peak, average);
|
||||||
ui->meterSPoWidget->update();
|
ui->meterSPoWidget->update();
|
||||||
break;
|
break;
|
||||||
case meterALC:
|
|
||||||
//ui->levelIndicator->setValue((int)level);
|
|
||||||
break;
|
|
||||||
case meterComp:
|
|
||||||
//ui->levelIndicator->setValue((int)level);
|
|
||||||
break;
|
|
||||||
case meterCurrent:
|
|
||||||
//ui->levelIndicator->setValue((int)level);
|
|
||||||
break;
|
|
||||||
case meterVoltage:
|
|
||||||
//ui->levelIndicator->setValue((int)level);
|
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
|
if(ui->meter2Widget->getMeterType() == inMeter)
|
||||||
|
{
|
||||||
|
ui->meter2Widget->setLevels(level, level, level);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5108,6 +5142,70 @@ void wfmain::on_wfInterpolateChk_clicked(bool checked)
|
||||||
prefs.wfInterpolate = checked;
|
prefs.wfInterpolate = checked;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
wfmain::cmds wfmain::meterKindToMeterCommand(meterKind m)
|
||||||
|
{
|
||||||
|
cmds c;
|
||||||
|
switch(m)
|
||||||
|
{
|
||||||
|
case meterNone:
|
||||||
|
c = cmdNone;
|
||||||
|
break;
|
||||||
|
case meterS:
|
||||||
|
c = cmdGetSMeter;
|
||||||
|
break;
|
||||||
|
case meterPower:
|
||||||
|
c = cmdGetPowerMeter;
|
||||||
|
break;
|
||||||
|
case meterSWR:
|
||||||
|
c = cmdGetSWRMeter;
|
||||||
|
break;
|
||||||
|
case meterALC:
|
||||||
|
c = cmdGetALCMeter;
|
||||||
|
break;
|
||||||
|
case meterComp:
|
||||||
|
c = cmdGetCompMeter;
|
||||||
|
break;
|
||||||
|
case meterCurrent:
|
||||||
|
c = cmdGetIdMeter;
|
||||||
|
break;
|
||||||
|
case meterVoltage:
|
||||||
|
c = cmdGetVdMeter;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
c = cmdNone;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return c;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void wfmain::on_meter2selectionCombo_activated(int index)
|
||||||
|
{
|
||||||
|
meterKind newMeterType;
|
||||||
|
meterKind oldMeterType;
|
||||||
|
newMeterType = static_cast<meterKind>(ui->meter2selectionCombo->currentData().toInt());
|
||||||
|
oldMeterType = ui->meter2Widget->getMeterType();
|
||||||
|
|
||||||
|
if(newMeterType == oldMeterType)
|
||||||
|
return;
|
||||||
|
|
||||||
|
cmds newCmd = meterKindToMeterCommand(newMeterType);
|
||||||
|
cmds oldCmd = meterKindToMeterCommand(oldMeterType);
|
||||||
|
|
||||||
|
removePeriodicCommand(oldCmd);
|
||||||
|
|
||||||
|
if(newMeterType==meterNone)
|
||||||
|
{
|
||||||
|
ui->meter2Widget->hide();
|
||||||
|
} else {
|
||||||
|
ui->meter2Widget->show();
|
||||||
|
ui->meter2Widget->setMeterType(newMeterType);
|
||||||
|
insertPeriodicCommandUnique(newCmd);
|
||||||
|
}
|
||||||
|
(void)index;
|
||||||
|
}
|
||||||
|
|
||||||
// --- DEBUG FUNCTION ---
|
// --- DEBUG FUNCTION ---
|
||||||
void wfmain::on_debugBtn_clicked()
|
void wfmain::on_debugBtn_clicked()
|
||||||
{
|
{
|
||||||
|
|
10
wfmain.h
10
wfmain.h
|
@ -468,6 +468,8 @@ private slots:
|
||||||
|
|
||||||
void on_wfInterpolateChk_clicked(bool checked);
|
void on_wfInterpolateChk_clicked(bool checked);
|
||||||
|
|
||||||
|
void on_meter2selectionCombo_activated(int index);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Ui::wfmain *ui;
|
Ui::wfmain *ui;
|
||||||
void closeEvent(QCloseEvent *event);
|
void closeEvent(QCloseEvent *event);
|
||||||
|
@ -602,7 +604,7 @@ private:
|
||||||
cmdGetSql, cmdSetSql, cmdGetATUStatus, cmdSetATU, cmdStartATU, cmdGetSpectrumMode, cmdGetSpectrumSpan, cmdScopeCenterMode, cmdScopeFixedMode, cmdGetPTT, cmdSetPTT,
|
cmdGetSql, cmdSetSql, cmdGetATUStatus, cmdSetATU, cmdStartATU, cmdGetSpectrumMode, cmdGetSpectrumSpan, cmdScopeCenterMode, cmdScopeFixedMode, cmdGetPTT, cmdSetPTT,
|
||||||
cmdGetTxPower, cmdSetTxPower, cmdGetMicGain, cmdSetMicGain, cmdSetModLevel, cmdGetSpectrumRefLevel, cmdGetDuplexMode, cmdGetModInput, cmdGetModDataInput,
|
cmdGetTxPower, cmdSetTxPower, cmdGetMicGain, cmdSetMicGain, cmdSetModLevel, cmdGetSpectrumRefLevel, cmdGetDuplexMode, cmdGetModInput, cmdGetModDataInput,
|
||||||
cmdGetCurrentModLevel, cmdStartRegularPolling, cmdStopRegularPolling, cmdQueNormalSpeed,
|
cmdGetCurrentModLevel, cmdStartRegularPolling, cmdStopRegularPolling, cmdQueNormalSpeed,
|
||||||
cmdGetVdMeter, cmdGetIdMeter, cmdGetSMeter, cmdGetPowerMeter, cmdGetALCMeter, cmdGetCompMeter, cmdGetTxRxMeter,
|
cmdGetVdMeter, cmdGetIdMeter, cmdGetSMeter, cmdGetPowerMeter, cmdGetSWRMeter, cmdGetALCMeter, cmdGetCompMeter, cmdGetTxRxMeter,
|
||||||
cmdGetTone, cmdGetTSQL, cmdGetDTCS, cmdGetRptAccessMode, cmdGetPreamp, cmdGetAttenuator, cmdGetAntenna,
|
cmdGetTone, cmdGetTSQL, cmdGetDTCS, cmdGetRptAccessMode, cmdGetPreamp, cmdGetAttenuator, cmdGetAntenna,
|
||||||
cmdSetTime, cmdSetDate, cmdSetUTCOffset};
|
cmdSetTime, cmdSetDate, cmdSetUTCOffset};
|
||||||
|
|
||||||
|
@ -741,14 +743,20 @@ private:
|
||||||
|
|
||||||
void changeModLabelAndSlider(rigInput source);
|
void changeModLabelAndSlider(rigInput source);
|
||||||
|
|
||||||
|
// Fast command queue:
|
||||||
void initPeriodicCommands();
|
void initPeriodicCommands();
|
||||||
void insertPeriodicCommand(cmds cmd, unsigned char priority);
|
void insertPeriodicCommand(cmds cmd, unsigned char priority);
|
||||||
|
void insertPeriodicCommandUnique(cmds cmd);
|
||||||
|
void removePeriodicCommand(cmds cmd);
|
||||||
|
|
||||||
void insertSlowPeriodicCommand(cmds cmd, unsigned char priority);
|
void insertSlowPeriodicCommand(cmds cmd, unsigned char priority);
|
||||||
void calculateTimingParameters();
|
void calculateTimingParameters();
|
||||||
|
|
||||||
void changeMode(mode_kind mode);
|
void changeMode(mode_kind mode);
|
||||||
void changeMode(mode_kind mode, bool dataOn);
|
void changeMode(mode_kind mode, bool dataOn);
|
||||||
|
|
||||||
|
cmds meterKindToMeterCommand(meterKind m);
|
||||||
|
|
||||||
int oldFreqDialVal;
|
int oldFreqDialVal;
|
||||||
|
|
||||||
rigCapabilities rigCaps;
|
rigCapabilities rigCaps;
|
||||||
|
|
20
wfmain.ui
20
wfmain.ui
|
@ -18,7 +18,7 @@
|
||||||
<item>
|
<item>
|
||||||
<widget class="QTabWidget" name="tabWidget">
|
<widget class="QTabWidget" name="tabWidget">
|
||||||
<property name="currentIndex">
|
<property name="currentIndex">
|
||||||
<number>0</number>
|
<number>3</number>
|
||||||
</property>
|
</property>
|
||||||
<widget class="QWidget" name="mainTab">
|
<widget class="QWidget" name="mainTab">
|
||||||
<attribute name="title">
|
<attribute name="title">
|
||||||
|
@ -141,8 +141,11 @@
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QComboBox" name="wfthemeCombo">
|
<widget class="QComboBox" name="wfthemeCombo">
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Waterfall color theme</string>
|
||||||
|
</property>
|
||||||
<property name="accessibleName">
|
<property name="accessibleName">
|
||||||
<string>Spectrum color theme</string>
|
<string>Waterfall display color theme</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="accessibleDescription">
|
<property name="accessibleDescription">
|
||||||
<string>Selects the theme for the color waterfall dispaly</string>
|
<string>Selects the theme for the color waterfall dispaly</string>
|
||||||
|
@ -264,6 +267,9 @@
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="meter" name="meter2Widget" native="true"/>
|
||||||
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
|
@ -2205,6 +2211,16 @@
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="secondaryMeterSelectionLabel">
|
||||||
|
<property name="text">
|
||||||
|
<string>Secondary Meter Selection:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QComboBox" name="meter2selectionCombo"/>
|
||||||
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<spacer name="horizontalSpacer_5">
|
<spacer name="horizontalSpacer_5">
|
||||||
<property name="orientation">
|
<property name="orientation">
|
||||||
|
|
Ładowanie…
Reference in New Issue