diff --git a/rigcommander.cpp b/rigcommander.cpp index eedd21b..4fa00a4 100644 --- a/rigcommander.cpp +++ b/rigcommander.cpp @@ -4789,7 +4789,7 @@ void rigCommander::stateUpdated() { i.value()._updated = false; i.value()._valid = true; // Set value to valid as we have requested it (even if we haven't had a response) - qDebug(logRigCtlD()) << "Got new value:" << i.key() << "=" << i.value()._value; + //qDebug(logRigCtlD()) << "Got new value:" << i.key() << "=" << i.value()._value; switch (i.key()) { case VFOAFREQ: if (i.value()._valid) { diff --git a/rigstate.h b/rigstate.h index 478f471..9bced5f 100644 --- a/rigstate.h +++ b/rigstate.h @@ -10,21 +10,16 @@ #include "rigcommander.h" #include "rigidentities.h" +#include "wfviewtypes.h" -// Meters at the end as they are ALWAYS updated from the rig! -enum stateTypes { VFOAFREQ, VFOBFREQ, CURRENTVFO, PTT, MODE, FILTER, PASSBAND, DUPLEX, DATAMODE, ANTENNA, RXANTENNA, CTCSS, TSQL, DTCS, CSQL, - PREAMP, AGC, ATTENUATOR, MODINPUT, AFGAIN, RFGAIN, SQUELCH, RFPOWER, MICGAIN, COMPLEVEL, MONITORLEVEL, BAL, KEYSPD, - VOXGAIN, ANTIVOXGAIN, CWPITCH, NOTCHF, IF, PBTIN, PBTOUT, APF, NR, NB, NBDEPTH, NBWIDTH, RIGINPUT, POWERONOFF, RITVALUE, - FAGCFUNC, NBFUNC, COMPFUNC, VOXFUNC, TONEFUNC, TSQLFUNC, SBKINFUNC, FBKINFUNC, ANFFUNC, NRFUNC, AIPFUNC, APFFUNC, MONFUNC, MNFUNC,RFFUNC, - AROFUNC, MUTEFUNC, VSCFUNC, REVFUNC, SQLFUNC, ABMFUNC, BCFUNC, MBCFUNC, RITFUNC, AFCFUNC, SATMODEFUNC, SCOPEFUNC, - RESUMEFUNC, TBURSTFUNC, TUNERFUNC, LOCKFUNC, SMETER, POWERMETER, SWRMETER, ALCMETER, COMPMETER, VOLTAGEMETER, CURRENTMETER, -}; + +//* std::static_pointer_cast(data) struct value { - quint64 _value=0; bool _valid = false; bool _updated = false; QDateTime _dateUpdated; + std::shared_ptr _value = Q_NULLPTR; }; class rigstate @@ -38,9 +33,10 @@ public: QDateTime whenUpdated(stateTypes s) { return map[s]._dateUpdated; } void set(stateTypes s, quint64 x, bool u) { - if (x != map[s]._value) { + auto d = (std::static_pointer_cast(map[s]._value)); + if (d == Q_NULLPTR || *d != x) { _mutex.lock(); - map[s]._value = quint64(x); + map[s]._value = std::shared_ptr(new quint64(x)); map[s]._valid = true; map[s]._updated = u; map[s]._dateUpdated = QDateTime::currentDateTime(); @@ -48,9 +44,10 @@ public: } } void set(stateTypes s, qint32 x, bool u) { - if (quint64(x) != map[s]._value) { + auto d = (std::static_pointer_cast(map[s]._value)); + if (d == Q_NULLPTR || *d != x) { _mutex.lock(); - map[s]._value = quint64(x); + map[s]._value = std::shared_ptr(new qint32(x)); map[s]._valid = true; map[s]._updated = u; map[s]._dateUpdated = QDateTime::currentDateTime(); @@ -58,9 +55,10 @@ public: } } void set(stateTypes s, qint16 x, bool u) { - if (quint64(x) != map[s]._value) { + auto d = (std::static_pointer_cast(map[s]._value)); + if (d == Q_NULLPTR || *d != x) { _mutex.lock(); - map[s]._value = quint64(x); + map[s]._value = std::shared_ptr(new qint16(x)); map[s]._valid = true; map[s]._updated = u; map[s]._dateUpdated = QDateTime::currentDateTime(); @@ -68,9 +66,10 @@ public: } } void set(stateTypes s, quint16 x, bool u) { - if (quint64(x) != map[s]._value) { + auto d = (std::static_pointer_cast(map[s]._value)); + if (d == Q_NULLPTR || *d != x) { _mutex.lock(); - map[s]._value = quint64(x); + map[s]._value = std::shared_ptr(new quint16(x)); map[s]._valid = true; map[s]._updated = u; map[s]._dateUpdated = QDateTime::currentDateTime(); @@ -78,9 +77,10 @@ public: } } void set(stateTypes s, quint8 x, bool u) { - if (quint64(x) != map[s]._value) { + auto d = (std::static_pointer_cast(map[s]._value)); + if (d == Q_NULLPTR || *d != x) { _mutex.lock(); - map[s]._value = quint64(x); + map[s]._value = std::shared_ptr(new quint8(x)); map[s]._valid = true; map[s]._updated = u; map[s]._dateUpdated = QDateTime::currentDateTime(); @@ -88,9 +88,10 @@ public: } } void set(stateTypes s, bool x, bool u) { - if (quint64(x) != map[s]._value) { + auto d = std::static_pointer_cast(map[s]._value); + if (d == Q_NULLPTR || *d != x) { _mutex.lock(); - map[s]._value = quint64(x); + map[s]._value = std::shared_ptr(new bool(x)); map[s]._valid = true; map[s]._updated = u; map[s]._dateUpdated = QDateTime::currentDateTime(); @@ -98,9 +99,10 @@ public: } } void set(stateTypes s, duplexMode x, bool u) { - if (quint64(x) != map[s]._value) { + auto d = (std::static_pointer_cast(map[s]._value)); + if (d == Q_NULLPTR || *d != x) { _mutex.lock(); - map[s]._value = quint64(x); + map[s]._value = std::shared_ptr(new duplexMode(x)); map[s]._valid = true; map[s]._updated = u; map[s]._dateUpdated = QDateTime::currentDateTime(); @@ -109,9 +111,10 @@ public: } void set(stateTypes s, rigInput x, bool u) { - if (quint64(x) != map[s]._value) { + auto d = (std::static_pointer_cast(map[s]._value)); + if (d == Q_NULLPTR || *d != x) { _mutex.lock(); - map[s]._value = quint64(x); + map[s]._value = std::shared_ptr(new rigInput(x)); map[s]._valid = true; map[s]._updated = u; map[s]._dateUpdated = QDateTime::currentDateTime(); @@ -119,15 +122,28 @@ public: } } - bool getBool(stateTypes s) { return map[s]._value != 0; } - quint8 getChar(stateTypes s) { return quint8(map[s]._value); } - qint16 getInt16(stateTypes s) { return qint16(map[s]._value); } - quint16 getUInt16(stateTypes s) { return quint16(map[s]._value); } - qint32 getInt32(stateTypes s) { return qint32(map[s]._value); } - quint32 getUInt32(stateTypes s) { return quint32(map[s]._value); } - quint64 getInt64(stateTypes s) { return map[s]._value; } - duplexMode getDuplex(stateTypes s) { return duplexMode(map[s]._value); } - rigInput getInput(stateTypes s) { return rigInput(map[s]._value); } + void set(stateTypes s, QString x, bool u) { + auto d = (std::static_pointer_cast(map[s]._value)); + if (d == Q_NULLPTR || *d != x) { + _mutex.lock(); + map[s]._value = std::shared_ptr(new QString(x)); + map[s]._valid = true; + map[s]._updated = u; + map[s]._dateUpdated = QDateTime::currentDateTime(); + _mutex.unlock(); + } + } + + bool getBool(stateTypes s) { if (map[s]._value != Q_NULLPTR) return *std::static_pointer_cast(map[s]._value); else return false; } + quint8 getChar(stateTypes s) { if (map[s]._value != Q_NULLPTR) return *std::static_pointer_cast(map[s]._value); else return 0; } + qint16 getInt16(stateTypes s) { if (map[s]._value != Q_NULLPTR) return *std::static_pointer_cast(map[s]._value); else return 0;} + quint16 getUInt16(stateTypes s) { if (map[s]._value != Q_NULLPTR) return *std::static_pointer_cast(map[s]._value); else return 0;} + qint32 getInt32(stateTypes s) { if (map[s]._value != Q_NULLPTR) return *std::static_pointer_cast(map[s]._value); else return 0;} + quint32 getUInt32(stateTypes s) { if (map[s]._value != Q_NULLPTR) return *std::static_pointer_cast(map[s]._value); else return 0;} + quint64 getInt64(stateTypes s) { if (map[s]._value != Q_NULLPTR) return *std::static_pointer_cast(map[s]._value); else return 0;} + duplexMode getDuplex(stateTypes s) { if (map[s]._value != Q_NULLPTR) return *std::static_pointer_cast(map[s]._value); else return dmSplitOff;} + rigInput getInput(stateTypes s) { if (map[s]._value != Q_NULLPTR) return *std::static_pointer_cast(map[s]._value); else return inputACC; } + QString getString(stateTypes s) { if (map[s]._value != Q_NULLPTR) return *std::static_pointer_cast(map[s]._value); else return QString(""); } QMap map; diff --git a/wfmain.cpp b/wfmain.cpp index 138cb21..df9a552 100644 --- a/wfmain.cpp +++ b/wfmain.cpp @@ -2046,7 +2046,9 @@ void wfmain::loadSettings() udpPrefs.clientName = settings->value("ClientName", udpDefPrefs.clientName).toString(); udpPrefs.halfDuplex = settings->value("HalfDuplex", udpDefPrefs.halfDuplex).toBool(); + ui->audioDuplexCombo->blockSignals(true); ui->audioDuplexCombo->setCurrentIndex((int)udpPrefs.halfDuplex); + ui->audioDuplexCombo->blockSignals(false); settings->endGroup(); @@ -8856,3 +8858,4 @@ void wfmain::on_cwButton_clicked() cw->raise(); cw->activateWindow(); } + diff --git a/wfview.vcxproj b/wfview.vcxproj index aa3db27..aa79e78 100644 --- a/wfview.vcxproj +++ b/wfview.vcxproj @@ -451,6 +451,7 @@ cmd /c copy /y ..\portaudio\msvc\Win32\Debug\portaudio_x86.dll wfview-debug + diff --git a/wfview.vcxproj.filters b/wfview.vcxproj.filters index f35b4ad..6f3f3a3 100644 --- a/wfview.vcxproj.filters +++ b/wfview.vcxproj.filters @@ -286,6 +286,9 @@ Header Files + + Header Files + diff --git a/wfviewtypes.h b/wfviewtypes.h index 131989d..a66c783 100644 --- a/wfviewtypes.h +++ b/wfviewtypes.h @@ -116,6 +116,17 @@ enum cmds { cmdSetTime, cmdSetDate, cmdSetUTCOffset }; +// Meters at the end as they are ALWAYS updated from the rig! +enum stateTypes { + VFOAFREQ, VFOBFREQ, CURRENTVFO, PTT, MODE, FILTER, PASSBAND, DUPLEX, DATAMODE, ANTENNA, RXANTENNA, CTCSS, TSQL, DTCS, CSQL, + PREAMP, AGC, ATTENUATOR, MODINPUT, AFGAIN, RFGAIN, SQUELCH, RFPOWER, MICGAIN, COMPLEVEL, MONITORLEVEL, BAL, KEYSPD, + VOXGAIN, ANTIVOXGAIN, CWPITCH, NOTCHF, IF, PBTIN, PBTOUT, APF, NR, NB, NBDEPTH, NBWIDTH, RIGINPUT, POWERONOFF, RITVALUE, + FAGCFUNC, NBFUNC, COMPFUNC, VOXFUNC, TONEFUNC, TSQLFUNC, SBKINFUNC, FBKINFUNC, ANFFUNC, NRFUNC, AIPFUNC, APFFUNC, MONFUNC, MNFUNC, RFFUNC, + AROFUNC, MUTEFUNC, VSCFUNC, REVFUNC, SQLFUNC, ABMFUNC, BCFUNC, MBCFUNC, RITFUNC, AFCFUNC, SATMODEFUNC, SCOPEFUNC, + RESUMEFUNC, TBURSTFUNC, TUNERFUNC, LOCKFUNC, SMETER, POWERMETER, SWRMETER, ALCMETER, COMPMETER, VOLTAGEMETER, CURRENTMETER, +}; + + struct commandtype { cmds cmd; std::shared_ptr data;