kopia lustrzana https://gitlab.com/eliggett/wfview
S-Meter working! Power meter working!
Needs more testing, but it's here! 100ms polling time.merge-requests/2/head
rodzic
938a9f1d1b
commit
c3e0fa7dbd
|
@ -890,9 +890,9 @@ void rigCommander::parseLevels()
|
|||
// "INDEX: 00 01 02 03 04 "
|
||||
// "DATA: 14 02 00 78 fd "
|
||||
|
||||
if(payloadIn[0] = '\x14')
|
||||
|
||||
if(payloadIn[0] == '\x14')
|
||||
{
|
||||
qDebug() <<__func__<< ": in payload[0] is 0x14";
|
||||
switch(payloadIn[1])
|
||||
{
|
||||
case '\x01':
|
||||
|
@ -901,7 +901,6 @@ void rigCommander::parseLevels()
|
|||
break;
|
||||
case '\x02':
|
||||
// RX RF Gain
|
||||
qDebug() << __func__ << ": RF Gain: " << level;
|
||||
emit haveRfGain(level);
|
||||
break;
|
||||
case '\x03':
|
||||
|
@ -941,38 +940,37 @@ void rigCommander::parseLevels()
|
|||
return;
|
||||
}
|
||||
|
||||
if(payloadIn[0] = '\x15')
|
||||
if(payloadIn[0] == '\x15')
|
||||
{
|
||||
qDebug() <<__func__<< ": in payload[0] is 0x15";
|
||||
switch(payloadIn[1])
|
||||
{
|
||||
case '\x02':
|
||||
// S-Meter
|
||||
emit haveSMeter(level);
|
||||
emit haveMeter(meterS, level);
|
||||
break;
|
||||
case '\x11':
|
||||
// RF-Power meter
|
||||
emit haveRFMeter(level);
|
||||
emit haveMeter(meterPower, level);
|
||||
break;
|
||||
case '\x12':
|
||||
// SWR
|
||||
emit haveSWRMeter(level);
|
||||
emit haveMeter(meterSWR, level);
|
||||
break;
|
||||
case '\x13':
|
||||
// ALC
|
||||
emit haveALCMeter(level);
|
||||
emit haveMeter(meterALC, level);
|
||||
break;
|
||||
case '\x14':
|
||||
// COMP dB reduction
|
||||
emit haveCompMeter(level);
|
||||
emit haveMeter(meterComp, level);
|
||||
break;
|
||||
case '\x15':
|
||||
// VD (12V)
|
||||
emit haveVdMeter(level);
|
||||
emit haveMeter(meterVoltage, level);
|
||||
break;
|
||||
case '\x16':
|
||||
// ID
|
||||
emit haveIdMeter(level);
|
||||
emit haveMeter(meterCurrent, level);
|
||||
break;
|
||||
|
||||
default:
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
// note: using a define because switch case doesn't even work with const unsigned char. Surprised me.
|
||||
#define compCivAddr 0xE1
|
||||
|
||||
enum duplexMode{
|
||||
enum duplexMode {
|
||||
dmSplitOff=0x00,
|
||||
dmSplitOn=0x01,
|
||||
dmSimplex=0x10,
|
||||
|
@ -26,6 +26,16 @@ enum duplexMode{
|
|||
dmDupAutoOff=0x36
|
||||
};
|
||||
|
||||
enum meterKind {
|
||||
meterS,
|
||||
meterSWR,
|
||||
meterPower,
|
||||
meterALC,
|
||||
meterComp,
|
||||
meterVoltage,
|
||||
meterCurrent
|
||||
};
|
||||
|
||||
class rigCommander : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
|
@ -170,6 +180,7 @@ signals:
|
|||
void haveACCGain(unsigned char gain, unsigned char ab);
|
||||
void haveModSrcGain(rigInput input, unsigned char gain);
|
||||
|
||||
void haveMeter(meterKind meter, unsigned char level);
|
||||
void haveSMeter(unsigned char level);
|
||||
void haveRFMeter(unsigned char level);
|
||||
void haveSWRMeter(unsigned char);
|
||||
|
|
197
wfmain.cpp
197
wfmain.cpp
|
@ -272,11 +272,17 @@ wfmain::wfmain(const QString serialPortCL, const QString hostCL, QWidget *parent
|
|||
delayedCommand->setSingleShot(true);
|
||||
connect(delayedCommand, SIGNAL(timeout()), this, SLOT(runDelayedCommand()));
|
||||
|
||||
periodicPollingTimer = new QTimer(this);
|
||||
periodicPollingTimer->setInterval(100);
|
||||
periodicPollingTimer->setSingleShot(false);
|
||||
connect(periodicPollingTimer, SIGNAL(timeout()), this, SLOT(runPeriodicCommands()));
|
||||
|
||||
openRig();
|
||||
|
||||
qRegisterMetaType<rigCapabilities>();
|
||||
qRegisterMetaType<duplexMode>();
|
||||
qRegisterMetaType<rigInput>();
|
||||
qRegisterMetaType<meterKind>();
|
||||
|
||||
connect(rig, SIGNAL(haveFrequency(double)), this, SLOT(receiveFreq(double)));
|
||||
connect(this, SIGNAL(getFrequency()), rig, SLOT(getFrequency()));
|
||||
|
@ -352,6 +358,11 @@ wfmain::wfmain(const QString serialPortCL, const QString hostCL, QWidget *parent
|
|||
connect(rig, SIGNAL(haveUSBGain(unsigned char)), this, SLOT(receiveUSBGain(unsigned char)));
|
||||
connect(rig, SIGNAL(haveLANGain(unsigned char)), this, SLOT(receiveLANGain(unsigned char)));
|
||||
|
||||
//Metering:
|
||||
connect(this, SIGNAL(getMeters(bool)), rig, SLOT(getMeters(bool)));
|
||||
connect(rig, SIGNAL(haveMeter(meterKind,unsigned char)), this, SLOT(receiveMeter(meterKind,unsigned char)));
|
||||
|
||||
// Rig and ATU info:
|
||||
connect(this, SIGNAL(startATU()), rig, SLOT(startATU()));
|
||||
connect(this, SIGNAL(setATU(bool)), rig, SLOT(setATU(bool)));
|
||||
connect(this, SIGNAL(getATUStatus()), rig, SLOT(getATUStatus()));
|
||||
|
@ -381,8 +392,6 @@ wfmain::wfmain(const QString serialPortCL, const QString hostCL, QWidget *parent
|
|||
connect(wf, SIGNAL(mouseWheel(QWheelEvent*)), this, SLOT(handleWFScroll(QWheelEvent*)));
|
||||
connect(plot, SIGNAL(mouseWheel(QWheelEvent*)), this, SLOT(handlePlotScroll(QWheelEvent*)));
|
||||
|
||||
// Metering
|
||||
connect(this, SIGNAL(getMeters(bool)), rig, SLOT(getMeters(bool)));
|
||||
|
||||
if (serverConfig.enabled && udp != Q_NULLPTR) {
|
||||
// Server
|
||||
|
@ -1253,6 +1262,7 @@ void wfmain:: getInitialRigState()
|
|||
cmdOutQue.append(cmdGetModDataInput);
|
||||
|
||||
cmdOutQue.append(cmdNone);
|
||||
cmdOutQue.append(cmdStartRegularPolling);
|
||||
|
||||
if(rigCaps.hasATU)
|
||||
{
|
||||
|
@ -1372,6 +1382,136 @@ void wfmain::setPlotTheme(QCustomPlot *plot, bool isDark)
|
|||
}
|
||||
}
|
||||
|
||||
void wfmain::runPeriodicCommands()
|
||||
{
|
||||
// These commands are run at a regular interval. They are to be used sparingly.
|
||||
// For general radio state queries, use the runDelayedCommand() queue,
|
||||
// accessed by the insertPeriodicCommands() function.
|
||||
|
||||
// To insert commands to this queue, uset the insertPeriodicCommands() function.
|
||||
|
||||
// TODO: Queue should not remove items, just hit a different item each time.
|
||||
int nCmds = periodicCmdQueue.length();
|
||||
|
||||
cmds pcmd;
|
||||
|
||||
if(!periodicCmdQueue.isEmpty())
|
||||
{
|
||||
pcmd = periodicCmdQueue.at( (pCmdNum++)%nCmds );
|
||||
switch(pcmd)
|
||||
{
|
||||
case cmdNone:
|
||||
break;
|
||||
|
||||
// Metering commands:
|
||||
case cmdGetRxLevels:
|
||||
case cmdGetTxLevels:
|
||||
emit getMeters(amTransmitting);
|
||||
break;
|
||||
case cmdGetSMeter:
|
||||
break;
|
||||
case cmdGetPowerMeter:
|
||||
break;
|
||||
case cmdGetALCMeter:
|
||||
break;
|
||||
case cmdGetCompMeter:
|
||||
break;
|
||||
|
||||
case cmdGetRigID:
|
||||
emit getRigID();
|
||||
break;
|
||||
case cmdGetRigCIV:
|
||||
// if(!know rig civ already)
|
||||
if(!haveRigCaps)
|
||||
{
|
||||
emit getRigCIV();
|
||||
cmdOutQue.append(cmdGetRigCIV); // This way, we stay here until we get an answer.
|
||||
}
|
||||
break;
|
||||
case cmdGetFreq:
|
||||
emit getFrequency();
|
||||
break;
|
||||
case cmdGetMode:
|
||||
emit getMode();
|
||||
break;
|
||||
case cmdGetDataMode:
|
||||
// qDebug() << "Sending query for data mode";
|
||||
emit getDataMode();
|
||||
break;
|
||||
case cmdSetDataModeOff:
|
||||
emit setDataMode(false);
|
||||
break;
|
||||
case cmdSetDataModeOn:
|
||||
emit setDataMode(true);
|
||||
break;
|
||||
case cmdGetModInput:
|
||||
emit getModInput(false);
|
||||
break;
|
||||
case cmdGetModDataInput:
|
||||
emit getModInput(true);
|
||||
break;
|
||||
case cmdGetCurrentModLevel:
|
||||
emit getModInputLevel(currentModSrc);
|
||||
emit getModInputLevel(currentModDataSrc);
|
||||
break;
|
||||
case cmdGetDuplexMode:
|
||||
emit getDuplexMode();
|
||||
break;
|
||||
case cmdDispEnable:
|
||||
emit scopeDisplayEnable();
|
||||
break;
|
||||
case cmdDispDisable:
|
||||
emit scopeDisplayDisable();
|
||||
break;
|
||||
case cmdSpecOn:
|
||||
emit spectOutputEnable();
|
||||
break;
|
||||
case cmdSpecOff:
|
||||
emit spectOutputDisable();
|
||||
break;
|
||||
case cmdGetRxGain:
|
||||
emit getRfGain();
|
||||
break;
|
||||
case cmdGetAfGain:
|
||||
emit getAfGain();
|
||||
break;
|
||||
case cmdGetSql:
|
||||
emit getSql();
|
||||
break;
|
||||
case cmdGetTxPower:
|
||||
emit getTxPower();
|
||||
break;
|
||||
case cmdGetMicGain:
|
||||
emit getMicGain();
|
||||
break;
|
||||
case cmdGetSpectrumRefLevel:
|
||||
emit getSpectrumRefLevel();
|
||||
break;
|
||||
case cmdGetATUStatus:
|
||||
emit getATUStatus();
|
||||
break;
|
||||
case cmdScopeCenterMode:
|
||||
emit setScopeCenterMode(true);
|
||||
break;
|
||||
case cmdScopeFixedMode:
|
||||
emit setScopeCenterMode(false);
|
||||
break;
|
||||
case cmdGetPTT:
|
||||
emit getPTT();
|
||||
break;
|
||||
case cmdStartRegularPolling:
|
||||
periodicPollingTimer->start();
|
||||
break;
|
||||
case cmdStopRegularPolling:
|
||||
periodicPollingTimer->stop();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void wfmain::runDelayedCommand()
|
||||
{
|
||||
cmds qdCmd;
|
||||
|
@ -1481,6 +1621,12 @@ void wfmain::runDelayedCommand()
|
|||
case cmdGetPTT:
|
||||
emit getPTT();
|
||||
break;
|
||||
case cmdStartRegularPolling:
|
||||
periodicPollingTimer->start();
|
||||
break;
|
||||
case cmdStopRegularPolling:
|
||||
periodicPollingTimer->stop();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
@ -1600,6 +1746,28 @@ void wfmain::receiveRigID(rigCapabilities rigCaps)
|
|||
// do all the initial grabs. For now, this hack of adding them here and there:
|
||||
cmdOutQue.append(cmdGetFreq);
|
||||
cmdOutQue.append(cmdGetMode);
|
||||
initPeriodicCommands();
|
||||
}
|
||||
}
|
||||
|
||||
void wfmain::initPeriodicCommands()
|
||||
{
|
||||
// This function places periodic polling commands into a queue.
|
||||
// The commands are run using a timer,
|
||||
// and the timer is started by the delayed command cmdStartPeriodicTimer.
|
||||
|
||||
insertPeriodicCommand(cmdGetRxLevels, 128);
|
||||
insertPeriodicCommand(cmdGetTxLevels, 128);
|
||||
}
|
||||
|
||||
void wfmain::insertPeriodicCommand(cmds cmd, unsigned char priority)
|
||||
{
|
||||
// TODO: meaningful priority
|
||||
if(priority < 10)
|
||||
{
|
||||
periodicCmdQueue.prepend(cmd);
|
||||
} else {
|
||||
periodicCmdQueue.append(cmd);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2880,6 +3048,31 @@ void wfmain::receiveLANGain(unsigned char level)
|
|||
processModLevel(inputLAN, level);
|
||||
}
|
||||
|
||||
void wfmain::receiveMeter(meterKind inMeter, unsigned char level)
|
||||
{
|
||||
switch(inMeter)
|
||||
{
|
||||
case meterS:
|
||||
ui->levelIndicator->setValue((int)level);
|
||||
break;
|
||||
case meterSWR:
|
||||
break;
|
||||
case meterPower:
|
||||
ui->levelIndicator->setValue((int)level);
|
||||
break;
|
||||
case meterALC:
|
||||
break;
|
||||
case meterComp:
|
||||
break;
|
||||
case meterCurrent:
|
||||
break;
|
||||
case meterVoltage:
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void wfmain::receiveCompLevel(unsigned char compLevel)
|
||||
{
|
||||
(void)compLevel;
|
||||
|
|
18
wfmain.h
18
wfmain.h
|
@ -181,6 +181,12 @@ private slots:
|
|||
void receiveLANGain(unsigned char level);
|
||||
|
||||
// Meters:
|
||||
void receiveMeter(meterKind meter, unsigned char level);
|
||||
// void receiveSMeter(unsigned char level);
|
||||
// void receivePowerMeter(unsigned char level);
|
||||
// void receiveALCMeter(unsigned char level);
|
||||
// void receiveCompMeter(unsigned char level);
|
||||
|
||||
|
||||
void receiveATUStatus(unsigned char atustatus);
|
||||
void receiveRigID(rigCapabilities rigCaps);
|
||||
|
@ -194,6 +200,7 @@ private slots:
|
|||
void handleWFScroll(QWheelEvent *);
|
||||
void handlePlotScroll(QWheelEvent *);
|
||||
void runDelayedCommand();
|
||||
void runPeriodicCommands();
|
||||
void showStatusBarText(QString text);
|
||||
void serverConfigRequested(SERVERCONFIG conf, bool store);
|
||||
|
||||
|
@ -432,6 +439,7 @@ private:
|
|||
QCPColorMapData * colorMapData;
|
||||
QCPColorScale * colorScale;
|
||||
QTimer * delayedCommand;
|
||||
QTimer * periodicPollingTimer;
|
||||
QTimer * pttTimer;
|
||||
|
||||
|
||||
|
@ -464,9 +472,13 @@ private:
|
|||
cmdSpecOn, cmdSpecOff, cmdDispEnable, cmdDispDisable, cmdGetRxGain, cmdGetAfGain,
|
||||
cmdGetSql, cmdGetATUStatus, cmdScopeCenterMode, cmdScopeFixedMode, cmdGetPTT,
|
||||
cmdGetTxPower, cmdGetMicGain, cmdGetSpectrumRefLevel, cmdGetDuplexMode, cmdGetModInput, cmdGetModDataInput,
|
||||
cmdGetCurrentModLevel};
|
||||
cmdGetCurrentModLevel, cmdStartRegularPolling, cmdStopRegularPolling, cmdGetRxLevels, cmdGetTxLevels,
|
||||
cmdGetSMeter, cmdGetPowerMeter, cmdGetALCMeter, cmdGetCompMeter};
|
||||
cmds cmdOut;
|
||||
QVector <cmds> cmdOutQue;
|
||||
QVector <cmds> periodicCmdQueue;
|
||||
int pCmdNum = 0;
|
||||
|
||||
freqMemory mem;
|
||||
struct colors {
|
||||
QColor Dark_PlotBackground;
|
||||
|
@ -540,6 +552,9 @@ private:
|
|||
|
||||
void changeModLabelAndSlider(rigInput source);
|
||||
|
||||
void initPeriodicCommands();
|
||||
void insertPeriodicCommand(cmds cmd, unsigned char priority);
|
||||
|
||||
|
||||
void changeMode(mode_kind mode);
|
||||
void changeMode(mode_kind mode, bool dataOn);
|
||||
|
@ -580,6 +595,7 @@ private:
|
|||
Q_DECLARE_METATYPE(struct rigCapabilities)
|
||||
Q_DECLARE_METATYPE(enum rigInput)
|
||||
Q_DECLARE_METATYPE(enum duplexMode)
|
||||
Q_DECLARE_METATYPE(enum meterKind)
|
||||
|
||||
|
||||
#endif // WFMAIN_H
|
||||
|
|
Ładowanie…
Reference in New Issue