From 517323a28eae2674610d9c4759238e11e4ac7dcb Mon Sep 17 00:00:00 2001 From: jxjajs Date: Tue, 10 Dec 2024 09:47:01 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=B8=B2=E5=8F=A3=E6=8B=8D?= =?UTF-8?q?=E7=85=A7=E6=96=B9=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/cpp/SensorsProtocol.cpp | 123 ++++++++++++++++++++++----- 1 file changed, 100 insertions(+), 23 deletions(-) diff --git a/app/src/main/cpp/SensorsProtocol.cpp b/app/src/main/cpp/SensorsProtocol.cpp index 5401f9f5..6f38ac76 100644 --- a/app/src/main/cpp/SensorsProtocol.cpp +++ b/app/src/main/cpp/SensorsProtocol.cpp @@ -689,7 +689,7 @@ void Gm_OpenSerialPort(int devidx) fd = ::open(devparam[devidx].pathname, O_RDWR | O_NDELAY); if (fd < 0) { - sprintf(szbuf, "装置%d 打开串口%d失败!fd=%d", devidx + 1, devparam[devidx].commid + 1, fd); + sprintf(szbuf, "装置%d 打开串口%d %s失败!fd=%d", devidx+1, devparam[devidx].pathname, devparam[devidx].commid+1, fd); DebugLog(devparam[devidx].commid, szbuf, 'E'); return; } @@ -739,7 +739,7 @@ int GM_SerialComSend(unsigned char * cSendBuf, size_t nSendLen, int commid) //isendtime = get_msec(); if (len < 0) { - sprintf(szbuf, "%s", "write data error "); + sprintf(szbuf, "write data error "); DebugLog(commid, szbuf, 'E'); return -1; } @@ -941,6 +941,10 @@ void Gm_InitSerialComm_Test() Gm_InitSerialComm(sensorParam, "/sdcard/photo/"); } +uint8_t getdevtype(int devno) +{ + return devparam[devno].ProtocolIdx; +} // 初始化所有串口及所接传感器的配置 void Gm_InitSerialComm(SENSOR_PARAM *sensorParam, char *filedir) { @@ -3614,40 +3618,41 @@ int GM_CameraSerialTimer(SIO_PARAM_SERIAL_DEF *pPortParam) #if 1 // 启动使用串口拍照 -int GM_StartSerialCameraPhoto(uint8_t channel, int cmdidx, u_char bImageSize, int phototime, u_char presetno, char *serfile, unsigned int baud, int addr) +int GM_StartSerialCameraPhoto(int phototime, unsigned char channel, int cmdidx, unsigned char bImageSize, unsigned char presetno, char *serfile, unsigned int baud, int addr) { int flag = 0; char szbuf[128], logbuf[128]; - SIO_PARAM_SERIAL_DEF cameraport; + SIO_PARAM_SERIAL_DEF *cameraport; + cameraport = (SIO_PARAM_SERIAL_DEF*)malloc(sizeof(SIO_PARAM_SERIAL_DEF)); srdt.RephotographCnt = 0; - cameraport.cameraaddr = addr; - cameraport.Retry = 0; - cameraport.RetryTime = 2000; - cameraport.WaitTime = 0; - cameraport.m_iRevStatus = 0; - cameraport.m_iRecvLen = 0; - cameraport.m_iNeedRevLength = 0; - cameraport.fd = -1; - memset(cameraport.m_au8RecvBuf, 0, RECVDATA_MAXLENTH); // 接收数据缓存区 - ClearCameraCmdFormPollCmdBuf(&cameraport); + cameraport->cameraaddr = addr; + cameraport->Retry = 0; + cameraport->RetryTime = 2000; + cameraport->WaitTime = 0; + cameraport->m_iRevStatus = 0; + cameraport->m_iRecvLen = 0; + cameraport->m_iNeedRevLength = 0; + cameraport->fd = -1; + memset(cameraport->m_au8RecvBuf, 0, RECVDATA_MAXLENTH); // 接收数据缓存区 + ClearCameraCmdFormPollCmdBuf(cameraport); - flag = Gm_OpenCameraSerial(&cameraport, serfile, baud); + flag = Gm_OpenCameraSerial(cameraport, serfile, baud); #if 1 memset(szbuf, 0, sizeof(szbuf)); srdt.iLastGetPhotoNo = -1; if (0 == cmdidx) - cameraport.image.state = SER_STARTSAMPLE; + cameraport->image.state = SER_STARTSAMPLE; if ((0 == cmdidx) && (srdt.presetno > 0)) { - cameraport.SerialCmdidx = 10017; + cameraport->SerialCmdidx = 10017; srdt.iLastGetPhotoNo = cmdidx; } else - cameraport.SerialCmdidx = cmdidx; - cameraport.FirstCmdTimeCnt = get_msec(); + cameraport->SerialCmdidx = cmdidx; + cameraport->FirstCmdTimeCnt = get_msec(); srdt.sendphotocmdcnt = 0; //sprintf(szbuf, "摄像机"); //flag = 1; @@ -3665,14 +3670,14 @@ int GM_StartSerialCameraPhoto(uint8_t channel, int cmdidx, u_char bImageSize, in if (0x00 == flag) { - strcpy(szbuf, "摄像机启动串口定时器!"); + sprintf(szbuf, "摄像机启动串口定时器!"); DebugLog(8, szbuf, 'I'); for (;;) { usleep(10); //LOGW("polltime=%ldms", get_msec()-polltime); //polltime = get_msec(); - if (GM_CameraSerialTimer(&cameraport) < 0) + if (GM_CameraSerialTimer(cameraport) < 0) { //LOGE("12V state=%d", getInt(CMD_SET_12V_EN_STATE)); DebugLog(8, "退出操作摄像机流程!", 'V'); @@ -3685,14 +3690,14 @@ int GM_StartSerialCameraPhoto(uint8_t channel, int cmdidx, u_char bImageSize, in } #endif -int CameraPhotoCmd(int phototime, u_char channel, int cmdidx, u_char bImageSize, u_char presetno, char *serfile, unsigned int baud, int addr) +int CameraPhotoCmd(int phototime, unsigned char channel, int cmdidx, unsigned char bImageSize, unsigned char presetno, char *serfile, unsigned int baud, int addr) { int flag = 0; srdt.bImageSize = bImageSize; srdt.presetno = presetno; srdt.sendphototime = phototime; - flag = GM_StartSerialCameraPhoto(channel, cmdidx, bImageSize, phototime, presetno, serfile, baud, addr); + flag = GM_StartSerialCameraPhoto(phototime, channel, cmdidx, bImageSize, presetno, serfile, baud, addr); return flag; } /* 串口启动接口函数 结束*/ @@ -3701,6 +3706,7 @@ int CameraPhotoCmd(int phototime, u_char channel, int cmdidx, u_char bImageSize, int GetWeatherData(Data_DEF *data, int datano) { int i; + char logbuf[512], szbuf[128]; if (NULL == data) return -1; @@ -3708,6 +3714,36 @@ int GetWeatherData(Data_DEF *data, int datano) return -1; data->EuValue = weatherpntmsg[datano].EuValue; data->AiState = weatherpntmsg[datano].AiState; + memset(szbuf, 0, sizeof(szbuf)); + switch (datano) + { + case AirTempNo: + sprintf(szbuf, "温度"); + break; + case HumidityNo: + sprintf(szbuf, "湿度"); + break; + case WindSpeedNo: + sprintf(szbuf, "风速"); + break; + case WindDirectionNo: + sprintf(szbuf, "风向"); + break; + case RainfallNo: + sprintf(szbuf, "雨量"); + break; + case AtmosNo: + sprintf(szbuf, "大气压"); + break; + case OpticalRadiationNo: + sprintf(szbuf, "大气压"); + break; + default: + sprintf(szbuf, "未知"); + break; + } + sprintf(logbuf, "data_state=%d, 拉力value=%0.3f", data->AiState, data->EuValue); + DebugLog(8, logbuf, 'I'); if ((SER_SAMPLEFAIL == data->AiState) || (SAMPLINGSUCCESS == data->AiState)) { weatherpntmsg[datano].AiState = SER_IDLE; @@ -3718,10 +3754,14 @@ int GetWeatherData(Data_DEF *data, int datano) int GetAirTempData(Data_DEF *airt) { + char logbuf[512]; + if (NULL == airt) return -1; airt->EuValue = weatherpntmsg[AirTempNo].EuValue; airt->AiState = weatherpntmsg[AirTempNo].AiState; + sprintf(logbuf, "data_state=%d, 温度value=%0.3f", airt->AiState, airt->EuValue); + DebugLog(8, logbuf, 'I'); if ((SER_SAMPLEFAIL == airt->AiState) || (SAMPLINGSUCCESS == airt->AiState)) { weatherpntmsg[AirTempNo].AiState = SER_IDLE; @@ -3732,10 +3772,14 @@ int GetAirTempData(Data_DEF *airt) int GetHumidityData(Data_DEF *airt) { + char logbuf[512]; + if (NULL == airt) return -1; airt->EuValue = weatherpntmsg[HumidityNo].EuValue; airt->AiState = weatherpntmsg[HumidityNo].AiState; + sprintf(logbuf, "data_state=%d, 湿度value=%0.3f", airt->AiState, airt->EuValue); + DebugLog(8, logbuf, 'I'); if ((SER_SAMPLEFAIL == airt->AiState) || (SAMPLINGSUCCESS == airt->AiState)) { weatherpntmsg[HumidityNo].AiState = SER_IDLE; @@ -3746,10 +3790,14 @@ int GetHumidityData(Data_DEF *airt) int GetWindSpeedData(Data_DEF *airt) { + char logbuf[512]; + if (NULL == airt) return -1; airt->EuValue = weatherpntmsg[WindSpeedNo].EuValue; airt->AiState = weatherpntmsg[WindSpeedNo].AiState; + sprintf(logbuf, "data_state=%d, 风速value=%0.3f", airt->AiState, airt->EuValue); + DebugLog(8, logbuf, 'I'); if ((SER_SAMPLEFAIL == airt->AiState) || (SAMPLINGSUCCESS == airt->AiState)) { weatherpntmsg[WindSpeedNo].AiState = SER_IDLE; @@ -3760,10 +3808,14 @@ int GetWindSpeedData(Data_DEF *airt) int GetWindDirectionData(Data_DEF *airt) { + char logbuf[512]; + if (NULL == airt) return -1; airt->EuValue = weatherpntmsg[WindDirectionNo].EuValue; airt->AiState = weatherpntmsg[WindDirectionNo].AiState; + sprintf(logbuf, "data_state=%d, 风向value=%0.3f", airt->AiState, airt->EuValue); + DebugLog(8, logbuf, 'I'); if ((SER_SAMPLEFAIL == airt->AiState) || (SAMPLINGSUCCESS == airt->AiState)) { weatherpntmsg[WindDirectionNo].AiState = SER_IDLE; @@ -3774,10 +3826,14 @@ int GetWindDirectionData(Data_DEF *airt) int GetRainfallData(Data_DEF *airt) { + char logbuf[512]; + if (NULL == airt) return -1; airt->EuValue = weatherpntmsg[RainfallNo].EuValue; airt->AiState = weatherpntmsg[RainfallNo].AiState; + sprintf(logbuf, "data_state=%d, 雨量value=%0.3f", airt->AiState, airt->EuValue); + DebugLog(8, logbuf, 'I'); if ((SER_SAMPLEFAIL == airt->AiState) || (SAMPLINGSUCCESS == airt->AiState)) { weatherpntmsg[RainfallNo].AiState = SER_IDLE; @@ -3788,10 +3844,14 @@ int GetRainfallData(Data_DEF *airt) int GetAtmosData(Data_DEF *airt) { + char logbuf[512]; + if (NULL == airt) return -1; airt->EuValue = weatherpntmsg[AtmosNo].EuValue; airt->AiState = weatherpntmsg[AtmosNo].AiState; + sprintf(logbuf, "data_state=%d, 大气压value=%0.3f", airt->AiState, airt->EuValue); + DebugLog(8, logbuf, 'I'); if ((SER_SAMPLEFAIL == airt->AiState) || (SAMPLINGSUCCESS == airt->AiState)) { weatherpntmsg[AtmosNo].AiState = SER_IDLE; @@ -3802,10 +3862,14 @@ int GetAtmosData(Data_DEF *airt) int GetOpticalRadiationData(Data_DEF *airt) { + char logbuf[512]; + if (NULL == airt) return -1; airt->EuValue = weatherpntmsg[OpticalRadiationNo].EuValue; airt->AiState = weatherpntmsg[OpticalRadiationNo].AiState; + sprintf(logbuf, "data_state=%d, 日照value=%0.3f", airt->AiState, airt->EuValue); + DebugLog(8, logbuf, 'I'); if ((SER_SAMPLEFAIL == airt->AiState) || (SAMPLINGSUCCESS == airt->AiState)) { weatherpntmsg[OpticalRadiationNo].AiState = SER_IDLE; @@ -3816,6 +3880,8 @@ int GetOpticalRadiationData(Data_DEF *airt) int GetPullValue(int devno, Data_DEF *data) { + char logbuf[512]; + if (NULL == data) return -1; if ((0 > devno) || (MAX_SERIAL_DEV_NUM < devno)) @@ -3824,6 +3890,8 @@ int GetPullValue(int devno, Data_DEF *data) return -1; data->EuValue = srdt.ms_dev[devno].aiValue[0].EuValue; data->AiState = srdt.ms_dev[devno].aiValue[0].AiState; + sprintf(logbuf, "装置%d, ID=%d, data_state=%d, 拉力value=%0.3f", devno + 1, devparam[devno].devaddr, data->AiState, data->EuValue); + DebugLog(8, logbuf, 'I'); if ((SER_SAMPLEFAIL == data->AiState) || (SAMPLINGSUCCESS == data->AiState)) { srdt.ms_dev[devno].aiValue[0].AiState = SER_IDLE; @@ -3834,6 +3902,8 @@ int GetPullValue(int devno, Data_DEF *data) int GetAngleValue(int devno, Data_DEF *data, int Xy) { + char logbuf[512]; + if (NULL == data) return -1; if ((0 > devno) || (MAX_SERIAL_DEV_NUM < devno)) @@ -3845,6 +3915,8 @@ int GetAngleValue(int devno, Data_DEF *data, int Xy) data->EuValue = srdt.ms_dev[devno].aiValue[Xy].EuValue; data->AiState = srdt.ms_dev[devno].aiValue[Xy].AiState; + sprintf(logbuf, "装置%d, ID=%d, data_state=%d, 倾角value[%d]=%0.3f", devno + 1, devparam[devno].devaddr, data->AiState, Xy, data->EuValue); + DebugLog(8, logbuf, 'I'); if ((SER_SAMPLEFAIL == data->AiState) || (SAMPLINGSUCCESS == data->AiState)) { srdt.ms_dev[devno].aiValue[Xy].AiState = SER_IDLE; @@ -3855,6 +3927,8 @@ int GetAngleValue(int devno, Data_DEF *data, int Xy) int GetImage(int devno, IMAGE_DEF *photo) { + char logbuf[512]; + if (NULL == photo) return -1; photo->presetno = serialport[0].image.presetno; @@ -3863,6 +3937,9 @@ int GetImage(int devno, IMAGE_DEF *photo) memmove(photo->photoname, serialport[0].image.photoname, sizeof(photo->photoname)); photo->imagelen = serialport[0].image.imagelen; photo->state = serialport[0].image.state; + + sprintf(logbuf, "装置%d, image_state=%d, 预置点:%d,拍照时间:%d, pic_name:%s", devno + 1, photo->state, photo->presetno, photo->phototime, photo->photoname); + DebugLog(8, logbuf, 'I'); if ((SER_SAMPLEFAIL == photo->state) || (SAMPLINGSUCCESS == photo->state)) { serialport[0].image.state = SER_IDLE;