Preliminary secondary meter support. See Settings tab for selection.

Some scales incomplete.
merge-requests/5/head
Elliott Liggett 2021-07-17 23:39:40 -07:00
rodzic 8257a3540f
commit 027815f4c0
6 zmienionych plików z 160 dodań i 21 usunięć

Wyświetl plik

@ -40,10 +40,19 @@ meter::meter(QWidget *parent) : QWidget(parent)
void meter::setMeterType(meterKind type)
{
if(type == meterType)
return;
meterType = type;
// clear average and peak vectors:
// re-draw scale:
}
meterKind meter::getMeterType()
{
return meterType;
}
void meter::paintEvent(QPaintEvent *)
{
@ -57,15 +66,19 @@ void meter::paintEvent(QPaintEvent *)
switch(meterType)
{
case meterS:
peakRedLevel = 120; // S9+
drawScaleS(&painter);
break;
case meterPower:
peakRedLevel = 210; // 100%
drawScalePo(&painter);
break;
case meterALC:
peakRedLevel = 100;
drawScaleALC(&painter);
break;
case meterSWR:
peakRedLevel = 100; // SWR 2.5
drawScaleSWR(&painter);
break;
default:
@ -87,9 +100,8 @@ void meter::paintEvent(QPaintEvent *)
// Peak:
painter.setPen(peakColor);
painter.setBrush(peakColor);
if(peak > 120)
if(peak > peakRedLevel)
{
// 120 = +S9
painter.setBrush(Qt::red);
painter.setPen(Qt::red);
}

Wyświetl plik

@ -20,6 +20,7 @@ public slots:
void updateDrawing(int num);
void setLevels(int current, int peak, int average);
void setMeterType(meterKind type);
meterKind getMeterType();
private:
@ -31,6 +32,8 @@ private:
int peak = 0;
int average = 0;
int peakRedLevel=0;
int mXstart = 10; // Starting point for S=0.
int mYstart = 14; // height, down from top, where the drawing starts
int barHeight = 10; // Height of meter "bar" indicators

Wyświetl plik

@ -19,6 +19,7 @@
#define compCivAddr 0xE1
enum meterKind {
meterNone=0,
meterS,
meterSWR,
meterPower,
@ -28,7 +29,8 @@ enum meterKind {
meterCurrent,
meterRxdB,
meterTxMod,
meterRxAudio
meterRxAudio,
meterLatency
};
enum spectrumMode {

Wyświetl plik

@ -661,6 +661,22 @@ void wfmain::setupMainUI()
ui->wfthemeCombo->addItem("Spectrum", QCPColorGradient::gpSpectrum);
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 << "50k" << "100k" << "250k" << "500k";
ui->scopeBWCombo->insertItems(0, spans);
@ -2547,6 +2563,10 @@ void wfmain::doCmd(cmds cmd)
if(amTransmitting)
emit getMeters(meterPower);
break;
case cmdGetSWRMeter:
if(amTransmitting)
emit getMeters(meterSWR);
break;
case cmdGetIdMeter:
emit getMeters(meterCurrent);
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)
{
// TODO: meaningful priority
@ -4502,9 +4547,6 @@ void wfmain::receiveMeter(meterKind inMeter, unsigned char level)
ui->meterSPoWidget->setLevels(level, peak, average);
ui->meterSPoWidget->repaint();
break;
case meterSWR:
//ui->levelIndicator->setValue((int)level);
break;
case meterPower:
powerMeterReadings[(powerMeterPos++)%powerMeterReadings.length()] = level;
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->update();
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:
if(ui->meter2Widget->getMeterType() == inMeter)
{
ui->meter2Widget->setLevels(level, level, level);
}
break;
}
}
@ -5108,6 +5142,70 @@ void wfmain::on_wfInterpolateChk_clicked(bool 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 ---
void wfmain::on_debugBtn_clicked()
{

Wyświetl plik

@ -468,6 +468,8 @@ private slots:
void on_wfInterpolateChk_clicked(bool checked);
void on_meter2selectionCombo_activated(int index);
private:
Ui::wfmain *ui;
void closeEvent(QCloseEvent *event);
@ -602,7 +604,7 @@ private:
cmdGetSql, cmdSetSql, cmdGetATUStatus, cmdSetATU, cmdStartATU, cmdGetSpectrumMode, cmdGetSpectrumSpan, cmdScopeCenterMode, cmdScopeFixedMode, cmdGetPTT, cmdSetPTT,
cmdGetTxPower, cmdSetTxPower, cmdGetMicGain, cmdSetMicGain, cmdSetModLevel, cmdGetSpectrumRefLevel, cmdGetDuplexMode, cmdGetModInput, cmdGetModDataInput,
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,
cmdSetTime, cmdSetDate, cmdSetUTCOffset};
@ -741,14 +743,20 @@ private:
void changeModLabelAndSlider(rigInput source);
// Fast command queue:
void initPeriodicCommands();
void insertPeriodicCommand(cmds cmd, unsigned char priority);
void insertPeriodicCommandUnique(cmds cmd);
void removePeriodicCommand(cmds cmd);
void insertSlowPeriodicCommand(cmds cmd, unsigned char priority);
void calculateTimingParameters();
void changeMode(mode_kind mode);
void changeMode(mode_kind mode, bool dataOn);
cmds meterKindToMeterCommand(meterKind m);
int oldFreqDialVal;
rigCapabilities rigCaps;

Wyświetl plik

@ -18,7 +18,7 @@
<item>
<widget class="QTabWidget" name="tabWidget">
<property name="currentIndex">
<number>0</number>
<number>3</number>
</property>
<widget class="QWidget" name="mainTab">
<attribute name="title">
@ -141,8 +141,11 @@
</item>
<item>
<widget class="QComboBox" name="wfthemeCombo">
<property name="toolTip">
<string>Waterfall color theme</string>
</property>
<property name="accessibleName">
<string>Spectrum color theme</string>
<string>Waterfall display color theme</string>
</property>
<property name="accessibleDescription">
<string>Selects the theme for the color waterfall dispaly</string>
@ -264,6 +267,9 @@
</property>
</widget>
</item>
<item>
<widget class="meter" name="meter2Widget" native="true"/>
</item>
</layout>
</item>
<item>
@ -2205,6 +2211,16 @@
</property>
</widget>
</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>
<spacer name="horizontalSpacer_5">
<property name="orientation">