From a8fb417ef1fb696723c8b8d5a340e8ca2e0312ae Mon Sep 17 00:00:00 2001
From: mrDarker <mr.darker@163.com>
Date: 星期六, 09 八月 2025 10:43:17 +0800
Subject: [PATCH] Merge branch 'clh' into liuyang
---
SourceCode/Bond/Servo/HsmsPassive.cpp | 120 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++---
1 files changed, 114 insertions(+), 6 deletions(-)
diff --git a/SourceCode/Bond/Servo/HsmsPassive.cpp b/SourceCode/Bond/Servo/HsmsPassive.cpp
index 9dca68a..7a80fd5 100644
--- a/SourceCode/Bond/Servo/HsmsPassive.cpp
+++ b/SourceCode/Bond/Servo/HsmsPassive.cpp
@@ -256,12 +256,39 @@
return nullptr;
}
+SERVO::CVariable* CHsmsPassive::getVariable(const char* pszName)
+{
+ for (auto item : m_variabels) {
+ if (item->getName().compare(pszName) == 0) {
+ return item;
+ }
+ }
+
+ return nullptr;
+}
+
void CHsmsPassive::clearAllVariabel()
{
for (auto item : m_variabels) {
delete item;
}
m_variabels.clear();
+}
+
+void CHsmsPassive::setVariableValue(const char* pszName, __int64 value)
+{
+ auto v = getVariable(pszName);
+ if (v != nullptr) {
+ v->setValue(value);
+ }
+}
+
+void CHsmsPassive::setVariableValue(const char* pszName, const char* value)
+{
+ auto v = getVariable(pszName);
+ if (v != nullptr) {
+ v->setValue(value);
+ }
}
int CHsmsPassive::loadReports(const char* pszFilepath)
@@ -541,6 +568,9 @@
}
else if (nStream == 2 && pHeader->function == 43) {
replyConfigureSpooling(pMessage);
+ }
+ else if (nStream == 3 && pHeader->function == 17) {
+ replyCarrierAction(pMessage);
}
else if (nStream == 5 && pHeader->function == 3) {
replyEanbleDisableAlarmReport(pMessage);
@@ -1092,7 +1122,7 @@
// 妫�楠岀粨鏋滄槸鍚︽纭�
for (auto item : m_collectionEvents) {
- LOGE("=== ceid:%d, prtid:%d", item->getEventId(), item->getPortID());
+ LOGE("=== ceid:%d, prtid:%d", item->getEventId(), item->getFirstPortID());
}
MYREPLY:
@@ -1231,6 +1261,57 @@
}
MYREPLY:
replyAck(2, 42, pRecv->getHeader()->systemBytes, BYTE(0), "ERACK");
+ return 0;
+}
+
+// S3F17
+int CHsmsPassive::replyCarrierAction(IMessage* pRecv)
+{
+ if (m_pPassive == NULL || STATE::SELECTED != m_pPassive->getState()) {
+ return ER_NOTSELECT;
+ }
+
+ unsigned char CAACK = CAACK_0;
+ unsigned int ERRCODE = 0;
+ std::string strError = "no error";
+ if (m_listener.onCarrierAction == nullptr) {
+ CAACK = 5;
+ ERRCODE = CAACK_5;
+ strError = "Not supported";
+ goto MYREPLY;
+ }
+
+
+ ISECS2Item* pBody = pRecv->getBody();
+ if (pBody == nullptr || pBody->getType() != SITYPE::L) ER_PARAM_ERROR;
+
+ unsigned int DATAID;
+ unsigned char PTN;
+ const char* pszCarrierAction, *pszCarrierId;
+ pBody->getSubItemU4(0, DATAID);
+ pBody->getSubItemString(1, pszCarrierAction);
+ pBody->getSubItemString(2, pszCarrierId);
+ pBody->getSubItemU1(3, PTN);
+ ERRCODE = m_listener.onCarrierAction(this,
+ DATAID,
+ pszCarrierAction,
+ pszCarrierId,
+ PTN,
+ strError);
+ CAACK = ERRCODE;
+
+ // 鍥炲
+MYREPLY:
+ IMessage* pMessage = NULL;
+ HSMS_Create1Message(pMessage, m_nSessionId, 3, 18, pRecv->getHeader()->systemBytes);
+ pMessage->getBody()->addU1Item(CAACK, "CAACK");
+ ISECS2Item* pErrItem = pMessage->getBody()->addItem();
+ pErrItem->addU4Item(ERRCODE, "ERRCODE");
+ pErrItem->addItem(strError.c_str(), "ERRTEXT");
+ m_pPassive->sendMessage(pMessage);
+ LOGI("<HSMS>[SECS Msg SEND]S3F18 (SysByte=%u)", pMessage->getHeader()->systemBytes);
+ HSMS_Destroy1Message(pMessage);
+
return 0;
}
@@ -1396,15 +1477,19 @@
}
// S6F11
-int CHsmsPassive::requestEventReportSend(unsigned int DATAID, unsigned int CEID, const std::vector<std::string>& values)
+static unsigned int DATAID = 1;
+int CHsmsPassive::requestEventReportSend(unsigned int CEID)
{
SERVO::CCollectionEvent* pEvent = getEvent(CEID);
if (pEvent == nullptr) {
return ER_NO_EVENT;
}
- if (pEvent == nullptr) {
+
+ SERVO::CReport* pReport = pEvent->getFirstReport();
+ if (pReport == nullptr) {
return ER_UNLINK_EVENT_REPORT;
}
+
Lock();
CHsmsAction* pAction = new CHsmsAction(ACTION_EVENT_REPORT, TRUE, m_nActionTimeout);
@@ -1412,14 +1497,16 @@
HSMS_Create1Message(pMessage, m_nSessionId, 6 | REPLY, 11, ++m_nSystemByte);
ASSERT(pMessage);
ISECS2Item* pItem = pMessage->getBody();
- pItem->addU4Item(DATAID, "DATAID");
+ pItem->addU4Item(++DATAID, "DATAID");
pItem->addU4Item(CEID, "CEID");
ISECS2Item* pItemList1 = pItem->addItem();
ISECS2Item* pItemList2 = pItemList1->addItem();
- pItemList2->addU4Item(pEvent->getPortID(), "RPTID");
+ pItemList2->addU4Item(pReport->getReportId(), "RPTID");
ISECS2Item* pItemList3 = pItemList2->addItem();
+
+ auto values = pReport->getVariables();
for (auto item : values) {
- pItemList3->addItem(item.c_str(), "V");
+ pItemList3->addItem(item->getValue().c_str(), "V");
}
pAction->setSendMessage(pMessage);
if (m_pPassive == NULL || STATE::SELECTED != m_pPassive->getState()) {
@@ -1434,5 +1521,26 @@
return ER_NOERROR;
}
+int CHsmsPassive::requestEventReportSend(const char* pszEventName)
+{
+ SERVO::CCollectionEvent* pEvent = nullptr;
+ for (auto e : m_collectionEvents) {
+ if (e->getName().compare(pszEventName) == 0) {
+ pEvent = e;
+ break;
+ }
+ }
+ if (pEvent == nullptr) {
+ return ER_NO_EVENT;
+ }
+ return requestEventReportSend(pEvent->getEventId());
+}
+
+int CHsmsPassive::requestEventReportSend_CarrierID_Readed()
+{
+ return requestEventReportSend("CarrierID_Readed");
+}
+
+
--
Gitblit v1.9.3