SourceCode/Bond/Servo/HsmsPassive.cpp
@@ -65,6 +65,7 @@
void CHsmsPassive::setListener(SECSListener listener)
{
   m_listener.onEQConstantRequest = listener.onEQConstantRequest;
   m_listener.onEQConstantSend = listener.onEQConstantSend;
}
void CHsmsPassive::setActionTimeout(int nSecond)
@@ -189,7 +190,10 @@
         replyEstablishCommunications(pMessage);
      }
      else if (nStream == 2 && pHeader->function == 13) {
         replyEquipmentConstant(pMessage);
         replyEquipmentConstantRequest(pMessage);
      }
      else if (nStream == 2 && pHeader->function == 15) {
         replyEquipmentConstantSend(pMessage);
      }
      else if (nStream == 2 && pHeader->function == 31) {
         replyDatetime(pMessage);
@@ -386,7 +390,7 @@
}
// S2F13
int CHsmsPassive::replyEquipmentConstant(IMessage* pRecv)
int CHsmsPassive::replyEquipmentConstantRequest(IMessage* pRecv)
{
   if (m_pPassive == NULL || STATE::SELECTED != m_pPassive->getState()) {
      return ER_NOTSELECT;
@@ -395,23 +399,24 @@
   // 要获取的常量表表
   BOOL bCheckData = FALSE;
   std::vector<unsigned int> ecids;
   std::vector<EQConstant> eqcs;
   {
      ISECS2Item* pItem = pRecv->getBody();
      int ecidSize = pItem->getSubItemSize();
      for (int i = 0; i < ecidSize; i++) {
         EQConstant eqc;
         unsigned short id;
         if (pItem->getSubItemU2(i, id)) {
            ecids.push_back((int)id);
            eqc.id = id;
            eqcs.push_back(eqc);
         }
      }
   }
   // 交由上层应用来获取机器常量值
   std::vector<unsigned int> ecvs;
   if (m_listener.onEQConstantRequest != nullptr) {
      m_listener.onEQConstantRequest(this, ecids, ecvs);
      m_listener.onEQConstantRequest(this, eqcs);
   }
@@ -420,8 +425,8 @@
   HSMS_Create1Message(pMessage, m_nSessionId, 1, 14, pRecv->getHeader()->systemBytes);
   ASSERT(pMessage);
   ISECS2Item* pItem = pMessage->getBody();
   for (auto item : ecvs) {
      pItem->addU2Item(item, "ECV");
   for (auto& item : eqcs) {
      pItem->addItem(item.szValue, "ECV");
   }
   m_pPassive->sendMessage(pMessage);
@@ -431,6 +436,49 @@
   return 0;
}
// S2F15
int CHsmsPassive::replyEquipmentConstantSend(IMessage* pRecv)
{
   if (m_pPassive == NULL || STATE::SELECTED != m_pPassive->getState()) {
      return ER_NOTSELECT;
   }
   // 要设置的常量表表
   BOOL bCheckData = FALSE;
   std::vector<EQConstant> eqcs;
   {
      ISECS2Item* pItem = pRecv->getBody();
      int ecidSize = pItem->getSubItemSize();
      for (int i = 0; i < ecidSize; i++) {
         ISECS2Item* pItemEqc = pItem->getSubItem(i);
         if (pItemEqc != nullptr) {
            EQConstant eqc;
            unsigned short eqcid;
            const char* pszValue;
            if (pItemEqc->getSubItemU2(0, eqcid)
               && pItemEqc->getSubItemString(1, pszValue)) {
               eqc.id = eqcid;
               strcpy_s(eqc.szValue, 256, pszValue);
               eqcs.push_back(eqc);
            }
         }
      }
   }
   // 交由上层应用来保存和设置机器常量值
   std::vector<unsigned int> ecvs;
   if (m_listener.onEQConstantSend != nullptr) {
      m_listener.onEQConstantSend(this, eqcs);
   }
   // 回复
   replyAck(2, 16, pRecv->getHeader()->systemBytes, BYTE(0), "EACK");
   return 0;
}
// S2F31
int CHsmsPassive::replyDatetime(IMessage* pRecv)
{