diff --git a/.swo b/.swo deleted file mode 100644 index 171d631..0000000 Binary files a/.swo and /dev/null differ diff --git a/CHANGELOG b/CHANGELOG index 01363f3..dea2e59 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,5 +1,22 @@ # CHANGELOG +- 20211022 + + Don't block until audio buffer has space + + Bit of tidying + +- 20211020 + + Tidy-up server shutdown + + Trying to find cause of lockup when client disappears + +- 20211006 + + Send TX/Freq changes multiple times with rigctld + + bumped to 1.2d hopefully last testversion before 1.20 - 202109022 Remove duplicate setPriority() diff --git a/WHATSNEW b/WHATSNEW index bfc7df3..33042e3 100644 --- a/WHATSNEW +++ b/WHATSNEW @@ -10,3 +10,10 @@ The following highlights are in this 1.x-release: rigctl basic split support rigctl prevents switching off civ transceive added 25 kHz step + + as a temporary measure sending multiple TX/FREQ change commands to the rig + when we use rigctld. + + people should use "fake it" in wsjtx as the split code is not reliable. + + tidied up udp server function for better reliability diff --git a/aboutbox.cpp b/aboutbox.cpp index 5c45f42..a9222b0 100644 --- a/aboutbox.cpp +++ b/aboutbox.cpp @@ -12,7 +12,7 @@ aboutbox::aboutbox(QWidget *parent) : ui->logoBtn->setIcon(QIcon(":resources/wfview.png")); ui->logoBtn->setStyleSheet("Text-align:left"); - ui->topText->setText("wfview version 1.2c"); + ui->topText->setText("wfview version 1.2d"); QString head = QString(""); QString copyright = QString("Copyright 2017-2021 Elliott H. Liggett, W6EL. All rights reserved. wfview source code is licensed under the GNU GPLv3."); diff --git a/commhandler.cpp b/commhandler.cpp index 7a48d87..165c90e 100644 --- a/commhandler.cpp +++ b/commhandler.cpp @@ -45,6 +45,7 @@ commHandler::commHandler(QString portName, quint32 baudRate) baudrate = baudRate; stopbits = 1; this->portName = portName; + this->PTTviaRTS = false; setupComm(); // basic parameters openPort(); @@ -162,6 +163,25 @@ void commHandler::receiveDataIn() } } +void commHandler::setRTS(bool rtsOn) +{ + bool success = port->setRequestToSend(rtsOn); + if(!success) + { + qInfo(logSerial()) << "Error, could not set RTS on port " << portName; + } +} + +bool commHandler::rtsStatus() +{ + return port->isRequestToSend(); +} + +void commHandler::setUseRTSforPTT(bool PTTviaRTS) +{ + this->PTTviaRTS = PTTviaRTS; +} + void commHandler::openPort() { bool success; diff --git a/commhandler.h b/commhandler.h index e7e5580..c76e23f 100644 --- a/commhandler.h +++ b/commhandler.h @@ -18,9 +18,14 @@ public: commHandler(); commHandler(QString portName, quint32 baudRate); bool serialError; + bool rtsStatus(); ~commHandler(); +public slots: + void setUseRTSforPTT(bool useRTS); + void setRTS(bool rtsOn); + private slots: void receiveDataIn(); // from physical port void receiveDataFromUserToRig(const QByteArray &data); @@ -38,6 +43,7 @@ private: void openPort(); void closePort(); + void sendDataOut(const QByteArray &writeData); // out to radio void debugMe(); void hexPrint(); @@ -63,6 +69,8 @@ private: bool havePt; QString ptDevSlave; + bool PTTviaRTS = false; + bool isConnected; // port opened mutable QMutex mutex; void printHex(const QByteArray &pdata, bool printVert, bool printHoriz); diff --git a/rigcommander.cpp b/rigcommander.cpp index 78121cb..b57e285 100644 --- a/rigcommander.cpp +++ b/rigcommander.cpp @@ -63,6 +63,7 @@ void rigCommander::commSetup(unsigned char rigCivAddr, QString rigSerialPort, qu connect(ptty, SIGNAL(haveDataFromPort(QByteArray)), comm, SLOT(receiveDataFromUserToRig(QByteArray))); // data from the program to the comm port: connect(this, SIGNAL(dataForComm(QByteArray)), comm, SLOT(receiveDataFromUserToRig(QByteArray))); + connect(this, SIGNAL(toggleRTS(bool)), comm, SLOT(setRTS(bool))); // data from the rig to the ptty: connect(comm, SIGNAL(haveDataFromPort(QByteArray)), ptty, SLOT(receiveDataFromRigToPtty(QByteArray))); @@ -236,6 +237,9 @@ void rigCommander::findRigs() data.append(payloadSuffix); emit dataForComm(data); + // HACK for testing radios that do not respond to rig ID queries: + //this->model = model736; + //this->determineRigCaps(); return; } @@ -989,9 +993,14 @@ void rigCommander::getSatelliteMode() void rigCommander::getPTT() { - QByteArray payload; - payload.setRawData("\x1C\x00", 2); - prepDataAndSend(payload); + if(rigCaps.useRTSforPTT) + { + emit havePTTStatus(comm->rtsStatus()); + } else { + QByteArray payload; + payload.setRawData("\x1C\x00", 2); + prepDataAndSend(payload); + } } void rigCommander::getBandStackReg(char band, char regCode) @@ -1008,9 +1017,14 @@ void rigCommander::setPTT(bool pttOn) if(pttAllowed) { - QByteArray payload("\x1C\x00", 2); - payload.append((char)pttOn); - prepDataAndSend(payload); + if(rigCaps.useRTSforPTT) + { + emit toggleRTS(pttOn); + } else { + QByteArray payload("\x1C\x00", 2); + payload.append((char)pttOn); + prepDataAndSend(payload); + } rigState.ptt = pttOn; } } @@ -1359,6 +1373,17 @@ void rigCommander::parseLevels() emit haveSql(level); rigState.squelch = level; break; + case '\x07': + // Twin BPF Inner, or, IF-Shift level + if(rigCaps.hasTBPF) + emit haveTPBFInner(level); + else + emit haveIFShift(level); + break; + case '\x08': + // Twin BPF Outer + emit haveTPBFOuter(level); + break; case '\x09': // CW Pitch - ignore for now break; @@ -1466,6 +1491,27 @@ void rigCommander::parseLevels() } +void rigCommander::setIFShift(unsigned char level) +{ + QByteArray payload("\x14\x07"); + payload.append(bcdEncodeInt(level)); + prepDataAndSend(payload); +} + +void rigCommander::setTPBFInner(unsigned char level) +{ + QByteArray payload("\x14\x07"); + payload.append(bcdEncodeInt(level)); + prepDataAndSend(payload); +} + +void rigCommander::setTPBFOuter(unsigned char level) +{ + QByteArray payload("\x14\x08"); + payload.append(bcdEncodeInt(level)); + prepDataAndSend(payload); +} + void rigCommander::setTxPower(unsigned char power) { QByteArray payload("\x14\x0A"); @@ -1889,6 +1935,24 @@ void rigCommander::getAfGain() prepDataAndSend(payload); } +void rigCommander::getIFShift() +{ + QByteArray payload("\x14\x07"); + prepDataAndSend(payload); +} + +void rigCommander::getTPBFInner() +{ + QByteArray payload("\x14\x07"); + prepDataAndSend(payload); +} + +void rigCommander::getTPBFOuter() +{ + QByteArray payload("\x14\x08"); + prepDataAndSend(payload); +} + void rigCommander::getSql() { QByteArray payload("\x14\x03"); @@ -2824,6 +2888,9 @@ void rigCommander::determineRigCaps() rigCaps.hasCTCSS = false; rigCaps.hasDTCS = false; + rigCaps.hasTBPF = false; + rigCaps.hasIFShift = false; + rigCaps.spectSeqMax = 0; rigCaps.spectAmpMax = 0; rigCaps.spectLenMax = 0; @@ -2852,6 +2919,7 @@ void rigCommander::determineRigCaps() rigCaps.hasTransmit = true; rigCaps.hasPTTCommand = true; + rigCaps.useRTSforPTT = false; // Common, reasonable defaults for most supported HF rigs: rigCaps.bsr[band160m] = 0x01; @@ -2894,6 +2962,7 @@ void rigCommander::determineRigCaps() rigCaps.hasWiFi = false; rigCaps.hasATU = true; rigCaps.hasCTCSS = true; + rigCaps.hasTBPF = true; rigCaps.attenuators.push_back('\x20'); rigCaps.preamps.push_back('\x01'); rigCaps.preamps.push_back('\x02'); @@ -2922,6 +2991,7 @@ void rigCommander::determineRigCaps() rigCaps.hasCTCSS = true; rigCaps.hasDTCS = true; rigCaps.hasDV = true; + rigCaps.hasTBPF = true; rigCaps.attenuators.push_back('\x10'); rigCaps.attenuators.push_back('\x20'); rigCaps.attenuators.push_back('\x30'); @@ -2959,6 +3029,7 @@ void rigCommander::determineRigCaps() rigCaps.hasDV = true; rigCaps.hasCTCSS = true; rigCaps.hasDTCS = true; + rigCaps.hasTBPF = true; rigCaps.attenuators.push_back('\x10'); rigCaps.preamps.push_back('\x01'); rigCaps.bands = standardVU; @@ -3007,6 +3078,7 @@ void rigCommander::determineRigCaps() rigCaps.hasATU = true; rigCaps.hasCTCSS = false; rigCaps.hasDTCS = false; + rigCaps.hasTBPF = true; rigCaps.attenuators.insert(rigCaps.attenuators.end(), {0x00, 0x06, 0x12, 0x18}); rigCaps.preamps.push_back('\x01'); rigCaps.preamps.push_back('\x02'); @@ -3033,6 +3105,7 @@ void rigCommander::determineRigCaps() rigCaps.hasEthernet = true; rigCaps.hasWiFi = false; rigCaps.hasCTCSS = true; + rigCaps.hasTBPF = true; rigCaps.attenuators.insert(rigCaps.attenuators.end(), {'\x03', '\x06', '\x09', '\x12',\ '\x15', '\x18', '\x21', '\x24',\ @@ -3067,6 +3140,7 @@ void rigCommander::determineRigCaps() rigCaps.hasWiFi = false; rigCaps.hasATU = true; rigCaps.hasCTCSS = true; + rigCaps.hasTBPF = true; rigCaps.attenuators.insert(rigCaps.attenuators.end(), {'\x03', '\x06', '\x09', '\x12', '\x15', '\x18', '\x21'}); @@ -3101,6 +3175,7 @@ void rigCommander::determineRigCaps() rigCaps.hasATU = true; rigCaps.hasCTCSS = true; rigCaps.hasDTCS = true; + rigCaps.hasTBPF = true; rigCaps.attenuators.insert(rigCaps.attenuators.end(),{ '\x10' , '\x20'}); rigCaps.preamps.push_back('\x01'); rigCaps.preamps.push_back('\x02'); @@ -3133,6 +3208,7 @@ void rigCommander::determineRigCaps() rigCaps.hasATU = true; rigCaps.hasCTCSS = true; rigCaps.hasDTCS = true; + rigCaps.hasTBPF = true; rigCaps.attenuators.push_back('\x12'); rigCaps.preamps.push_back('\x01'); rigCaps.bands = standardHF; @@ -3156,6 +3232,7 @@ void rigCommander::determineRigCaps() rigCaps.hasATU = true; rigCaps.hasCTCSS = true; rigCaps.hasDTCS = true; + rigCaps.hasTBPF = true; rigCaps.attenuators.push_back('\x20'); rigCaps.preamps.push_back('\x01'); rigCaps.preamps.push_back('\x02'); @@ -3179,6 +3256,7 @@ void rigCommander::determineRigCaps() rigCaps.hasATU = true; rigCaps.hasCTCSS = true; rigCaps.hasDTCS = true; + rigCaps.hasTBPF = true; rigCaps.attenuators.push_back('\x12'); rigCaps.preamps.push_back('\x01'); rigCaps.preamps.push_back('\x02'); @@ -3207,6 +3285,7 @@ void rigCommander::determineRigCaps() rigCaps.hasATU = true; rigCaps.hasCTCSS = true; rigCaps.hasDTCS = true; + rigCaps.hasTBPF = true; rigCaps.attenuators.push_back('\x20'); rigCaps.preamps.push_back('\x01'); rigCaps.bands = standardHF; @@ -3226,6 +3305,7 @@ void rigCommander::determineRigCaps() rigCaps.hasEthernet = true; rigCaps.hasWiFi = false; rigCaps.hasCTCSS = true; + rigCaps.hasTBPF = true; rigCaps.attenuators.insert(rigCaps.attenuators.end(), {'\x06', '\x12', '\x18'}); rigCaps.preamps.push_back('\x01'); @@ -3253,6 +3333,7 @@ void rigCommander::determineRigCaps() rigCaps.hasFDcomms = false; rigCaps.hasATU = true; rigCaps.hasPTTCommand = false; + rigCaps.useRTSforPTT = true; rigCaps.hasDataModes = false; rigCaps.attenuators.push_back('\x20'); rigCaps.bands = standardHF; @@ -3273,6 +3354,8 @@ void rigCommander::determineRigCaps() rigCaps.hasFDcomms = false; rigCaps.hasATU = false; rigCaps.hasPTTCommand = false; + rigCaps.useRTSforPTT = true; + rigCaps.hasIFShift = true; rigCaps.hasDataModes = false; rigCaps.attenuators.push_back('\x20'); rigCaps.preamps.push_back('\x01'); @@ -3286,6 +3369,28 @@ void rigCommander::determineRigCaps() }; rigCaps.transceiveCommand = QByteArrayLiteral("\x1a\x05\x00\x00"); break; + case model736: + rigCaps.modelName = QString("IC-736"); + rigCaps.rigctlModel = 3020; + rigCaps.hasSpectrum = false; + rigCaps.inputs.clear(); + rigCaps.hasLan = false; + rigCaps.hasEthernet = false; + rigCaps.hasWiFi = false; + rigCaps.hasFDcomms = false; + rigCaps.hasATU = false; + rigCaps.hasPTTCommand = false; + rigCaps.useRTSforPTT = true; + rigCaps.hasDataModes = false; + rigCaps.hasIFShift = true; // untested + rigCaps.attenuators.push_back('\x20'); + rigCaps.preamps.push_back('\x01'); + rigCaps.bands = standardHF; + rigCaps.modes = { createMode(modeLSB, 0x00, "LSB"), createMode(modeUSB, 0x01, "USB"), + createMode(modeAM, 0x02, "AM"), createMode(modeFM, 0x05, "FM"), + createMode(modeCW, 0x03, "CW"), createMode(modeCW_R, 0x07, "CW-R"), + }; + break; case model756pro: rigCaps.modelName = QString("IC-756 Pro"); rigCaps.rigctlModel = 3027; @@ -3296,6 +3401,7 @@ void rigCommander::determineRigCaps() rigCaps.hasWiFi = false; rigCaps.hasFDcomms = false; rigCaps.hasATU = true; + rigCaps.hasTBPF = true; rigCaps.preamps.push_back('\x01'); rigCaps.preamps.push_back('\x02'); rigCaps.attenuators.insert(rigCaps.attenuators.end(),{ '\x06' , '\x12', '\x18'}); @@ -3316,6 +3422,7 @@ void rigCommander::determineRigCaps() rigCaps.hasWiFi = false; rigCaps.hasFDcomms = false; rigCaps.hasATU = true; + rigCaps.hasTBPF = true; rigCaps.preamps.push_back('\x01'); rigCaps.preamps.push_back('\x02'); rigCaps.attenuators.insert(rigCaps.attenuators.end(),{ '\x06' , '\x12', '\x18'}); @@ -3336,6 +3443,7 @@ void rigCommander::determineRigCaps() rigCaps.hasWiFi = false; rigCaps.hasFDcomms = false; rigCaps.hasATU = true; + rigCaps.hasTBPF = true; rigCaps.preamps.push_back('\x01'); rigCaps.preamps.push_back('\x02'); rigCaps.attenuators.insert(rigCaps.attenuators.end(),{ '\x06' , '\x12', '\x18'}); @@ -3346,6 +3454,34 @@ void rigCommander::determineRigCaps() rigCaps.modes = commonModes; rigCaps.transceiveCommand = QByteArrayLiteral("\x1a\x05\x00\x00"); break; + case model9100: + rigCaps.modelName = QString("IC-9100"); + rigCaps.rigctlModel = 3068; + rigCaps.hasSpectrum = false; + rigCaps.inputs.append(inputUSB); // TODO, add commands for this radio's inputs + rigCaps.inputs.append(inputACC); + rigCaps.hasLan = false; + rigCaps.hasEthernet = false; + rigCaps.hasWiFi = false; + rigCaps.hasFDcomms = false; + rigCaps.hasATU = true; + rigCaps.hasDV = true; + rigCaps.hasTBPF = true; + rigCaps.preamps.push_back('\x01'); + rigCaps.preamps.push_back('\x02'); + rigCaps.attenuators.insert(rigCaps.attenuators.end(),{ '\x20' }); + rigCaps.antennas = {0x00, 0x01}; + rigCaps.bands = standardHF; + rigCaps.bands.insert(rigCaps.bands.end(), standardVU.begin(), standardVU.end()); + rigCaps.bands.push_back(band23cm); + rigCaps.bands.push_back(bandGen); + rigCaps.bsr[band2m] = 0x11; + rigCaps.bsr[band70cm] = 0x12; + rigCaps.bsr[band23cm] = 0x13; + rigCaps.bsr[bandGen] = 0x14; + rigCaps.modes = commonModes; + rigCaps.modes.insert(rigCaps.modes.end(), {createMode(modeDV, 0x17, "DV")}); + break; default: rigCaps.modelName = QString("IC-0x%1").arg(rigCaps.modelID, 2, 16); rigCaps.hasSpectrum = false; diff --git a/rigcommander.h b/rigcommander.h index 1486028..bf02aad 100644 --- a/rigcommander.h +++ b/rigcommander.h @@ -215,6 +215,9 @@ public slots: void getRfGain(); void getAfGain(); void getSql(); + void getIFShift(); + void getTPBFInner(); + void getTPBFOuter(); void getTxLevel(); void getMicGain(); void getCompLevel(); @@ -232,6 +235,9 @@ public slots: void setSquelch(unsigned char level); void setRfGain(unsigned char level); void setAfGain(unsigned char level); + void setIFShift(unsigned char level); + void setTPBFInner(unsigned char level); + void setTPBFOuter(unsigned char level); void setTxPower(unsigned char power); void setMicGain(unsigned char gain); void setUSBGain(unsigned char gain); @@ -316,6 +322,7 @@ signals: void haveSerialPortError(const QString port, const QString errorText); void haveStatusUpdate(const QString text); void dataForComm(const QByteArray &outData); + void toggleRTS(bool rtsOn); // UDP: void haveChangeLatency(quint16 value); @@ -356,6 +363,9 @@ signals: void haveRfGain(unsigned char level); void haveAfGain(unsigned char level); void haveSql(unsigned char level); + void haveTPBFInner(unsigned char level); + void haveTPBFOuter(unsigned char level); + void haveIFShift(unsigned char level); void haveTxPower(unsigned char level); void haveMicGain(unsigned char level); void haveCompLevel(unsigned char level); diff --git a/rigidentities.cpp b/rigidentities.cpp index 7b113f7..13988b4 100644 --- a/rigidentities.cpp +++ b/rigidentities.cpp @@ -67,6 +67,9 @@ model_kind determineRadioModel(unsigned char rigID) case model756proiii: rig = model756proiii; break; + case model9100: + rig = model9100; + break; default: rig = modelUnknown; break; diff --git a/rigidentities.h b/rigidentities.h index e905730..cae1b75 100644 --- a/rigidentities.h +++ b/rigidentities.h @@ -29,10 +29,12 @@ enum model_kind { model705 = 0xA4, model706 = 0x58, model718 = 0x5E, + model736 = 0x40, model756pro = 0x5C, model756proii = 0x64, model756proiii = 0x6E, model910h = 0x60, + model9100 = 0x7C, modelUnknown = 0xFF }; @@ -116,10 +118,13 @@ struct rigCapabilities { bool hasTransmit; bool hasPTTCommand; + bool useRTSforPTT; bool hasAttenuator; bool hasPreamp; bool hasAntennaSel; bool hasDataModes; + bool hasIFShift; + bool hasTBPF; bool hasRXAntenna; diff --git a/transceiveradjustments.cpp b/transceiveradjustments.cpp index 5779f5f..c87c612 100644 --- a/transceiveradjustments.cpp +++ b/transceiveradjustments.cpp @@ -6,11 +6,100 @@ transceiverAdjustments::transceiverAdjustments(QWidget *parent) : ui(new Ui::transceiverAdjustments) { ui->setupUi(this); - // request level updates +#ifndef QT_DEBUG + ui->transmitterControlsGroupBox->setVisible(false); // no controls available so far + ui->bassRxLabel->setVisible(false); + ui->bassRxSlider->setVisible(false); + ui->trebleRxLabel->setVisible(false); + ui->trebleRxSlider->setVisible(false); + + ui->NRRxCheckBox->setVisible(false); + ui->NRRxSlider->setVisible(false); + ui->notchRxChkBox->setVisible(false); + ui->notchRxSlider->setVisible(false); + ui->NBRxChkBox->setVisible(false); + ui->NBRxSlider->setVisible(false); + ui->bandwidthGroupBox->setVisible(false); + this->window()->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum); + this->window()->resize(QSizePolicy::Minimum, QSizePolicy::Minimum); + +#endif } transceiverAdjustments::~transceiverAdjustments() { + rigCaps.inputs.clear(); + rigCaps.preamps.clear(); + rigCaps.attenuators.clear(); + rigCaps.antennas.clear(); + delete ui; } + +void transceiverAdjustments::on_IFShiftSlider_valueChanged(int value) +{ + if(rigCaps.hasIFShift) + { + emit setIFShift(value); + } else { + unsigned char inner = ui->TPBFInnerSlider->value(); + unsigned char outer = ui->TPBFOuterSlider->value(); + int shift = value - previousIFShift; + inner = MAX( 0, MIN(255,int (inner + shift)) ); + outer = MAX( 0, MIN(255,int (outer + shift)) ); + + ui->TPBFInnerSlider->setValue(inner); + ui->TPBFOuterSlider->setValue(outer); + previousIFShift = value; + } +} + +void transceiverAdjustments::on_TPBFInnerSlider_valueChanged(int value) +{ + emit setTPBFInner(value); +} + +void transceiverAdjustments::on_TPBFOuterSlider_valueChanged(int value) +{ + emit setTPBFOuter(value); +} + +void transceiverAdjustments::setRig(rigCapabilities rig) +{ + this->rigCaps = rig; + if(!rigCaps.hasIFShift) + updateIFShift(128); + //ui->IFShiftSlider->setVisible(rigCaps.hasIFShift); + //ui->IFShiftLabel->setVisible(rigCaps.hasIFShift); + + ui->TPBFInnerSlider->setVisible(rigCaps.hasTBPF); + ui->TPBFInnerLabel->setVisible(rigCaps.hasTBPF); + + ui->TPBFOuterSlider->setVisible(rigCaps.hasTBPF); + ui->TPBFInnerLabel->setVisible(rigCaps.hasTBPF); + + haveRigCaps = true; +} + +// These are accessed by wfmain when we receive new values from rigCommander: +void transceiverAdjustments::updateIFShift(unsigned char level) +{ + ui->IFShiftSlider->blockSignals(true); + ui->IFShiftSlider->setValue(level); + ui->IFShiftSlider->blockSignals(false); +} + +void transceiverAdjustments::updateTPBFInner(unsigned char level) +{ + ui->TPBFInnerSlider->blockSignals(true); + ui->TPBFInnerSlider->setValue(level); + ui->TPBFInnerSlider->blockSignals(false); +} + +void transceiverAdjustments::updateTPBFOuter(unsigned char level) +{ + ui->TPBFOuterSlider->blockSignals(true); + ui->TPBFOuterSlider->setValue(level); + ui->TPBFOuterSlider->blockSignals(false); +} diff --git a/transceiveradjustments.h b/transceiveradjustments.h index 2eee158..bec6a34 100644 --- a/transceiveradjustments.h +++ b/transceiveradjustments.h @@ -1,7 +1,11 @@ #ifndef TRANSCEIVERADJUSTMENTS_H #define TRANSCEIVERADJUSTMENTS_H +#include + #include +#include "rigidentities.h" + namespace Ui { class transceiverAdjustments; @@ -15,8 +19,30 @@ public: explicit transceiverAdjustments(QWidget *parent = 0); ~transceiverAdjustments(); +signals: + void setIFShift(unsigned char level); + void setTPBFInner(unsigned char level); + void setTPBFOuter(unsigned char level); + +public slots: + void setRig(rigCapabilities rig); + void updateIFShift(unsigned char level); + void updateTPBFInner(unsigned char level); + void updateTPBFOuter(unsigned char level); + +private slots: + + void on_IFShiftSlider_valueChanged(int value); + + void on_TPBFInnerSlider_valueChanged(int value); + + void on_TPBFOuterSlider_valueChanged(int value); + private: Ui::transceiverAdjustments *ui; + rigCapabilities rigCaps; + bool haveRigCaps = false; + int previousIFShift = 128; }; #endif // TRANSCEIVERADJUSTMENTS_H diff --git a/transceiveradjustments.ui b/transceiveradjustments.ui index 9e8bb32..62debf0 100644 --- a/transceiveradjustments.ui +++ b/transceiveradjustments.ui @@ -6,8 +6,8 @@ 0 0 - 680 - 339 + 832 + 337 @@ -29,13 +29,13 @@ 10 - + Transmitter - + 0 @@ -49,14 +49,20 @@ 0 - + + + + 0 + 230 + + Qt::Vertical - + Comp @@ -65,16 +71,22 @@ - + - + + + + 0 + 230 + + Qt::Vertical - + 0 @@ -89,16 +101,22 @@ - + - + + + + 0 + 230 + + Qt::Vertical - + 0 @@ -106,23 +124,29 @@ - Trebble + Treble - + - + + + + 0 + 230 + + Qt::Vertical - + 0 @@ -140,22 +164,28 @@ - + Receiver - + - + + + + 0 + 230 + + Qt::Vertical - + 0 @@ -170,16 +200,22 @@ - + - + + + + 0 + 230 + + Qt::Vertical - + 0 @@ -187,23 +223,32 @@ - Trebble + Treble - + - + + + + 0 + 230 + + + + 255 + Qt::Vertical - + IF Shift @@ -212,16 +257,100 @@ - + + + 0 + + + 0 + + + 0 + + + 0 + - + + + + 0 + 230 + + + + 255 + Qt::Vertical - + + + PBF Inner + + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 0 + 230 + + + + 255 + + + Qt::Vertical + + + + + + + PBF Outer + + + + + + + + + + + + 0 + 230 + + + + Qt::Vertical + + + + + NR @@ -230,16 +359,22 @@ - + - + + + + 0 + 230 + + Qt::Vertical - + NB @@ -248,16 +383,22 @@ - + - + + + + 0 + 230 + + Qt::Vertical - + Notch @@ -266,40 +407,40 @@ - + Bandwidth - + Low - + - + High - + - + Filter - + diff --git a/wfmain.cpp b/wfmain.cpp index e1d5ebb..040b194 100644 --- a/wfmain.cpp +++ b/wfmain.cpp @@ -296,6 +296,9 @@ void wfmain::rigConnections() connect(this, SIGNAL(getRfGain()), rig, SLOT(getRfGain())); connect(this, SIGNAL(getAfGain()), rig, SLOT(getAfGain())); connect(this, SIGNAL(getSql()), rig, SLOT(getSql())); + connect(this, SIGNAL(getIfShift()), rig, SLOT(getIFShift())); + connect(this, SIGNAL(getTPBFInner()), rig, SLOT(getTPBFInner())); + connect(this, SIGNAL(getTPBFOuter()), rig, SLOT(getTPBFOuter())); connect(this, SIGNAL(getTxPower()), rig, SLOT(getTxLevel())); connect(this, SIGNAL(getMicGain()), rig, SLOT(getMicGain())); connect(this, SIGNAL(getSpectrumRefLevel()), rig, SLOT(getSpectrumRefLevel())); @@ -306,6 +309,9 @@ void wfmain::rigConnections() connect(this, SIGNAL(setRfGain(unsigned char)), rig, SLOT(setRfGain(unsigned char))); connect(this, SIGNAL(setAfGain(unsigned char)), rig, SLOT(setAfGain(unsigned char))); connect(this, SIGNAL(setSql(unsigned char)), rig, SLOT(setSquelch(unsigned char))); + connect(this, SIGNAL(setIFShift(unsigned char)), rig, SLOT(setIFShift(unsigned char))); + connect(this, SIGNAL(setTPBFInner(unsigned char)), rig, SLOT(setTPBFInner(unsigned char))); + connect(this, SIGNAL(setTPBFOuter(unsigned char)), rig, SLOT(setTPBFOuter(unsigned char))); connect(this, SIGNAL(setTxPower(unsigned char)), rig, SLOT(setTxPower(unsigned char))); connect(this, SIGNAL(setMicGain(unsigned char)), rig, SLOT(setMicGain(unsigned char))); connect(this, SIGNAL(setMonitorLevel(unsigned char)), rig, SLOT(setMonitorLevel(unsigned char))); @@ -318,6 +324,9 @@ void wfmain::rigConnections() connect(rig, SIGNAL(haveRfGain(unsigned char)), this, SLOT(receiveRfGain(unsigned char))); connect(rig, SIGNAL(haveAfGain(unsigned char)), this, SLOT(receiveAfGain(unsigned char))); connect(rig, SIGNAL(haveSql(unsigned char)), this, SLOT(receiveSql(unsigned char))); + connect(rig, SIGNAL(haveIFShift(unsigned char)), trxadj, SLOT(updateIFShift(unsigned char))); + connect(rig, SIGNAL(haveTPBFInner(unsigned char)), trxadj, SLOT(updateTPBFInner(unsigned char))); + connect(rig, SIGNAL(haveTPBFOuter(unsigned char)), trxadj, SLOT(updateTPBFOuter(unsigned char))); connect(rig, SIGNAL(haveTxPower(unsigned char)), this, SLOT(receiveTxPower(unsigned char))); connect(rig, SIGNAL(haveMicGain(unsigned char)), this, SLOT(receiveMicGain(unsigned char))); connect(rig, SIGNAL(haveSpectrumRefLevel(int)), this, SLOT(receiveSpectrumRefLevel(int))); @@ -807,6 +816,20 @@ void wfmain::setupMainUI() [=](const int &newValue) { statusFromSliderRaw("Waterfall Length", newValue);} ); + connect(this->trxadj, &transceiverAdjustments::setIFShift, + [=](const unsigned char &newValue) { issueCmdUniquePriority(cmdSetIFShift, newValue);} + ); + + connect(this->trxadj, &transceiverAdjustments::setTPBFInner, + [=](const unsigned char &newValue) { issueCmdUniquePriority(cmdSetTPBFInner, newValue);} + ); + + connect(this->trxadj, &transceiverAdjustments::setTPBFOuter, + [=](const unsigned char &newValue) { issueCmdUniquePriority(cmdSetTPBFOuter, newValue);} + ); + + + } void wfmain::updateSizes(int tabIndex) @@ -2239,6 +2262,14 @@ void wfmain:: getInitialRigState() issueDelayedCommand(cmdGetRitEnabled); issueDelayedCommand(cmdGetRitValue); + if(rigCaps.hasIFShift) + issueDelayedCommand(cmdGetIFShift); + if(rigCaps.hasTBPF) + { + issueDelayedCommand(cmdGetTPBFInner); + issueDelayedCommand(cmdGetTPBFOuter); + } + if(rigCaps.hasSpectrum) { issueDelayedCommand(cmdGetSpectrumMode); @@ -2440,6 +2471,24 @@ void wfmain::doCmd(commandtype cmddata) emit setSql(sqlLevel); break; } + case cmdSetIFShift: + { + unsigned char IFShiftLevel = (*std::static_pointer_cast(data)); + emit setIFShift(IFShiftLevel); + break; + } + case cmdSetTPBFInner: + { + unsigned char innterLevel = (*std::static_pointer_cast(data)); + emit setTPBFInner(innterLevel); + break; + } + case cmdSetTPBFOuter: + { + unsigned char outerLevel = (*std::static_pointer_cast(data)); + emit setTPBFOuter(outerLevel); + break; + } case cmdSetPTT: { bool pttrequest = (*std::static_pointer_cast(data)); @@ -2582,6 +2631,15 @@ void wfmain::doCmd(cmds cmd) case cmdGetSql: emit getSql(); break; + case cmdGetIFShift: + emit getIfShift(); + break; + case cmdGetTPBFInner: + emit getTPBFInner(); + break; + case cmdGetTPBFOuter: + emit getTPBFOuter(); + break; case cmdGetTxPower: emit getTxPower(); break; @@ -2907,6 +2965,7 @@ void wfmain::receiveRigID(rigCapabilities rigCaps) // Added so that server receives rig capabilities. emit sendRigCaps(rigCaps); rpt->setRig(rigCaps); + trxadj->setRig(rigCaps); // Set the mode combo box up: @@ -3028,6 +3087,7 @@ void wfmain::receiveRigID(rigCapabilities rigCaps) setBandButtons(); + ui->tuneEnableChk->setEnabled(rigCaps.hasATU); ui->tuneNowBtn->setEnabled(rigCaps.hasATU); @@ -4090,6 +4150,21 @@ void wfmain::receiveSql(unsigned char level) ui->sqlSlider->setValue(level); } +void wfmain::receiveIFShift(unsigned char level) +{ + trxadj->updateIFShift(level); +} + +void wfmain::receiveTBPFInner(unsigned char level) +{ + trxadj->updateTPBFInner(level); +} + +void wfmain::receiveTBPFOuter(unsigned char level) +{ + trxadj->updateTPBFOuter(level); +} + void wfmain::on_tuneNowBtn_clicked() { issueDelayedCommand(cmdStartATU); @@ -4353,6 +4428,20 @@ void wfmain::on_sqlSlider_valueChanged(int value) issueCmd(cmdSetSql, (unsigned char)value); //emit setSql((unsigned char)value); } +// These three are from the transceiver adjustment window: +void wfmain::changeIFShift(unsigned char level) +{ + //issueCmd(cmdSetIFShift, level); + issueCmdUniquePriority(cmdSetIFShift, level); +} +void wfmain::changeTPBFInner(unsigned char level) +{ + issueCmdUniquePriority(cmdSetTPBFInner, level); +} +void wfmain::changeTPBFOuter(unsigned char level) +{ + issueCmdUniquePriority(cmdSetTPBFOuter, level); +} void wfmain::on_modeFilterCombo_activated(int index) { @@ -5377,11 +5466,16 @@ void wfmain::on_rigctldPortTxt_editingFinished() } } +void wfmain::on_moreControlsBtn_clicked() +{ + trxadj->show(); +} + // --- DEBUG FUNCTION --- void wfmain::on_debugBtn_clicked() { qInfo(logSystem()) << "Debug button pressed."; - //trxadj->show(); + trxadj->show(); //setRadioTimeDatePrep(); //wf->setInteraction(QCP::iRangeZoom, true); //wf->setInteraction(QCP::iRangeDrag, true); diff --git a/wfmain.h b/wfmain.h index b921b9c..356ae9a 100644 --- a/wfmain.h +++ b/wfmain.h @@ -85,6 +85,9 @@ signals: void getRfGain(); void getAfGain(); void getSql(); + void getIfShift(); + void getTPBFInner(); + void getTPBFOuter(); void getTxPower(); void getMicGain(); void getSpectrumRefLevel(); @@ -94,6 +97,13 @@ signals: void setRfGain(unsigned char level); void setAfGain(unsigned char level); void setSql(unsigned char level); + void setIFShift(unsigned char level); + void setTPBFInner(unsigned char level); + void setTPBFOuter(unsigned char level); + + void setIFShiftWindow(unsigned char level); + void setTPBFInnerWindow(unsigned char level); + void setTPBFOuterWindow(unsigned char level); void setMicGain(unsigned char); void setCompLevel(unsigned char); void setTxPower(unsigned char); @@ -213,6 +223,13 @@ private slots: void receiveRfGain(unsigned char level); void receiveAfGain(unsigned char level); void receiveSql(unsigned char level); + void receiveIFShift(unsigned char level); + void receiveTBPFInner(unsigned char level); + void receiveTBPFOuter(unsigned char level); + // 'change' from data in transceiver controls window: + void changeIFShift(unsigned char level); + void changeTPBFInner(unsigned char level); + void changeTPBFOuter(unsigned char level); void receiveTxPower(unsigned char power); void receiveMicGain(unsigned char gain); void receiveCompLevel(unsigned char compLevel); @@ -478,6 +495,8 @@ private slots: void on_rigctldPortTxt_editingFinished(); + void on_moreControlsBtn_clicked(); + private: Ui::wfmain *ui; void closeEvent(QCloseEvent *event); @@ -600,13 +619,18 @@ private: unsigned char setModeVal=0; unsigned char setFilterVal=0; - enum cmds {cmdNone, cmdGetRigID, cmdGetRigCIV, cmdGetFreq, cmdSetFreq, cmdGetMode, cmdSetMode, cmdGetDataMode, cmdSetModeFilter, - cmdSetDataModeOn, cmdSetDataModeOff, cmdGetRitEnabled, cmdGetRitValue, + enum cmds {cmdNone, cmdGetRigID, cmdGetRigCIV, cmdGetFreq, cmdSetFreq, cmdGetMode, cmdSetMode, + cmdGetDataMode, cmdSetModeFilter, cmdSetDataModeOn, cmdSetDataModeOff, cmdGetRitEnabled, cmdGetRitValue, cmdSpecOn, cmdSpecOff, cmdDispEnable, cmdDispDisable, cmdGetRxGain, cmdSetRxRfGain, cmdGetAfGain, cmdSetAfGain, - cmdGetSql, cmdSetSql, cmdGetATUStatus, cmdSetATU, cmdStartATU, cmdGetSpectrumMode, cmdGetSpectrumSpan, cmdScopeCenterMode, cmdScopeFixedMode, cmdGetPTT, cmdSetPTT, - cmdGetTxPower, cmdSetTxPower, cmdGetMicGain, cmdSetMicGain, cmdSetModLevel, cmdGetSpectrumRefLevel, cmdGetDuplexMode, cmdGetModInput, cmdGetModDataInput, + cmdGetSql, cmdSetSql, cmdGetIFShift, cmdSetIFShift, cmdGetTPBFInner, cmdSetTPBFInner, + cmdGetTPBFOuter, cmdSetTPBFOuter, 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, cmdGetCenterMeter, cmdGetPowerMeter, cmdGetSWRMeter, cmdGetALCMeter, cmdGetCompMeter, cmdGetTxRxMeter, + cmdGetVdMeter, cmdGetIdMeter, cmdGetSMeter, cmdGetCenterMeter, cmdGetPowerMeter, + cmdGetSWRMeter, cmdGetALCMeter, cmdGetCompMeter, cmdGetTxRxMeter, cmdGetTone, cmdGetTSQL, cmdGetDTCS, cmdGetRptAccessMode, cmdGetPreamp, cmdGetAttenuator, cmdGetAntenna, cmdSetTime, cmdSetDate, cmdSetUTCOffset}; diff --git a/wfmain.ui b/wfmain.ui index f392fd8..e129aac 100644 --- a/wfmain.ui +++ b/wfmain.ui @@ -6,7 +6,7 @@ 0 0 - 934 + 941 582 @@ -18,7 +18,7 @@ - 3 + 0 @@ -465,6 +465,16 @@ + + + + Show additional controls + + + Show More + + + @@ -852,6 +862,9 @@ 50 + + Transmit and Receive button + Transmit @@ -885,6 +898,9 @@ + + Show the repeater tone and offset window + Repeater @@ -2814,8 +2830,8 @@ 0 0 - 934 - 21 + 941 + 22