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) void rigCommander::handleNewData(const QByteArray &data)
{ {
emit haveDataForServer(data);
parseData(data); parseData(data);
} }
@ -1959,6 +1960,12 @@ void rigCommander::printHex(const QByteArray &pdata, bool printVert, bool printH
qDebug() << "----- End hex dump -----"; 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 sayMode();
void sayAll(); void sayAll();
void getDebug(); void getDebug();
void dataFromServer(QByteArray data);
signals: signals:
void commReady(); void commReady();
@ -154,6 +155,7 @@ signals:
void havePTTStatus(bool pttOn); void havePTTStatus(bool pttOn);
void haveATUStatus(unsigned char status); void haveATUStatus(unsigned char status);
void haveChangeBufferSize(quint16 value); void haveChangeBufferSize(quint16 value);
void haveDataForServer(QByteArray outData);
private: private:

Wyświetl plik

@ -101,6 +101,9 @@ void udpServer::controlReceived()
QNetworkDatagram datagram = udpControl->receiveDatagram(); QNetworkDatagram datagram = udpControl->receiveDatagram();
QByteArray r = datagram.data(); QByteArray r = datagram.data();
CLIENT* current = Q_NULLPTR; CLIENT* current = Q_NULLPTR;
if (datagram.senderPort() == 65535 || datagram.senderPort() == 0)
return;
foreach(CLIENT * client, controlClients) foreach(CLIENT * client, controlClients)
{ {
if (client->ipAddress == datagram.senderAddress() && client->port == datagram.senderPort()) if (client->ipAddress == datagram.senderAddress() && client->port == datagram.senderPort())
@ -281,6 +284,9 @@ void udpServer::civReceived()
CLIENT* current = Q_NULLPTR; CLIENT* current = Q_NULLPTR;
if (datagram.senderPort() == 65535 || datagram.senderPort() == 0)
return;
foreach(CLIENT * client, civClients) foreach(CLIENT * client, civClients)
{ {
if (client->ipAddress == datagram.senderAddress() && client->port == datagram.senderPort()) if (client->ipAddress == datagram.senderAddress() && client->port == datagram.senderPort())
@ -371,6 +377,17 @@ void udpServer::civReceived()
} }
break; break;
default: 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; break;
} }
} }
@ -383,8 +400,12 @@ void udpServer::audioReceived()
QByteArray r = datagram.data(); QByteArray r = datagram.data();
CLIENT* current = Q_NULLPTR; CLIENT* current = Q_NULLPTR;
if (datagram.senderPort() == 65535 || datagram.senderPort() == 0)
return;
foreach(CLIENT * client, audioClients) foreach(CLIENT * client, audioClients)
{ {
if (client != Q_NULLPTR && client->ipAddress == datagram.senderAddress() && client->port == datagram.senderPort()) if (client != Q_NULLPTR && client->ipAddress == datagram.senderAddress() && client->port == datagram.senderPort())
{ {
current = client; 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: public slots:
void init(); void init();
void dataForServer(QByteArray);
signals:
void haveDataFromServer(QByteArray);
private: 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(this, SIGNAL(initServer()), udp, SLOT(init()));
connect(serverThread, SIGNAL(finished()), udp, SLOT(deleteLater())); connect(serverThread, SIGNAL(finished()), udp, SLOT(deleteLater()));
serverThread->start(); serverThread->start();
emit initServer(); emit initServer();
@ -367,6 +369,12 @@ wfmain::wfmain(const QString serialPortCL, const QString hostCL, QWidget *parent
// Metering // Metering
connect(this, SIGNAL(getMeters(bool)), rig, SLOT(getMeters(bool))); 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(); // primary
ui->plot->addGraph(0, 0); // secondary, peaks, same axis as first? ui->plot->addGraph(0, 0); // secondary, peaks, same axis as first?
ui->waterfall->addGraph(); ui->waterfall->addGraph();