LAPTOP-SNT8I5JK\Boounion
2025-07-15 e48a55eb3cc807fa5a45cf398b6f523e96aa5312
SourceCode/Bond/EAPSimulator/CHsmsActive.cpp
@@ -60,9 +60,16 @@
   auto onRecvDataMessage = [&](void* pFrom, IMessage* pMessage) -> void {
      HEADER* pHeader = pMessage->getHeader();
      int nStream = (pHeader->stream & 0x7F);
      TRACE("收到消息 S%dF%d================\n", pHeader->stream & 0x7F, pHeader->function);
      TRACE("Body:%s\n", pMessage->toString());
      LOGI("onRecvDataMessage(%s).", pMessage->toString());
      if (nStream == 5 && pHeader->function == 1) {
         // S1F1
         replyAck(5, 2, pMessage->getHeader()->systemBytes, 0, _T("ACK0"));
      }
   };
   ActiveListener listener;
@@ -162,3 +169,53 @@
   return 0;
}
int CHsmsActive::hsmsEDEventReport(bool bEnable, std::vector<int>& ids)
{
   IMessage* pMessage = nullptr;
   int nRet = HSMS_Create1Message(pMessage, m_nSessionId, 2 | REPLY, 37, ++m_nSystemByte);
   ISECS2Item* pItem = pMessage->getBody();
   pItem->addBoolItem(bEnable, "CEED");
   ISECS2Item* pItem2 = pItem->addItem();
   for (auto item : ids) {
      pItem2->addU4Item(item, "CEID");
   }
   m_pActive->sendMessage(pMessage);
   HSMS_Destroy1Message(pMessage);
   return 0;
}
int CHsmsActive::hsmsEDAlarmReport(bool bEnable, unsigned int id)
{
   char szEnable[2] = {128, 0};
   IMessage* pMessage = nullptr;
   int nRet = HSMS_Create1Message(pMessage, m_nSessionId, 5 | REPLY, 3, ++m_nSystemByte);
   ISECS2Item* pItem = pMessage->getBody();
   pItem->addBinaryItem(&szEnable[bEnable ? 0 : 1], 1, "ALED");
   pItem->addU4Item(id, "ALID");
   m_pActive->sendMessage(pMessage);
   HSMS_Destroy1Message(pMessage);
   return 0;
}
int CHsmsActive::replyAck0(IMessage* pMessage)
{
   return 0;
}
// 通用的reply ack函数
void CHsmsActive::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((const char*)&ack, 1, pszAckName);
   m_pActive->sendMessage(pMessage);
   LOGI("<HSMS>[SECS Msg SEND]S%dF%d (SysByte=%u)", s, f, systemBytes);
   HSMS_Destroy1Message(pMessage);
}