| | |
| | | #include "Log.h" |
| | | #include "Model.h" |
| | | #include "Common.h" |
| | | #include <time.h> |
| | | |
| | | |
| | | char g_szAckOkData[] = { 0, 0, 0, 0 }; |
| | | char g_szAckNgData[] = { 1, 0, 0, 0 }; |
| | | |
| | | unsigned __stdcall CimWorkThreadFunction(LPVOID lpParam) |
| | | { |
| | |
| | | m_pModel = nullptr; |
| | | m_nActionTimeout = 6; |
| | | m_nSystemByte = 0; |
| | | m_strEquipmentModelType = "2860"; |
| | | m_strSoftRev = _T("1.0.1"); |
| | | m_hCimWorkThreadHandle = NULL; |
| | | m_nCimWorkThrdaddr = 0; |
| | | m_bCimWorking = FALSE; |
| | | m_hCimWorkEvent = ::CreateEvent(NULL, TRUE, FALSE, NULL); |
| | | m_nSessionId = 1; |
| | | InitializeCriticalSection(&m_criticalSection); |
| | | } |
| | | |
| | |
| | | auto onStatusChanged = [&](void* pFrom, STATE state) -> void { |
| | | m_pModel->notifyInt(RX_CODE_PASSIVE_STATUS_CHANGED, (int)state); |
| | | |
| | | // 连上之后发S1F1, |
| | | // 连上之后发S1F1 |
| | | // 修改为不主动发送,而是响应 |
| | | /* |
| | | if (STATE::SELECTED == state) { |
| | | m_bAreYouThereRequest = FALSE; |
| | | if (!m_bAreYouThereRequest) { |
| | |
| | | secsAreYouThereRequest(); |
| | | } |
| | | } |
| | | */ |
| | | }; |
| | | auto onRecvSysMessage = [&](void* pFrom, IMessage* pMessage) -> void { |
| | | LOGI("<HSMS>onRecvSysMessage:sessionId:%d, sType:%d systemBytes:%d", |
| | | pMessage->getHeader()->sessionId, pMessage->getHeader()->sType, pMessage->getHeader()->systemBytes); |
| | | onRecvMsg(pMessage); |
| | | if (MSG_LINKTEST_REQ == pMessage->getHeader()->sType) { |
| | | /* |
| | | Sleep(10); |
| | | if (!m_bAreYouThereRequest) { |
| | | m_bAreYouThereRequest = TRUE; |
| | | secsAreYouThereRequest(); |
| | | requestYouThere(); |
| | | } |
| | | */ |
| | | } |
| | | }; |
| | | |
| | |
| | | LOGI("<HSMS>收到消息 S%dF%d", nStream, pHeader->function); |
| | | if (nStream == 1 && pHeader->function == 1) { |
| | | // S1F1 |
| | | secsAreYouThereReply(pHeader->sessionId, pHeader->systemBytes); |
| | | replyAreYouThere(pHeader->systemBytes); |
| | | } |
| | | else if (nStream == 1 && pHeader->function == 13) { |
| | | replyEstablishCommunications(pHeader->systemBytes); |
| | | } |
| | | else if (nStream == 2 && pHeader->function == 31) { |
| | | replyDatetime(pMessage); |
| | | } |
| | | }; |
| | | |
| | |
| | | } |
| | | |
| | | // S1F1 |
| | | int CHsmsPassive::secsAreYouThereRequest() |
| | | int CHsmsPassive::requestAreYouThere() |
| | | { |
| | | if (m_pPassive == NULL || STATE::SELECTED != m_pPassive->getState()) { |
| | | return ER_NOTSELECT; |
| | |
| | | CHsmsAction* pAction = new CHsmsAction(ACTION_HELLO, FALSE, m_nActionTimeout); |
| | | m_listAction.push_back(pAction); |
| | | IMessage* pMessage = NULL; |
| | | HSMS_Create1Message(pMessage, 0xffff, 1 | REPLY, 1, ++m_nSystemByte); |
| | | HSMS_Create1Message(pMessage, m_nSessionId, 1 | REPLY, 1, ++m_nSystemByte); |
| | | ASSERT(pMessage); |
| | | pAction->setSendMessage(pMessage); |
| | | |
| | |
| | | } |
| | | |
| | | // S1F2 |
| | | int CHsmsPassive::secsAreYouThereReply(unsigned int sessionId, unsigned int systemBytes) |
| | | int CHsmsPassive::replyAreYouThere(unsigned int systemBytes) |
| | | { |
| | | if (m_pPassive == NULL || STATE::SELECTED != m_pPassive->getState()) { |
| | | return ER_NOTSELECT; |
| | | } |
| | | |
| | | IMessage* pMessage = NULL; |
| | | HSMS_Create1Message(pMessage, sessionId, 1, 2, systemBytes); |
| | | HSMS_Create1Message(pMessage, m_nSessionId, 1, 2, systemBytes); |
| | | ASSERT(pMessage); |
| | | |
| | | ISECS2Item* pItem = pMessage->getBody(); |
| | |
| | | |
| | | return 0; |
| | | } |
| | | |
| | | // S1F14 |
| | | int CHsmsPassive::replyEstablishCommunications(unsigned int systemBytes) |
| | | { |
| | | if (m_pPassive == NULL || STATE::SELECTED != m_pPassive->getState()) { |
| | | return ER_NOTSELECT; |
| | | } |
| | | |
| | | IMessage* pMessage = NULL; |
| | | HSMS_Create1Message(pMessage, m_nSessionId, 1, 14, systemBytes); |
| | | ASSERT(pMessage); |
| | | |
| | | ISECS2Item* pItem = pMessage->getBody(); |
| | | pItem->addBinaryItem(g_szAckOkData, 1, "COMMACK"); |
| | | ISECS2Item* pList = pItem->addItem(); |
| | | pList->addItem(m_strEquipmentModelType.c_str(), "MDLN"); |
| | | pList->addItem(m_strSoftRev.c_str(), "SOFTREV"); |
| | | m_pPassive->sendMessage(pMessage); |
| | | LOGI("<HSMS>[SECS Msg SEND]S1F14 (SysByte=%u)", pMessage->getHeader()->systemBytes); |
| | | HSMS_Destroy1Message(pMessage); |
| | | |
| | | return 0; |
| | | } |
| | | |
| | | // 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()) { |
| | | return ER_NOTSELECT; |
| | | } |
| | | ISECS2Item* pBody = pRecv->getBody(); |
| | | if (pBody == nullptr || pBody->getType() != SITYPE::A) ER_PARAM_ERROR; |
| | | char* pszMessage; |
| | | if (pBody->getString(pszMessage)) { |
| | | // 更新时间 |
| | | SYSTEMTIME time; |
| | | char szBuffer[20]; |
| | | memcpy(szBuffer, pszMessage, 16); |
| | | szBuffer[14] = '\0'; |
| | | time.wSecond = atoi(&szBuffer[12]); |
| | | szBuffer[12] = '\0'; |
| | | time.wMinute = atoi(&szBuffer[10]); |
| | | szBuffer[10] = '\0'; |
| | | time.wHour = atoi(&szBuffer[8]); |
| | | szBuffer[8] = '\0'; |
| | | time.wDay = atoi(&szBuffer[6]); |
| | | szBuffer[6] = '\0'; |
| | | time.wMonth = atoi(&szBuffer[4]); |
| | | szBuffer[4] = '\0'; |
| | | time.wYear = atoi(&szBuffer[0]); |
| | | time.wMilliseconds = 0; |
| | | SetLocalTime(&time); |
| | | } |
| | | |
| | | |
| | | IMessage* pMessage = NULL; |
| | | HSMS_Create1Message(pMessage, m_nSessionId, 2, 32, pRecv->getHeader()->systemBytes); |
| | | ASSERT(pMessage); |
| | | |
| | | ISECS2Item* pItem = pMessage->getBody(); |
| | | pItem->setBinary(g_szAckOkData, 1, "TIACK"); |
| | | m_pPassive->sendMessage(pMessage); |
| | | LOGI("<HSMS>[SECS Msg SEND]S2F32 (SysByte=%u)", pRecv->getHeader()->systemBytes); |
| | | HSMS_Destroy1Message(pMessage); |
| | | |
| | | return 0; |
| | | } |