| | |
| | | |
| | | } |
| | | |
| | | void CHsmsPassive::addReport(unsigned int id, const char* pszName) |
| | | { |
| | | 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; |
| | | } |
| | | |
| | | 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; |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | void CHsmsPassive::OnTimer(UINT nTimerid) |
| | | { |
| | | // 所有已发送的Action自加1 |
| | |
| | | } |
| | | else if (nStream == 2 && pHeader->function == 31) { |
| | | replyDatetime(pMessage); |
| | | } |
| | | else if (nStream == 2 && pHeader->function == 35) { |
| | | replyLinkEventReport(pMessage); |
| | | } |
| | | else if (nStream == 2 && pHeader->function == 37) { |
| | | replyEanbleDisableEventReport(pMessage); |
| | |
| | | if (pItemEqc->getSubItemU2(0, eqcid) |
| | | && pItemEqc->getSubItemString(1, pszValue)) { |
| | | eqc.id = eqcid; |
| | | strcpy_s(eqc.szValue, 256, pszValue); |
| | | strcpy_s(eqc.szValue, EQCONSTANT_VALUE_MAX, pszValue); |
| | | eqcs.push_back(eqc); |
| | | } |
| | | } |
| | |
| | | } |
| | | |
| | | replyAck(2, 32, pRecv->getHeader()->systemBytes, BYTE(0), "TIACK"); |
| | | return 0; |
| | | } |
| | | |
| | | // S2F35 |
| | | int CHsmsPassive::replyLinkEventReport(IMessage* pRecv) |
| | | { |
| | | if (m_pPassive == NULL || STATE::SELECTED != m_pPassive->getState()) { |
| | | return ER_NOTSELECT; |
| | | } |
| | | |
| | | |
| | | BOOL bCheckData = FALSE; |
| | | ISECS2Item* pBody = pRecv->getBody(); |
| | | ISECS2Item* linkItem, *ceidListItem, *rptListItem; |
| | | unsigned int dataId, ceid, rptid; |
| | | if (!pBody->getSubItemU4(0, dataId)) goto MYREPLY; |
| | | ceidListItem = pBody->getSubItem(1); |
| | | if (ceidListItem == nullptr) goto MYREPLY; |
| | | for (int i = 0; i < ceidListItem->getSubItemSize(); i++) { |
| | | linkItem = ceidListItem->getSubItem(i); |
| | | if (linkItem == nullptr) continue; |
| | | rptListItem = linkItem->getSubItem(1); |
| | | if (linkItem->getSubItemU4(0, ceid) |
| | | && rptListItem != nullptr) { |
| | | int prtCount = rptListItem->getSubItemSize(); |
| | | if (prtCount == 0) { |
| | | unlinkEventReport(ceid); |
| | | } |
| | | else { |
| | | for (int k = 0; k < prtCount; k++) { |
| | | if (rptListItem->getSubItemU4(k, rptid)) { |
| | | linkEventReport(rptid, ceid); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | // 检验结果是否正确 |
| | | for (auto item : m_mapReportIdToCEID) { |
| | | LOGE("=== prtid:%d, ceid:%d", item.first, item.second); |
| | | } |
| | | |
| | | MYREPLY: |
| | | replyAck(2, 36, pRecv->getHeader()->systemBytes, BYTE(0), "LRACK"); |
| | | return 0; |
| | | } |
| | | |
| | |
| | | && pItemParam->getSubItemString(0, pszParamName) |
| | | && pItemParam->getSubItemString(1, pszParamValue)) { |
| | | CommandParameter cp; |
| | | strcpy_s(cp.szName, 256, pszParamName); |
| | | strcpy_s(cp.szValue, 256, pszParamValue); |
| | | strcpy_s(cp.szName, COMMAND_NAME_MAX, pszParamName); |
| | | strcpy_s(cp.szValue, COMMAND_VALUE_MAX, pszParamValue); |
| | | params.push_back(cp); |
| | | } |
| | | } |