📄 cscmal.cpp
字号:
delete pfn;// printf("0 %04x\n",awBuf[0]);// printf("1 %04x\n",awBuf[1]); bRet = true; if (byType == dt_eCSC246) wSize = (16*2+30)*sizeof(struFVData); else wSize = (16*2+37)*sizeof(struFVData); pbyBuf = new BYTE[wSize]; struFVData* pFVData = (struFVData *)pbyBuf; WORD wA = 0x1; for (WORD ww=0; ww<wSize/sizeof(struFVData); ww++) { (pFVData+ww)->m_dwID = ww; if (ww<32) { (pFVData+ww)->m_vt = VT_BOOL; (pFVData+ww)->m_bValue = bool((ww<16)?(awBuf[0]&wA):(awBuf[1]&wA))?0xff:0; if (ww == 15) wA = 1; else wA <<= 1; } else { (pFVData+ww)->m_vt = VT_R4; (pFVData+ww)->m_fValue = wtf(awBuf[ww+2-32]);// cout<< (pFVData+ww)->m_fValue <<endl; } } break; } /* CFrameNode FNSendx; FNSendx.m_byCID = 0x26; FNSendx.m_wDAddr = byAddr; FNSendx.SetSize(0); m_dlsvr.REQ(0,&FNSendx,0,true); */ } delete pfn; } } pthread_mutex_unlock(&m_mutex); return bRet;}bool CCSCMas::PutFV(WORD wDevNo,BYTE* pFixVal,WORD wSize,WORD wFuncCode){ bool bRet = false; pthread_mutex_lock(&m_mutex); BYTE byAddr = m_subdevmgr.GetAddrFrmDevNo(wDevNo); if (byAddr == 0xff) { pthread_mutex_unlock(&m_mutex); return false; } BYTE byType = m_subdevmgr.GetTypeFrmAddr(byAddr); struFVData* pFVData = (struFVData *)pFixVal; WORD awBuf[39]; awBuf[0] = awBuf[1] = 0; for (WORD ww=0; ww<wSize/sizeof(struFVData); ww++) { if ((pFVData+ww)->m_dwID<16) awBuf[0] |= (((pFVData+ww)->m_bValue==0xff)?(1<<(pFVData+ww)->m_dwID):0); else if ((pFVData+ww)->m_dwID<32) awBuf[1] |= (((pFVData+ww)->m_bValue==0xff)?(1<<((pFVData+ww)->m_dwID-16)):0); else if ((pFVData+ww)->m_dwID < 69) awBuf[(pFVData+ww)->m_dwID+2-32] = ftw((pFVData+ww)->m_fValue);//if (ww < 32) // printf("FV ID=%d. %s\n",(pFVData+ww)->m_dwID,(pFVData+ww)->m_bValue?"TRUE":"FALSE"); }//printf("0 %04x\n",awBuf[0]);//printf("1 %04x\n",awBuf[1]); awBuf[0] = CW(awBuf[0]); awBuf[1] = CW(awBuf[1]); WORD wCRC = (byType == dt_eCSC246) ? cal_crc((BYTE *)awBuf,32*2) : cal_crc((BYTE *)awBuf,39*2); BYTE byFrameCount = (byType == dt_eCSC246) ? 32/5+1 : 39/5+1; for (BYTE bb=1,bbb=0;bbb<byFrameCount; bbb++) { CFrameNode FNSend; FNSend.m_byCID = 0x89; FNSend.m_wDAddr = byAddr; WORD ws=0; if (bbb+1 == byFrameCount) ws = 4* (((byType == dt_eCSC246) ? 32 : 39)%5) + 4 ; else ws = 4*5 + ((bbb == 0)?4:2); FNSend.SetSize(ws); BYTE* pData = FNSend.m_pbyData; *pData++ = bbb + 1; *pData++ = (bbb==(byFrameCount-1))? 0x80:0; if (bbb == 0) { *pData++ = 0x0; //current fixed_value no. if (byType == dt_eCSC246) *pData++ = 0x9b; else *pData++ = 0x90; } for (BYTE b=0; (b<5) && (bb <= ((byType == dt_eCSC246) ? 32 : 39)); b++) { *pData++ = bb++; *pData++ = ((bbb==0) && (b<2))?2:0; WORD *pw = (WORD *)pData; *pw++ = awBuf[bbb*5+b]; if ((bbb*5+b +1) == ((byType == dt_eCSC246) ? 32 : 39)) { *pw = wCRC; break; } pData = (BYTE *)pw; } if (m_dlsvr.REQ(0,&FNSend,0,true) == 1)//Send - Respond { CFrameNode* pfn = NULL; if (m_queResp.Get(pfn,200)) { if (pfn->m_byCID == 0x15) { delete pfn; break; } else if (pfn->m_byCID == 0x26) bRet = true; delete pfn; } } } if (bRet) bRet = Fixing(byAddr,0x0); pthread_mutex_unlock(&m_mutex); return bRet;}bool CCSCMas::Fixing(BYTE byAddr,BYTE byArea){ bool bRet = false; CFrameNode FNSend; FNSend.m_byCID = 0x1e; //select FNSend.m_wDAddr = byAddr;//GGG FNSend.SetSize(2); BYTE* pData = FNSend.m_pbyData; pData[0] = ~byArea; pData[1] = ~0x63; if (m_dlsvr.REQ(0,&FNSend,0,true) == 1)//Send - Respond { CFrameNode* pfn=NULL; if (m_queResp.Get(pfn,200)) { if (pfn->m_byCID == 0x3c) //success { FNSend.m_byCID = 0x1a; ////execute pData[0] = byArea; pData[1] = 0x63; if (m_dlsvr.REQ(0,&FNSend,0,true) == 1)//Send - Respond { CFrameNode* pfn1=NULL; if (m_queResp.Get(pfn1,200)) { if (pfn1->m_byCID == 0x26) bRet = true; delete pfn1; } } } delete pfn; } } return bRet;}void CCSCMas::Explain(CFrameNode* pfn){ if (pfn->m_byCID == 0x30) { BYTE* pbyTemp = pfn->m_pbyData; WORD wDevNo = m_subdevmgr.GetDevNoFrmAddr(pfn->m_wSAddr); if (wDevNo == 0xffff) return; switch (*pbyTemp++) { case 0x30: //YC ana16-h 10个 { WORD* pwTemp = (WORD *)pbyTemp; BYTE byNum = (pfn->m_wSize-1)/2; if (byNum >10) byNum = 10; YCData* pData = new YCData [byNum]; for (BYTE b=0; b<byNum; b++,pwTemp++) { pData[b].m_wDevNo = wDevNo; pData[b].m_wDevPtNo = b+1; WORD wValue = *pwTemp; float ffValue = wValue& 0xfff; if (wValue & 0x1000) ffValue = -ffValue; pData[b].m_fValue = ffValue/4096; } m_pAllMgr->YC(pData,byNum); delete [] pData; } break; case 0x0b: //YE 4字节I32 11 start 6 { DWORD* pdwTemp = (DWORD *)(pbyTemp+2); BYTE byNum = pfn->m_wSize/4 ; YCData* pData = new YCData [byNum]; for (BYTE b=0;(b<10) && b<byNum; b++,pdwTemp++) { pData[b].m_wDevNo = wDevNo; pData[b].m_wDevPtNo = b+11; pData[b].m_fValue = *pdwTemp; } m_pAllMgr->YC(pData,byNum); delete [] pData; } break; case 0x07: //Yx 24 bytes { BYTE byNum = 15*8;//(pfn->m_wSize-2)*8; pbyTemp++; YXData* pYXData = new YXData [byNum+1]; for (BYTE by=0; by<byNum/8; by++) { BYTE byA = 1; BYTE byValue = *pbyTemp++; //printf("%02X ",byValue); for (BYTE b=0; b<8; b++,byA<<=1) { pYXData[b+8*by].m_wDevNo = wDevNo; pYXData[b+8*by].m_wDevPtNo =b+8*by + 1 ; pYXData[b+8*by].m_bValue = (byValue & byA)?0xff00:0xff; } } //cout << endl; pYXData[byNum].m_wDevNo = wDevNo; pYXData[byNum].m_wDevPtNo =200 ; pYXData[byNum].m_bValue = ((pYXData[46].m_bValue == 0xff00) || (pYXData[47].m_bValue == 0xff00))?0xff00:0xff; m_pAllMgr->YX(pYXData, byNum+1); delete [] pYXData; } break; case 0x11: //soe 7字节绝对时标 { BYTE byEventCount = (pfn->m_wSize-1)/12; // pbyTemp++; for (BYTE b=0; b<byEventCount; b++,pbyTemp+=12) { BYTE byGroupNo = *pbyTemp; struct tm gt; gt.tm_year = 100+ *(pbyTemp+7); gt.tm_mon = *(pbyTemp+6)-1; gt.tm_mday = *(pbyTemp+5); gt.tm_hour = *(pbyTemp+4); gt.tm_min = (*(pbyTemp+3)) & 0x7f; WORD* pwTemp = (WORD *)(pbyTemp+1); DWORD dwms = *pwTemp + (((*(pbyTemp+3)) & 0x80) ?65536:0); gt.tm_sec = dwms/1000 % 60; gt.tm_min += dwms/1000/60; CTimeVal tvg(>,dwms%1000*1000); WORD wEventAddr = (byGroupNo-1)*16; WORD wA = 1; pwTemp = (WORD *)(pbyTemp+8); WORD wValue = *pwTemp++; WORD wStatus = *pwTemp; for (BYTE b=0; b<16; b++,wA<<=1) { if (wStatus & wA) { SOEData aSOEData; aSOEData.m_ctv = tvg; struct tm t; tvg.GetTime(&t); aSOEData.m_bValue = ((wValue & wA) == 0) ?0xff:0xff00; aSOEData.m_wDevNo = wDevNo; aSOEData.m_wDevPtNo = wEventAddr+1+b; SendSOEData(&aSOEData,1); } } } } break; default: break; } } /* BYTE* pbyTemp = pbyData + 1; WORD wDevNo = m_subdevmgr.GetDevNoFrmAddr(byAddr); YCData* pData = new YCData [bySize/2];// short* pshOrigValue = (short *)pbyData; WORD* pwOrigValue = (WORD *)pbyTemp; for (WORD w=0; w<bySize/2; w++) { pData[w].m_wDevNo = wDevNo; pData[w].m_wDevPtNo = w+1; float ffValue = CW(*pwOrigValue++); if ((w == 10) || (w == 11) || (w == 12) || (w == 13) || (w == 14)) ffValue -= 0x8000; pData[w].m_fValue = ffValue; } m_pAllMgr->YC(pData,(WORD)bySize/2); delete pData;*/}/*void CCSCMas::ExpYXData(BYTE byAddr,BYTE* pbyData,BYTE bySize,BYTE byOrder){ if ((pbyData == NULL) || (bySize < 2)) return; BYTE* pbyTemp = pbyData+1; WORD* pw = (WORD *)pbyTemp; for (BYTE b=0; b<bySize/2;b++) *pw++ = CW(*pw); YXData* pYXData = new YXData [(bySize-1)*8]; WORD wDevNo = m_subdevmgr.GetDevNoFrmAddr(byAddr); for (BYTE by=0; by<(bySize-1); by++) { BYTE byA = 1; BYTE byValue = *pbyTemp++; for (BYTE b=0; b<8; b++,byA<<=1) { pYXData[b+8*by].m_wDevNo = wDevNo; WORD ptno = pYXData[b+8*by].m_wDevPtNo =b+8*by + 1 + ((byOrder == 1) ? 80 : 0); pYXData[b+8*by].m_bValue = bool(byValue & byA); if (ptno == 9) m_b9[wDevNo] = pYXData[b+8*by].m_bValue; if (ptno == 10) m_b10[wDevNo] = pYXData[b+8*by].m_bValue; if (ptno == 15) m_b15[wDevNo] = pYXData[b+8*by].m_bValue; if (ptno == 17) m_b17[wDevNo] = pYXData[b+8*by].m_bValue; } } m_pAllMgr->YX(pYXData, (bySize-1)*8); delete [] pYXData;}void CCSCMas::ExpEventData(BYTE byAddr,BYTE* pbyData,BYTE bySize){// ASSERT(bySize == 67); BYTE byEventCount; m_byExchanged = pbyData[1]; byEventCount = pbyData[2]; WORD* pw = (WORD *)&pbyData[3];// if (byEventCount > 0)// {// m_bIsAck = TRUE;// } WORD wDevNo = m_subdevmgr.GetDevNoFrmAddr(byAddr); for (BYTE b=0; b<byEventCount; b++) { struct tm gt;// CString ss;// SYSTEMTIME st; gt.tm_year = CW(*(pw + 4 + 8*b)); if (gt.tm_year<50) gt.tm_year += 100; gt.tm_mon = ((CW(*(pw + 5 + 8*b)) & 0xff00) >> 8) - 1; gt.tm_mday = CW(*(pw + 5 + 8*b)) & 0xff; gt.tm_hour = (CW(*(pw + 6 + 8*b)) & 0xff00) >> 8; gt.tm_min = CW(*(pw + 6 + 8*b)) & 0xff; gt.tm_sec = CW(*(pw + 7 + 8*b)) /1000; CTimeVal tvg(>,(CW(*(pw + 7 + 8*b)) % 1000)*1000); WORD wEventAddr = CW(*(pw + 1 + 8*b));// BYTE byDeviceNo = m_subdevmgr.GetDeviceNo(byNo); if (wEventAddr < 0xc8f0) wEventAddr = wEventAddr - 0xc100 + 80; else wEventAddr -= 0xc8f0; // cout << gt.tm_year<<"/"<<gt.tm_mon<<"/"<<gt.tm_mday<<" "<<gt.tm_hour<<":"<<gt.tm_min<<":"<<gt.tm_sec<<"."<< CW(*(pw + 7 + 8*b)) % 1000<< "/" <<wEventAddr<<endl; if ((wEventAddr != 39) && (wEventAddr != 18)) { SOEData aSOEData; aSOEData.m_ctv = tvg; aSOEData.m_bValue = (*(pw + 3 + 8*b) == 0) ?false:true; aSOEData.m_wDevNo = wDevNo; aSOEData.m_wDevPtNo = wEventAddr+1; SendSOEData(&aSOEData,1); } }}*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -