| | |
| | | |
| | | CEquipment::CEquipment() |
| | | { |
| | | m_listener = { nullptr, nullptr }; |
| | | m_alive = {FALSE, 0, FALSE}; |
| | | m_listener.onAlive = {nullptr}; |
| | | m_bCimState = FALSE; |
| | | InitializeCriticalSection(&m_criticalSection); |
| | | } |
| | | |
| | |
| | | void CEquipment::setListener(EquipmentListener listener) |
| | | { |
| | | m_listener.onAlive = listener.onAlive; |
| | | m_listener.onCimStateChanged = listener.onCimStateChanged; |
| | | } |
| | | |
| | | void CEquipment::init() |
| | |
| | | } |
| | | |
| | | |
| | | // 解释数据 |
| | | // 以下解释和处理数据 |
| | | |
| | | // alive |
| | | /* |
| | | BOOL bAliveFlag = isBitOn(pszData, size, 0x340); |
| | | if (m_alive.flag != bAliveFlag) { |
| | | m_alive.flag = bAliveFlag; |
| | |
| | | } |
| | | } |
| | | } |
| | | */ |
| | | // CIM State |
| | | BOOL bCimState = isBitOn(pszData, size, 0x341); |
| | | if ((bCimState && !m_bCimState) || (!bCimState && m_bCimState)) { |
| | | m_bCimState = bCimState; |
| | | if (m_listener.onCimStateChanged != nullptr) { |
| | | m_listener.onCimStateChanged(this, m_bCimState); |
| | | } |
| | | } |
| | | } |
| | | |
| | | BOOL CEquipment::isBitOn(const char* pszData, size_t size, int index) |
| | |
| | | typedef struct _EquipmentListener |
| | | { |
| | | ONALIVE onAlive; |
| | | ONALIVE onCimStateChanged; |
| | | } EquipmentListener; |
| | | |
| | | // Memory Block 结构体定义 |
| | |
| | | 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); |
| | | |
| | |
| | | StationIdentifier m_station; |
| | | MemoryBlock m_blockReadBit; |
| | | MemoryBlock m_blockWriteBit; |
| | | |
| | | private: |
| | | ALIVE m_alive; |
| | | BOOL m_bCimState; // ON/OFF |
| | | }; |
| | | } |
| | | |
| | |
| | | |
| | | CMaster::CMaster() |
| | | { |
| | | m_listener = {nullptr}; |
| | | m_listener = {nullptr, nullptr}; |
| | | } |
| | | |
| | | CMaster::~CMaster() |
| | |
| | | void CMaster::setListener(MasterListener listener) |
| | | { |
| | | m_listener.onEqAlive = listener.onEqAlive; |
| | | m_listener.onEqCimStateChanged = listener.onEqCimStateChanged; |
| | | } |
| | | |
| | | int CMaster::init() |
| | |
| | | m_listener.onEqAlive(this, p, bAlive); |
| | | } |
| | | }; |
| | | listener.onCimStateChanged = [&](void* pEquipment, BOOL bOn) -> void { |
| | | CEquipment* p = (CEquipment*)pEquipment; |
| | | if (m_listener.onEqCimStateChanged != nullptr) { |
| | | m_listener.onEqCimStateChanged(this, p, bOn); |
| | | } |
| | | }; |
| | | pEquipment->setListener(listener); |
| | | m_listEquipment.push_back(pEquipment); |
| | | |
| | | return 0; |
| | | } |
| | | |
| | | CEquipment* CMaster::getEquipment(int id) |
| | | { |
| | | return nullptr; |
| | | } |
| | | |
| | | void CMaster::onTimer(UINT nTimerid) |
| | | { |
| | | for (auto item : m_listEquipment) { |
| | |
| | | typedef struct _MasterListener |
| | | { |
| | | ONEQALIVE onEqAlive; |
| | | ONEQALIVE onEqCimStateChanged; |
| | | } MasterListener; |
| | | |
| | | class CMaster |
| | |
| | | int init(); |
| | | int term(); |
| | | void onTimer(UINT nTimerid); |
| | | |
| | | CEquipment* getEquipment(int id); |
| | | |
| | | private: |
| | | int addEquipment(CEquipment* pEquipment); |
| | | |
| | | |
| | | private: |
| | | MasterListener m_listener; |
| | |
| | | |
| | | SERVO::MasterListener masterListener; |
| | | masterListener.onEqAlive = [&](void* pMaster, SERVO::CEquipment* pEquipment, BOOL bAlive) -> void { |
| | | LOGI("<CModel>Equipment onAlive:%d.\n", pEquipment->getName().c_str(), |
| | | LOGI("<CModel>Equipment onAlive:%s(%s).\n", pEquipment->getName().c_str(), |
| | | bAlive ? _T("ON") : _T("OFF")); |
| | | |
| | | }; |
| | | masterListener.onEqCimStateChanged = [&](void* pMaster, SERVO::CEquipment* pEquipment, BOOL bOn) -> void { |
| | | LOGI("<CModel>Equipment Cim State:%s(%s).\n", pEquipment->getName().c_str(), |
| | | bOn ? _T("ON") : _T("OFF")); |
| | | |
| | | }; |
| | | m_master.setListener(masterListener); |
| | | |