From 5ae3549ba50e19784bbd0e4499352de525d42260 Mon Sep 17 00:00:00 2001 From: Phil Taylor Date: Sun, 23 Jan 2022 17:54:40 +0000 Subject: [PATCH] Treat GUID as 16 bytes rather than trying to be clever! --- packettypes.h | 14 ++------------ rigcommander.cpp | 8 ++++---- rigcommander.h | 8 ++++---- selectradio.cpp | 11 ++++++++++- selectradio.h | 4 ++-- udphandler.cpp | 27 ++++++++------------------- udphandler.h | 7 ++++--- wfmain.cpp | 5 ++--- 8 files changed, 36 insertions(+), 48 deletions(-) diff --git a/packettypes.h b/packettypes.h index d71cfdb..c8e4c60 100644 --- a/packettypes.h +++ b/packettypes.h @@ -1,19 +1,9 @@ #ifndef PACKETTYPES_H #define PACKETTYPES_H #include -#include #pragma pack(push, 1) -#ifndef Q_OS_WIN -typedef struct _GUID { - quint32 Data1; - quint16 Data2; - quint16 Data3; - quint8 Data4[8]; -} GUID; -#endif - // Various settings used by both client and server #define PURGE_SECONDS 10 #define TOKEN_RENEWAL 60000 @@ -303,7 +293,7 @@ typedef union conninfo_packet { char unusedh; // 0x29 char macaddress[6]; // 0x2a }; - GUID guid; // 0x20 + quint8 guid[16]; // 0x20 }; char unusedab[16]; // 0x30 char name[32]; // 0x40 @@ -348,7 +338,7 @@ typedef union radio_cap_packet { char unused; // 0x0 char macaddress[6]; // 0x0 }; - GUID guid; // 0x0 + quint8 guid[16]; // 0x0 }; char name[32]; // 0x10 char audio[32]; // 0x30 diff --git a/rigcommander.cpp b/rigcommander.cpp index 37df970..6e461bb 100644 --- a/rigcommander.cpp +++ b/rigcommander.cpp @@ -139,8 +139,8 @@ void rigCommander::commSetup(unsigned char rigCivAddr, udpPreferences prefs, aud connect(this, SIGNAL(discoveredRigID(rigCapabilities)), ptty, SLOT(receiveFoundRigID(rigCapabilities))); connect(udp, SIGNAL(requestRadioSelection(QList)), this, SLOT(radioSelection(QList))); - connect(udp, SIGNAL(setRadioUsage(int, bool, QString, QString)), this, SLOT(radioUsage(int, bool, QString, QString))); - connect(this, SIGNAL(selectedRadio(int)), udp, SLOT(setCurrentRadio(int))); + connect(udp, SIGNAL(setRadioUsage(quint8, quint8, QString, QString)), this, SLOT(radioUsage(quint8, quint8, QString, QString))); + connect(this, SIGNAL(selectedRadio(quint8)), udp, SLOT(setCurrentRadio(quint8))); emit haveAfGain(rxSetup.localAFgain); localVolume = rxSetup.localAFgain; } @@ -4281,11 +4281,11 @@ void rigCommander::radioSelection(QList radios) emit requestRadioSelection(radios); } -void rigCommander::radioUsage(int radio, bool busy, QString user, QString ip) { +void rigCommander::radioUsage(quint8 radio, quint8 busy, QString user, QString ip) { emit setRadioUsage(radio, busy, user, ip); } -void rigCommander::setCurrentRadio(int radio) { +void rigCommander::setCurrentRadio(quint8 radio) { emit selectedRadio(radio); } diff --git a/rigcommander.h b/rigcommander.h index f5a184c..d930dac 100644 --- a/rigcommander.h +++ b/rigcommander.h @@ -274,8 +274,8 @@ public slots: // Housekeeping: void handleStatusUpdate(const networkStatus status); void radioSelection(QList radios); - void radioUsage(int radio, bool busy, QString name, QString ip); - void setCurrentRadio(int radio); + void radioUsage(quint8 radio, quint8 busy, QString name, QString ip); + void setCurrentRadio(quint8 radio); void sendState(); void getDebug(); @@ -369,8 +369,8 @@ signals: // Housekeeping: void requestRadioSelection(QList radios); - void setRadioUsage(int radio, bool busy, QString user, QString ip); - void selectedRadio(int radio); + void setRadioUsage(quint8 radio, quint8 busy, QString user, QString ip); + void selectedRadio(quint8 radio); void getMoreDebug(); void finished(); diff --git a/selectradio.cpp b/selectradio.cpp index 5ea1b56..43cf093 100644 --- a/selectradio.cpp +++ b/selectradio.cpp @@ -33,7 +33,7 @@ void selectRadio::populate(QList radios) } } -void selectRadio::setInUse(int radio, bool busy, QString user, QString ip) +void selectRadio::setInUse(quint8 radio, quint8 busy, QString user, QString ip) { if ((radio > 0)&& !this->isVisible()) { qInfo() << "setInUse: radio:" << radio <<"busy" << busy << "user" << user << "ip"<table->setItem(radio, 3, new QTableWidgetItem(user)); ui->table->setItem(radio, 4, new QTableWidgetItem(ip)); + for (int f = 0; f < 5; f++) { + if (busy == 1) + ui->table->item(radio, f)->setBackground(Qt::darkGreen); + else if (busy == 2) + ui->table->item(radio, f)->setBackground(Qt::red); + else + ui->table->item(radio, f)->setBackground(Qt::black); + } + } void selectRadio::on_table_cellClicked(int row, int col) { diff --git a/selectradio.h b/selectradio.h index fbe3412..5e585ab 100644 --- a/selectradio.h +++ b/selectradio.h @@ -24,11 +24,11 @@ public: public slots: void on_table_cellClicked(int row, int col); - void setInUse(int radio, bool busy, QString user, QString ip); + void setInUse(quint8 radio, quint8 busy, QString user, QString ip); void on_cancelButton_clicked(); signals: - void selectedRadio(int radio); + void selectedRadio(quint8 radio); private: Ui::selectRadio* ui; diff --git a/udphandler.cpp b/udphandler.cpp index 8671997..870e568 100644 --- a/udphandler.cpp +++ b/udphandler.cpp @@ -361,7 +361,7 @@ void udpHandler::dataReceived() qInfo(logUdp()) << "Got Connection status for:" << in->name << "Busy:" << in->busy << "Computer" << in->computer << "IP" << ip.toString(); // First we need to find this radio in our capabilities packet, there aren't many so just step through - for (int f = 0; f < radios.length(); f++) + for (unsigned char f = 0; f < radios.length(); f++) { if ((radios[f].commoncap == 0x8010 && radios[f].macaddress[0] == in->macaddress[0] && @@ -370,12 +370,9 @@ void udpHandler::dataReceived() radios[f].macaddress[3] == in->macaddress[3] && radios[f].macaddress[4] == in->macaddress[4] && radios[f].macaddress[5] == in->macaddress[5]) || - (radios[f].guid.Data1 == in->guid.Data1 && - radios[f].guid.Data2 == in->guid.Data2 && - radios[f].guid.Data3 == in->guid.Data3 && - radios[f].guid.Data4 == in->guid.Data4)) + !memcmp(radios[f].guid,in->guid,sizeof(in->guid))) { - emit setRadioUsage(f, (bool)in->busy, QString(in->computer), ip.toString()); + emit setRadioUsage(f, in->busy, QString(in->computer), ip.toString()); } } if (in->type != 0x01 && !streamOpened) { @@ -431,14 +428,6 @@ void udpHandler::dataReceived() radio.name << " Audio:" << radio.audio << "CIV:" << hex << (unsigned char)radio.civ << "CAPF" << radio.capf; - if (radio.txsample < 2) - { - // TX not supported - qInfo(logUdp()) << this->metaObject()->className() << "TX audio is disabled"; - } - if (radio.commoncap != 0x8010) { - useGuid = true; - } } emit requestRadioSelection(radios); break; @@ -453,7 +442,7 @@ void udpHandler::dataReceived() } -void udpHandler::setCurrentRadio(int radio) { +void udpHandler::setCurrentRadio(quint8 radio) { qInfo(logUdp()) << "Got Radio" << radio; qInfo(logUdp()) << "Find available local ports"; @@ -474,12 +463,12 @@ void udpHandler::setCurrentRadio(int radio) { emit haveBaudRate(baudrate); if (radios[radio].commoncap == 0x8010) { - memcpy(macaddress, radios[radio].macaddress, 6); + memcpy(&macaddress, radios[radio].macaddress, sizeof(macaddress)); useGuid = false; } else { useGuid = true; - guid = radios[radio].guid; + memcpy(&guid, radios[radio].guid, sizeof(guid)); } devName =radios[radio].name; @@ -507,10 +496,10 @@ void udpHandler::sendRequestStream() p.res = 0x03; if (!useGuid) { p.commoncap = 0x8010; - memcpy(p.macaddress, macaddress, 6); + memcpy(&p.macaddress, macaddress, 6); } else { - p.guid = guid; + memcpy(&p.guid, guid, sizeof(p.guid)); } p.innerseq = authSeq++; p.tokrequest = tokRequest; diff --git a/udphandler.h b/udphandler.h index bdf44cf..ee6ea24 100644 --- a/udphandler.h +++ b/udphandler.h @@ -11,6 +11,7 @@ #include #include #include +#include // Allow easy endian-ness conversions #include @@ -237,7 +238,7 @@ public slots: void changeLatency(quint16 value); void setVolume(unsigned char value); void init(); - void setCurrentRadio(int radio); + void setCurrentRadio(quint8 radio); signals: @@ -249,7 +250,7 @@ signals: void haveNetworkStatus(networkStatus); void haveBaudRate(quint32 baudrate); void requestRadioSelection(QList radios); - void setRadioUsage(int, bool busy, QString name, QString mac); + void setRadioUsage(quint8, quint8 busy, QString name, QString mac); private: void sendAreYouThere(); @@ -288,7 +289,7 @@ private: quint32 token; // These are for stream ident info. quint8 macaddress[8]; - GUID guid; + quint8 guid[16]; bool useGuid = false; QByteArray usernameEncoded; QByteArray passwordEncoded; diff --git a/wfmain.cpp b/wfmain.cpp index c9bfef0..13523c8 100644 --- a/wfmain.cpp +++ b/wfmain.cpp @@ -423,8 +423,8 @@ void wfmain::makeRig() connect(rig, SIGNAL(haveSerialPortError(QString, QString)), this, SLOT(receiveSerialPortError(QString, QString))); connect(rig, SIGNAL(haveStatusUpdate(networkStatus)), this, SLOT(receiveStatusUpdate(networkStatus))); connect(rig, SIGNAL(requestRadioSelection(QList)), this, SLOT(radioSelection(QList))); - connect(rig, SIGNAL(setRadioUsage(int, bool, QString, QString)), selRad, SLOT(setInUse(int, bool, QString, QString))); - connect(selRad, SIGNAL(selectedRadio(int)), rig, SLOT(setCurrentRadio(int))); + connect(rig, SIGNAL(setRadioUsage(quint8, quint8, QString, QString)), selRad, SLOT(setInUse(quint8, quint8, QString, QString))); + connect(selRad, SIGNAL(selectedRadio(quint8)), rig, SLOT(setCurrentRadio(quint8))); // Rig comm setup: connect(this, SIGNAL(sendCommSetup(unsigned char, udpPreferences, audioSetup, audioSetup, QString)), rig, SLOT(commSetup(unsigned char, udpPreferences, audioSetup, audioSetup, QString))); connect(this, SIGNAL(sendCommSetup(unsigned char, QString, quint32,QString)), rig, SLOT(commSetup(unsigned char, QString, quint32,QString))); @@ -1422,7 +1422,6 @@ void wfmain::loadSettings() prefs.colorScheme.Light_TuningLine = QColor::fromRgba(settings->value("Light_TuningLine", defaultColors.Light_TuningLine.rgba()).toUInt()); settings->endGroup(); - // Radio and Comms: C-IV addr, port to use settings->beginGroup("Radio"); prefs.radioCIVAddr = (unsigned char)settings->value("RigCIVuInt", defPrefs.radioCIVAddr).toInt();