From d86f8958b2724e7c186e735852a85efe12de3498 Mon Sep 17 00:00:00 2001 From: Phil Taylor Date: Mon, 18 Apr 2022 20:29:50 +0100 Subject: [PATCH] Add support for splitting/combining waterfall/scope data --- commhandler.cpp | 66 ++++++- commhandler.h | 11 +- rigcommander.cpp | 6 +- rigcommander.h | 2 +- servermain.h | 2 +- udphandler.cpp | 118 ++++++++++++- udphandler.h | 10 +- wfmain.cpp | 35 +++- wfmain.h | 6 +- wfmain.ui | 93 +++++++++- wfview.vcxproj | 387 ++++++++++++++++++++++++++++++----------- wfview.vcxproj.filters | 52 +++++- wfview.vcxproj.user | 4 +- 13 files changed, 665 insertions(+), 127 deletions(-) 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