OutilZT/sources/TCPProtocol.h
2017-07-20 11:11:06 -04:00

147 lines
3.7 KiB
C++

#ifndef TCPPROTOCOL_H
#define TCPPROTOCOL_H
#include "GlobalDefine.h"
#include <QByteArray>
#include <QDateTime>
#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