123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186 |
- #pragma once
- // 移除Windows DLL导出相关的宏定义
- #define CCOSPACKET_API
- #define CCOSPACKET_C_API extern "C"
- #include <vector>
- #include <string>
- #include <cstring>
- #include <cstdint>
- #include <stdexcept> // 用于异常处理
- #include <cassert> // 用于断言
- #include <iostream> // 用于调试输出
- #include "SCF.h"
- #include "CcosPackComDefs.h"
- // 定义Linux下需要的类型
- typedef bool BOOL;
- // 原始包异常对象
- class CCOSPACKET_API RawPacketObjectExption : public std::runtime_error {
- public:
- RawPacketObjectExption(const char* pExp);
- RawPacketObjectExption(const RawPacketObjectExption& tValue);
- RawPacketObjectExption& operator = (const RawPacketObjectExption& tValue);
- };
- class CCOSPACKET_API RawPacketObject {
- protected:
- bool m_HasKey; // 是否有键
- bool m_InternalMalloc; // 是否内部分配内存
- std::vector<unsigned char>* m_pInternalBuff; // 内部缓冲区
- RawPacketObject* m_pParent; // 父对象
- std::vector<RawPacketObject*>* m_vec; // 子对象列表
- unsigned char* m_pValue; // 值指针
- // 主值
- unsigned char* m_pPacketBuff; // 包缓冲区
- size_t m_PacketSize; // 包大小
- size_t m_BuffSize; // 缓冲区大小
- void AddPacketSize(size_t addsize); // 增加包大小
- void NotifySubPacketIsObject(); // 通知子包是对象
- public:
- RawPacketObject(RawPacketObject* pParent);
- RawPacketObject(RawPacketObject* pParent, unsigned char* p, size_t packetsize, size_t buffsize);
- ~RawPacketObject();
- RawPacketObject(const RawPacketObject& tValue);
- BOOL HasKey();
- CCOSKEYTYPE GetKey();
- size_t sizeOfRaw();
- size_t sizeOfObject();
- size_t sizeOfBuff();
- void Clear();
- void delet();
- bool ReloadObject();
- void Reload(RawPacketObject* pParent, unsigned char* p, size_t packetsize, size_t buffsize);
- // 添加操作
- void SetKey(CCOSKEYTYPE key);
- template <class T> bool add_Template(CCOSKEYTYPE Key, T tValue);
- bool add(CCOSKEYTYPE Key, bool tValue);
- bool add(CCOSKEYTYPE Key, char tValue);
- bool add(CCOSKEYTYPE Key, unsigned char tValue);
- bool add(CCOSKEYTYPE Key, short tValue);
- bool add(CCOSKEYTYPE Key, unsigned short tValue);
- bool add(CCOSKEYTYPE Key, int tValue);
- bool add(CCOSKEYTYPE Key, unsigned int tValue);
- bool add(CCOSKEYTYPE Key, long tValue);
- bool add(CCOSKEYTYPE Key, unsigned long tValue);
- bool add(CCOSKEYTYPE Key, long long tValue);
- bool add(CCOSKEYTYPE Key, unsigned long long tValue);
- bool add(CCOSKEYTYPE Key, float tValue);
- bool add(CCOSKEYTYPE Key, double tValue);
- bool add(CCOSKEYTYPE Key, const char* pValue, size_t size);
- void ReloadInternalMalloc(size_t sizeofadd);
- bool add(RawPacketObject& dataobj);
- bool SetKeyLengthValue(size_t addSize);
- // 赋值操作
- RawPacketObject& operator = (const RawPacketObject& tValue);
- template <class T1> bool SignedAssignmentProcess(T1 temp);
- template <class T2> bool UnSignedAssignmentProcess(T2 temp);
- RawPacketObject& operator = (const bool tValue);
- RawPacketObject& operator = (const char tValue);
- RawPacketObject& operator = (const unsigned char tValue);
- RawPacketObject& operator = (const short tValue);
- RawPacketObject& operator = (const unsigned short tValue);
- RawPacketObject& operator = (const int tValue);
- RawPacketObject& operator = (const unsigned int tValue);
- RawPacketObject& operator = (const long tValue);
- RawPacketObject& operator = (const unsigned long tValue);
- RawPacketObject& operator = (const long long tValue);
- RawPacketObject& operator = (const unsigned long long tValue);
- RawPacketObject& operator = (const float tValue);
- RawPacketObject& operator = (const double tValue);
- bool update(const char* pValue, size_t size);
- // 读取操作
- RawPacketObject& operator [](size_t idx);
- RawPacketObject& operator [](int idx);
- RawPacketObject& operator [](CCOSKEYTYPE Key);
- template <class T3> bool ReadSignedValueByType(T3& value);
- template <class T4> bool ReadUnSignedValueByType(T4& value);
- operator bool();
- operator char();
- operator unsigned char();
- operator short();
- operator unsigned short();
- operator int();
- operator unsigned int();
- operator long();
- operator unsigned long();
- operator long long();
- operator unsigned long long();
- operator float();
- operator double();
- operator const char* ();
- bool IsObject();
- // 比较操作
- bool operator== (const RawPacketObject& ar) const;
- };
- // Ccos短指令协议包类
- class CcosPacket : public SCFPacket {
- protected:
- RawPacketObject* m_pDataObj; // 数据对象
- bool m_bReady; // 包是否准备好
- unsigned int m_LenzoneSize; // 长度区域大小(字节)
- bool m_CrcEffective; // CRC是否有效
- unsigned int m_Direction; // 方向
- unsigned int m_FreezeLenzone; // 冻结长度区域(01:冻结)
- bool UpdateLastEnv(); // 更新最后环境
- public:
- CcosPacket();
- CcosPacket(char* pData, size_t Length);
- virtual ~CcosPacket();
- // 访问方法
- bool GetPhyDevIdx(PHYIDXTYPE& PhyDevIdx);
- bool SetPhyDevIdx(PHYIDXTYPE PhyDevIdx);
- bool GetLogicDevIdx(LOGICIDXTYPE& LogicDevIdx);
- bool SetLogicDevIdx(LOGICIDXTYPE LogicDevIdx);
- bool GetDataCrcEffectiveFlag(bool& Effective);
- bool SetDataCrcEffectiveFlag(bool Effective);
- bool GetTargetDirection(unsigned int& Direction);
- bool SetTargetDirection(unsigned int Direction);
- bool GetFreezeLenZoneFlag(unsigned int& FreezeFlag);
- bool SetFreezeLenZoneFlag(unsigned int FreezeFlag);
- bool GetLenZoneSize(unsigned int& LenzoneSize);
- bool SetLenZoneSize(unsigned int LenzoneSize);
- bool GetCommand(CCOSCMDTYPE& Cmd);
- bool SetCommand(CCOSCMDTYPE Cmd);
- bool GetRetcode(char& Ret);
- bool SetRetcode(char Ret);
- bool GetDataLen(unsigned long long& Len);
- bool SetDataLen(unsigned long long Len);
- bool GetHeadsCrc(unsigned short& headCrc16);
- bool SetHeadsCrc(unsigned short headCrc16);
- char* GetData();
- RawPacketObject* GetDataObject();
- bool SetData(const char* pData, size_t dataLen);
- bool AddData(const char* pData, size_t dataLen);
- bool GetDataCrc(unsigned short& dataCrc16);
- bool SetDataCrc(unsigned short dataCrc16);
- // 准备方法
- bool InitPacket();
- bool ReadyPacket();
- size_t GetHeadSize();
- unsigned long long GetCcosPacketSize();
- bool GetParam(DWORD Idx, char*& pAddress, size_t& ParamSize);
- };
- // C接口函数声明
- extern "C" PVOID MallocCcosPacket();
- extern "C" void ReleaseCcosPacket(PVOID pObj);
- extern "C" PACKET_RET CcosPacketParser(const char* pRecData, DWORD nLength, DWORD& PacketLength);
|