#pragma once #include "Log.h" #include "CCLinkIEControl.h" namespace SERVO { #define BLOCK_BUFFER_MAX 1024 #define ALIVE_TIMEOUT 15 typedef std::function ONALIVE; typedef struct _EquipmentListener { ONALIVE onAlive; } EquipmentListener; // Memory Block ½á¹¹Ì嶨Òå typedef struct _MemoryBlock { unsigned int type; unsigned int start; unsigned int end; unsigned int size; char buffer[BLOCK_BUFFER_MAX]; } MemoryBlock; // ALIVE typedef struct _ALIVE { BOOL flag; int count; BOOL alive; } ALIVE; class CEquipment { public: CEquipment(); virtual ~CEquipment(); public: virtual const char* getClassName() = 0; virtual void setListener(EquipmentListener listener); void setID(int nID); int getID(); void setName(const char* pszName); std::string& getName(); void setDescription(const char* pszDescription); std::string& getDescription(); void setStation(int network, int station); const StationIdentifier& getStation(); void setReadBitBlock(unsigned int start, unsigned int end); MemoryBlock& getReadBitBlock(); void setWriteBitBlock(unsigned int start, unsigned int end); MemoryBlock& getWriteBitBlock(); virtual void init(); virtual void term(); virtual void onTimer(UINT nTimerid); virtual void serialize(CArchive& ar); virtual void onReceiveLBData(const char* pszData, size_t size); BOOL isAlive(); private: BOOL isBitOn(const char* pszData, size_t size, int index); protected: inline void Lock() { EnterCriticalSection(&m_criticalSection); } inline void Unlock() { LeaveCriticalSection(&m_criticalSection); } protected: EquipmentListener m_listener; int m_nID; std::string m_strName; std::string m_strDescription; CRITICAL_SECTION m_criticalSection; StationIdentifier m_station; MemoryBlock m_blockReadBit; MemoryBlock m_blockWriteBit; ALIVE m_alive; }; }