Merge branch 'rigs' into audio-enhance

merge-requests/7/head
Phil Taylor 2021-11-07 09:43:02 +00:00
commit 2b3c016546
8 zmienionych plików z 142 dodań i 29 usunięć

BIN
.swp

Plik binarny nie jest wyświetlany.

Wyświetl plik

@ -20,6 +20,7 @@ commHandler::commHandler()
baudrate = 115200;
stopbits = 1;
portName = "/dev/ttyUSB0";
this->PTTviaRTS = false;
setupComm(); // basic parameters
openPort();
@ -81,6 +82,50 @@ void commHandler::sendDataOut(const QByteArray &writeData)
mutex.lock();
qint64 bytesWritten;
if(PTTviaRTS)
{
// Size: 1 2 3 4 5 6 7 8
//index: 0 1 2 3 4 5 6 7
//Query: FE FE TO FROM 0x1C 0x00 0xFD
//PTT On: FE FE TO FROM 0x1C 0x00 0x01 0xFD
//PTT Off: FE FE TO FROM 0x1C 0x00 0x00 0xFD
if(writeData.endsWith(QByteArrayLiteral("\x1C\x00\xFD")))
{
// Query
//qDebug(logSerial()) << "Looks like PTT Query";
bool pttOn = this->rtsStatus();
QByteArray pttreturncmd = QByteArray("\xFE\xFE");
pttreturncmd.append(writeData.at(3));
pttreturncmd.append(writeData.at(2));
pttreturncmd.append(QByteArray("\x1C\x00", 2));
pttreturncmd.append((char)pttOn);
pttreturncmd.append("\xFD");
//qDebug(logSerial()) << "Sending fake PTT query result: " << (bool)pttOn;
printHex(pttreturncmd, false, true);
emit haveDataFromPort(pttreturncmd);
mutex.unlock();
return;
} else if(writeData.endsWith(QByteArrayLiteral("\x1C\x00\x01\xFD")))
{
// PTT ON
//qDebug(logSerial()) << "Looks like PTT ON";
setRTS(true);
mutex.unlock();
return;
} else if(writeData.endsWith(QByteArrayLiteral("\x1C\x00\x00\xFD")))
{
// PTT OFF
//qDebug(logSerial()) << "Looks like PTT OFF";
setRTS(false);
mutex.unlock();
return;
}
}
bytesWritten = port->write(writeData);
if(bytesWritten != (qint64)writeData.size())

Wyświetl plik

