#ifndef RIGCOMMANDER_H #define RIGCOMMANDER_H #include #include #include "commhandler.h" #include "pttyhandler.h" #include "udphandler.h" #include "rigidentities.h" #include "repeaterattributes.h" // This file figures out what to send to the comm and also // parses returns into useful things. // 0xE1 is new default, 0xE0 was before. // note: using a define because switch case doesn't even work with const unsigned char. Surprised me. #define compCivAddr 0xE1 enum meterKind { meterS, meterSWR, meterPower, meterALC, meterComp, meterVoltage, meterCurrent }; enum spectrumMode { spectModeCenter=0x00, spectModeFixed=0x01, spectModeScrollC=0x02, spectModeScrollF=0x03, spectModeUnknown=0xff }; struct freqt { quint64 Hz; double MHzDouble; }; class rigCommander : public QObject { Q_OBJECT public: rigCommander(); ~rigCommander(); public slots: void process(); void commSetup(unsigned char rigCivAddr, QString rigSerialPort, quint32 rigBaudRate); void commSetup(unsigned char rigCivAddr, udpPreferences prefs); void closeComm(); void enableSpectOutput(); void disableSpectOutput(); void enableSpectrumDisplay(); void disableSpectrumDisplay(); void setSpectrumBounds(double startFreq, double endFreq, unsigned char edgeNumber); void setSpectrumMode(spectrumMode spectMode); void getSpectrumCenterMode(); void getSpectrumMode(); void setSpectrumRefLevel(int level); void getSpectrumRefLevel(); void getSpectrumRefLevel(unsigned char mainSub); void setScopeSpan(char span); void getScopeSpan(); void setScopeEdge(char edge); void getScopeEdge(); void getScopeMode(); void setFrequency(freqt freq); void setMode(unsigned char mode, unsigned char modeFilter); void getFrequency(); void getBandStackReg(char band, char regCode); void getMode(); void getPTT(); void setPTT(bool pttOn); void setDataMode(bool dataOn); void getDataMode(); void setDuplexMode(duplexMode dm); void getDuplexMode(); void getLevels(); // all supported levels void getRfGain(); void getAfGain(); void getSql(); void getTxLevel(); void getMicGain(); void getCompLevel(); void getMonitorLevel(); void getVoxGain(); void getAntiVoxGain(); void getUSBGain(); void getLANGain(); void getACCGain(); void getACCGain(unsigned char ab); void getSMeter(); void getRFPowerMeter(); void getSWRMeter(); void getALCMeter(); void getCompReductionMeter(); void getVdMeter(); void getIDMeter(); void getMeters(meterKind meter); // all supported meters per transmit or receive void setSquelch(unsigned char level); void setRfGain(unsigned char level); void setAfGain(unsigned char level); void setTxPower(unsigned char power); void setMicGain(unsigned char gain); void setUSBGain(unsigned char gain); void setLANGain(unsigned char gain); void setACCGain(unsigned char gain); void setACCGain(unsigned char gain, unsigned char ab); void setCompLevel(unsigned char compLevel); void setMonitorLevel(unsigned char monitorLevel); void setVoxGain(unsigned char gain); void setAntiVoxGain(unsigned char gain); void getModInput(bool dataOn); void setModInput(rigInput input, bool dataOn); void setModInputLevel(rigInput input, unsigned char level); void getModInputLevel(rigInput input); void startATU(); void setATU(bool enabled); void getATUStatus(); void getRigID(); void findRigs(); void setCIVAddr(unsigned char civAddr); void getRefAdjustCourse(); void getRefAdjustFine(); void setRefAdjustCourse(unsigned char level); void setRefAdjustFine(unsigned char level); void handleNewData(const QByteArray& data); void receiveAudioData(const audioPacket& data); void handleSerialPortError(const QString port, const QString errorText); void handleStatusUpdate(const QString text); void changeLatency(const quint16 value); void sayFrequency(); void sayMode(); void sayAll(); void getDebug(); void dataFromServer(QByteArray data); signals: void commReady(); void haveSpectrumData(QByteArray spectrum, double startFreq, double endFreq); // pass along data to UI void haveRigID(rigCapabilities rigCaps); void discoveredRigID(rigCapabilities rigCaps); void haveSerialPortError(const QString port, const QString errorText); void haveStatusUpdate(const QString text); void haveFrequency(freqt freqStruct); void haveMode(unsigned char mode, unsigned char filter); void haveDataMode(bool dataModeEnabled); void haveDuplexMode(duplexMode); void haveBandStackReg(float freq, char mode, bool dataOn); void haveSpectrumBounds(); void haveScopeSpan(char span); void haveSpectrumMode(spectrumMode spectmode); void haveScopeEdge(char edge); void haveSpectrumRefLevel(int level); void haveRfGain(unsigned char level); void haveAfGain(unsigned char level); void haveSql(unsigned char level); void haveTxPower(unsigned char level); void haveMicGain(unsigned char level); void haveCompLevel(unsigned char level); void haveMonitorLevel(unsigned char level); void haveVoxGain(unsigned char gain); void haveAntiVoxGain(unsigned char gain); void haveModInput(rigInput input, bool isData); void haveLANGain(unsigned char gain); void haveUSBGain(unsigned char gain); void haveACCGain(unsigned char gain, unsigned char ab); void haveModSrcGain(rigInput input, unsigned char gain); void haveMeter(meterKind meter, unsigned char level); void haveSMeter(unsigned char level); void haveRFMeter(unsigned char level); void haveSWRMeter(unsigned char); void haveALCMeter(unsigned char); void haveCompMeter(unsigned char dbreduction); void haveVdMeter(unsigned char voltage); void haveIdMeter(unsigned char current); void thing(); void haveRefAdjustCourse(unsigned char level); void haveRefAdjustFine(unsigned char level); void dataForComm(const QByteArray &outData); void getMoreDebug(); void finished(); void havePTTStatus(bool pttOn); void haveATUStatus(unsigned char status); void haveChangeLatency(quint16 value); void haveDataForServer(QByteArray outData); void haveAudioData(audioPacket data); void initUdpHandler(); void haveSetVolume(unsigned char level); private: void setup(); QByteArray stripData(const QByteArray &data, unsigned char cutPosition); void parseData(QByteArray data); // new data come here void parseCommand(); unsigned char bcdHexToUChar(unsigned char in); unsigned char bcdHexToUChar(unsigned char hundreds, unsigned char tensunits); unsigned int bcdHexToUInt(unsigned char hundreds, unsigned char tensunits); QByteArray bcdEncodeInt(unsigned int); void parseFrequency(); freqt parseFrequency(QByteArray data, unsigned char lastPosition); // supply index where Mhz is found QByteArray makeFreqPayload(double frequency); QByteArray makeFreqPayload(freqt freq); void parseMode(); void parseSpectrum(); void parseWFData(); void parseSpectrumRefLevel(); void parseDetailedRegisters1A05(); void parseRegisters1A(); void parseBandStackReg(); void parseRegisters1C(); void parsePTT(); void parseATU(); void parseLevels(); // register 0x14 void sendLevelCmd(unsigned char levAddr, unsigned char level); QByteArray getLANAddr(); QByteArray getUSBAddr(); QByteArray getACCAddr(unsigned char ab); void setModInput(rigInput input, bool dataOn, bool isQuery); void sendDataOut(); void prepDataAndSend(QByteArray data); void debugMe(); void printHex(const QByteArray &pdata); void printHex(const QByteArray &pdata, bool printVert, bool printHoriz); commHandler* comm = Q_NULLPTR; pttyHandler* ptty = Q_NULLPTR; udpHandler* udp=Q_NULLPTR; QThread* udpHandlerThread = Q_NULLPTR; void determineRigCaps(); QByteArray payloadIn; QByteArray echoPerfix; QByteArray replyPrefix; QByteArray genericReplyPrefix; QByteArray payloadPrefix; QByteArray payloadSuffix; QByteArray rigData; QByteArray spectrumLine; double spectrumStartFreq; double spectrumEndFreq; struct rigCapabilities rigCaps; bool haveRigCaps; model_kind model; quint8 spectSeqMax; quint16 spectAmpMax; quint16 spectLenMax; spectrumMode oldScopeMode; bool usingNativeLAN; // indicates using OEM LAN connection (705,7610,9700,7850) bool lookingForRig; bool foundRig; double frequencyMhz; unsigned char civAddr; // IC-7300: 0x94 is default = 148decimal unsigned char incomingCIVAddr; // place to store the incoming CIV. //const unsigned char compCivAddr = 0xE1; // 0xE1 is new default, 0xE0 was before. bool pttAllowed; QString rigSerialPort; quint32 rigBaudRate; QString ip; int cport; int sport; int aport; QString username; QString password; QString serialPortError; }; #endif // RIGCOMMANDER_H