1 2 3 4 5 6 7 8 9 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 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126
|
#ifndef KENWOODCOMMANDER_H
#define KENWOODCOMMANDER_H
#include "rigcommander.h"
#include "rtpaudio.h"
#include <QSerialPort>
#define audioLevelBufferSize (4)
// This file figures out what to send to the comm and also
// parses returns into useful things.
#define NUMTOASCII 48
class kenwoodCommander : public rigCommander
{
Q_OBJECT
public:
explicit kenwoodCommander(rigCommander* parent=nullptr);
explicit kenwoodCommander(quint8 guid[GUIDLEN], rigCommander* parent = nullptr);
~kenwoodCommander();
public slots:
void process() override;
void commSetup(rigTypedef rigList, quint8 rigCivAddr, QString rigSerialPort, quint32 rigBaudRate, QString vsp, quint16 tcp, quint8 wf) override;
void commSetup(rigTypedef rigList, quint8 rigCivAddr, udpPreferences prefs, audioSetup rxSetup, audioSetup txSetup, QString vsp, quint16 tcp) override;
void lanConnected();
void lanDisconnected();
void closeComm() override;
void setPTTType(pttType_t) override;
// Power:
void powerOn() override;
void powerOff() override;
// Rig ID and CIV:
void setRigID(quint8 rigID) override;
void setCIVAddr(quint8 civAddr) override;
// UDP:
void handleNewData(const QByteArray& data) override;
void receiveBaudRate(quint32 baudrate) override;
// Housekeeping:
void receiveCommand(funcs func, QVariant value, uchar receiver) override;
// Serial:
void serialPortError(QSerialPort::SerialPortError err);
void receiveDataFromRig();
void parseData(QByteArray dataInput);
void getTxLevels(quint16 amplitudePeak, quint16 amplitudeRMS ,quint16 latency, quint16 current, bool under, bool over);
void getRxLevels(quint16 amplitudePeak, quint16 amplitudeRMS,quint16 latency,quint16 current, bool under, bool over);
signals:
// All signals are defined in rigcommander.h as they should be common for all rig types.
void initRtpAudio();
void haveSetVolume(quint8 level);
void haveNetworkError(errorType);
void haveChangeLatency(quint16 value);
void haveNetworkStatus(networkStatus);
void haveNetworkAudioLevels(networkAudioLevels);
private:
void commonSetup();
void determineRigCaps();
funcType getCommand(funcs func, QByteArray &payload, int value, uchar receiver=0);
bool parseMemory(QByteArray data, QVector<memParserFormat>* memParser, memoryType* mem);
mutable QMutex serialMutex;
QIODevice *port=Q_NULLPTR;
bool portConnected=false;
bool isTransmitting = false;
QByteArray lastSentCommand;
pttyHandler* ptty = Q_NULLPTR;
tcpServer* tcp = Q_NULLPTR;
rtpAudio* rtp = Q_NULLPTR;
QThread* rtpThread = Q_NULLPTR;
QHash<quint8,rigInfo> rigList;
quint8 rigCivAddr;
QString vsp;
quint16 tcpPort;
quint8 wf;
QString rigSerialPort;
quint32 rigBaudRate;
scopeData currentScope;
bool loginRequired = false;
bool audioStarted = false;
bool network = false;
QByteArray partial;
connectionType_t connType = connectionUSB;
bool aiModeEnabled=false;
ushort scopeSplit=0;
networkStatus status;
quint8 audioLevelsTxPeak[audioLevelBufferSize];
quint8 audioLevelsRxPeak[audioLevelBufferSize];
quint8 audioLevelsTxRMS[audioLevelBufferSize];
quint8 audioLevelsRxRMS[audioLevelBufferSize];
quint8 audioLevelsTxPosition = 0;
quint8 audioLevelsRxPosition = 0;
quint8 findMean(quint8 *d);
quint8 findMax(quint8 *d);
};
#endif // KENWOODCOMMANDER_H
|