| | |
| | | #include "Model.h" |
| | | #include "Common.h" |
| | | #include <time.h> |
| | | #include <iostream> |
| | | #include <time.h> |
| | | #include <stdlib.h> |
| | | #include <string.h> |
| | | |
| | | |
| | | char g_szAckOkData[] = { 0, 0, 0, 0 }; |
| | | char g_szAckNgData[] = { 1, 0, 0, 0 }; |
| | | |
| | | unsigned __stdcall CimWorkThreadFunction(LPVOID lpParam) |
| | | { |
| | |
| | | m_nActionTimeout = max(3, nSecond); |
| | | } |
| | | |
| | | void CHsmsPassive::setEquipmentModelType(const char* pszMode) |
| | | { |
| | | m_strEquipmentModelType = pszMode; |
| | | if (m_strEquipmentModelType.length() > 20) { |
| | | m_strEquipmentModelType = m_strEquipmentModelType.substr(0, 20); |
| | | } |
| | | } |
| | | |
| | | void CHsmsPassive::setSoftRev(const char* pszRev) |
| | | { |
| | | m_strSoftRev = pszRev; |
| | | if (m_strSoftRev.length() > 20) { |
| | | m_strSoftRev = m_strSoftRev.substr(0, 20); |
| | | } |
| | | |
| | | } |
| | | |
| | | void CHsmsPassive::OnTimer(UINT nTimerid) |
| | | { |
| | | // 所有已发送的Action自加1 |
| | |
| | | |
| | | int CHsmsPassive::onRecvMsg(IMessage* pMessage) |
| | | { |
| | | LOGI("onRecvMsg:%s", pMessage->toString()); |
| | | Lock(); |
| | | CHsmsAction* pAction = nullptr; |
| | | for (auto iter = m_listActionSent.begin(); iter != m_listActionSent.end(); iter++) { |
| | |
| | | } |
| | | else if (nStream == 2 && pHeader->function == 31) { |
| | | replyDatetime(pMessage); |
| | | } |
| | | else if (nStream == 2 && pHeader->function == 37) { |
| | | replyEanbleDisableEventReport(pMessage); |
| | | } |
| | | else if (nStream == 5 && pHeader->function == 3) { |
| | | replyEanbleDisableAlarmReport(pMessage); |
| | | } |
| | | }; |
| | | |
| | |
| | | ASSERT(pMessage); |
| | | |
| | | ISECS2Item* pItem = pMessage->getBody(); |
| | | pItem->addBinaryItem(g_szAckOkData, 1, "COMMACK"); |
| | | pItem->addBinaryItem(BYTE(0), "COMMACK"); |
| | | ISECS2Item* pList = pItem->addItem(); |
| | | pList->addItem(m_strEquipmentModelType.c_str(), "MDLN"); |
| | | pList->addItem(m_strSoftRev.c_str(), "SOFTREV"); |
| | |
| | | } |
| | | |
| | | // S2F31 |
| | | #include <iostream> |
| | | #include <time.h> |
| | | #include <stdlib.h> |
| | | #include <string.h> |
| | | int CHsmsPassive::replyDatetime(IMessage* pRecv) |
| | | { |
| | | if (m_pPassive == NULL || STATE::SELECTED != m_pPassive->getState()) { |
| | |
| | | ASSERT(pMessage); |
| | | |
| | | ISECS2Item* pItem = pMessage->getBody(); |
| | | pItem->setBinary(g_szAckOkData, 1, "TIACK"); |
| | | pItem->setBinary(BYTE(0), "TIACK"); |
| | | m_pPassive->sendMessage(pMessage); |
| | | LOGI("<HSMS>[SECS Msg SEND]S2F32 (SysByte=%u)", pRecv->getHeader()->systemBytes); |
| | | HSMS_Destroy1Message(pMessage); |
| | | |
| | | return 0; |
| | | } |
| | | |
| | | // S2F37 |
| | | int CHsmsPassive::replyEanbleDisableEventReport(IMessage* pRecv) |
| | | { |
| | | if (m_pPassive == NULL || STATE::SELECTED != m_pPassive->getState()) { |
| | | return ER_NOTSELECT; |
| | | } |
| | | ISECS2Item* pBody = pRecv->getBody(); |
| | | if (pBody == nullptr || pBody->getType() != SITYPE::A) ER_PARAM_ERROR; |
| | | |
| | | |
| | | |
| | | BOOL bCheckData = FALSE; |
| | | bool bEnable; |
| | | std::vector<unsigned int> ids; |
| | | { |
| | | ISECS2Item* pItemIds; |
| | | ISECS2Item* pItem = pRecv->getBody(); |
| | | if (pItem->getSubItemSize() < 2) goto MYREPLY; |
| | | if (!pItem->getSubItemBool(0, bEnable)) goto MYREPLY; |
| | | pItemIds = pItem->getSubItem(1); |
| | | if (pItemIds == nullptr || pItemIds->getType() != SITYPE::L) goto MYREPLY; |
| | | for (int i = 0; i < pItemIds->getSubItemSize(); i++) { |
| | | unsigned int id; |
| | | if (pItemIds->getSubItemU4(i, id)) { |
| | | ids.push_back(id); |
| | | } |
| | | } |
| | | bCheckData = TRUE; |
| | | LOGI("EanbleDisableAlarm bEnable:%s", bEnable ? _T("YES") : _T("NO")); |
| | | for (auto item : ids) { |
| | | LOGI("ID:%u", item); |
| | | } |
| | | } |
| | | |
| | | |
| | | MYREPLY: |
| | | int s = 2; |
| | | int f = 38; |
| | | IMessage* pMessage = NULL; |
| | | HSMS_Create1Message(pMessage, m_nSessionId, s, f, pRecv->getHeader()->systemBytes); |
| | | ASSERT(pMessage); |
| | | ISECS2Item* pItem = pMessage->getBody(); |
| | | pItem->setBinary(BYTE(0), "ERACK"); |
| | | m_pPassive->sendMessage(pMessage); |
| | | LOGI("<HSMS>[SECS Msg SEND]S%dF%d (SysByte=%u)", s, f, pRecv->getHeader()->systemBytes); |
| | | HSMS_Destroy1Message(pMessage); |
| | | |
| | | |
| | | return 0; |
| | | } |
| | | |
| | | // S5F3 |
| | | int CHsmsPassive::replyEanbleDisableAlarmReport(IMessage* pRecv) |
| | | { |
| | | if (m_pPassive == NULL || STATE::SELECTED != m_pPassive->getState()) { |
| | | return ER_NOTSELECT; |
| | | } |
| | | ISECS2Item* pBody = pRecv->getBody(); |
| | | if (pBody == nullptr || pBody->getType() != SITYPE::A) ER_PARAM_ERROR; |
| | | |
| | | |
| | | |
| | | BOOL bCheckData = FALSE; |
| | | BYTE ALED; |
| | | unsigned int ALID; |
| | | { |
| | | ISECS2Item* pItem = pRecv->getBody(); |
| | | if (pItem->getSubItemSize() < 2) goto MYREPLY; |
| | | if (!pItem->getSubItemBinary(0, ALED)) goto MYREPLY; |
| | | if (!pItem->getSubItemU4(1, ALID)) goto MYREPLY; |
| | | bCheckData = TRUE; |
| | | LOGI("EanbleDisableAlarmReport ALED:%d, ALID:%d", ALED, ALID); |
| | | } |
| | | |
| | | |
| | | MYREPLY: |
| | | int s = 5; |
| | | int f = 4; |
| | | IMessage* pMessage = NULL; |
| | | HSMS_Create1Message(pMessage, m_nSessionId, s, f, pRecv->getHeader()->systemBytes); |
| | | ASSERT(pMessage); |
| | | ISECS2Item* pItem = pMessage->getBody(); |
| | | pItem->setBinary(BYTE(0), "ACKC5"); |
| | | m_pPassive->sendMessage(pMessage); |
| | | LOGI("<HSMS>[SECS Msg SEND]S%dF%d (SysByte=%u)", s, f, pRecv->getHeader()->systemBytes); |
| | | HSMS_Destroy1Message(pMessage); |
| | | |
| | | |
| | | return 0; |
| | | } |
| | | |
| | | // S5F1 |
| | | int CHsmsPassive::requestAlarmReport(int ALCD, int ALID, const char* ALTX) |
| | | { |
| | | if (m_pPassive == NULL || STATE::SELECTED != m_pPassive->getState()) { |
| | | return ER_NOTSELECT; |
| | | } |
| | | |
| | | Lock(); |
| | | CHsmsAction* pAction = new CHsmsAction(ACTION_ALARM_REPORT, TRUE, m_nActionTimeout); |
| | | m_listAction.push_back(pAction); |
| | | IMessage* pMessage = NULL; |
| | | HSMS_Create1Message(pMessage, m_nSessionId, 5 | REPLY, 1, ++m_nSystemByte); |
| | | ASSERT(pMessage); |
| | | ISECS2Item* pItem = pMessage->getBody(); |
| | | pItem->addBinaryItem(BYTE(ALCD & 0xff), "ALCD"); |
| | | pItem->addU4Item(ALID, "ALID"); |
| | | pItem->addItem(ALTX, "ALTX"); |
| | | pAction->setSendMessage(pMessage); |
| | | |
| | | SetEvent(m_hCimWorkEvent); |
| | | Unlock(); |
| | | |
| | | return ER_NOERROR; |
| | | } |
| | | |
| | | |