diff --git a/TestComm/app/src/main/cpp/CMakeLists.txt b/TestComm/app/src/main/cpp/CMakeLists.txt index c6ece9e8..4015c241 100644 --- a/TestComm/app/src/main/cpp/CMakeLists.txt +++ b/TestComm/app/src/main/cpp/CMakeLists.txt @@ -27,9 +27,9 @@ add_library( # Sets the name of the library. SpiLib.cpp native-lib.cpp GPIOControl.cpp - WeatherComm.cpp - #serialComm.cpp - #SensorsProtocol.cpp + #WeatherComm.cpp + serialComm.cpp + SensorsProtocol.cpp ) # Searches for a specified prebuilt library and stores the path as a diff --git a/TestComm/app/src/main/cpp/SensorsProtocol.cpp b/TestComm/app/src/main/cpp/SensorsProtocol.cpp index a04db0eb..466c4d52 100644 --- a/TestComm/app/src/main/cpp/SensorsProtocol.cpp +++ b/TestComm/app/src/main/cpp/SensorsProtocol.cpp @@ -577,6 +577,27 @@ void Gm_CloseSensorsPower() setCam3V3Enable(false); setRS485Enable(false); +#if 0 + setInt(CMD_SET_WTH_POWER, 0); + setInt(CMD_SET_PULL_POWER, 0); + setInt(CMD_SET_ANGLE_POWER, 0); + setInt(CMD_SET_OTHER_POWER, 0); + setInt(CMD_SET_PIC1_POWER, 0); +#endif +#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 + } // 打开传感器电源 @@ -589,10 +610,38 @@ void Gm_OpenSensorsPower() // return; //sprintf(szbuf, "Open Sensors port %d Power!", port); - set12VEnable(true); + //set12VEnable(true); setCam3V3Enable(true); setRS485Enable(true); +#if 0 + setInt(CMD_SET_WTH_POWER, 0); + setInt(CMD_SET_PULL_POWER, 0); + setInt(CMD_SET_ANGLE_POWER, 0); + setInt(CMD_SET_OTHER_POWER, 0); + setInt(CMD_SET_PIC1_POWER, 0); +#else + setInt(CMD_SET_WTH_POWER, 1); + setInt(CMD_SET_PULL_POWER, 1); + setInt(CMD_SET_ANGLE_POWER, 1); + setInt(CMD_SET_OTHER_POWER, 1); + setInt(CMD_SET_PIC1_POWER, 1); +#endif +#if 1 + setInt(CMD_SET_SPI_POWER, 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 + /* 打开电源*/ //switch(port) @@ -623,6 +672,7 @@ void BytestreamLOG(char* describe, u_char* buf, int len, char flag) { sprintf(szbuf, "%s %02X", szbuf, buf[i]); } + SaveLogTofile(szbuf); switch (flag) { case 'E': @@ -650,22 +700,30 @@ void BytestreamLOG(char* describe, u_char* buf, int len, char flag) void Gm_OpenSerialPort(int devidx) { int fd = -1; + char szbuf[512]; if((devidx < 0) || (devidx >= MAX_SERIAL_DEV_NUM)) return; + memset(szbuf, 0, sizeof(szbuf)); if(serialport[devparam[devidx].commid].fd <= 0) { fd = open(devparam[devidx].pathname, O_RDWR | O_NDELAY); if(fd < 0) { - LOGE("装置%d 打开串口%d失败!fd=%d\n", devidx+1, devparam[devidx].commid+1, fd); + sprintf(szbuf, "装置%d 打开串口%d失败!fd=%d", devidx+1, devparam[devidx].commid+1, fd); + SaveLogTofile(szbuf); + LOGE("装置%d 打开串口%d失败!fd=%d", devidx+1, devparam[devidx].commid+1, fd); return; } - LOGI("装置%d 打开串口%d成功!fd=%d\n", devidx+1, devparam[devidx].commid+1, fd); + sprintf(szbuf, "装置%d 打开串口%d成功!fd=%d", devidx+1, devparam[devidx].commid+1, fd ); + SaveLogTofile(szbuf); + LOGI("装置%d 打开串口%d成功!fd=%d", devidx+1, devparam[devidx].commid+1, fd); serialport[devparam[devidx].commid].fd = fd; return; } - LOGI("装置%d 串口%d已经打开!fd=%d\n", devidx+1, devparam[devidx].commid+1, serialport[devparam[devidx].commid].fd); + sprintf(szbuf, "装置%d 串口%d已经打开!fd=%d", devidx+1, devparam[devidx].commid+1, serialport[devparam[devidx].commid].fd); + SaveLogTofile(szbuf); + LOGI("装置%d 串口%d已经打开!fd=%d", devidx+1, devparam[devidx].commid+1, serialport[devparam[devidx].commid].fd); } // 关闭串口通讯 @@ -703,7 +761,8 @@ int GM_SerialComSend(unsigned char * cSendBuf, unsigned long nSendLen, int commi //isendtime = get_msec(); if (len < 0) { - LOGE("write data error \n"); + LOGE("write data error "); + SaveLogTofile("write data error "); return -1; } else if(len > 0) @@ -718,12 +777,16 @@ int GM_SerialComSend(unsigned char * cSendBuf, unsigned long nSendLen, int commi int Gm_SetSerialPortParam(int commid) { int ret; + char szbuf[128]; SERIAL_PARAM *pPortParam=NULL; pPortParam = &devparam[srdt.curdevidx[commid]]; ret= set_port_attr (serialport[commid].fd, pPortParam->baudrate,pPortParam->databit,pPortParam->stopbit,pPortParam->parity,0,0 );/*9600 8n1 */ if(ret < 0) { + memset(szbuf, 0, sizeof(szbuf)); + sprintf(szbuf,"串口%d 波特率等参数设置错误!", commid+1); + SaveLogTofile(szbuf); LOGE("串口%d 波特率等参数设置错误!", commid+1); return -1; } @@ -768,10 +831,10 @@ void Gm_InitSerialComm_Test(SENSOR_PARAM *sensorParam) //sprintf(devparam[0].stopbit, "1"); sensorParam[0].stopbit = 1; sensorParam[0].parity = 'n'; - sensorParam[0].IsNoInsta = 1; - //devparam[0].PowerPort = 2; - //devparam[0].devaddr = 4; - sensorParam[0].devaddr = 10; + sensorParam[0].IsNoInsta = 0; + sensorParam[0].devaddr = 4; + memset(sensorParam[0].pathname, 0, sizeof(sensorParam[0].pathname)); + sprintf(sensorParam[0].pathname, "/dev/ttysWK3"); sensorParam[1].SensorsType = WEATHER_PROTOCOL; sensorParam[1].baudrate = 9600; @@ -781,9 +844,9 @@ void Gm_InitSerialComm_Test(SENSOR_PARAM *sensorParam) sensorParam[1].stopbit = 1; sensorParam[1].parity = 0; sensorParam[1].IsNoInsta = 1; - //sensorParam[1].PowerPort = 14; - //sensorParam[1].devaddr = 1; - sensorParam[1].devaddr = 2; + sensorParam[1].devaddr = 1; + memset(sensorParam[1].pathname, 0, sizeof(sensorParam[1].pathname)); + sprintf(sensorParam[1].pathname, "/dev/ttysWK3"); sensorParam[2].SensorsType = RALLY_PROTOCOL; sensorParam[2].baudrate = 9600; @@ -796,110 +859,74 @@ void Gm_InitSerialComm_Test(SENSOR_PARAM *sensorParam) //sensorParam[2].PowerPort = 3; //sensorParam[2].devaddr = 13; sensorParam[2].devaddr = 13; -#if 0 - devparam[3].ProtocolIdx = PELCO_P_PROTOCOL; - devparam[3].baudrate = 9600; - devparam[3].databit = 8; - devparam[3].stopbit = 1; - devparam[3].parity = 0; - devparam[3].IsNoInsta = 0; - //devparam[3].PowerPort = 15; - devparam[3].CameraChannel = 1; - devparam[3].devaddr = 0; - - devparam[4].ProtocolIdx = WDIITEMP_PROTOCOL_NEW; - devparam[4].baudrate = 1200; - devparam[4].databit = 8; - devparam[4].stopbit = 1; - devparam[4].parity = 0; - devparam[4].IsNoInsta = 0; - //devparam[4].PowerPort = 17; - devparam[4].devaddr = 4; - - devparam[5].ProtocolIdx = RALLY_PROTOCOL_NEW; - devparam[5].baudrate = 9600; - devparam[5].databit = 8; - devparam[5].stopbit = 1; - devparam[5].parity = 0; - devparam[5].IsNoInsta = 1; - //devparam[5].PowerPort = 6; - devparam[5].devaddr = 11; - - devparam[6].ProtocolIdx = RALLY_PROTOCOL_NEW; - devparam[6].baudrate = 9600; - devparam[6].databit = 8; - devparam[6].stopbit = 1; - devparam[6].parity = 0; - devparam[6].IsNoInsta = 1; - //devparam[6].PowerPort = 6; - devparam[6].devaddr = 12; - - devparam[7].ProtocolIdx = RALLY_PROTOCOL_NEW; - devparam[7].baudrate = 9600; - devparam[7].databit = 8; - devparam[7].stopbit = 1; - devparam[7].parity = 0; - devparam[7].IsNoInsta = 1; - //devparam[7].PowerPort = 6; - devparam[7].devaddr = 10; - - devparam[8].ProtocolIdx = PELCO_P_PROTOCOL; - devparam[8].baudrate = 9600; - devparam[8].databit = 8; - devparam[8].stopbit = 1; - devparam[8].parity = 0; - devparam[8].IsNoInsta = 0; - //devparam[8].PowerPort = 10; - devparam[8].CameraChannel = 2; - devparam[8].devaddr = 0; - - devparam[9].ProtocolIdx = WDIITEMP_PROTOCOL_NEW; - devparam[9].baudrate = 9600; - devparam[9].databit = 8; - devparam[9].stopbit = 1; - devparam[9].parity = 0; - devparam[9].IsNoInsta = 1; - //devparam[9].PowerPort = 17; - devparam[9].devaddr = 47; - - devparam[10].ProtocolIdx = LCURRENT_PROTOCOL; - devparam[10].baudrate = 9600; - devparam[10].databit = 8; - devparam[10].stopbit = 1; - devparam[10].parity = 0; - devparam[10].IsNoInsta = 1; - //devparam[10].PowerPort = 5; - devparam[10].devaddr = 7; - - devparam[11].ProtocolIdx = LCURRENT_PROTOCOL; - devparam[11].baudrate = 9600; - devparam[11].databit = 8; - devparam[11].stopbit = 1; - devparam[11].parity = 0; - devparam[11].IsNoInsta = 1; - //devparam[11].PowerPort = 6; - devparam[11].devaddr = 6; - - devparam[12].ProtocolIdx = LCURRENT_PROTOCOL; - devparam[12].baudrate = 9600; - devparam[12].databit = 8; - devparam[12].stopbit = 1; - devparam[12].parity = 0; - devparam[12].IsNoInsta = 1; - //devparam[12].PowerPort = 8; - devparam[12].devaddr = 5; -#endif + memset(sensorParam[2].pathname, 0, sizeof(sensorParam[2].pathname)); + sprintf(sensorParam[2].pathname, "/dev/ttysWK1"); + + sensorParam[3].SensorsType = RALLY_PROTOCOL; + sensorParam[3].baudrate = 9600; + sensorParam[3].databit = 8; + //memset(devparam[2].stopbit, 0, sizeof(devparam[2].stopbit)); + //sprintf(devparam[2].stopbit, "1"); + sensorParam[3].stopbit = 1; + sensorParam[3].parity = 0; + sensorParam[3].IsNoInsta = 1; + sensorParam[3].devaddr = 10; + memset(sensorParam[3].pathname, 0, sizeof(sensorParam[3].pathname)); + sprintf(sensorParam[3].pathname, "/dev/ttysWK1"); + + sensorParam[4].SensorsType = RALLY_PROTOCOL; + sensorParam[4].baudrate = 9600; + sensorParam[4].databit = 8; + //memset(devparam[2].stopbit, 0, sizeof(devparam[2].stopbit)); + //sprintf(devparam[2].stopbit, "1"); + sensorParam[4].stopbit = 1; + sensorParam[4].parity = 0; + sensorParam[4].IsNoInsta = 1; + //sensorParam[2].PowerPort = 3; + //sensorParam[2].devaddr = 13; + sensorParam[4].devaddr = 12; + memset(sensorParam[4].pathname, 0, sizeof(sensorParam[4].pathname)); + sprintf(sensorParam[4].pathname, "/dev/ttysWK1"); + + sensorParam[6].SensorsType = SLANT_PROTOCOL; + sensorParam[6].baudrate = 9600; + sensorParam[6].databit = 8; + //memset(devparam[13].stopbit, 0, sizeof(devparam[13].stopbit)); + //sprintf(devparam[13].stopbit, "1"); + sensorParam[6].stopbit = 1; + sensorParam[6].parity = 0; + //devparam[13].PowerPort = 4; + sensorParam[6].IsNoInsta = 1; + sensorParam[6].devaddr = 2; + memset(sensorParam[6].pathname, 0, sizeof(sensorParam[6].pathname)); + sprintf(sensorParam[6].pathname, "/dev/ttysWK0"); + + + sensorParam[7].SensorsType = SLANT_PROTOCOL; + sensorParam[7].baudrate = 9600; + sensorParam[7].databit = 8; + //memset(devparam[13].stopbit, 0, sizeof(devparam[13].stopbit)); + //sprintf(devparam[13].stopbit, "1"); + sensorParam[7].stopbit = 1; + sensorParam[7].parity = 0; + //devparam[13].PowerPort = 4; + sensorParam[7].IsNoInsta = 1; + sensorParam[7].devaddr = 3; + memset(sensorParam[7].pathname, 0, sizeof(sensorParam[7].pathname)); + sprintf(sensorParam[7].pathname, "/dev/ttysWK0"); sensorParam[13].SensorsType = SLANT_PROTOCOL; sensorParam[13].baudrate = 9600; sensorParam[13].databit = 8; //memset(devparam[13].stopbit, 0, sizeof(devparam[13].stopbit)); //sprintf(devparam[13].stopbit, "1"); - sensorParam[0].stopbit = 1; + sensorParam[13].stopbit = 1; sensorParam[13].parity = 0; //devparam[13].PowerPort = 4; sensorParam[13].IsNoInsta = 1; - sensorParam[13].devaddr = 2; + sensorParam[13].devaddr = 5; + memset(sensorParam[13].pathname, 0, sizeof(sensorParam[13].pathname)); + sprintf(sensorParam[13].pathname, "/dev/ttysWK0"); #if 0 devparam[14].ProtocolIdx = SLANT_PROTOCOL; devparam[14].baudrate = 1200; @@ -980,6 +1007,8 @@ void Gm_InitSerialComm_Test(SENSOR_PARAM *sensorParam) //devparam[3].PowerPort = 15; sensorParam[3].CameraChannel = 1; sensorParam[3].devaddr = 0; + memset(sensorParam[3].pathname, 0, sizeof(sensorParam[3].pathname)); + sprintf(sensorParam[3].pathname, "/dev/ttysWK0"); #endif } @@ -1056,6 +1085,7 @@ void Gm_InitSerialComm() else { sprintf(szbuf, "%s 已启用!;", szbuf); + SaveLogTofile(szbuf); LOGI("%s", szbuf); } } @@ -1230,7 +1260,7 @@ void FindDevUseSerialCommNo() case PELCO_D_PROTOCOL: /* 摄像机协议*/ case PELCO_P_PROTOCOL: /* 摄像机协议*/ case SERIALCAMERA_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/ttyS1"); devparam[i].commid = 0; @@ -1246,7 +1276,7 @@ void FindDevUseSerialCommNo() void GM_StartSerialComm() { int i, j, commid; - char szbuf[64]; + char szbuf[64], logbuf[128]; long polltime=0; // 测试使用初始化配置 @@ -1267,8 +1297,8 @@ void GM_StartSerialComm() continue; serialport[i].Retry = 0; //serialport[i].RetryTime = 500/TIMER_CNT; - serialport[i].RetryTime = 300; - serialport[i].WaitTime = 0; + serialport[i].RetryTime = 800; + serialport[i].WaitTime = 20; serialport[i].m_iRevStatus = 0; serialport[i].m_iRecvLen = 0; serialport[i].m_iNeedRevLength = 0; @@ -1374,8 +1404,11 @@ void GM_StartSerialComm() // 打开传感器电源 // 打开对应的485电源 // 打开串口通讯 + memset(logbuf, 0 , sizeof(logbuf)); if(1 == srdt.ms_dev[i].IsNeedSerial) { + sprintf(logbuf, "装置%d, IsNoInsta=%d, 类型:%s", i+1, devparam[i].IsNoInsta, szbuf); + SaveLogTofile(logbuf); LOGI("装置%d, IsNoInsta=%d, 类型:%s", i+1, devparam[i].IsNoInsta, szbuf); Gm_OpenSensorsPower(); Gm_OpenSerialPort(i); @@ -1384,6 +1417,7 @@ void GM_StartSerialComm() } + SaveLogTofile("启动数据采样!"); LOGI("启动数据采样!"); /* 直接使用循环进行采样处理*/ polltime = get_msec(); @@ -1395,6 +1429,7 @@ void GM_StartSerialComm() if(GM_SerialTimer() < 0) { //LOGE("12V state=%d", getInt(CMD_SET_12V_EN_STATE)); + SaveLogTofile("退出采样流程!"); LOGV("退出采样流程!"); sleep(15); GM_StartSerialComm(); @@ -1409,7 +1444,7 @@ void GM_StartSerialComm() void GM_StartSerialCameraPhoto(BYTE channel, int cmdidx) { int i, flag=0; - char szbuf[64]; + char szbuf[128], logbuf[128]; srdt.RephotographCnt = 0; FindDevUseSerialCommNo(); @@ -1433,7 +1468,7 @@ void GM_StartSerialCameraPhoto(BYTE channel, int cmdidx) flag = 0; #endif i = srdt.camerauseserial; - if((i<0) ||(i > MAX_SERIAL_PORT_NUM)) + if((i<0) ||(i >= MAX_SERIAL_PORT_NUM)) return; serialport[i].Retry = 0; //serialport[i].RetryTime = 500/TIMER_CNT; @@ -1498,6 +1533,8 @@ void GM_StartSerialCameraPhoto(BYTE channel, int cmdidx) } if(1 == srdt.ms_dev[i].IsNeedSerial) { + sprintf(logbuf, "装置%d, IsNoInsta=%d, 类型:%s", i+1, devparam[i].IsNoInsta, szbuf); + SaveLogTofile(logbuf); LOGI("装置%d, IsNoInsta=%d, 类型:%s", i+1, devparam[i].IsNoInsta, szbuf); Gm_OpenSensorsPower(); Gm_OpenSerialPort(i); @@ -1507,6 +1544,7 @@ void GM_StartSerialCameraPhoto(BYTE channel, int cmdidx) { sprintf(szbuf, "摄像机启动串口定时器!"); LOGI("%s", szbuf); + SaveLogTofile(szbuf); for(;;) { usleep(10); @@ -1516,6 +1554,7 @@ void GM_StartSerialCameraPhoto(BYTE channel, int cmdidx) { //LOGE("12V state=%d", getInt(CMD_SET_12V_EN_STATE)); LOGV("退出拍照流程!"); + SaveLogTofile("退出拍照流程!"); //sleep(15); //GM_StartSerialComm(); //GM_StartSerialCameraPhoto(1,0); @@ -1620,6 +1659,7 @@ void GM_IsCloseSensors() { if(srdt.ms_dev[i].IsNeedSerial == 0) continue; + memset(buf, 0, sizeof(buf)); switch(devparam[i].ProtocolIdx) { case WEATHER_PROTOCOL: /* 气象*/ @@ -1631,10 +1671,12 @@ void GM_IsCloseSensors() srdt.ms_dev[i].FirstCmdTimeCnt = get_msec(); break; } - if(get_msec()- srdt.ms_dev[i].FirstCmdTimeCnt > 15*1000) + if(get_msec()- srdt.ms_dev[i].FirstCmdTimeCnt > 50*1000) { srdt.ms_dev[i].IsNeedSerial = 0; // 关闭传感器电源 + sprintf(buf, "读取装置%d数据%0.3f秒,关闭装置%d电源!", i+1, (get_msec()-srdt.ms_dev[i].FirstCmdTimeCnt)/1000.0,i+1); + SaveLogTofile(buf); LOGI("读取装置%d数据%0.3f秒,关闭装置%d电源!", i+1, (get_msec()-srdt.ms_dev[i].FirstCmdTimeCnt)/1000.0,i+1); for(j=0;jimage.ilen[i]; } + memset(szbuf, 0, sizeof(szbuf)); memset(filedir, 0, sizeof(filedir)); sprintf(filedir, "/sdcard/photo/"); if(access(filedir, 0)==0) - LOGI("文件路径已经存在!"); + { + sprintf(szbuf,"文件路径%s已经存在!", filedir); + SaveLogTofile(szbuf); + LOGI("%s", szbuf); + } else { status = mkdir(filedir, S_IRWXU | S_IRWXG | S_IRWXO); @@ -1798,10 +1891,15 @@ int SaveImageDataTofile(int devno) return -1; len = fwrite(image,1, pPortParam->image.imagelen, fp); fclose(fp); + free(image); + image = NULL; if(len < pPortParam->image.imagelen) return -1; else { + memset(szbuf, 0, sizeof(szbuf)); + sprintf(szbuf,"写入图片文件%s成功!", pPortParam->image.photoname); + SaveLogTofile(szbuf); LOGI("写入图片文件%s成功!", pPortParam->image.photoname); return 1; } @@ -1928,7 +2026,7 @@ void CameraPhotoPortDataProcess( int devno) //DebugStringPrintf(szbuf, strlen(szbuf), 1); if(uDevAddr != devparam[devno].devaddr) return; - + memset(szbuf, 0, sizeof(szbuf)); switch(cmdidx) { case 0x10: /* 拍照应答*/ @@ -1938,6 +2036,8 @@ void CameraPhotoPortDataProcess( int devno) if(srdt.RephotographCnt > 2) { pPortParam->SerialCmdidx = -1; + sprintf(szbuf, "因摄像机重拍%d次均未成功!结束拍照!",srdt.RephotographCnt); + SaveLogTofile(szbuf); LOGE("因摄像机重拍%d次均未成功!结束拍照!",srdt.RephotographCnt); } break; @@ -1956,6 +2056,7 @@ void CameraPhotoPortDataProcess( int devno) srdt.historyimagenum[devparam[devno].CameraChannel-1] = rtumsg.MsgData[i+7]+(rtumsg.MsgData[i+6]<<8); sprintf(szbuf, "有%d张历史图片!",srdt.historyimagenum[devparam[devno].CameraChannel-1]); LOGV("%s", szbuf); + SaveLogTofile(szbuf); presetno = (int)rtumsg.MsgData[i+8]; pPortParam->image.presetno = presetno; pPortParam->image.state = Sample; @@ -1971,6 +2072,7 @@ void CameraPhotoPortDataProcess( int devno) pPortParam->image.ilen[iNo-1] = packsize; sprintf(szbuf, "收到第%d(总%d包)包长=%d", iNo, srdt.imagepacketnum, packsize); LOGV("%s", szbuf); + SaveLogTofile(szbuf); curserial->RevCmdFlag = 1; pPortParam->FirstCmdTimeCnt = get_msec(); if((iNo == pPortParam->SerialCmdidx) && (0xFF > rtumsg.MsgData[i+2])) @@ -2025,6 +2127,7 @@ void CameraPhotoPortDataProcess( int devno) sprintf(szbuf, "问询第%d包图片摄像机应答第%d包,连续错误%d次!", pPortParam->SerialCmdidx, iNo, srdt.errorPhotoNoCnt); LOGE("%s", szbuf); + SaveLogTofile(szbuf); if(srdt.errorPhotoNoCnt > 5) { pPortParam->SerialCmdidx = 0; @@ -2034,12 +2137,14 @@ void CameraPhotoPortDataProcess( int devno) pPortParam->SerialCmdidx = -1; sprintf(szbuf, "因摄像机重拍%d次均未成功!结束拍照!",srdt.RephotographCnt); LOGE("%s", szbuf); + SaveLogTofile(szbuf); } } break; case 0x03: sprintf(szbuf, "设置波特率%d成功", devparam[devno].baudrate); LOGD("%s", szbuf); + SaveLogTofile(szbuf); pPortParam->SerialCmdidx = srdt.iLastGetPhotoNo; srdt.iLastGetPhotoNo = -1; curserial->RevCmdFlag = 1; @@ -2051,6 +2156,7 @@ void CameraPhotoPortDataProcess( int devno) pPortParam->SerialCmdidx = -1; sprintf(szbuf, "没有历史图片!结束读取图片!"); LOGI("%s", szbuf); + SaveLogTofile(szbuf); break; } i = 6; @@ -2068,6 +2174,7 @@ void CameraPhotoPortDataProcess( int devno) pPortParam->image.presetno = presetno; sprintf(szbuf, "读取历史图片,还有%d张历史图片!",srdt.historyimagenum[devparam[devno].CameraChannel-1]); LOGI("%s", szbuf); + SaveLogTofile(szbuf); curserial->RevCmdFlag = 1; pPortParam->SerialCmdidx = 1; srdt.sendphotocmdcnt = 0; @@ -2076,8 +2183,9 @@ void CameraPhotoPortDataProcess( int devno) if(0xFF == rtumsg.MsgData[10]) { pPortParam->SerialCmdidx = -1; - sprintf(szbuf, "图片保存失败!"); + sprintf(szbuf, "摄像机图片保存失败!"); LOGE("%s", szbuf); + SaveLogTofile(szbuf); } pPortParam->SerialCmdidx = -1; if(0 == rtumsg.MsgData[10]) @@ -2106,12 +2214,13 @@ long lsendtime=0; **********************************************************************************/ void SendCmdFormPollCmdBuf( int port ) { - char buf[64]; + char buf[128]; int len, ret; long lctime; SIO_PARAM_SERIAL_DEF *pPortParam; pPortParam = &serialport[port]; + memset(buf, 0, sizeof(buf)); lctime = get_msec(); if(pPortParam->ForceWaitFlag && pPortParam->ForceWaitCnt) { @@ -2152,15 +2261,20 @@ void SendCmdFormPollCmdBuf( int port ) ClearCmdFormPollCmdBuf(port); } - if(pPortParam->WaitTime) + if(pPortParam->WaitTime > 0) { - pPortParam->WaitTimeCnt++; - if(pPortParam->WaitTimeCnt < pPortParam->WaitTime) + if((lctime - pPortParam->WaitTimeCnt > 30*pPortParam->WaitTime) || (lctime - pPortParam->WaitTimeCnt < 0)) + { + pPortParam->WaitTimeCnt = lctime; + return; + } + + if(lctime- pPortParam->WaitTimeCnt < pPortParam->WaitTime) { return; } } - pPortParam->WaitTimeCnt = 0; + pPortParam->WaitTimeCnt = lctime; if ( pPortParam->ReSendCmdFlag ) len = pPortParam->cmdlen; @@ -2174,6 +2288,8 @@ void SendCmdFormPollCmdBuf( int port ) serialport[devparam[srdt.curdevidx[port]].commid].m_iRecvLen = 0; // 当发送一条新指令时,清除接收状态 serialport[devparam[srdt.curdevidx[port]].commid].m_iRevStatus = 0; + if(serialport[port].fd < 0) + return; ret = Gm_SetSerialPortParam(port); if(ret < 0) return; @@ -2181,12 +2297,16 @@ void SendCmdFormPollCmdBuf( int port ) if(len < 1) { LOGE("串口%d, 发送命令失败!", port+1); + sprintf(buf, "串口%d, 发送命令失败!", port+1); + SaveLogTofile(buf); } else { sprintf(buf, "发送串口%d 装置%d命令:", port+1, srdt.curdevidx[port]+1); BytestreamLOG(buf, &pPortParam->PollCmd[2], len, 'D'); + sprintf(buf, "sendtimeconst= %ld", lctime-lsendtime); + SaveLogTofile(buf); LOGW("sendtimeconst= %ld", lctime-lsendtime); lsendtime = lctime; } @@ -2210,7 +2330,7 @@ void ClearCmdAllFlag(int commid) serialport[commid].RetryCnt = 0; serialport[commid].RetryTimeCnt = get_msec(); - serialport[commid].WaitTimeCnt = 0; + serialport[commid].WaitTimeCnt = get_msec(); serialport[commid].ForceWaitFlag = 0; serialport[commid].ForceWaitCnt = 0; serialport[commid].SendCmdFlag = 0; @@ -2245,7 +2365,7 @@ int FindNextCameraPhotoCommand(int devidx) char szbuf[128]; //如果命令缓冲区仍有命令,则退出本函数 - if((devparam[devidx].commid+1 < 1) || (devparam[devidx].commid+1 >= MAX_SERIAL_PORT_NUM)) + if((devparam[devidx].commid+1 < 1) || (devparam[devidx].commid+1 > MAX_SERIAL_PORT_NUM)) return -1; // if(serialport[devparam[devidx].commid].cmdlen > 0) // return -1; @@ -2258,6 +2378,7 @@ int FindNextCameraPhotoCommand(int devidx) srdt.ms_dev[devidx].SerialCmdidx = -1; sprintf(szbuf, "装置配置中,通道号配置错误!结束拍照!"); LOGI("%s", szbuf); + SaveLogTofile(szbuf); } cmdno = srdt.ms_dev[devidx].SerialCmdidx; lcurtime = get_msec(); @@ -2281,6 +2402,7 @@ int FindNextCameraPhotoCommand(int devidx) srdt.ms_dev[devidx].SerialCmdidx = -1; sprintf(szbuf, "串口摄像机未接或故障!结束拍照!"); LOGI("%s", szbuf); + SaveLogTofile(szbuf); return -1; } LOGE("time=%ldms", lcurtime-srdt.ms_dev[devidx].FirstCmdTimeCnt); @@ -2308,6 +2430,7 @@ int FindNextCameraPhotoCommand(int devidx) default: sprintf(szbuf, "设置串口摄像机参数时,配置参数错误!退出设置!"); LOGI("%s", szbuf); + SaveLogTofile(szbuf); srdt.ms_dev[devidx].SerialCmdidx = srdt.iLastGetPhotoNo; srdt.iLastGetPhotoNo = -1; return -1; @@ -2318,6 +2441,7 @@ int FindNextCameraPhotoCommand(int devidx) srdt.ms_dev[devidx].SerialCmdidx = -1; sprintf(szbuf, "设置串口摄像机参数时,15秒未收到摄像机应答!退出设置!"); LOGI("%s", szbuf); + SaveLogTofile(szbuf); return -1; } cmdidx = 0x03; @@ -2474,6 +2598,7 @@ int FindNextCameraPhotoCommand(int devidx) srdt.ms_dev[devidx].SerialCmdidx = -1; sprintf(szbuf, "读取第%d包图片数据35秒未收到!结束拍照!",packetsize); LOGI("%s", szbuf); + SaveLogTofile(szbuf); return -1; } break; @@ -2573,6 +2698,7 @@ int Gm_CtrlPtzCmd(u_char channel, DWORD ptzcmd) { sprintf(szbuf, "没有找到摄像机使用的通道和串口通讯协议"); LOGI("%s", szbuf); + SaveLogTofile(szbuf); return 1; } #if 0 @@ -2587,6 +2713,7 @@ int Gm_CtrlPtzCmd(u_char channel, DWORD ptzcmd) #endif sprintf(szbuf, "摄像机通道%d 使用串口%d", channel, srdt.ms_dev[i].UseSerialidx+1); LOGI("%s", szbuf); + SaveLogTofile(szbuf); //} srdt.usecameradevidx = i; // 查找串口序号 @@ -2723,6 +2850,7 @@ void Gm_SendPelco_pCommand( DWORD cmdtype) if(len < 1) { LOGE("发送Pelco_p命令失败"); + SaveLogTofile("发送Pelco_p命令失败"); } else { @@ -2775,6 +2903,7 @@ void Gm_SendPelco_DCommand( DWORD cmdtype) if(len < 1) { LOGE("发送Pelco_D命令失败"); + SaveLogTofile("发送Pelco_D命令失败"); } else { @@ -2806,30 +2935,26 @@ BYTE Gm_Pelco_DCheck( BYTE *msg, int len ) **********************************************************************************/ int FindNextShxyProtocolCommand( int devidx ) { + int cmdno = 0; + //如果命令缓冲区仍有命令,则退出本函数 - if((devparam[devidx].commid+1 < 1) || (devparam[devidx].commid+1 >= MAX_SERIAL_PORT_NUM)) + if((devparam[devidx].commid+1 < 1) || (devparam[devidx].commid+1 > MAX_SERIAL_PORT_NUM)) return -1; - //if(srdt.ms_dev[devidx].SerialCmdidx == 0) + if(get_msec()-srdt.ms_dev[devidx].FirstCmdTimeCnt < 3*1000) { - if(get_msec()-srdt.ms_dev[devidx].FirstCmdTimeCnt < 3*1000) - { - //srdt.ms_dev[devidx].FirstCmdTimeCnt++; - return -1; - } -#if 0 - if(SLANT_PROTOCOL == devparam[devidx].ProtocolIdx) - { - devparam[devidx].devaddr = 0xFF; - MakeShxyProtocolPollCommand(devidx, 0x02); - } - - //else if(WEATHER_PROTOCOL== devparam[devidx].ProtocolIdx) - // MakeShxyProtocolPollCommand(devidx, 0x09); - else -#endif + return -1; + } + //if(SLANT_PROTOCOL == devparam[devidx].ProtocolIdx) + // return -1; + switch (cmdno) + { + case 0: /* 正常采集数据*/ MakeShxyProtocolPollCommand(devidx, 0x09); - srdt.curdevidx[srdt.ms_dev[devidx].UseSerialidx] = devidx; - return 1; + srdt.curdevidx[devparam[devidx].commid] = devidx; + return 1; + case 1: /* 测试读取地址*/ + default: + break; } return -1; } @@ -2839,11 +2964,15 @@ int FindNextShxyProtocolCommand( int devidx ) **********************************************************************************/ void MakeShxyProtocolPollCommand(int portno, BYTE cmdidx) { - int i/*, sendWaitTime = 100, y*/; + int i, length=0; + int newaddr = 9, baud = 9600, stopbit = 1, parity=0; //char buf[128]; u_char *sendbuf; - sendbuf = serialport[srdt.ms_dev[portno].UseSerialidx].PollCmd; + sendbuf = serialport[devparam[portno].commid].PollCmd; + + /* 测试变量*/ + cmdidx =cmdidx; i = 0; sendbuf[i++] = 0x00; // 强制等待时间 @@ -2854,12 +2983,34 @@ void MakeShxyProtocolPollCommand(int portno, BYTE cmdidx) sendbuf[i++] = 0x68; sendbuf[i++] = (BYTE)devparam[portno].devaddr; // 传感器地址 sendbuf[i++] = cmdidx; // 命令信息0x06 + switch (cmdidx) + { + case 1: /* 设置传感器新地址*/ + sendbuf[i++] = newaddr; + length = 1; + break; + case 2: /* 广播读地址*/ + sendbuf[6] = 0xFF; + break; + case 3: /* 设置串口参数*/ + sendbuf[i++] = (u_char)(baud >> 24); + sendbuf[i++] = (u_char)(baud >> 16); + sendbuf[i++] = (u_char)(baud >> 8); + sendbuf[i++] = (u_char)baud; + sendbuf[i++] = 8; + sendbuf[i++] = parity; + sendbuf[i++] = stopbit; + length = 7; + break; + default: + break; + } sendbuf[i] = CalLpc((u_char *)&sendbuf[6],i-6); i+= 1; + sendbuf[3] = length; + sendbuf[4] = length; sendbuf[i++] = 0x16; // 信息尾 - serialport[srdt.ms_dev[portno].UseSerialidx].cmdlen = i; - //sprintf((char*)buf, "生成串口%d 装置%d倾角命令:", srdt.ms_dev[portno].UseSerialidx+1, portno+1); - //Gm_OMC_UART_DebugHex(buf, i-2, (char*)&sendbuf[2]); + serialport[devparam[portno].commid].cmdlen = i; } unsigned char CalLpc(unsigned char *msg, int len) @@ -3053,6 +3204,7 @@ void ShxyProtocolDataProcess( int devno) { sprintf(szbuf, "倾角ID:%d slantangle X=%0.3f ", devparam[devno].devaddr, fvalue); LOGV("%s", szbuf); + SaveLogTofile(szbuf); } //XslantSec[aipnt][srdt.SectimesamplingCnt[0]] = (short)slantpntmsg[aipnt][0].EuValue; //srdt.SectimesamplingCnt[0] += 1; @@ -3065,6 +3217,7 @@ void ShxyProtocolDataProcess( int devno) { sprintf(szbuf, "Y =%0.3f ", fvalue); LOGV("%s", szbuf); + SaveLogTofile(szbuf); } if((fvalue < -59) ||(fvalue > 59)) { @@ -3098,9 +3251,7 @@ 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)) { @@ -3121,6 +3272,7 @@ void ShxyProtocolDataProcess( int devno) { sprintf(szbuf, "温度:%0.3f ", fvalue); LOGV("%s", szbuf); + SaveLogTofile(szbuf); } break; case 2: /*气压*/ @@ -3142,6 +3294,7 @@ void ShxyProtocolDataProcess( int devno) { sprintf(szbuf, "气压:%0.3f ", fvalue); LOGV("%s", szbuf); + SaveLogTofile(szbuf); } break; case 3: /*湿度*/ @@ -3163,6 +3316,7 @@ void ShxyProtocolDataProcess( int devno) { sprintf(szbuf, "湿度:%0.3f ", fvalue); LOGV("%s", szbuf); + SaveLogTofile(szbuf); } break; case 4: /*雨量*/ @@ -3192,6 +3346,7 @@ void ShxyProtocolDataProcess( int devno) //sprintf(szbuf, "风速:%0.3f ", fwind); sprintf(szbuf, "风速:%0.3f ", fvalue); LOGV("%s", szbuf); + SaveLogTofile(szbuf); } break; case 7: /*风向*/ @@ -3213,25 +3368,10 @@ void ShxyProtocolDataProcess( int devno) { sprintf(szbuf, "风向:%0.3f ", fvalue); LOGV("%s", szbuf); + SaveLogTofile(szbuf); } break; case 8: /*拉力*/ -#if 0 - if(RESERVE1_PROTOCOL == pPortParam->ProtocolIdx) - { - leirallypntmsg[0].EuValue = fvalue*leirallypntmsg[0].AiParam.fFactor\ - +leirallypntmsg[0].AiParam.EuValueDelta; - leirallypntmsg[0].AiState = 1; - g_SelfTest.SensorsFault |= (0x800000); - if ((gDisSunRain & 0x10) == 0x10) - { - sprintf(szbuf, "地址%d模拟导线拉力:%0.3fKg ", pPortParam->devaddr, fvalue/1000.0); - DebugStringPrintf(szbuf, strlen(szbuf), 1); - } - } - else - { -#endif pPortParam->recvdatacnt++; if(pPortParam->recvdatacnt < 2) break; @@ -3244,6 +3384,7 @@ void ShxyProtocolDataProcess( int devno) //rallypntmsg[aipnt][0].AiState = 1; sprintf(szbuf, "地址%d拉力:%0.3fKg ", devparam[devno].devaddr, fvalue); LOGV("%s", szbuf); + SaveLogTofile(szbuf); //} break; case 9: /*倾角传感器X轴倾角*/ @@ -3264,10 +3405,12 @@ void ShxyProtocolDataProcess( int devno) //slantpntmsg[aipnt][0].AiState = 1; sprintf(szbuf, "倾角ID:%d slantangle X=%0.3f ", devparam[devno].devaddr, fvalue); LOGV("%s", szbuf); + SaveLogTofile(szbuf); break; case 10: /*倾角传感器Y轴倾角*/ sprintf(szbuf, "Y =%0.3f ", fvalue); LOGV("%s", szbuf); + SaveLogTofile(szbuf); if((fvalue < -59) ||(fvalue > 59)) { @@ -3282,130 +3425,6 @@ void ShxyProtocolDataProcess( int devno) pPortParam->aiValue[1].AiState = Sample; //slantpntmsg[aipnt][1].AiState = 1; break; -#if 0 - case 11: /*测温球导线温度*/ - - fcorvalue = WireTemperatureCorrection(fvalue/100, (WORD)pPortParam->devaddr); - - wdiitemppntmsg[aipnt][0].EuValue = fvalue*wdiitemppntmsg[aipnt][0].AiParam.fFactor\ - +wdiitemppntmsg[aipnt][0].AiParam.EuValueDelta; -//#else - wdiitemppntmsg[aipnt][0].EuValue = fcorvalue*100*wdiitemppntmsg[aipnt][0].AiParam.fFactor\ - +wdiitemppntmsg[aipnt][0].AiParam.EuValueDelta; - - wdiitemppntmsg[aipnt][0].AiState = 1; - g_SelfTest.SensorsFault |= (0x100000); - sprintf(szbuf, "地址%d导线温度:%0.3f ", pPortParam->devaddr, fcorvalue); - DebugStringPrintf(szbuf, strlen(szbuf), 0); - break; - case 12: /*测温球内部温度*/ - wdiitemppntmsg[aipnt][1].EuValue = fvalue*wdiitemppntmsg[aipnt][1].AiParam.fFactor\ - +wdiitemppntmsg[aipnt][1].AiParam.EuValueDelta; - wdiitemppntmsg[aipnt][1].AiState = 1; - sprintf(szbuf, "地址%d内部温度:%0.3f ", pPortParam->devaddr, fvalue/100); - DebugStringPrintf(szbuf, strlen(szbuf), 1); - break; - case 13: /*测温球导线X轴倾角*/ - wdiitemppntmsg[aipnt][3].EuValue = fvalue*wdiitemppntmsg[aipnt][3].AiParam.fFactor\ - +wdiitemppntmsg[aipnt][3].AiParam.EuValueDelta; - wdiitemppntmsg[aipnt][3].AiState = 1; - sprintf(szbuf, "地址%d导线X轴倾角:%0.3f ", pPortParam->devaddr, fvalue/100); - DebugStringPrintf(szbuf, strlen(szbuf), 0); - break; - case 14: /*测温球导线Y轴倾角*/ - wdiitemppntmsg[aipnt][4].EuValue = fvalue*wdiitemppntmsg[aipnt][4].AiParam.fFactor\ - +wdiitemppntmsg[aipnt][4].AiParam.EuValueDelta; - wdiitemppntmsg[aipnt][4].AiState = 1; - sprintf(szbuf, "地址%d导线Y轴倾角:%0.3f ", pPortParam->devaddr, fvalue/100); - DebugStringPrintf(szbuf, strlen(szbuf), 1); - break; - case 15: /*测温球导线电流*/ - wdiitemppntmsg[aipnt][5].EuValue = fvalue*wdiitemppntmsg[aipnt][5].AiParam.fFactor\ - +wdiitemppntmsg[aipnt][5].AiParam.EuValueDelta; - wdiitemppntmsg[aipnt][5].AiState = 1; - sprintf(szbuf, "地址%d导线电流:%0.3f ", pPortParam->devaddr, fvalue/100); - DebugStringPrintf(szbuf, strlen(szbuf), 0); - break; - case 16: /*测温球电池电压*/ - wdiitemppntmsg[aipnt][2].EuValue = fvalue*wdiitemppntmsg[aipnt][2].AiParam.fFactor\ - +wdiitemppntmsg[aipnt][2].AiParam.EuValueDelta; - wdiitemppntmsg[aipnt][2].AiState = 1; - sprintf(szbuf, "地址%d测温球电池电压:%0.3fV ", pPortParam->devaddr, fvalue/100); - DebugStringPrintf(szbuf, strlen(szbuf), 1); - break; - case 17: /*A相泄漏电流平均值;*/ - LCpntmsg[0].EuValue = fvalue*LCpntmsg[0].AiParam.fFactor + LCpntmsg[0].AiParam.EuValueDelta; - LCpntmsg[0].AiState = 1; - sprintf(szbuf, "A相泄漏电流平均值:%0.3f ", fvalue/100); - DebugStringPrintf(szbuf, strlen(szbuf), 0); - break; - case 18: /*A相泄漏电流最大值;*/ - LCpntmsg[1].EuValue = fvalue*LCpntmsg[1].AiParam.fFactor + LCpntmsg[1].AiParam.EuValueDelta; - LCpntmsg[1].AiState = 1; - sprintf(szbuf, "A相泄漏电流最大值:%0.3f ", fvalue/100); - DebugStringPrintf(szbuf, strlen(szbuf), 0); - break; - case 19: /*A相超过3mA的脉冲频次*/ - LCpntmsg[2].EuValue = fvalue*LCpntmsg[2].AiParam.fFactor + LCpntmsg[2].AiParam.EuValueDelta; - LCpntmsg[2].AiState = 1; - sprintf(szbuf, "A相超过3mA的脉冲频次:%0.3f ", fvalue); - DebugStringPrintf(szbuf, strlen(szbuf), 0); - break; - case 20: /*A相超过10mA的脉冲频次*/ - LCpntmsg[3].EuValue = fvalue*LCpntmsg[3].AiParam.fFactor + LCpntmsg[3].AiParam.EuValueDelta; - LCpntmsg[3].AiState = 1; - sprintf(szbuf, "A相超过10mA的脉冲频次:%0.3f ", fvalue); - DebugStringPrintf(szbuf, strlen(szbuf), 1); - break; - case 21: /*B相泄漏电流平均值;*/ - LCpntmsg[4].EuValue = fvalue*LCpntmsg[4].AiParam.fFactor + LCpntmsg[4].AiParam.EuValueDelta; - LCpntmsg[4].AiState = 1; - sprintf(szbuf, "B相泄漏电流平均值:%0.3f ", fvalue/100); - DebugStringPrintf(szbuf, strlen(szbuf), 0); - break; - case 22: /*B相泄漏电流最大值;*/ - LCpntmsg[5].EuValue = fvalue*LCpntmsg[5].AiParam.fFactor + LCpntmsg[5].AiParam.EuValueDelta; - LCpntmsg[5].AiState = 1; - sprintf(szbuf, "B相泄漏电流最大值:%0.3f ", fvalue/100); - DebugStringPrintf(szbuf, strlen(szbuf), 0); - break; - case 23: /*B相超过3mA的脉冲频次*/ - LCpntmsg[6].EuValue = fvalue*LCpntmsg[6].AiParam.fFactor + LCpntmsg[6].AiParam.EuValueDelta; - LCpntmsg[6].AiState = 1; - sprintf(szbuf, "B相超过3mA的脉冲频次:%0.3f ", fvalue); - DebugStringPrintf(szbuf, strlen(szbuf), 0); - break; - case 24: /*B相超过10mA的脉冲频次*/ - LCpntmsg[7].EuValue = fvalue*LCpntmsg[7].AiParam.fFactor + LCpntmsg[7].AiParam.EuValueDelta; - LCpntmsg[7].AiState = 1; - sprintf(szbuf, "B相超过10mA的脉冲频次:%0.3f ", fvalue); - DebugStringPrintf(szbuf, strlen(szbuf), 1); - break; - case 25: /*C相泄漏电流平均值;*/ - LCpntmsg[8].EuValue = fvalue*LCpntmsg[8].AiParam.fFactor + LCpntmsg[8].AiParam.EuValueDelta; - LCpntmsg[8].AiState = 1; - sprintf(szbuf, "C相泄漏电流平均值:%0.3f ", fvalue/100); - DebugStringPrintf(szbuf, strlen(szbuf), 0); - break; - case 26: /*C相泄漏电流最大值;*/ - LCpntmsg[9].EuValue = fvalue*LCpntmsg[9].AiParam.fFactor + LCpntmsg[9].AiParam.EuValueDelta; - LCpntmsg[9].AiState = 1; - sprintf(szbuf, "C相泄漏电流最大值:%0.3f ", fvalue/100); - DebugStringPrintf(szbuf, strlen(szbuf), 0); - break; - case 27: /*C相超过3mA的脉冲频次*/ - LCpntmsg[10].EuValue = fvalue*LCpntmsg[10].AiParam.fFactor + LCpntmsg[10].AiParam.EuValueDelta; - LCpntmsg[10].AiState = 1; - sprintf(szbuf, "C相超过3mA的脉冲频次:%0.3f ", fvalue); - DebugStringPrintf(szbuf, strlen(szbuf), 0); - break; - case 28: /*C相超过10mA的脉冲频次*/ - LCpntmsg[11].EuValue = fvalue*LCpntmsg[11].AiParam.fFactor + LCpntmsg[11].AiParam.EuValueDelta; - LCpntmsg[11].AiState = 1; - sprintf(szbuf, "C相超过10mA的脉冲频次:%0.3f ", fvalue); - DebugStringPrintf(szbuf, strlen(szbuf), 1); - break; -#endif } } @@ -3504,7 +3523,7 @@ void Collect_sensor_data(SENSOR_PARAM *sensorParam) 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].stopbit = (int)(sensorParam[i].stopbit*10); devparam[i].CameraChannel = sensorParam[i].CameraChannel; devparam[i].Phase = sensorParam[i].Phase; } @@ -3526,9 +3545,11 @@ void CameraPhotoCmd(SENSOR_PARAM *sensorParam, u_char channel, int cmdidx, u_cha //baudrate = getBaudrate(sensorParam[i].baudrate); devparam[i].baudrate = getBaudrate(sensorParam[i].baudrate); devparam[i].databit = sensorParam[i].databit; - devparam[i].stopbit = (int)sensorParam[i].stopbit*10; + devparam[i].stopbit = (int)(sensorParam[i].stopbit*10); devparam[i].CameraChannel = sensorParam[i].CameraChannel; devparam[i].Phase = sensorParam[i].Phase; + memset(devparam[i].pathname, 0, sizeof(devparam[i].pathname)); + memmove(devparam[i].pathname, sensorParam[i].pathname, sizeof(devparam[i].pathname)); } #if 0 FindDevUseSerialCommNo(); diff --git a/TestComm/app/src/main/cpp/SensorsProtocol.h b/TestComm/app/src/main/cpp/SensorsProtocol.h index f534e80f..5c9d84f8 100644 --- a/TestComm/app/src/main/cpp/SensorsProtocol.h +++ b/TestComm/app/src/main/cpp/SensorsProtocol.h @@ -36,7 +36,7 @@ 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 5 #define MAX_DEV_VALUE_NUM 12 /* 一台装置最大的采样值数量*/ #define WEATHER_PROTOCOL 1 /* 温湿度协议序号*/ @@ -130,7 +130,7 @@ typedef unsigned char BYTE; #define SPEED_DOME_CAMERA 0 /* 球机摄像机*/ #define SERIAL_CAMERA 2 /* 串口摄像机a*/ -#define COLLECT_DATA 0 /* 调试使用*/ +#define COLLECT_DATA 1 /* 调试使用*/ #define LOGE(fmt, args...) __android_log_print(ANDROID_LOG_ERROR, "serial_port_comm", fmt, ##args) /* 红色*/ #define LOGI(fmt, args...) __android_log_print(ANDROID_LOG_INFO, "Sensors_Protocol", fmt, ##args) /* 草绿色*/ @@ -372,7 +372,7 @@ void Gm_OpenSerialPort(int devidx); // 关闭串口通讯 void Gm_CloseSerialPort(); - +int SaveLogTofile(char *szbuf); // 功能说明:串口发送数据 返回实际发送的字节数 int GM_SerialComSend(const unsigned char * cSendBuf, unsigned long nSendLen, int commid); void Gm_InitSerialComm(); diff --git a/TestComm/app/src/main/cpp/WeatherComm.cpp b/TestComm/app/src/main/cpp/WeatherComm.cpp index b73168db..62f8dab7 100644 --- a/TestComm/app/src/main/cpp/WeatherComm.cpp +++ b/TestComm/app/src/main/cpp/WeatherComm.cpp @@ -575,7 +575,7 @@ int serial_port_comm() #if 1 memset(portparm.pathname, 0, sizeof(portparm.pathname)); //sprintf(portparm.pathname, "/dev/ttyS1"); - sprintf(portparm.pathname, "/dev/ttysWK3"); + sprintf(portparm.pathname, "/dev/ttysWK0"); portparm.parity = 'N'; portparm.databit = 8; portparm.baudrate = B9600; diff --git a/TestComm/app/src/main/cpp/native-lib.cpp b/TestComm/app/src/main/cpp/native-lib.cpp index 78937587..0c61b9db 100644 --- a/TestComm/app/src/main/cpp/native-lib.cpp +++ b/TestComm/app/src/main/cpp/native-lib.cpp @@ -18,9 +18,9 @@ #include #include #include "GPIOControl.h" -//#include "serialComm.h" -//#include "SensorsProtocol.h" -#include "WeatherComm.h" +#include "serialComm.h" +#include "SensorsProtocol.h" +//#include "WeatherComm.h" #if 0 #define BYTE u_char; @@ -662,9 +662,9 @@ Java_com_xinyingpower_testcomm_MainActivity_testSpi( //setRS485Enable(true); //set12VEnable(true); - serial_port_comm(); + //serial_port_comm(); //GM_StartSerialComm(); - //Gm_InitSerialComm(); + Gm_InitSerialComm(); //GM_StartSerialCameraPhoto(1, 0); //lxy modify modify //LOGE("_test_ setRS485Enable false"); diff --git a/TestComm/app/src/main/cpp/serialComm.h b/TestComm/app/src/main/cpp/serialComm.h index 8321a31b..a8825221 100644 --- a/TestComm/app/src/main/cpp/serialComm.h +++ b/TestComm/app/src/main/cpp/serialComm.h @@ -12,7 +12,7 @@ #define IOT_PARAM_WRITE 0xAE #define IOT_PARAM_READ 0xAF -#define LOGE(fmt, args...) __android_log_print(ANDROID_LOG_ERROR, "serial_port_comm", fmt, ##args) +//#define LOGE(fmt, args...) __android_log_print(ANDROID_LOG_ERROR, "serial_port_comm", fmt, ##args) int set_port_attr (int fd, unsigned int baudrate, int databit, const int stopbit, char parity, int vtime, int vmin ); diff --git a/app/src/main/cpp/GPIOControl.cpp b/app/src/main/cpp/GPIOControl.cpp index 187f7e33..783025af 100644 --- a/app/src/main/cpp/GPIOControl.cpp +++ b/app/src/main/cpp/GPIOControl.cpp @@ -31,6 +31,16 @@ typedef struct char str[MAX_STRING_LEN]; }IOT_PARAM; +typedef struct{ + float airtemp; /* 空气温度*/ + float RH; /* 相对湿度*/ + float atmos; /* 大气压*/ + float windspeed; /* 风速*/ + float winddirection; /* 风向*/ + float rainfall; /* 雨量*/ + float sunshine; /* 日照*/ +}Weather; + void GpioControl::setInt(int cmd, int value) { int fd = open("/dev/mtkgpioctrl", O_RDONLY); diff --git a/app/src/main/cpp/GPIOControl.h b/app/src/main/cpp/GPIOControl.h index 54a46177..70339636 100644 --- a/app/src/main/cpp/GPIOControl.h +++ b/app/src/main/cpp/GPIOControl.h @@ -36,6 +36,17 @@ #define CMD_SET_CAM_3V3_EN_STATE 132 #define CMD_SET_12V_EN_STATE 133 #define CMD_SET_SYSTEM_RESET 202 +#define CMD_SET_WTH_POWER 490 +#define CMD_SET_PULL_POWER 491 +#define CMD_SET_ANGLE_POWER 492 +#define CMD_SET_OTHER_POWER 493 +#define CMD_SET_PIC1_POWER 494 +#define CMD_SET_485_en0 301 +#define CMD_SET_485_en1 302 +#define CMD_SET_485_en2 303 +#define CMD_SET_485_en3 304 +#define CMD_SET_485_en4 305 + class GpioControl { diff --git a/app/src/main/cpp/SensorsProtocol.cpp b/app/src/main/cpp/SensorsProtocol.cpp index a04db0eb..466c4d52 100644 --- a/app/src/main/cpp/SensorsProtocol.cpp +++ b/app/src/main/cpp/SensorsProtocol.cpp @@ -577,6 +577,27 @@ void Gm_CloseSensorsPower() setCam3V3Enable(false); setRS485Enable(false); +#if 0 + setInt(CMD_SET_WTH_POWER, 0); + setInt(CMD_SET_PULL_POWER, 0); + setInt(CMD_SET_ANGLE_POWER, 0); + setInt(CMD_SET_OTHER_POWER, 0); + setInt(CMD_SET_PIC1_POWER, 0); +#endif +#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 + } // 打开传感器电源 @@ -589,10 +610,38 @@ void Gm_OpenSensorsPower() // return; //sprintf(szbuf, "Open Sensors port %d Power!", port); - set12VEnable(true); + //set12VEnable(true); setCam3V3Enable(true); setRS485Enable(true); +#if 0 + setInt(CMD_SET_WTH_POWER, 0); + setInt(CMD_SET_PULL_POWER, 0); + setInt(CMD_SET_ANGLE_POWER, 0); + setInt(CMD_SET_OTHER_POWER, 0); + setInt(CMD_SET_PIC1_POWER, 0); +#else + setInt(CMD_SET_WTH_POWER, 1); + setInt(CMD_SET_PULL_POWER, 1); + setInt(CMD_SET_ANGLE_POWER, 1); + setInt(CMD_SET_OTHER_POWER, 1); + setInt(CMD_SET_PIC1_POWER, 1); +#endif +#if 1 + setInt(CMD_SET_SPI_POWER, 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 + /* 打开电源*/ //switch(port) @@ -623,6 +672,7 @@ void BytestreamLOG(char* describe, u_char* buf, int len, char flag) { sprintf(szbuf, "%s %02X", szbuf, buf[i]); } + SaveLogTofile(szbuf); switch (flag) { case 'E': @@ -650,22 +700,30 @@ void BytestreamLOG(char* describe, u_char* buf, int len, char flag) void Gm_OpenSerialPort(int devidx) { int fd = -1; + char szbuf[512]; if((devidx < 0) || (devidx >= MAX_SERIAL_DEV_NUM)) return; + memset(szbuf, 0, sizeof(szbuf)); if(serialport[devparam[devidx].commid].fd <= 0) { fd = open(devparam[devidx].pathname, O_RDWR | O_NDELAY); if(fd < 0) { - LOGE("装置%d 打开串口%d失败!fd=%d\n", devidx+1, devparam[devidx].commid+1, fd); + sprintf(szbuf, "装置%d 打开串口%d失败!fd=%d", devidx+1, devparam[devidx].commid+1, fd); + SaveLogTofile(szbuf); + LOGE("装置%d 打开串口%d失败!fd=%d", devidx+1, devparam[devidx].commid+1, fd); return; } - LOGI("装置%d 打开串口%d成功!fd=%d\n", devidx+1, devparam[devidx].commid+1, fd); + sprintf(szbuf, "装置%d 打开串口%d成功!fd=%d", devidx+1, devparam[devidx].commid+1, fd ); + SaveLogTofile(szbuf); + LOGI("装置%d 打开串口%d成功!fd=%d", devidx+1, devparam[devidx].commid+1, fd); serialport[devparam[devidx].commid].fd = fd; return; } - LOGI("装置%d 串口%d已经打开!fd=%d\n", devidx+1, devparam[devidx].commid+1, serialport[devparam[devidx].commid].fd); + sprintf(szbuf, "装置%d 串口%d已经打开!fd=%d", devidx+1, devparam[devidx].commid+1, serialport[devparam[devidx].commid].fd); + SaveLogTofile(szbuf); + LOGI("装置%d 串口%d已经打开!fd=%d", devidx+1, devparam[devidx].commid+1, serialport[devparam[devidx].commid].fd); } // 关闭串口通讯 @@ -703,7 +761,8 @@ int GM_SerialComSend(unsigned char * cSendBuf, unsigned long nSendLen, int commi //isendtime = get_msec(); if (len < 0) { - LOGE("write data error \n"); + LOGE("write data error "); + SaveLogTofile("write data error "); return -1; } else if(len > 0) @@ -718,12 +777,16 @@ int GM_SerialComSend(unsigned char * cSendBuf, unsigned long nSendLen, int commi int Gm_SetSerialPortParam(int commid) { int ret; + char szbuf[128]; SERIAL_PARAM *pPortParam=NULL; pPortParam = &devparam[srdt.curdevidx[commid]]; ret= set_port_attr (serialport[commid].fd, pPortParam->baudrate,pPortParam->databit,pPortParam->stopbit,pPortParam->parity,0,0 );/*9600 8n1 */ if(ret < 0) { + memset(szbuf, 0, sizeof(szbuf)); + sprintf(szbuf,"串口%d 波特率等参数设置错误!", commid+1); + SaveLogTofile(szbuf); LOGE("串口%d 波特率等参数设置错误!", commid+1); return -1; } @@ -768,10 +831,10 @@ void Gm_InitSerialComm_Test(SENSOR_PARAM *sensorParam) //sprintf(devparam[0].stopbit, "1"); sensorParam[0].stopbit = 1; sensorParam[0].parity = 'n'; - sensorParam[0].IsNoInsta = 1; - //devparam[0].PowerPort = 2; - //devparam[0].devaddr = 4; - sensorParam[0].devaddr = 10; + sensorParam[0].IsNoInsta = 0; + sensorParam[0].devaddr = 4; + memset(sensorParam[0].pathname, 0, sizeof(sensorParam[0].pathname)); + sprintf(sensorParam[0].pathname, "/dev/ttysWK3"); sensorParam[1].SensorsType = WEATHER_PROTOCOL; sensorParam[1].baudrate = 9600; @@ -781,9 +844,9 @@ void Gm_InitSerialComm_Test(SENSOR_PARAM *sensorParam) sensorParam[1].stopbit = 1; sensorParam[1].parity = 0; sensorParam[1].IsNoInsta = 1; - //sensorParam[1].PowerPort = 14; - //sensorParam[1].devaddr = 1; - sensorParam[1].devaddr = 2; + sensorParam[1].devaddr = 1; + memset(sensorParam[1].pathname, 0, sizeof(sensorParam[1].pathname)); + sprintf(sensorParam[1].pathname, "/dev/ttysWK3"); sensorParam[2].SensorsType = RALLY_PROTOCOL; sensorParam[2].baudrate = 9600; @@ -796,110 +859,74 @@ void Gm_InitSerialComm_Test(SENSOR_PARAM *sensorParam) //sensorParam[2].PowerPort = 3; //sensorParam[2].devaddr = 13; sensorParam[2].devaddr = 13; -#if 0 - devparam[3].ProtocolIdx = PELCO_P_PROTOCOL; - devparam[3].baudrate = 9600; - devparam[3].databit = 8; - devparam[3].stopbit = 1; - devparam[3].parity = 0; - devparam[3].IsNoInsta = 0; - //devparam[3].PowerPort = 15; - devparam[3].CameraChannel = 1; - devparam[3].devaddr = 0; - - devparam[4].ProtocolIdx = WDIITEMP_PROTOCOL_NEW; - devparam[4].baudrate = 1200; - devparam[4].databit = 8; - devparam[4].stopbit = 1; - devparam[4].parity = 0; - devparam[4].IsNoInsta = 0; - //devparam[4].PowerPort = 17; - devparam[4].devaddr = 4; - - devparam[5].ProtocolIdx = RALLY_PROTOCOL_NEW; - devparam[5].baudrate = 9600; - devparam[5].databit = 8; - devparam[5].stopbit = 1; - devparam[5].parity = 0; - devparam[5].IsNoInsta = 1; - //devparam[5].PowerPort = 6; - devparam[5].devaddr = 11; - - devparam[6].ProtocolIdx = RALLY_PROTOCOL_NEW; - devparam[6].baudrate = 9600; - devparam[6].databit = 8; - devparam[6].stopbit = 1; - devparam[6].parity = 0; - devparam[6].IsNoInsta = 1; - //devparam[6].PowerPort = 6; - devparam[6].devaddr = 12; - - devparam[7].ProtocolIdx = RALLY_PROTOCOL_NEW; - devparam[7].baudrate = 9600; - devparam[7].databit = 8; - devparam[7].stopbit = 1; - devparam[7].parity = 0; - devparam[7].IsNoInsta = 1; - //devparam[7].PowerPort = 6; - devparam[7].devaddr = 10; - - devparam[8].ProtocolIdx = PELCO_P_PROTOCOL; - devparam[8].baudrate = 9600; - devparam[8].databit = 8; - devparam[8].stopbit = 1; - devparam[8].parity = 0; - devparam[8].IsNoInsta = 0; - //devparam[8].PowerPort = 10; - devparam[8].CameraChannel = 2; - devparam[8].devaddr = 0; - - devparam[9].ProtocolIdx = WDIITEMP_PROTOCOL_NEW; - devparam[9].baudrate = 9600; - devparam[9].databit = 8; - devparam[9].stopbit = 1; - devparam[9].parity = 0; - devparam[9].IsNoInsta = 1; - //devparam[9].PowerPort = 17; - devparam[9].devaddr = 47; - - devparam[10].ProtocolIdx = LCURRENT_PROTOCOL; - devparam[10].baudrate = 9600; - devparam[10].databit = 8; - devparam[10].stopbit = 1; - devparam[10].parity = 0; - devparam[10].IsNoInsta = 1; - //devparam[10].PowerPort = 5; - devparam[10].devaddr = 7; - - devparam[11].ProtocolIdx = LCURRENT_PROTOCOL; - devparam[11].baudrate = 9600; - devparam[11].databit = 8; - devparam[11].stopbit = 1; - devparam[11].parity = 0; - devparam[11].IsNoInsta = 1; - //devparam[11].PowerPort = 6; - devparam[11].devaddr = 6; - - devparam[12].ProtocolIdx = LCURRENT_PROTOCOL; - devparam[12].baudrate = 9600; - devparam[12].databit = 8; - devparam[12].stopbit = 1; - devparam[12].parity = 0; - devparam[12].IsNoInsta = 1; - //devparam[12].PowerPort = 8; - devparam[12].devaddr = 5; -#endif + memset(sensorParam[2].pathname, 0, sizeof(sensorParam[2].pathname)); + sprintf(sensorParam[2].pathname, "/dev/ttysWK1"); + + sensorParam[3].SensorsType = RALLY_PROTOCOL; + sensorParam[3].baudrate = 9600; + sensorParam[3].databit = 8; + //memset(devparam[2].stopbit, 0, sizeof(devparam[2].stopbit)); + //sprintf(devparam[2].stopbit, "1"); + sensorParam[3].stopbit = 1; + sensorParam[3].parity = 0; + sensorParam[3].IsNoInsta = 1; + sensorParam[3].devaddr = 10; + memset(sensorParam[3].pathname, 0, sizeof(sensorParam[3].pathname)); + sprintf(sensorParam[3].pathname, "/dev/ttysWK1"); + + sensorParam[4].SensorsType = RALLY_PROTOCOL; + sensorParam[4].baudrate = 9600; + sensorParam[4].databit = 8; + //memset(devparam[2].stopbit, 0, sizeof(devparam[2].stopbit)); + //sprintf(devparam[2].stopbit, "1"); + sensorParam[4].stopbit = 1; + sensorParam[4].parity = 0; + sensorParam[4].IsNoInsta = 1; + //sensorParam[2].PowerPort = 3; + //sensorParam[2].devaddr = 13; + sensorParam[4].devaddr = 12; + memset(sensorParam[4].pathname, 0, sizeof(sensorParam[4].pathname)); + sprintf(sensorParam[4].pathname, "/dev/ttysWK1"); + + sensorParam[6].SensorsType = SLANT_PROTOCOL; + sensorParam[6].baudrate = 9600; + sensorParam[6].databit = 8; + //memset(devparam[13].stopbit, 0, sizeof(devparam[13].stopbit)); + //sprintf(devparam[13].stopbit, "1"); + sensorParam[6].stopbit = 1; + sensorParam[6].parity = 0; + //devparam[13].PowerPort = 4; + sensorParam[6].IsNoInsta = 1; + sensorParam[6].devaddr = 2; + memset(sensorParam[6].pathname, 0, sizeof(sensorParam[6].pathname)); + sprintf(sensorParam[6].pathname, "/dev/ttysWK0"); + + + sensorParam[7].SensorsType = SLANT_PROTOCOL; + sensorParam[7].baudrate = 9600; + sensorParam[7].databit = 8; + //memset(devparam[13].stopbit, 0, sizeof(devparam[13].stopbit)); + //sprintf(devparam[13].stopbit, "1"); + sensorParam[7].stopbit = 1; + sensorParam[7].parity = 0; + //devparam[13].PowerPort = 4; + sensorParam[7].IsNoInsta = 1; + sensorParam[7].devaddr = 3; + memset(sensorParam[7].pathname, 0, sizeof(sensorParam[7].pathname)); + sprintf(sensorParam[7].pathname, "/dev/ttysWK0"); sensorParam[13].SensorsType = SLANT_PROTOCOL; sensorParam[13].baudrate = 9600; sensorParam[13].databit = 8; //memset(devparam[13].stopbit, 0, sizeof(devparam[13].stopbit)); //sprintf(devparam[13].stopbit, "1"); - sensorParam[0].stopbit = 1; + sensorParam[13].stopbit = 1; sensorParam[13].parity = 0; //devparam[13].PowerPort = 4; sensorParam[13].IsNoInsta = 1; - sensorParam[13].devaddr = 2; + sensorParam[13].devaddr = 5; + memset(sensorParam[13].pathname, 0, sizeof(sensorParam[13].pathname)); + sprintf(sensorParam[13].pathname, "/dev/ttysWK0"); #if 0 devparam[14].ProtocolIdx = SLANT_PROTOCOL; devparam[14].baudrate = 1200; @@ -980,6 +1007,8 @@ void Gm_InitSerialComm_Test(SENSOR_PARAM *sensorParam) //devparam[3].PowerPort = 15; sensorParam[3].CameraChannel = 1; sensorParam[3].devaddr = 0; + memset(sensorParam[3].pathname, 0, sizeof(sensorParam[3].pathname)); + sprintf(sensorParam[3].pathname, "/dev/ttysWK0"); #endif } @@ -1056,6 +1085,7 @@ void Gm_InitSerialComm() else { sprintf(szbuf, "%s 已启用!;", szbuf); + SaveLogTofile(szbuf); LOGI("%s", szbuf); } } @@ -1230,7 +1260,7 @@ void FindDevUseSerialCommNo() case PELCO_D_PROTOCOL: /* 摄像机协议*/ case PELCO_P_PROTOCOL: /* 摄像机协议*/ case SERIALCAMERA_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/ttyS1"); devparam[i].commid = 0; @@ -1246,7 +1276,7 @@ void FindDevUseSerialCommNo() void GM_StartSerialComm() { int i, j, commid; - char szbuf[64]; + char szbuf[64], logbuf[128]; long polltime=0; // 测试使用初始化配置 @@ -1267,8 +1297,8 @@ void GM_StartSerialComm() continue; serialport[i].Retry = 0; //serialport[i].RetryTime = 500/TIMER_CNT; - serialport[i].RetryTime = 300; - serialport[i].WaitTime = 0; + serialport[i].RetryTime = 800; + serialport[i].WaitTime = 20; serialport[i].m_iRevStatus = 0; serialport[i].m_iRecvLen = 0; serialport[i].m_iNeedRevLength = 0; @@ -1374,8 +1404,11 @@ void GM_StartSerialComm() // 打开传感器电源 // 打开对应的485电源 // 打开串口通讯 + memset(logbuf, 0 , sizeof(logbuf)); if(1 == srdt.ms_dev[i].IsNeedSerial) { + sprintf(logbuf, "装置%d, IsNoInsta=%d, 类型:%s", i+1, devparam[i].IsNoInsta, szbuf); + SaveLogTofile(logbuf); LOGI("装置%d, IsNoInsta=%d, 类型:%s", i+1, devparam[i].IsNoInsta, szbuf); Gm_OpenSensorsPower(); Gm_OpenSerialPort(i); @@ -1384,6 +1417,7 @@ void GM_StartSerialComm() } + SaveLogTofile("启动数据采样!"); LOGI("启动数据采样!"); /* 直接使用循环进行采样处理*/ polltime = get_msec(); @@ -1395,6 +1429,7 @@ void GM_StartSerialComm() if(GM_SerialTimer() < 0) { //LOGE("12V state=%d", getInt(CMD_SET_12V_EN_STATE)); + SaveLogTofile("退出采样流程!"); LOGV("退出采样流程!"); sleep(15); GM_StartSerialComm(); @@ -1409,7 +1444,7 @@ void GM_StartSerialComm() void GM_StartSerialCameraPhoto(BYTE channel, int cmdidx) { int i, flag=0; - char szbuf[64]; + char szbuf[128], logbuf[128]; srdt.RephotographCnt = 0; FindDevUseSerialCommNo(); @@ -1433,7 +1468,7 @@ void GM_StartSerialCameraPhoto(BYTE channel, int cmdidx) flag = 0; #endif i = srdt.camerauseserial; - if((i<0) ||(i > MAX_SERIAL_PORT_NUM)) + if((i<0) ||(i >= MAX_SERIAL_PORT_NUM)) return; serialport[i].Retry = 0; //serialport[i].RetryTime = 500/TIMER_CNT; @@ -1498,6 +1533,8 @@ void GM_StartSerialCameraPhoto(BYTE channel, int cmdidx) } if(1 == srdt.ms_dev[i].IsNeedSerial) { + sprintf(logbuf, "装置%d, IsNoInsta=%d, 类型:%s", i+1, devparam[i].IsNoInsta, szbuf); + SaveLogTofile(logbuf); LOGI("装置%d, IsNoInsta=%d, 类型:%s", i+1, devparam[i].IsNoInsta, szbuf); Gm_OpenSensorsPower(); Gm_OpenSerialPort(i); @@ -1507,6 +1544,7 @@ void GM_StartSerialCameraPhoto(BYTE channel, int cmdidx) { sprintf(szbuf, "摄像机启动串口定时器!"); LOGI("%s", szbuf); + SaveLogTofile(szbuf); for(;;) { usleep(10); @@ -1516,6 +1554,7 @@ void GM_StartSerialCameraPhoto(BYTE channel, int cmdidx) { //LOGE("12V state=%d", getInt(CMD_SET_12V_EN_STATE)); LOGV("退出拍照流程!"); + SaveLogTofile("退出拍照流程!"); //sleep(15); //GM_StartSerialComm(); //GM_StartSerialCameraPhoto(1,0); @@ -1620,6 +1659,7 @@ void GM_IsCloseSensors() { if(srdt.ms_dev[i].IsNeedSerial == 0) continue; + memset(buf, 0, sizeof(buf)); switch(devparam[i].ProtocolIdx) { case WEATHER_PROTOCOL: /* 气象*/ @@ -1631,10 +1671,12 @@ void GM_IsCloseSensors() srdt.ms_dev[i].FirstCmdTimeCnt = get_msec(); break; } - if(get_msec()- srdt.ms_dev[i].FirstCmdTimeCnt > 15*1000) + if(get_msec()- srdt.ms_dev[i].FirstCmdTimeCnt > 50*1000) { srdt.ms_dev[i].IsNeedSerial = 0; // 关闭传感器电源 + sprintf(buf, "读取装置%d数据%0.3f秒,关闭装置%d电源!", i+1, (get_msec()-srdt.ms_dev[i].FirstCmdTimeCnt)/1000.0,i+1); + SaveLogTofile(buf); LOGI("读取装置%d数据%0.3f秒,关闭装置%d电源!", i+1, (get_msec()-srdt.ms_dev[i].FirstCmdTimeCnt)/1000.0,i+1); for(j=0;jimage.ilen[i]; } + memset(szbuf, 0, sizeof(szbuf)); memset(filedir, 0, sizeof(filedir)); sprintf(filedir, "/sdcard/photo/"); if(access(filedir, 0)==0) - LOGI("文件路径已经存在!"); + { + sprintf(szbuf,"文件路径%s已经存在!", filedir); + SaveLogTofile(szbuf); + LOGI("%s", szbuf); + } else { status = mkdir(filedir, S_IRWXU | S_IRWXG | S_IRWXO); @@ -1798,10 +1891,15 @@ int SaveImageDataTofile(int devno) return -1; len = fwrite(image,1, pPortParam->image.imagelen, fp); fclose(fp); + free(image); + image = NULL; if(len < pPortParam->image.imagelen) return -1; else { + memset(szbuf, 0, sizeof(szbuf)); + sprintf(szbuf,"写入图片文件%s成功!", pPortParam->image.photoname); + SaveLogTofile(szbuf); LOGI("写入图片文件%s成功!", pPortParam->image.photoname); return 1; } @@ -1928,7 +2026,7 @@ void CameraPhotoPortDataProcess( int devno) //DebugStringPrintf(szbuf, strlen(szbuf), 1); if(uDevAddr != devparam[devno].devaddr) return; - + memset(szbuf, 0, sizeof(szbuf)); switch(cmdidx) { case 0x10: /* 拍照应答*/ @@ -1938,6 +2036,8 @@ void CameraPhotoPortDataProcess( int devno) if(srdt.RephotographCnt > 2) { pPortParam->SerialCmdidx = -1; + sprintf(szbuf, "因摄像机重拍%d次均未成功!结束拍照!",srdt.RephotographCnt); + SaveLogTofile(szbuf); LOGE("因摄像机重拍%d次均未成功!结束拍照!",srdt.RephotographCnt); } break; @@ -1956,6 +2056,7 @@ void CameraPhotoPortDataProcess( int devno) srdt.historyimagenum[devparam[devno].CameraChannel-1] = rtumsg.MsgData[i+7]+(rtumsg.MsgData[i+6]<<8); sprintf(szbuf, "有%d张历史图片!",srdt.historyimagenum[devparam[devno].CameraChannel-1]); LOGV("%s", szbuf); + SaveLogTofile(szbuf); presetno = (int)rtumsg.MsgData[i+8]; pPortParam->image.presetno = presetno; pPortParam->image.state = Sample; @@ -1971,6 +2072,7 @@ void CameraPhotoPortDataProcess( int devno) pPortParam->image.ilen[iNo-1] = packsize; sprintf(szbuf, "收到第%d(总%d包)包长=%d", iNo, srdt.imagepacketnum, packsize); LOGV("%s", szbuf); + SaveLogTofile(szbuf); curserial->RevCmdFlag = 1; pPortParam->FirstCmdTimeCnt = get_msec(); if((iNo == pPortParam->SerialCmdidx) && (0xFF > rtumsg.MsgData[i+2])) @@ -2025,6 +2127,7 @@ void CameraPhotoPortDataProcess( int devno) sprintf(szbuf, "问询第%d包图片摄像机应答第%d包,连续错误%d次!", pPortParam->SerialCmdidx, iNo, srdt.errorPhotoNoCnt); LOGE("%s", szbuf); + SaveLogTofile(szbuf); if(srdt.errorPhotoNoCnt > 5) { pPortParam->SerialCmdidx = 0; @@ -2034,12 +2137,14 @@ void CameraPhotoPortDataProcess( int devno) pPortParam->SerialCmdidx = -1; sprintf(szbuf, "因摄像机重拍%d次均未成功!结束拍照!",srdt.RephotographCnt); LOGE("%s", szbuf); + SaveLogTofile(szbuf); } } break; case 0x03: sprintf(szbuf, "设置波特率%d成功", devparam[devno].baudrate); LOGD("%s", szbuf); + SaveLogTofile(szbuf); pPortParam->SerialCmdidx = srdt.iLastGetPhotoNo; srdt.iLastGetPhotoNo = -1; curserial->RevCmdFlag = 1; @@ -2051,6 +2156,7 @@ void CameraPhotoPortDataProcess( int devno) pPortParam->SerialCmdidx = -1; sprintf(szbuf, "没有历史图片!结束读取图片!"); LOGI("%s", szbuf); + SaveLogTofile(szbuf); break; } i = 6; @@ -2068,6 +2174,7 @@ void CameraPhotoPortDataProcess( int devno) pPortParam->image.presetno = presetno; sprintf(szbuf, "读取历史图片,还有%d张历史图片!",srdt.historyimagenum[devparam[devno].CameraChannel-1]); LOGI("%s", szbuf); + SaveLogTofile(szbuf); curserial->RevCmdFlag = 1; pPortParam->SerialCmdidx = 1; srdt.sendphotocmdcnt = 0; @@ -2076,8 +2183,9 @@ void CameraPhotoPortDataProcess( int devno) if(0xFF == rtumsg.MsgData[10]) { pPortParam->SerialCmdidx = -1; - sprintf(szbuf, "图片保存失败!"); + sprintf(szbuf, "摄像机图片保存失败!"); LOGE("%s", szbuf); + SaveLogTofile(szbuf); } pPortParam->SerialCmdidx = -1; if(0 == rtumsg.MsgData[10]) @@ -2106,12 +2214,13 @@ long lsendtime=0; **********************************************************************************/ void SendCmdFormPollCmdBuf( int port ) { - char buf[64]; + char buf[128]; int len, ret; long lctime; SIO_PARAM_SERIAL_DEF *pPortParam; pPortParam = &serialport[port]; + memset(buf, 0, sizeof(buf)); lctime = get_msec(); if(pPortParam->ForceWaitFlag && pPortParam->ForceWaitCnt) { @@ -2152,15 +2261,20 @@ void SendCmdFormPollCmdBuf( int port ) ClearCmdFormPollCmdBuf(port); } - if(pPortParam->WaitTime) + if(pPortParam->WaitTime > 0) { - pPortParam->WaitTimeCnt++; - if(pPortParam->WaitTimeCnt < pPortParam->WaitTime) + if((lctime - pPortParam->WaitTimeCnt > 30*pPortParam->WaitTime) || (lctime - pPortParam->WaitTimeCnt < 0)) + { + pPortParam->WaitTimeCnt = lctime; + return; + } + + if(lctime- pPortParam->WaitTimeCnt < pPortParam->WaitTime) { return; } } - pPortParam->WaitTimeCnt = 0; + pPortParam->WaitTimeCnt = lctime; if ( pPortParam->ReSendCmdFlag ) len = pPortParam->cmdlen; @@ -2174,6 +2288,8 @@ void SendCmdFormPollCmdBuf( int port ) serialport[devparam[srdt.curdevidx[port]].commid].m_iRecvLen = 0; // 当发送一条新指令时,清除接收状态 serialport[devparam[srdt.curdevidx[port]].commid].m_iRevStatus = 0; + if(serialport[port].fd < 0) + return; ret = Gm_SetSerialPortParam(port); if(ret < 0) return; @@ -2181,12 +2297,16 @@ void SendCmdFormPollCmdBuf( int port ) if(len < 1) { LOGE("串口%d, 发送命令失败!", port+1); + sprintf(buf, "串口%d, 发送命令失败!", port+1); + SaveLogTofile(buf); } else { sprintf(buf, "发送串口%d 装置%d命令:", port+1, srdt.curdevidx[port]+1); BytestreamLOG(buf, &pPortParam->PollCmd[2], len, 'D'); + sprintf(buf, "sendtimeconst= %ld", lctime-lsendtime); + SaveLogTofile(buf); LOGW("sendtimeconst= %ld", lctime-lsendtime); lsendtime = lctime; } @@ -2210,7 +2330,7 @@ void ClearCmdAllFlag(int commid) serialport[commid].RetryCnt = 0; serialport[commid].RetryTimeCnt = get_msec(); - serialport[commid].WaitTimeCnt = 0; + serialport[commid].WaitTimeCnt = get_msec(); serialport[commid].ForceWaitFlag = 0; serialport[commid].ForceWaitCnt = 0; serialport[commid].SendCmdFlag = 0; @@ -2245,7 +2365,7 @@ int FindNextCameraPhotoCommand(int devidx) char szbuf[128]; //如果命令缓冲区仍有命令,则退出本函数 - if((devparam[devidx].commid+1 < 1) || (devparam[devidx].commid+1 >= MAX_SERIAL_PORT_NUM)) + if((devparam[devidx].commid+1 < 1) || (devparam[devidx].commid+1 > MAX_SERIAL_PORT_NUM)) return -1; // if(serialport[devparam[devidx].commid].cmdlen > 0) // return -1; @@ -2258,6 +2378,7 @@ int FindNextCameraPhotoCommand(int devidx) srdt.ms_dev[devidx].SerialCmdidx = -1; sprintf(szbuf, "装置配置中,通道号配置错误!结束拍照!"); LOGI("%s", szbuf); + SaveLogTofile(szbuf); } cmdno = srdt.ms_dev[devidx].SerialCmdidx; lcurtime = get_msec(); @@ -2281,6 +2402,7 @@ int FindNextCameraPhotoCommand(int devidx) srdt.ms_dev[devidx].SerialCmdidx = -1; sprintf(szbuf, "串口摄像机未接或故障!结束拍照!"); LOGI("%s", szbuf); + SaveLogTofile(szbuf); return -1; } LOGE("time=%ldms", lcurtime-srdt.ms_dev[devidx].FirstCmdTimeCnt); @@ -2308,6 +2430,7 @@ int FindNextCameraPhotoCommand(int devidx) default: sprintf(szbuf, "设置串口摄像机参数时,配置参数错误!退出设置!"); LOGI("%s", szbuf); + SaveLogTofile(szbuf); srdt.ms_dev[devidx].SerialCmdidx = srdt.iLastGetPhotoNo; srdt.iLastGetPhotoNo = -1; return -1; @@ -2318,6 +2441,7 @@ int FindNextCameraPhotoCommand(int devidx) srdt.ms_dev[devidx].SerialCmdidx = -1; sprintf(szbuf, "设置串口摄像机参数时,15秒未收到摄像机应答!退出设置!"); LOGI("%s", szbuf); + SaveLogTofile(szbuf); return -1; } cmdidx = 0x03; @@ -2474,6 +2598,7 @@ int FindNextCameraPhotoCommand(int devidx) srdt.ms_dev[devidx].SerialCmdidx = -1; sprintf(szbuf, "读取第%d包图片数据35秒未收到!结束拍照!",packetsize); LOGI("%s", szbuf); + SaveLogTofile(szbuf); return -1; } break; @@ -2573,6 +2698,7 @@ int Gm_CtrlPtzCmd(u_char channel, DWORD ptzcmd) { sprintf(szbuf, "没有找到摄像机使用的通道和串口通讯协议"); LOGI("%s", szbuf); + SaveLogTofile(szbuf); return 1; } #if 0 @@ -2587,6 +2713,7 @@ int Gm_CtrlPtzCmd(u_char channel, DWORD ptzcmd) #endif sprintf(szbuf, "摄像机通道%d 使用串口%d", channel, srdt.ms_dev[i].UseSerialidx+1); LOGI("%s", szbuf); + SaveLogTofile(szbuf); //} srdt.usecameradevidx = i; // 查找串口序号 @@ -2723,6 +2850,7 @@ void Gm_SendPelco_pCommand( DWORD cmdtype) if(len < 1) { LOGE("发送Pelco_p命令失败"); + SaveLogTofile("发送Pelco_p命令失败"); } else { @@ -2775,6 +2903,7 @@ void Gm_SendPelco_DCommand( DWORD cmdtype) if(len < 1) { LOGE("发送Pelco_D命令失败"); + SaveLogTofile("发送Pelco_D命令失败"); } else { @@ -2806,30 +2935,26 @@ BYTE Gm_Pelco_DCheck( BYTE *msg, int len ) **********************************************************************************/ int FindNextShxyProtocolCommand( int devidx ) { + int cmdno = 0; + //如果命令缓冲区仍有命令,则退出本函数 - if((devparam[devidx].commid+1 < 1) || (devparam[devidx].commid+1 >= MAX_SERIAL_PORT_NUM)) + if((devparam[devidx].commid+1 < 1) || (devparam[devidx].commid+1 > MAX_SERIAL_PORT_NUM)) return -1; - //if(srdt.ms_dev[devidx].SerialCmdidx == 0) + if(get_msec()-srdt.ms_dev[devidx].FirstCmdTimeCnt < 3*1000) { - if(get_msec()-srdt.ms_dev[devidx].FirstCmdTimeCnt < 3*1000) - { - //srdt.ms_dev[devidx].FirstCmdTimeCnt++; - return -1; - } -#if 0 - if(SLANT_PROTOCOL == devparam[devidx].ProtocolIdx) - { - devparam[devidx].devaddr = 0xFF; - MakeShxyProtocolPollCommand(devidx, 0x02); - } - - //else if(WEATHER_PROTOCOL== devparam[devidx].ProtocolIdx) - // MakeShxyProtocolPollCommand(devidx, 0x09); - else -#endif + return -1; + } + //if(SLANT_PROTOCOL == devparam[devidx].ProtocolIdx) + // return -1; + switch (cmdno) + { + case 0: /* 正常采集数据*/ MakeShxyProtocolPollCommand(devidx, 0x09); - srdt.curdevidx[srdt.ms_dev[devidx].UseSerialidx] = devidx; - return 1; + srdt.curdevidx[devparam[devidx].commid] = devidx; + return 1; + case 1: /* 测试读取地址*/ + default: + break; } return -1; } @@ -2839,11 +2964,15 @@ int FindNextShxyProtocolCommand( int devidx ) **********************************************************************************/ void MakeShxyProtocolPollCommand(int portno, BYTE cmdidx) { - int i/*, sendWaitTime = 100, y*/; + int i, length=0; + int newaddr = 9, baud = 9600, stopbit = 1, parity=0; //char buf[128]; u_char *sendbuf; - sendbuf = serialport[srdt.ms_dev[portno].UseSerialidx].PollCmd; + sendbuf = serialport[devparam[portno].commid].PollCmd; + + /* 测试变量*/ + cmdidx =cmdidx; i = 0; sendbuf[i++] = 0x00; // 强制等待时间 @@ -2854,12 +2983,34 @@ void MakeShxyProtocolPollCommand(int portno, BYTE cmdidx) sendbuf[i++] = 0x68; sendbuf[i++] = (BYTE)devparam[portno].devaddr; // 传感器地址 sendbuf[i++] = cmdidx; // 命令信息0x06 + switch (cmdidx) + { + case 1: /* 设置传感器新地址*/ + sendbuf[i++] = newaddr; + length = 1; + break; + case 2: /* 广播读地址*/ + sendbuf[6] = 0xFF; + break; + case 3: /* 设置串口参数*/ + sendbuf[i++] = (u_char)(baud >> 24); + sendbuf[i++] = (u_char)(baud >> 16); + sendbuf[i++] = (u_char)(baud >> 8); + sendbuf[i++] = (u_char)baud; + sendbuf[i++] = 8; + sendbuf[i++] = parity; + sendbuf[i++] = stopbit; + length = 7; + break; + default: + break; + } sendbuf[i] = CalLpc((u_char *)&sendbuf[6],i-6); i+= 1; + sendbuf[3] = length; + sendbuf[4] = length; sendbuf[i++] = 0x16; // 信息尾 - serialport[srdt.ms_dev[portno].UseSerialidx].cmdlen = i; - //sprintf((char*)buf, "生成串口%d 装置%d倾角命令:", srdt.ms_dev[portno].UseSerialidx+1, portno+1); - //Gm_OMC_UART_DebugHex(buf, i-2, (char*)&sendbuf[2]); + serialport[devparam[portno].commid].cmdlen = i; } unsigned char CalLpc(unsigned char *msg, int len) @@ -3053,6 +3204,7 @@ void ShxyProtocolDataProcess( int devno) { sprintf(szbuf, "倾角ID:%d slantangle X=%0.3f ", devparam[devno].devaddr, fvalue); LOGV("%s", szbuf); + SaveLogTofile(szbuf); } //XslantSec[aipnt][srdt.SectimesamplingCnt[0]] = (short)slantpntmsg[aipnt][0].EuValue; //srdt.SectimesamplingCnt[0] += 1; @@ -3065,6 +3217,7 @@ void ShxyProtocolDataProcess( int devno) { sprintf(szbuf, "Y =%0.3f ", fvalue); LOGV("%s", szbuf); + SaveLogTofile(szbuf); } if((fvalue < -59) ||(fvalue > 59)) { @@ -3098,9 +3251,7 @@ 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)) { @@ -3121,6 +3272,7 @@ void ShxyProtocolDataProcess( int devno) { sprintf(szbuf, "温度:%0.3f ", fvalue); LOGV("%s", szbuf); + SaveLogTofile(szbuf); } break; case 2: /*气压*/ @@ -3142,6 +3294,7 @@ void ShxyProtocolDataProcess( int devno) { sprintf(szbuf, "气压:%0.3f ", fvalue); LOGV("%s", szbuf); + SaveLogTofile(szbuf); } break; case 3: /*湿度*/ @@ -3163,6 +3316,7 @@ void ShxyProtocolDataProcess( int devno) { sprintf(szbuf, "湿度:%0.3f ", fvalue); LOGV("%s", szbuf); + SaveLogTofile(szbuf); } break; case 4: /*雨量*/ @@ -3192,6 +3346,7 @@ void ShxyProtocolDataProcess( int devno) //sprintf(szbuf, "风速:%0.3f ", fwind); sprintf(szbuf, "风速:%0.3f ", fvalue); LOGV("%s", szbuf); + SaveLogTofile(szbuf); } break; case 7: /*风向*/ @@ -3213,25 +3368,10 @@ void ShxyProtocolDataProcess( int devno) { sprintf(szbuf, "风向:%0.3f ", fvalue); LOGV("%s", szbuf); + SaveLogTofile(szbuf); } break; case 8: /*拉力*/ -#if 0 - if(RESERVE1_PROTOCOL == pPortParam->ProtocolIdx) - { - leirallypntmsg[0].EuValue = fvalue*leirallypntmsg[0].AiParam.fFactor\ - +leirallypntmsg[0].AiParam.EuValueDelta; - leirallypntmsg[0].AiState = 1; - g_SelfTest.SensorsFault |= (0x800000); - if ((gDisSunRain & 0x10) == 0x10) - { - sprintf(szbuf, "地址%d模拟导线拉力:%0.3fKg ", pPortParam->devaddr, fvalue/1000.0); - DebugStringPrintf(szbuf, strlen(szbuf), 1); - } - } - else - { -#endif pPortParam->recvdatacnt++; if(pPortParam->recvdatacnt < 2) break; @@ -3244,6 +3384,7 @@ void ShxyProtocolDataProcess( int devno) //rallypntmsg[aipnt][0].AiState = 1; sprintf(szbuf, "地址%d拉力:%0.3fKg ", devparam[devno].devaddr, fvalue); LOGV("%s", szbuf); + SaveLogTofile(szbuf); //} break; case 9: /*倾角传感器X轴倾角*/ @@ -3264,10 +3405,12 @@ void ShxyProtocolDataProcess( int devno) //slantpntmsg[aipnt][0].AiState = 1; sprintf(szbuf, "倾角ID:%d slantangle X=%0.3f ", devparam[devno].devaddr, fvalue); LOGV("%s", szbuf); + SaveLogTofile(szbuf); break; case 10: /*倾角传感器Y轴倾角*/ sprintf(szbuf, "Y =%0.3f ", fvalue); LOGV("%s", szbuf); + SaveLogTofile(szbuf); if((fvalue < -59) ||(fvalue > 59)) { @@ -3282,130 +3425,6 @@ void ShxyProtocolDataProcess( int devno) pPortParam->aiValue[1].AiState = Sample; //slantpntmsg[aipnt][1].AiState = 1; break; -#if 0 - case 11: /*测温球导线温度*/ - - fcorvalue = WireTemperatureCorrection(fvalue/100, (WORD)pPortParam->devaddr); - - wdiitemppntmsg[aipnt][0].EuValue = fvalue*wdiitemppntmsg[aipnt][0].AiParam.fFactor\ - +wdiitemppntmsg[aipnt][0].AiParam.EuValueDelta; -//#else - wdiitemppntmsg[aipnt][0].EuValue = fcorvalue*100*wdiitemppntmsg[aipnt][0].AiParam.fFactor\ - +wdiitemppntmsg[aipnt][0].AiParam.EuValueDelta; - - wdiitemppntmsg[aipnt][0].AiState = 1; - g_SelfTest.SensorsFault |= (0x100000); - sprintf(szbuf, "地址%d导线温度:%0.3f ", pPortParam->devaddr, fcorvalue); - DebugStringPrintf(szbuf, strlen(szbuf), 0); - break; - case 12: /*测温球内部温度*/ - wdiitemppntmsg[aipnt][1].EuValue = fvalue*wdiitemppntmsg[aipnt][1].AiParam.fFactor\ - +wdiitemppntmsg[aipnt][1].AiParam.EuValueDelta; - wdiitemppntmsg[aipnt][1].AiState = 1; - sprintf(szbuf, "地址%d内部温度:%0.3f ", pPortParam->devaddr, fvalue/100); - DebugStringPrintf(szbuf, strlen(szbuf), 1); - break; - case 13: /*测温球导线X轴倾角*/ - wdiitemppntmsg[aipnt][3].EuValue = fvalue*wdiitemppntmsg[aipnt][3].AiParam.fFactor\ - +wdiitemppntmsg[aipnt][3].AiParam.EuValueDelta; - wdiitemppntmsg[aipnt][3].AiState = 1; - sprintf(szbuf, "地址%d导线X轴倾角:%0.3f ", pPortParam->devaddr, fvalue/100); - DebugStringPrintf(szbuf, strlen(szbuf), 0); - break; - case 14: /*测温球导线Y轴倾角*/ - wdiitemppntmsg[aipnt][4].EuValue = fvalue*wdiitemppntmsg[aipnt][4].AiParam.fFactor\ - +wdiitemppntmsg[aipnt][4].AiParam.EuValueDelta; - wdiitemppntmsg[aipnt][4].AiState = 1; - sprintf(szbuf, "地址%d导线Y轴倾角:%0.3f ", pPortParam->devaddr, fvalue/100); - DebugStringPrintf(szbuf, strlen(szbuf), 1); - break; - case 15: /*测温球导线电流*/ - wdiitemppntmsg[aipnt][5].EuValue = fvalue*wdiitemppntmsg[aipnt][5].AiParam.fFactor\ - +wdiitemppntmsg[aipnt][5].AiParam.EuValueDelta; - wdiitemppntmsg[aipnt][5].AiState = 1; - sprintf(szbuf, "地址%d导线电流:%0.3f ", pPortParam->devaddr, fvalue/100); - DebugStringPrintf(szbuf, strlen(szbuf), 0); - break; - case 16: /*测温球电池电压*/ - wdiitemppntmsg[aipnt][2].EuValue = fvalue*wdiitemppntmsg[aipnt][2].AiParam.fFactor\ - +wdiitemppntmsg[aipnt][2].AiParam.EuValueDelta; - wdiitemppntmsg[aipnt][2].AiState = 1; - sprintf(szbuf, "地址%d测温球电池电压:%0.3fV ", pPortParam->devaddr, fvalue/100); - DebugStringPrintf(szbuf, strlen(szbuf), 1); - break; - case 17: /*A相泄漏电流平均值;*/ - LCpntmsg[0].EuValue = fvalue*LCpntmsg[0].AiParam.fFactor + LCpntmsg[0].AiParam.EuValueDelta; - LCpntmsg[0].AiState = 1; - sprintf(szbuf, "A相泄漏电流平均值:%0.3f ", fvalue/100); - DebugStringPrintf(szbuf, strlen(szbuf), 0); - break; - case 18: /*A相泄漏电流最大值;*/ - LCpntmsg[1].EuValue = fvalue*LCpntmsg[1].AiParam.fFactor + LCpntmsg[1].AiParam.EuValueDelta; - LCpntmsg[1].AiState = 1; - sprintf(szbuf, "A相泄漏电流最大值:%0.3f ", fvalue/100); - DebugStringPrintf(szbuf, strlen(szbuf), 0); - break; - case 19: /*A相超过3mA的脉冲频次*/ - LCpntmsg[2].EuValue = fvalue*LCpntmsg[2].AiParam.fFactor + LCpntmsg[2].AiParam.EuValueDelta; - LCpntmsg[2].AiState = 1; - sprintf(szbuf, "A相超过3mA的脉冲频次:%0.3f ", fvalue); - DebugStringPrintf(szbuf, strlen(szbuf), 0); - break; - case 20: /*A相超过10mA的脉冲频次*/ - LCpntmsg[3].EuValue = fvalue*LCpntmsg[3].AiParam.fFactor + LCpntmsg[3].AiParam.EuValueDelta; - LCpntmsg[3].AiState = 1; - sprintf(szbuf, "A相超过10mA的脉冲频次:%0.3f ", fvalue); - DebugStringPrintf(szbuf, strlen(szbuf), 1); - break; - case 21: /*B相泄漏电流平均值;*/ - LCpntmsg[4].EuValue = fvalue*LCpntmsg[4].AiParam.fFactor + LCpntmsg[4].AiParam.EuValueDelta; - LCpntmsg[4].AiState = 1; - sprintf(szbuf, "B相泄漏电流平均值:%0.3f ", fvalue/100); - DebugStringPrintf(szbuf, strlen(szbuf), 0); - break; - case 22: /*B相泄漏电流最大值;*/ - LCpntmsg[5].EuValue = fvalue*LCpntmsg[5].AiParam.fFactor + LCpntmsg[5].AiParam.EuValueDelta; - LCpntmsg[5].AiState = 1; - sprintf(szbuf, "B相泄漏电流最大值:%0.3f ", fvalue/100); - DebugStringPrintf(szbuf, strlen(szbuf), 0); - break; - case 23: /*B相超过3mA的脉冲频次*/ - LCpntmsg[6].EuValue = fvalue*LCpntmsg[6].AiParam.fFactor + LCpntmsg[6].AiParam.EuValueDelta; - LCpntmsg[6].AiState = 1; - sprintf(szbuf, "B相超过3mA的脉冲频次:%0.3f ", fvalue); - DebugStringPrintf(szbuf, strlen(szbuf), 0); - break; - case 24: /*B相超过10mA的脉冲频次*/ - LCpntmsg[7].EuValue = fvalue*LCpntmsg[7].AiParam.fFactor + LCpntmsg[7].AiParam.EuValueDelta; - LCpntmsg[7].AiState = 1; - sprintf(szbuf, "B相超过10mA的脉冲频次:%0.3f ", fvalue); - DebugStringPrintf(szbuf, strlen(szbuf), 1); - break; - case 25: /*C相泄漏电流平均值;*/ - LCpntmsg[8].EuValue = fvalue*LCpntmsg[8].AiParam.fFactor + LCpntmsg[8].AiParam.EuValueDelta; - LCpntmsg[8].AiState = 1; - sprintf(szbuf, "C相泄漏电流平均值:%0.3f ", fvalue/100); - DebugStringPrintf(szbuf, strlen(szbuf), 0); - break; - case 26: /*C相泄漏电流最大值;*/ - LCpntmsg[9].EuValue = fvalue*LCpntmsg[9].AiParam.fFactor + LCpntmsg[9].AiParam.EuValueDelta; - LCpntmsg[9].AiState = 1; - sprintf(szbuf, "C相泄漏电流最大值:%0.3f ", fvalue/100); - DebugStringPrintf(szbuf, strlen(szbuf), 0); - break; - case 27: /*C相超过3mA的脉冲频次*/ - LCpntmsg[10].EuValue = fvalue*LCpntmsg[10].AiParam.fFactor + LCpntmsg[10].AiParam.EuValueDelta; - LCpntmsg[10].AiState = 1; - sprintf(szbuf, "C相超过3mA的脉冲频次:%0.3f ", fvalue); - DebugStringPrintf(szbuf, strlen(szbuf), 0); - break; - case 28: /*C相超过10mA的脉冲频次*/ - LCpntmsg[11].EuValue = fvalue*LCpntmsg[11].AiParam.fFactor + LCpntmsg[11].AiParam.EuValueDelta; - LCpntmsg[11].AiState = 1; - sprintf(szbuf, "C相超过10mA的脉冲频次:%0.3f ", fvalue); - DebugStringPrintf(szbuf, strlen(szbuf), 1); - break; -#endif } } @@ -3504,7 +3523,7 @@ void Collect_sensor_data(SENSOR_PARAM *sensorParam) 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].stopbit = (int)(sensorParam[i].stopbit*10); devparam[i].CameraChannel = sensorParam[i].CameraChannel; devparam[i].Phase = sensorParam[i].Phase; } @@ -3526,9 +3545,11 @@ void CameraPhotoCmd(SENSOR_PARAM *sensorParam, u_char channel, int cmdidx, u_cha //baudrate = getBaudrate(sensorParam[i].baudrate); devparam[i].baudrate = getBaudrate(sensorParam[i].baudrate); devparam[i].databit = sensorParam[i].databit; - devparam[i].stopbit = (int)sensorParam[i].stopbit*10; + devparam[i].stopbit = (int)(sensorParam[i].stopbit*10); devparam[i].CameraChannel = sensorParam[i].CameraChannel; devparam[i].Phase = sensorParam[i].Phase; + memset(devparam[i].pathname, 0, sizeof(devparam[i].pathname)); + memmove(devparam[i].pathname, sensorParam[i].pathname, sizeof(devparam[i].pathname)); } #if 0 FindDevUseSerialCommNo(); diff --git a/app/src/main/cpp/SensorsProtocol.h b/app/src/main/cpp/SensorsProtocol.h index f534e80f..5c9d84f8 100644 --- a/app/src/main/cpp/SensorsProtocol.h +++ b/app/src/main/cpp/SensorsProtocol.h @@ -36,7 +36,7 @@ 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 5 #define MAX_DEV_VALUE_NUM 12 /* 一台装置最大的采样值数量*/ #define WEATHER_PROTOCOL 1 /* 温湿度协议序号*/ @@ -130,7 +130,7 @@ typedef unsigned char BYTE; #define SPEED_DOME_CAMERA 0 /* 球机摄像机*/ #define SERIAL_CAMERA 2 /* 串口摄像机a*/ -#define COLLECT_DATA 0 /* 调试使用*/ +#define COLLECT_DATA 1 /* 调试使用*/ #define LOGE(fmt, args...) __android_log_print(ANDROID_LOG_ERROR, "serial_port_comm", fmt, ##args) /* 红色*/ #define LOGI(fmt, args...) __android_log_print(ANDROID_LOG_INFO, "Sensors_Protocol", fmt, ##args) /* 草绿色*/ @@ -372,7 +372,7 @@ void Gm_OpenSerialPort(int devidx); // 关闭串口通讯 void Gm_CloseSerialPort(); - +int SaveLogTofile(char *szbuf); // 功能说明:串口发送数据 返回实际发送的字节数 int GM_SerialComSend(const unsigned char * cSendBuf, unsigned long nSendLen, int commid); void Gm_InitSerialComm(); diff --git a/app/src/main/cpp/serialComm.h b/app/src/main/cpp/serialComm.h index 8321a31b..a8825221 100644 --- a/app/src/main/cpp/serialComm.h +++ b/app/src/main/cpp/serialComm.h @@ -12,7 +12,7 @@ #define IOT_PARAM_WRITE 0xAE #define IOT_PARAM_READ 0xAF -#define LOGE(fmt, args...) __android_log_print(ANDROID_LOG_ERROR, "serial_port_comm", fmt, ##args) +//#define LOGE(fmt, args...) __android_log_print(ANDROID_LOG_ERROR, "serial_port_comm", fmt, ##args) int set_port_attr (int fd, unsigned int baudrate, int databit, const int stopbit, char parity, int vtime, int vmin ); diff --git a/app/src/main/cpp/串口函数调用说明(V1.0).docx b/app/src/main/cpp/串口函数调用说明(V1.0).docx new file mode 100644 index 00000000..c550d605 Binary files /dev/null and b/app/src/main/cpp/串口函数调用说明(V1.0).docx differ