#ifndef _MVCP_H_ #define _MVCP_H_ #include #include namespace mvsol { namespace protocol { const unsigned char STX = 0x02; const unsigned char ETX = 0x03; const unsigned char UNIQUECODE = 0x7D; const unsigned char MAGICCODE = 0x20; const unsigned char READ = 0x52; const unsigned char WRITE = 0x57; const unsigned char READACK = 0x72; const unsigned char WRITEACK = 0x77; enum ProtocolVersion { kProtocolVersion1 = 1, }; class Security { public: static int Encrypt(const unsigned char* indata, int indatasize, unsigned char* outdata, int* outdatasize); static int Decrypt(const unsigned char* indata, int indatasize, unsigned char* outdata, int* outdatasize); }; class BaseProtocol { public: BaseProtocol(); ~BaseProtocol(); public: static unsigned char CalcCheckSum(const unsigned char* data, int datasize); public: virtual int GetBytes(unsigned char* outdata, int* outdatasize) = 0; }; class MVCP : public BaseProtocol { public: MVCP(); MVCP(unsigned char command, unsigned short address, unsigned int data, unsigned char status = 0x00); enum { LENGTH = 11, }; public: virtual int GetBytes(unsigned char* outdata, int* outdatasize); virtual void Parse(unsigned char* indata, int indatasize); virtual std::string ToString(); public: static int GetBytes(unsigned char command, unsigned short address, unsigned int data, unsigned char status, unsigned char* outdata, int* outdatasize); //¼Ó¼º public: unsigned char GetCommand() const { return command_; } unsigned short GetAddress() const { return address_; } unsigned int GetData() const { return data_; } unsigned char GetStatus() const { return status_; } unsigned char GetCheckSum() const { return checksum_; } protected: unsigned char command_; unsigned short address_; unsigned int data_; unsigned char status_; unsigned char checksum_; }; // Broadcast sending data class MVBRCP : public BaseProtocol { public: MVBRCP(); ~MVBRCP(); enum { LENGTH = 19, }; public: virtual int GetBytes(unsigned char* outdata, int* outdatasize); // ¼Ó¼º public: static int GetBytes(unsigned char command, unsigned short address, unsigned int serialnumber, unsigned long long data, unsigned char status, unsigned char* outdata, int* outdatasize); }; class MVBACP : public BaseProtocol { public: MVBACP(); ~MVBACP(); enum { LENGTH = 71, }; public: virtual int GetBytes(unsigned char* outdata, int* outdatasize); virtual int Parse(const unsigned char* indata, int indatasize); //virtual int Send() public: static int GetBytes(unsigned char command, unsigned short address, unsigned int data, unsigned char status, unsigned char* outdata, int* outdatasize); }; } // namespace protocol } // namespace mvsol #endif //__MVCP_H__