Connect Civ to/from server

merge-requests/2/head
Phil Taylor 2021-02-18 09:14:41 +00:00
rodzic e3b3d2a3f4
commit 7966568f17
5 zmienionych plików z 73 dodań i 0 usunięć

Wyświetl plik

@ -584,6 +584,7 @@ void rigCommander::setCIVAddr(unsigned char civAddr)
void rigCommander::handleNewData(const QByteArray &data)
{
emit haveDataForServer(data);
parseData(data);
}
@ -1959,6 +1960,12 @@ void rigCommander::printHex(const QByteArray &pdata, bool printVert, bool printH
qDebug() << "----- End hex dump -----";
}
void rigCommander::dataFromServer(QByteArray data)
{
qDebug() << "emit dataForComm()";
emit dataForComm(data);
}

Wyświetl plik

@ -109,6 +109,7 @@ public slots:
void sayMode();
void sayAll();
void getDebug();
void dataFromServer(QByteArray data);
signals:
void commReady();
@ -154,6 +155,7 @@ signals:
void havePTTStatus(bool pttOn);
void haveATUStatus(unsigned char status);
void haveChangeBufferSize(quint16 value);
void haveDataForServer(QByteArray outData);
private:

Wyświetl plik

@ -101,6 +101,9 @@ void udpServer::controlReceived()
QNetworkDatagram datagram = udpControl->receiveDatagram();
QByteArray r = datagram.data();
CLIENT* current = Q_NULLPTR;
if (datagram.senderPort() == 65535 || datagram.senderPort() == 0)
return;
foreach(CLIENT * client, controlClients)
{
if (client->ipAddress == datagram.senderAddress() && client->port == datagram.senderPort())
@ -281,6 +284,9 @@ void udpServer::civReceived()
CLIENT* current = Q_NULLPTR;
if (datagram.senderPort() == 65535 || datagram.senderPort() == 0)
return;
foreach(CLIENT * client, civClients)
{
if (client->ipAddress == datagram.senderAddress() && client->port == datagram.senderPort())
@ -371,6 +377,17 @@ void udpServer::civReceived()
}
break;
default:
if (r.length() > 21) {
// First check if we are missing any packets?
quint8 temp = r[0] - 0x15;
if ((quint8)r[16] == 0xc1 && (quint8)r[17] == temp)
{
qDebug() << "Got CIV from server: " << r.mid(21);
emit haveDataFromServer(r.mid(21));
}
}
break;
}
}
@ -383,8 +400,12 @@ void udpServer::audioReceived()
QByteArray r = datagram.data();
CLIENT* current = Q_NULLPTR;
if (datagram.senderPort() == 65535 || datagram.senderPort() == 0)
return;
foreach(CLIENT * client, audioClients)
{
if (client != Q_NULLPTR && client->ipAddress == datagram.senderAddress() && client->port == datagram.senderPort())
{
current = client;
@ -758,3 +779,34 @@ void udpServer::sendStatus(CLIENT* c)
}
#define SEND_SIZE 17
void udpServer::dataForServer(QByteArray d)
{
CLIENT* current = Q_NULLPTR;
foreach(CLIENT * client, civClients)
{
qDebug() << "Sending CIV data to " << client->ipAddress.toString();
quint8 p[SEND_SIZE];
memset(p, 0x0, sizeof(p));
qToLittleEndian(client->txSeq, p + 0x06);
qToLittleEndian(client->myId, p + 0x08);
qToLittleEndian(client->remoteId, p + 0x0c);
QByteArray t = QByteArray::fromRawData((const char*)p, sizeof(p));
p[0x10] = (char)0xc1;
qToLittleEndian((quint16)t.length(), p + 0x11);
qToLittleEndian((quint16)sizeof(p) + t.length(), p + 0x00);
t.append(QByteArray::fromRawData((const char*)p, sizeof(p)));
qToLittleEndian(client->connSeq, p + 0x12);
client->socket->writeDatagram(t, client->ipAddress, client->port);
client->connSeq++;
client->txSeq++;
}
return;
}

Wyświetl plik

@ -31,6 +31,10 @@ public:
public slots:
void init();
void dataForServer(QByteArray);
signals:
void haveDataFromServer(QByteArray);
private:

Wyświetl plik

@ -201,6 +201,8 @@ wfmain::wfmain(const QString serialPortCL, const QString hostCL, QWidget *parent
connect(this, SIGNAL(initServer()), udp, SLOT(init()));
connect(serverThread, SIGNAL(finished()), udp, SLOT(deleteLater()));
serverThread->start();
emit initServer();
@ -367,6 +369,12 @@ wfmain::wfmain(const QString serialPortCL, const QString hostCL, QWidget *parent
// Metering
connect(this, SIGNAL(getMeters(bool)), rig, SLOT(getMeters(bool)));
// Server
connect(rig, SIGNAL(haveDataForServer(QByteArray)), udp, SLOT(dataForServer(QByteArray)));
connect(udp, SIGNAL(haveDataFromServer(QByteArray)), rig, SLOT(dataFromServer(QByteArray)));
ui->plot->addGraph(); // primary
ui->plot->addGraph(0, 0); // secondary, peaks, same axis as first?
ui->waterfall->addGraph();