| | |
| | | return 0; |
| | | } |
| | | |
| | | void CHsmsPassive::deleteReport(unsigned int RPTID) |
| | | SERVO::CReport* CHsmsPassive::defineReport(unsigned int RPTID, std::vector<unsigned int>& vids) |
| | | { |
| | | for (auto it = m_mapValueIdToPRTID.begin(); it != m_mapValueIdToPRTID.end(); ) { |
| | | if (it->second == RPTID) { |
| | | m_mapValueIdToPRTID.erase(it++); // 更新迭代器 |
| | | } |
| | | else { |
| | | ++it; |
| | | // 添加定义report |
| | | SERVO::CReport* pReport = new SERVO::CReport(RPTID, vids); |
| | | for (auto vid : vids) { |
| | | SERVO::CVariable* pVariable = getVariable(vid); |
| | | if (pVariable != nullptr) { |
| | | pReport->addVariable(pVariable); |
| | | } |
| | | } |
| | | } |
| | | m_reports.push_back(pReport); |
| | | |
| | | void CHsmsPassive::deleteAllReport() |
| | | { |
| | | m_mapValueIdToPRTID.clear(); |
| | | } |
| | | |
| | | void CHsmsPassive::defineReport(unsigned int VID, unsigned int RPTID) |
| | | { |
| | | m_mapValueIdToPRTID[VID] = RPTID; |
| | | return pReport; |
| | | } |
| | | |
| | | void CHsmsPassive::OnTimer(UINT nTimerid) |
| | |
| | | } |
| | | |
| | | return nullptr; |
| | | } |
| | | |
| | | bool CHsmsPassive::removeReport(int rptid) |
| | | { |
| | | for (auto iter = m_reports.begin(); iter != m_reports.end(); ++iter) { |
| | | if ((*iter)->getReportId() == rptid) { |
| | | delete (*iter); |
| | | m_reports.erase(iter); |
| | | return true; |
| | | } |
| | | } |
| | | |
| | | return false; |
| | | } |
| | | |
| | | void CHsmsPassive::clearAllReport() |
| | |
| | | ISECS2Item* pBody = pRecv->getBody(); |
| | | ISECS2Item* defineItem, *rptListItem, * vidListItem; |
| | | unsigned int dataId, rptid, vid; |
| | | |
| | | if (!pBody->getSubItemU4(0, dataId)) goto MYREPLY; |
| | | rptListItem = pBody->getSubItem(1); |
| | | if (rptListItem == nullptr) goto MYREPLY; |
| | | if (rptListItem->getSubItemSize() == 0) { |
| | | deleteAllReport(); |
| | | clearAllReport(); |
| | | goto MYREPLY; |
| | | } |
| | | |
| | | for (int i = 0; i < rptListItem->getSubItemSize(); i++) { |
| | | defineItem = rptListItem->getSubItem(i); |
| | | if (defineItem == nullptr) continue; |
| | | |
| | | std::vector<unsigned int> vids; |
| | | SERVO::CReport* pReport = nullptr; |
| | | vidListItem = defineItem->getSubItem(1); |
| | | if (defineItem->getSubItemU4(0, rptid) |
| | | && vidListItem != nullptr) { |
| | | int vidCount = vidListItem->getSubItemSize(); |
| | | if (vidCount == 0) { |
| | | deleteReport(rptid); |
| | | } |
| | | else { |
| | | for (int k = 0; k < vidCount; k++) { |
| | | for (int k = 0; k < vidListItem->getSubItemSize(); k++) { |
| | | if (vidListItem->getSubItemU4(k, vid)) { |
| | | defineReport(vid, rptid); |
| | | vids.push_back(vid); |
| | | } |
| | | } |
| | | } |
| | | |
| | | removeReport(rptid); |
| | | if (!vids.empty()) { |
| | | pReport = defineReport(rptid, vids); |
| | | } |
| | | |
| | | // 检验结果是否正确 |
| | | if (pReport != nullptr) { |
| | | auto variables = pReport->getVariables(); |
| | | for (auto item : variables) { |
| | | LOGE("=== prtid:%d, vid:%d", rptid, item->getVarialbleId()); |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | MYREPLY: |
| | | // 检验结果是否正确 |
| | | for (auto item : m_mapValueIdToPRTID) { |
| | | LOGE("=== vid:%d, prtid:%d", item.first, item.second); |
| | | } |
| | | |
| | | replyAck(2, 34, pRecv->getHeader()->systemBytes, BYTE(0), "DRACK"); |
| | | return 0; |
| | | } |