From 1e8704e60e3e52e4e528011e99e5340d63d9283e Mon Sep 17 00:00:00 2001 From: huyizhong Date: Tue, 18 Jun 2024 09:21:57 +0800 Subject: [PATCH] =?UTF-8?q?=E5=85=88=E4=BF=AE=E6=94=B9=E5=A4=9A=E4=B8=B2?= =?UTF-8?q?=E5=8F=A3=E5=A4=9A=E8=A3=85=E7=BD=AE=E9=83=A8=E5=88=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TestComm/app/src/main/cpp/SensorsProtocol.cpp | 445 +++++++----------- TestComm/app/src/main/cpp/SensorsProtocol.h | 20 +- TestComm/app/src/main/cpp/native-lib.cpp | 2 +- app/src/main/cpp/SensorsProtocol.cpp | 445 +++++++----------- app/src/main/cpp/SensorsProtocol.h | 20 +- 5 files changed, 383 insertions(+), 549 deletions(-) diff --git a/TestComm/app/src/main/cpp/SensorsProtocol.cpp b/TestComm/app/src/main/cpp/SensorsProtocol.cpp index 988cd19d..24bb98b7 100644 --- a/TestComm/app/src/main/cpp/SensorsProtocol.cpp +++ b/TestComm/app/src/main/cpp/SensorsProtocol.cpp @@ -19,7 +19,7 @@ #include "SensorsProtocol.h" #include #include "SensorsProtocol.h" -#include "Eint.h" +//#include "Eint.h" SIO_PARAM_SERIAL_DEF serialport[MAX_SERIAL_PORT_NUM]; SERIAL_PARAM devparam[MAX_SERIAL_DEV_NUM]; @@ -509,55 +509,23 @@ AI_DEF weatherpntmsg[WEATHER_DATA_NUM]; AI_DEF rallypntmsg[6][RALLY_DATA_NUM]; AI_DEF slantpntmsg[6][SLANTANGLE_DATA_NUM]; -extern int gDisSunRain; /* add by dzf 20110613控制打印信息*/ - -extern void rmmi_write_to_uart (kal_uint8 *buffer, kal_uint16 length, kal_bool stuff); -extern void GPIO_InitIO(char direction, char port); -extern void GPIO_ModeSetup(kal_uint16 pin, kal_uint16 conf_dada); -extern void GPIO_WriteIO(char data, char port); -extern int sprintf(char *, const char *, ...); -extern void StartTimer(U16 timerid, U32 delay, FuncPtr funcPtr); -extern void StopTimer(U16 timerid); -extern void Gm_OMC_UART_DebugHex(char *print_buf_ptr , int hexlen, char* out_pstr); -extern void applib_dt_get_date_time(applib_time_struct *t); -extern void U_SetBaudRate(UART_PORT port, UART_baudrate baudrate, module_type ownerid); -extern kal_uint32 Gm_GetTimeSec(void); //extern void * memset(void *m, int c, unsigned int n); extern int atoi(const char *s); //extern int Gm_GetSamplingTimeSec(void); -extern void Delayms(kal_uint32 time); -// 传感器故障状态 -extern void CsgSensorsFaultStatus(BYTE askall); -#if PREVENT_PIRATES_BOARD_V40 -#else -#if STATE_GRID_CORPORATION_1738 -// 保存图片大小和包数 -extern void SavePhotosPacketNumAndSize(u_char channel, int presetno, int img_file_size, int packetnum, int iphototime); -// 采集到的图片填充到缓存区 -extern BYTE PhotosPacketToBuffer(BYTE channel, BYTE* photobuf, int packetno, int page_size); -// 获取摄像机类型 -extern BYTE GetCameraType(BYTE channel); -// 获取摄像机拍照图片大小 -extern BYTE GetCameraImageSize(BYTE channel); -// 传感器故障状态 -extern void SGC1738_SensorsFaultStatus(BYTE askall); -#endif -#endif -extern BOOL SetConfigToMcu(U8 ctrl); -#if ENCRYPTION_CHIP -// 获取需要加密的原始数据 -extern int GetEnDecryptData(BYTE * cmdbuf); -// 清除需要加密数据存储缓存区 -extern void ClearEncryptCmdbuf(void); -extern void GetOriginalID(int component, BYTE *buf); -extern int MakeEncryptNetCommand( BYTE cmdidx, BYTE subcmd, BYTE *cmdbuf, int len, BYTE nettype); -extern void OtomZh_RecvData(u_char *buf, int len); -// 设置加密状态 -extern void SetEncryptState(int encryptstate); -#endif +//extern void Delayms(kal_uint32 time); extern void srand( unsigned int seed ); extern int rand( void ); +static long get_msec(void ) +{ + struct timeval tv; + + gettimeofday(&tv, NULL); + long time_in_msec = tv.tv_sec * 1000 + tv.tv_usec/1000; + + return time_in_msec; +} + /* 打开串口电源 */ @@ -580,7 +548,7 @@ void Gm_CloseSensorsPower(int port) sprintf(szbuf, "Close Sensors port %d Power!", port); /* 关闭电源*/ - switch(port) + //switch(port) } @@ -595,7 +563,7 @@ void Gm_OpenSensorsPower(int port) return; sprintf(szbuf, "Open Sensors port %d Power!", port); /* 打开电源*/ - switch(port) + //switch(port) } @@ -606,7 +574,7 @@ char Gm_GetSensorsPowerState(int port) //char szbuf[128]; /* 查询电源状态*/ - switch(port) + //switch(port) return cstate; @@ -683,9 +651,35 @@ void Gm_CloseSerialPort(void) 输出参数: 其它说明: *********************************************************************************/ -int GM_SerialComSend(const unsigned char * cSendBuf, unsigned long nSendLen, int commid) +int GM_SerialComSend(unsigned char * cSendBuf, unsigned long nSendLen, int commid) { + int i, len; + char szbuf[512]; + len = write(serialport[commid].fd, cSendBuf, nSendLen);/* 向串囗发送字符串 */ + //serialport[commid].RevCmdFlag = 0; + //LOGE("发送命令时间差%ld毫秒", get_msec() - isendtime); + //isendtime = time(NULL); + //isendtime = get_msec(); + if (len < 0) + { + LOGE("write data error \n"); + return -1; + } + else if(len > 0) + { + 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; } int Gm_SetSerialPortParam(int commid) @@ -700,6 +694,7 @@ int Gm_SetSerialPortParam(int commid) LOGE("串口%d 波特率等参数设置错误!", commid+1); return -1; } + return ret; } // 初始化所有串口及所接传感器的配置 @@ -764,7 +759,7 @@ void Gm_InitSerialComm(void) } LOGI("%s", szbuf); - sprintf(szbuf, "地址%d!;", srdt.ms_dev[i].devaddr); + sprintf(szbuf, "地址%d!;", devparam[i].devaddr); LOGI("%s", szbuf); if(0 == devparam[i].IsNoInsta) sprintf(szbuf, "没有启用!;"); @@ -835,7 +830,7 @@ void FindDevUseSerialCommNo(void) } } -void GM_StartSerialComm(BYTE compid) +void GM_StartSerialComm(void) { int i, j; char szbuf[64]; @@ -920,15 +915,15 @@ void GM_StartSerialCameraPhoto(BYTE channel, int cmdidx) srdt.RephotographCnt = 0; FindDevUseSerialCommNo(); - sprintf(szbuf, "sampling=%02X !", srdt.sampling); - DebugStringPrintf(szbuf, strlen(szbuf), 1); + //sprintf(szbuf, "sampling=%02X !", srdt.sampling); + //DebugStringPrintf(szbuf, strlen(szbuf), 1); if(0 == srdt.selfflag) srdt.selfflag = 1; Gm_OpenSerialPower(); - if(0x00 == srdt.sampling) - { - Gm_OpenSerialPort(); - } + //if(0x00 == srdt.sampling) + //{ + // Gm_OpenSerialPort(); + //} if(0 == (srdt.sampling & 0x04)) { srdt.sampling |= 4; @@ -945,28 +940,24 @@ void GM_StartSerialCameraPhoto(BYTE channel, int cmdidx) srdt.ms_dev[i].m_iNeedRevLength = 0; //sprintf(szbuf, "装置%d, IsNoInsta=%d, 规约序号=%d", i+1, srdt.ms_dev[i].IsNoInsta, srdt.ms_dev[i].ProtocolIdx); //DebugStringPrintf(szbuf, strlen(szbuf), 1); - if(1 == srdt.ms_dev[i].IsNoInsta) + if(0 == devparam[i].IsNoInsta) { srdt.ms_dev[i].IsNeedSerial = 0; continue; } - switch(srdt.ms_dev[i].ProtocolIdx) + switch(devparam[i].ProtocolIdx) { case SERIALCAMERA_PROTOCOL: /* 串口摄像机协议*/ case PELCO_P_PROTOCOL: /* 摄像机协议*/ case PELCO_D_PROTOCOL: /* 摄像机协议*/ - if((1>srdt.ms_dev[i].CameraChannel) || (srdt.ms_dev[i].CameraChannel >MAX_CHANNEL_NUM)) + if((1>devparam[i].CameraChannel) || (devparam[i].CameraChannel >MAX_CHANNEL_NUM)) { srdt.ms_dev[i].IsNeedSerial = 0; break; } - if(channel == srdt.ms_dev[i].CameraChannel) + if(channel == devparam[i].CameraChannel) { -#if PREVENT_PIRATES_BOARD_V40 - ; -#else - bCameratype = GetCameraType(channel); -#endif + ; } else break; @@ -994,8 +985,8 @@ void GM_StartSerialCameraPhoto(BYTE channel, int cmdidx) if(0x01 == flag) { sprintf(szbuf, "非数据采样期间,摄像机拍照启动串口定时器!"); - DebugStringPrintf(szbuf, strlen(szbuf), 1); - StartTimer(GM_SERIAL_START, TIMER_CNT, GM_SerialTimer); + LOGI("%s", szbuf); + //StartTimer(GM_SERIAL_START, TIMER_CNT, GM_SerialTimer); } return; } @@ -1007,6 +998,7 @@ int GM_SerialTimer(void) GM_IsCloseSensors(); GM_AllSerialComRecv(); GM_ReadWireTemAndCloseTimer(); + return 1; } /******************************************************************************** @@ -1092,7 +1084,7 @@ void GM_IsCloseSensors(void) srdt.ms_dev[i].IsNeedSerial = 0; // 关闭传感器电源 LOGI("因读取装置%d数据超过20秒,关闭装置%d电源!", i+1, i+1); - Gm_CtrlCloseSensorsPower(i); + //Gm_CtrlCloseSensorsPower(i); } else srdt.ms_dev[i].FirstCmdTimeCnt++; @@ -1156,60 +1148,48 @@ void GM_AllSerialComRecv(void) *********************************************************************************/ void GM_ReadWireTemAndCloseTimer(void) { -#if (SOUTHERN_POWER_GRID_V1 ||STATE_GRID_CORPORATION_1738) - int faultstate; -#endif int i, j, iretime; char buf[256]; for(i=0; isrdt.ms_dev[i].ProtocolIdx))) + && ((0devparam[i].ProtocolIdx))) break; } - // 增加被动读取测温数据方式 if(i < MAX_SERIAL_DEV_NUM) { - srdt.IsReadWireTem = 0;/* add by hyz 20120522*/ - StartTimer(GM_SERIAL_START, TIMER_CNT, GM_SerialTimer); + return; // 寻找 } else // 关闭所有串口及电源 { for(i=0; i 35) //{ - if((srdt.ms_dev[j].PowerPort) == 0) + // if((devparam[j].PowerPort) == 0) { - if(-1 == srdt.tempsamplingstartime) - srdt.tempsamplingstartime = iretime; // yizhonghu 110612 - srdt.IsReadWireTem = 1;/* add by dzf 20101110*/ sprintf(buf, "打开无线模块电源!当前时间%d秒,起始时间%d秒", - (int)Gm_GetTimeSec(), srdt.ms_dev[j].FirstCmdTimeCnt); - DebugStringPrintf(buf, strlen(buf), 1); + (int)time(NULL), srdt.ms_dev[j].FirstCmdTimeCnt); + LOGI("%s", buf); } //} @@ -1218,54 +1198,53 @@ void GM_ReadWireTemAndCloseTimer(void) //if(iretime > samtime) if(iretime > 155) { - srdt.IsReadWireTem = 0;/* add by dzf 20101110*/ srdt.ms_dev[j].IsNeedSerial = 0; //srdt.tempsamplingstartime = -1; srdt.tempsamplingsucctime = -1; // 关闭传感器电源 memset(buf, 0, sizeof(buf)); sprintf(buf, "关闭无线模块电源!当前时间%d秒,起始时间%d秒,采样间隔时间10", - (int)Gm_GetTimeSec(), srdt.ms_dev[j].FirstCmdTimeCnt/*, samtime*/); - DebugStringPrintf(buf, strlen(buf), 1); - Gm_CtrlCloseSensorsPower(j); + (int)time(NULL), srdt.ms_dev[j].FirstCmdTimeCnt/*, samtime*/); + LOGI("%s", buf); + //Gm_CtrlCloseSensorsPower(j); } #endif break; } } - StartTimer(GM_SERIAL_START, TIMER_CNT, GM_SerialTimer); + //StartTimer(GM_SERIAL_START, TIMER_CNT, GM_SerialTimer); } else { for(i=0; iUseSerialidx]; + serialport = &serialport[pPortParam->UseSerialidx]; memset((void*)rtumsg.MsgData, 0, sizeof(rtumsg.MsgData)); memcpy((void*)rtumsg.MsgData, (void*)serialport->m_au8RecvBuf, pPortParam->m_iRecvLen); @@ -1332,7 +1311,7 @@ void CameraPhotoPortDataProcess( int port) //sprintf(szbuf, "摄像机地址%d,命令%02X!", uDevAddr, cmdidx); //DebugStringPrintf(szbuf, strlen(szbuf), 1); - if(uDevAddr != pPortParam->devaddr) + if(uDevAddr != devparam[port].devaddr) return; switch(cmdidx) @@ -1356,31 +1335,31 @@ void CameraPhotoPortDataProcess( int port) img_file_size = rtumsg.MsgData[i+3]+ (rtumsg.MsgData[i+2]<<8)+(rtumsg.MsgData[i+1]<<16)+(rtumsg.MsgData[i]<<24); packetnum = rtumsg.MsgData[i+5]+(rtumsg.MsgData[i+4]<<8); srdt.imagepacketnum = packetnum; - srdt.historyimagenum[pPortParam->CameraChannel-1] = rtumsg.MsgData[i+7]+(rtumsg.MsgData[i+6]<<8); - sprintf(szbuf, "有%d张历史图片!",srdt.historyimagenum[pPortParam->CameraChannel-1]); + srdt.historyimagenum[devparam[port].CameraChannel-1] = rtumsg.MsgData[i+7]+(rtumsg.MsgData[i+6]<<8); + sprintf(szbuf, "有%d张历史图片!",srdt.historyimagenum[devparam[port].CameraChannel-1]); //DebugStringPrintf(szbuf, strlen(szbuf), 1); //presetno = (int)GetPhotoPresetNo(pPortParam->CameraChannel); presetno = (int)rtumsg.MsgData[i+8]; - if(0 == netportparam.InitTimeFlag) + //if(0 == netportparam.InitTimeFlag) { serialport->RevCmdFlag = 1; srdt.sendphotocmdcnt = 0; pPortParam->SerialCmdidx = 10001; /* 保存图片*/ - break; + //break } -/ serialport->RevCmdFlag = 1; + serialport->RevCmdFlag = 1; pPortParam->SerialCmdidx = 1; srdt.sendphotocmdcnt = 0; break; case 0x11: /* 图片数据包*/ - if(0 == netportparam.InitTimeFlag) + // if(0 == netportparam.InitTimeFlag) { serialport->RevCmdFlag = 1; srdt.sendphotocmdcnt = 0; pPortParam->SerialCmdidx = 10001; /* 保存图片*/ - break; + //break; } i = 6; iNo = rtumsg.MsgData[i+1]+rtumsg.MsgData[i]*256; @@ -1391,7 +1370,7 @@ void CameraPhotoPortDataProcess( int port) pPortParam->FirstCmdTimeCnt = 0; if((iNo == pPortParam->SerialCmdidx) && (0xFF > rtumsg.MsgData[i+2])) { -/ if(1 == recvend) + if(1 == recvend) pPortParam->SerialCmdidx = 10002;/* 图片读取完成*/ else if(0xFF == recvend) { @@ -1412,7 +1391,7 @@ void CameraPhotoPortDataProcess( int port) srdt.errorPhotoNoCnt++; sprintf(szbuf, "问询第%d包图片摄像机应答第%d包,连续错误%d次!", pPortParam->SerialCmdidx, iNo, srdt.errorPhotoNoCnt); - / if(srdt.errorPhotoNoCnt > 5) + if(srdt.errorPhotoNoCnt > 5) { pPortParam->SerialCmdidx = 0; srdt.RephotographCnt++; @@ -1425,11 +1404,10 @@ void CameraPhotoPortDataProcess( int port) } break; case 0x03: - sprintf(szbuf, "设置波特率%d成功", serialport->Baud); + sprintf(szbuf, "设置波特率%d成功", devparam[port].baudrate); //DebugStringPrintf(szbuf, strlen(szbuf), 1); - pPortParam->Baud = serialport->Baud; + //pPortParam->Baud = serialport->Baud; pPortParam->SerialCmdidx = srdt.iLastGetPhotoNo; - SetConfigToMcu(UART_PARAM); serialport->RevCmdFlag = 1; pPortParam->FirstCmdTimeCnt = 0; break; @@ -1448,17 +1426,17 @@ void CameraPhotoPortDataProcess( int port) img_file_size = rtumsg.MsgData[i+3]+ (rtumsg.MsgData[i+2]<<8)+(rtumsg.MsgData[i+1]<<16)+(rtumsg.MsgData[i]<<24); packetnum = rtumsg.MsgData[i+5]+(rtumsg.MsgData[i+4]<<8); srdt.imagepacketnum = packetnum; - srdt.historyimagenum[pPortParam->CameraChannel-1] = rtumsg.MsgData[i+7]+(rtumsg.MsgData[i+6]<<8); + srdt.historyimagenum[devparam[port].CameraChannel-1] = rtumsg.MsgData[i+7]+(rtumsg.MsgData[i+6]<<8); //presetno = netportparam.CurPresetno[pPortParam->CameraChannel-1]; presetno = rtumsg.MsgData[i+8]; - sprintf(szbuf, "读取历史图片,还有%d张历史图片!",srdt.historyimagenum[pPortParam->CameraChannel-1]); + sprintf(szbuf, "读取历史图片,还有%d张历史图片!",srdt.historyimagenum[devparam[port].CameraChannel-1]); //DebugStringPrintf(szbuf, strlen(szbuf), 1); - if(0 == netportparam.InitTimeFlag) + //if(0 == netportparam.InitTimeFlag) { serialport->RevCmdFlag = 1; srdt.sendphotocmdcnt = 0; pPortParam->SerialCmdidx = -1; - netportparam.PhotosFlag = FALSE; + //netportparam.PhotosFlag = FALSE; break; } serialport->RevCmdFlag = 1; @@ -1474,9 +1452,9 @@ void CameraPhotoPortDataProcess( int port) } if(0 == rtumsg.MsgData[10]) { - if(0 == srdt.historyimagenum[pPortParam->CameraChannel-1]) + if(0 == srdt.historyimagenum[devparam[port].CameraChannel-1]) { - netportparam.SerialCameraPowerCtrl[pPortParam->CameraChannel-1] = 0; + //netportparam.SerialCameraPowerCtrl[devparam[port].CameraChannel-1] = 0; srdt.sampling &= 0xFB; } @@ -1486,12 +1464,11 @@ void CameraPhotoPortDataProcess( int port) else { srdt.sampling &= 0xFB; - netportparam.SerialCameraPowerCtrl[pPortParam->CameraChannel-1] = 0; + //netportparam.SerialCameraPowerCtrl[pPortParam->CameraChannel-1] = 0; } pPortParam->SerialCmdidx = -1; serialport->RevCmdFlag = 1; - if(0 == netportparam.InitTimeFlag) - netportparam.PhotosFlag = FALSE; + //if(0 == netportparam.InitTimeFlag) break; default: serialport->RevCmdFlag = 1; @@ -1505,7 +1482,7 @@ void CameraPhotoPortDataProcess( int port) void SendCmdFormPollCmdBuf( int port ) { char buf[64]; - int len, idelay=0, i, ilen; + int len, idelay=0, i, ret; SIO_PARAM_SERIAL_DEF *pPortParam; //int recvlen; //u_char recvbuf[300]; @@ -1568,38 +1545,19 @@ void SendCmdFormPollCmdBuf( int port ) serialport[devparam[srdt.curdevidx[port]].commid].m_iRecvLen = 0; // 当发送一条新指令时,清除接收状态 serialport[devparam[srdt.curdevidx[port]].commid].m_iRevStatus = 0; - Gm_SetSerialPortParam(port); + ret = Gm_SetSerialPortParam(port); + if(ret < 0) + return; len = GM_SerialComSend(&pPortParam->PollCmd[2], pPortParam->cmdlen-2, port); if(len < 1) { - rmmi_write_to_uart((kal_uint8*)"发送命令失败",strlen("发送命令失败"),KAL_FALSE); - rmmi_write_to_uart((kal_uint8*)"\n\r",2,KAL_FALSE); - rmmi_write_to_uart((kal_uint8 *)"\n\r",2,KAL_FALSE); + LOGE("串口%d, 发送命令失败!", port+1); } else { - if(WDIITEMP_PROTOCOL_OLD == srdt.ms_dev[srdt.curdevidx[port]].ProtocolIdx) - { - sprintf(buf, "发送串口%d 装置%d命令:%s", port+1, srdt.curdevidx[port]+1,(char*)&pPortParam->PollCmd[2]); - DebugStringPrintf(buf, strlen(buf), 0); - } - else - { - if ((gDisSunRain & 0x04) == 0x04) - { /* add by dzf 20110613 控制打印信息*/ - sprintf(buf, "发送串口%d 装置%d命令:", port+1, srdt.curdevidx[port]+1); - DebugStringPrintf(buf, strlen(buf), 0); - for(i=0; i 100) - ilen = 100; - else - ilen = len-i; - memset(buf, 0,sizeof(buf)); - Gm_OMC_UART_DebugHex(buf, ilen, (char*)&pPortParam->PollCmd[i+2]); - } - } - } + + sprintf(buf, "发送串口%d 装置%d命令:", port+1, srdt.curdevidx[port]+1); + BytestreamLOG(buf, &pPortParam->PollCmd[i+2], len, 'D'); } pPortParam->SendCmdFlag = 1; pPortParam->ReSendCmdFlag = 0; @@ -1670,34 +1628,27 @@ int FindNextCameraPhotoCommand(int devidx) { srdt.ms_dev[devidx].SerialCmdidx = -1; sprintf(szbuf, "串口摄像机未接或故障!结束拍照!"); - DebugStringPrintf(szbuf, strlen(szbuf), 1); + LOGI("%s", szbuf); return -1; } - channel = srdt.ms_dev[devidx].CameraChannel; + channel = devparam[devidx].CameraChannel; if((1>channel) || (channel >MAX_CHANNEL_NUM)) { /* 通道号错误退出拍照流程*/; srdt.ms_dev[devidx].SerialCmdidx = -1; sprintf(szbuf, "装置配置中,通道号配置错误!结束拍照!"); - DebugStringPrintf(szbuf, strlen(szbuf), 1); + LOGI("%s", szbuf); } -#if PREVENT_PIRATES_BOARD_V40 -#else - //imagesize = GetCameraImageSize(channel); - //imagequality = netportparam.bContrast[channel-1]; -#endif - //if((imagesize > 6) || (imagesize < 1)) - // imagesize = 6; packetsize = (WORD)MAX_PHOTO_FRAME_LEN; srdt.sendphotocmdcnt++; srdt.imagepacketnum = 0; srdt.errorPhotoNoCnt = 0; cmdidx = 0x10; - srdt.sendphototime=(int)Gm_GetTimeSec(); + srdt.sendphototime=(int)time(NULL); } else if(10000 == cmdno)/* 下发设置串口波特率命令*/ { - switch(g_serialparam[srdt.ms_dev[devidx].UseSerialidx].Baud) + switch(devparam[devidx].baudrate) { case 9600: imagesize = 0x07; @@ -1719,7 +1670,7 @@ int FindNextCameraPhotoCommand(int devidx) break; default: sprintf(szbuf, "设置串口摄像机参数时,配置参数错误!退出设置!"); - DebugStringPrintf(szbuf, strlen(szbuf), 1); + LOGI("%s", szbuf); srdt.ms_dev[devidx].SerialCmdidx = srdt.iLastGetPhotoNo; return -1; } @@ -1727,7 +1678,7 @@ int FindNextCameraPhotoCommand(int devidx) { srdt.ms_dev[devidx].SerialCmdidx = -1; sprintf(szbuf, "设置串口摄像机参数时,15秒未收到摄像机应答!退出设置!"); - DebugStringPrintf(szbuf, strlen(szbuf), 1); + LOGI("%s", szbuf); return -1; } cmdidx = 0x03; @@ -1746,7 +1697,7 @@ int FindNextCameraPhotoCommand(int devidx) { cmdidx = 0x15; packetsize = (WORD)MAX_PHOTO_FRAME_LEN; - srdt.sendphototime=(int)Gm_GetTimeSec(); + srdt.sendphototime=(int)time(NULL); } else { @@ -1757,7 +1708,7 @@ int FindNextCameraPhotoCommand(int devidx) { srdt.ms_dev[devidx].SerialCmdidx = -1; sprintf(szbuf, "读取第%d包图片数据35秒未收到!结束拍照!",packetsize); - DebugStringPrintf(szbuf, strlen(szbuf), 1); + LOGI("%s", szbuf); return -1; } } @@ -1777,7 +1728,7 @@ void MakeCameraPhotoCommand( int portno, BYTE cmdidx, int OneParam, WORD TwoPara sendbuf = serialport[srdt.ms_dev[portno].UseSerialidx].PollCmd; - icurtime = (int)Gm_GetTimeSec(); + icurtime = (int)time(NULL); i = 0; sendbuf[i++] = 0x00; /* 强制等待时间*/ sendbuf[i++] = 0x00; /* 强制等待时间*/ @@ -1873,7 +1824,7 @@ int Gm_CtrlPtzCmd(u_char channel, DWORD ptzcmd) // 1.打开串口电源 Gm_OpenSerialPower(); // 2.打开串口通讯 - Gm_OpenSerialPort(); + Gm_OpenSerialPort(i); //} srdt.sampling |= 2; srdt.SendStopPtzCmdTimeCnt = -1; @@ -1988,7 +1939,7 @@ void Gm_SendPelco_pCommand( DWORD cmdtype) commandbuf[len] = (BYTE)Gm_Pelco_pXORCheck(commandbuf, len); len++; serialport[srdt.camerauseserial].cmdlen = len; - Gm_SetSerialPortBaud(srdt.camerauseserial, devparam[srdt.usecameradevidx].baudrate); + Gm_SetSerialPortParam(srdt.camerauseserial); len = GM_SerialComSend(commandbuf, len, srdt.camerauseserial); if(len < 1) { @@ -1998,7 +1949,7 @@ void Gm_SendPelco_pCommand( DWORD cmdtype) { sprintf(buf, "发送串口%d 像机通道%d Pelco_P命令:", srdt.camerauseserial+1, devparam[srdt.usecameradevidx].CameraChannel); - Gm_OMC_UART_DebugHex(buf, len, (char*)commandbuf); + BytestreamLOG(buf, commandbuf, len, 'D'); } ClearCmdFormPollCmdBuf(srdt.camerauseserial); serialport[srdt.camerauseserial].ForceWaitCnt = 100; @@ -2039,7 +1990,7 @@ void Gm_SendPelco_DCommand( DWORD cmdtype) #endif len++; serialport[srdt.camerauseserial].cmdlen = len; - Gm_SetSerialPortBaud(srdt.camerauseserial, devparam[srdt.usecameradevidx].baudrate); + Gm_SetSerialPortParam(srdt.camerauseserial); len = GM_SerialComSend(commandbuf, len, srdt.camerauseserial); if(len < 1) { @@ -2049,7 +2000,7 @@ void Gm_SendPelco_DCommand( DWORD cmdtype) { sprintf(buf, "发送串口%d 像机通道%d Pelco_D命令:", srdt.camerauseserial+1, devparam[srdt.usecameradevidx].CameraChannel); - Gm_OMC_UART_DebugHex(buf, len, (char*)commandbuf); + BytestreamLOG(buf, commandbuf, len, 'D'); } ClearCmdFormPollCmdBuf(srdt.camerauseserial); serialport[srdt.camerauseserial].ForceWaitCnt = 10; @@ -2106,7 +2057,7 @@ void MakeShxyProtocolPollCommand(int portno, BYTE cmdidx) //char buf[128]; u_char *sendbuf; - sendbuf = g_serialparam[srdt.ms_dev[portno].UseSerialidx].PollCmd; + sendbuf = serialport[srdt.ms_dev[portno].UseSerialidx].PollCmd; i = 0; sendbuf[i++] = 0x00; // 强制等待时间 @@ -2115,12 +2066,12 @@ void MakeShxyProtocolPollCommand(int portno, BYTE cmdidx) sendbuf[i++] = (BYTE)0x00; // length sendbuf[i++] = (BYTE)0x00; // length sendbuf[i++] = 0x68; - sendbuf[i++] = (BYTE)srdt.ms_dev[portno].devaddr; // 传感器地址 + sendbuf[i++] = (BYTE)devparam[portno].devaddr; // 传感器地址 sendbuf[i++] = cmdidx; // 命令信息0x06 sendbuf[i] = CalLpc((u_char *)&sendbuf[6],i-6); i+= 1; sendbuf[i++] = 0x16; // 信息尾 - g_serialparam[srdt.ms_dev[portno].UseSerialidx].cmdlen = i; + 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]); } @@ -2274,68 +2225,19 @@ void ShxyProtocolDataProcess( int commid) char szbuf[64]; pPortParam = &srdt.ms_dev[commid]; - serialport = &g_serialparam[pPortParam->UseSerialidx]; + serialport = &serialport[pPortParam->UseSerialidx]; //取出装置地址,开始处理地址+++ if(0x02 == serialport->m_au8RecvBuf[5]) { - pPortParam->devaddr = serialport->m_au8RecvBuf[4]; + devparam[commid].devaddr = serialport->m_au8RecvBuf[4]; //pPortParam->LinkOk = TRUE; return; } -#if 0 - if(0x06 != serialport->m_au8RecvBuf[5]) - return; - if(0x08 !=serialport->m_au8RecvBuf[1]) - return; -#endif + cmdidx = serialport->m_au8RecvBuf[5]; aipnt = pPortParam->SameTypeDevIdx; uDevAddr = serialport->m_au8RecvBuf[4]; -#if MINI_INTERFACE_BOARD_V20/* 2.0板子测温单独使用串口2接测温球数据*/ - if(1==pPortParam->UseSerialidx) - ; - else - { - if(0 == srdt.IsReadWireTem) - { - if(uDevAddr != pPortParam->devaddr) - return; - } - } -#else - if(0 == srdt.IsReadWireTem) - { - if(uDevAddr != pPortParam->devaddr) - return; - } -#endif - /* 增加拉力实时采样数据存储时间控制 yizhonghu 20110629*/ - if(srdt.samplingtimeSec == 0) - { - srdt.samplingtimeSec = Gm_GetTimeSec(); - srdt.SectimesamplingCnt[0] = 0; - srdt.SectimesamplingCnt[1] = 0; - srdt.SectimesamplingCnt[2] = 0; - memset(XslantSec, 0xff, 6*Second_Sam_NUM*sizeof(short)); - memset(YslantSec, 0xFF, 6*Second_Sam_NUM*sizeof(short)); - memset(rallyd, 0xFF, 6*Second_Sam_NUM*sizeof(short)); - } - if(srdt.samplingtimeSec - Gm_GetTimeSec() >= 1) - { - if ((gDisSunRain & 0x20) == 0x20) - { - sprintf(szbuf, "拉力次数:%d ", srdt.SectimesamplingCnt[2]); - DebugStringPrintf(szbuf, strlen(szbuf), 1); - } - srdt.samplingtimeSec = Gm_GetTimeSec(); - srdt.SectimesamplingCnt[0] = 0; - srdt.SectimesamplingCnt[1] = 0; - srdt.SectimesamplingCnt[2] = 0; - memset(XslantSec, 0xff, 6*Second_Sam_NUM*sizeof(short)); - memset(YslantSec, 0xFF, 6*Second_Sam_NUM*sizeof(short)); - memset(rallyd, 0xFF, 6*Second_Sam_NUM*sizeof(short)); - } fvalua = &fvalue; if(0x06 == cmdidx) @@ -2346,7 +2248,7 @@ void ShxyProtocolDataProcess( int commid) if(pPortParam->recvdatacnt < 2) return; // ++++++++++++++++++++++++++++ - g_SelfTest.SensorsFault |= (0x800<m_au8RecvBuf[9]; *((BYTE*)fvalua+1) = serialport->m_au8RecvBuf[8]; @@ -2361,23 +2263,22 @@ void ShxyProtocolDataProcess( int commid) slantpntmsg[aipnt][0].EuValue = fvalue*slantpntmsg[aipnt][0].AiParam.fFactor\ +slantpntmsg[aipnt][0].AiParam.EuValueDelta; slantpntmsg[aipnt][0].AiState = 1; - if ((gDisSunRain & 0x20) == 0x20) + //if ((gDisSunRain & 0x20) == 0x20) { - sprintf(szbuf, "倾角ID:%d slantangle X=%0.3f ", pPortParam->devaddr, fvalue); - DebugStringPrintf(szbuf, strlen(szbuf), 0); + sprintf(szbuf, "倾角ID:%d slantangle X=%0.3f ", devparam[commid].devaddr, fvalue); + LOGV("%s", szbuf); } - // yizhonghu 20110629 - XslantSec[aipnt][srdt.SectimesamplingCnt[0]] = (short)slantpntmsg[aipnt][0].EuValue; - srdt.SectimesamplingCnt[0] += 1; + //XslantSec[aipnt][srdt.SectimesamplingCnt[0]] = (short)slantpntmsg[aipnt][0].EuValue; + //srdt.SectimesamplingCnt[0] += 1; *(BYTE*)fvalua = serialport->m_au8RecvBuf[13]; *((BYTE*)fvalua+1) = serialport->m_au8RecvBuf[12]; *((BYTE*)fvalua+2) = serialport->m_au8RecvBuf[11]; *((BYTE*)fvalua+3) = serialport->m_au8RecvBuf[10]; - if ((gDisSunRain & 0x20) == 0x20) + //if ((gDisSunRain & 0x20) == 0x20) { sprintf(szbuf, "Y =%0.3f ", fvalue); - DebugStringPrintf(szbuf, strlen(szbuf), 0); + LOGV("%s", szbuf); } if((fvalue < -59) ||(fvalue > 59)) { @@ -2388,14 +2289,14 @@ void ShxyProtocolDataProcess( int commid) slantpntmsg[aipnt][1].EuValue = fvalue*slantpntmsg[aipnt][1].AiParam.fFactor\ +slantpntmsg[aipnt][1].AiParam.EuValueDelta; slantpntmsg[aipnt][1].AiState = 1; - // yizhonghu 20110629 - YslantSec[aipnt][srdt.SectimesamplingCnt[1]] = (short)slantpntmsg[aipnt][1].EuValue; + //YslantSec[aipnt][srdt.SectimesamplingCnt[1]] = (short)slantpntmsg[aipnt][1].EuValue; srdt.SectimesamplingCnt[1] += 1; } datanum = serialport->m_au8RecvBuf[6]; 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) @@ -2432,11 +2333,11 @@ void ShxyProtocolDataProcess( int commid) else weatherpntmsg[0].EuValue = fvalue*weatherpntmsg[0].AiParam.fFactor + weatherpntmsg[0].AiParam.EuValueDelta; weatherpntmsg[0].AiState = 1; - g_SelfTest.SensorsFault |= (0x01); - if ((gDisSunRain & 0x80) == 0x80) + //g_SelfTest.SensorsFault |= (0x01); + //if ((gDisSunRain & 0x80) == 0x80) { sprintf(szbuf, "温度:%0.3f ", fvalue); - DebugStringPrintf(szbuf, strlen(szbuf), 0); + LOGV("%s", szbuf); } break; case 2: /*气压*/ @@ -2448,11 +2349,11 @@ void ShxyProtocolDataProcess( int commid) else weatherpntmsg[5].EuValue = fvalue*weatherpntmsg[5].AiParam.fFactor + weatherpntmsg[5].AiParam.EuValueDelta; weatherpntmsg[5].AiState = 1; - g_SelfTest.SensorsFault |= (0x10); - if ((gDisSunRain & 0x80) == 0x80) + //g_SelfTest.SensorsFault |= (0x10); + //if ((gDisSunRain & 0x80) == 0x80) { sprintf(szbuf, "气压:%0.3f ", fvalue); - DebugStringPrintf(szbuf, strlen(szbuf), 0); + LOGV("%s", szbuf); } break; case 3: /*湿度*/ @@ -2464,11 +2365,11 @@ void ShxyProtocolDataProcess( int commid) else weatherpntmsg[1].EuValue = fvalue*weatherpntmsg[1].AiParam.fFactor + weatherpntmsg[1].AiParam.EuValueDelta; weatherpntmsg[1].AiState = 1; - g_SelfTest.SensorsFault |= (0x02); - if ((gDisSunRain & 0x80) == 0x80) + //g_SelfTest.SensorsFault |= (0x02); + //if ((gDisSunRain & 0x80) == 0x80) { sprintf(szbuf, "湿度:%0.3f ", fvalue); - DebugStringPrintf(szbuf, strlen(szbuf), 1); + LOGV("%s", szbuf); } break; case 4: /*雨量*/ @@ -2484,15 +2385,15 @@ void ShxyProtocolDataProcess( int commid) else weatherpntmsg[2].EuValue = fvalue*weatherpntmsg[2].AiParam.fFactor + weatherpntmsg[2].AiParam.EuValueDelta; weatherpntmsg[2].AiState = 1; - g_SelfTest.SensorsFault |= (0x04); - if ((gDisSunRain & 0x10) == 0x10) + //g_SelfTest.SensorsFault |= (0x04); + //if ((gDisSunRain & 0x10) == 0x10) { //fwind = fvalue/1000*0.95; //if(fvalue/1000 > 25) // fwind -= 1.2; //sprintf(szbuf, "风速:%0.3f ", fwind); sprintf(szbuf, "风速:%0.3f ", fvalue/1000); - DebugStringPrintf(szbuf, strlen(szbuf), 0); + LOGV("%s", szbuf); } break; case 7: /*风向*/ @@ -2504,14 +2405,15 @@ void ShxyProtocolDataProcess( int commid) else weatherpntmsg[3].EuValue = fvalue*weatherpntmsg[3].AiParam.fFactor + weatherpntmsg[3].AiParam.EuValueDelta; weatherpntmsg[3].AiState = 1; - g_SelfTest.SensorsFault |= (0x08); - if ((gDisSunRain & 0x10) == 0x10) + //g_SelfTest.SensorsFault |= (0x08); + //if ((gDisSunRain & 0x10) == 0x10) { sprintf(szbuf, "风向:%0.3f ", fvalue/1000); - DebugStringPrintf(szbuf, strlen(szbuf), 1); + LOGV("%s", szbuf); } break; case 8: /*拉力*/ +#if 0 if(RESERVE1_PROTOCOL == pPortParam->ProtocolIdx) { leirallypntmsg[0].EuValue = fvalue*leirallypntmsg[0].AiParam.fFactor\ @@ -2526,39 +2428,42 @@ void ShxyProtocolDataProcess( int commid) } else { +#endif pPortParam->recvdatacnt++; if(pPortParam->recvdatacnt < 2) break; - g_SelfTest.SensorsFault |= (0x040<devaddr, fvalue/1000.0); - DebugStringPrintf(szbuf, strlen(szbuf), 1); + sprintf(szbuf, "地址%d拉力:%0.3fKg ", devparam[commid].devaddr, fvalue/1000.0); + LOGV("%s", szbuf); } // yizhonghu 20110629 - rallyd[aipnt][srdt.SectimesamplingCnt[2]] = (short)slantpntmsg[aipnt][0].EuValue; + //rallyd[aipnt][srdt.SectimesamplingCnt[2]] = (short)slantpntmsg[aipnt][0].EuValue; srdt.SectimesamplingCnt[2] += 1; - } + //} break; case 9: /*倾角传感器X轴倾角*/ break; case 10: /*倾角传感器Y轴倾角*/ break; +#if 0 case 11: /*测温球导线温度*/ + fcorvalue = WireTemperatureCorrection(fvalue/100, (WORD)pPortParam->devaddr); -#if 0 + wdiitemppntmsg[aipnt][0].EuValue = fvalue*wdiitemppntmsg[aipnt][0].AiParam.fFactor\ +wdiitemppntmsg[aipnt][0].AiParam.EuValueDelta; -#else +//#else wdiitemppntmsg[aipnt][0].EuValue = fcorvalue*100*wdiitemppntmsg[aipnt][0].AiParam.fFactor\ +wdiitemppntmsg[aipnt][0].AiParam.EuValueDelta; -#endif + wdiitemppntmsg[aipnt][0].AiState = 1; g_SelfTest.SensorsFault |= (0x100000); sprintf(szbuf, "地址%d导线温度:%0.3f ", pPortParam->devaddr, fcorvalue); @@ -2671,6 +2576,8 @@ void ShxyProtocolDataProcess( int commid) sprintf(szbuf, "C相超过10mA的脉冲频次:%0.3f ", fvalue); DebugStringPrintf(szbuf, strlen(szbuf), 1); break; +#endif + } } } diff --git a/TestComm/app/src/main/cpp/SensorsProtocol.h b/TestComm/app/src/main/cpp/SensorsProtocol.h index 0c1d820e..505f0226 100644 --- a/TestComm/app/src/main/cpp/SensorsProtocol.h +++ b/TestComm/app/src/main/cpp/SensorsProtocol.h @@ -94,6 +94,9 @@ typedef unsigned char BYTE; #define D_MOVE_LEFT 0x00042d00 /* 向左移动镜头(1 有效)*/ #define D_MOVE_RIGHT 0x00022d00 /* 向右移动镜头(1 有效)*/ +#define SPEED_DOME_CAMERA 0 /* 球机摄像机*/ +#define SERIAL_CAMERA 2 /* 串口摄像机a*/ + #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) /* 草绿色*/ #define LOGV(fmt, args...) __android_log_print(ANDROID_LOG_VERBOSE, "serial_port_comm", fmt, ##args)/* 白色*/ @@ -110,6 +113,15 @@ typedef struct char str[MAX_STRING_LEN]; }IOT_PARAM; +//SDS包类型结构 +typedef struct +{ + BYTE PortIdx; // 信息类型 + WORD MsgType; // 信息类型 + int MsgLen; // 信息长度 + u_char MsgData[RECVDATA_MAXLENTH]; +} RTUMSG; + typedef struct { //float fAiDead; // 数据变化死区(百分系数值,如:设置死区为5%,只需赋值5即可) @@ -221,7 +233,6 @@ typedef struct u_char IsGprs; /* GPRS网络是否注册*/ u_char IsHexToAt; /* 串口1是否使用At指令(0:使用At指令;1:使用16进制数据传输)*/ - module_type modtype; /* 切换到mod_mmi用户之前的用户名称*/ u_char CommMod; /* 通讯模式(0:自动切换通讯模式;1:手动强制使用光网通讯;2:手动强制使用GPRS通讯)*/ u_char sampling; /* 正在进行采样(0:没有进行采样;1:正在进行采样;)*/ @@ -254,7 +265,6 @@ typedef struct int FlagSensorsFault; /*标志字节位从低到高温度、湿度、风速、风向、 气压、导线测温、日照、雨量、摄像头、拉力、倾角*/ #endif - BYTE SameTypeDevNum[SENSORS_TYPE_NUM]; /* 相同类型数据传感器数量*/ int imagepacketnum; /* 串口摄像机拍照图片总包数*/ int historyimagenum[MAX_CHANNEL_NUM]; /* 球机保存的历史图片数量*/ #if 1 @@ -313,7 +323,7 @@ void Gm_CloseSerialPort(void); WORD GM_SerialComSend(const unsigned char * cSendBuf, unsigned long nSendLen, int commid); // 启动串口通讯 -void GM_StartSerialComm(BYTE compid); +void GM_StartSerialComm(void); // 启动使用串口拍照 void GM_StartSerialCameraPhoto(BYTE channel, int cmdidx); @@ -390,10 +400,10 @@ void MakeShxyProtocolPollCommand(int portno, BYTE cmdidx); // 上海欣影传感器协议数据处理 void ShxyProtocolDataProcess( int commid); // 控制关闭传感器电源 -void Gm_CtrlCloseSensorsPower(int devidx); +//void Gm_CtrlCloseSensorsPower(int devidx); // 检查传感器电源是否应该关闭或打开 //void Gm_CheckSensorsPower(void); -void Gm_SetSerialPortBaud(int commid, UART_baudrate Baudrate); +int Gm_SetSerialPortBaud(int commid); // 得到串口波特率 //T_baudrate Gm_GetSerialPortBaud(UART_baudrate Baudrate); diff --git a/TestComm/app/src/main/cpp/native-lib.cpp b/TestComm/app/src/main/cpp/native-lib.cpp index ad9630ad..9ae8fe81 100644 --- a/TestComm/app/src/main/cpp/native-lib.cpp +++ b/TestComm/app/src/main/cpp/native-lib.cpp @@ -661,7 +661,7 @@ Java_com_xinyingpower_testcomm_MainActivity_testSpi( //setRS485Enable(true); //set12VEnable(true); - serial_port_comm(); + //serial_port_comm(); //lxy modify modify //LOGE("_test_ setRS485Enable false"); diff --git a/app/src/main/cpp/SensorsProtocol.cpp b/app/src/main/cpp/SensorsProtocol.cpp index 988cd19d..24bb98b7 100644 --- a/app/src/main/cpp/SensorsProtocol.cpp +++ b/app/src/main/cpp/SensorsProtocol.cpp @@ -19,7 +19,7 @@ #include "SensorsProtocol.h" #include #include "SensorsProtocol.h" -#include "Eint.h" +//#include "Eint.h" SIO_PARAM_SERIAL_DEF serialport[MAX_SERIAL_PORT_NUM]; SERIAL_PARAM devparam[MAX_SERIAL_DEV_NUM]; @@ -509,55 +509,23 @@ AI_DEF weatherpntmsg[WEATHER_DATA_NUM]; AI_DEF rallypntmsg[6][RALLY_DATA_NUM]; AI_DEF slantpntmsg[6][SLANTANGLE_DATA_NUM]; -extern int gDisSunRain; /* add by dzf 20110613控制打印信息*/ - -extern void rmmi_write_to_uart (kal_uint8 *buffer, kal_uint16 length, kal_bool stuff); -extern void GPIO_InitIO(char direction, char port); -extern void GPIO_ModeSetup(kal_uint16 pin, kal_uint16 conf_dada); -extern void GPIO_WriteIO(char data, char port); -extern int sprintf(char *, const char *, ...); -extern void StartTimer(U16 timerid, U32 delay, FuncPtr funcPtr); -extern void StopTimer(U16 timerid); -extern void Gm_OMC_UART_DebugHex(char *print_buf_ptr , int hexlen, char* out_pstr); -extern void applib_dt_get_date_time(applib_time_struct *t); -extern void U_SetBaudRate(UART_PORT port, UART_baudrate baudrate, module_type ownerid); -extern kal_uint32 Gm_GetTimeSec(void); //extern void * memset(void *m, int c, unsigned int n); extern int atoi(const char *s); //extern int Gm_GetSamplingTimeSec(void); -extern void Delayms(kal_uint32 time); -// 传感器故障状态 -extern void CsgSensorsFaultStatus(BYTE askall); -#if PREVENT_PIRATES_BOARD_V40 -#else -#if STATE_GRID_CORPORATION_1738 -// 保存图片大小和包数 -extern void SavePhotosPacketNumAndSize(u_char channel, int presetno, int img_file_size, int packetnum, int iphototime); -// 采集到的图片填充到缓存区 -extern BYTE PhotosPacketToBuffer(BYTE channel, BYTE* photobuf, int packetno, int page_size); -// 获取摄像机类型 -extern BYTE GetCameraType(BYTE channel); -// 获取摄像机拍照图片大小 -extern BYTE GetCameraImageSize(BYTE channel); -// 传感器故障状态 -extern void SGC1738_SensorsFaultStatus(BYTE askall); -#endif -#endif -extern BOOL SetConfigToMcu(U8 ctrl); -#if ENCRYPTION_CHIP -// 获取需要加密的原始数据 -extern int GetEnDecryptData(BYTE * cmdbuf); -// 清除需要加密数据存储缓存区 -extern void ClearEncryptCmdbuf(void); -extern void GetOriginalID(int component, BYTE *buf); -extern int MakeEncryptNetCommand( BYTE cmdidx, BYTE subcmd, BYTE *cmdbuf, int len, BYTE nettype); -extern void OtomZh_RecvData(u_char *buf, int len); -// 设置加密状态 -extern void SetEncryptState(int encryptstate); -#endif +//extern void Delayms(kal_uint32 time); extern void srand( unsigned int seed ); extern int rand( void ); +static long get_msec(void ) +{ + struct timeval tv; + + gettimeofday(&tv, NULL); + long time_in_msec = tv.tv_sec * 1000 + tv.tv_usec/1000; + + return time_in_msec; +} + /* 打开串口电源 */ @@ -580,7 +548,7 @@ void Gm_CloseSensorsPower(int port) sprintf(szbuf, "Close Sensors port %d Power!", port); /* 关闭电源*/ - switch(port) + //switch(port) } @@ -595,7 +563,7 @@ void Gm_OpenSensorsPower(int port) return; sprintf(szbuf, "Open Sensors port %d Power!", port); /* 打开电源*/ - switch(port) + //switch(port) } @@ -606,7 +574,7 @@ char Gm_GetSensorsPowerState(int port) //char szbuf[128]; /* 查询电源状态*/ - switch(port) + //switch(port) return cstate; @@ -683,9 +651,35 @@ void Gm_CloseSerialPort(void) 输出参数: 其它说明: *********************************************************************************/ -int GM_SerialComSend(const unsigned char * cSendBuf, unsigned long nSendLen, int commid) +int GM_SerialComSend(unsigned char * cSendBuf, unsigned long nSendLen, int commid) { + int i, len; + char szbuf[512]; + len = write(serialport[commid].fd, cSendBuf, nSendLen);/* 向串囗发送字符串 */ + //serialport[commid].RevCmdFlag = 0; + //LOGE("发送命令时间差%ld毫秒", get_msec() - isendtime); + //isendtime = time(NULL); + //isendtime = get_msec(); + if (len < 0) + { + LOGE("write data error \n"); + return -1; + } + else if(len > 0) + { + 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; } int Gm_SetSerialPortParam(int commid) @@ -700,6 +694,7 @@ int Gm_SetSerialPortParam(int commid) LOGE("串口%d 波特率等参数设置错误!", commid+1); return -1; } + return ret; } // 初始化所有串口及所接传感器的配置 @@ -764,7 +759,7 @@ void Gm_InitSerialComm(void) } LOGI("%s", szbuf); - sprintf(szbuf, "地址%d!;", srdt.ms_dev[i].devaddr); + sprintf(szbuf, "地址%d!;", devparam[i].devaddr); LOGI("%s", szbuf); if(0 == devparam[i].IsNoInsta) sprintf(szbuf, "没有启用!;"); @@ -835,7 +830,7 @@ void FindDevUseSerialCommNo(void) } } -void GM_StartSerialComm(BYTE compid) +void GM_StartSerialComm(void) { int i, j; char szbuf[64]; @@ -920,15 +915,15 @@ void GM_StartSerialCameraPhoto(BYTE channel, int cmdidx) srdt.RephotographCnt = 0; FindDevUseSerialCommNo(); - sprintf(szbuf, "sampling=%02X !", srdt.sampling); - DebugStringPrintf(szbuf, strlen(szbuf), 1); + //sprintf(szbuf, "sampling=%02X !", srdt.sampling); + //DebugStringPrintf(szbuf, strlen(szbuf), 1); if(0 == srdt.selfflag) srdt.selfflag = 1; Gm_OpenSerialPower(); - if(0x00 == srdt.sampling) - { - Gm_OpenSerialPort(); - } + //if(0x00 == srdt.sampling) + //{ + // Gm_OpenSerialPort(); + //} if(0 == (srdt.sampling & 0x04)) { srdt.sampling |= 4; @@ -945,28 +940,24 @@ void GM_StartSerialCameraPhoto(BYTE channel, int cmdidx) srdt.ms_dev[i].m_iNeedRevLength = 0; //sprintf(szbuf, "装置%d, IsNoInsta=%d, 规约序号=%d", i+1, srdt.ms_dev[i].IsNoInsta, srdt.ms_dev[i].ProtocolIdx); //DebugStringPrintf(szbuf, strlen(szbuf), 1); - if(1 == srdt.ms_dev[i].IsNoInsta) + if(0 == devparam[i].IsNoInsta) { srdt.ms_dev[i].IsNeedSerial = 0; continue; } - switch(srdt.ms_dev[i].ProtocolIdx) + switch(devparam[i].ProtocolIdx) { case SERIALCAMERA_PROTOCOL: /* 串口摄像机协议*/ case PELCO_P_PROTOCOL: /* 摄像机协议*/ case PELCO_D_PROTOCOL: /* 摄像机协议*/ - if((1>srdt.ms_dev[i].CameraChannel) || (srdt.ms_dev[i].CameraChannel >MAX_CHANNEL_NUM)) + if((1>devparam[i].CameraChannel) || (devparam[i].CameraChannel >MAX_CHANNEL_NUM)) { srdt.ms_dev[i].IsNeedSerial = 0; break; } - if(channel == srdt.ms_dev[i].CameraChannel) + if(channel == devparam[i].CameraChannel) { -#if PREVENT_PIRATES_BOARD_V40 - ; -#else - bCameratype = GetCameraType(channel); -#endif + ; } else break; @@ -994,8 +985,8 @@ void GM_StartSerialCameraPhoto(BYTE channel, int cmdidx) if(0x01 == flag) { sprintf(szbuf, "非数据采样期间,摄像机拍照启动串口定时器!"); - DebugStringPrintf(szbuf, strlen(szbuf), 1); - StartTimer(GM_SERIAL_START, TIMER_CNT, GM_SerialTimer); + LOGI("%s", szbuf); + //StartTimer(GM_SERIAL_START, TIMER_CNT, GM_SerialTimer); } return; } @@ -1007,6 +998,7 @@ int GM_SerialTimer(void) GM_IsCloseSensors(); GM_AllSerialComRecv(); GM_ReadWireTemAndCloseTimer(); + return 1; } /******************************************************************************** @@ -1092,7 +1084,7 @@ void GM_IsCloseSensors(void) srdt.ms_dev[i].IsNeedSerial = 0; // 关闭传感器电源 LOGI("因读取装置%d数据超过20秒,关闭装置%d电源!", i+1, i+1); - Gm_CtrlCloseSensorsPower(i); + //Gm_CtrlCloseSensorsPower(i); } else srdt.ms_dev[i].FirstCmdTimeCnt++; @@ -1156,60 +1148,48 @@ void GM_AllSerialComRecv(void) *********************************************************************************/ void GM_ReadWireTemAndCloseTimer(void) { -#if (SOUTHERN_POWER_GRID_V1 ||STATE_GRID_CORPORATION_1738) - int faultstate; -#endif int i, j, iretime; char buf[256]; for(i=0; isrdt.ms_dev[i].ProtocolIdx))) + && ((0devparam[i].ProtocolIdx))) break; } - // 增加被动读取测温数据方式 if(i < MAX_SERIAL_DEV_NUM) { - srdt.IsReadWireTem = 0;/* add by hyz 20120522*/ - StartTimer(GM_SERIAL_START, TIMER_CNT, GM_SerialTimer); + return; // 寻找 } else // 关闭所有串口及电源 { for(i=0; i 35) //{ - if((srdt.ms_dev[j].PowerPort) == 0) + // if((devparam[j].PowerPort) == 0) { - if(-1 == srdt.tempsamplingstartime) - srdt.tempsamplingstartime = iretime; // yizhonghu 110612 - srdt.IsReadWireTem = 1;/* add by dzf 20101110*/ sprintf(buf, "打开无线模块电源!当前时间%d秒,起始时间%d秒", - (int)Gm_GetTimeSec(), srdt.ms_dev[j].FirstCmdTimeCnt); - DebugStringPrintf(buf, strlen(buf), 1); + (int)time(NULL), srdt.ms_dev[j].FirstCmdTimeCnt); + LOGI("%s", buf); } //} @@ -1218,54 +1198,53 @@ void GM_ReadWireTemAndCloseTimer(void) //if(iretime > samtime) if(iretime > 155) { - srdt.IsReadWireTem = 0;/* add by dzf 20101110*/ srdt.ms_dev[j].IsNeedSerial = 0; //srdt.tempsamplingstartime = -1; srdt.tempsamplingsucctime = -1; // 关闭传感器电源 memset(buf, 0, sizeof(buf)); sprintf(buf, "关闭无线模块电源!当前时间%d秒,起始时间%d秒,采样间隔时间10", - (int)Gm_GetTimeSec(), srdt.ms_dev[j].FirstCmdTimeCnt/*, samtime*/); - DebugStringPrintf(buf, strlen(buf), 1); - Gm_CtrlCloseSensorsPower(j); + (int)time(NULL), srdt.ms_dev[j].FirstCmdTimeCnt/*, samtime*/); + LOGI("%s", buf); + //Gm_CtrlCloseSensorsPower(j); } #endif break; } } - StartTimer(GM_SERIAL_START, TIMER_CNT, GM_SerialTimer); + //StartTimer(GM_SERIAL_START, TIMER_CNT, GM_SerialTimer); } else { for(i=0; iUseSerialidx]; + serialport = &serialport[pPortParam->UseSerialidx]; memset((void*)rtumsg.MsgData, 0, sizeof(rtumsg.MsgData)); memcpy((void*)rtumsg.MsgData, (void*)serialport->m_au8RecvBuf, pPortParam->m_iRecvLen); @@ -1332,7 +1311,7 @@ void CameraPhotoPortDataProcess( int port) //sprintf(szbuf, "摄像机地址%d,命令%02X!", uDevAddr, cmdidx); //DebugStringPrintf(szbuf, strlen(szbuf), 1); - if(uDevAddr != pPortParam->devaddr) + if(uDevAddr != devparam[port].devaddr) return; switch(cmdidx) @@ -1356,31 +1335,31 @@ void CameraPhotoPortDataProcess( int port) img_file_size = rtumsg.MsgData[i+3]+ (rtumsg.MsgData[i+2]<<8)+(rtumsg.MsgData[i+1]<<16)+(rtumsg.MsgData[i]<<24); packetnum = rtumsg.MsgData[i+5]+(rtumsg.MsgData[i+4]<<8); srdt.imagepacketnum = packetnum; - srdt.historyimagenum[pPortParam->CameraChannel-1] = rtumsg.MsgData[i+7]+(rtumsg.MsgData[i+6]<<8); - sprintf(szbuf, "有%d张历史图片!",srdt.historyimagenum[pPortParam->CameraChannel-1]); + srdt.historyimagenum[devparam[port].CameraChannel-1] = rtumsg.MsgData[i+7]+(rtumsg.MsgData[i+6]<<8); + sprintf(szbuf, "有%d张历史图片!",srdt.historyimagenum[devparam[port].CameraChannel-1]); //DebugStringPrintf(szbuf, strlen(szbuf), 1); //presetno = (int)GetPhotoPresetNo(pPortParam->CameraChannel); presetno = (int)rtumsg.MsgData[i+8]; - if(0 == netportparam.InitTimeFlag) + //if(0 == netportparam.InitTimeFlag) { serialport->RevCmdFlag = 1; srdt.sendphotocmdcnt = 0; pPortParam->SerialCmdidx = 10001; /* 保存图片*/ - break; + //break } -/ serialport->RevCmdFlag = 1; + serialport->RevCmdFlag = 1; pPortParam->SerialCmdidx = 1; srdt.sendphotocmdcnt = 0; break; case 0x11: /* 图片数据包*/ - if(0 == netportparam.InitTimeFlag) + // if(0 == netportparam.InitTimeFlag) { serialport->RevCmdFlag = 1; srdt.sendphotocmdcnt = 0; pPortParam->SerialCmdidx = 10001; /* 保存图片*/ - break; + //break; } i = 6; iNo = rtumsg.MsgData[i+1]+rtumsg.MsgData[i]*256; @@ -1391,7 +1370,7 @@ void CameraPhotoPortDataProcess( int port) pPortParam->FirstCmdTimeCnt = 0; if((iNo == pPortParam->SerialCmdidx) && (0xFF > rtumsg.MsgData[i+2])) { -/ if(1 == recvend) + if(1 == recvend) pPortParam->SerialCmdidx = 10002;/* 图片读取完成*/ else if(0xFF == recvend) { @@ -1412,7 +1391,7 @@ void CameraPhotoPortDataProcess( int port) srdt.errorPhotoNoCnt++; sprintf(szbuf, "问询第%d包图片摄像机应答第%d包,连续错误%d次!", pPortParam->SerialCmdidx, iNo, srdt.errorPhotoNoCnt); - / if(srdt.errorPhotoNoCnt > 5) + if(srdt.errorPhotoNoCnt > 5) { pPortParam->SerialCmdidx = 0; srdt.RephotographCnt++; @@ -1425,11 +1404,10 @@ void CameraPhotoPortDataProcess( int port) } break; case 0x03: - sprintf(szbuf, "设置波特率%d成功", serialport->Baud); + sprintf(szbuf, "设置波特率%d成功", devparam[port].baudrate); //DebugStringPrintf(szbuf, strlen(szbuf), 1); - pPortParam->Baud = serialport->Baud; + //pPortParam->Baud = serialport->Baud; pPortParam->SerialCmdidx = srdt.iLastGetPhotoNo; - SetConfigToMcu(UART_PARAM); serialport->RevCmdFlag = 1; pPortParam->FirstCmdTimeCnt = 0; break; @@ -1448,17 +1426,17 @@ void CameraPhotoPortDataProcess( int port) img_file_size = rtumsg.MsgData[i+3]+ (rtumsg.MsgData[i+2]<<8)+(rtumsg.MsgData[i+1]<<16)+(rtumsg.MsgData[i]<<24); packetnum = rtumsg.MsgData[i+5]+(rtumsg.MsgData[i+4]<<8); srdt.imagepacketnum = packetnum; - srdt.historyimagenum[pPortParam->CameraChannel-1] = rtumsg.MsgData[i+7]+(rtumsg.MsgData[i+6]<<8); + srdt.historyimagenum[devparam[port].CameraChannel-1] = rtumsg.MsgData[i+7]+(rtumsg.MsgData[i+6]<<8); //presetno = netportparam.CurPresetno[pPortParam->CameraChannel-1]; presetno = rtumsg.MsgData[i+8]; - sprintf(szbuf, "读取历史图片,还有%d张历史图片!",srdt.historyimagenum[pPortParam->CameraChannel-1]); + sprintf(szbuf, "读取历史图片,还有%d张历史图片!",srdt.historyimagenum[devparam[port].CameraChannel-1]); //DebugStringPrintf(szbuf, strlen(szbuf), 1); - if(0 == netportparam.InitTimeFlag) + //if(0 == netportparam.InitTimeFlag) { serialport->RevCmdFlag = 1; srdt.sendphotocmdcnt = 0; pPortParam->SerialCmdidx = -1; - netportparam.PhotosFlag = FALSE; + //netportparam.PhotosFlag = FALSE; break; } serialport->RevCmdFlag = 1; @@ -1474,9 +1452,9 @@ void CameraPhotoPortDataProcess( int port) } if(0 == rtumsg.MsgData[10]) { - if(0 == srdt.historyimagenum[pPortParam->CameraChannel-1]) + if(0 == srdt.historyimagenum[devparam[port].CameraChannel-1]) { - netportparam.SerialCameraPowerCtrl[pPortParam->CameraChannel-1] = 0; + //netportparam.SerialCameraPowerCtrl[devparam[port].CameraChannel-1] = 0; srdt.sampling &= 0xFB; } @@ -1486,12 +1464,11 @@ void CameraPhotoPortDataProcess( int port) else { srdt.sampling &= 0xFB; - netportparam.SerialCameraPowerCtrl[pPortParam->CameraChannel-1] = 0; + //netportparam.SerialCameraPowerCtrl[pPortParam->CameraChannel-1] = 0; } pPortParam->SerialCmdidx = -1; serialport->RevCmdFlag = 1; - if(0 == netportparam.InitTimeFlag) - netportparam.PhotosFlag = FALSE; + //if(0 == netportparam.InitTimeFlag) break; default: serialport->RevCmdFlag = 1; @@ -1505,7 +1482,7 @@ void CameraPhotoPortDataProcess( int port) void SendCmdFormPollCmdBuf( int port ) { char buf[64]; - int len, idelay=0, i, ilen; + int len, idelay=0, i, ret; SIO_PARAM_SERIAL_DEF *pPortParam; //int recvlen; //u_char recvbuf[300]; @@ -1568,38 +1545,19 @@ void SendCmdFormPollCmdBuf( int port ) serialport[devparam[srdt.curdevidx[port]].commid].m_iRecvLen = 0; // 当发送一条新指令时,清除接收状态 serialport[devparam[srdt.curdevidx[port]].commid].m_iRevStatus = 0; - Gm_SetSerialPortParam(port); + ret = Gm_SetSerialPortParam(port); + if(ret < 0) + return; len = GM_SerialComSend(&pPortParam->PollCmd[2], pPortParam->cmdlen-2, port); if(len < 1) { - rmmi_write_to_uart((kal_uint8*)"发送命令失败",strlen("发送命令失败"),KAL_FALSE); - rmmi_write_to_uart((kal_uint8*)"\n\r",2,KAL_FALSE); - rmmi_write_to_uart((kal_uint8 *)"\n\r",2,KAL_FALSE); + LOGE("串口%d, 发送命令失败!", port+1); } else { - if(WDIITEMP_PROTOCOL_OLD == srdt.ms_dev[srdt.curdevidx[port]].ProtocolIdx) - { - sprintf(buf, "发送串口%d 装置%d命令:%s", port+1, srdt.curdevidx[port]+1,(char*)&pPortParam->PollCmd[2]); - DebugStringPrintf(buf, strlen(buf), 0); - } - else - { - if ((gDisSunRain & 0x04) == 0x04) - { /* add by dzf 20110613 控制打印信息*/ - sprintf(buf, "发送串口%d 装置%d命令:", port+1, srdt.curdevidx[port]+1); - DebugStringPrintf(buf, strlen(buf), 0); - for(i=0; i 100) - ilen = 100; - else - ilen = len-i; - memset(buf, 0,sizeof(buf)); - Gm_OMC_UART_DebugHex(buf, ilen, (char*)&pPortParam->PollCmd[i+2]); - } - } - } + + sprintf(buf, "发送串口%d 装置%d命令:", port+1, srdt.curdevidx[port]+1); + BytestreamLOG(buf, &pPortParam->PollCmd[i+2], len, 'D'); } pPortParam->SendCmdFlag = 1; pPortParam->ReSendCmdFlag = 0; @@ -1670,34 +1628,27 @@ int FindNextCameraPhotoCommand(int devidx) { srdt.ms_dev[devidx].SerialCmdidx = -1; sprintf(szbuf, "串口摄像机未接或故障!结束拍照!"); - DebugStringPrintf(szbuf, strlen(szbuf), 1); + LOGI("%s", szbuf); return -1; } - channel = srdt.ms_dev[devidx].CameraChannel; + channel = devparam[devidx].CameraChannel; if((1>channel) || (channel >MAX_CHANNEL_NUM)) { /* 通道号错误退出拍照流程*/; srdt.ms_dev[devidx].SerialCmdidx = -1; sprintf(szbuf, "装置配置中,通道号配置错误!结束拍照!"); - DebugStringPrintf(szbuf, strlen(szbuf), 1); + LOGI("%s", szbuf); } -#if PREVENT_PIRATES_BOARD_V40 -#else - //imagesize = GetCameraImageSize(channel); - //imagequality = netportparam.bContrast[channel-1]; -#endif - //if((imagesize > 6) || (imagesize < 1)) - // imagesize = 6; packetsize = (WORD)MAX_PHOTO_FRAME_LEN; srdt.sendphotocmdcnt++; srdt.imagepacketnum = 0; srdt.errorPhotoNoCnt = 0; cmdidx = 0x10; - srdt.sendphototime=(int)Gm_GetTimeSec(); + srdt.sendphototime=(int)time(NULL); } else if(10000 == cmdno)/* 下发设置串口波特率命令*/ { - switch(g_serialparam[srdt.ms_dev[devidx].UseSerialidx].Baud) + switch(devparam[devidx].baudrate) { case 9600: imagesize = 0x07; @@ -1719,7 +1670,7 @@ int FindNextCameraPhotoCommand(int devidx) break; default: sprintf(szbuf, "设置串口摄像机参数时,配置参数错误!退出设置!"); - DebugStringPrintf(szbuf, strlen(szbuf), 1); + LOGI("%s", szbuf); srdt.ms_dev[devidx].SerialCmdidx = srdt.iLastGetPhotoNo; return -1; } @@ -1727,7 +1678,7 @@ int FindNextCameraPhotoCommand(int devidx) { srdt.ms_dev[devidx].SerialCmdidx = -1; sprintf(szbuf, "设置串口摄像机参数时,15秒未收到摄像机应答!退出设置!"); - DebugStringPrintf(szbuf, strlen(szbuf), 1); + LOGI("%s", szbuf); return -1; } cmdidx = 0x03; @@ -1746,7 +1697,7 @@ int FindNextCameraPhotoCommand(int devidx) { cmdidx = 0x15; packetsize = (WORD)MAX_PHOTO_FRAME_LEN; - srdt.sendphototime=(int)Gm_GetTimeSec(); + srdt.sendphototime=(int)time(NULL); } else { @@ -1757,7 +1708,7 @@ int FindNextCameraPhotoCommand(int devidx) { srdt.ms_dev[devidx].SerialCmdidx = -1; sprintf(szbuf, "读取第%d包图片数据35秒未收到!结束拍照!",packetsize); - DebugStringPrintf(szbuf, strlen(szbuf), 1); + LOGI("%s", szbuf); return -1; } } @@ -1777,7 +1728,7 @@ void MakeCameraPhotoCommand( int portno, BYTE cmdidx, int OneParam, WORD TwoPara sendbuf = serialport[srdt.ms_dev[portno].UseSerialidx].PollCmd; - icurtime = (int)Gm_GetTimeSec(); + icurtime = (int)time(NULL); i = 0; sendbuf[i++] = 0x00; /* 强制等待时间*/ sendbuf[i++] = 0x00; /* 强制等待时间*/ @@ -1873,7 +1824,7 @@ int Gm_CtrlPtzCmd(u_char channel, DWORD ptzcmd) // 1.打开串口电源 Gm_OpenSerialPower(); // 2.打开串口通讯 - Gm_OpenSerialPort(); + Gm_OpenSerialPort(i); //} srdt.sampling |= 2; srdt.SendStopPtzCmdTimeCnt = -1; @@ -1988,7 +1939,7 @@ void Gm_SendPelco_pCommand( DWORD cmdtype) commandbuf[len] = (BYTE)Gm_Pelco_pXORCheck(commandbuf, len); len++; serialport[srdt.camerauseserial].cmdlen = len; - Gm_SetSerialPortBaud(srdt.camerauseserial, devparam[srdt.usecameradevidx].baudrate); + Gm_SetSerialPortParam(srdt.camerauseserial); len = GM_SerialComSend(commandbuf, len, srdt.camerauseserial); if(len < 1) { @@ -1998,7 +1949,7 @@ void Gm_SendPelco_pCommand( DWORD cmdtype) { sprintf(buf, "发送串口%d 像机通道%d Pelco_P命令:", srdt.camerauseserial+1, devparam[srdt.usecameradevidx].CameraChannel); - Gm_OMC_UART_DebugHex(buf, len, (char*)commandbuf); + BytestreamLOG(buf, commandbuf, len, 'D'); } ClearCmdFormPollCmdBuf(srdt.camerauseserial); serialport[srdt.camerauseserial].ForceWaitCnt = 100; @@ -2039,7 +1990,7 @@ void Gm_SendPelco_DCommand( DWORD cmdtype) #endif len++; serialport[srdt.camerauseserial].cmdlen = len; - Gm_SetSerialPortBaud(srdt.camerauseserial, devparam[srdt.usecameradevidx].baudrate); + Gm_SetSerialPortParam(srdt.camerauseserial); len = GM_SerialComSend(commandbuf, len, srdt.camerauseserial); if(len < 1) { @@ -2049,7 +2000,7 @@ void Gm_SendPelco_DCommand( DWORD cmdtype) { sprintf(buf, "发送串口%d 像机通道%d Pelco_D命令:", srdt.camerauseserial+1, devparam[srdt.usecameradevidx].CameraChannel); - Gm_OMC_UART_DebugHex(buf, len, (char*)commandbuf); + BytestreamLOG(buf, commandbuf, len, 'D'); } ClearCmdFormPollCmdBuf(srdt.camerauseserial); serialport[srdt.camerauseserial].ForceWaitCnt = 10; @@ -2106,7 +2057,7 @@ void MakeShxyProtocolPollCommand(int portno, BYTE cmdidx) //char buf[128]; u_char *sendbuf; - sendbuf = g_serialparam[srdt.ms_dev[portno].UseSerialidx].PollCmd; + sendbuf = serialport[srdt.ms_dev[portno].UseSerialidx].PollCmd; i = 0; sendbuf[i++] = 0x00; // 强制等待时间 @@ -2115,12 +2066,12 @@ void MakeShxyProtocolPollCommand(int portno, BYTE cmdidx) sendbuf[i++] = (BYTE)0x00; // length sendbuf[i++] = (BYTE)0x00; // length sendbuf[i++] = 0x68; - sendbuf[i++] = (BYTE)srdt.ms_dev[portno].devaddr; // 传感器地址 + sendbuf[i++] = (BYTE)devparam[portno].devaddr; // 传感器地址 sendbuf[i++] = cmdidx; // 命令信息0x06 sendbuf[i] = CalLpc((u_char *)&sendbuf[6],i-6); i+= 1; sendbuf[i++] = 0x16; // 信息尾 - g_serialparam[srdt.ms_dev[portno].UseSerialidx].cmdlen = i; + 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]); } @@ -2274,68 +2225,19 @@ void ShxyProtocolDataProcess( int commid) char szbuf[64]; pPortParam = &srdt.ms_dev[commid]; - serialport = &g_serialparam[pPortParam->UseSerialidx]; + serialport = &serialport[pPortParam->UseSerialidx]; //取出装置地址,开始处理地址+++ if(0x02 == serialport->m_au8RecvBuf[5]) { - pPortParam->devaddr = serialport->m_au8RecvBuf[4]; + devparam[commid].devaddr = serialport->m_au8RecvBuf[4]; //pPortParam->LinkOk = TRUE; return; } -#if 0 - if(0x06 != serialport->m_au8RecvBuf[5]) - return; - if(0x08 !=serialport->m_au8RecvBuf[1]) - return; -#endif + cmdidx = serialport->m_au8RecvBuf[5]; aipnt = pPortParam->SameTypeDevIdx; uDevAddr = serialport->m_au8RecvBuf[4]; -#if MINI_INTERFACE_BOARD_V20/* 2.0板子测温单独使用串口2接测温球数据*/ - if(1==pPortParam->UseSerialidx) - ; - else - { - if(0 == srdt.IsReadWireTem) - { - if(uDevAddr != pPortParam->devaddr) - return; - } - } -#else - if(0 == srdt.IsReadWireTem) - { - if(uDevAddr != pPortParam->devaddr) - return; - } -#endif - /* 增加拉力实时采样数据存储时间控制 yizhonghu 20110629*/ - if(srdt.samplingtimeSec == 0) - { - srdt.samplingtimeSec = Gm_GetTimeSec(); - srdt.SectimesamplingCnt[0] = 0; - srdt.SectimesamplingCnt[1] = 0; - srdt.SectimesamplingCnt[2] = 0; - memset(XslantSec, 0xff, 6*Second_Sam_NUM*sizeof(short)); - memset(YslantSec, 0xFF, 6*Second_Sam_NUM*sizeof(short)); - memset(rallyd, 0xFF, 6*Second_Sam_NUM*sizeof(short)); - } - if(srdt.samplingtimeSec - Gm_GetTimeSec() >= 1) - { - if ((gDisSunRain & 0x20) == 0x20) - { - sprintf(szbuf, "拉力次数:%d ", srdt.SectimesamplingCnt[2]); - DebugStringPrintf(szbuf, strlen(szbuf), 1); - } - srdt.samplingtimeSec = Gm_GetTimeSec(); - srdt.SectimesamplingCnt[0] = 0; - srdt.SectimesamplingCnt[1] = 0; - srdt.SectimesamplingCnt[2] = 0; - memset(XslantSec, 0xff, 6*Second_Sam_NUM*sizeof(short)); - memset(YslantSec, 0xFF, 6*Second_Sam_NUM*sizeof(short)); - memset(rallyd, 0xFF, 6*Second_Sam_NUM*sizeof(short)); - } fvalua = &fvalue; if(0x06 == cmdidx) @@ -2346,7 +2248,7 @@ void ShxyProtocolDataProcess( int commid) if(pPortParam->recvdatacnt < 2) return; // ++++++++++++++++++++++++++++ - g_SelfTest.SensorsFault |= (0x800<m_au8RecvBuf[9]; *((BYTE*)fvalua+1) = serialport->m_au8RecvBuf[8]; @@ -2361,23 +2263,22 @@ void ShxyProtocolDataProcess( int commid) slantpntmsg[aipnt][0].EuValue = fvalue*slantpntmsg[aipnt][0].AiParam.fFactor\ +slantpntmsg[aipnt][0].AiParam.EuValueDelta; slantpntmsg[aipnt][0].AiState = 1; - if ((gDisSunRain & 0x20) == 0x20) + //if ((gDisSunRain & 0x20) == 0x20) { - sprintf(szbuf, "倾角ID:%d slantangle X=%0.3f ", pPortParam->devaddr, fvalue); - DebugStringPrintf(szbuf, strlen(szbuf), 0); + sprintf(szbuf, "倾角ID:%d slantangle X=%0.3f ", devparam[commid].devaddr, fvalue); + LOGV("%s", szbuf); } - // yizhonghu 20110629 - XslantSec[aipnt][srdt.SectimesamplingCnt[0]] = (short)slantpntmsg[aipnt][0].EuValue; - srdt.SectimesamplingCnt[0] += 1; + //XslantSec[aipnt][srdt.SectimesamplingCnt[0]] = (short)slantpntmsg[aipnt][0].EuValue; + //srdt.SectimesamplingCnt[0] += 1; *(BYTE*)fvalua = serialport->m_au8RecvBuf[13]; *((BYTE*)fvalua+1) = serialport->m_au8RecvBuf[12]; *((BYTE*)fvalua+2) = serialport->m_au8RecvBuf[11]; *((BYTE*)fvalua+3) = serialport->m_au8RecvBuf[10]; - if ((gDisSunRain & 0x20) == 0x20) + //if ((gDisSunRain & 0x20) == 0x20) { sprintf(szbuf, "Y =%0.3f ", fvalue); - DebugStringPrintf(szbuf, strlen(szbuf), 0); + LOGV("%s", szbuf); } if((fvalue < -59) ||(fvalue > 59)) { @@ -2388,14 +2289,14 @@ void ShxyProtocolDataProcess( int commid) slantpntmsg[aipnt][1].EuValue = fvalue*slantpntmsg[aipnt][1].AiParam.fFactor\ +slantpntmsg[aipnt][1].AiParam.EuValueDelta; slantpntmsg[aipnt][1].AiState = 1; - // yizhonghu 20110629 - YslantSec[aipnt][srdt.SectimesamplingCnt[1]] = (short)slantpntmsg[aipnt][1].EuValue; + //YslantSec[aipnt][srdt.SectimesamplingCnt[1]] = (short)slantpntmsg[aipnt][1].EuValue; srdt.SectimesamplingCnt[1] += 1; } datanum = serialport->m_au8RecvBuf[6]; 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) @@ -2432,11 +2333,11 @@ void ShxyProtocolDataProcess( int commid) else weatherpntmsg[0].EuValue = fvalue*weatherpntmsg[0].AiParam.fFactor + weatherpntmsg[0].AiParam.EuValueDelta; weatherpntmsg[0].AiState = 1; - g_SelfTest.SensorsFault |= (0x01); - if ((gDisSunRain & 0x80) == 0x80) + //g_SelfTest.SensorsFault |= (0x01); + //if ((gDisSunRain & 0x80) == 0x80) { sprintf(szbuf, "温度:%0.3f ", fvalue); - DebugStringPrintf(szbuf, strlen(szbuf), 0); + LOGV("%s", szbuf); } break; case 2: /*气压*/ @@ -2448,11 +2349,11 @@ void ShxyProtocolDataProcess( int commid) else weatherpntmsg[5].EuValue = fvalue*weatherpntmsg[5].AiParam.fFactor + weatherpntmsg[5].AiParam.EuValueDelta; weatherpntmsg[5].AiState = 1; - g_SelfTest.SensorsFault |= (0x10); - if ((gDisSunRain & 0x80) == 0x80) + //g_SelfTest.SensorsFault |= (0x10); + //if ((gDisSunRain & 0x80) == 0x80) { sprintf(szbuf, "气压:%0.3f ", fvalue); - DebugStringPrintf(szbuf, strlen(szbuf), 0); + LOGV("%s", szbuf); } break; case 3: /*湿度*/ @@ -2464,11 +2365,11 @@ void ShxyProtocolDataProcess( int commid) else weatherpntmsg[1].EuValue = fvalue*weatherpntmsg[1].AiParam.fFactor + weatherpntmsg[1].AiParam.EuValueDelta; weatherpntmsg[1].AiState = 1; - g_SelfTest.SensorsFault |= (0x02); - if ((gDisSunRain & 0x80) == 0x80) + //g_SelfTest.SensorsFault |= (0x02); + //if ((gDisSunRain & 0x80) == 0x80) { sprintf(szbuf, "湿度:%0.3f ", fvalue); - DebugStringPrintf(szbuf, strlen(szbuf), 1); + LOGV("%s", szbuf); } break; case 4: /*雨量*/ @@ -2484,15 +2385,15 @@ void ShxyProtocolDataProcess( int commid) else weatherpntmsg[2].EuValue = fvalue*weatherpntmsg[2].AiParam.fFactor + weatherpntmsg[2].AiParam.EuValueDelta; weatherpntmsg[2].AiState = 1; - g_SelfTest.SensorsFault |= (0x04); - if ((gDisSunRain & 0x10) == 0x10) + //g_SelfTest.SensorsFault |= (0x04); + //if ((gDisSunRain & 0x10) == 0x10) { //fwind = fvalue/1000*0.95; //if(fvalue/1000 > 25) // fwind -= 1.2; //sprintf(szbuf, "风速:%0.3f ", fwind); sprintf(szbuf, "风速:%0.3f ", fvalue/1000); - DebugStringPrintf(szbuf, strlen(szbuf), 0); + LOGV("%s", szbuf); } break; case 7: /*风向*/ @@ -2504,14 +2405,15 @@ void ShxyProtocolDataProcess( int commid) else weatherpntmsg[3].EuValue = fvalue*weatherpntmsg[3].AiParam.fFactor + weatherpntmsg[3].AiParam.EuValueDelta; weatherpntmsg[3].AiState = 1; - g_SelfTest.SensorsFault |= (0x08); - if ((gDisSunRain & 0x10) == 0x10) + //g_SelfTest.SensorsFault |= (0x08); + //if ((gDisSunRain & 0x10) == 0x10) { sprintf(szbuf, "风向:%0.3f ", fvalue/1000); - DebugStringPrintf(szbuf, strlen(szbuf), 1); + LOGV("%s", szbuf); } break; case 8: /*拉力*/ +#if 0 if(RESERVE1_PROTOCOL == pPortParam->ProtocolIdx) { leirallypntmsg[0].EuValue = fvalue*leirallypntmsg[0].AiParam.fFactor\ @@ -2526,39 +2428,42 @@ void ShxyProtocolDataProcess( int commid) } else { +#endif pPortParam->recvdatacnt++; if(pPortParam->recvdatacnt < 2) break; - g_SelfTest.SensorsFault |= (0x040<devaddr, fvalue/1000.0); - DebugStringPrintf(szbuf, strlen(szbuf), 1); + sprintf(szbuf, "地址%d拉力:%0.3fKg ", devparam[commid].devaddr, fvalue/1000.0); + LOGV("%s", szbuf); } // yizhonghu 20110629 - rallyd[aipnt][srdt.SectimesamplingCnt[2]] = (short)slantpntmsg[aipnt][0].EuValue; + //rallyd[aipnt][srdt.SectimesamplingCnt[2]] = (short)slantpntmsg[aipnt][0].EuValue; srdt.SectimesamplingCnt[2] += 1; - } + //} break; case 9: /*倾角传感器X轴倾角*/ break; case 10: /*倾角传感器Y轴倾角*/ break; +#if 0 case 11: /*测温球导线温度*/ + fcorvalue = WireTemperatureCorrection(fvalue/100, (WORD)pPortParam->devaddr); -#if 0 + wdiitemppntmsg[aipnt][0].EuValue = fvalue*wdiitemppntmsg[aipnt][0].AiParam.fFactor\ +wdiitemppntmsg[aipnt][0].AiParam.EuValueDelta; -#else +//#else wdiitemppntmsg[aipnt][0].EuValue = fcorvalue*100*wdiitemppntmsg[aipnt][0].AiParam.fFactor\ +wdiitemppntmsg[aipnt][0].AiParam.EuValueDelta; -#endif + wdiitemppntmsg[aipnt][0].AiState = 1; g_SelfTest.SensorsFault |= (0x100000); sprintf(szbuf, "地址%d导线温度:%0.3f ", pPortParam->devaddr, fcorvalue); @@ -2671,6 +2576,8 @@ void ShxyProtocolDataProcess( int commid) sprintf(szbuf, "C相超过10mA的脉冲频次:%0.3f ", fvalue); DebugStringPrintf(szbuf, strlen(szbuf), 1); break; +#endif + } } } diff --git a/app/src/main/cpp/SensorsProtocol.h b/app/src/main/cpp/SensorsProtocol.h index 0c1d820e..505f0226 100644 --- a/app/src/main/cpp/SensorsProtocol.h +++ b/app/src/main/cpp/SensorsProtocol.h @@ -94,6 +94,9 @@ typedef unsigned char BYTE; #define D_MOVE_LEFT 0x00042d00 /* 向左移动镜头(1 有效)*/ #define D_MOVE_RIGHT 0x00022d00 /* 向右移动镜头(1 有效)*/ +#define SPEED_DOME_CAMERA 0 /* 球机摄像机*/ +#define SERIAL_CAMERA 2 /* 串口摄像机a*/ + #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) /* 草绿色*/ #define LOGV(fmt, args...) __android_log_print(ANDROID_LOG_VERBOSE, "serial_port_comm", fmt, ##args)/* 白色*/ @@ -110,6 +113,15 @@ typedef struct char str[MAX_STRING_LEN]; }IOT_PARAM; +//SDS包类型结构 +typedef struct +{ + BYTE PortIdx; // 信息类型 + WORD MsgType; // 信息类型 + int MsgLen; // 信息长度 + u_char MsgData[RECVDATA_MAXLENTH]; +} RTUMSG; + typedef struct { //float fAiDead; // 数据变化死区(百分系数值,如:设置死区为5%,只需赋值5即可) @@ -221,7 +233,6 @@ typedef struct u_char IsGprs; /* GPRS网络是否注册*/ u_char IsHexToAt; /* 串口1是否使用At指令(0:使用At指令;1:使用16进制数据传输)*/ - module_type modtype; /* 切换到mod_mmi用户之前的用户名称*/ u_char CommMod; /* 通讯模式(0:自动切换通讯模式;1:手动强制使用光网通讯;2:手动强制使用GPRS通讯)*/ u_char sampling; /* 正在进行采样(0:没有进行采样;1:正在进行采样;)*/ @@ -254,7 +265,6 @@ typedef struct int FlagSensorsFault; /*标志字节位从低到高温度、湿度、风速、风向、 气压、导线测温、日照、雨量、摄像头、拉力、倾角*/ #endif - BYTE SameTypeDevNum[SENSORS_TYPE_NUM]; /* 相同类型数据传感器数量*/ int imagepacketnum; /* 串口摄像机拍照图片总包数*/ int historyimagenum[MAX_CHANNEL_NUM]; /* 球机保存的历史图片数量*/ #if 1 @@ -313,7 +323,7 @@ void Gm_CloseSerialPort(void); WORD GM_SerialComSend(const unsigned char * cSendBuf, unsigned long nSendLen, int commid); // 启动串口通讯 -void GM_StartSerialComm(BYTE compid); +void GM_StartSerialComm(void); // 启动使用串口拍照 void GM_StartSerialCameraPhoto(BYTE channel, int cmdidx); @@ -390,10 +400,10 @@ void MakeShxyProtocolPollCommand(int portno, BYTE cmdidx); // 上海欣影传感器协议数据处理 void ShxyProtocolDataProcess( int commid); // 控制关闭传感器电源 -void Gm_CtrlCloseSensorsPower(int devidx); +//void Gm_CtrlCloseSensorsPower(int devidx); // 检查传感器电源是否应该关闭或打开 //void Gm_CheckSensorsPower(void); -void Gm_SetSerialPortBaud(int commid, UART_baudrate Baudrate); +int Gm_SetSerialPortBaud(int commid); // 得到串口波特率 //T_baudrate Gm_GetSerialPortBaud(UART_baudrate Baudrate);