@ -993,14 +993,14 @@ void rigCommander::getSatelliteMode()
void rigCommander::getPTT()
{
if(rigCaps.useRTSforPTT)
{
emit havePTTStatus(comm->rtsStatus());
} else {
//if(rigCaps.useRTSforPTT && !usingNativeLAN)
//{
// emit havePTTStatus(comm->rtsStatus());
//} else {
QByteArray payload;
payload.setRawData("\x1C\x00", 2);
prepDataAndSend(payload);
}
//}
}
void rigCommander::getBandStackReg(char band, char regCode)
@ -1017,14 +1017,9 @@ void rigCommander::setPTT(bool pttOn)
if(pttAllowed)
{
if(rigCaps.useRTSforPTT)
{
emit toggleRTS(pttOn);
} else {
QByteArray payload("\x1C\x00", 2);
payload.append((char)pttOn);
prepDataAndSend(payload);
}
QByteArray payload("\x1C\x00", 2);
payload.append((char)pttOn);
prepDataAndSend(payload);
rigState.ptt = pttOn;
}
}
@ -2340,6 +2335,8 @@ void rigCommander::parseRegister21()
longfreq = payloadIn.mid(2,2);
longfreq.append(QByteArray(3,'\x00'));
f = parseFrequency(longfreq, 3);
if(payloadIn.length() < 5)
break;
ritHz = f.Hz*((payloadIn.at(4)=='\x01')?-1:1);
emit haveRitFrequency(ritHz);
break;
@ -3508,6 +3505,10 @@ void rigCommander::determineRigCaps()
}
haveRigCaps = true;
if(!usingNativeLAN)
comm->setUseRTSforPTT(rigCaps.useRTSforPTT);
if(lookingForRig)
{
lookingForRig = false;
@ -3951,6 +3952,29 @@ void rigCommander::getRigID()
prepDataAndSend(payload);
}
void rigCommander::setRigID(unsigned char rigID)
{
// This function overrides radio model detection.
// It can be used for radios without Rig ID commands,
// or to force a specific radio model
qInfo(logRig()) << "Sending rig ID to: (int)" << (int)rigID;
lookingForRig = true;
foundRig = false;
// needed because this is a fake message and thus the value is uninitialized
// this->civAddr comes from how rigCommander is setup and should be accurate.
this->incomingCIVAddr = this->civAddr;
this->model = determineRadioModel(rigID);
rigCaps.modelID = rigID;
rigCaps.model = determineRadioModel(rigID);
determineRigCaps();
}
void rigCommander::changeLatency(const quint16 value)
{
emit haveChangeLatency(value);

Wyświetl plik

@ -280,6 +280,7 @@ public slots:
// Rig ID and CIV:
void getRigID();
void findRigs();
void setRigID(unsigned char rigID);
void setCIVAddr(unsigned char civAddr);
// Calibration:

Wyświetl plik

@ -55,6 +55,9 @@ model_kind determineRadioModel(unsigned char rigID)
case model718:
rig = model718;
break;
case model736:
rig = model736;
break;
case model910h:
rig = model910h;
break;

Wyświetl plik

@ -408,6 +408,7 @@ void wfmain::makeRig()
connect(this, SIGNAL(sendCloseComm()), rig, SLOT(closeComm()));
connect(this, SIGNAL(sendChangeLatency(quint16)), rig, SLOT(changeLatency(quint16)));
connect(this, SIGNAL(getRigCIV()), rig, SLOT(findRigs()));
connect(this, SIGNAL(setRigID(unsigned char)), rig, SLOT(setRigID(unsigned char)));
connect(rig, SIGNAL(discoveredRigID(rigCapabilities)), this, SLOT(receiveFoundRigID(rigCapabilities)));
connect(rig, SIGNAL(commReady()), this, SLOT(receiveCommReady()));
@ -532,8 +533,14 @@ void wfmain::receiveCommReady()
// We still query the rigID to find the model, but at least we know the CIV.
qInfo(logSystem()) << "Skipping automatic CIV, using user-supplied value of " << prefs.radioCIVAddr;
showStatusBarText(QString("Using user-supplied radio CI-V address of 0x%1").arg(prefs.radioCIVAddr, 2, 16));
emit getRigID();
getInitialRigState();
if(prefs.CIVisRadioModel)
{
qInfo(logSystem()) << "Skipping Rig ID query, using user-supplied model from CI-V address: " << prefs.radioCIVAddr;
emit setRigID(prefs.radioCIVAddr);
} else {
emit getRigID();
getInitialRigState();
}
}
}
@ -990,6 +997,10 @@ void wfmain::setUIToPrefs()
ui->wfthemeCombo->setCurrentIndex(ui->wfthemeCombo->findData(prefs.wftheme));
colorMap->setGradient(static_cast<QCPColorGradient::GradientPreset>(prefs.wftheme));
ui->useCIVasRigIDChk->blockSignals(true);
ui->useCIVasRigIDChk->setChecked(prefs.CIVisRadioModel);
ui->useCIVasRigIDChk->blockSignals(false);
}
void wfmain::setAudioDevicesUI()
@ -1285,6 +1296,7 @@ void wfmain::setDefPrefs()
defPrefs.wfInterpolate = true;
defPrefs.stylesheetPath = QString("qdarkstyle/style.qss");
defPrefs.radioCIVAddr = 0x00; // previously was 0x94 for 7300.
defPrefs.CIVisRadioModel = false;
defPrefs.serialPortRadio = QString("auto");
defPrefs.serialPortBaud = 115200;
defPrefs.enablePTT = false;
@ -1382,6 +1394,9 @@ void wfmain::loadSettings()
ui->rigCIVManualAddrChk->setChecked(false);
ui->rigCIVaddrHexLine->setEnabled(false);
}
prefs.CIVisRadioModel = (bool)settings->value("CIVisRadioModel", defPrefs.CIVisRadioModel).toBool();
prefs.serialPortRadio = settings->value("SerialPortRadio", defPrefs.serialPortRadio).toString();
int serialIndex = ui->serialDeviceListCombo->findText(prefs.serialPortRadio);
if (serialIndex != -1) {
@ -1640,6 +1655,7 @@ void wfmain::saveSettings()
// Radio and Comms: C-IV addr, port to use
settings->beginGroup("Radio");
settings->setValue("RigCIVuInt", prefs.radioCIVAddr);
settings->setValue("CIVisRadioModel", prefs.CIVisRadioModel);
settings->setValue("SerialPortRadio", prefs.serialPortRadio);
settings->setValue("SerialPortBaud", prefs.serialPortBaud);
settings->setValue("VirtualSerialPort", prefs.virtualSerialPort);
@ -2650,10 +2666,12 @@ void wfmain::doCmd(cmds cmd)
emit getSpectrumRefLevel();
break;
case cmdGetATUStatus:
emit getATUStatus();
if(rigCaps.hasATU)
emit getATUStatus();
break;
case cmdStartATU:
emit startATU();
if(rigCaps.hasATU)
emit startATU();
break;
case cmdGetAttenuator:
emit getAttenuator();
@ -2671,10 +2689,7 @@ void wfmain::doCmd(cmds cmd)
emit setScopeMode(spectModeFixed);
break;
case cmdGetPTT:
if(rigCaps.hasPTTCommand)
{
emit getPTT();
}
emit getPTT();
break;
case cmdGetTxRxMeter:
if(amTransmitting)
@ -3130,12 +3145,16 @@ void wfmain::initPeriodicCommands()
insertSlowPeriodicCommand(cmdGetFreq, 128);
insertSlowPeriodicCommand(cmdGetMode, 128);
insertSlowPeriodicCommand(cmdGetPTT, 128);
if(rigCaps.hasTransmit)
insertSlowPeriodicCommand(cmdGetPTT, 128);
insertSlowPeriodicCommand(cmdGetTxPower, 128);
insertSlowPeriodicCommand(cmdGetRxGain, 128);
insertSlowPeriodicCommand(cmdGetAttenuator, 128);
insertSlowPeriodicCommand(cmdGetPTT, 128);
insertSlowPeriodicCommand(cmdGetPreamp, 128);
if(rigCaps.hasAttenuator)
insertSlowPeriodicCommand(cmdGetAttenuator, 128);
if(rigCaps.hasTransmit)
insertSlowPeriodicCommand(cmdGetPTT, 128);
if(rigCaps.hasPreamp)
insertSlowPeriodicCommand(cmdGetPreamp, 128);
if (rigCaps.hasRXAntenna) {
insertSlowPeriodicCommand(cmdGetAntenna, 128);
}
@ -5471,11 +5490,18 @@ void wfmain::on_moreControlsBtn_clicked()
trxadj->show();
}
void wfmain::on_useCIVasRigIDChk_clicked(bool checked)
{
prefs.CIVisRadioModel = checked;
}
// --- DEBUG FUNCTION ---
void wfmain::on_debugBtn_clicked()
{
qInfo(logSystem()) << "Debug button pressed.";
trxadj->show();
// issueDelayedCommand(cmdGetRigID);
emit getRigCIV();
//trxadj->show();
//setRadioTimeDatePrep();
//wf->setInteraction(QCP::iRangeZoom, true);
//wf->setInteraction(QCP::iRangeDrag, true);

Wyświetl plik

@ -51,6 +51,7 @@ public:
signals:
// Basic to rig:
void setCIVAddr(unsigned char newRigCIVAddr);
void setRigID(unsigned char rigID);
// Power
void sendPowerOn();
@ -497,6 +498,8 @@ private slots:
void on_moreControlsBtn_clicked();
void on_useCIVasRigIDChk_clicked(bool checked);
private:
Ui::wfmain *ui;
void closeEvent(QCloseEvent *event);
@ -714,6 +717,7 @@ private:
bool wfInterpolate;
QString stylesheetPath;
unsigned char radioCIVAddr;
bool CIVisRadioModel;
QString serialPortRadio;
quint32 serialPortBaud;
bool enablePTT;

Wyświetl plik

@ -6,7 +6,7 @@
<rect>
<x>0</x>
<y>0</y>
<width>941</width>
<width>946</width>
<height>582</height>
</rect>
</property>
@ -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">
@ -2373,6 +2373,16 @@
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="useCIVasRigIDChk">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Only check for older radios!&lt;/p&gt;&lt;p&gt;This checkbox forces wfview to trust that the CI-V address is also the model number of the radio. This is only useful for older radios that do not reply to our Rig ID requests (0x19 0x00). Do not check this box unless you have an older radio. &lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string>Use as Model too</string>
</property>
</widget>
</item>
<item>
<spacer name="tuneSpacer">
<property name="orientation">
@ -2830,7 +2840,7 @@
<rect>
<x>0</x>
<y>0</y>
<width>941</width>
<width>946</width>
<height>22</height>
</rect>
</property>