diff --git a/commhandler.cpp b/commhandler.cpp
index 29f9c71..f234509 100644
--- a/commhandler.cpp
+++ b/commhandler.cpp
@@ -31,7 +31,7 @@ commHandler::commHandler()
connect(port, SIGNAL(readyRead()), this, SLOT(receiveDataIn()));
}
-commHandler::commHandler(QString portName, quint32 baudRate)
+commHandler::commHandler(QString portName, quint32 baudRate, quint8 wfFormat)
{
//constructor
// grab baud rate and other comm port details
@@ -40,6 +40,11 @@ commHandler::commHandler(QString portName, quint32 baudRate)
port = new QSerialPort();
+ if (wfFormat == 1) { // Single waterfall packet
+ combineWf = true;
+ qDebug(logSerial()) << "*********** Combine Waterfall Mode Enabled!";
+ }
+
// TODO: The following should become arguments and/or functions
// Add signal/slot everywhere for comm port setup.
// Consider how to "re-setup" and how to save the state for next time.
@@ -175,7 +180,7 @@ void commHandler::receiveDataIn()
}
- if(inPortData.startsWith("\xFE\xFE"))
+ if (inPortData.startsWith("\xFE\xFE"))
{
if(inPortData.contains("\xFC"))
{
@@ -188,6 +193,63 @@ void commHandler::receiveDataIn()
{
// good!
port->commitTransaction();
+
+ //payloadIn = data.right(data.length() - 4);
+
+ // Do we need to combine waterfall into single packet?
+ int combined = 0;
+ if (combineWf) {
+ int pos = inPortData.indexOf(QByteArrayLiteral("\x27\x00\x00"));
+ int fdPos = inPortData.mid(pos).indexOf(QByteArrayLiteral("\xfd"));
+ //printHex(inPortData, false, true);
+ while (pos > -1 && fdPos > -1) {
+ combined++;
+ spectrumDivisionNumber = 0;
+ spectrumDivisionNumber = inPortData[pos + 3] & 0x0f;
+ spectrumDivisionNumber += ((inPortData[pos + 3] & 0xf0) >> 4) * 10;
+
+ if (spectrumDivisionNumber == 1) {
+ // This is the first waveform data.
+ spectrumDivisionMax = 0;
+ spectrumDivisionMax = inPortData[pos + 4] & 0x0f;
+ spectrumDivisionMax += ((inPortData[pos + 4] & 0xf0) >> 4) * 10;
+ spectrumData.clear();
+ spectrumData = inPortData.mid(pos - 4, fdPos+4); // Don't include terminating FD
+ spectrumData[8] = spectrumData[7]; // Make max = current;
+ //qDebug() << "New Spectrum seq:" << spectrumDivisionNumber << "pos = " << pos << "len" << fdPos;
+
+ }
+ else if (spectrumDivisionNumber > lastSpectrum && spectrumDivisionNumber <= spectrumDivisionMax) {
+ spectrumData.insert(spectrumData.length(), inPortData.mid(pos + 4, fdPos-5));
+ //qDebug() << "Added spectrum seq:" << spectrumDivisionNumber << "len" << fdPos-5;
+ //printHex(inPortData.mid((pos+4),fdPos - (pos+5)), false, true);
+ }
+ else {
+ qDebug() << "Invalid Spectrum Division received" << spectrumDivisionNumber << "last Spectrum" << lastSpectrum;
+ }
+
+ lastSpectrum = spectrumDivisionNumber;
+
+ if (spectrumDivisionNumber == spectrumDivisionMax) {
+ //qDebug() << "Got Spectrum! length=" << spectrumData.length();
+ spectrumData.append("\xfd"); // Need to add FD on the end.
+ //printHex(spectrumData, false, true);
+ emit haveDataFromPort(spectrumData);
+ lastSpectrum = 0;
+ }
+ inPortData = inPortData.remove(pos-4, fdPos+5);
+ pos = inPortData.indexOf(QByteArrayLiteral("\x27\x00\x00"));
+ fdPos = inPortData.mid(pos).indexOf(QByteArrayLiteral("\xfd"));
+ }
+ // If we still have data left, let the main function deal with it, any spectrum data has been removed
+ if (inPortData.length() == 0)
+ {
+ return;
+ }
+ // qDebug() << "Got extra data!";
+ //printHex(inPortData, false, true);
+ }
+ //
emit haveDataFromPort(inPortData);
if(rolledBack)
diff --git a/commhandler.h b/commhandler.h
index c76e23f..4baeacd 100644
--- a/commhandler.h
+++ b/commhandler.h
@@ -16,7 +16,7 @@ class commHandler : public QObject
public:
commHandler();
- commHandler(QString portName, quint32 baudRate);
+ commHandler(QString portName, quint32 baudRate, quint8 wfFormat);
bool serialError;
bool rtsStatus();
@@ -74,7 +74,14 @@ private:
bool isConnected; // port opened
mutable QMutex mutex;
void printHex(const QByteArray &pdata, bool printVert, bool printHoriz);
-
+ bool combineWf = false;
+ QByteArray spectrumData;
+ quint8 spectrumDivisionNumber;
+ quint8 spectrumDivisionMax;
+ quint8 spectrumCenterOrFixed;
+ quint8 spectrumInformation;
+ quint8 spectrumOutOfRange;
+ quint8 lastSpectrum = 0;
};
#endif // COMMHANDLER_H
diff --git a/rigcommander.cpp b/rigcommander.cpp
index 8cdde8b..c99cb1c 100644
--- a/rigcommander.cpp
+++ b/rigcommander.cpp
@@ -40,7 +40,7 @@ rigCommander::~rigCommander()
}
-void rigCommander::commSetup(unsigned char rigCivAddr, QString rigSerialPort, quint32 rigBaudRate, QString vsp,quint16 tcpPort)
+void rigCommander::commSetup(unsigned char rigCivAddr, QString rigSerialPort, quint32 rigBaudRate, QString vsp,quint16 tcpPort, quint8 wf)
{
// construct
// TODO: Bring this parameter and the comm port from the UI.
@@ -49,6 +49,7 @@ void rigCommander::commSetup(unsigned char rigCivAddr, QString rigSerialPort, qu
// civAddr = 0x94; // address of the radio. Decimal is 148.
civAddr = rigCivAddr; // address of the radio. Decimal is 148.
usingNativeLAN = false;
+
//qInfo(logRig()) << "Opening connection to Rig:" << hex << (unsigned char)rigCivAddr << "on serial port" << rigSerialPort << "at baud rate" << rigBaudRate;
// ---
setup();
@@ -58,7 +59,7 @@ void rigCommander::commSetup(unsigned char rigCivAddr, QString rigSerialPort, qu
this->rigBaudRate = rigBaudRate;
rigCaps.baudRate = rigBaudRate;
- comm = new commHandler(rigSerialPort, rigBaudRate);
+ comm = new commHandler(rigSerialPort, rigBaudRate,wf);
ptty = new pttyHandler(vsp);
if (tcpPort > 0) {
@@ -107,7 +108,6 @@ void rigCommander::commSetup(unsigned char rigCivAddr, udpPreferences prefs, aud
// civAddr = 0x94; // address of the radio. Decimal is 148.
civAddr = rigCivAddr; // address of the radio. Decimal is 148.
usingNativeLAN = true;
-
// ---
setup();
// ---
diff --git a/rigcommander.h b/rigcommander.h
index c95d8d0..dc1b153 100644
--- a/rigcommander.h
+++ b/rigcommander.h
@@ -79,7 +79,7 @@ public:
public slots:
void process();
- void commSetup(unsigned char rigCivAddr, QString rigSerialPort, quint32 rigBaudRate, QString vsp, quint16 tcp);
+ void commSetup(unsigned char rigCivAddr, QString rigSerialPort, quint32 rigBaudRate, QString vsp, quint16 tcp, quint8 wf);
void commSetup(unsigned char rigCivAddr, udpPreferences prefs, audioSetup rxSetup, audioSetup txSetup, QString vsp, quint16 tcp);
void closeComm();
void stateUpdated();
diff --git a/servermain.h b/servermain.h
index 99d3ea7..af9150c 100644
--- a/servermain.h
+++ b/servermain.h
@@ -154,7 +154,7 @@ signals:
void sayFrequency();
void sayMode();
void sayAll();
- void sendCommSetup(unsigned char rigCivAddr, QString rigSerialPort, quint32 rigBaudRate,QString vsp, quint16 tcp);
+ void sendCommSetup(unsigned char rigCivAddr, QString rigSerialPort, quint32 rigBaudRate,QString vsp, quint16 tcp, quint8 wf);
void sendCommSetup(unsigned char rigCivAddr, udpPreferences prefs, audioSetup rxSetup, audioSetup txSetup, QString vsp, quint16 tcp);
void sendCloseComm();
void sendChangeLatency(quint16 latency);
diff --git a/udphandler.cpp b/udphandler.cpp
index 25f4cee..e3c55fb 100644
--- a/udphandler.cpp
+++ b/udphandler.cpp
@@ -13,13 +13,15 @@ udpHandler::udpHandler(udpPreferences prefs, audioSetup rx, audioSetup tx) :
rxSetup(rx),
txSetup(tx)
{
-
-
this->port = this->controlPort;
this->username = prefs.username;
this->password = prefs.password;
this->compName = prefs.clientName.mid(0,8) + "-wfview";
+ if (prefs.waterfallFormat == 2)
+ {
+ splitWf = true;
+ }
qInfo(logUdp()) << "Starting udpHandler user:" << username << " rx latency:" << rxSetup.latency << " tx latency:" << txSetup.latency << " rx sample rate: " << rxSetup.format.sampleRate() <<
" rx codec: " << rxSetup.codec << " tx sample rate: " << txSetup.format.sampleRate() << " tx codec: " << txSetup.codec;
@@ -285,7 +287,7 @@ void udpHandler::dataReceived()
audioPort = qFromBigEndian(in->audioport);
if (!streamOpened) {
- civ = new udpCivData(localIP, radioIP, civPort, civLocalPort);
+ civ = new udpCivData(localIP, radioIP, civPort, civLocalPort,splitWf);
// TX is not supported
if (txSampleRates < 2) {
@@ -597,12 +599,13 @@ void udpHandler::sendToken(uint8_t magic)
// Class that manages all Civ Data to/from the rig
-udpCivData::udpCivData(QHostAddress local, QHostAddress ip, quint16 civPort,quint16 localPort=0)
+udpCivData::udpCivData(QHostAddress local, QHostAddress ip, quint16 civPort, bool splitWf, quint16 localPort=0 )
{
qInfo(logUdp()) << "Starting udpCivData";
localIP = local;
port = civPort;
radioIP = ip;
+ splitWaterfall = splitWf;
udpBase::init(localPort); // Perform connection
@@ -774,8 +777,77 @@ void udpCivData::dataReceived()
if (quint16(in->datalen + 0x15) == (quint16)in->len)
{
//if (r.mid(0x15).length() != 157)
- emit receive(r.mid(0x15));
+ // Find data length
+ int pos = r.indexOf(QByteArrayLiteral("\x27\x00\x00"))+2;
+ int len = r.mid(pos).indexOf(QByteArrayLiteral("\xfd"));
+ if (splitWaterfall && pos > 1 && len > 100) {
+ // We need to split waterfall data into its component parts
+ // There are only 2 types that we are currently aware of
+ int numDivisions = 0;
+ if (len == 490) // IC705, IC9700, IC7300(LAN)
+ {
+ numDivisions = 11;
+ }
+ else if (len == 704) // IC7610, IC7851, ICR8600
+ {
+ numDivisions = 15;
+ }
+ else {
+ qInfo(logUdp()) << "Unknown spectrum size" << len;
+ break;
+ }
+ // (sequence #1) includes center/fixed mode at [05]. No pixels.
+ // "INDEX: 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 "
+ // "DATA: 27 00 00 01 11 01 00 00 00 14 00 00 00 35 14 00 00 fd "
+ // (sequences 2-10, 50 pixels)
+ // "INDEX: 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 "
+ // "DATA: 27 00 00 07 11 27 13 15 01 00 22 21 09 08 06 19 0e 20 23 25 2c 2d 17 27 29 16 14 1b 1b 21 27 1a 18 17 1e 21 1b 24 21 22 23 13 19 23 2f 2d 25 25 0a 0e 1e 20 1f 1a 0c fd "
+ // ^--^--(seq 7/11)
+ // ^-- start waveform data 0x00 to 0xA0, index 05 to 54
+ // (sequence #11)
+ // "INDEX: 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 "
+ // "DATA: 27 00 00 11 11 0b 13 21 23 1a 1b 22 1e 1a 1d 13 21 1d 26 28 1f 19 1a 18 09 2c 2c 2c 1a 1b fd "
+
+ int divSize = (len / numDivisions)+6;
+ QByteArray wfPacket;
+ for (int i = 0; i < numDivisions; i++) {
+
+ wfPacket = r.mid(pos - 6, 9); // First part of packet
+
+ wfPacket = r.mid(pos - 6, 9); // First part of packet
+ char tens = ((i + 1) / 10);
+ char units = ((i + 1) - (10 * tens));
+ wfPacket[7] = units | (tens << 4);
+
+ tens = (numDivisions / 10);
+ units = (numDivisions - (10 * tens));
+ wfPacket[8] = units | (tens << 4);
+
+ if (i == 0) {
+ //Just send initial data, first BCD encode the max number:
+ wfPacket.append(r.mid(pos + 3, 12));
+ }
+ else
+ {
+ wfPacket.append(r.mid((pos + 15) + ((i-1) * divSize),divSize));
+ }
+ if (i < numDivisions-1) {
+ wfPacket.append('\xfd');
+ }
+ //printHex(wfPacket, false, true);
+
+ emit receive(wfPacket);
+ wfPacket.clear();
+
+ }
+ //qDebug(logUdp()) << "Waterfall packet len" << len << "Num Divisions" << numDivisions << "Division Size" << divSize;
+ }
+ else {
+ // Not waterfall data or split not enabled.
+ emit receive(r.mid(0x15));
+ }
//qDebug(logUdp()) << "Got incoming CIV datagram" << r.mid(0x15).length();
+
}
}
@@ -1537,6 +1609,42 @@ void udpBase::purgeOldEntries()
}
}
+void udpBase::printHex(const QByteArray& pdata)
+{
+ printHex(pdata, false, true);
+}
+
+void udpBase::printHex(const QByteArray& pdata, bool printVert, bool printHoriz)
+{
+ qDebug(logUdp()) << "---- Begin hex dump -----:";
+ QString sdata("DATA: ");
+ QString index("INDEX: ");
+ QStringList strings;
+
+ for (int i = 0; i < pdata.length(); i++)
+ {
+ strings << QString("[%1]: %2").arg(i, 8, 10, QChar('0')).arg((unsigned char)pdata[i], 2, 16, QChar('0'));
+ sdata.append(QString("%1 ").arg((unsigned char)pdata[i], 2, 16, QChar('0')));
+ index.append(QString("%1 ").arg(i, 2, 10, QChar('0')));
+ }
+
+ if (printVert)
+ {
+ for (int i = 0; i < strings.length(); i++)
+ {
+ //sdata = QString(strings.at(i));
+ qDebug(logUdp()) << strings.at(i);
+ }
+ }
+
+ if (printHoriz)
+ {
+ qDebug(logUdp()) << index;
+ qDebug(logUdp()) << sdata;
+ }
+ qDebug(logUdp()) << "----- End hex dump -----";
+}
+
///
/// passcode function used to generate secure (ish) code
///
diff --git a/udphandler.h b/udphandler.h
index 3731bc1..08b3c39 100644
--- a/udphandler.h
+++ b/udphandler.h
@@ -34,6 +34,7 @@ struct udpPreferences {
QString username;
QString password;
QString clientName;
+ quint8 waterfallFormat;
};
struct networkStatus {
@@ -75,6 +76,10 @@ public:
void sendControl(bool tracked,quint8 id, quint16 seq);
+ void printHex(const QByteArray& pdata);
+ void printHex(const QByteArray& pdata, bool printVert, bool printHoriz);
+
+
QTime timeStarted;
QUdpSocket* udp=Q_NULLPTR;
@@ -142,14 +147,13 @@ private:
};
-
// Class for all (pseudo) serial communications
class udpCivData : public udpBase
{
Q_OBJECT
public:
- udpCivData(QHostAddress local, QHostAddress ip, quint16 civPort, quint16 lport);
+ udpCivData(QHostAddress local, QHostAddress ip, quint16 civPort, bool splitWf, quint16 lport);
~udpCivData();
QMutex serialmutex;
@@ -166,6 +170,7 @@ private:
void sendOpenClose(bool close);
QTimer* startCivDataTimer = Q_NULLPTR;
+ bool splitWaterfall = false;
};
@@ -311,6 +316,7 @@ private:
quint16 rxSampleRates = 0;
quint16 txSampleRates = 0;
networkStatus status;
+ bool splitWf = false;
};
diff --git a/wfmain.cpp b/wfmain.cpp
index 901860b..e57ac59 100644
--- a/wfmain.cpp
+++ b/wfmain.cpp
@@ -192,6 +192,7 @@ void wfmain::openRig()
ui->lanEnableBtn->setChecked(true);
usingLAN = true;
// We need to setup the tx/rx audio:
+ udpPrefs.waterfallFormat = prefs.waterfallFormat;
emit sendCommSetup(prefs.radioCIVAddr, udpPrefs, rxSetup, txSetup, prefs.virtualSerialPort, prefs.tcpPort);
} else {
ui->serialEnableBtn->setChecked(true);
@@ -207,7 +208,7 @@ void wfmain::openRig()
}
}
usingLAN = false;
- emit sendCommSetup(prefs.radioCIVAddr, serialPortRig, prefs.serialPortBaud,prefs.virtualSerialPort, prefs.tcpPort);
+ emit sendCommSetup(prefs.radioCIVAddr, serialPortRig, prefs.serialPortBaud,prefs.virtualSerialPort, prefs.tcpPort,prefs.waterfallFormat);
ui->statusBar->showMessage(QString("Connecting to rig using serial port ").append(serialPortRig), 1000);
}
@@ -430,7 +431,7 @@ void wfmain::makeRig()
connect(selRad, SIGNAL(selectedRadio(quint8)), rig, SLOT(setCurrentRadio(quint8)));
// Rig comm setup:
connect(this, SIGNAL(sendCommSetup(unsigned char, udpPreferences, audioSetup, audioSetup, QString, quint16)), rig, SLOT(commSetup(unsigned char, udpPreferences, audioSetup, audioSetup, QString, quint16)));
- connect(this, SIGNAL(sendCommSetup(unsigned char, QString, quint32,QString, quint16)), rig, SLOT(commSetup(unsigned char, QString, quint32,QString, quint16)));
+ connect(this, SIGNAL(sendCommSetup(unsigned char, QString, quint32,QString, quint16,quint8)), rig, SLOT(commSetup(unsigned char, QString, quint32,QString, quint16,quint8)));
connect(this, SIGNAL(setRTSforPTT(bool)), rig, SLOT(setRTSforPTT(bool)));
connect(rig, SIGNAL(haveBaudRate(quint32)), this, SLOT(receiveBaudRate(quint32)));
@@ -1398,6 +1399,7 @@ void wfmain::setDefPrefs()
defPrefs.confirmPowerOff = true;
defPrefs.meter2Type = meterNone;
defPrefs.tcpPort = 0;
+ defPrefs.waterfallFormat = 0;
udpDefPrefs.ipAddress = QString("");
udpDefPrefs.controlLANPort = 50001;
@@ -1543,8 +1545,6 @@ void wfmain::loadSettings()
ui->lanEnableBtn->setChecked(prefs.enableLAN);
ui->connectBtn->setEnabled(true);
- prefs.tcpPort = settings->value("TcpServerPort", defPrefs.tcpPort).toInt();
-
prefs.enableRigCtlD = settings->value("EnableRigCtlD", defPrefs.enableRigCtlD).toBool();
ui->enableRigctldChk->setChecked(prefs.enableRigCtlD);
prefs.rigCtlPort = settings->value("RigCtlPort", defPrefs.rigCtlPort).toInt();
@@ -1552,6 +1552,14 @@ void wfmain::loadSettings()
// Call the function to start rigctld if enabled.
on_enableRigctldChk_clicked(prefs.enableRigCtlD);
+ prefs.tcpPort = settings->value("TcpServerPort", defPrefs.tcpPort).toInt();
+ ui->tcpServerPortTxt->setText(QString("%1").arg(prefs.tcpPort));
+
+ prefs.waterfallFormat = settings->value("WaterfallFormat", defPrefs.waterfallFormat).toInt();
+ ui->waterfallFormatCombo->blockSignals(true);
+ ui->waterfallFormatCombo->setCurrentIndex(prefs.waterfallFormat);
+ ui->waterfallFormatCombo->blockSignals(false);
+
udpPrefs.ipAddress = settings->value("IPAddress", udpDefPrefs.ipAddress).toString();
ui->ipAddressTxt->setEnabled(ui->lanEnableBtn->isChecked());
ui->ipAddressTxt->setText(udpPrefs.ipAddress);
@@ -1998,6 +2006,7 @@ void wfmain::saveSettings()
settings->setValue("EnableRigCtlD", prefs.enableRigCtlD);
settings->setValue("TcpServerPort", prefs.tcpPort);
settings->setValue("RigCtlPort", prefs.rigCtlPort);
+ settings->setValue("tcpServerPort", prefs.tcpPort);
settings->setValue("IPAddress", udpPrefs.ipAddress);
settings->setValue("ControlLANPort", udpPrefs.controlLANPort);
settings->setValue("SerialLANPort", udpPrefs.serialLANPort);
@@ -2014,6 +2023,8 @@ void wfmain::saveSettings()
settings->setValue("AudioInput", txSetup.name);
settings->setValue("ResampleQuality", rxSetup.resampleQuality);
settings->setValue("ClientName", udpPrefs.clientName);
+ settings->setValue("WaterfallFormat", prefs.waterfallFormat);
+
settings->endGroup();
// Memory channels
@@ -5832,6 +5843,22 @@ void wfmain::on_rigctldPortTxt_editingFinished()
}
}
+void wfmain::on_tcpServerPortTxt_editingFinished()
+{
+
+ bool okconvert = false;
+ unsigned int port = ui->tcpServerPortTxt->text().toUInt(&okconvert);
+ if (okconvert)
+ {
+ prefs.tcpPort = port;
+ }
+}
+
+void wfmain::on_waterfallFormatCombo_activated(int index)
+{
+ prefs.waterfallFormat = index;
+}
+
void wfmain::on_moreControlsBtn_clicked()
{
trxadj->show();
diff --git a/wfmain.h b/wfmain.h
index 6a092a4..fa1b23d 100644
--- a/wfmain.h
+++ b/wfmain.h
@@ -164,7 +164,7 @@ signals:
void sayFrequency();
void sayMode();
void sayAll();
- void sendCommSetup(unsigned char rigCivAddr, QString rigSerialPort, quint32 rigBaudRate,QString vsp, quint16 tcp);
+ void sendCommSetup(unsigned char rigCivAddr, QString rigSerialPort, quint32 rigBaudRate,QString vsp, quint16 tcp, quint8 wf);
void sendCommSetup(unsigned char rigCivAddr, udpPreferences prefs, audioSetup rxSetup, audioSetup txSetup, QString vsp, quint16 tcp);
void sendCloseComm();
void sendChangeLatency(quint16 latency);
@@ -497,10 +497,13 @@ private slots:
void on_meter2selectionCombo_activated(int index);
+ void on_waterfallFormatCombo_activated(int index);
+
void on_enableRigctldChk_clicked(bool checked);
void on_rigctldPortTxt_editingFinished();
+ void on_tcpServerPortTxt_editingFinished();
void on_moreControlsBtn_clicked();
@@ -765,6 +768,7 @@ private:
bool confirmPowerOff;
meterKind meter2Type;
quint16 tcpPort;
+ quint8 waterfallFormat;
// plot scheme
} prefs;
diff --git a/wfmain.ui b/wfmain.ui
index 51ff81c..e1b24a7 100644
--- a/wfmain.ui
+++ b/wfmain.ui
@@ -6,7 +6,7 @@
0
0
- 946
+ 940
569
@@ -2066,7 +2066,7 @@
-
- 0
+ 4
@@ -3527,6 +3527,93 @@
+ -
+
+
-
+
+
+ TCP Server Port
+
+
+
+ -
+
+
+ true
+
+
+
+ 0
+ 0
+
+
+
+
+ -
+
+
+ Enter port for TCP server, 0 = disabled (restart required if changed)
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
+
+
+ -
+
+
-
+
+
+ Waterfall Format
+
+
+
+ -
+
+
-
+
+ Default
+
+
+ -
+
+ Single (network)
+
+
+ -
+
+ Multi (serial)
+
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
+
+
-
@@ -3677,7 +3764,7 @@
0
0
- 946
+ 940
21
diff --git a/wfview.vcxproj b/wfview.vcxproj
index bf6d12b..5c2bc26 100644
--- a/wfview.vcxproj
+++ b/wfview.vcxproj
@@ -16,8 +16,7 @@
QtVS_v304
10.0.19041.0
10.0.19041.0
- $(MSBuildProjectDirectory)\QtMsBuild
-
+ $(MSBuildProjectDirectory)\QtMsBuild
v142
@@ -37,10 +36,7 @@
debug\
wfview
-
-
-
-
+
@@ -48,37 +44,11 @@
-
-
-
-
-
- debug\
- debug\
- wfview
- true
-
-
- release\
- release\
- wfview
- true
- false
-
-
- msvc2019
- core;network;gui;multimedia;widgets;serialport;printsupport
-
-
- msvc2019
- core;network;gui;multimedia;widgets;serialport;printsupport
-
-
-
-
+ debug\debug\wfviewtruerelease\release\wfviewtruefalsemsvc2019core;network;gui;multimedia;widgets;serialport;printsupportmsvc2019core;network;gui;multimedia;widgets;serialport;printsupport
+
- .;..\qcustomplot;..\opus\include;..\eigen;..\r8brain-free-src;..\kissfft;resampler;release;/include;%(AdditionalIncludeDirectories)
+ .;..\qcustomplot;..\opus\include;..\eigen;..\r8brain-free-src;resampler;release;/include;%(AdditionalIncludeDirectories)
-Zc:rvalueCast -Zc:inline -Zc:strictStrings -Zc:throwingNew -Zc:referenceBinding -Zc:__cplusplus -w34100 -w34189 -w44996 -w44456 -w44457 -w44458 %(AdditionalOptions)
release\
false
@@ -87,16 +57,14 @@
Sync
release\
MaxSpeed
- _WINDOWS;UNICODE;_UNICODE;WIN32;_ENABLE_EXTENDED_ALIGNED_STORAGE;WFVIEW_VERSION="1.2d";BUILD_WFVIEW;QT_DEPRECATED_WARNINGS;QCUSTOMPLOT_COMPILE_LIBRARY;USE_SSE;USE_SSE2;OUTSIDE_SPEEX;RANDOM_PREFIX=wf;EIGEN_MPL2_ONLY;EIGEN_DONT_VECTORIZE;EIGEN_VECTORIZE_SSE3;PREFIX="/usr/local";GITSHORT="47772a4";HOST="wfview.org";UNAME="build";NDEBUG;QT_NO_DEBUG;%(PreprocessorDefinitions)
+ _WINDOWS;UNICODE;_UNICODE;WIN32;_ENABLE_EXTENDED_ALIGNED_STORAGE;WFVIEW_VERSION="1.2e";BUILD_WFVIEW;QT_DEPRECATED_WARNINGS;QCUSTOMPLOT_COMPILE_LIBRARY;USE_SSE;USE_SSE2;OUTSIDE_SPEEX;RANDOM_PREFIX=wf;EIGEN_MPL2_ONLY;EIGEN_DONT_VECTORIZE;EIGEN_VECTORIZE_SSE3;PREFIX="/usr/local";GITSHORT="c1f9358";HOST="wfview.org";UNAME="build";NDEBUG;QT_NO_DEBUG;%(PreprocessorDefinitions)
false
-
-
+
MultiThreadedDLL
true
true
Level3
- true
-
+ true
..\opus\win32\VS2015\Win32\Release\opus.lib;shell32.lib;%(AdditionalDependencies)
..\opus\win32\VS2015\Win32\Release;C:\opensslx86\lib;C:\Utils\my_sql\mysql-5.7.25-win32\lib;C:\Utils\postgresqlx86\pgsql\lib;%(AdditionalLibraryDirectories)
@@ -117,31 +85,12 @@
0
- _WINDOWS;UNICODE;_UNICODE;WIN32;_ENABLE_EXTENDED_ALIGNED_STORAGE;WFVIEW_VERSION=\"1.2d\";BUILD_WFVIEW;QT_DEPRECATED_WARNINGS;QCUSTOMPLOT_COMPILE_LIBRARY;USE_SSE;USE_SSE2;OUTSIDE_SPEEX;RANDOM_PREFIX=wf;EIGEN_MPL2_ONLY;EIGEN_DONT_VECTORIZE;EIGEN_VECTORIZE_SSE3;PREFIX=\"/usr/local\";GITSHORT=\"47772a4\";HOST=\"wfview.org\";UNAME=\"build\";NDEBUG;QT_NO_DEBUG;QT_MULTIMEDIA_LIB;QT_PRINTSUPPORT_LIB;QT_WIDGETS_LIB;QT_GUI_LIB;QT_SERIALPORT_LIB;QT_NETWORK_LIB;QT_CORE_LIB;%(PreprocessorDefinitions)
+ _WINDOWS;UNICODE;_UNICODE;WIN32;_ENABLE_EXTENDED_ALIGNED_STORAGE;WFVIEW_VERSION=\"1.2e\";BUILD_WFVIEW;QT_DEPRECATED_WARNINGS;QCUSTOMPLOT_COMPILE_LIBRARY;USE_SSE;USE_SSE2;OUTSIDE_SPEEX;RANDOM_PREFIX=wf;EIGEN_MPL2_ONLY;EIGEN_DONT_VECTORIZE;EIGEN_VECTORIZE_SSE3;PREFIX=\"/usr/local\";GITSHORT=\"c1f9358\";HOST=\"wfview.org\";UNAME=\"build\";NDEBUG;QT_NO_DEBUG;QT_MULTIMEDIA_LIB;QT_PRINTSUPPORT_LIB;QT_WIDGETS_LIB;QT_GUI_LIB;QT_SERIALPORT_LIB;QT_NETWORK_LIB;QT_CORE_LIB;%(PreprocessorDefinitions)
-
- msvc
- ./$(Configuration)/moc_predefs.h
- Moc'ing %(Identity)...
- output
- $(Configuration)
- moc_%(Filename).cpp
-
-
- default
- Rcc'ing %(Identity)...
- $(Configuration)
- qrc_%(Filename).cpp
-
-
- Uic'ing %(Identity)...
- $(ProjectDir)
- ui_%(Filename).h
-
-
+ msvc./$(Configuration)/moc_predefs.hMoc'ing %(Identity)...output$(Configuration)moc_%(Filename).cppdefaultRcc'ing %(Identity)...$(Configuration)qrc_%(Filename).cppUic'ing %(Identity)...$(ProjectDir)ui_%(Filename).h
- .;..\qcustomplot;..\opus\include;..\eigen;..\r8brain-free-src;..\kissfft;resampler;debug;/include;%(AdditionalIncludeDirectories)
+ .;..\qcustomplot;..\opus\include;..\eigen;..\r8brain-free-src;resampler;debug;/include;%(AdditionalIncludeDirectories)
-Zc:rvalueCast -Zc:inline -Zc:strictStrings -Zc:throwingNew -Zc:referenceBinding -Zc:__cplusplus -w34100 -w34189 -w44996 -w44456 -w44457 -w44458 %(AdditionalOptions)
debug\
false
@@ -150,14 +99,13 @@
Sync
debug\
Disabled
- _WINDOWS;UNICODE;_UNICODE;WIN32;_ENABLE_EXTENDED_ALIGNED_STORAGE;WFVIEW_VERSION="1.2d";BUILD_WFVIEW;QT_DEPRECATED_WARNINGS;QCUSTOMPLOT_COMPILE_LIBRARY;USE_SSE;USE_SSE2;OUTSIDE_SPEEX;RANDOM_PREFIX=wf;EIGEN_MPL2_ONLY;EIGEN_DONT_VECTORIZE;EIGEN_VECTORIZE_SSE3;PREFIX="/usr/local";GITSHORT="47772a4";HOST="wfview.org";UNAME="build";%(PreprocessorDefinitions)
+ _WINDOWS;UNICODE;_UNICODE;WIN32;_ENABLE_EXTENDED_ALIGNED_STORAGE;WFVIEW_VERSION="1.2e";BUILD_WFVIEW;QT_DEPRECATED_WARNINGS;QCUSTOMPLOT_COMPILE_LIBRARY;USE_SSE;USE_SSE2;OUTSIDE_SPEEX;RANDOM_PREFIX=wf;EIGEN_MPL2_ONLY;EIGEN_DONT_VECTORIZE;EIGEN_VECTORIZE_SSE3;PREFIX="/usr/local";GITSHORT="c1f9358";HOST="wfview.org";UNAME="build";%(PreprocessorDefinitions)
false
MultiThreadedDebugDLL
true
true
Level3
- true
-
+ true
..\opus\win32\VS2015\Win32\Debug\opus.lib;shell32.lib;%(AdditionalDependencies)
..\opus\win32\VS2015\Win32\Debug;C:\opensslx86\lib;C:\Utils\my_sql\mysql-5.7.25-win32\lib;C:\Utils\postgresqlx86\pgsql\lib;%(AdditionalLibraryDirectories)
@@ -176,30 +124,10 @@
0
- _WINDOWS;UNICODE;_UNICODE;WIN32;_ENABLE_EXTENDED_ALIGNED_STORAGE;WFVIEW_VERSION=\"1.2d\";BUILD_WFVIEW;QT_DEPRECATED_WARNINGS;QCUSTOMPLOT_COMPILE_LIBRARY;USE_SSE;USE_SSE2;OUTSIDE_SPEEX;RANDOM_PREFIX=wf;EIGEN_MPL2_ONLY;EIGEN_DONT_VECTORIZE;EIGEN_VECTORIZE_SSE3;PREFIX=\"/usr/local\";GITSHORT=\"47772a4\";HOST=\"wfview.org\";UNAME=\"build\";QT_MULTIMEDIA_LIB;QT_PRINTSUPPORT_LIB;QT_WIDGETS_LIB;QT_GUI_LIB;QT_SERIALPORT_LIB;QT_NETWORK_LIB;QT_CORE_LIB;_DEBUG;%(PreprocessorDefinitions)
+ _WINDOWS;UNICODE;_UNICODE;WIN32;_ENABLE_EXTENDED_ALIGNED_STORAGE;WFVIEW_VERSION=\"1.2e\";BUILD_WFVIEW;QT_DEPRECATED_WARNINGS;QCUSTOMPLOT_COMPILE_LIBRARY;USE_SSE;USE_SSE2;OUTSIDE_SPEEX;RANDOM_PREFIX=wf;EIGEN_MPL2_ONLY;EIGEN_DONT_VECTORIZE;EIGEN_VECTORIZE_SSE3;PREFIX=\"/usr/local\";GITSHORT=\"c1f9358\";HOST=\"wfview.org\";UNAME=\"build\";QT_MULTIMEDIA_LIB;QT_PRINTSUPPORT_LIB;QT_WIDGETS_LIB;QT_GUI_LIB;QT_SERIALPORT_LIB;QT_NETWORK_LIB;QT_CORE_LIB;_DEBUG;%(PreprocessorDefinitions)
-
- msvc
- ./$(Configuration)/moc_predefs.h
- Moc'ing %(Identity)...
- output
- $(Configuration)
- moc_%(Filename).cpp
-
-
- default
- Rcc'ing %(Identity)...
- $(Configuration)
- qrc_%(Filename).cpp
-
-
- Uic'ing %(Identity)...
- $(ProjectDir)
- ui_%(Filename).h
-
-
+ msvc./$(Configuration)/moc_predefs.hMoc'ing %(Identity)...output$(Configuration)moc_%(Filename).cppdefaultRcc'ing %(Identity)...$(Configuration)qrc_%(Filename).cppUic'ing %(Identity)...$(ProjectDir)ui_%(Filename).h
-
@@ -226,53 +154,207 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Document
true
@@ -289,21 +371,121 @@
release\moc_predefs.h;%(Outputs)
true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -337,16 +519,30 @@
- resources
- resources
-
+
+
+
+
+
+
+
+
+
+ resourcesresources
- style
- style
-
+
+
+
+
+
+
+
+
+
+ stylestyle
@@ -360,9 +556,6 @@
-
-
-
-
+
\ No newline at end of file
diff --git a/wfview.vcxproj.filters b/wfview.vcxproj.filters
index d0e5df8..b7c023b 100644
--- a/wfview.vcxproj.filters
+++ b/wfview.vcxproj.filters
@@ -116,9 +116,6 @@
Source Files
-
- Source Files
-
@@ -207,12 +204,59 @@
+
+
+
+
+
+
+
+
+
+
Generated Files
Generated Files
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -369,6 +413,6 @@
-
+
\ No newline at end of file
diff --git a/wfview.vcxproj.user b/wfview.vcxproj.user
index 1f25d96..2d805e3 100644
--- a/wfview.vcxproj.user
+++ b/wfview.vcxproj.user
@@ -7,9 +7,9 @@
PATH=$(QTDIR)\bin%3bC:\QT\5.15.2\MSVC2019\bin%3b$(QTDIR)\bin%3bC:\QT\5.15.2\MSVC2019\bin%3b$(PATH)
- 2022-04-13T11:33:25.4527691Z
+ 2022-04-18T13:23:03.5252168Z
- 2022-04-13T11:33:27.0112037Z
+ 2022-04-18T13:23:05.0598803Z
\ No newline at end of file