diff --git a/app/src/main/cpp/SensorsProtocol.cpp b/app/src/main/cpp/SensorsProtocol.cpp index f862bd3b..abecc266 100644 --- a/app/src/main/cpp/SensorsProtocol.cpp +++ b/app/src/main/cpp/SensorsProtocol.cpp @@ -739,7 +739,6 @@ void Gm_InitSerialComm_Test() { int i, j; - srdt.sampling = 0; srdt.PtzCmdType = Cmd_Cancel; // 云台指令类型 for(i=0; i 6*1000/TIMER_CNT) { srdt.ms_dev[i].IsNeedSerial = 0; - srdt.sampling &= 0xFB; + //srdt.sampling &= 0xFB; memset(buf, 0, sizeof(buf)); LOGI("通道%d摄像机使用完毕!可以关闭摄像机电源!", devparam[i].CameraChannel); //netportparam.SerialCameraPowerCtrl[srdt.ms_dev[i].CameraChannel-1] = 0; @@ -1453,9 +1484,8 @@ void GM_AllSerialComRecv(void) memset(recvbuf, 0, sizeof(recvbuf)); if(serialport[j].fd < 0) continue; - for(;;) - { - recvlen = read(serialport[j].fd, recvbuf, sizeof(recvbuf));/* 在串口读取字符串 */ + //for(;;) + recvlen = read(serialport[j].fd, recvbuf, sizeof(recvbuf));/* 在串口读取字符串 */ if(recvlen < 1) break; @@ -1463,7 +1493,7 @@ void GM_AllSerialComRecv(void) BytestreamLOG(buf, recvbuf, recvlen, 'I'); SerialDataProcess(srdt.curdevidx[j], recvbuf, recvlen); - } + } } @@ -1794,7 +1824,7 @@ void CameraPhotoPortDataProcess( int port) if(0 == srdt.historyimagenum[devparam[port].CameraChannel-1]) { //netportparam.SerialCameraPowerCtrl[devparam[port].CameraChannel-1] = 0; - srdt.sampling &= 0xFB; + //srdt.sampling &= 0xFB; } else @@ -1802,7 +1832,7 @@ void CameraPhotoPortDataProcess( int port) } else { - srdt.sampling &= 0xFB; + //srdt.sampling &= 0xFB; //netportparam.SerialCameraPowerCtrl[pPortParam->CameraChannel-1] = 0; } pPortParam->SerialCmdidx = -1; @@ -2169,7 +2199,7 @@ int Gm_CtrlPtzCmd(u_char channel, DWORD ptzcmd) // 2.打开串口通讯 Gm_OpenSerialPort(i); //} - srdt.sampling |= 2; + //srdt.sampling |= 2; srdt.SendStopPtzCmdTimeCnt = -1; //return 1; return Gm_Camera_Timer(); @@ -2238,7 +2268,7 @@ int Gm_Camera_Timer(void) if((SET_PRESETNO == (srdt.PtzCmdType & 0xFFFF0000)) || (MOVE_TO_PRESETNO == (srdt.PtzCmdType & 0xFFFF0000))) { - srdt.sampling &= 0xFD; + //srdt.sampling &= 0xFD; return 1; } srdt.PtzCmdType = Cmd_Cancel; @@ -2254,7 +2284,7 @@ int Gm_Camera_Timer(void) else Gm_SendPelco_pCommand(srdt.PtzCmdType); srdt.SendStopPtzCmdTimeCnt = -1; - srdt.sampling &= 0xFD; + //srdt.sampling &= 0xFD; return 1; } else @@ -2425,7 +2455,6 @@ void MakeShxyProtocolPollCommand(int portno, BYTE cmdidx) //Gm_OMC_UART_DebugHex(buf, i-2, (char*)&sendbuf[2]); } - unsigned char CalLpc(unsigned char *msg, int len) { int i; @@ -2439,18 +2468,18 @@ unsigned char CalLpc(unsigned char *msg, int len) /*************************************************************** * 读上海欣影传感器协议数据 * ***************************************************************/ -void ShxyProtocolRecvData(int commid, u_char *buf, int len)// 规约读数据处理 +void ShxyProtocolRecvData(int devno, u_char *buf, int len)// 规约读数据处理 { int i, ictime; //WORD crc, check; //SERIAL_DEV_DEF *pPortParam; SIO_PARAM_SERIAL_DEF *pPortParam; - if((commid<0) || (commid > MAX_SERIAL_DEV_NUM)) + if((devno<0) || (devno > MAX_SERIAL_DEV_NUM)) { return; } - pPortParam = &serialport[devparam[commid].commid]; + pPortParam = &serialport[devparam[devno].commid]; for(i=0; im_au8RecvBuf, pPortParam->m_iRecvLen) == TRUE) { - ShxyProtocolDataProcess(commid); + ShxyProtocolDataProcess(devno); pPortParam->m_iRevStatus = 0; pPortParam->RevCmdFlag = 1; } @@ -2563,7 +2592,7 @@ int CheckShxyProtocolLpcError( u_char* msg, int len ) /********************************************************************************* 上海欣影传感器协议数据处理 **********************************************************************************/ -void ShxyProtocolDataProcess( int commid) +void ShxyProtocolDataProcess( int devno) { float fvalue, fcorvalue, *fvalua, frnb/*, fwind*/; WORD uDevAddr; @@ -2573,13 +2602,13 @@ void ShxyProtocolDataProcess( int commid) SIO_PARAM_SERIAL_DEF *curserial; char szbuf[64]; - pPortParam = &srdt.ms_dev[commid]; - curserial = &serialport[devparam[commid].commid]; + pPortParam = &srdt.ms_dev[devno]; + curserial = &serialport[devparam[devno].commid]; //取出装置地址,开始处理地址+++ if(0x02 == curserial->m_au8RecvBuf[5]) { - devparam[commid].devaddr = curserial->m_au8RecvBuf[4]; + devparam[devno].devaddr = curserial->m_au8RecvBuf[4]; return; } @@ -2613,7 +2642,7 @@ void ShxyProtocolDataProcess( int commid) slantpntmsg[aipnt][0].AiState = 1; //if ((gDisSunRain & 0x20) == 0x20) { - sprintf(szbuf, "倾角ID:%d slantangle X=%0.3f ", devparam[commid].devaddr, fvalue); + sprintf(szbuf, "倾角ID:%d slantangle X=%0.3f ", devparam[devno].devaddr, fvalue); LOGV("%s", szbuf); } //XslantSec[aipnt][srdt.SectimesamplingCnt[0]] = (short)slantpntmsg[aipnt][0].EuValue; @@ -2676,10 +2705,15 @@ void ShxyProtocolDataProcess( int commid) if((fvalue < -40) ||(fvalue > 85)) { frnb = (GeneratingRandomNumber()%101-50)/1000.0; + pPortParam->aiValue[0].EuValue *= (1+frnb); weatherpntmsg[0].EuValue *= (1+frnb); } else + { + pPortParam->aiValue[0].EuValue = fvalue*pPortParam->aiValue[0].AiParam.fFactor + pPortParam->aiValue[0].AiParam.EuValueDelta; weatherpntmsg[0].EuValue = fvalue*weatherpntmsg[0].AiParam.fFactor + weatherpntmsg[0].AiParam.EuValueDelta; + } + pPortParam->aiValue[0].AiState = 1; weatherpntmsg[0].AiState = 1; //g_SelfTest.SensorsFault |= (0x01); //if ((gDisSunRain & 0x80) == 0x80) @@ -2692,10 +2726,15 @@ void ShxyProtocolDataProcess( int commid) if((fvalue < 550) ||(fvalue > 1060)) { frnb = (GeneratingRandomNumber()%41-20)/10000.0; + pPortParam->aiValue[5].EuValue *= (1+frnb); weatherpntmsg[5].EuValue *= (1+frnb); } else + { + pPortParam->aiValue[5].EuValue = fvalue*pPortParam->aiValue[5].AiParam.fFactor + pPortParam->aiValue[5].AiParam.EuValueDelta; weatherpntmsg[5].EuValue = fvalue*weatherpntmsg[5].AiParam.fFactor + weatherpntmsg[5].AiParam.EuValueDelta; + } + pPortParam->aiValue[5].AiState = 1; weatherpntmsg[5].AiState = 1; //g_SelfTest.SensorsFault |= (0x10); //if ((gDisSunRain & 0x80) == 0x80) @@ -2708,10 +2747,15 @@ void ShxyProtocolDataProcess( int commid) if((fvalue < 0) ||(fvalue > 100)) { frnb = (GeneratingRandomNumber()%41-20)/1000.0; + pPortParam->aiValue[1].EuValue *= (1+frnb); weatherpntmsg[1].EuValue *= (1+frnb); } else + { + pPortParam->aiValue[1].EuValue = fvalue*pPortParam->aiValue[1].AiParam.fFactor + pPortParam->aiValue[1].AiParam.EuValueDelta; weatherpntmsg[1].EuValue = fvalue*weatherpntmsg[1].AiParam.fFactor + weatherpntmsg[1].AiParam.EuValueDelta; + } + pPortParam->aiValue[1].AiState = 1; weatherpntmsg[1].AiState = 1; //g_SelfTest.SensorsFault |= (0x02); //if ((gDisSunRain & 0x80) == 0x80) @@ -2728,10 +2772,15 @@ void ShxyProtocolDataProcess( int commid) if((fvalue/1000 < 0) ||(fvalue/1000 > 80)) { frnb = (GeneratingRandomNumber()%41-20)/1000.0; + pPortParam->aiValue[2].EuValue *= (1+frnb); weatherpntmsg[2].EuValue *= (1+frnb); } else + { + pPortParam->aiValue[2].EuValue = fvalue*pPortParam->aiValue[2].AiParam.fFactor + pPortParam->aiValue[2].AiParam.EuValueDelta; weatherpntmsg[2].EuValue = fvalue*weatherpntmsg[2].AiParam.fFactor + weatherpntmsg[2].AiParam.EuValueDelta; + } + pPortParam->aiValue[2].AiState = 1; weatherpntmsg[2].AiState = 1; //g_SelfTest.SensorsFault |= (0x04); //if ((gDisSunRain & 0x10) == 0x10) @@ -2748,10 +2797,15 @@ void ShxyProtocolDataProcess( int commid) if((fvalue/1000 < 0) ||(fvalue/1000 > 359.99)) { frnb = (GeneratingRandomNumber()%41-20)/1000.0; + pPortParam->aiValue[3].EuValue *= (1+frnb); weatherpntmsg[3].EuValue *= (1+frnb); } else + { + pPortParam->aiValue[3].EuValue = fvalue*pPortParam->aiValue[3].AiParam.fFactor + pPortParam->aiValue[3].AiParam.EuValueDelta; weatherpntmsg[3].EuValue = fvalue*weatherpntmsg[3].AiParam.fFactor + weatherpntmsg[3].AiParam.EuValueDelta; + } + pPortParam->aiValue[3].AiState = 1; weatherpntmsg[3].AiState = 1; //g_SelfTest.SensorsFault |= (0x08); //if ((gDisSunRain & 0x10) == 0x10) @@ -2777,56 +2831,58 @@ void ShxyProtocolDataProcess( int commid) else { #endif - pPortParam->recvdatacnt++; - if(pPortParam->recvdatacnt < 2) - break; - //g_SelfTest.SensorsFault |= (0x040<recvdatacnt++; + if(pPortParam->recvdatacnt < 2) + break; + + pPortParam->aiValue[0].EuValue = fvalue*pPortParam->aiValue[0].AiParam.fFactor\ + +pPortParam->aiValue[0].AiParam.EuValueDelta; + //rallypntmsg[aipnt][0].EuValue = fvalue*rallypntmsg[aipnt][0].AiParam.fFactor\ + // +rallypntmsg[aipnt][0].AiParam.EuValueDelta; + pPortParam->aiValue[0].AiState = 1; + //rallypntmsg[aipnt][0].AiState = 1; + sprintf(szbuf, "地址%d拉力:%0.3fKg ", devparam[devno].devaddr, fvalue); + LOGV("%s", szbuf); //} break; case 9: /*倾角传感器X轴倾角*/ if((fvalue < -59) ||(fvalue > 59)) { frnb = (GeneratingRandomNumber()%101-50)/1000.0; - slantpntmsg[aipnt][0].EuValue *= (1+frnb); + pPortParam->aiValue[0].EuValue *= (1+frnb); + //slantpntmsg[aipnt][0].EuValue *= (1+frnb); } else - slantpntmsg[aipnt][0].EuValue = fvalue*slantpntmsg[aipnt][0].AiParam.fFactor\ - +slantpntmsg[aipnt][0].AiParam.EuValueDelta; - slantpntmsg[aipnt][0].AiState = 1; - //if ((gDisSunRain & 0x20) == 0x20) { - sprintf(szbuf, "倾角ID:%d slantangle X=%0.3f ", devparam[commid].devaddr, fvalue); - LOGV("%s", szbuf); + pPortParam->aiValue[0].EuValue = fvalue*pPortParam->aiValue[0].AiParam.fFactor\ + +pPortParam->aiValue[0].AiParam.EuValueDelta; + //slantpntmsg[aipnt][0].EuValue = fvalue*slantpntmsg[aipnt][0].AiParam.fFactor\ + //+slantpntmsg[aipnt][0].AiParam.EuValueDelta; } + pPortParam->aiValue[0].AiState = 1; + //slantpntmsg[aipnt][0].AiState = 1; + sprintf(szbuf, "倾角ID:%d slantangle X=%0.3f ", devparam[devno].devaddr, fvalue); + LOGV("%s", szbuf); break; case 10: /*倾角传感器Y轴倾角*/ - { sprintf(szbuf, "Y =%0.3f ", fvalue); LOGV("%s", szbuf); - } + if((fvalue < -59) ||(fvalue > 59)) { frnb = (GeneratingRandomNumber()%101-50)/1000.0; + pPortParam->aiValue[1].EuValue *= (1+frnb); slantpntmsg[aipnt][1].EuValue *= (1+frnb); } else - slantpntmsg[aipnt][1].EuValue = fvalue*slantpntmsg[aipnt][1].AiParam.fFactor\ - +slantpntmsg[aipnt][1].AiParam.EuValueDelta; - slantpntmsg[aipnt][1].AiState = 1; + { + pPortParam->aiValue[1].EuValue = fvalue*pPortParam->aiValue[1].AiParam.fFactor\ + +pPortParam->aiValue[1].AiParam.EuValueDelta; + //slantpntmsg[aipnt][1].EuValue = fvalue*slantpntmsg[aipnt][1].AiParam.fFactor\ + // +slantpntmsg[aipnt][1].AiParam.EuValueDelta; + } + pPortParam->aiValue[1].AiState = 1; + //slantpntmsg[aipnt][1].AiState = 1; break; #if 0 case 11: /*测温球导线温度*/ diff --git a/app/src/main/cpp/SensorsProtocol.h b/app/src/main/cpp/SensorsProtocol.h index 9a4d9469..4e3802ce 100644 --- a/app/src/main/cpp/SensorsProtocol.h +++ b/app/src/main/cpp/SensorsProtocol.h @@ -35,7 +35,8 @@ typedef unsigned char BYTE; #define IOT_PARAM_READ 0xAF #define MAX_SERIAL_DEV_NUM 25 /* 最大接串口传感器数量*/ -#define MAX_SERIAL_PORT_NUM 3 /* 最大串口数量*/ +#define MAX_SERIAL_PORT_NUM 3 +#define MAX_DEV_VALUE_NUM 12 /* 一台装置最大的采样值数量*/ #define WEATHER_PROTOCOL 1 /* 温湿度协议序号*/ #define WIND_PROTOCOL 2 /* 风速风向协议序号*/ @@ -143,7 +144,7 @@ typedef struct char stopbit[8]; /* 停止位*/ char parity; /* 校验位*/ char pathname[64]; /* 串口文件名及路径*/ - int commid; /* 串口序号*/ + int commid; /* 串口序号 注意:从0开始*/ u_char ProtocolIdx; /* 规约索引,大于 0*/ int devaddr; /* 装置使用的地址*/ u_char IsNoInsta; /* 装置没有安装或者已经坏了(1:正常, 0:无效,坏了或没有安装)*/ @@ -222,6 +223,7 @@ typedef struct u_char SameTypeDevIdx; /* 相同类型装置顺序排列序号(从0开始)*/ int iRecvTime; /* 最近一次收到数据的绝对时间*/ u_char uOpenPowerFlag; /* 传感器上电标志(0:不需要打开; 1:需要打开)*/ + AI_DEF aiValue[MAX_DEV_VALUE_NUM]; /* 传感器采样值*/ } SERIAL_DEV_DEF; //串口相关装置所有参数集中定义 @@ -232,7 +234,7 @@ typedef struct u_char IsHexToAt; /* 串口1是否使用At指令(0:使用At指令;1:使用16进制数据传输)*/ - u_char sampling; /* 正在进行采样(0:没有进行采样;1:正在进行采样;)*/ + u_char sampling[5]; /* 正在进行采样(0:没有进行采样;1:正在进行采样;)*/ u_char clcyesampling; /* 正在进行采样(0:没有进行采样;1:正在进行采样;)*/ u_char camerauseserial; /* 云台指令正在使用那个串口*/ DWORD PtzCmdType; /* 云台指令类型*/