| | |
| | | |
| | | } |
| | | |
| | | void CHsmsPassive::addReport(unsigned int id, const char* pszName) |
| | | void CHsmsPassive::linkEventReport(unsigned int CEID, unsigned int RPTID) |
| | | { |
| | | Lock(); |
| | | REPORT report; |
| | | report.id = id; |
| | | strcpy_s(report.szName, REPORT_NAME_MAX, pszName); |
| | | m_mapReport[id] = report; |
| | | Unlock(); |
| | | } |
| | | |
| | | void CHsmsPassive::linkEventReport(unsigned int RPTID, unsigned int CEID) |
| | | { |
| | | m_mapReportIdToCEID[RPTID] = CEID; |
| | | SERVO::CCollectionEvent* pEvent = getEvent(CEID); |
| | | SERVO::CReport* pReport = getReport(RPTID); |
| | | if (pEvent != nullptr) { |
| | | pEvent->setReport(pReport); |
| | | } |
| | | } |
| | | |
| | | void CHsmsPassive::unlinkEventReport(unsigned int CEID) |
| | | { |
| | | for (auto it = m_mapReportIdToCEID.begin(); it != m_mapReportIdToCEID.end(); ) { |
| | | if (it->second == CEID) { |
| | | m_mapReportIdToCEID.erase(it++); // 更新迭代器 |
| | | } |
| | | else { |
| | | ++it; |
| | | } |
| | | SERVO::CCollectionEvent* pEvent = getEvent(CEID); |
| | | if (pEvent != nullptr) { |
| | | pEvent->setReport(nullptr); |
| | | } |
| | | |
| | | } |
| | | |
| | | unsigned int CHsmsPassive::getCEID(int RPTID) |
| | | { |
| | | auto iter = m_mapReportIdToCEID.find(RPTID); |
| | | if (iter != m_mapReportIdToCEID.end()) return iter->second; |
| | | return 0; |
| | | } |
| | | |
| | | SERVO::CReport* CHsmsPassive::defineReport(unsigned int RPTID, std::vector<unsigned int>& vids) |
| | |
| | | if (!events.empty()) { |
| | | clearAllCollectionEvent(); |
| | | for (auto item : events) { |
| | | m_collectionEvent.push_back(item); |
| | | m_collectionEvents.push_back(item); |
| | | } |
| | | } |
| | | |
| | |
| | | |
| | | std::vector<SERVO::CCollectionEvent*>& CHsmsPassive::getCollectionEvents() |
| | | { |
| | | return m_collectionEvent; |
| | | return m_collectionEvents; |
| | | } |
| | | |
| | | void CHsmsPassive::clearAllCollectionEvent() |
| | | { |
| | | for (auto item : m_collectionEvent) { |
| | | for (auto item : m_collectionEvents) { |
| | | delete item; |
| | | } |
| | | m_collectionEvent.clear(); |
| | | m_collectionEvents.clear(); |
| | | } |
| | | |
| | | SERVO::CCollectionEvent* CHsmsPassive::getEvent(unsigned short CEID) |
| | | { |
| | | for (auto item : m_collectionEvents) { |
| | | if (item->getEventId() == CEID) { |
| | | return item; |
| | | } |
| | | } |
| | | |
| | | return nullptr; |
| | | } |
| | | |
| | | std::vector<unsigned int> CHsmsPassive::parseVidList(CString& strNums) |
| | |
| | | } |
| | | else if (nStream == 2 && pHeader->function == 41) { |
| | | replyCommand(pMessage); |
| | | } |
| | | else if (nStream == 2 && pHeader->function == 43) { |
| | | replyConfigureSpooling(pMessage); |
| | | } |
| | | else if (nStream == 5 && pHeader->function == 3) { |
| | | replyEanbleDisableAlarmReport(pMessage); |
| | |
| | | else { |
| | | for (int k = 0; k < prtCount; k++) { |
| | | if (rptListItem->getSubItemU4(k, rptid)) { |
| | | linkEventReport(rptid, ceid); |
| | | linkEventReport(ceid, rptid); |
| | | } |
| | | } |
| | | } |
| | |
| | | |
| | | |
| | | // 检验结果是否正确 |
| | | for (auto item : m_mapReportIdToCEID) { |
| | | LOGE("=== prtid:%d, ceid:%d", item.first, item.second); |
| | | for (auto item : m_collectionEvents) { |
| | | LOGE("=== ceid:%d, prtid:%d", item->getEventId(), item->getPortID()); |
| | | } |
| | | |
| | | |
| | | MYREPLY: |
| | | replyAck(2, 36, pRecv->getHeader()->systemBytes, BYTE(0), "LRACK"); |
| | | return 0; |
| | |
| | | const char* pszParamName, * pszParamValue; |
| | | pItemParam = pItemParams->getSubItem(i); |
| | | if (pItemParam != nullptr |
| | | && pItemParam->getSubItemString(0, pszParamName) |
| | | && pItemParam->getSubItemString(1, pszParamValue)) { |
| | | CommandParameter cp; |
| | | strcpy_s(cp.szName, COMMAND_NAME_MAX, pszParamName); |
| | | strcpy_s(cp.szValue, COMMAND_VALUE_MAX, pszParamValue); |
| | | params.push_back(cp); |
| | | } |
| | | } |
| | | bCheckData = TRUE; |
| | | } |
| | | |
| | | |
| | | // 回调到应用层 |
| | | if (bCheckData) { |
| | | if (m_listener.onCommand != nullptr) { |
| | | m_listener.onCommand(this, pszCmdName, params); |
| | | } |
| | | } |
| | | |
| | | MYREPLY: |
| | | replyAck(2, 42, pRecv->getHeader()->systemBytes, BYTE(0), "ERACK"); |
| | | return 0; |
| | | } |
| | | |
| | | // S2F43 |
| | | int CHsmsPassive::replyConfigureSpooling(IMessage* pRecv) |
| | | { |
| | | if (m_pPassive == NULL || STATE::SELECTED != m_pPassive->getState()) { |
| | | return ER_NOTSELECT; |
| | | } |
| | | ISECS2Item* pBody = pRecv->getBody(); |
| | | if (pBody == nullptr || pBody->getType() != SITYPE::L) ER_PARAM_ERROR; |
| | | |
| | | // 清空所有 |
| | | if (pBody->getSubItemSize() == 0) { |
| | | m_spoolingConfig.clear(); |
| | | goto MYREPLY; |
| | | } |
| | | |
| | | // 依次配置Stream |
| | | for (int i = 0; i < pBody->getSubItemSize(); i++) { |
| | | ISECS2Item* pStreamItem = pBody->getSubItem(i); |
| | | ASSERT(pStreamItem); |
| | | unsigned char STRID; |
| | | pStreamItem->getSubItemU1(0, STRID); |
| | | ISECS2Item* pFcnItem = pStreamItem->getSubItem(1); |
| | | for (int j = 0; j < pFcnItem->getSubItemSize(); j++) { |
| | | |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | BOOL bCheckData = FALSE; |
| | | const char* pszCmdName; |
| | | std::vector<CommandParameter> params; |
| | | { |
| | | ISECS2Item* pItemParams, * pItemParam; |
| | | ISECS2Item* pItem = pRecv->getBody(); |
| | | if (pItem->getSubItemSize() < 2) goto MYREPLY; |
| | | if (!pItem->getSubItemString(0, pszCmdName)) goto MYREPLY; |
| | | pItemParams = pItem->getSubItem(1); |
| | | if (pItemParams == nullptr || pItemParams->getType() != SITYPE::L) goto MYREPLY; |
| | | for (int i = 0; i < pItemParams->getSubItemSize(); i++) { |
| | | const char* pszParamName, * pszParamValue; |
| | | pItemParam = pItemParams->getSubItem(i); |
| | | if (pItemParam != nullptr |
| | | && pItemParam->getSubItemString(0, pszParamName) |
| | | && pItemParam->getSubItemString(1, pszParamValue)) { |
| | | CommandParameter cp; |
| | |
| | | } |
| | | |
| | | // S6F11 |
| | | int CHsmsPassive::requestEventReportSend(unsigned int DATAID, unsigned int RPTID, const std::vector<std::string>& values) |
| | | int CHsmsPassive::requestEventReportSend(unsigned int DATAID, unsigned int CEID, const std::vector<std::string>& values) |
| | | { |
| | | if (m_pPassive == NULL || STATE::SELECTED != m_pPassive->getState()) { |
| | | return ER_NOTSELECT; |
| | | } |
| | | |
| | | SERVO::CCollectionEvent* pEvent = getEvent(CEID); |
| | | if (pEvent == nullptr) { |
| | | return ER_NO_EVENT; |
| | | } |
| | | if (pEvent == nullptr) { |
| | | return ER_UNLINK_EVENT_REPORT; |
| | | } |
| | | |
| | | Lock(); |
| | |
| | | ASSERT(pMessage); |
| | | ISECS2Item* pItem = pMessage->getBody(); |
| | | pItem->addU4Item(DATAID, "DATAID"); |
| | | pItem->addU4Item(getCEID(RPTID), "CEID"); |
| | | pItem->addU4Item(CEID, "CEID"); |
| | | ISECS2Item* pItemList1 = pItem->addItem(); |
| | | ISECS2Item* pItemList2 = pItemList1->addItem(); |
| | | pItemList2->addU4Item(RPTID, "RPTID"); |
| | | pItemList2->addU4Item(pEvent->getPortID(), "RPTID"); |
| | | ISECS2Item* pItemList3 = pItemList2->addItem(); |
| | | for (auto item : values) { |
| | | pItemList3->addItem(item.c_str(), "V"); |