LAPTOP-SNT8I5JK\Boounion
2025-01-16 702b614519289b33aee26c456dc22ffde0c09dda
SourceCode/Bond/Servo/HsmsPassive.cpp
@@ -191,6 +191,9 @@
      else if (nStream == 5 && pHeader->function == 3) {
         replyEanbleDisableAlarmReport(pMessage);
      }
      else if (nStream == 10 && pHeader->function == 3) {
         replyTerminalDisplay(pMessage);
      }
   };
   PassiveListener listener;
@@ -292,6 +295,19 @@
   return 0;
}
// 通用的reply ack函数
void CHsmsPassive::replyAck(int s, int f, unsigned int systemBytes, BYTE ack, const char* pszAckName)
{
   IMessage* pMessage = NULL;
   HSMS_Create1Message(pMessage, m_nSessionId, s, f, systemBytes);
   ASSERT(pMessage);
   ISECS2Item* pItem = pMessage->getBody();
   pItem->setBinary(ack, pszAckName);
   m_pPassive->sendMessage(pMessage);
   LOGI("<HSMS>[SECS Msg SEND]S%dF%d (SysByte=%u)", s, f, systemBytes);
   HSMS_Destroy1Message(pMessage);
}
// S1F1
int CHsmsPassive::requestAreYouThere()
{
@@ -387,17 +403,7 @@
      SetLocalTime(&time);
   }
   IMessage* pMessage = NULL;
   HSMS_Create1Message(pMessage, m_nSessionId, 2, 32, pRecv->getHeader()->systemBytes);
   ASSERT(pMessage);
   ISECS2Item* pItem = pMessage->getBody();
   pItem->setBinary(BYTE(0), "TIACK");
   m_pPassive->sendMessage(pMessage);
   LOGI("<HSMS>[SECS Msg SEND]S2F32 (SysByte=%u)", pRecv->getHeader()->systemBytes);
   HSMS_Destroy1Message(pMessage);
   replyAck(2, 32, pRecv->getHeader()->systemBytes, BYTE(0), "TIACK");
   return 0;
}
@@ -437,18 +443,7 @@
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);
   replyAck(2, 38, pRecv->getHeader()->systemBytes, BYTE(0), "ERACK");
   return 0;
}
@@ -477,18 +472,37 @@
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);
   replyAck(5, 4, pRecv->getHeader()->systemBytes, BYTE(0), "ACKC5");
   return 0;
}
// S10F3
int CHsmsPassive::replyTerminalDisplay(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 tid;
   char* pszText = nullptr;;
   {
      ISECS2Item* pItem = pRecv->getBody();
      if (pItem->getSubItemSize() < 2) goto MYREPLY;
      if (!pItem->getSubItemBinary(0, tid)) goto MYREPLY;
      if (!pItem->getSubItemString(1, pszText)) goto MYREPLY;
      bCheckData = TRUE;
      LOGI("TerminalDisplay tid:%d, pszText:%s", tid, pszText);
      m_pModel->notifyText(RX_HSMS_TERMINAL_TEXT, pszText);
   }
MYREPLY:
   replyAck(10, 4, pRecv->getHeader()->systemBytes, BYTE(0), "ACKC10");
   return 0;
}