Merge branch 'audio-enhance'

merge-requests/7/head
Roeland Jansen 2021-11-23 08:19:17 +01:00
commit 66734b3be0
3 zmienionych plików z 75 dodań i 1 usunięć

Wyświetl plik

@ -22,6 +22,8 @@
rigCommander::rigCommander() rigCommander::rigCommander()
{ {
rigState.mutex = new QMutex();
QMutexLocker locker(rigState.mutex);
rigState.filter = 0; rigState.filter = 0;
rigState.mode = 0; rigState.mode = 0;
rigState.ptt = 0; rigState.ptt = 0;
@ -33,6 +35,7 @@ rigCommander::rigCommander()
rigCommander::~rigCommander() rigCommander::~rigCommander()
{ {
closeComm(); closeComm();
delete rigState.mutex;
} }
@ -569,12 +572,16 @@ void rigCommander::setFrequency(unsigned char vfo, freqt freq)
cmdPayload.append(freqPayload); cmdPayload.append(freqPayload);
if (vfo == 0) { if (vfo == 0) {
rigState.mutex->lock();
rigState.vfoAFreq = freq; rigState.vfoAFreq = freq;
rigState.mutex->unlock();
cmdPayload.prepend('\x00'); cmdPayload.prepend('\x00');
} }
else else
{ {
rigState.mutex->lock();
rigState.vfoBFreq = freq; rigState.vfoBFreq = freq;
rigState.mutex->unlock();
cmdPayload.prepend(vfo); cmdPayload.prepend(vfo);
cmdPayload.prepend('\x25'); cmdPayload.prepend('\x25');
} }
@ -702,6 +709,8 @@ void rigCommander::setMode(mode_info m)
payload.append(m.filter); payload.append(m.filter);
prepDataAndSend(payload); prepDataAndSend(payload);
QMutexLocker locker(rigState.mutex);
rigState.mode = m.reg; rigState.mode = m.reg;
rigState.filter = m.filter; rigState.filter = m.filter;
} }
@ -733,6 +742,7 @@ void rigCommander::setMode(unsigned char mode, unsigned char modeFilter)
} }
prepDataAndSend(payload); prepDataAndSend(payload);
QMutexLocker locker(rigState.mutex);
rigState.mode = mode; rigState.mode = mode;
rigState.filter = modeFilter; rigState.filter = modeFilter;
@ -753,6 +763,7 @@ void rigCommander::setDataMode(bool dataOn, unsigned char filter)
payload.append("\x00\x00", 2); // data mode off, bandwidth not defined per ICD. payload.append("\x00\x00", 2); // data mode off, bandwidth not defined per ICD.
} }
prepDataAndSend(payload); prepDataAndSend(payload);
QMutexLocker locker(rigState.mutex);
rigState.datamode = dataOn; rigState.datamode = dataOn;
} }
@ -1020,6 +1031,7 @@ void rigCommander::setPTT(bool pttOn)
QByteArray payload("\x1C\x00", 2); QByteArray payload("\x1C\x00", 2);
payload.append((char)pttOn); payload.append((char)pttOn);
prepDataAndSend(payload); prepDataAndSend(payload);
QMutexLocker locker(rigState.mutex);
rigState.ptt = pttOn; rigState.ptt = pttOn;
} }
} }
@ -1241,16 +1253,22 @@ void rigCommander::parseCommand()
break; break;
case '\x0F': case '\x0F':
emit haveDuplexMode((duplexMode)(unsigned char)payloadIn[1]); emit haveDuplexMode((duplexMode)(unsigned char)payloadIn[1]);
rigState.mutex->lock();
rigState.duplex = (duplexMode)(unsigned char)payloadIn[1]; rigState.duplex = (duplexMode)(unsigned char)payloadIn[1];
rigState.mutex->unlock();
break; break;
case '\x11': case '\x11':
emit haveAttenuator((unsigned char)payloadIn.at(1)); emit haveAttenuator((unsigned char)payloadIn.at(1));
rigState.mutex->lock();
rigState.attenuator = (unsigned char)payloadIn.at(1); rigState.attenuator = (unsigned char)payloadIn.at(1);
rigState.mutex->unlock();
break; break;
case '\x12': case '\x12':
emit haveAntenna((unsigned char)payloadIn.at(1), (bool)payloadIn.at(2)); emit haveAntenna((unsigned char)payloadIn.at(1), (bool)payloadIn.at(2));
rigState.mutex->lock();
rigState.antenna = (unsigned char)payloadIn.at(1); rigState.antenna = (unsigned char)payloadIn.at(1);
rigState.rxAntenna = (bool)payloadIn.at(2); rigState.rxAntenna = (bool)payloadIn.at(2);
rigState.mutex->unlock();
break; break;
case '\x14': case '\x14':
// read levels // read levels
@ -1346,7 +1364,6 @@ void rigCommander::parseLevels()
// "INDEX: 00 01 02 03 04 " // "INDEX: 00 01 02 03 04 "
// "DATA: 14 02 00 78 fd " // "DATA: 14 02 00 78 fd "
if(payloadIn[0] == '\x14') if(payloadIn[0] == '\x14')
{ {
switch(payloadIn[1]) switch(payloadIn[1])
@ -1355,18 +1372,24 @@ void rigCommander::parseLevels()
// AF level - ignore if LAN connection. // AF level - ignore if LAN connection.
if (udp == Q_NULLPTR) { if (udp == Q_NULLPTR) {
emit haveAfGain(level); emit haveAfGain(level);
rigState.mutex->lock();
rigState.afGain = level; rigState.afGain = level;
rigState.mutex->unlock();
} }
break; break;
case '\x02': case '\x02':
// RX RF Gain // RX RF Gain
emit haveRfGain(level); emit haveRfGain(level);
rigState.mutex->lock();
rigState.rfGain = level; rigState.rfGain = level;
rigState.mutex->unlock();
break; break;
case '\x03': case '\x03':
// Squelch level // Squelch level
emit haveSql(level); emit haveSql(level);
rigState.mutex->lock();
rigState.squelch = level; rigState.squelch = level;
rigState.mutex->unlock();
break; break;
case '\x07': case '\x07':
// Twin BPF Inner, or, IF-Shift level // Twin BPF Inner, or, IF-Shift level
@ -1385,12 +1408,16 @@ void rigCommander::parseLevels()
case '\x0A': case '\x0A':
// TX RF level // TX RF level
emit haveTxPower(level); emit haveTxPower(level);
rigState.mutex->lock();
rigState.txPower = level; rigState.txPower = level;
rigState.mutex->unlock();
break; break;
case '\x0B': case '\x0B':
// Mic Gain // Mic Gain
emit haveMicGain(level); emit haveMicGain(level);
rigState.mutex->lock();
rigState.micGain = level; rigState.micGain = level;
rigState.mutex->unlock();
break; break;
case '\x0C': case '\x0C':
// CW Keying Speed - ignore for now // CW Keying Speed - ignore for now
@ -1401,7 +1428,9 @@ void rigCommander::parseLevels()
case '\x0E': case '\x0E':
// compressor level // compressor level
emit haveCompLevel(level); emit haveCompLevel(level);
rigState.mutex->lock();
rigState.compLevel = level; rigState.compLevel = level;
rigState.mutex->unlock();
break; break;
case '\x12': case '\x12':
// NB level - ignore for now // NB level - ignore for now
@ -1409,17 +1438,23 @@ void rigCommander::parseLevels()
case '\x15': case '\x15':
// monitor level // monitor level
emit haveMonitorLevel(level); emit haveMonitorLevel(level);
rigState.mutex->lock();
rigState.monitorLevel = level; rigState.monitorLevel = level;
rigState.mutex->unlock();
break; break;
case '\x16': case '\x16':
// VOX gain // VOX gain
emit haveVoxGain(level); emit haveVoxGain(level);
rigState.mutex->lock();
rigState.voxGain = level; rigState.voxGain = level;
rigState.mutex->unlock();
break; break;
case '\x17': case '\x17':
// anti-VOX gain // anti-VOX gain
emit haveAntiVoxGain(level); emit haveAntiVoxGain(level);
rigState.mutex->lock();
rigState.antiVoxGain = level; rigState.antiVoxGain = level;
rigState.mutex->unlock();
break; break;
default: default:
@ -1437,42 +1472,58 @@ void rigCommander::parseLevels()
case '\x02': case '\x02':
// S-Meter // S-Meter
emit haveMeter(meterS, level); emit haveMeter(meterS, level);
rigState.mutex->lock();
rigState.sMeter = level; rigState.sMeter = level;
rigState.mutex->unlock();
break; break;
case '\x04': case '\x04':
// Center (IC-R8600) // Center (IC-R8600)
emit haveMeter(meterCenter, level); emit haveMeter(meterCenter, level);
rigState.mutex->lock();
rigState.sMeter = level; rigState.sMeter = level;
rigState.mutex->unlock();
break; break;
case '\x11': case '\x11':
// RF-Power meter // RF-Power meter
emit haveMeter(meterPower, level); emit haveMeter(meterPower, level);
rigState.mutex->lock();
rigState.powerMeter = level; rigState.powerMeter = level;
rigState.mutex->unlock();
break; break;
case '\x12': case '\x12':
// SWR // SWR
emit haveMeter(meterSWR, level); emit haveMeter(meterSWR, level);
rigState.mutex->lock();
rigState.swrMeter = level; rigState.swrMeter = level;
rigState.mutex->unlock();
break; break;
case '\x13': case '\x13':
// ALC // ALC
emit haveMeter(meterALC, level); emit haveMeter(meterALC, level);
rigState.mutex->lock();
rigState.alcMeter = level; rigState.alcMeter = level;
rigState.mutex->unlock();
break; break;
case '\x14': case '\x14':
// COMP dB reduction // COMP dB reduction
emit haveMeter(meterComp, level); emit haveMeter(meterComp, level);
rigState.mutex->lock();
rigState.compMeter = level; rigState.compMeter = level;
rigState.mutex->unlock();
break; break;
case '\x15': case '\x15':
// VD (12V) // VD (12V)
emit haveMeter(meterVoltage, level); emit haveMeter(meterVoltage, level);
rigState.mutex->lock();
rigState.voltageMeter = level; rigState.voltageMeter = level;
rigState.mutex->unlock();
break; break;
case '\x16': case '\x16':
// ID // ID
emit haveMeter(meterCurrent, level); emit haveMeter(meterCurrent, level);
rigState.mutex->lock();
rigState.currentMeter = level; rigState.currentMeter = level;
rigState.mutex->unlock();
break; break;
default: default:
@ -2379,6 +2430,7 @@ void rigCommander::parsePTT()
// PTT on // PTT on
emit havePTTStatus(true); emit havePTTStatus(true);
} }
QMutexLocker locker(rigState.mutex);
rigState.ptt = (bool)payloadIn[2]; rigState.ptt = (bool)payloadIn[2];
} }
@ -2398,6 +2450,7 @@ void rigCommander::parseRegisters1A()
// "INDEX: 00 01 02 03 04 " // "INDEX: 00 01 02 03 04 "
// "DATA: 1a 06 01 03 fd " (data mode enabled, filter width 3 selected) // "DATA: 1a 06 01 03 fd " (data mode enabled, filter width 3 selected)
QMutexLocker locker(rigState.mutex);
switch(payloadIn[01]) switch(payloadIn[01])
{ {
@ -2440,24 +2493,32 @@ void rigCommander::parseRegister1B()
// "Repeater tone" // "Repeater tone"
tone = decodeTone(payloadIn); tone = decodeTone(payloadIn);
emit haveTone(tone); emit haveTone(tone);
rigState.mutex->lock();
rigState.ctcss = tone; rigState.ctcss = tone;
rigState.mutex->unlock();
break; break;
case '\x01': case '\x01':
// "TSQL tone" // "TSQL tone"
tone = decodeTone(payloadIn); tone = decodeTone(payloadIn);
emit haveTSQL(tone); emit haveTSQL(tone);
rigState.mutex->lock();
rigState.tsql = tone; rigState.tsql = tone;
rigState.mutex->unlock();
break; break;
case '\x02': case '\x02':
// DTCS (DCS) // DTCS (DCS)
tone = decodeTone(payloadIn, tinv, rinv); tone = decodeTone(payloadIn, tinv, rinv);
emit haveDTCS(tone, tinv, rinv); emit haveDTCS(tone, tinv, rinv);
rigState.mutex->lock();
rigState.dtcs = tone; rigState.dtcs = tone;
rigState.mutex->unlock();
break; break;
case '\x07': case '\x07':
// "CSQL code (DV mode)" // "CSQL code (DV mode)"
tone = decodeTone(payloadIn); tone = decodeTone(payloadIn);
rigState.mutex->lock();
rigState.csql = tone; rigState.csql = tone;
rigState.mutex->unlock();
break; break;
default: default:
break; break;
@ -2469,6 +2530,7 @@ void rigCommander::parseRegister16()
//"INDEX: 00 01 02 03 " //"INDEX: 00 01 02 03 "
//"DATA: 16 5d 00 fd " //"DATA: 16 5d 00 fd "
// ^-- mode info here // ^-- mode info here
switch(payloadIn.at(1)) switch(payloadIn.at(1))
{ {
case '\x5d': case '\x5d':
@ -2477,7 +2539,9 @@ void rigCommander::parseRegister16()
case '\x02': case '\x02':
// Preamp // Preamp
emit havePreamp((unsigned char)payloadIn.at(2)); emit havePreamp((unsigned char)payloadIn.at(2));
rigState.mutex->lock();
rigState.preamp = (unsigned char)payloadIn.at(2); rigState.preamp = (unsigned char)payloadIn.at(2);
rigState.mutex->unlock();
break; break;
default: default:
break; break;
@ -3790,7 +3854,10 @@ void rigCommander::parseFrequency()
freq.MHzDouble = frequencyMhz; freq.MHzDouble = frequencyMhz;
rigState.mutex->lock();
rigState.vfoAFreq = freq; rigState.vfoAFreq = freq;
rigState.mutex->unlock();
emit haveFrequency(freq); emit haveFrequency(freq);
} }
@ -3868,8 +3935,10 @@ void rigCommander::parseMode()
} else { } else {
filter = 0; filter = 0;
} }
rigState.mutex->lock();
rigState.mode = (unsigned char)payloadIn[01]; rigState.mode = (unsigned char)payloadIn[01];
rigState.filter = filter; rigState.filter = filter;
rigState.mutex->unlock();
emit haveMode((unsigned char)payloadIn[01], filter); emit haveMode((unsigned char)payloadIn[01], filter);
} }

Wyświetl plik

@ -2,6 +2,8 @@
#define RIGCOMMANDER_H #define RIGCOMMANDER_H
#include <QObject> #include <QObject>
#include <QMutex>
#include <QMutexLocker>
#include <QDebug> #include <QDebug>
#include "commhandler.h" #include "commhandler.h"
@ -60,6 +62,7 @@ struct timekind {
}; };
struct rigStateStruct { struct rigStateStruct {
QMutex *mutex;
freqt vfoAFreq; freqt vfoAFreq;
freqt vfoBFreq; freqt vfoBFreq;
unsigned char currentVfo; unsigned char currentVfo;

Wyświetl plik

@ -175,6 +175,8 @@ void rigCtlClient::socketReadyRead()
QStringList command = commandBuffer.mid(num).split(" "); QStringList command = commandBuffer.mid(num).split(" ");
QMutexLocker locker(rigState->mutex);
if (command[0] == 0xf0 || command[0] == "chk_vfo") if (command[0] == 0xf0 || command[0] == "chk_vfo")
{ {
QString resp; QString resp;