2023-07-06 09:36:11 +00:00
|
|
|
#ifndef TCISERVER_H
|
|
|
|
#define TCISERVER_H
|
|
|
|
|
|
|
|
#include <QObject>
|
|
|
|
#include <QtWebSockets/QtWebSockets>
|
|
|
|
#include <QtWebSockets/QWebSocketServer>
|
|
|
|
|
2023-09-19 22:04:48 +00:00
|
|
|
#include "audioconverter.h"
|
2023-07-06 09:36:11 +00:00
|
|
|
#include "cachingqueue.h"
|
|
|
|
|
|
|
|
/* Opus and Eigen */
|
|
|
|
#ifdef Q_OS_WIN
|
|
|
|
#include <Eigen/Eigen>
|
|
|
|
#else
|
|
|
|
#include <eigen3/Eigen/Eigen>
|
|
|
|
#endif
|
|
|
|
|
2023-09-19 22:04:48 +00:00
|
|
|
#define TCI_AUDIO_LENGTH 4096
|
2023-07-06 09:36:11 +00:00
|
|
|
struct tciCommandStruct
|
|
|
|
{
|
|
|
|
const char *str;
|
|
|
|
funcs func;
|
|
|
|
char arg1=0;
|
|
|
|
char arg2=0;
|
|
|
|
char arg3=0;
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
class tciServer : public QObject
|
|
|
|
{
|
|
|
|
Q_OBJECT
|
|
|
|
|
|
|
|
static constexpr quint32 iqHeaderSize = 16u*sizeof(quint32);
|
|
|
|
static constexpr quint32 iqBufferSize = 2048u;
|
|
|
|
|
|
|
|
typedef enum
|
|
|
|
{
|
|
|
|
IqInt16 = 0,
|
|
|
|
IqInt24,
|
|
|
|
IqInt32,
|
|
|
|
IqFloat32,
|
|
|
|
IqFloat64
|
|
|
|
}iqDataType;
|
|
|
|
|
|
|
|
typedef enum
|
|
|
|
{
|
|
|
|
IqStream = 0,
|
|
|
|
RxAudioStream,
|
|
|
|
TxAudioStream,
|
|
|
|
TxChrono,
|
|
|
|
}streamType;
|
|
|
|
|
|
|
|
typedef struct
|
|
|
|
{
|
|
|
|
quint32 receiver;
|
|
|
|
quint32 sampleRate;
|
|
|
|
quint32 format;
|
|
|
|
quint32 codec;
|
|
|
|
quint32 crc;
|
|
|
|
quint32 length;
|
|
|
|
quint32 type;
|
|
|
|
quint32 reserv[9];
|
2023-09-19 22:04:48 +00:00
|
|
|
float data[TCI_AUDIO_LENGTH];
|
2023-07-06 09:36:11 +00:00
|
|
|
}dataStream;
|
|
|
|
|
|
|
|
struct connStatus {
|
|
|
|
bool connected=true;
|
|
|
|
bool rxaudio=false;
|
|
|
|
bool txaudio=false;
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
public:
|
2023-09-19 22:04:48 +00:00
|
|
|
explicit tciServer(QObject *parent = nullptr);
|
2023-07-06 09:36:11 +00:00
|
|
|
~tciServer();
|
|
|
|
|
|
|
|
signals:
|
|
|
|
void closed();
|
2023-09-19 22:04:48 +00:00
|
|
|
void sendTCIAudio(QByteArray audio);
|
2023-07-06 09:36:11 +00:00
|
|
|
|
|
|
|
public slots:
|
2023-09-19 22:04:48 +00:00
|
|
|
void receiveTCIAudio(audioPacket audio);
|
2023-12-18 10:47:16 +00:00
|
|
|
void receiveRigCaps(rigCapabilities* caps);
|
2023-09-19 22:04:48 +00:00
|
|
|
void init(quint16 port);
|
|
|
|
|
2023-07-06 09:36:11 +00:00
|
|
|
|
|
|
|
private slots:
|
|
|
|
void onNewConnection();
|
|
|
|
void processIncomingTextMessage(QString message);
|
|
|
|
void processIncomingBinaryMessage(QByteArray message);
|
|
|
|
void socketDisconnected();
|
|
|
|
void receiveCache(cacheItem item);
|
2023-09-19 22:04:48 +00:00
|
|
|
void setupTxPacket(int packetLen);
|
2023-07-06 09:36:11 +00:00
|
|
|
|
|
|
|
private:
|
|
|
|
QWebSocketServer *server;
|
|
|
|
QMap<QWebSocket *, connStatus> clients;
|
|
|
|
cachingQueue *queue;
|
|
|
|
QByteArray rxAudioData;
|
|
|
|
QByteArray txAudioData;
|
2023-09-19 22:04:48 +00:00
|
|
|
QByteArray txChrono;
|
2023-12-18 10:47:16 +00:00
|
|
|
rigCapabilities* rigCaps = Q_NULLPTR;
|
2023-07-06 09:36:11 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
#endif // TCISERVER_H
|