From a936a624404be4e8f60bc65564d32813bc18e1f1 Mon Sep 17 00:00:00 2001 From: huyizhong Date: Thu, 4 Jul 2024 11:19:52 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=AE=8C=E5=96=84=E9=87=87?= =?UTF-8?q?=E6=A0=B7=E5=92=8C=E5=9B=BE=E7=89=87=E6=8A=93=E6=8B=8D=E7=BB=93?= =?UTF-8?q?=E6=9D=9F=E5=90=8E=EF=BC=8C=E4=B8=8A=E5=B1=82=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=87=BD=E6=95=B0=E6=8E=A5=E5=8F=A3=EF=BC=8C?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BC=A0=E6=84=9F=E5=99=A8=E9=80=9A=E8=AE=AF?= =?UTF-8?q?=E4=B8=8D=E4=B8=8A=E6=95=85=E9=9A=9C=E5=88=A4=E6=96=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TestComm/app/src/main/cpp/SensorsProtocol.cpp | 398 +++++++++++++----- TestComm/app/src/main/cpp/SensorsProtocol.h | 82 +++- TestComm/app/src/main/cpp/WeatherComm.cpp | 20 +- app/src/main/cpp/SensorsProtocol.cpp | 398 +++++++++++++----- app/src/main/cpp/SensorsProtocol.h | 82 +++- 5 files changed, 726 insertions(+), 254 deletions(-) diff --git a/TestComm/app/src/main/cpp/SensorsProtocol.cpp b/TestComm/app/src/main/cpp/SensorsProtocol.cpp index 691345cd..a04db0eb 100644 --- a/TestComm/app/src/main/cpp/SensorsProtocol.cpp +++ b/TestComm/app/src/main/cpp/SensorsProtocol.cpp @@ -711,13 +711,6 @@ int GM_SerialComSend(unsigned char * cSendBuf, unsigned long nSendLen, int commi //memset(szbuf, 0, sizeof(szbuf)); //sprintf(szbuf, "串口%d发送%d字节:", commid+1, len); //BytestreamLOG(szbuf, cSendBuf, len, 'D'); -#if 0 - for (i = 0; i < len; i++) - { - sprintf(szbuf, "%s %02X", szbuf, cSendBuf[i]); - } - LOGE("%s", szbuf); -#endif } return len; } @@ -1217,29 +1210,29 @@ void FindDevUseSerialCommNo() { case WEATHER_PROTOCOL: case WIND_PROTOCOL: - memset(devparam[i].pathname, 0, sizeof(devparam[i].pathname)); + //memset(devparam[i].pathname, 0, sizeof(devparam[i].pathname)); /* 目前还不确定具体串口分配,暂时默认使用串口1*/ - sprintf(devparam[i].pathname, "/dev/swk0"); - devparam[i].commid = 0; + //sprintf(devparam[i].pathname, "/dev/swk3"); + devparam[i].commid = 3; break; case SLANT_PROTOCOL: - memset(devparam[i].pathname, 0, sizeof(devparam[i].pathname)); + //memset(devparam[i].pathname, 0, sizeof(devparam[i].pathname)); /* 目前还不确定具体串口分配,暂时默认使用串口1*/ - sprintf(devparam[i].pathname, "/dev/swk2"); + //sprintf(devparam[i].pathname, "/dev/swk2"); devparam[i].commid = 2; break; case RALLY_PROTOCOL: - memset(devparam[i].pathname, 0, sizeof(devparam[i].pathname)); + //memset(devparam[i].pathname, 0, sizeof(devparam[i].pathname)); /* 目前还不确定具体串口分配,暂时默认使用串口1*/ - sprintf(devparam[i].pathname, "/dev/swk1"); + //sprintf(devparam[i].pathname, "/dev/swk1"); devparam[i].commid = 1; break; case PELCO_D_PROTOCOL: /* 摄像机协议*/ case PELCO_P_PROTOCOL: /* 摄像机协议*/ case SERIALCAMERA_PROTOCOL: /* 串口摄像机协议*/ memset(devparam[i].pathname, 0, sizeof(devparam[i].pathname)); - /* 目前还不确定具体串口分配,暂时默认使用串口1*/ - sprintf(devparam[i].pathname, "/dev/ttyS0"); + /* 目前还不确定//具体串口分配,暂时默认使用串口1*/ + //sprintf(devparam[i].pathname, "/dev/ttyS1"); devparam[i].commid = 0; srdt.camerauseserial = 0; break; @@ -1274,7 +1267,7 @@ void GM_StartSerialComm() continue; serialport[i].Retry = 0; //serialport[i].RetryTime = 500/TIMER_CNT; - serialport[i].RetryTime = 300/TIMER_CNT; + serialport[i].RetryTime = 300; serialport[i].WaitTime = 0; serialport[i].m_iRevStatus = 0; serialport[i].m_iRecvLen = 0; @@ -1321,22 +1314,31 @@ void GM_StartSerialComm() srdt.ms_dev[i].IsNeedSerial = 1; srdt.ms_dev[i].FirstCmdTimeCnt = get_msec(); srdt.ms_dev[i].recvdatacnt = 0; + for(j=0; j 0 )) { srdt.ms_dev[i].SerialCmdidx = 10017; @@ -1498,7 +1502,6 @@ void GM_StartSerialCameraPhoto(BYTE channel, int cmdidx) Gm_OpenSensorsPower(); Gm_OpenSerialPort(i); } - } if(0x01 == flag) { @@ -1512,7 +1515,7 @@ void GM_StartSerialCameraPhoto(BYTE channel, int cmdidx) if(GM_SerialTimer() < 0) { //LOGE("12V state=%d", getInt(CMD_SET_12V_EN_STATE)); - LOGV("退出采样流程!"); + LOGV("退出拍照流程!"); //sleep(15); //GM_StartSerialComm(); //GM_StartSerialCameraPhoto(1,0); @@ -1544,7 +1547,7 @@ int GM_SerialTimer(void) 输出参数: 其它说明: *********************************************************************************/ -void Gm_FindAllSensorsCommand(void) +void Gm_FindAllSensorsCommand() { int i, j,curidx,flag; @@ -1608,9 +1611,9 @@ void Gm_FindAllSensorsCommand(void) 输出参数: 其它说明: *********************************************************************************/ -void GM_IsCloseSensors(void) +void GM_IsCloseSensors() { - int i; + int i, j; char buf[256]; for(i=0; iimage.presetno, pPortParam->image.phototime); - fp = fopen(filename, "wb+"); + memset(pPortParam->image.photoname, 0, sizeof(pPortParam->image.photoname)); + sprintf(pPortParam->image.photoname, "%s%d-%d-%d.jpg", filedir,devparam[devno].CameraChannel, pPortParam->image.presetno, pPortParam->image.phototime); + fp = fopen(pPortParam->image.photoname, "wb+"); if(NULL == fp) return -1; len = fwrite(image,1, pPortParam->image.imagelen, fp); @@ -1781,7 +1802,7 @@ int SaveImageDataTofile(int devno) return -1; else { - LOGI("写入图片文件%s成功!", filename); + LOGI("写入图片文件%s成功!", pPortParam->image.photoname); return 1; } } @@ -1937,6 +1958,7 @@ void CameraPhotoPortDataProcess( int devno) LOGV("%s", szbuf); presetno = (int)rtumsg.MsgData[i+8]; pPortParam->image.presetno = presetno; + pPortParam->image.state = Sample; curserial->RevCmdFlag = 1; pPortParam->SerialCmdidx = 1; srdt.sendphotocmdcnt = 0; @@ -1967,7 +1989,8 @@ void CameraPhotoPortDataProcess( int devno) } else { - SaveImageDataTofile(devno); + if((1 == SaveImageDataTofile(devno)) && (Sample == pPortParam->image.state)) + pPortParam->image.state = PHOTO_SAVE_SUCC; recvend = 1; } } @@ -2085,9 +2108,11 @@ void SendCmdFormPollCmdBuf( int port ) { char buf[64]; int len, ret; + long lctime; SIO_PARAM_SERIAL_DEF *pPortParam; pPortParam = &serialport[port]; + lctime = get_msec(); if(pPortParam->ForceWaitFlag && pPortParam->ForceWaitCnt) { pPortParam->ForceWaitCnt--; @@ -2096,12 +2121,18 @@ void SendCmdFormPollCmdBuf( int port ) if(pPortParam->SendCmdFlag && (pPortParam->RevCmdFlag == 0)) { - pPortParam->RetryTimeCnt++; - if(pPortParam->RetryTimeCnt < pPortParam->RetryTime) + //pPortParam->RetryTimeCnt++; + if((lctime - pPortParam->RetryTimeCnt > 3*pPortParam->RetryTime) || (lctime - pPortParam->RetryTimeCnt < 0)) { + pPortParam->RetryTimeCnt = lctime; return; } - pPortParam->RetryTimeCnt = 0; + if(lctime - pPortParam->RetryTimeCnt < pPortParam->RetryTime) + //if(pPortParam->RetryTimeCnt < pPortParam->RetryTime) + { + return; + } + pPortParam->RetryTimeCnt = lctime; pPortParam->RetryCnt++; if(pPortParam->RetryCnt > pPortParam->Retry) { @@ -2156,16 +2187,16 @@ void SendCmdFormPollCmdBuf( int port ) sprintf(buf, "发送串口%d 装置%d命令:", port+1, srdt.curdevidx[port]+1); BytestreamLOG(buf, &pPortParam->PollCmd[2], len, 'D'); - LOGW("sendtimeconst= %ld", get_msec()-lsendtime); - lsendtime = get_msec(); + LOGW("sendtimeconst= %ld", lctime-lsendtime); + lsendtime = lctime; } pPortParam->SendCmdFlag = 1; pPortParam->ReSendCmdFlag = 0; pPortParam->RevCmdFlag = 0; - pPortParam->RetryTimeCnt = 0; + pPortParam->RetryTimeCnt = lctime; - //pPortParam->ForceWaitCnt = pPortParam->PollCmd[0]*256+pPortParam->PollCmd[1]+TIMER_CNT-1; - //pPortParam->ForceWaitCnt /= TIMER_CNT; + pPortParam->ForceWaitCnt = pPortParam->PollCmd[0]*256+pPortParam->PollCmd[1]+TIMER_CNT-1; + pPortParam->ForceWaitCnt /= TIMER_CNT; if(pPortParam->ForceWaitCnt) { pPortParam->ForceWaitFlag = 1; @@ -2178,7 +2209,7 @@ void ClearCmdAllFlag(int commid) return; serialport[commid].RetryCnt = 0; - serialport[commid].RetryTimeCnt = 0; + serialport[commid].RetryTimeCnt = get_msec(); serialport[commid].WaitTimeCnt = 0; serialport[commid].ForceWaitFlag = 0; serialport[commid].ForceWaitCnt = 0; @@ -2575,7 +2606,7 @@ int Gm_CtrlPtzCmd(u_char channel, DWORD ptzcmd) } // 发送转动摄像机云台命令定时器 -int Gm_Camera_Timer(void) +int Gm_Camera_Timer() { char szbuf[128]; @@ -3010,12 +3041,14 @@ void ShxyProtocolDataProcess( int devno) if((fvalue < -59) ||(fvalue > 59)) { frnb = (GeneratingRandomNumber()%101-50)/1000.0; - slantpntmsg[aipnt][0].EuValue *= (1+frnb); + pPortParam->aiValue[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; + pPortParam->aiValue[0].EuValue = fvalue; + pPortParam->aiValue[0].AiState = Sample; + //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[devno].devaddr, fvalue); @@ -3036,12 +3069,15 @@ void ShxyProtocolDataProcess( int devno) if((fvalue < -59) ||(fvalue > 59)) { frnb = (GeneratingRandomNumber()%101-50)/1000.0; - slantpntmsg[aipnt][1].EuValue *= (1+frnb); + pPortParam->aiValue[1].EuValue *= (1+frnb); + //slantpntmsg[aipnt][1].EuValue *= (1+frnb); } else - slantpntmsg[aipnt][1].EuValue = fvalue*slantpntmsg[aipnt][1].AiParam.fFactor\ + pPortParam->aiValue[1].EuValue = fvalue; + pPortParam->aiValue[1].AiState = Sample; + /*slantpntmsg[aipnt][1].EuValue = fvalue*slantpntmsg[aipnt][1].AiParam.fFactor\ +slantpntmsg[aipnt][1].AiParam.EuValueDelta; - slantpntmsg[aipnt][1].AiState = 1; + slantpntmsg[aipnt][1].AiState = 1;*/ //YslantSec[aipnt][srdt.SectimesamplingCnt[1]] = (short)slantpntmsg[aipnt][1].EuValue; srdt.SectimesamplingCnt[1] += 1; } @@ -3049,20 +3085,6 @@ void ShxyProtocolDataProcess( int devno) if((0x08 != cmdidx) && (0x09 != cmdidx)) return; -#if 0 - if(1 == srdt.IsReadWireTem) - { - for(i=0; iSameTypeDevIdx; - } -#endif for(i = 0, j=7; (im_au8RecvBuf[1]); i++, j+=5 ) { if(0x08 == cmdidx) @@ -3076,21 +3098,24 @@ void ShxyProtocolDataProcess( int devno) *((BYTE*)fvalua+3) = curserial->m_au8RecvBuf[j+1]; } switch(curserial->m_au8RecvBuf[j]) - { + {slantpntmsg[aipnt][1].EuValue *= (1+frnb)slantpntmsg[aipnt][1].EuValue *= (1+frnb); + + case 1: /*温度*/ if((fvalue < -40) ||(fvalue > 85)) { frnb = (GeneratingRandomNumber()%101-50)/1000.0; - pPortParam->aiValue[0].EuValue *= (1+frnb); + pPortParam->aiValue[AirTempNo].EuValue *= (1+frnb); weatherpntmsg[AirTempNo].EuValue *= (1+frnb); + //weatherpntmsg[AirTempNo].AiState = Sample; } else { - pPortParam->aiValue[0].EuValue = fvalue*pPortParam->aiValue[0].AiParam.fFactor + pPortParam->aiValue[0].AiParam.EuValueDelta; - weatherpntmsg[AirTempNo].EuValue = fvalue*weatherpntmsg[AirTempNo].AiParam.fFactor + weatherpntmsg[AirTempNo].AiParam.EuValueDelta; + pPortParam->aiValue[AirTempNo].EuValue = fvalue;/*pPortParam->aiValue[0].AiParam.fFactor + pPortParam->aiValue[0].AiParam.EuValueDelta;*/ + weatherpntmsg[AirTempNo].EuValue = fvalue;/*weatherpntmsg[AirTempNo].AiParam.fFactor + weatherpntmsg[AirTempNo].AiParam.EuValueDelta;*/ } - pPortParam->aiValue[0].AiState = 1; - weatherpntmsg[AirTempNo].AiState = 1; + pPortParam->aiValue[AirTempNo].AiState = Sample; + weatherpntmsg[AirTempNo].AiState = Sample; //g_SelfTest.SensorsFault |= (0x01); //if ((gDisSunRain & 0x80) == 0x80) { @@ -3102,16 +3127,16 @@ void ShxyProtocolDataProcess( int devno) if((fvalue < 550) ||(fvalue > 1060)) { frnb = (GeneratingRandomNumber()%41-20)/10000.0; - pPortParam->aiValue[5].EuValue *= (1+frnb); + pPortParam->aiValue[AtmosNo].EuValue *= (1+frnb); weatherpntmsg[AtmosNo].EuValue *= (1+frnb); } else { - pPortParam->aiValue[5].EuValue = fvalue*pPortParam->aiValue[5].AiParam.fFactor + pPortParam->aiValue[5].AiParam.EuValueDelta; - weatherpntmsg[AtmosNo].EuValue = fvalue*weatherpntmsg[AtmosNo].AiParam.fFactor + weatherpntmsg[AtmosNo].AiParam.EuValueDelta; + pPortParam->aiValue[AtmosNo].EuValue = fvalue;/*pPortParam->aiValue[5].AiParam.fFactor + pPortParam->aiValue[5].AiParam.EuValueDelta;*/ + weatherpntmsg[AtmosNo].EuValue = fvalue;/*weatherpntmsg[AtmosNo].AiParam.fFactor + weatherpntmsg[AtmosNo].AiParam.EuValueDelta;*/ } - pPortParam->aiValue[5].AiState = 1; - weatherpntmsg[AtmosNo].AiState = 1; + pPortParam->aiValue[AtmosNo].AiState = Sample; + weatherpntmsg[AtmosNo].AiState = Sample; //g_SelfTest.SensorsFault |= (0x10); //if ((gDisSunRain & 0x80) == 0x80) { @@ -3123,16 +3148,16 @@ void ShxyProtocolDataProcess( int devno) if((fvalue < 0) ||(fvalue > 100)) { frnb = (GeneratingRandomNumber()%41-20)/1000.0; - pPortParam->aiValue[1].EuValue *= (1+frnb); + pPortParam->aiValue[HumidityNo].EuValue *= (1+frnb); weatherpntmsg[HumidityNo].EuValue *= (1+frnb); } else { - pPortParam->aiValue[1].EuValue = fvalue*pPortParam->aiValue[1].AiParam.fFactor + pPortParam->aiValue[1].AiParam.EuValueDelta; - weatherpntmsg[HumidityNo].EuValue = fvalue*weatherpntmsg[HumidityNo].AiParam.fFactor + weatherpntmsg[HumidityNo].AiParam.EuValueDelta; + pPortParam->aiValue[HumidityNo].EuValue = fvalue;/*pPortParam->aiValue[1].AiParam.fFactor + pPortParam->aiValue[1].AiParam.EuValueDelta;*/ + weatherpntmsg[HumidityNo].EuValue = fvalue;/*weatherpntmsg[HumidityNo].AiParam.fFactor + weatherpntmsg[HumidityNo].AiParam.EuValueDelta;*/ } - pPortParam->aiValue[1].AiState = 1; - weatherpntmsg[HumidityNo].AiState = 1; + pPortParam->aiValue[HumidityNo].AiState = Sample; + weatherpntmsg[HumidityNo].AiState = Sample; //g_SelfTest.SensorsFault |= (0x02); //if ((gDisSunRain & 0x80) == 0x80) { @@ -3145,19 +3170,19 @@ void ShxyProtocolDataProcess( int devno) case 5: /*日照*/ break; case 6: /*风速*/ - if((fvalue/1000 < 0) ||(fvalue/1000 > 80)) + if((fvalue < 0) ||(fvalue > 80)) { frnb = (GeneratingRandomNumber()%41-20)/1000.0; - pPortParam->aiValue[2].EuValue *= (1+frnb); + pPortParam->aiValue[WindSpeedNo].EuValue *= (1+frnb); weatherpntmsg[WindSpeedNo].EuValue *= (1+frnb); } else { - pPortParam->aiValue[2].EuValue = fvalue*pPortParam->aiValue[2].AiParam.fFactor + pPortParam->aiValue[2].AiParam.EuValueDelta; - weatherpntmsg[WindSpeedNo].EuValue = fvalue*weatherpntmsg[WindSpeedNo].AiParam.fFactor + weatherpntmsg[WindSpeedNo].AiParam.EuValueDelta; + pPortParam->aiValue[WindSpeedNo].EuValue = fvalue;/*pPortParam->aiValue[2].AiParam.fFactor + pPortParam->aiValue[2].AiParam.EuValueDelta;*/ + weatherpntmsg[WindSpeedNo].EuValue = fvalue;/*weatherpntmsg[WindSpeedNo].AiParam.fFactor + weatherpntmsg[WindSpeedNo].AiParam.EuValueDelta;*/ } - pPortParam->aiValue[2].AiState = 1; - weatherpntmsg[WindSpeedNo].AiState = 1; + pPortParam->aiValue[WindSpeedNo].AiState = Sample; + weatherpntmsg[WindSpeedNo].AiState = Sample; //g_SelfTest.SensorsFault |= (0x04); //if ((gDisSunRain & 0x10) == 0x10) { @@ -3173,16 +3198,16 @@ void ShxyProtocolDataProcess( int devno) if((fvalue/1000 < 0) ||(fvalue/1000 > 359.99)) { frnb = (GeneratingRandomNumber()%41-20)/1000.0; - pPortParam->aiValue[3].EuValue *= (1+frnb); + pPortParam->aiValue[WindDirectionNo].EuValue *= (1+frnb); weatherpntmsg[WindDirectionNo].EuValue *= (1+frnb); } else { - pPortParam->aiValue[3].EuValue = fvalue*pPortParam->aiValue[3].AiParam.fFactor + pPortParam->aiValue[3].AiParam.EuValueDelta; - weatherpntmsg[WindDirectionNo].EuValue = fvalue*weatherpntmsg[WindDirectionNo].AiParam.fFactor + weatherpntmsg[WindDirectionNo].AiParam.EuValueDelta; + pPortParam->aiValue[WindDirectionNo].EuValue = fvalue;/*pPortParam->aiValue[3].AiParam.fFactor + pPortParam->aiValue[3].AiParam.EuValueDelta;*/ + weatherpntmsg[WindDirectionNo].EuValue = fvalue;/*weatherpntmsg[WindDirectionNo].AiParam.fFactor + weatherpntmsg[WindDirectionNo].AiParam.EuValueDelta;*/ } - pPortParam->aiValue[3].AiState = 1; - weatherpntmsg[WindDirectionNo].AiState = 1; + pPortParam->aiValue[WindDirectionNo].AiState = Sample; + weatherpntmsg[WindDirectionNo].AiState = Sample; //g_SelfTest.SensorsFault |= (0x08); //if ((gDisSunRain & 0x10) == 0x10) { @@ -3211,11 +3236,11 @@ void ShxyProtocolDataProcess( int devno) if(pPortParam->recvdatacnt < 2) break; - pPortParam->aiValue[0].EuValue = fvalue*pPortParam->aiValue[0].AiParam.fFactor\ - +pPortParam->aiValue[0].AiParam.EuValueDelta; + 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; + pPortParam->aiValue[0].AiState = Sample; //rallypntmsg[aipnt][0].AiState = 1; sprintf(szbuf, "地址%d拉力:%0.3fKg ", devparam[devno].devaddr, fvalue); LOGV("%s", szbuf); @@ -3230,12 +3255,12 @@ void ShxyProtocolDataProcess( int devno) } else { - pPortParam->aiValue[0].EuValue = fvalue*pPortParam->aiValue[0].AiParam.fFactor\ - +pPortParam->aiValue[0].AiParam.EuValueDelta; + 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; + pPortParam->aiValue[0].AiState = Sample; //slantpntmsg[aipnt][0].AiState = 1; sprintf(szbuf, "倾角ID:%d slantangle X=%0.3f ", devparam[devno].devaddr, fvalue); LOGV("%s", szbuf); @@ -3248,16 +3273,13 @@ void ShxyProtocolDataProcess( int devno) { frnb = (GeneratingRandomNumber()%101-50)/1000.0; pPortParam->aiValue[1].EuValue *= (1+frnb); - slantpntmsg[aipnt][1].EuValue *= (1+frnb); } else { - 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].EuValue = fvalue;/*pPortParam->aiValue[1].AiParam.fFactor\ + +pPortParam->aiValue[1].AiParam.EuValueDelta;*/ } - pPortParam->aiValue[1].AiState = 1; + pPortParam->aiValue[1].AiState = Sample; //slantpntmsg[aipnt][1].AiState = 1; break; #if 0 @@ -3466,6 +3488,7 @@ int GeneratingRandomNumber(void) return randomdate; } +/* 串口启动接口函数 开始*/ void Collect_sensor_data(SENSOR_PARAM *sensorParam) { int i; @@ -3478,6 +3501,8 @@ void Collect_sensor_data(SENSOR_PARAM *sensorParam) devparam[i].ProtocolIdx = sensorParam[i].SensorsType; devparam[i].devaddr = sensorParam[i].devaddr; devparam[i].baudrate = getBaudrate(sensorParam[i].baudrate); + memset(devparam[i].pathname, 0, sizeof(devparam[i].pathname)); + memmove(devparam[i].pathname, sensorParam[i].pathname, sizeof(devparam[i].pathname)); devparam[i].databit = sensorParam[i].databit; devparam[i].stopbit = (int)sensorParam[i].stopbit*10; devparam[i].CameraChannel = sensorParam[i].CameraChannel; @@ -3521,14 +3546,183 @@ void CameraPhotoCmd(SENSOR_PARAM *sensorParam, u_char channel, int cmdidx, u_cha //GM_StartSerialComm(); GM_StartSerialCameraPhoto(1, cmdidx); } +/* 串口启动接口函数 结束*/ -int GetAirTempData(Data_DEF *airt) +/* 数据和图片采集数据返回函数 开始*/ +int GetWeatherData(Data_DEF *data, int datano) { - int i; + int i; + + if(NULL == data) + return -1; + if((AirTempNo > datano) || (datano > OpticalRadiationNo)) + return -1; + data->EuValue = weatherpntmsg[datano].EuValue; + data->AiState = weatherpntmsg[datano].AiState; + if((SampleFail == data->AiState) || (SamplingSuccess == data->AiState)) + { + weatherpntmsg[datano].AiState = Idle; + return 2; + } + return 1; +} +int GetAirTempData(Data_DEF *airt) +{ if(NULL == airt) return -1; airt->EuValue = weatherpntmsg[AirTempNo].EuValue; airt->AiState = weatherpntmsg[AirTempNo].AiState; + if((SampleFail == airt->AiState) || (SamplingSuccess == airt->AiState)) + { + weatherpntmsg[AirTempNo].AiState = Idle; + return 2; + } + return 1; } +int GetHumidityData(Data_DEF *airt) +{ + if(NULL == airt) + return -1; + airt->EuValue = weatherpntmsg[HumidityNo].EuValue; + airt->AiState = weatherpntmsg[HumidityNo].AiState; + if((SampleFail == airt->AiState) || (SamplingSuccess == airt->AiState)) + { + weatherpntmsg[HumidityNo].AiState = Idle; + return 2; + } + return 1; +} + +int GetWindSpeedData(Data_DEF *airt) +{ + if(NULL == airt) + return -1; + airt->EuValue = weatherpntmsg[WindSpeedNo].EuValue; + airt->AiState = weatherpntmsg[WindSpeedNo].AiState; + if((SampleFail == airt->AiState) || (SamplingSuccess == airt->AiState)) + { + weatherpntmsg[WindSpeedNo].AiState = Idle; + return 2; + } + return 1; +} + +int GetWindDirectionData(Data_DEF *airt) +{ + if(NULL == airt) + return -1; + airt->EuValue = weatherpntmsg[WindDirectionNo].EuValue; + airt->AiState = weatherpntmsg[WindDirectionNo].AiState; + if((SampleFail == airt->AiState) || (SamplingSuccess == airt->AiState)) + { + weatherpntmsg[WindDirectionNo].AiState = Idle; + return 2; + } + return 1; +} + +int GetRainfallData(Data_DEF *airt) +{ + if(NULL == airt) + return -1; + airt->EuValue = weatherpntmsg[RainfallNo].EuValue; + airt->AiState = weatherpntmsg[RainfallNo].AiState; + if((SampleFail == airt->AiState) || (SamplingSuccess == airt->AiState)) + { + weatherpntmsg[RainfallNo].AiState = Idle; + return 2; + } + return 1; +} + +int GetAtmosData(Data_DEF *airt) +{ + if(NULL == airt) + return -1; + airt->EuValue = weatherpntmsg[AtmosNo].EuValue; + airt->AiState = weatherpntmsg[AtmosNo].AiState; + if((SampleFail == airt->AiState) || (SamplingSuccess == airt->AiState)) + { + weatherpntmsg[AtmosNo].AiState = Idle; + return 2; + } + return 1; +} + +int GetOpticalRadiationData(Data_DEF *airt) +{ + if(NULL == airt) + return -1; + airt->EuValue = weatherpntmsg[OpticalRadiationNo].EuValue; + airt->AiState = weatherpntmsg[OpticalRadiationNo].AiState; + if((SampleFail == airt->AiState) || (SamplingSuccess == airt->AiState)) + { + weatherpntmsg[OpticalRadiationNo].AiState = Idle; + return 2; + } + return 1; +} + +int GetPullValue(int devno, Data_DEF *data) +{ + if(NULL == data) + return -1; + if((0>devno)||(MAX_SERIAL_DEV_NUM < devno)) + return -1; + if(RALLY_PROTOCOL != devparam[devno].ProtocolIdx) + return -1; + data->EuValue = srdt.ms_dev[devno].aiValue[0].EuValue; + data->AiState = srdt.ms_dev[devno].aiValue[0].AiState; + if((SampleFail == data->AiState) || (SamplingSuccess == data->AiState)) + { + srdt.ms_dev[devno].aiValue[0].AiState = Idle; + return 2; + } + return 1; +} + +int GetAngleValue(int devno, Data_DEF *data, int Xy) +{ + if(NULL == data) + return -1; + if((0>devno)||(MAX_SERIAL_DEV_NUM < devno)) + return -1; + if(SLANT_PROTOCOL != devparam[devno].ProtocolIdx) + return -1; + if((0 > Xy) || (1 < Xy)) + return -1; + + data->EuValue = srdt.ms_dev[devno].aiValue[Xy].EuValue; + data->AiState = srdt.ms_dev[devno].aiValue[Xy].AiState; + if((SampleFail == data->AiState) || (SamplingSuccess == data->AiState)) + { + srdt.ms_dev[devno].aiValue[Xy].AiState = Idle; + return 2; + } + return 1; +} + +int GetImage(int devno, IMAGE_DEF *photo) +{ + if(NULL == photo) + return -1; + if((0>devno)||(MAX_SERIAL_DEV_NUM < devno)) + return -1; + if((PELCO_D_PROTOCOL != devparam[devno].ProtocolIdx) && (PELCO_P_PROTOCOL != devparam[devno].ProtocolIdx) &&(SERIALCAMERA_PROTOCOL != devparam[devno].ProtocolIdx)) + return -1; + photo->presetno = srdt.ms_dev[devno].image.presetno; + photo->phototime = srdt.ms_dev[devno].image.phototime; + memset(photo->photoname, 0, sizeof(photo->photoname)); + memmove(photo->photoname, srdt.ms_dev[devno].image.photoname, sizeof(photo->photoname)); + photo->imagelen = srdt.ms_dev[devno].image.imagelen; + photo->state = srdt.ms_dev[devno].image.state; + if((SampleFail == photo->state) || (SamplingSuccess == photo->state)) + { + srdt.ms_dev[devno].image.state = Idle; + return 2; + } + return 1; +} +/* 数据和图片采集数据返回函数 结束*/ \ No newline at end of file diff --git a/TestComm/app/src/main/cpp/SensorsProtocol.h b/TestComm/app/src/main/cpp/SensorsProtocol.h index b02ad142..f534e80f 100644 --- a/TestComm/app/src/main/cpp/SensorsProtocol.h +++ b/TestComm/app/src/main/cpp/SensorsProtocol.h @@ -61,9 +61,10 @@ typedef unsigned char BYTE; #define Idle 0 /* 传感器处于空闲状态,未启动采样*/ #define Sample 1 /* 正在采样过程中*/ -#define SamplingEnd 2 /* 采样结束*/ +#define SamplingSuccess 2 /* 采样结束,正常读取到数据*/ #define StartSample 3 /* 启动采样*/ -#define SampleFail -1 /* 采样失败,传感器故障或未接*/ +#define SampleFail -1 /* 采样失败,未采集到数据,传感器故障或未接*/ +#define PHOTO_SAVE_SUCC 5 /* 图片保存成功*/ #define WEATHER_DATA_NUM 8 /* 气象数据最大数量(一般最多是6要素)*/ #define RALLY_DATA_NUM 2 /* 拉力数据最大数量(一般是1个)*/ @@ -110,6 +111,9 @@ typedef unsigned char BYTE; #define D_MOVE_RIGHT 0x00022d00 /* 向右移动镜头(1 有效)*/ /* 摄像机下发命令宏定义*/ +#define Take_Photo 0 /* 拍照*/ +#define Stop_Baud 10000 /* 设置球机波特率*/ +#define Stop_Cmd 10005 /* 取消或停止指令*/ #define Auto_Scan 10006 /* 自动扫描功能控制(1/0 打开/关闭该功能)*/ #define IRIS_CLOSE 10007 /* 光圈缩小(1 有效)*/ #define IRIS_OPEN 10008 /* 光圈放大(1 有效)*/ @@ -121,7 +125,8 @@ typedef unsigned char BYTE; #define MOVE_UP 10014 /* 向上移动镜头(1 有效)*/ #define MOVE_LEFT 10015 /* 向左移动镜头(1 有效)*/ #define MOVE_RIGHT 10016 /* 向右移动镜头(1 有效)*/ - +#define MOVE_PRESETNO 10017 // 调用预置点 +#define SAVE_PRESETNO 10018 // 设置预置点 #define SPEED_DOME_CAMERA 0 /* 球机摄像机*/ #define SERIAL_CAMERA 2 /* 串口摄像机a*/ @@ -171,14 +176,25 @@ typedef struct float EuValue; // 数据工程值 } Data_DEF; +typedef struct +{ + int imagelen; // 整个图片大小 + int phototime; // 拍照时间 + u_char presetno; // 拍照预置点 + char photoname[512]; // 图片存储名称和路径 + int state;// 标识(-1:拍照失败;0:没有拍照;1:正在取图;2:拍照成功;3:启动拍照;) +} IMAGE_DEF; + typedef struct { int imagelen; // 整个图片大小 int imagenum; // 整个图片的总包数 int phototime; // 拍照时间 u_char presetno; // 拍照预置点 + char photoname[512]; // 图片存储名称和路径 u_char buf[MAX_PHOTO_PACKET_NUM][MAX_PHOTO_FRAME_LEN]; // 图片数据缓存 int ilen[MAX_PHOTO_PACKET_NUM]; // 相对应的每包图片数据的长度 + int state;// 标识(-1:拍照失败;0:没有拍照;1:正在取图;2:拍照成功;3:启动拍照;) } PHOTO_DEF; // 上层调用采集传感器参数 @@ -188,6 +204,7 @@ typedef struct int databit; /* 数据位*/ float stopbit; /* 停止位*/ char parity; /* 校验位*/ + char pathname[64]; /* 串口文件名及路径*/ //int commNo; /* 约定的串口序号,例如我们PC机上显示的COM1。。。*/ u_char SensorsType; /* 传感器类型索引,大于 0*/ int devaddr; /* 装置(传感器)使用的地址*/ @@ -225,8 +242,8 @@ typedef struct //******************** Poll Cmd **************************** u_char Retry; /* 重试命令次数 */ u_char RetryCnt; /* 重试命令计数*/ - u_long RetryTime; /* 重试命令时间 */ - u_long RetryTimeCnt; /* 重试命令时间计数*/ + long RetryTime; /* 重试命令时间 */ + long RetryTimeCnt; /* 重试命令时间计数*/ u_long WaitTime; /* 命令间隔时间 */ u_long WaitTimeCnt; /* 命令间隔时间计数*/ u_char ForceWaitFlag; /* 强制等待标志*/ @@ -343,7 +360,7 @@ static void setCam3V3Enable(bool enabled); // 串口相关的所有函数定义 /* 打开串口电源*/ -void Gm_OpenSerialPower(void); +void Gm_OpenSerialPower(); // 打开传感器电源 void Gm_OpenSensorsPower(); @@ -354,27 +371,26 @@ void Gm_CloseSensorsPower(int port); void Gm_OpenSerialPort(int devidx); // 关闭串口通讯 -void Gm_CloseSerialPort(void); +void Gm_CloseSerialPort(); // 功能说明:串口发送数据 返回实际发送的字节数 int GM_SerialComSend(const unsigned char * cSendBuf, unsigned long nSendLen, int commid); void Gm_InitSerialComm(); -void Collect_sensor_data(SENSOR_PARAM *sensorParam); // 启动串口通讯 -void GM_StartSerialComm(void); +void GM_StartSerialComm(); // 启动使用串口拍照 void GM_StartSerialCameraPhoto(BYTE channel, int cmdidx); // 串口轮询通讯定时器 -int GM_SerialTimer(void); +int GM_SerialTimer(); //轮询所有串口和传感器是否需要生成下发命令 -void Gm_FindAllSensorsCommand(void); +void Gm_FindAllSensorsCommand(); //检查所有传感器是否采集完毕,采集完毕的关闭传感器电源 -void GM_IsCloseSensors(void); +void GM_IsCloseSensors(); //检查所有串口是否有数据接收,有则启动接收 -void GM_AllSerialComRecv(void); +void GM_AllSerialComRecv(); //判断是否需要关闭定时器 -int GM_CloseTimer(void); +int GM_CloseTimer(); // 串口接收数据处理 void SerialDataProcess(int devidx, u_char *buf, int len); @@ -402,7 +418,7 @@ void ClearCmdFormPollCmdBuf(int port); int Gm_CtrlPtzCmd(u_char channel, DWORD ptzcmd); // 发送转动摄像机云台命令定时器 -int Gm_Camera_Timer(void); +int Gm_Camera_Timer(); // 生成 PELCO_P 命令 * void Gm_SendPelco_pCommand( DWORD cmdtype); @@ -418,10 +434,10 @@ BYTE Gm_Pelco_DCheck( BYTE *msg, int len ); char Gm_GetSensorsPowerState(int port); // 通过传感器使用的航空头查找传感器使用的串口序号 -void FindDevUseSerialCommNo(void); +void FindDevUseSerialCommNo(); // 初始化所有串口及所接传感器的配置 -void Gm_InitSerialComm(void); +void Gm_InitSerialComm(); // 寻找并生成下一条倾角命令 int FindNextShxyProtocolCommand( int devidx ); @@ -443,13 +459,35 @@ void ShxyProtocolDataProcess( int commid); //void Gm_CtrlCloseSensorsPower(int devidx); // 检查传感器电源是否应该关闭或打开 //void Gm_CheckSensorsPower(void); -int Gm_SetSerialPortBaud(int commid); -// 得到串口波特率 -//T_baudrate Gm_GetSerialPortBaud(UART_baudrate Baudrate); +int SaveImageDataTofile(int devno); +void Collect_sensor_data(SENSOR_PARAM *sensorParam); -void Gm_CloseSerialCamera(); void CameraPhotoCmd(SENSOR_PARAM *sensorParam, u_char channel, int cmdidx, u_char bImageSize, u_char presetno); -int SaveImageDataTofile(int devno); + + +/* 数据和图片采集数据返回函数 开始*/ +int GetWeatherData(Data_DEF *data, int datano); + +int GetAirTempData(Data_DEF *airt); + +int GetHumidityData(Data_DEF *airt); + +int GetWindSpeedData(Data_DEF *airt); + +int GetWindDirectionData(Data_DEF *airt); + +int GetRainfallData(Data_DEF *airt); + +int GetAtmosData(Data_DEF *airt); + +int GetOpticalRadiationData(Data_DEF *airt); + +int GetPullValue(int devno, Data_DEF *data); + +int GetAngleValue(int devno, Data_DEF *data, int Xy); + +int GetImage(int devno, IMAGE_DEF *photo); +/* 数据和图片采集数据返回函数 结束*/ // 生成一个随机整数 int GeneratingRandomNumber(); diff --git a/TestComm/app/src/main/cpp/WeatherComm.cpp b/TestComm/app/src/main/cpp/WeatherComm.cpp index ea023ae4..b73168db 100644 --- a/TestComm/app/src/main/cpp/WeatherComm.cpp +++ b/TestComm/app/src/main/cpp/WeatherComm.cpp @@ -101,11 +101,11 @@ int set_port_attr (int fd, int baudrate, int databit, const char *stopbit, char set_baudrate(&opt, baudrate); //opt.c_cflag |= CLOCAL|CREAD; /*|CRTSCTS */ opt.c_lflag &= ~(ICANON | ECHO |ECHOE |ISIG); - opt.c_iflag &=~(INLCR|ICRNL); - opt.c_iflag &=~(IXON);/* 流控*/ set_data_bit(&opt, databit); set_parity(&opt, parity); set_stopbit(&opt, stopbit); + opt.c_iflag &=~(INLCR|ICRNL); + opt.c_iflag &=~(IXON);/* 流控*/ opt.c_oflag = 0; //opt.c_lflag |= 0; opt.c_oflag &= ~OPOST; @@ -429,11 +429,19 @@ static int weather_comm(SERIAL_PARAM weatherport) setInt(CMD_SET_ANGLE_POWER, 1); setInt(CMD_SET_OTHER_POWER, 1); setInt(CMD_SET_PIC1_POWER, 1); +#if 1 setInt(CMD_SET_485_en0, 1); setInt(CMD_SET_485_en1, 1); setInt(CMD_SET_485_en2, 1); setInt(CMD_SET_485_en3, 1); setInt(CMD_SET_485_en4, 1); +#else + setInt(CMD_SET_485_en0, 0); + setInt(CMD_SET_485_en1, 0); + setInt(CMD_SET_485_en2, 0); + setInt(CMD_SET_485_en3, 0); + setInt(CMD_SET_485_en4, 0); +#endif sleep(3); //ictime = (int)time(NULL); ictime = get_msec(); @@ -505,7 +513,7 @@ static int weather_comm(SERIAL_PARAM weatherport) irecvtime = get_msec(); if((irecvtime-isendtime > 6000) ||(irecvtime - isendtime < 0)) isendtime = irecvtime; - if (irecvtime-isendtime > 1500) + if (irecvtime-isendtime > 500) { LOGE("传感器超过%ld毫秒未应答", irecvtime-isendtime); serialport.RevCmdFlag = 1; @@ -566,11 +574,11 @@ int serial_port_comm() #if 1 memset(portparm.pathname, 0, sizeof(portparm.pathname)); - sprintf(portparm.pathname, "/dev/ttyS1"); - //sprintf(portparm.pathname, "/dev/ttysWK1"); + //sprintf(portparm.pathname, "/dev/ttyS1"); + sprintf(portparm.pathname, "/dev/ttysWK3"); portparm.parity = 'N'; portparm.databit = 8; - portparm.baudrate = B38400; + portparm.baudrate = B9600; memset(portparm.stopbit, 0, sizeof(portparm.stopbit)); sprintf(portparm.stopbit, "1"); #endif diff --git a/app/src/main/cpp/SensorsProtocol.cpp b/app/src/main/cpp/SensorsProtocol.cpp index 691345cd..a04db0eb 100644 --- a/app/src/main/cpp/SensorsProtocol.cpp +++ b/app/src/main/cpp/SensorsProtocol.cpp @@ -711,13 +711,6 @@ int GM_SerialComSend(unsigned char * cSendBuf, unsigned long nSendLen, int commi //memset(szbuf, 0, sizeof(szbuf)); //sprintf(szbuf, "串口%d发送%d字节:", commid+1, len); //BytestreamLOG(szbuf, cSendBuf, len, 'D'); -#if 0 - for (i = 0; i < len; i++) - { - sprintf(szbuf, "%s %02X", szbuf, cSendBuf[i]); - } - LOGE("%s", szbuf); -#endif } return len; } @@ -1217,29 +1210,29 @@ void FindDevUseSerialCommNo() { case WEATHER_PROTOCOL: case WIND_PROTOCOL: - memset(devparam[i].pathname, 0, sizeof(devparam[i].pathname)); + //memset(devparam[i].pathname, 0, sizeof(devparam[i].pathname)); /* 目前还不确定具体串口分配,暂时默认使用串口1*/ - sprintf(devparam[i].pathname, "/dev/swk0"); - devparam[i].commid = 0; + //sprintf(devparam[i].pathname, "/dev/swk3"); + devparam[i].commid = 3; break; case SLANT_PROTOCOL: - memset(devparam[i].pathname, 0, sizeof(devparam[i].pathname)); + //memset(devparam[i].pathname, 0, sizeof(devparam[i].pathname)); /* 目前还不确定具体串口分配,暂时默认使用串口1*/ - sprintf(devparam[i].pathname, "/dev/swk2"); + //sprintf(devparam[i].pathname, "/dev/swk2"); devparam[i].commid = 2; break; case RALLY_PROTOCOL: - memset(devparam[i].pathname, 0, sizeof(devparam[i].pathname)); + //memset(devparam[i].pathname, 0, sizeof(devparam[i].pathname)); /* 目前还不确定具体串口分配,暂时默认使用串口1*/ - sprintf(devparam[i].pathname, "/dev/swk1"); + //sprintf(devparam[i].pathname, "/dev/swk1"); devparam[i].commid = 1; break; case PELCO_D_PROTOCOL: /* 摄像机协议*/ case PELCO_P_PROTOCOL: /* 摄像机协议*/ case SERIALCAMERA_PROTOCOL: /* 串口摄像机协议*/ memset(devparam[i].pathname, 0, sizeof(devparam[i].pathname)); - /* 目前还不确定具体串口分配,暂时默认使用串口1*/ - sprintf(devparam[i].pathname, "/dev/ttyS0"); + /* 目前还不确定//具体串口分配,暂时默认使用串口1*/ + //sprintf(devparam[i].pathname, "/dev/ttyS1"); devparam[i].commid = 0; srdt.camerauseserial = 0; break; @@ -1274,7 +1267,7 @@ void GM_StartSerialComm() continue; serialport[i].Retry = 0; //serialport[i].RetryTime = 500/TIMER_CNT; - serialport[i].RetryTime = 300/TIMER_CNT; + serialport[i].RetryTime = 300; serialport[i].WaitTime = 0; serialport[i].m_iRevStatus = 0; serialport[i].m_iRecvLen = 0; @@ -1321,22 +1314,31 @@ void GM_StartSerialComm() srdt.ms_dev[i].IsNeedSerial = 1; srdt.ms_dev[i].FirstCmdTimeCnt = get_msec(); srdt.ms_dev[i].recvdatacnt = 0; + for(j=0; j 0 )) { srdt.ms_dev[i].SerialCmdidx = 10017; @@ -1498,7 +1502,6 @@ void GM_StartSerialCameraPhoto(BYTE channel, int cmdidx) Gm_OpenSensorsPower(); Gm_OpenSerialPort(i); } - } if(0x01 == flag) { @@ -1512,7 +1515,7 @@ void GM_StartSerialCameraPhoto(BYTE channel, int cmdidx) if(GM_SerialTimer() < 0) { //LOGE("12V state=%d", getInt(CMD_SET_12V_EN_STATE)); - LOGV("退出采样流程!"); + LOGV("退出拍照流程!"); //sleep(15); //GM_StartSerialComm(); //GM_StartSerialCameraPhoto(1,0); @@ -1544,7 +1547,7 @@ int GM_SerialTimer(void) 输出参数: 其它说明: *********************************************************************************/ -void Gm_FindAllSensorsCommand(void) +void Gm_FindAllSensorsCommand() { int i, j,curidx,flag; @@ -1608,9 +1611,9 @@ void Gm_FindAllSensorsCommand(void) 输出参数: 其它说明: *********************************************************************************/ -void GM_IsCloseSensors(void) +void GM_IsCloseSensors() { - int i; + int i, j; char buf[256]; for(i=0; iimage.presetno, pPortParam->image.phototime); - fp = fopen(filename, "wb+"); + memset(pPortParam->image.photoname, 0, sizeof(pPortParam->image.photoname)); + sprintf(pPortParam->image.photoname, "%s%d-%d-%d.jpg", filedir,devparam[devno].CameraChannel, pPortParam->image.presetno, pPortParam->image.phototime); + fp = fopen(pPortParam->image.photoname, "wb+"); if(NULL == fp) return -1; len = fwrite(image,1, pPortParam->image.imagelen, fp); @@ -1781,7 +1802,7 @@ int SaveImageDataTofile(int devno) return -1; else { - LOGI("写入图片文件%s成功!", filename); + LOGI("写入图片文件%s成功!", pPortParam->image.photoname); return 1; } } @@ -1937,6 +1958,7 @@ void CameraPhotoPortDataProcess( int devno) LOGV("%s", szbuf); presetno = (int)rtumsg.MsgData[i+8]; pPortParam->image.presetno = presetno; + pPortParam->image.state = Sample; curserial->RevCmdFlag = 1; pPortParam->SerialCmdidx = 1; srdt.sendphotocmdcnt = 0; @@ -1967,7 +1989,8 @@ void CameraPhotoPortDataProcess( int devno) } else { - SaveImageDataTofile(devno); + if((1 == SaveImageDataTofile(devno)) && (Sample == pPortParam->image.state)) + pPortParam->image.state = PHOTO_SAVE_SUCC; recvend = 1; } } @@ -2085,9 +2108,11 @@ void SendCmdFormPollCmdBuf( int port ) { char buf[64]; int len, ret; + long lctime; SIO_PARAM_SERIAL_DEF *pPortParam; pPortParam = &serialport[port]; + lctime = get_msec(); if(pPortParam->ForceWaitFlag && pPortParam->ForceWaitCnt) { pPortParam->ForceWaitCnt--; @@ -2096,12 +2121,18 @@ void SendCmdFormPollCmdBuf( int port ) if(pPortParam->SendCmdFlag && (pPortParam->RevCmdFlag == 0)) { - pPortParam->RetryTimeCnt++; - if(pPortParam->RetryTimeCnt < pPortParam->RetryTime) + //pPortParam->RetryTimeCnt++; + if((lctime - pPortParam->RetryTimeCnt > 3*pPortParam->RetryTime) || (lctime - pPortParam->RetryTimeCnt < 0)) { + pPortParam->RetryTimeCnt = lctime; return; } - pPortParam->RetryTimeCnt = 0; + if(lctime - pPortParam->RetryTimeCnt < pPortParam->RetryTime) + //if(pPortParam->RetryTimeCnt < pPortParam->RetryTime) + { + return; + } + pPortParam->RetryTimeCnt = lctime; pPortParam->RetryCnt++; if(pPortParam->RetryCnt > pPortParam->Retry) { @@ -2156,16 +2187,16 @@ void SendCmdFormPollCmdBuf( int port ) sprintf(buf, "发送串口%d 装置%d命令:", port+1, srdt.curdevidx[port]+1); BytestreamLOG(buf, &pPortParam->PollCmd[2], len, 'D'); - LOGW("sendtimeconst= %ld", get_msec()-lsendtime); - lsendtime = get_msec(); + LOGW("sendtimeconst= %ld", lctime-lsendtime); + lsendtime = lctime; } pPortParam->SendCmdFlag = 1; pPortParam->ReSendCmdFlag = 0; pPortParam->RevCmdFlag = 0; - pPortParam->RetryTimeCnt = 0; + pPortParam->RetryTimeCnt = lctime; - //pPortParam->ForceWaitCnt = pPortParam->PollCmd[0]*256+pPortParam->PollCmd[1]+TIMER_CNT-1; - //pPortParam->ForceWaitCnt /= TIMER_CNT; + pPortParam->ForceWaitCnt = pPortParam->PollCmd[0]*256+pPortParam->PollCmd[1]+TIMER_CNT-1; + pPortParam->ForceWaitCnt /= TIMER_CNT; if(pPortParam->ForceWaitCnt) { pPortParam->ForceWaitFlag = 1; @@ -2178,7 +2209,7 @@ void ClearCmdAllFlag(int commid) return; serialport[commid].RetryCnt = 0; - serialport[commid].RetryTimeCnt = 0; + serialport[commid].RetryTimeCnt = get_msec(); serialport[commid].WaitTimeCnt = 0; serialport[commid].ForceWaitFlag = 0; serialport[commid].ForceWaitCnt = 0; @@ -2575,7 +2606,7 @@ int Gm_CtrlPtzCmd(u_char channel, DWORD ptzcmd) } // 发送转动摄像机云台命令定时器 -int Gm_Camera_Timer(void) +int Gm_Camera_Timer() { char szbuf[128]; @@ -3010,12 +3041,14 @@ void ShxyProtocolDataProcess( int devno) if((fvalue < -59) ||(fvalue > 59)) { frnb = (GeneratingRandomNumber()%101-50)/1000.0; - slantpntmsg[aipnt][0].EuValue *= (1+frnb); + pPortParam->aiValue[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; + pPortParam->aiValue[0].EuValue = fvalue; + pPortParam->aiValue[0].AiState = Sample; + //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[devno].devaddr, fvalue); @@ -3036,12 +3069,15 @@ void ShxyProtocolDataProcess( int devno) if((fvalue < -59) ||(fvalue > 59)) { frnb = (GeneratingRandomNumber()%101-50)/1000.0; - slantpntmsg[aipnt][1].EuValue *= (1+frnb); + pPortParam->aiValue[1].EuValue *= (1+frnb); + //slantpntmsg[aipnt][1].EuValue *= (1+frnb); } else - slantpntmsg[aipnt][1].EuValue = fvalue*slantpntmsg[aipnt][1].AiParam.fFactor\ + pPortParam->aiValue[1].EuValue = fvalue; + pPortParam->aiValue[1].AiState = Sample; + /*slantpntmsg[aipnt][1].EuValue = fvalue*slantpntmsg[aipnt][1].AiParam.fFactor\ +slantpntmsg[aipnt][1].AiParam.EuValueDelta; - slantpntmsg[aipnt][1].AiState = 1; + slantpntmsg[aipnt][1].AiState = 1;*/ //YslantSec[aipnt][srdt.SectimesamplingCnt[1]] = (short)slantpntmsg[aipnt][1].EuValue; srdt.SectimesamplingCnt[1] += 1; } @@ -3049,20 +3085,6 @@ void ShxyProtocolDataProcess( int devno) if((0x08 != cmdidx) && (0x09 != cmdidx)) return; -#if 0 - if(1 == srdt.IsReadWireTem) - { - for(i=0; iSameTypeDevIdx; - } -#endif for(i = 0, j=7; (im_au8RecvBuf[1]); i++, j+=5 ) { if(0x08 == cmdidx) @@ -3076,21 +3098,24 @@ void ShxyProtocolDataProcess( int devno) *((BYTE*)fvalua+3) = curserial->m_au8RecvBuf[j+1]; } switch(curserial->m_au8RecvBuf[j]) - { + {slantpntmsg[aipnt][1].EuValue *= (1+frnb)slantpntmsg[aipnt][1].EuValue *= (1+frnb); + + case 1: /*温度*/ if((fvalue < -40) ||(fvalue > 85)) { frnb = (GeneratingRandomNumber()%101-50)/1000.0; - pPortParam->aiValue[0].EuValue *= (1+frnb); + pPortParam->aiValue[AirTempNo].EuValue *= (1+frnb); weatherpntmsg[AirTempNo].EuValue *= (1+frnb); + //weatherpntmsg[AirTempNo].AiState = Sample; } else { - pPortParam->aiValue[0].EuValue = fvalue*pPortParam->aiValue[0].AiParam.fFactor + pPortParam->aiValue[0].AiParam.EuValueDelta; - weatherpntmsg[AirTempNo].EuValue = fvalue*weatherpntmsg[AirTempNo].AiParam.fFactor + weatherpntmsg[AirTempNo].AiParam.EuValueDelta; + pPortParam->aiValue[AirTempNo].EuValue = fvalue;/*pPortParam->aiValue[0].AiParam.fFactor + pPortParam->aiValue[0].AiParam.EuValueDelta;*/ + weatherpntmsg[AirTempNo].EuValue = fvalue;/*weatherpntmsg[AirTempNo].AiParam.fFactor + weatherpntmsg[AirTempNo].AiParam.EuValueDelta;*/ } - pPortParam->aiValue[0].AiState = 1; - weatherpntmsg[AirTempNo].AiState = 1; + pPortParam->aiValue[AirTempNo].AiState = Sample; + weatherpntmsg[AirTempNo].AiState = Sample; //g_SelfTest.SensorsFault |= (0x01); //if ((gDisSunRain & 0x80) == 0x80) { @@ -3102,16 +3127,16 @@ void ShxyProtocolDataProcess( int devno) if((fvalue < 550) ||(fvalue > 1060)) { frnb = (GeneratingRandomNumber()%41-20)/10000.0; - pPortParam->aiValue[5].EuValue *= (1+frnb); + pPortParam->aiValue[AtmosNo].EuValue *= (1+frnb); weatherpntmsg[AtmosNo].EuValue *= (1+frnb); } else { - pPortParam->aiValue[5].EuValue = fvalue*pPortParam->aiValue[5].AiParam.fFactor + pPortParam->aiValue[5].AiParam.EuValueDelta; - weatherpntmsg[AtmosNo].EuValue = fvalue*weatherpntmsg[AtmosNo].AiParam.fFactor + weatherpntmsg[AtmosNo].AiParam.EuValueDelta; + pPortParam->aiValue[AtmosNo].EuValue = fvalue;/*pPortParam->aiValue[5].AiParam.fFactor + pPortParam->aiValue[5].AiParam.EuValueDelta;*/ + weatherpntmsg[AtmosNo].EuValue = fvalue;/*weatherpntmsg[AtmosNo].AiParam.fFactor + weatherpntmsg[AtmosNo].AiParam.EuValueDelta;*/ } - pPortParam->aiValue[5].AiState = 1; - weatherpntmsg[AtmosNo].AiState = 1; + pPortParam->aiValue[AtmosNo].AiState = Sample; + weatherpntmsg[AtmosNo].AiState = Sample; //g_SelfTest.SensorsFault |= (0x10); //if ((gDisSunRain & 0x80) == 0x80) { @@ -3123,16 +3148,16 @@ void ShxyProtocolDataProcess( int devno) if((fvalue < 0) ||(fvalue > 100)) { frnb = (GeneratingRandomNumber()%41-20)/1000.0; - pPortParam->aiValue[1].EuValue *= (1+frnb); + pPortParam->aiValue[HumidityNo].EuValue *= (1+frnb); weatherpntmsg[HumidityNo].EuValue *= (1+frnb); } else { - pPortParam->aiValue[1].EuValue = fvalue*pPortParam->aiValue[1].AiParam.fFactor + pPortParam->aiValue[1].AiParam.EuValueDelta; - weatherpntmsg[HumidityNo].EuValue = fvalue*weatherpntmsg[HumidityNo].AiParam.fFactor + weatherpntmsg[HumidityNo].AiParam.EuValueDelta; + pPortParam->aiValue[HumidityNo].EuValue = fvalue;/*pPortParam->aiValue[1].AiParam.fFactor + pPortParam->aiValue[1].AiParam.EuValueDelta;*/ + weatherpntmsg[HumidityNo].EuValue = fvalue;/*weatherpntmsg[HumidityNo].AiParam.fFactor + weatherpntmsg[HumidityNo].AiParam.EuValueDelta;*/ } - pPortParam->aiValue[1].AiState = 1; - weatherpntmsg[HumidityNo].AiState = 1; + pPortParam->aiValue[HumidityNo].AiState = Sample; + weatherpntmsg[HumidityNo].AiState = Sample; //g_SelfTest.SensorsFault |= (0x02); //if ((gDisSunRain & 0x80) == 0x80) { @@ -3145,19 +3170,19 @@ void ShxyProtocolDataProcess( int devno) case 5: /*日照*/ break; case 6: /*风速*/ - if((fvalue/1000 < 0) ||(fvalue/1000 > 80)) + if((fvalue < 0) ||(fvalue > 80)) { frnb = (GeneratingRandomNumber()%41-20)/1000.0; - pPortParam->aiValue[2].EuValue *= (1+frnb); + pPortParam->aiValue[WindSpeedNo].EuValue *= (1+frnb); weatherpntmsg[WindSpeedNo].EuValue *= (1+frnb); } else { - pPortParam->aiValue[2].EuValue = fvalue*pPortParam->aiValue[2].AiParam.fFactor + pPortParam->aiValue[2].AiParam.EuValueDelta; - weatherpntmsg[WindSpeedNo].EuValue = fvalue*weatherpntmsg[WindSpeedNo].AiParam.fFactor + weatherpntmsg[WindSpeedNo].AiParam.EuValueDelta; + pPortParam->aiValue[WindSpeedNo].EuValue = fvalue;/*pPortParam->aiValue[2].AiParam.fFactor + pPortParam->aiValue[2].AiParam.EuValueDelta;*/ + weatherpntmsg[WindSpeedNo].EuValue = fvalue;/*weatherpntmsg[WindSpeedNo].AiParam.fFactor + weatherpntmsg[WindSpeedNo].AiParam.EuValueDelta;*/ } - pPortParam->aiValue[2].AiState = 1; - weatherpntmsg[WindSpeedNo].AiState = 1; + pPortParam->aiValue[WindSpeedNo].AiState = Sample; + weatherpntmsg[WindSpeedNo].AiState = Sample; //g_SelfTest.SensorsFault |= (0x04); //if ((gDisSunRain & 0x10) == 0x10) { @@ -3173,16 +3198,16 @@ void ShxyProtocolDataProcess( int devno) if((fvalue/1000 < 0) ||(fvalue/1000 > 359.99)) { frnb = (GeneratingRandomNumber()%41-20)/1000.0; - pPortParam->aiValue[3].EuValue *= (1+frnb); + pPortParam->aiValue[WindDirectionNo].EuValue *= (1+frnb); weatherpntmsg[WindDirectionNo].EuValue *= (1+frnb); } else { - pPortParam->aiValue[3].EuValue = fvalue*pPortParam->aiValue[3].AiParam.fFactor + pPortParam->aiValue[3].AiParam.EuValueDelta; - weatherpntmsg[WindDirectionNo].EuValue = fvalue*weatherpntmsg[WindDirectionNo].AiParam.fFactor + weatherpntmsg[WindDirectionNo].AiParam.EuValueDelta; + pPortParam->aiValue[WindDirectionNo].EuValue = fvalue;/*pPortParam->aiValue[3].AiParam.fFactor + pPortParam->aiValue[3].AiParam.EuValueDelta;*/ + weatherpntmsg[WindDirectionNo].EuValue = fvalue;/*weatherpntmsg[WindDirectionNo].AiParam.fFactor + weatherpntmsg[WindDirectionNo].AiParam.EuValueDelta;*/ } - pPortParam->aiValue[3].AiState = 1; - weatherpntmsg[WindDirectionNo].AiState = 1; + pPortParam->aiValue[WindDirectionNo].AiState = Sample; + weatherpntmsg[WindDirectionNo].AiState = Sample; //g_SelfTest.SensorsFault |= (0x08); //if ((gDisSunRain & 0x10) == 0x10) { @@ -3211,11 +3236,11 @@ void ShxyProtocolDataProcess( int devno) if(pPortParam->recvdatacnt < 2) break; - pPortParam->aiValue[0].EuValue = fvalue*pPortParam->aiValue[0].AiParam.fFactor\ - +pPortParam->aiValue[0].AiParam.EuValueDelta; + 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; + pPortParam->aiValue[0].AiState = Sample; //rallypntmsg[aipnt][0].AiState = 1; sprintf(szbuf, "地址%d拉力:%0.3fKg ", devparam[devno].devaddr, fvalue); LOGV("%s", szbuf); @@ -3230,12 +3255,12 @@ void ShxyProtocolDataProcess( int devno) } else { - pPortParam->aiValue[0].EuValue = fvalue*pPortParam->aiValue[0].AiParam.fFactor\ - +pPortParam->aiValue[0].AiParam.EuValueDelta; + 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; + pPortParam->aiValue[0].AiState = Sample; //slantpntmsg[aipnt][0].AiState = 1; sprintf(szbuf, "倾角ID:%d slantangle X=%0.3f ", devparam[devno].devaddr, fvalue); LOGV("%s", szbuf); @@ -3248,16 +3273,13 @@ void ShxyProtocolDataProcess( int devno) { frnb = (GeneratingRandomNumber()%101-50)/1000.0; pPortParam->aiValue[1].EuValue *= (1+frnb); - slantpntmsg[aipnt][1].EuValue *= (1+frnb); } else { - 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].EuValue = fvalue;/*pPortParam->aiValue[1].AiParam.fFactor\ + +pPortParam->aiValue[1].AiParam.EuValueDelta;*/ } - pPortParam->aiValue[1].AiState = 1; + pPortParam->aiValue[1].AiState = Sample; //slantpntmsg[aipnt][1].AiState = 1; break; #if 0 @@ -3466,6 +3488,7 @@ int GeneratingRandomNumber(void) return randomdate; } +/* 串口启动接口函数 开始*/ void Collect_sensor_data(SENSOR_PARAM *sensorParam) { int i; @@ -3478,6 +3501,8 @@ void Collect_sensor_data(SENSOR_PARAM *sensorParam) devparam[i].ProtocolIdx = sensorParam[i].SensorsType; devparam[i].devaddr = sensorParam[i].devaddr; devparam[i].baudrate = getBaudrate(sensorParam[i].baudrate); + memset(devparam[i].pathname, 0, sizeof(devparam[i].pathname)); + memmove(devparam[i].pathname, sensorParam[i].pathname, sizeof(devparam[i].pathname)); devparam[i].databit = sensorParam[i].databit; devparam[i].stopbit = (int)sensorParam[i].stopbit*10; devparam[i].CameraChannel = sensorParam[i].CameraChannel; @@ -3521,14 +3546,183 @@ void CameraPhotoCmd(SENSOR_PARAM *sensorParam, u_char channel, int cmdidx, u_cha //GM_StartSerialComm(); GM_StartSerialCameraPhoto(1, cmdidx); } +/* 串口启动接口函数 结束*/ -int GetAirTempData(Data_DEF *airt) +/* 数据和图片采集数据返回函数 开始*/ +int GetWeatherData(Data_DEF *data, int datano) { - int i; + int i; + + if(NULL == data) + return -1; + if((AirTempNo > datano) || (datano > OpticalRadiationNo)) + return -1; + data->EuValue = weatherpntmsg[datano].EuValue; + data->AiState = weatherpntmsg[datano].AiState; + if((SampleFail == data->AiState) || (SamplingSuccess == data->AiState)) + { + weatherpntmsg[datano].AiState = Idle; + return 2; + } + return 1; +} +int GetAirTempData(Data_DEF *airt) +{ if(NULL == airt) return -1; airt->EuValue = weatherpntmsg[AirTempNo].EuValue; airt->AiState = weatherpntmsg[AirTempNo].AiState; + if((SampleFail == airt->AiState) || (SamplingSuccess == airt->AiState)) + { + weatherpntmsg[AirTempNo].AiState = Idle; + return 2; + } + return 1; } +int GetHumidityData(Data_DEF *airt) +{ + if(NULL == airt) + return -1; + airt->EuValue = weatherpntmsg[HumidityNo].EuValue; + airt->AiState = weatherpntmsg[HumidityNo].AiState; + if((SampleFail == airt->AiState) || (SamplingSuccess == airt->AiState)) + { + weatherpntmsg[HumidityNo].AiState = Idle; + return 2; + } + return 1; +} + +int GetWindSpeedData(Data_DEF *airt) +{ + if(NULL == airt) + return -1; + airt->EuValue = weatherpntmsg[WindSpeedNo].EuValue; + airt->AiState = weatherpntmsg[WindSpeedNo].AiState; + if((SampleFail == airt->AiState) || (SamplingSuccess == airt->AiState)) + { + weatherpntmsg[WindSpeedNo].AiState = Idle; + return 2; + } + return 1; +} + +int GetWindDirectionData(Data_DEF *airt) +{ + if(NULL == airt) + return -1; + airt->EuValue = weatherpntmsg[WindDirectionNo].EuValue; + airt->AiState = weatherpntmsg[WindDirectionNo].AiState; + if((SampleFail == airt->AiState) || (SamplingSuccess == airt->AiState)) + { + weatherpntmsg[WindDirectionNo].AiState = Idle; + return 2; + } + return 1; +} + +int GetRainfallData(Data_DEF *airt) +{ + if(NULL == airt) + return -1; + airt->EuValue = weatherpntmsg[RainfallNo].EuValue; + airt->AiState = weatherpntmsg[RainfallNo].AiState; + if((SampleFail == airt->AiState) || (SamplingSuccess == airt->AiState)) + { + weatherpntmsg[RainfallNo].AiState = Idle; + return 2; + } + return 1; +} + +int GetAtmosData(Data_DEF *airt) +{ + if(NULL == airt) + return -1; + airt->EuValue = weatherpntmsg[AtmosNo].EuValue; + airt->AiState = weatherpntmsg[AtmosNo].AiState; + if((SampleFail == airt->AiState) || (SamplingSuccess == airt->AiState)) + { + weatherpntmsg[AtmosNo].AiState = Idle; + return 2; + } + return 1; +} + +int GetOpticalRadiationData(Data_DEF *airt) +{ + if(NULL == airt) + return -1; + airt->EuValue = weatherpntmsg[OpticalRadiationNo].EuValue; + airt->AiState = weatherpntmsg[OpticalRadiationNo].AiState; + if((SampleFail == airt->AiState) || (SamplingSuccess == airt->AiState)) + { + weatherpntmsg[OpticalRadiationNo].AiState = Idle; + return 2; + } + return 1; +} + +int GetPullValue(int devno, Data_DEF *data) +{ + if(NULL == data) + return -1; + if((0>devno)||(MAX_SERIAL_DEV_NUM < devno)) + return -1; + if(RALLY_PROTOCOL != devparam[devno].ProtocolIdx) + return -1; + data->EuValue = srdt.ms_dev[devno].aiValue[0].EuValue; + data->AiState = srdt.ms_dev[devno].aiValue[0].AiState; + if((SampleFail == data->AiState) || (SamplingSuccess == data->AiState)) + { + srdt.ms_dev[devno].aiValue[0].AiState = Idle; + return 2; + } + return 1; +} + +int GetAngleValue(int devno, Data_DEF *data, int Xy) +{ + if(NULL == data) + return -1; + if((0>devno)||(MAX_SERIAL_DEV_NUM < devno)) + return -1; + if(SLANT_PROTOCOL != devparam[devno].ProtocolIdx) + return -1; + if((0 > Xy) || (1 < Xy)) + return -1; + + data->EuValue = srdt.ms_dev[devno].aiValue[Xy].EuValue; + data->AiState = srdt.ms_dev[devno].aiValue[Xy].AiState; + if((SampleFail == data->AiState) || (SamplingSuccess == data->AiState)) + { + srdt.ms_dev[devno].aiValue[Xy].AiState = Idle; + return 2; + } + return 1; +} + +int GetImage(int devno, IMAGE_DEF *photo) +{ + if(NULL == photo) + return -1; + if((0>devno)||(MAX_SERIAL_DEV_NUM < devno)) + return -1; + if((PELCO_D_PROTOCOL != devparam[devno].ProtocolIdx) && (PELCO_P_PROTOCOL != devparam[devno].ProtocolIdx) &&(SERIALCAMERA_PROTOCOL != devparam[devno].ProtocolIdx)) + return -1; + photo->presetno = srdt.ms_dev[devno].image.presetno; + photo->phototime = srdt.ms_dev[devno].image.phototime; + memset(photo->photoname, 0, sizeof(photo->photoname)); + memmove(photo->photoname, srdt.ms_dev[devno].image.photoname, sizeof(photo->photoname)); + photo->imagelen = srdt.ms_dev[devno].image.imagelen; + photo->state = srdt.ms_dev[devno].image.state; + if((SampleFail == photo->state) || (SamplingSuccess == photo->state)) + { + srdt.ms_dev[devno].image.state = Idle; + return 2; + } + return 1; +} +/* 数据和图片采集数据返回函数 结束*/ \ No newline at end of file diff --git a/app/src/main/cpp/SensorsProtocol.h b/app/src/main/cpp/SensorsProtocol.h index b02ad142..f534e80f 100644 --- a/app/src/main/cpp/SensorsProtocol.h +++ b/app/src/main/cpp/SensorsProtocol.h @@ -61,9 +61,10 @@ typedef unsigned char BYTE; #define Idle 0 /* 传感器处于空闲状态,未启动采样*/ #define Sample 1 /* 正在采样过程中*/ -#define SamplingEnd 2 /* 采样结束*/ +#define SamplingSuccess 2 /* 采样结束,正常读取到数据*/ #define StartSample 3 /* 启动采样*/ -#define SampleFail -1 /* 采样失败,传感器故障或未接*/ +#define SampleFail -1 /* 采样失败,未采集到数据,传感器故障或未接*/ +#define PHOTO_SAVE_SUCC 5 /* 图片保存成功*/ #define WEATHER_DATA_NUM 8 /* 气象数据最大数量(一般最多是6要素)*/ #define RALLY_DATA_NUM 2 /* 拉力数据最大数量(一般是1个)*/ @@ -110,6 +111,9 @@ typedef unsigned char BYTE; #define D_MOVE_RIGHT 0x00022d00 /* 向右移动镜头(1 有效)*/ /* 摄像机下发命令宏定义*/ +#define Take_Photo 0 /* 拍照*/ +#define Stop_Baud 10000 /* 设置球机波特率*/ +#define Stop_Cmd 10005 /* 取消或停止指令*/ #define Auto_Scan 10006 /* 自动扫描功能控制(1/0 打开/关闭该功能)*/ #define IRIS_CLOSE 10007 /* 光圈缩小(1 有效)*/ #define IRIS_OPEN 10008 /* 光圈放大(1 有效)*/ @@ -121,7 +125,8 @@ typedef unsigned char BYTE; #define MOVE_UP 10014 /* 向上移动镜头(1 有效)*/ #define MOVE_LEFT 10015 /* 向左移动镜头(1 有效)*/ #define MOVE_RIGHT 10016 /* 向右移动镜头(1 有效)*/ - +#define MOVE_PRESETNO 10017 // 调用预置点 +#define SAVE_PRESETNO 10018 // 设置预置点 #define SPEED_DOME_CAMERA 0 /* 球机摄像机*/ #define SERIAL_CAMERA 2 /* 串口摄像机a*/ @@ -171,14 +176,25 @@ typedef struct float EuValue; // 数据工程值 } Data_DEF; +typedef struct +{ + int imagelen; // 整个图片大小 + int phototime; // 拍照时间 + u_char presetno; // 拍照预置点 + char photoname[512]; // 图片存储名称和路径 + int state;// 标识(-1:拍照失败;0:没有拍照;1:正在取图;2:拍照成功;3:启动拍照;) +} IMAGE_DEF; + typedef struct { int imagelen; // 整个图片大小 int imagenum; // 整个图片的总包数 int phototime; // 拍照时间 u_char presetno; // 拍照预置点 + char photoname[512]; // 图片存储名称和路径 u_char buf[MAX_PHOTO_PACKET_NUM][MAX_PHOTO_FRAME_LEN]; // 图片数据缓存 int ilen[MAX_PHOTO_PACKET_NUM]; // 相对应的每包图片数据的长度 + int state;// 标识(-1:拍照失败;0:没有拍照;1:正在取图;2:拍照成功;3:启动拍照;) } PHOTO_DEF; // 上层调用采集传感器参数 @@ -188,6 +204,7 @@ typedef struct int databit; /* 数据位*/ float stopbit; /* 停止位*/ char parity; /* 校验位*/ + char pathname[64]; /* 串口文件名及路径*/ //int commNo; /* 约定的串口序号,例如我们PC机上显示的COM1。。。*/ u_char SensorsType; /* 传感器类型索引,大于 0*/ int devaddr; /* 装置(传感器)使用的地址*/ @@ -225,8 +242,8 @@ typedef struct //******************** Poll Cmd **************************** u_char Retry; /* 重试命令次数 */ u_char RetryCnt; /* 重试命令计数*/ - u_long RetryTime; /* 重试命令时间 */ - u_long RetryTimeCnt; /* 重试命令时间计数*/ + long RetryTime; /* 重试命令时间 */ + long RetryTimeCnt; /* 重试命令时间计数*/ u_long WaitTime; /* 命令间隔时间 */ u_long WaitTimeCnt; /* 命令间隔时间计数*/ u_char ForceWaitFlag; /* 强制等待标志*/ @@ -343,7 +360,7 @@ static void setCam3V3Enable(bool enabled); // 串口相关的所有函数定义 /* 打开串口电源*/ -void Gm_OpenSerialPower(void); +void Gm_OpenSerialPower(); // 打开传感器电源 void Gm_OpenSensorsPower(); @@ -354,27 +371,26 @@ void Gm_CloseSensorsPower(int port); void Gm_OpenSerialPort(int devidx); // 关闭串口通讯 -void Gm_CloseSerialPort(void); +void Gm_CloseSerialPort(); // 功能说明:串口发送数据 返回实际发送的字节数 int GM_SerialComSend(const unsigned char * cSendBuf, unsigned long nSendLen, int commid); void Gm_InitSerialComm(); -void Collect_sensor_data(SENSOR_PARAM *sensorParam); // 启动串口通讯 -void GM_StartSerialComm(void); +void GM_StartSerialComm(); // 启动使用串口拍照 void GM_StartSerialCameraPhoto(BYTE channel, int cmdidx); // 串口轮询通讯定时器 -int GM_SerialTimer(void); +int GM_SerialTimer(); //轮询所有串口和传感器是否需要生成下发命令 -void Gm_FindAllSensorsCommand(void); +void Gm_FindAllSensorsCommand(); //检查所有传感器是否采集完毕,采集完毕的关闭传感器电源 -void GM_IsCloseSensors(void); +void GM_IsCloseSensors(); //检查所有串口是否有数据接收,有则启动接收 -void GM_AllSerialComRecv(void); +void GM_AllSerialComRecv(); //判断是否需要关闭定时器 -int GM_CloseTimer(void); +int GM_CloseTimer(); // 串口接收数据处理 void SerialDataProcess(int devidx, u_char *buf, int len); @@ -402,7 +418,7 @@ void ClearCmdFormPollCmdBuf(int port); int Gm_CtrlPtzCmd(u_char channel, DWORD ptzcmd); // 发送转动摄像机云台命令定时器 -int Gm_Camera_Timer(void); +int Gm_Camera_Timer(); // 生成 PELCO_P 命令 * void Gm_SendPelco_pCommand( DWORD cmdtype); @@ -418,10 +434,10 @@ BYTE Gm_Pelco_DCheck( BYTE *msg, int len ); char Gm_GetSensorsPowerState(int port); // 通过传感器使用的航空头查找传感器使用的串口序号 -void FindDevUseSerialCommNo(void); +void FindDevUseSerialCommNo(); // 初始化所有串口及所接传感器的配置 -void Gm_InitSerialComm(void); +void Gm_InitSerialComm(); // 寻找并生成下一条倾角命令 int FindNextShxyProtocolCommand( int devidx ); @@ -443,13 +459,35 @@ void ShxyProtocolDataProcess( int commid); //void Gm_CtrlCloseSensorsPower(int devidx); // 检查传感器电源是否应该关闭或打开 //void Gm_CheckSensorsPower(void); -int Gm_SetSerialPortBaud(int commid); -// 得到串口波特率 -//T_baudrate Gm_GetSerialPortBaud(UART_baudrate Baudrate); +int SaveImageDataTofile(int devno); +void Collect_sensor_data(SENSOR_PARAM *sensorParam); -void Gm_CloseSerialCamera(); void CameraPhotoCmd(SENSOR_PARAM *sensorParam, u_char channel, int cmdidx, u_char bImageSize, u_char presetno); -int SaveImageDataTofile(int devno); + + +/* 数据和图片采集数据返回函数 开始*/ +int GetWeatherData(Data_DEF *data, int datano); + +int GetAirTempData(Data_DEF *airt); + +int GetHumidityData(Data_DEF *airt); + +int GetWindSpeedData(Data_DEF *airt); + +int GetWindDirectionData(Data_DEF *airt); + +int GetRainfallData(Data_DEF *airt); + +int GetAtmosData(Data_DEF *airt); + +int GetOpticalRadiationData(Data_DEF *airt); + +int GetPullValue(int devno, Data_DEF *data); + +int GetAngleValue(int devno, Data_DEF *data, int Xy); + +int GetImage(int devno, IMAGE_DEF *photo); +/* 数据和图片采集数据返回函数 结束*/ // 生成一个随机整数 int GeneratingRandomNumber();