#ifndef TCPPROTOCOL_H #define TCPPROTOCOL_H #include "GlobalDefine.h" #include #include #define TCP_PROTOCOL_HEADER (quint32)0xDEADCAFE class CTCPProtocol { public: typedef enum { TCP_MSG_HEARTBEAT_REQUEST, TCP_MSG_HEARTBEAT_RESPONSE, TCP_MSG_STATION_NAME_REQUEST, TCP_MSG_STATION_NAME_RESPONSE, TCP_MSG_ZT_STATUS_REQUEST, TCP_MSG_ZT_STATUS_RESPONSE, TCP_MSG_ZTLOG_DOWNLOAD_REQUEST, TCP_MSG_ZTLOG_DOWNLOAD_RESPONSE, TCP_MSG_TRAINLOGS_DOWNLOAD_REQUEST, TCP_MSG_TRAINSLOGS_DOWNLOAD_ACK, TCP_MSG_TRAINLOG_FILE_DATA, TCP_MSG_TRAINLOG_FILE_DATA_ACK, TCP_MSG_TRAINLOGS_DOWNLOAD_FINISHED, TCP_MSG_DELETE_ZTLOG_REQUEST, TCP_MSG_DELETE_ZTLOG_ACK, TCP_MSG_SET_ZT_FUNCTIONS, TCP_MSG_SET_ZT_FUNCTIONS_ACK, TCP_MSG_UNKNOWN }eTCPMessage; typedef enum { TCP_PROTOCOL_GET_HEADER_STATE, TCP_PROTOCOL_GET_MSG_STATE, TCP_PROTOCOL_GET_DATASIZE_STATE, TCP_PROTOCOL_GET_DATA_STATE }eTCPProtocolState; typedef enum { TCP_PROTOCOL_NACK, TCP_PROTOCOL_ACK, TCP_PROTOCOL_NACK_ABORT, TCP_PROTOCOL_INVALID_ACK }eTCPProtocolAcknowledge; CTCPProtocol(); virtual void TCPTxRequest(const QByteArray &request) = 0; virtual void TCPRxHeartbeat() = 0; virtual void TCPRxStationName(QString Name) = 0; virtual void TCPRxZTStatus(const QByteArray &data) = 0; virtual void TCPRxZTLog(QString ZTLog) = 0; virtual void TCPRxTrainLogsDownladAck(qint32 NbFiles) = 0; virtual void TCPRxTrainLogFileData(const QByteArray &TrainFileData) = 0; virtual void TCPRxTrainLogsDownloadFinished() = 0; virtual void TCPRxDeleteZTLogAck(bool ack) = 0; virtual void TCPRxSetZTFunctionsAck(bool ack) = 0; unsigned int AnalyzeNewData(QByteArray data); QByteArray GetHeartbeatReqPacket(); QByteArray GetStationNameReqPacket(); QByteArray GetZTStatusReqPacket(); QByteArray GetZTLogDownloadReqPacket(); QByteArray GetTrainLogsDownloadReqPacket(); QByteArray GetTrainLogsFileDataAckPacket(qint32 Acknowledge); QByteArray GetDeleteZTLogReqPacket(); QByteArray GetSetZTFunctionsPacket(QByteArray &Data); private: eTCPProtocolState mProtocolRxState; eTCPMessage mCurTransactionMsg; qint64 mCurTransactionDataSize; QByteArray mCurTransactionData; void ResetRxStateMachine(); int DecodeTCPMessage(); QByteArray BuildSimpleRequestPacket(qint32 RequestID); }; class CTCPZTStatus { public: quint32 mZT1Status; // quint32 mZT2Status; quint32 mNbPass; quint32 mNbTrigs; QDateTime mZTStartDateTime; QDateTime mActualDateTime; qint32 mPGTreshold; bool mModeMaintenanceON; bool mCalibModeON; bool mFNTKActive; bool mFNAnalysisActive; bool mPGTKActive; bool mPGAnalysisActive; bool mPP1TKActive; bool mPP1AnalysisActive; bool mPP2TKActive; bool mPP2AnalysisActive; bool mZT1TKActive; bool mZT1AnalysisActive; bool mZT2TKActive; bool mZT2AnalysisActive; bool mUSBKeyConnected; }; QDataStream &operator>>(QDataStream &in, CTCPZTStatus &dest); class CTCPZTFunctionsStatus { public: bool mFNTKActive; bool mFNAnalysisActive; bool mPGTKActive; bool mPGAnalysisActive; bool mPP1TKActive; bool mPP1AnalysisActive; bool mPP2TKActive; bool mPP2AnalysisActive; bool mZT1TKActive; bool mZT1AnalysisActive; bool mZT2TKActive; bool mZT2AnalysisActive; }; QDataStream &operator>>(QDataStream &in, CTCPZTFunctionsStatus &dest); QDataStream &operator<<(QDataStream &out, const CTCPZTFunctionsStatus &source); #endif // TCPPROTOCOL_H