diff --git a/app/src/main/cpp/SensorsProtocol.cpp b/app/src/main/cpp/SensorsProtocol.cpp index da58ed3a..63297bb7 100644 --- a/app/src/main/cpp/SensorsProtocol.cpp +++ b/app/src/main/cpp/SensorsProtocol.cpp @@ -510,38 +510,38 @@ int serial_port_comm() static speed_t getBaudrate(unsigned int baudrate) { switch (baudrate) { - case 0: return B0; - case 50: return B50; - case 75: return B75; - case 110: return B110; - case 134: return B134; - case 150: return B150; - case 200: return B200; - case 300: return B300; - case 600: return B600; - case 1200: return B1200; - case 1800: return B1800; - case 2400: return B2400; - case 4800: return B4800; - case 9600: return B9600; - case 19200: return B19200; - case 38400: return B38400; - case 57600: return B57600; - case 115200: return B115200; - case 230400: return B230400; - case 460800: return B460800; - case 500000: return B500000; - case 576000: return B576000; - case 921600: return B921600; - case 1000000: return B1000000; - case 1152000: return B1152000; - case 1500000: return B1500000; - case 2000000: return B2000000; - case 2500000: return B2500000; - case 3000000: return B3000000; - case 3500000: return B3500000; - case 4000000: return B4000000; - default: return B9600; + case 0: return B0; + case 50: return B50; + case 75: return B75; + case 110: return B110; + case 134: return B134; + case 150: return B150; + case 200: return B200; + case 300: return B300; + case 600: return B600; + case 1200: return B1200; + case 1800: return B1800; + case 2400: return B2400; + case 4800: return B4800; + case 9600: return B9600; + case 19200: return B19200; + case 38400: return B38400; + case 57600: return B57600; + case 115200: return B115200; + case 230400: return B230400; + case 460800: return B460800; + case 500000: return B500000; + case 576000: return B576000; + case 921600: return B921600; + case 1000000: return B1000000; + case 1152000: return B1152000; + case 1500000: return B1500000; + case 2000000: return B2000000; + case 2500000: return B2500000; + case 3000000: return B3000000; + case 3500000: return B3500000; + case 4000000: return B4000000; + default: return B9600; } } @@ -706,10 +706,7 @@ char Gm_GetSensorsPowerState(int port) void BytestreamLOG(int commid, char* describe, u_char* buf, int len, char flag) { int i; - // char szbuf[4096]; - - char* szbuf = new char[4096]; - std::unique_ptr bufptr(szbuf); + char szbuf[4096]; memset(szbuf, 0, sizeof(szbuf)); if (NULL != describe) @@ -721,24 +718,24 @@ void BytestreamLOG(int commid, char* describe, u_char* buf, int len, char flag) SaveLogTofile(commid, szbuf); switch (flag) { - case 'E': - ALOGE("%s", szbuf); - break; - case 'I': - ALOGI("%s", szbuf); - break; - case 'D': - ALOGD("%s", szbuf); - break; - case 'V': - ALOGI("%s", szbuf); - break; - case 'W': - ALOGW("%s", szbuf); - break; - default: - ALOGI("%s", szbuf); - break; + case 'E': + ALOGE("%s", szbuf); + break; + case 'I': + ALOGI("%s", szbuf); + break; + case 'D': + ALOGD("%s", szbuf); + break; + case 'V': + ALOGI("%s", szbuf); + break; + case 'W': + ALOGW("%s", szbuf); + break; + default: + ALOGI("%s", szbuf); + break; } } @@ -746,8 +743,7 @@ void BytestreamLOG(int commid, char* describe, u_char* buf, int len, char flag) void Gm_OpenSerialPort(int devidx) { int fd = -1; - char* szbuf = new char[512]; - std::unique_ptr bufptr(szbuf); + char szbuf[512]; if ((devidx < 0) || (devidx >= MAX_SERIAL_DEV_NUM)) return; @@ -796,8 +792,7 @@ void Gm_CloseSerialPort() int GM_SerialComSend(unsigned char * cSendBuf, size_t nSendLen, int commid) { int i, len; - char* szbuf = new char[512]; - std::unique_ptr bufptr(szbuf); + char szbuf[512]; memset(szbuf, 0, sizeof(szbuf)); len = write(serialport[commid].fd, cSendBuf, (size_t)nSendLen);/* 向串囗发送字符串 */ @@ -1054,36 +1049,36 @@ void Gm_InitSerialComm(SENSOR_PARAM *sensorParam, char *filedir) memset(szbuf, 0, sizeof(szbuf)); switch (sensorParam[i].SensorsType) { - case 0: - sprintf(szbuf, "传感器%d没有接!", i + 1); - break; - case WEATHER_PROTOCOL: - sprintf(szbuf, "传感器%d接的是气象传感器!", i + 1); - break; - case SERIALCAMERA_PROTOCOL: - sprintf(szbuf, "传感器%d接的是串口摄像机!", i + 1); - break; - case PELCO_P_PROTOCOL: - sprintf(szbuf, "传感器%d接的是PELCO_P摄像机!", i + 1); - break; - case SLANT_PROTOCOL: - sprintf(szbuf, "传感器%d接的是倾角!", i + 1); - break; - case WIND_PROTOCOL: - sprintf(szbuf, "传感器%d接的是风速风向传感器", i + 1); - break; - case RALLY_PROTOCOL: - sprintf(szbuf, "传感器%d接的是拉力!", i + 1); - break; - case PELCO_D_PROTOCOL: - sprintf(szbuf, "传感器%d接的是PELCO_D摄像机!", i + 1); - break; - case RESERVE5_PROTOCOL: - sprintf(szbuf, "传感器%d接的是加密芯片", i + 1); - break; - default: - sprintf(szbuf, "传感器%d没有接!", i + 1); - break; + case 0: + sprintf(szbuf, "传感器%d没有接!", i + 1); + break; + case WEATHER_PROTOCOL: + sprintf(szbuf, "传感器%d接的是气象传感器!", i + 1); + break; + case SERIALCAMERA_PROTOCOL: + sprintf(szbuf, "传感器%d接的是串口摄像机!", i + 1); + break; + case PELCO_P_PROTOCOL: + sprintf(szbuf, "传感器%d接的是PELCO_P摄像机!", i + 1); + break; + case SLANT_PROTOCOL: + sprintf(szbuf, "传感器%d接的是倾角!", i + 1); + break; + case WIND_PROTOCOL: + sprintf(szbuf, "传感器%d接的是风速风向传感器", i + 1); + break; + case RALLY_PROTOCOL: + sprintf(szbuf, "传感器%d接的是拉力!", i + 1); + break; + case PELCO_D_PROTOCOL: + sprintf(szbuf, "传感器%d接的是PELCO_D摄像机!", i + 1); + break; + case RESERVE5_PROTOCOL: + sprintf(szbuf, "传感器%d接的是加密芯片", i + 1); + break; + default: + sprintf(szbuf, "传感器%d没有接!", i + 1); + break; } sprintf(szbuf, "%s 地址%d!;", szbuf, sensorParam[i].devaddr); @@ -1241,37 +1236,37 @@ void FindDevUseSerialCommNo() continue; switch (devparam[i].ProtocolIdx) { - case WEATHER_PROTOCOL: - case WIND_PROTOCOL: - //memset(devparam[i].pathname, 0, sizeof(devparam[i].pathname)); - /* 目前还不确定具体串口分配,暂时默认使用串口1*/ - //sprintf(devparam[i].pathname, "/dev/swk3"); - devparam[i].commid = 3; - break; - case SLANT_PROTOCOL: - //memset(devparam[i].pathname, 0, sizeof(devparam[i].pathname)); - /* 目前还不确定具体串口分配,暂时默认使用串口1*/ - //sprintf(devparam[i].pathname, "/dev/swk2"); - devparam[i].commid = 2; - break; - case RALLY_PROTOCOL: - //memset(devparam[i].pathname, 0, sizeof(devparam[i].pathname)); - /* 目前还不确定具体串口分配,暂时默认使用串口1*/ - //sprintf(devparam[i].pathname, "/dev/swk1"); - devparam[i].commid = 1; - break; - case PELCO_D_PROTOCOL: /* 摄像机协议*/ - case PELCO_P_PROTOCOL: /* 摄像机协议*/ - case SERIALCAMERA_PROTOCOL: /* 串口摄像机协议*/ - //memset(devparam[i].pathname, 0, sizeof(devparam[i].pathname)); - /* 目前还不确定//具体串口分配,暂时默认使用串口1*/ - //sprintf(devparam[i].pathname, "/dev/ttyS1"); - devparam[i].commid = 0; - srdt.camerauseserial = 0; - break; - default: - devparam[i].IsNoInsta = 0; - break; + case WEATHER_PROTOCOL: + case WIND_PROTOCOL: + //memset(devparam[i].pathname, 0, sizeof(devparam[i].pathname)); + /* 目前还不确定具体串口分配,暂时默认使用串口1*/ + //sprintf(devparam[i].pathname, "/dev/swk3"); + devparam[i].commid = 3; + break; + case SLANT_PROTOCOL: + //memset(devparam[i].pathname, 0, sizeof(devparam[i].pathname)); + /* 目前还不确定具体串口分配,暂时默认使用串口1*/ + //sprintf(devparam[i].pathname, "/dev/swk2"); + devparam[i].commid = 2; + break; + case RALLY_PROTOCOL: + //memset(devparam[i].pathname, 0, sizeof(devparam[i].pathname)); + /* 目前还不确定具体串口分配,暂时默认使用串口1*/ + //sprintf(devparam[i].pathname, "/dev/swk1"); + devparam[i].commid = 1; + break; + case PELCO_D_PROTOCOL: /* 摄像机协议*/ + case PELCO_P_PROTOCOL: /* 摄像机协议*/ + case SERIALCAMERA_PROTOCOL: /* 串口摄像机协议*/ + //memset(devparam[i].pathname, 0, sizeof(devparam[i].pathname)); + /* 目前还不确定//具体串口分配,暂时默认使用串口1*/ + //sprintf(devparam[i].pathname, "/dev/ttyS1"); + devparam[i].commid = 0; + srdt.camerauseserial = 0; + break; + default: + devparam[i].IsNoInsta = 0; + break; } } } @@ -1333,46 +1328,46 @@ void GM_StartSerialComm() memset(szbuf, 0, sizeof(szbuf)); switch (devparam[i].ProtocolIdx) { - case WEATHER_PROTOCOL: // 气象 - sprintf(szbuf, "气象"); - srdt.ms_dev[i].IsNeedSerial = 1; - srdt.ms_dev[i].FirstCmdTimeCnt = get_msec(); - srdt.ms_dev[i].recvdatacnt = 0; - for (j = 0; j < WEATHER_DATA_NUM; j++) - srdt.ms_dev[i].aiValue[j].AiState = SER_STARTSAMPLE; - break; - case RALLY_PROTOCOL: /* 拉力*/ - sprintf(szbuf, "拉力"); - srdt.ms_dev[i].IsNeedSerial = 1; - srdt.ms_dev[i].FirstCmdTimeCnt = get_msec(); - srdt.ms_dev[i].recvdatacnt = 0; - for (j = 0; j < RALLY_DATA_NUM; j++) - srdt.ms_dev[i].aiValue[j].AiState = SER_STARTSAMPLE; - break; - case WIND_PROTOCOL: /* 风速风向*/ - sprintf(szbuf, "风速风向"); - srdt.ms_dev[i].IsNeedSerial = 1; - srdt.ms_dev[i].FirstCmdTimeCnt = get_msec(); - for (j = 0; j < WEATHER_DATA_NUM; j++) - srdt.ms_dev[i].aiValue[j].AiState = SER_STARTSAMPLE; - break; - case SLANT_PROTOCOL: /* 倾角*/ - sprintf(szbuf, "倾角"); - srdt.ms_dev[i].IsNeedSerial = 1; - srdt.ms_dev[i].FirstCmdTimeCnt = get_msec(); - srdt.ms_dev[i].recvdatacnt = 0; - for (j = 0; j < SLANTANGLE_DATA_NUM; j++) - srdt.ms_dev[i].aiValue[j].AiState = SER_STARTSAMPLE; - break; - case PELCO_D_PROTOCOL: /* 摄像机协议*/ - case PELCO_P_PROTOCOL: /* 摄像机协议*/ - case SERIALCAMERA_PROTOCOL: /* 串口摄像机协议*/ - sprintf(szbuf, "摄像机"); - break; - default: - srdt.ms_dev[i].IsNeedSerial = 0; - sprintf(szbuf, "无效传感器"); - break; + case WEATHER_PROTOCOL: // 气象 + sprintf(szbuf, "气象"); + srdt.ms_dev[i].IsNeedSerial = 1; + srdt.ms_dev[i].FirstCmdTimeCnt = get_msec(); + srdt.ms_dev[i].recvdatacnt = 0; + for (j = 0; j < WEATHER_DATA_NUM; j++) + srdt.ms_dev[i].aiValue[j].AiState = SER_STARTSAMPLE; + break; + case RALLY_PROTOCOL: /* 拉力*/ + sprintf(szbuf, "拉力"); + srdt.ms_dev[i].IsNeedSerial = 1; + srdt.ms_dev[i].FirstCmdTimeCnt = get_msec(); + srdt.ms_dev[i].recvdatacnt = 0; + for (j = 0; j < RALLY_DATA_NUM; j++) + srdt.ms_dev[i].aiValue[j].AiState = SER_STARTSAMPLE; + break; + case WIND_PROTOCOL: /* 风速风向*/ + sprintf(szbuf, "风速风向"); + srdt.ms_dev[i].IsNeedSerial = 1; + srdt.ms_dev[i].FirstCmdTimeCnt = get_msec(); + for (j = 0; j < WEATHER_DATA_NUM; j++) + srdt.ms_dev[i].aiValue[j].AiState = SER_STARTSAMPLE; + break; + case SLANT_PROTOCOL: /* 倾角*/ + sprintf(szbuf, "倾角"); + srdt.ms_dev[i].IsNeedSerial = 1; + srdt.ms_dev[i].FirstCmdTimeCnt = get_msec(); + srdt.ms_dev[i].recvdatacnt = 0; + for (j = 0; j < SLANTANGLE_DATA_NUM; j++) + srdt.ms_dev[i].aiValue[j].AiState = SER_STARTSAMPLE; + break; + case PELCO_D_PROTOCOL: /* 摄像机协议*/ + case PELCO_P_PROTOCOL: /* 摄像机协议*/ + case SERIALCAMERA_PROTOCOL: /* 串口摄像机协议*/ + sprintf(szbuf, "摄像机"); + break; + default: + srdt.ms_dev[i].IsNeedSerial = 0; + sprintf(szbuf, "无效传感器"); + break; } // 测试查询传感器电源状态 #if 0 @@ -1480,44 +1475,44 @@ void GM_StartSerialCameraPhoto(uint8_t channel, int cmdidx) memset(szbuf, 0, sizeof(szbuf)); switch (devparam[i].ProtocolIdx) { - case SERIALCAMERA_PROTOCOL: /* 串口摄像机协议*/ - case PELCO_P_PROTOCOL: /* 摄像机协议*/ - case PELCO_D_PROTOCOL: /* 摄像机协议*/ - if ((1 > devparam[i].CameraChannel) || (devparam[i].CameraChannel > MAX_CHANNEL_NUM)) - { - srdt.ms_dev[i].IsNeedSerial = 0; - break; - } - if (channel == devparam[i].CameraChannel) - { - ; - } - else + case SERIALCAMERA_PROTOCOL: /* 串口摄像机协议*/ + case PELCO_P_PROTOCOL: /* 摄像机协议*/ + case PELCO_D_PROTOCOL: /* 摄像机协议*/ + if ((1 > devparam[i].CameraChannel) || (devparam[i].CameraChannel > MAX_CHANNEL_NUM)) + { + srdt.ms_dev[i].IsNeedSerial = 0; + break; + } + if (channel == devparam[i].CameraChannel) + { + ; + } + else + break; + if (0 == srdt.ms_dev[i].IsNeedSerial) + srdt.iLastGetPhotoNo = -1; + else + srdt.iLastGetPhotoNo = srdt.ms_dev[i].SerialCmdidx; + srdt.ms_dev[i].IsNeedSerial = 1; + if (0 == cmdidx) + srdt.ms_dev[i].image.state = SER_STARTSAMPLE; + if ((0 == cmdidx) && (srdt.presetno > 0)) + { + srdt.ms_dev[i].SerialCmdidx = 10017; + srdt.iLastGetPhotoNo = cmdidx; + } + else + srdt.ms_dev[i].SerialCmdidx = cmdidx; + srdt.ms_dev[i].FirstCmdTimeCnt = get_msec(); + srdt.sendphotocmdcnt = 0; + sprintf(szbuf, "摄像机"); + flag = 1; break; - if (0 == srdt.ms_dev[i].IsNeedSerial) - srdt.iLastGetPhotoNo = -1; - else - srdt.iLastGetPhotoNo = srdt.ms_dev[i].SerialCmdidx; - srdt.ms_dev[i].IsNeedSerial = 1; - if (0 == cmdidx) - srdt.ms_dev[i].image.state = SER_STARTSAMPLE; - if ((0 == cmdidx) && (srdt.presetno > 0)) - { - srdt.ms_dev[i].SerialCmdidx = 10017; - srdt.iLastGetPhotoNo = cmdidx; - } - else - srdt.ms_dev[i].SerialCmdidx = cmdidx; - srdt.ms_dev[i].FirstCmdTimeCnt = get_msec(); - srdt.sendphotocmdcnt = 0; - sprintf(szbuf, "摄像机"); - flag = 1; - break; - default: - if (1 == srdt.ms_dev[i].IsNeedSerial) + default: + if (1 == srdt.ms_dev[i].IsNeedSerial) + break; + srdt.ms_dev[i].IsNeedSerial = 0; break; - srdt.ms_dev[i].IsNeedSerial = 0; - break; } if (1 == srdt.ms_dev[i].IsNeedSerial) { @@ -1598,22 +1593,22 @@ void Gm_FindAllSensorsCommand() flag = -1; switch (devparam[curidx].ProtocolIdx) { - case WEATHER_PROTOCOL: /* 温湿度气压*/ - case RALLY_PROTOCOL: /* 拉力*/ - case WIND_PROTOCOL: /* 风速风向*/ - case SLANT_PROTOCOL: /* 倾角*/ - flag = FindNextShxyProtocolCommand(curidx); - break; - case RESERVE2_PROTOCOL: - break; - case RESERVE5_PROTOCOL: - break; - case PELCO_D_PROTOCOL: /* 摄像机协议*/ - case PELCO_P_PROTOCOL: /* 摄像机协议*/ - case SERIALCAMERA_PROTOCOL: /* 串口摄像机协议*/ - flag = FindNextCameraPhotoCommand(curidx); - break; - break; + case WEATHER_PROTOCOL: /* 温湿度气压*/ + case RALLY_PROTOCOL: /* 拉力*/ + case WIND_PROTOCOL: /* 风速风向*/ + case SLANT_PROTOCOL: /* 倾角*/ + flag = FindNextShxyProtocolCommand(curidx); + break; + case RESERVE2_PROTOCOL: + break; + case RESERVE5_PROTOCOL: + break; + case PELCO_D_PROTOCOL: /* 摄像机协议*/ + case PELCO_P_PROTOCOL: /* 摄像机协议*/ + case SERIALCAMERA_PROTOCOL: /* 串口摄像机协议*/ + flag = FindNextCameraPhotoCommand(curidx); + break; + break; } if (flag == -1) continue; @@ -1646,51 +1641,51 @@ void GM_IsCloseSensors() memset(buf, 0, sizeof(buf)); switch (devparam[i].ProtocolIdx) { - case WEATHER_PROTOCOL: /* 气象*/ - case RALLY_PROTOCOL: /* 拉力*/ - case WIND_PROTOCOL: /* 风速风向*/ - case SLANT_PROTOCOL: /* 倾角*/ - if ((lctime - srdt.ms_dev[i].FirstCmdTimeCnt > 50 * 1000) || (lctime - srdt.ms_dev[i].FirstCmdTimeCnt < 0)) - { - srdt.ms_dev[i].FirstCmdTimeCnt = lctime; - break; - } - if (lctime - srdt.ms_dev[i].FirstCmdTimeCnt > 15 * 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); - DebugLog(devparam[i].commid, buf, 'I'); - for (j = 0; j < MAX_DEV_VALUE_NUM; j++) + case WEATHER_PROTOCOL: /* 气象*/ + case RALLY_PROTOCOL: /* 拉力*/ + case WIND_PROTOCOL: /* 风速风向*/ + case SLANT_PROTOCOL: /* 倾角*/ + if ((lctime - srdt.ms_dev[i].FirstCmdTimeCnt > 50 * 1000) || (lctime - srdt.ms_dev[i].FirstCmdTimeCnt < 0)) { - if (SER_STARTSAMPLE == srdt.ms_dev[i].aiValue[j].AiState) - srdt.ms_dev[i].aiValue[j].AiState = SER_SAMPLEFAIL; - else if (SER_SAMPLE == srdt.ms_dev[i].aiValue[j].AiState) - srdt.ms_dev[i].aiValue[j].AiState = SAMPLINGSUCCESS; + srdt.ms_dev[i].FirstCmdTimeCnt = lctime; + break; } - for (j = 0; j < WEATHER_DATA_NUM; j++) + if (lctime - srdt.ms_dev[i].FirstCmdTimeCnt > 15 * 1000) { - if (SER_STARTSAMPLE == weatherpntmsg[j].AiState) - weatherpntmsg[j].AiState = SER_SAMPLEFAIL; - else if (SER_SAMPLE == weatherpntmsg[j].AiState) - weatherpntmsg[j].AiState = SAMPLINGSUCCESS; + 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); + DebugLog(devparam[i].commid, buf, 'I'); + for (j = 0; j < MAX_DEV_VALUE_NUM; j++) + { + if (SER_STARTSAMPLE == srdt.ms_dev[i].aiValue[j].AiState) + srdt.ms_dev[i].aiValue[j].AiState = SER_SAMPLEFAIL; + else if (SER_SAMPLE == srdt.ms_dev[i].aiValue[j].AiState) + srdt.ms_dev[i].aiValue[j].AiState = SAMPLINGSUCCESS; + } + for (j = 0; j < WEATHER_DATA_NUM; j++) + { + if (SER_STARTSAMPLE == weatherpntmsg[j].AiState) + weatherpntmsg[j].AiState = SER_SAMPLEFAIL; + else if (SER_SAMPLE == weatherpntmsg[j].AiState) + weatherpntmsg[j].AiState = SAMPLINGSUCCESS; + } } - } - break; - case PELCO_D_PROTOCOL: /* 摄像机类型*/ - case PELCO_P_PROTOCOL: /* 摄像机类型*/ - case SERIALCAMERA_PROTOCOL: /* 串口摄像机协议*/ - if (-1 == srdt.ms_dev[i].SerialCmdidx) - { - if ((SER_STARTSAMPLE == srdt.ms_dev[i].image.state) || (SER_SAMPLE == srdt.ms_dev[i].image.state)) - srdt.ms_dev[i].image.state = SER_SAMPLEFAIL; - else if (PHOTO_SAVE_SUCC == srdt.ms_dev[i].image.state) - srdt.ms_dev[i].image.state = SAMPLINGSUCCESS; - srdt.ms_dev[i].IsNeedSerial = 0; - sprintf(buf, "通道%d摄像机使用完毕!可以关闭摄像机电源!", devparam[i].CameraChannel); - DebugLog(devparam[i].commid, buf, 'I'); - } - break; + break; + case PELCO_D_PROTOCOL: /* 摄像机类型*/ + case PELCO_P_PROTOCOL: /* 摄像机类型*/ + case SERIALCAMERA_PROTOCOL: /* 串口摄像机协议*/ + if (-1 == srdt.ms_dev[i].SerialCmdidx) + { + if ((SER_STARTSAMPLE == srdt.ms_dev[i].image.state) || (SER_SAMPLE == srdt.ms_dev[i].image.state)) + srdt.ms_dev[i].image.state = SER_SAMPLEFAIL; + else if (PHOTO_SAVE_SUCC == srdt.ms_dev[i].image.state) + srdt.ms_dev[i].image.state = SAMPLINGSUCCESS; + srdt.ms_dev[i].IsNeedSerial = 0; + sprintf(buf, "通道%d摄像机使用完毕!可以关闭摄像机电源!", devparam[i].CameraChannel); + DebugLog(devparam[i].commid, buf, 'I'); + } + break; } } } @@ -1705,9 +1700,7 @@ void GM_IsCloseSensors() void GM_AllSerialComRecv() { int i, j, recvlen; - u_char* recvbuf = new u_char[RECVDATA_MAXLENTH]; - std::unique_ptr recvbufptr(recvbuf); - + u_char recvbuf[RECVDATA_MAXLENTH]; char buf[256]; for (j = 0; j < MAX_SERIAL_PORT_NUM; j++) @@ -1739,7 +1732,7 @@ void GM_AllSerialComRecv() int GM_CloseTimer() { int i, j, iretime; - char buf[32]; + char buf[256]; for (i = 0; i < MAX_SERIAL_DEV_NUM; i++) { @@ -1769,19 +1762,19 @@ void SerialDataProcess(int devidx, u_char *buf, int len) switch (devparam[devidx].ProtocolIdx) { - case WEATHER_PROTOCOL: /* 气象*/ - case RALLY_PROTOCOL: /* 拉力*/ - case WIND_PROTOCOL: /* 风速风向*/ - case SLANT_PROTOCOL: /* 倾角*/ - ShxyProtocolRecvData(devidx, buf, len); - break; - case RESERVE2_PROTOCOL: /* 意科电池电量读取协议*/ - break; - case PELCO_D_PROTOCOL: /* 摄像机协议*/ - case PELCO_P_PROTOCOL: /* 摄像机协议*/ - case SERIALCAMERA_PROTOCOL: /* 串口摄像机协议*/ - CameraRecvData(devidx, buf, len); - break; + case WEATHER_PROTOCOL: /* 气象*/ + case RALLY_PROTOCOL: /* 拉力*/ + case WIND_PROTOCOL: /* 风速风向*/ + case SLANT_PROTOCOL: /* 倾角*/ + ShxyProtocolRecvData(devidx, buf, len); + break; + case RESERVE2_PROTOCOL: /* 意科电池电量读取协议*/ + break; + case PELCO_D_PROTOCOL: /* 摄像机协议*/ + case PELCO_P_PROTOCOL: /* 摄像机协议*/ + case SERIALCAMERA_PROTOCOL: /* 串口摄像机协议*/ + CameraRecvData(devidx, buf, len); + break; } } @@ -1792,24 +1785,24 @@ void DebugLog(int commid, char *szbuf, char flag) SaveLogTofile(commid, szbuf); switch (flag) { - case 'E': - ALOGE("%s", szbuf); - break; - case 'I': - ALOGI("%s", szbuf); - break; - case 'D': - ALOGD("%s", szbuf); - break; - case 'V': - ALOGI("%s", szbuf); - break; - case 'W': - ALOGW("%s", szbuf); - break; - default: - ALOGI("%s", szbuf); - break; + case 'E': + ALOGE("%s", szbuf); + break; + case 'I': + ALOGI("%s", szbuf); + break; + case 'D': + ALOGD("%s", szbuf); + break; + case 'V': + ALOGI("%s", szbuf); + break; + case 'W': + ALOGW("%s", szbuf); + break; + default: + ALOGI("%s", szbuf); + break; } } @@ -1817,17 +1810,7 @@ int SaveLogTofile(int commid, char *szbuf) { int status; time_t now; - - // char filename[512], filedir[512], buf[128]; - - char* filename = new char[512]; - char* filedir = new char[512]; - char* buf = new char[128]; - - std::unique_ptr fnptr(filename); - std::unique_ptr fdptr(filedir); - std::unique_ptr bufptr(buf); - + char filename[512], filedir[512], buf[128]; FILE *fp = NULL; struct tm t0; struct timeval tv; @@ -1873,7 +1856,7 @@ int SaveImageDataTofile(int devno) u_char *image = NULL, *tempphoto = NULL; int i, status; size_t len; - char szbuf[32]; + char filename[512]/*, filedir[512]*/, szbuf[128]; FILE *fp = NULL; SERIAL_DEV_DEF *pPortParam; @@ -1941,78 +1924,78 @@ void CameraRecvData(int devno, u_char *buf, int len) { switch (pPortParam->m_iRevStatus) { - case 0: // 0x68 - pPortParam->m_iRecvLen = 0; - pPortParam->m_au8RecvBuf[pPortParam->m_iRecvLen++] = buf[i]; - if (0x68 == buf[i]) + case 0: // 0x68 + pPortParam->m_iRecvLen = 0; + pPortParam->m_au8RecvBuf[pPortParam->m_iRecvLen++] = buf[i]; + if (0x68 == buf[i]) + pPortParam->m_iRevStatus++; + else + pPortParam->m_iRevStatus = 18; + break; + case 1: // len1 + pPortParam->m_au8RecvBuf[pPortParam->m_iRecvLen++] = buf[i]; pPortParam->m_iRevStatus++; - else - pPortParam->m_iRevStatus = 18; - break; - case 1: // len1 - pPortParam->m_au8RecvBuf[pPortParam->m_iRecvLen++] = buf[i]; - pPortParam->m_iRevStatus++; - break; - case 2: // len2 - pPortParam->m_au8RecvBuf[pPortParam->m_iRecvLen++] = buf[i]; - pPortParam->m_iRevStatus++; - pPortParam->m_iNeedRevLength = pPortParam->m_au8RecvBuf[pPortParam->m_iRecvLen - 2] * 256 + buf[i] + 5; - break; - case 3: // 0x68 - pPortParam->m_au8RecvBuf[pPortParam->m_iRecvLen++] = buf[i]; - pPortParam->m_iNeedRevLength--; - if (0x68 == buf[i]) + break; + case 2: // len2 + pPortParam->m_au8RecvBuf[pPortParam->m_iRecvLen++] = buf[i]; pPortParam->m_iRevStatus++; - else - pPortParam->m_iRevStatus = 18; - break; - case 4: // 正确接收数据 - pPortParam->m_iNeedRevLength--; - pPortParam->m_au8RecvBuf[pPortParam->m_iRecvLen++] = buf[i]; - if (pPortParam->m_iNeedRevLength > 0) + pPortParam->m_iNeedRevLength = pPortParam->m_au8RecvBuf[pPortParam->m_iRecvLen - 2] * 256 + buf[i] + 5; break; - if (buf[i] != 0x16) - { - pPortParam->m_iRevStatus = 18; + case 3: // 0x68 + pPortParam->m_au8RecvBuf[pPortParam->m_iRecvLen++] = buf[i]; + pPortParam->m_iNeedRevLength--; + if (0x68 == buf[i]) + pPortParam->m_iRevStatus++; + else + pPortParam->m_iRevStatus = 18; break; - } + case 4: // 正确接收数据 + pPortParam->m_iNeedRevLength--; + pPortParam->m_au8RecvBuf[pPortParam->m_iRecvLen++] = buf[i]; + if (pPortParam->m_iNeedRevLength > 0) + break; + if (buf[i] != 0x16) + { + pPortParam->m_iRevStatus = 18; + break; + } - if (pPortParam->m_au8RecvBuf[pPortParam->m_iRecvLen - 2] == - CalLpc(&pPortParam->m_au8RecvBuf[4], pPortParam->m_iRecvLen - 6)) - { - CameraPhotoPortDataProcess(devno); - pPortParam->m_iRevStatus = 0; - pPortParam->RevCmdFlag = 1; - } - else - { - pPortParam->m_iRevStatus = 0; - } - pPortParam->m_iRecvLen = 0; - break; - case 255:// 错误接收数据 - default: - if (buf[i] == 0x68) - { - pPortParam->m_iRevStatus = 1; - pPortParam->m_iRecvLen = 1; - pPortParam->m_au8RecvBuf[0] = buf[i]; - } - else if (buf[i] == 0x16) - { - pPortParam->m_au8RecvBuf[pPortParam->m_iRecvLen++] = buf[i]; - pPortParam->m_iRevStatus = 0; + if (pPortParam->m_au8RecvBuf[pPortParam->m_iRecvLen - 2] == + CalLpc(&pPortParam->m_au8RecvBuf[4], pPortParam->m_iRecvLen - 6)) + { + CameraPhotoPortDataProcess(devno); + pPortParam->m_iRevStatus = 0; + pPortParam->RevCmdFlag = 1; + } + else + { + pPortParam->m_iRevStatus = 0; + } pPortParam->m_iRecvLen = 0; - } - else - { - pPortParam->m_au8RecvBuf[pPortParam->m_iRecvLen++] = buf[i]; - if (pPortParam->m_iRecvLen > 200) + break; + case 255:// 错误接收数据 + default: + if (buf[i] == 0x68) + { + pPortParam->m_iRevStatus = 1; + pPortParam->m_iRecvLen = 1; + pPortParam->m_au8RecvBuf[0] = buf[i]; + } + else if (buf[i] == 0x16) { + pPortParam->m_au8RecvBuf[pPortParam->m_iRecvLen++] = buf[i]; + pPortParam->m_iRevStatus = 0; pPortParam->m_iRecvLen = 0; } - } - break; + else + { + pPortParam->m_au8RecvBuf[pPortParam->m_iRecvLen++] = buf[i]; + if (pPortParam->m_iRecvLen > 200) + { + pPortParam->m_iRecvLen = 0; + } + } + break; } } } @@ -2047,173 +2030,173 @@ void CameraPhotoPortDataProcess(int devno) memset(szbuf, 0, sizeof(szbuf)); switch (cmdidx) { - case 0x10: /* 拍照应答*/ - if (0xFF == rtumsg.MsgData[6]) - { - srdt.RephotographCnt++; - if (srdt.RephotographCnt > 2) + case 0x10: /* 拍照应答*/ + if (0xFF == rtumsg.MsgData[6]) { - pPortParam->SerialCmdidx = -1; - sprintf(szbuf, "因摄像机重拍%d次均未成功!结束拍照!", srdt.RephotographCnt); - DebugLog(devparam[devno].commid, szbuf, 'E'); + srdt.RephotographCnt++; + if (srdt.RephotographCnt > 2) + { + pPortParam->SerialCmdidx = -1; + sprintf(szbuf, "因摄像机重拍%d次均未成功!结束拍照!", srdt.RephotographCnt); + DebugLog(devparam[devno].commid, szbuf, 'E'); + } + break; } + i = 6; + memset(&pPortParam->image, 0, sizeof(pPortParam->image)); + iphototime = rtumsg.MsgData[i + 3] + (rtumsg.MsgData[i + 2] << 8) + (rtumsg.MsgData[i + 1] << 16) + (rtumsg.MsgData[i] << 24); + srdt.photographtime = iphototime; + pPortParam->image.phototime = iphototime; + i = 10; + 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); + pPortParam->image.imagelen = img_file_size; + pPortParam->image.imagenum = packetnum; + srdt.imagepacketnum = packetnum; + srdt.historyimagenum[devparam[devno].CameraChannel - 1] = rtumsg.MsgData[i + 7] + (rtumsg.MsgData[i + 6] << 8); + sprintf(szbuf, "有%d张历史图片!", srdt.historyimagenum[devparam[devno].CameraChannel - 1]); + DebugLog(devparam[devno].commid, szbuf, 'V'); + presetno = (int)rtumsg.MsgData[i + 8]; + pPortParam->image.presetno = presetno; + pPortParam->image.state = SER_SAMPLE; + curserial->RevCmdFlag = 1; + pPortParam->SerialCmdidx = 1; + srdt.sendphotocmdcnt = 0; break; - } - i = 6; - memset(&pPortParam->image, 0, sizeof(pPortParam->image)); - iphototime = rtumsg.MsgData[i + 3] + (rtumsg.MsgData[i + 2] << 8) + (rtumsg.MsgData[i + 1] << 16) + (rtumsg.MsgData[i] << 24); - srdt.photographtime = iphototime; - pPortParam->image.phototime = iphototime; - i = 10; - 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); - pPortParam->image.imagelen = img_file_size; - pPortParam->image.imagenum = packetnum; - srdt.imagepacketnum = packetnum; - srdt.historyimagenum[devparam[devno].CameraChannel - 1] = rtumsg.MsgData[i + 7] + (rtumsg.MsgData[i + 6] << 8); - sprintf(szbuf, "有%d张历史图片!", srdt.historyimagenum[devparam[devno].CameraChannel - 1]); - DebugLog(devparam[devno].commid, szbuf, 'V'); - presetno = (int)rtumsg.MsgData[i + 8]; - pPortParam->image.presetno = presetno; - pPortParam->image.state = SER_SAMPLE; - curserial->RevCmdFlag = 1; - pPortParam->SerialCmdidx = 1; - srdt.sendphotocmdcnt = 0; - break; - case 0x11: /* 图片数据包*/ - i = 6; - iNo = rtumsg.MsgData[i + 1] + rtumsg.MsgData[i] * 256; - packsize = rtumsg.MsgData[i + 3] + rtumsg.MsgData[i + 2] * 256; - memmove(&pPortParam->image.buf[iNo - 1], &rtumsg.MsgData[i + 4], packsize); - pPortParam->image.ilen[iNo - 1] = packsize; - sprintf(szbuf, "收到第%d(总%d包)包长=%d", iNo, srdt.imagepacketnum, packsize); - DebugLog(devparam[devno].commid, szbuf, 'V'); - curserial->RevCmdFlag = 1; - pPortParam->FirstCmdTimeCnt = get_msec(); - if ((iNo == pPortParam->SerialCmdidx) && (0xFF > rtumsg.MsgData[i + 2])) - { - if (iNo == srdt.imagepacketnum) - { /* 检查是否有漏包*/ - for (pidx = 0; pidx < srdt.imagepacketnum; pidx++) + case 0x11: /* 图片数据包*/ + i = 6; + iNo = rtumsg.MsgData[i + 1] + rtumsg.MsgData[i] * 256; + packsize = rtumsg.MsgData[i + 3] + rtumsg.MsgData[i + 2] * 256; + memmove(&pPortParam->image.buf[iNo - 1], &rtumsg.MsgData[i + 4], packsize); + pPortParam->image.ilen[iNo - 1] = packsize; + sprintf(szbuf, "收到第%d(总%d包)包长=%d", iNo, srdt.imagepacketnum, packsize); + DebugLog(devparam[devno].commid, szbuf, 'V'); + curserial->RevCmdFlag = 1; + pPortParam->FirstCmdTimeCnt = get_msec(); + if ((iNo == pPortParam->SerialCmdidx) && (0xFF > rtumsg.MsgData[i + 2])) + { + if (iNo == srdt.imagepacketnum) + { /* 检查是否有漏包*/ + for (pidx = 0; pidx < srdt.imagepacketnum; pidx++) + { + if (pPortParam->image.ilen[pidx] < 1) + break; + } + if (pidx < srdt.imagepacketnum) + { + iNo = pidx; + recvend = 0; + } + else + { + if ((1 == SaveImageDataTofile(devno)) && (SER_SAMPLE == pPortParam->image.state)) + pPortParam->image.state = PHOTO_SAVE_SUCC; + recvend = 1; + } + } + else + recvend = 0; + + if (packsize > MAX_PHOTO_FRAME_LEN) + recvend = 0xFF; + + if (1 == recvend) { - if (pPortParam->image.ilen[pidx] < 1) - break; + pPortParam->SerialCmdidx = 10002;/* 图片读取完成*/ + //pPortParam->image.lastlen = packsize; } - if (pidx < srdt.imagepacketnum) + else if (0xFF == recvend) { - iNo = pidx; - recvend = 0; + pPortParam->SerialCmdidx = -1; } else { - if ((1 == SaveImageDataTofile(devno)) && (SER_SAMPLE == pPortParam->image.state)) - pPortParam->image.state = PHOTO_SAVE_SUCC; - recvend = 1; + if ((iNo > srdt.imagepacketnum) || (0 >= srdt.imagepacketnum)) + { + pPortParam->SerialCmdidx = -1; + } + else + pPortParam->SerialCmdidx = iNo + 1; } + srdt.errorPhotoNoCnt = 0; + break; } - else - recvend = 0; - - if (packsize > MAX_PHOTO_FRAME_LEN) - recvend = 0xFF; - - if (1 == recvend) - { - pPortParam->SerialCmdidx = 10002;/* 图片读取完成*/ - //pPortParam->image.lastlen = packsize; - } - else if (0xFF == recvend) - { - pPortParam->SerialCmdidx = -1; - } - else + srdt.errorPhotoNoCnt++; + sprintf(szbuf, "问询第%d包图片摄像机应答第%d包,连续错误%d次!", + pPortParam->SerialCmdidx, iNo, srdt.errorPhotoNoCnt); + DebugLog(devparam[devno].commid, szbuf, 'E'); + if (srdt.errorPhotoNoCnt > 5) { - if ((iNo > srdt.imagepacketnum) || (0 >= srdt.imagepacketnum)) + pPortParam->SerialCmdidx = 0; + srdt.RephotographCnt++; + if (srdt.RephotographCnt > 2) { pPortParam->SerialCmdidx = -1; + sprintf(szbuf, "因摄像机重拍%d次均未成功!结束拍照!", srdt.RephotographCnt); + DebugLog(devparam[devno].commid, szbuf, 'E'); } - else - pPortParam->SerialCmdidx = iNo + 1; } - srdt.errorPhotoNoCnt = 0; break; - } - srdt.errorPhotoNoCnt++; - sprintf(szbuf, "问询第%d包图片摄像机应答第%d包,连续错误%d次!", - pPortParam->SerialCmdidx, iNo, srdt.errorPhotoNoCnt); - DebugLog(devparam[devno].commid, szbuf, 'E'); - if (srdt.errorPhotoNoCnt > 5) - { - pPortParam->SerialCmdidx = 0; - srdt.RephotographCnt++; - if (srdt.RephotographCnt > 2) + case 0x03: + sprintf(szbuf, "设置波特率%d成功", devparam[devno].baudrate); + DebugLog(devparam[devno].commid, szbuf, 'D'); + pPortParam->SerialCmdidx = srdt.iLastGetPhotoNo; + srdt.iLastGetPhotoNo = -1; + curserial->RevCmdFlag = 1; + pPortParam->FirstCmdTimeCnt = get_msec(); + break; + case 0x15: + if (0xFF == rtumsg.MsgData[6]) { pPortParam->SerialCmdidx = -1; - sprintf(szbuf, "因摄像机重拍%d次均未成功!结束拍照!", srdt.RephotographCnt); - DebugLog(devparam[devno].commid, szbuf, 'E'); + sprintf(szbuf, "没有历史图片!结束读取图片!"); + DebugLog(devparam[devno].commid, szbuf, 'I'); + break; } - } - break; - case 0x03: - sprintf(szbuf, "设置波特率%d成功", devparam[devno].baudrate); - DebugLog(devparam[devno].commid, szbuf, 'D'); - pPortParam->SerialCmdidx = srdt.iLastGetPhotoNo; - srdt.iLastGetPhotoNo = -1; - curserial->RevCmdFlag = 1; - pPortParam->FirstCmdTimeCnt = get_msec(); - break; - case 0x15: - if (0xFF == rtumsg.MsgData[6]) - { - pPortParam->SerialCmdidx = -1; - sprintf(szbuf, "没有历史图片!结束读取图片!"); + i = 6; + iphototime = rtumsg.MsgData[i + 3] + (rtumsg.MsgData[i + 2] << 8) + (rtumsg.MsgData[i + 1] << 16) + (rtumsg.MsgData[i] << 24); + srdt.photographtime = iphototime; + pPortParam->image.phototime = iphototime; + i = 10; + 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); + pPortParam->image.imagelen = img_file_size; + pPortParam->image.imagenum = packetnum; + srdt.imagepacketnum = packetnum; + srdt.historyimagenum[devparam[devno].CameraChannel - 1] = rtumsg.MsgData[i + 7] + (rtumsg.MsgData[i + 6] << 8); + presetno = rtumsg.MsgData[i + 8]; + pPortParam->image.presetno = presetno; + sprintf(szbuf, "读取历史图片,还有%d张历史图片!", srdt.historyimagenum[devparam[devno].CameraChannel - 1]); DebugLog(devparam[devno].commid, szbuf, 'I'); + curserial->RevCmdFlag = 1; + pPortParam->SerialCmdidx = 1; + srdt.sendphotocmdcnt = 0; break; - } - i = 6; - iphototime = rtumsg.MsgData[i + 3] + (rtumsg.MsgData[i + 2] << 8) + (rtumsg.MsgData[i + 1] << 16) + (rtumsg.MsgData[i] << 24); - srdt.photographtime = iphototime; - pPortParam->image.phototime = iphototime; - i = 10; - 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); - pPortParam->image.imagelen = img_file_size; - pPortParam->image.imagenum = packetnum; - srdt.imagepacketnum = packetnum; - srdt.historyimagenum[devparam[devno].CameraChannel - 1] = rtumsg.MsgData[i + 7] + (rtumsg.MsgData[i + 6] << 8); - presetno = rtumsg.MsgData[i + 8]; - pPortParam->image.presetno = presetno; - sprintf(szbuf, "读取历史图片,还有%d张历史图片!", srdt.historyimagenum[devparam[devno].CameraChannel - 1]); - DebugLog(devparam[devno].commid, szbuf, 'I'); - curserial->RevCmdFlag = 1; - pPortParam->SerialCmdidx = 1; - srdt.sendphotocmdcnt = 0; - break; - case 0x16: - if (0xFF == rtumsg.MsgData[10]) - { - pPortParam->SerialCmdidx = -1; - sprintf(szbuf, "摄像机图片保存失败!"); - DebugLog(devparam[devno].commid, szbuf, 'E'); - } - pPortParam->SerialCmdidx = -1; - if (0 == rtumsg.MsgData[10]) - { - if (0 == srdt.historyimagenum[devparam[devno].CameraChannel - 1]) + case 0x16: + if (0xFF == rtumsg.MsgData[10]) { - ; + pPortParam->SerialCmdidx = -1; + sprintf(szbuf, "摄像机图片保存失败!"); + DebugLog(devparam[devno].commid, szbuf, 'E'); } - else + pPortParam->SerialCmdidx = -1; + if (0 == rtumsg.MsgData[10]) { - pPortParam->SerialCmdidx = 10003;/* 暂时不实现*/ + if (0 == srdt.historyimagenum[devparam[devno].CameraChannel - 1]) + { + ; + } + else + { + pPortParam->SerialCmdidx = 10003;/* 暂时不实现*/ + } } - } - pPortParam->FirstCmdTimeCnt = get_msec(); - curserial->RevCmdFlag = 1; - break; - default: - curserial->RevCmdFlag = 1; - break; + pPortParam->FirstCmdTimeCnt = get_msec(); + curserial->RevCmdFlag = 1; + break; + default: + curserial->RevCmdFlag = 1; + break; } } @@ -2374,7 +2357,7 @@ int FindNextCameraPhotoCommand(int devidx) 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; + // return -1; if (-1 == srdt.ms_dev[devidx].SerialCmdidx)/* 下发拍照指令*/ return -1; channel = devparam[devidx].CameraChannel; @@ -2393,216 +2376,216 @@ int FindNextCameraPhotoCommand(int devidx) } switch (cmdno) { - case 0:/* 下发拍照指令*/ - if (lcurtime - srdt.ms_dev[devidx].FirstCmdTimeCnt < 3800) - return -1; - if ((lcurtime - srdt.ms_dev[devidx].FirstCmdTimeCnt > 3 * 35 * 1000) || (lcurtime - srdt.ms_dev[devidx].FirstCmdTimeCnt < 0)) - { - srdt.ms_dev[devidx].FirstCmdTimeCnt = lcurtime; - return -1; - } + case 0:/* 下发拍照指令*/ + if (lcurtime - srdt.ms_dev[devidx].FirstCmdTimeCnt < 3800) + return -1; + if ((lcurtime - srdt.ms_dev[devidx].FirstCmdTimeCnt > 3 * 35 * 1000) || (lcurtime - srdt.ms_dev[devidx].FirstCmdTimeCnt < 0)) + { + srdt.ms_dev[devidx].FirstCmdTimeCnt = lcurtime; + return -1; + } - if (lcurtime - srdt.ms_dev[devidx].FirstCmdTimeCnt > 35 * 1000) - { - srdt.ms_dev[devidx].SerialCmdidx = -1; - sprintf(szbuf, "串口摄像机未接或故障!结束拍照!"); + if (lcurtime - srdt.ms_dev[devidx].FirstCmdTimeCnt > 35 * 1000) + { + srdt.ms_dev[devidx].SerialCmdidx = -1; + sprintf(szbuf, "串口摄像机未接或故障!结束拍照!"); + DebugLog(devparam[devidx].commid, szbuf, 'I'); + return -1; + } + memset(szbuf, 0, sizeof(szbuf)); + sprintf(szbuf, "time=%lldms", lcurtime - srdt.ms_dev[devidx].FirstCmdTimeCnt); DebugLog(devparam[devidx].commid, szbuf, 'I'); - return -1; - } - memset(szbuf, 0, sizeof(szbuf)); - sprintf(szbuf, "time=%lldms", lcurtime - srdt.ms_dev[devidx].FirstCmdTimeCnt); - DebugLog(devparam[devidx].commid, szbuf, 'I'); - packetsize = (uint16_t)MAX_PHOTO_FRAME_LEN; - srdt.sendphotocmdcnt++; - srdt.imagepacketnum = 0; - srdt.errorPhotoNoCnt = 0; - cmdidx = 0x10; - imagesize = srdt.bImageSize; - break; - - case 10000: /* 下发设置串口波特率命令*/ - switch (devparam[devidx].baudrate) - { - case B9600: - imagesize = 0x07; + packetsize = (uint16_t)MAX_PHOTO_FRAME_LEN; + srdt.sendphotocmdcnt++; + srdt.imagepacketnum = 0; + srdt.errorPhotoNoCnt = 0; + cmdidx = 0x10; + imagesize = srdt.bImageSize; + break; + + case 10000: /* 下发设置串口波特率命令*/ + switch (devparam[devidx].baudrate) + { + case B9600: + imagesize = 0x07; + break; + case B19200: + imagesize = 0x08; + break; + case B38400: + imagesize = 0x09; + break; + default: + sprintf(szbuf, "设置串口摄像机参数时,配置参数错误!退出设置!"); + DebugLog(devparam[devidx].commid, szbuf, 'I'); + srdt.ms_dev[devidx].SerialCmdidx = srdt.iLastGetPhotoNo; + srdt.iLastGetPhotoNo = -1; + return -1; + } + + if (lcurtime - srdt.ms_dev[devidx].FirstCmdTimeCnt > 15 * 1000) + { + srdt.ms_dev[devidx].SerialCmdidx = -1; + sprintf(szbuf, "设置串口摄像机参数时,15秒未收到摄像机应答!退出设置!"); + DebugLog(devparam[devidx].commid, szbuf, 'I'); + return -1; + } + cmdidx = 0x03; + packetsize = 0xFFFF; break; - case B19200: - imagesize = 0x08; + + case 10001: /* 通知摄像机图片读取完成或存储(16H)*/ + case 10002: + cmdidx = 0x16; + if (10001 == cmdno) + packetsize = 1; + else + packetsize = 0; + imagesize = srdt.photographtime; /* 需要保存或删除的图片拍摄时间*/ break; - case B38400: - imagesize = 0x09; + + case 10003: /* 读取历史图片(15H)*/ + cmdidx = 0x15; + packetsize = (uint16_t)MAX_PHOTO_FRAME_LEN; break; - default: - sprintf(szbuf, "设置串口摄像机参数时,配置参数错误!退出设置!"); - DebugLog(devparam[devidx].commid, szbuf, 'I'); + + case 10005: /* 关闭功能*/ + //Gm_CtrlPtzCmd(1, P_MOVE_LEFT); + //sleep(2); + Gm_CtrlPtzCmd(channel, Cmd_Cancel); + usleep(100000); srdt.ms_dev[devidx].SerialCmdidx = srdt.iLastGetPhotoNo; srdt.iLastGetPhotoNo = -1; - return -1; - } - - if (lcurtime - srdt.ms_dev[devidx].FirstCmdTimeCnt > 15 * 1000) - { - srdt.ms_dev[devidx].SerialCmdidx = -1; - sprintf(szbuf, "设置串口摄像机参数时,15秒未收到摄像机应答!退出设置!"); - DebugLog(devparam[devidx].commid, szbuf, 'I'); - return -1; - } - cmdidx = 0x03; - packetsize = 0xFFFF; - break; - - case 10001: /* 通知摄像机图片读取完成或存储(16H)*/ - case 10002: - cmdidx = 0x16; - if (10001 == cmdno) - packetsize = 1; - else - packetsize = 0; - imagesize = srdt.photographtime; /* 需要保存或删除的图片拍摄时间*/ - break; - - case 10003: /* 读取历史图片(15H)*/ - cmdidx = 0x15; - packetsize = (uint16_t)MAX_PHOTO_FRAME_LEN; - break; - - case 10005: /* 关闭功能*/ - //Gm_CtrlPtzCmd(1, P_MOVE_LEFT); - //sleep(2); - Gm_CtrlPtzCmd(channel, Cmd_Cancel); - usleep(100000); - srdt.ms_dev[devidx].SerialCmdidx = srdt.iLastGetPhotoNo; - srdt.iLastGetPhotoNo = -1; - //sleep(20); - return 1; - case 10006: /* 自动扫描功能控制(1/0 打开/关闭该功能)*/ - Gm_CtrlPtzCmd(channel, P_Auto_Scan); - usleep(100000); - srdt.ms_dev[devidx].SerialCmdidx = srdt.iLastGetPhotoNo; - srdt.iLastGetPhotoNo = -1; - return 1; - case 10007: /* 光圈缩小(1 有效)*/ - Gm_CtrlPtzCmd(channel, P_IRIS_CLOSE); - usleep(100000); - srdt.ms_dev[devidx].SerialCmdidx = srdt.iLastGetPhotoNo; - srdt.iLastGetPhotoNo = -1; - return 1; - case 10008: /* 光圈放大(1 有效)*/ - Gm_CtrlPtzCmd(channel, P_IRIS_OPEN); - usleep(100000); - srdt.ms_dev[devidx].SerialCmdidx = srdt.iLastGetPhotoNo; - srdt.iLastGetPhotoNo = -1; - return 1; - case 10009: /* 近距离聚焦(1 有效)*/ - Gm_CtrlPtzCmd(channel, P_FOCUS_NEAR); - usleep(100000); - Gm_CtrlPtzCmd(channel, Cmd_Cancel); - usleep(100000); - srdt.ms_dev[devidx].SerialCmdidx = srdt.iLastGetPhotoNo; - srdt.iLastGetPhotoNo = -1; - return 1; - case 10010: /* 远距离聚焦(1 有效)*/ - Gm_CtrlPtzCmd(channel, P_FOCUS_FAR); - usleep(100000); - Gm_CtrlPtzCmd(channel, Cmd_Cancel); - usleep(100000); - srdt.ms_dev[devidx].SerialCmdidx = srdt.iLastGetPhotoNo; - srdt.iLastGetPhotoNo = -1; - return 1; - case 10011: /* 远离物体(1 有效)*/ - Gm_CtrlPtzCmd(channel, P_ZOOM_WIDE); - usleep(100000); - Gm_CtrlPtzCmd(channel, Cmd_Cancel); - usleep(100000); - srdt.ms_dev[devidx].SerialCmdidx = srdt.iLastGetPhotoNo; - srdt.iLastGetPhotoNo = -1; - return 1; - case 10012: /* 接近物体(1 有效)*/ - Gm_CtrlPtzCmd(channel, P_ZOOM_TELE); - usleep(100000); - Gm_CtrlPtzCmd(channel, Cmd_Cancel); - usleep(100000); - srdt.ms_dev[devidx].SerialCmdidx = srdt.iLastGetPhotoNo; - srdt.iLastGetPhotoNo = -1; - return 1; - case 10013: /* 向下移动镜头(1 有效)*/ - Gm_CtrlPtzCmd(channel, P_MOVE_DOWN); - sleep(1); - Gm_CtrlPtzCmd(channel, Cmd_Cancel); - usleep(100000); - srdt.ms_dev[devidx].SerialCmdidx = srdt.iLastGetPhotoNo; - srdt.iLastGetPhotoNo = -1; - return 1; - case 10014: /* 向上移动镜头(1 有效)*/ - Gm_CtrlPtzCmd(channel, P_MOVE_UP); - sleep(1); - Gm_CtrlPtzCmd(channel, Cmd_Cancel); - usleep(100000); - srdt.ms_dev[devidx].SerialCmdidx = srdt.iLastGetPhotoNo; - srdt.iLastGetPhotoNo = -1; - return 1; - case 10015: /* 向左移动镜头(1 有效)*/ - Gm_CtrlPtzCmd(channel, P_MOVE_LEFT); - sleep(1); - Gm_CtrlPtzCmd(channel, Cmd_Cancel); - usleep(100000); - srdt.ms_dev[devidx].SerialCmdidx = srdt.iLastGetPhotoNo; - srdt.iLastGetPhotoNo = -1; - return 1; - case 10016: /* 向右移动镜头(1 有效)*/ - Gm_CtrlPtzCmd(channel, P_MOVE_RIGHT); - sleep(1); - Gm_CtrlPtzCmd(channel, Cmd_Cancel); - usleep(100000); - srdt.ms_dev[devidx].SerialCmdidx = srdt.iLastGetPhotoNo; - srdt.iLastGetPhotoNo = -1; - return 1; - case 10017: /* 调用预置点*/ - //srdt.presetno = 2; - Gm_CtrlPtzCmd(channel, MOVE_TO_PRESETNO + srdt.presetno); - sleep(2); - if (0 == srdt.IsSleep) - { - srdt.ms_dev[devidx].SerialCmdidx = 10017; - srdt.IsSleep++; + //sleep(20); return 1; - } - //if(srdt.presetno > 1) - // srdt.presetno = 1; - // else - // srdt.presetno++; - //srdt.ms_dev[devidx].SerialCmdidx = -1; - //Gm_CtrlPtzCmd(channel, MOVE_TO_PRESETNO+srdt.presetno); - //usleep(1000); - srdt.ms_dev[devidx].SerialCmdidx = srdt.iLastGetPhotoNo; - srdt.iLastGetPhotoNo = -1; - srdt.IsSleep = 0; - return 1; - case 10018: /* 设置预置点*/ - Gm_CtrlPtzCmd(channel, SET_PRESETNO + srdt.presetno); - usleep(100000); - srdt.ms_dev[devidx].SerialCmdidx = srdt.iLastGetPhotoNo; - srdt.iLastGetPhotoNo = -1; - return 1; - default: - imagesize = 0xFF; - packetsize = (uint16_t)srdt.ms_dev[devidx].SerialCmdidx; - cmdidx = 0x11; + case 10006: /* 自动扫描功能控制(1/0 打开/关闭该功能)*/ + Gm_CtrlPtzCmd(channel, P_Auto_Scan); + usleep(100000); + srdt.ms_dev[devidx].SerialCmdidx = srdt.iLastGetPhotoNo; + srdt.iLastGetPhotoNo = -1; + return 1; + case 10007: /* 光圈缩小(1 有效)*/ + Gm_CtrlPtzCmd(channel, P_IRIS_CLOSE); + usleep(100000); + srdt.ms_dev[devidx].SerialCmdidx = srdt.iLastGetPhotoNo; + srdt.iLastGetPhotoNo = -1; + return 1; + case 10008: /* 光圈放大(1 有效)*/ + Gm_CtrlPtzCmd(channel, P_IRIS_OPEN); + usleep(100000); + srdt.ms_dev[devidx].SerialCmdidx = srdt.iLastGetPhotoNo; + srdt.iLastGetPhotoNo = -1; + return 1; + case 10009: /* 近距离聚焦(1 有效)*/ + Gm_CtrlPtzCmd(channel, P_FOCUS_NEAR); + usleep(100000); + Gm_CtrlPtzCmd(channel, Cmd_Cancel); + usleep(100000); + srdt.ms_dev[devidx].SerialCmdidx = srdt.iLastGetPhotoNo; + srdt.iLastGetPhotoNo = -1; + return 1; + case 10010: /* 远距离聚焦(1 有效)*/ + Gm_CtrlPtzCmd(channel, P_FOCUS_FAR); + usleep(100000); + Gm_CtrlPtzCmd(channel, Cmd_Cancel); + usleep(100000); + srdt.ms_dev[devidx].SerialCmdidx = srdt.iLastGetPhotoNo; + srdt.iLastGetPhotoNo = -1; + return 1; + case 10011: /* 远离物体(1 有效)*/ + Gm_CtrlPtzCmd(channel, P_ZOOM_WIDE); + usleep(100000); + Gm_CtrlPtzCmd(channel, Cmd_Cancel); + usleep(100000); + srdt.ms_dev[devidx].SerialCmdidx = srdt.iLastGetPhotoNo; + srdt.iLastGetPhotoNo = -1; + return 1; + case 10012: /* 接近物体(1 有效)*/ + Gm_CtrlPtzCmd(channel, P_ZOOM_TELE); + usleep(100000); + Gm_CtrlPtzCmd(channel, Cmd_Cancel); + usleep(100000); + srdt.ms_dev[devidx].SerialCmdidx = srdt.iLastGetPhotoNo; + srdt.iLastGetPhotoNo = -1; + return 1; + case 10013: /* 向下移动镜头(1 有效)*/ + Gm_CtrlPtzCmd(channel, P_MOVE_DOWN); + sleep(1); + Gm_CtrlPtzCmd(channel, Cmd_Cancel); + usleep(100000); + srdt.ms_dev[devidx].SerialCmdidx = srdt.iLastGetPhotoNo; + srdt.iLastGetPhotoNo = -1; + return 1; + case 10014: /* 向上移动镜头(1 有效)*/ + Gm_CtrlPtzCmd(channel, P_MOVE_UP); + sleep(1); + Gm_CtrlPtzCmd(channel, Cmd_Cancel); + usleep(100000); + srdt.ms_dev[devidx].SerialCmdidx = srdt.iLastGetPhotoNo; + srdt.iLastGetPhotoNo = -1; + return 1; + case 10015: /* 向左移动镜头(1 有效)*/ + Gm_CtrlPtzCmd(channel, P_MOVE_LEFT); + sleep(1); + Gm_CtrlPtzCmd(channel, Cmd_Cancel); + usleep(100000); + srdt.ms_dev[devidx].SerialCmdidx = srdt.iLastGetPhotoNo; + srdt.iLastGetPhotoNo = -1; + return 1; + case 10016: /* 向右移动镜头(1 有效)*/ + Gm_CtrlPtzCmd(channel, P_MOVE_RIGHT); + sleep(1); + Gm_CtrlPtzCmd(channel, Cmd_Cancel); + usleep(100000); + srdt.ms_dev[devidx].SerialCmdidx = srdt.iLastGetPhotoNo; + srdt.iLastGetPhotoNo = -1; + return 1; + case 10017: /* 调用预置点*/ + //srdt.presetno = 2; + Gm_CtrlPtzCmd(channel, MOVE_TO_PRESETNO + srdt.presetno); + sleep(2); + if (0 == srdt.IsSleep) + { + srdt.ms_dev[devidx].SerialCmdidx = 10017; + srdt.IsSleep++; + return 1; + } + //if(srdt.presetno > 1) + // srdt.presetno = 1; + // else + // srdt.presetno++; + //srdt.ms_dev[devidx].SerialCmdidx = -1; + //Gm_CtrlPtzCmd(channel, MOVE_TO_PRESETNO+srdt.presetno); + //usleep(1000); + srdt.ms_dev[devidx].SerialCmdidx = srdt.iLastGetPhotoNo; + srdt.iLastGetPhotoNo = -1; + srdt.IsSleep = 0; + return 1; + case 10018: /* 设置预置点*/ + Gm_CtrlPtzCmd(channel, SET_PRESETNO + srdt.presetno); + usleep(100000); + srdt.ms_dev[devidx].SerialCmdidx = srdt.iLastGetPhotoNo; + srdt.iLastGetPhotoNo = -1; + return 1; + default: + imagesize = 0xFF; + packetsize = (uint16_t)srdt.ms_dev[devidx].SerialCmdidx; + cmdidx = 0x11; #if 0 - if (0 == srdt.IsSleep) + if (0 == srdt.IsSleep) { srdt.IsSleep++; testComm(); } #endif - if (lcurtime - srdt.ms_dev[devidx].FirstCmdTimeCnt > 35 * 1000) - { - srdt.ms_dev[devidx].SerialCmdidx = -1; - sprintf(szbuf, "读取第%d包图片数据35秒未收到!结束拍照!", packetsize); - DebugLog(devparam[devidx].commid, szbuf, 'I'); - return -1; - } - break; + if (lcurtime - srdt.ms_dev[devidx].FirstCmdTimeCnt > 35 * 1000) + { + srdt.ms_dev[devidx].SerialCmdidx = -1; + sprintf(szbuf, "读取第%d包图片数据35秒未收到!结束拍照!", packetsize); + DebugLog(devparam[devidx].commid, szbuf, 'I'); + return -1; + } + break; } MakeCameraPhotoCommand(devidx, cmdidx, imagesize, packetsize, imagequality, srdt.sendphototime); //MakeCameraPhotoCommand(devidx, 2, imagesize, packetsize, imagequality); @@ -2633,44 +2616,44 @@ void MakeCameraPhotoCommand(int portno, uint8_t cmdidx, int OneParam, uint16_t T sendbuf[i++] = cmdidx; /* 命令字*/ switch (cmdidx) { - case 0x02: /* */ - sendbuf[i - 2] = 0xFF; - break; - case 0x03: /*设置传感器通讯参数(03H)*/ - sendbuf[i++] = 0x00; /* 波特率*/ - sendbuf[i++] = 0x00; - sendbuf[i++] = 0x00; - sendbuf[i++] = (uint8_t)OneParam; - sendbuf[i++] = 0x08; /* 数据位*/ - sendbuf[i++] = 0x00; /* 校验位*/ - sendbuf[i++] = 0x01; /* 停止位*/ - break; - case 0x010: /* 拍摄图片并指定大小分包(10H)*/ - sendbuf[i++] = OneParam; /* 图片大小(Resolution)*/ - sendbuf[i++] = HIBYTE(TwoParam);/*包大小(PackageSize)*/ - sendbuf[i++] = LOBYTE(TwoParam); - sendbuf[i++] = HIBYTE(HIWORD(icurtime + 8 * 60 * 60));/* 请求拍摄图片时间(PhotoTime)*/ - sendbuf[i++] = LOBYTE(HIWORD(icurtime + 8 * 60 * 60)); - sendbuf[i++] = HIBYTE(LOWORD(icurtime + 8 * 60 * 60)); - sendbuf[i++] = LOBYTE(LOWORD(icurtime + 8 * 60 * 60)); - sendbuf[i++] = Threep;/*图像质量(ImageQuality)*/ - sendbuf[i++] = srdt.presetno;//netportparam.CurPresetno[srdt.ms_dev[portno].CameraChannel-1];/*拍照预置点(PresetNo)*/ - break; - case 0x11: /* 获取指定包数据(11H)*/ - sendbuf[i++] = HIBYTE(TwoParam);/*图片包号:(PackageNo)*/ - sendbuf[i++] = LOBYTE(TwoParam); - break; - case 0x15: /* 读取历史图片(15H)*/ - sendbuf[i++] = HIBYTE(TwoParam);/*包大小(PackageSize)*/ - sendbuf[i++] = LOBYTE(TwoParam); - break; - case 0x16: /* 通知摄像机图片读取完成或存储(16H)*/ - sendbuf[i++] = HIBYTE(HIWORD(OneParam));/* 需要保存或删除的图片拍摄时间*/ - sendbuf[i++] = LOBYTE(HIWORD(OneParam)); - sendbuf[i++] = HIBYTE(LOWORD(OneParam)); - sendbuf[i++] = LOBYTE(LOWORD(OneParam)); - sendbuf[i++] = (uint8_t)TwoParam; /* 是否需要保存*/ - break; + case 0x02: /* */ + sendbuf[i - 2] = 0xFF; + break; + case 0x03: /*设置传感器通讯参数(03H)*/ + sendbuf[i++] = 0x00; /* 波特率*/ + sendbuf[i++] = 0x00; + sendbuf[i++] = 0x00; + sendbuf[i++] = (uint8_t)OneParam; + sendbuf[i++] = 0x08; /* 数据位*/ + sendbuf[i++] = 0x00; /* 校验位*/ + sendbuf[i++] = 0x01; /* 停止位*/ + break; + case 0x010: /* 拍摄图片并指定大小分包(10H)*/ + sendbuf[i++] = OneParam; /* 图片大小(Resolution)*/ + sendbuf[i++] = HIBYTE(TwoParam);/*包大小(PackageSize)*/ + sendbuf[i++] = LOBYTE(TwoParam); + sendbuf[i++] = HIBYTE(HIWORD(icurtime + 8 * 60 * 60));/* 请求拍摄图片时间(PhotoTime)*/ + sendbuf[i++] = LOBYTE(HIWORD(icurtime + 8 * 60 * 60)); + sendbuf[i++] = HIBYTE(LOWORD(icurtime + 8 * 60 * 60)); + sendbuf[i++] = LOBYTE(LOWORD(icurtime + 8 * 60 * 60)); + sendbuf[i++] = Threep;/*图像质量(ImageQuality)*/ + sendbuf[i++] = srdt.presetno;//netportparam.CurPresetno[srdt.ms_dev[portno].CameraChannel-1];/*拍照预置点(PresetNo)*/ + break; + case 0x11: /* 获取指定包数据(11H)*/ + sendbuf[i++] = HIBYTE(TwoParam);/*图片包号:(PackageNo)*/ + sendbuf[i++] = LOBYTE(TwoParam); + break; + case 0x15: /* 读取历史图片(15H)*/ + sendbuf[i++] = HIBYTE(TwoParam);/*包大小(PackageSize)*/ + sendbuf[i++] = LOBYTE(TwoParam); + break; + case 0x16: /* 通知摄像机图片读取完成或存储(16H)*/ + sendbuf[i++] = HIBYTE(HIWORD(OneParam));/* 需要保存或删除的图片拍摄时间*/ + sendbuf[i++] = LOBYTE(HIWORD(OneParam)); + sendbuf[i++] = HIBYTE(LOWORD(OneParam)); + sendbuf[i++] = LOBYTE(LOWORD(OneParam)); + sendbuf[i++] = (uint8_t)TwoParam; /* 是否需要保存*/ + break; } sendbuf[i] = CalLpc((u_char *)&sendbuf[6], i - 6); i += 1; @@ -2692,7 +2675,7 @@ int Gm_CtrlPtzCmd(u_char channel, uint32_t ptzcmd) for (i = 0; i < MAX_SERIAL_DEV_NUM; i++) { if ((channel == devparam[i].CameraChannel) && ((devparam[i].ProtocolIdx == PELCO_P_PROTOCOL) - || (devparam[i].ProtocolIdx == PELCO_D_PROTOCOL))) + || (devparam[i].ProtocolIdx == PELCO_D_PROTOCOL))) break; } if (i == MAX_SERIAL_DEV_NUM) @@ -2711,31 +2694,31 @@ int Gm_CtrlPtzCmd(u_char channel, uint32_t ptzcmd) else { #endif - sprintf(szbuf, "摄像机通道%d 使用串口%d", channel, devparam[i].commid + 1); - DebugLog(devparam[i].commid, szbuf, 'I'); - //} - srdt.usecameradevidx = i; - // 查找串口序号 - // 1.打开串口电源 - //Gm_OpenSensorsPower(); - // 2.打开串口通讯 - //Gm_OpenSerialPort(i); + sprintf(szbuf, "摄像机通道%d 使用串口%d", channel, devparam[i].commid + 1); + DebugLog(devparam[i].commid, szbuf, 'I'); + //} + srdt.usecameradevidx = i; + // 查找串口序号 + // 1.打开串口电源 + //Gm_OpenSensorsPower(); + // 2.打开串口通讯 + //Gm_OpenSerialPort(i); - srdt.SendStopPtzCmdTimeCnt = -1; - //return 1; - return Gm_Camera_Timer(); - //return 1; - } + srdt.SendStopPtzCmdTimeCnt = -1; + //return 1; + return Gm_Camera_Timer(); + //return 1; +} - // 发送转动摄像机云台命令定时器 - int Gm_Camera_Timer() - { - char szbuf[128]; +// 发送转动摄像机云台命令定时器 +int Gm_Camera_Timer() +{ + char szbuf[128]; - if (PELCO_D_PROTOCOL == devparam[srdt.usecameradevidx].ProtocolIdx) + if (PELCO_D_PROTOCOL == devparam[srdt.usecameradevidx].ProtocolIdx) + { + switch (srdt.PtzCmdType) { - switch (srdt.PtzCmdType) - { case P_Auto_Scan: srdt.PtzCmdType = D_Auto_Scan; break; @@ -2769,29 +2752,29 @@ int Gm_CtrlPtzCmd(u_char channel, uint32_t ptzcmd) case P_MOVE_RIGHT: srdt.PtzCmdType = D_MOVE_RIGHT; break; - } } - if (srdt.SendStopPtzCmdTimeCnt == -1) - { - if (serialport[srdt.camerauseserial].cmdlen > 0) - return -1; - if (PELCO_D_PROTOCOL == devparam[srdt.usecameradevidx].ProtocolIdx) - Gm_SendPelco_DCommand(srdt.PtzCmdType); - else - Gm_SendPelco_pCommand(srdt.PtzCmdType); + } + if (srdt.SendStopPtzCmdTimeCnt == -1) + { + if (serialport[srdt.camerauseserial].cmdlen > 0) + return -1; + if (PELCO_D_PROTOCOL == devparam[srdt.usecameradevidx].ProtocolIdx) + Gm_SendPelco_DCommand(srdt.PtzCmdType); + else + Gm_SendPelco_pCommand(srdt.PtzCmdType); - if ((SET_PRESETNO == (srdt.PtzCmdType & 0xFFFF0000)) - || (MOVE_TO_PRESETNO == (srdt.PtzCmdType & 0xFFFF0000))) - { - //srdt.sampling &= 0xFD; - return 1; - } - srdt.PtzCmdType = Cmd_Cancel; - srdt.SendStopPtzCmdTimeCnt = 0; + if ((SET_PRESETNO == (srdt.PtzCmdType & 0xFFFF0000)) + || (MOVE_TO_PRESETNO == (srdt.PtzCmdType & 0xFFFF0000))) + { + //srdt.sampling &= 0xFD; + return 1; } - return 1; + srdt.PtzCmdType = Cmd_Cancel; + srdt.SendStopPtzCmdTimeCnt = 0; + } + return 1; #if 0 - //if(srdt.SendStopPtzCmdTimeCnt > PTZ_MOVETIME*1000/TIMER_CNT) + //if(srdt.SendStopPtzCmdTimeCnt > PTZ_MOVETIME*1000/TIMER_CNT) { if (serialport[srdt.camerauseserial].cmdlen > 0) return -1; @@ -2807,129 +2790,129 @@ int Gm_CtrlPtzCmd(u_char channel, uint32_t ptzcmd) // srdt.SendStopPtzCmdTimeCnt ++; //return -1; #endif - } +} - /******************************************************************************** - * 生成 PELCO_P 命令 * - *********************************************************************************/ - void Gm_SendPelco_pCommand(uint32_t cmdtype) - { - int len; - uint8_t commandbuf[32]; - char buf[128]; - - len = 0; - commandbuf[len++] = (uint8_t)0xA0; - commandbuf[len++] = (uint8_t)devparam[srdt.usecameradevidx].devaddr; - commandbuf[len++] = (uint8_t)(cmdtype >> 24); - commandbuf[len++] = (uint8_t)(cmdtype >> 16); - commandbuf[len++] = (uint8_t)(cmdtype >> 8); - commandbuf[len++] = (uint8_t)(cmdtype); - commandbuf[len++] = (uint8_t)0xAF; - commandbuf[len] = (uint8_t)Gm_Pelco_pXORCheck(commandbuf, len); - len++; - serialport[srdt.camerauseserial].cmdlen = len; - Gm_SetSerialPortParam(srdt.camerauseserial); - //unsigned char sendbuf[] = {0x68,0x00,0x00,0x68,0x0ff,0x02,0x01,0x16}; - //len = GM_SerialComSend(sendbuf, sizeof(sendbuf), srdt.camerauseserial); - - len = GM_SerialComSend(commandbuf, len, srdt.camerauseserial); - if (len < 1) - { - DebugLog(srdt.camerauseserial, "发送Pelco_p命令失败", 'E'); - } - else - { - sprintf(buf, "发送串口%d 像机通道%d Pelco_P命令:", +/******************************************************************************** +* 生成 PELCO_P 命令 * +*********************************************************************************/ +void Gm_SendPelco_pCommand(uint32_t cmdtype) +{ + int len; + uint8_t commandbuf[32]; + char buf[128]; + + len = 0; + commandbuf[len++] = (uint8_t)0xA0; + commandbuf[len++] = (uint8_t)devparam[srdt.usecameradevidx].devaddr; + commandbuf[len++] = (uint8_t)(cmdtype >> 24); + commandbuf[len++] = (uint8_t)(cmdtype >> 16); + commandbuf[len++] = (uint8_t)(cmdtype >> 8); + commandbuf[len++] = (uint8_t)(cmdtype); + commandbuf[len++] = (uint8_t)0xAF; + commandbuf[len] = (uint8_t)Gm_Pelco_pXORCheck(commandbuf, len); + len++; + serialport[srdt.camerauseserial].cmdlen = len; + Gm_SetSerialPortParam(srdt.camerauseserial); + //unsigned char sendbuf[] = {0x68,0x00,0x00,0x68,0x0ff,0x02,0x01,0x16}; + //len = GM_SerialComSend(sendbuf, sizeof(sendbuf), srdt.camerauseserial); + + len = GM_SerialComSend(commandbuf, len, srdt.camerauseserial); + if (len < 1) + { + DebugLog(srdt.camerauseserial, "发送Pelco_p命令失败", 'E'); + } + else + { + sprintf(buf, "发送串口%d 像机通道%d Pelco_P命令:", srdt.camerauseserial + 1, devparam[srdt.usecameradevidx].CameraChannel); - BytestreamLOG(srdt.camerauseserial, buf, commandbuf, len, 'D'); - } - ClearCmdFormPollCmdBuf(srdt.camerauseserial); + BytestreamLOG(srdt.camerauseserial, buf, commandbuf, len, 'D'); } + ClearCmdFormPollCmdBuf(srdt.camerauseserial); +} - uint8_t Gm_Pelco_pXORCheck(uint8_t *msg, int len) - { - int i; - uint8_t checkvalue = 0; +uint8_t Gm_Pelco_pXORCheck(uint8_t *msg, int len) +{ + int i; + uint8_t checkvalue = 0; - if (len <= 0) - return checkvalue; - checkvalue = msg[0]; - for (i = 1; i < len; i++) - checkvalue ^= msg[i]; + if (len <= 0) return checkvalue; - } + checkvalue = msg[0]; + for (i = 1; i < len; i++) + checkvalue ^= msg[i]; + return checkvalue; +} - /******************************************************************************** - * 生成 PELCO_D 命令 * - *********************************************************************************/ - void Gm_SendPelco_DCommand(uint32_t cmdtype) - { - int len; - uint8_t commandbuf[32]; - char buf[128]; +/******************************************************************************** +* 生成 PELCO_D 命令 * +*********************************************************************************/ +void Gm_SendPelco_DCommand(uint32_t cmdtype) +{ + int len; + uint8_t commandbuf[32]; + char buf[128]; - len = 0; + len = 0; #if 1 /* Pelco_D*/ - commandbuf[len++] = (uint8_t)0xFF; - commandbuf[len++] = (uint8_t)devparam[srdt.usecameradevidx].devaddr; - commandbuf[len++] = (uint8_t)(cmdtype >> 24); - commandbuf[len++] = (uint8_t)(cmdtype >> 16); - commandbuf[len++] = (uint8_t)(cmdtype >> 8); - commandbuf[len++] = (uint8_t)(cmdtype); - commandbuf[len] = (uint8_t)Gm_Pelco_DCheck(commandbuf, len); + commandbuf[len++] = (uint8_t)0xFF; + commandbuf[len++] = (uint8_t)devparam[srdt.usecameradevidx].devaddr; + commandbuf[len++] = (uint8_t)(cmdtype >> 24); + commandbuf[len++] = (uint8_t)(cmdtype >> 16); + commandbuf[len++] = (uint8_t)(cmdtype >> 8); + commandbuf[len++] = (uint8_t)(cmdtype); + commandbuf[len] = (uint8_t)Gm_Pelco_DCheck(commandbuf, len); #endif - len++; - serialport[srdt.camerauseserial].cmdlen = len; - Gm_SetSerialPortParam(srdt.camerauseserial); - len = GM_SerialComSend(commandbuf, len, srdt.camerauseserial); - if (len < 1) - { - DebugLog(srdt.camerauseserial, "发送Pelco_D命令失败", 'E'); - } - else - { - sprintf(buf, "发送串口%d 像机通道%d Pelco_D命令:", + len++; + serialport[srdt.camerauseserial].cmdlen = len; + Gm_SetSerialPortParam(srdt.camerauseserial); + len = GM_SerialComSend(commandbuf, len, srdt.camerauseserial); + if (len < 1) + { + DebugLog(srdt.camerauseserial, "发送Pelco_D命令失败", 'E'); + } + else + { + sprintf(buf, "发送串口%d 像机通道%d Pelco_D命令:", srdt.camerauseserial + 1, devparam[srdt.usecameradevidx].CameraChannel); - BytestreamLOG(srdt.camerauseserial, buf, commandbuf, len, 'D'); - } - ClearCmdFormPollCmdBuf(srdt.camerauseserial); - //serialport[srdt.camerauseserial].ForceWaitCnt = 10; - //serialport[srdt.camerauseserial].ForceWaitFlag = 1; + BytestreamLOG(srdt.camerauseserial, buf, commandbuf, len, 'D'); } + ClearCmdFormPollCmdBuf(srdt.camerauseserial); + //serialport[srdt.camerauseserial].ForceWaitCnt = 10; + //serialport[srdt.camerauseserial].ForceWaitFlag = 1; +} - // 计算Pelco_D校验 - uint8_t Gm_Pelco_DCheck(uint8_t *msg, int len) - { - int i; - uint8_t checkvalue = 0; +// 计算Pelco_D校验 +uint8_t Gm_Pelco_DCheck(uint8_t *msg, int len) +{ + int i; + uint8_t checkvalue = 0; - if (len <= 0) - return checkvalue; - checkvalue = 0; - for (i = 1; i < len; i++) - checkvalue += msg[i]; + if (len <= 0) return checkvalue; - } + checkvalue = 0; + for (i = 1; i < len; i++) + checkvalue += msg[i]; + return checkvalue; +} - /********************************************************************************* - 寻找并生成下一条倾角命令 - **********************************************************************************/ - int FindNextShxyProtocolCommand(int devidx) - { - int cmdno = 0; +/********************************************************************************* + 寻找并生成下一条倾角命令 +**********************************************************************************/ +int FindNextShxyProtocolCommand(int devidx) +{ + int cmdno = 0; - //如果命令缓冲区仍有命令,则退出本函数 - if ((devparam[devidx].commid + 1 < 1) || (devparam[devidx].commid + 1 > MAX_SERIAL_PORT_NUM)) - return -1; - if (get_msec() - srdt.ms_dev[devidx].FirstCmdTimeCnt < 3 * 1000) - { - return -1; - } - //if(SLANT_PROTOCOL == devparam[devidx].ProtocolIdx) - // return -1; - switch (cmdno) - { + //如果命令缓冲区仍有命令,则退出本函数 + if ((devparam[devidx].commid + 1 < 1) || (devparam[devidx].commid + 1 > MAX_SERIAL_PORT_NUM)) + return -1; + if (get_msec() - srdt.ms_dev[devidx].FirstCmdTimeCnt < 3 * 1000) + { + return -1; + } + //if(SLANT_PROTOCOL == devparam[devidx].ProtocolIdx) + // return -1; + switch (cmdno) + { case 0: /* 正常采集数据*/ MakeShxyProtocolPollCommand(devidx, 0x09); srdt.curdevidx[devparam[devidx].commid] = devidx; @@ -2940,36 +2923,36 @@ int Gm_CtrlPtzCmd(u_char channel, uint32_t ptzcmd) return 1; default: break; - } - return -1; } + return -1; +} - /********************************************************************************* - 生成下发命令 - **********************************************************************************/ - void MakeShxyProtocolPollCommand(int portno, uint8_t cmdidx) - { - int i, length = 0; - int newaddr = 9, baud = 9600, stopbit = 1, parity = 0; - //char buf[128]; - u_char *sendbuf; +/********************************************************************************* + 生成下发命令 +**********************************************************************************/ +void MakeShxyProtocolPollCommand(int portno, uint8_t cmdidx) +{ + int i, length = 0; + int newaddr = 9, baud = 9600, stopbit = 1, parity = 0; + //char buf[128]; + u_char *sendbuf; - sendbuf = serialport[devparam[portno].commid].PollCmd; + sendbuf = serialport[devparam[portno].commid].PollCmd; - /* 测试变量*/ - cmdidx = cmdidx; + /* 测试变量*/ + cmdidx = cmdidx; - i = 0; - sendbuf[i++] = 0x00; // 强制等待时间 - sendbuf[i++] = 0x00; // - sendbuf[i++] = 0x68; // 起始字符 - sendbuf[i++] = (uint8_t)0x00; // length - sendbuf[i++] = (uint8_t)0x00; // length - sendbuf[i++] = 0x68; - sendbuf[i++] = (uint8_t)devparam[portno].devaddr; // 传感器地址 - sendbuf[i++] = cmdidx; // 命令信息0x06 - switch (cmdidx) - { + i = 0; + sendbuf[i++] = 0x00; // 强制等待时间 + sendbuf[i++] = 0x00; // + sendbuf[i++] = 0x68; // 起始字符 + sendbuf[i++] = (uint8_t)0x00; // length + sendbuf[i++] = (uint8_t)0x00; // length + sendbuf[i++] = 0x68; + sendbuf[i++] = (uint8_t)devparam[portno].devaddr; // 传感器地址 + sendbuf[i++] = cmdidx; // 命令信息0x06 + switch (cmdidx) + { case 1: /* 设置传感器新地址*/ sendbuf[i++] = newaddr; length = 1; @@ -2989,45 +2972,45 @@ int Gm_CtrlPtzCmd(u_char channel, uint32_t ptzcmd) break; default: break; - } - sendbuf[i] = CalLpc((u_char *)&sendbuf[6], i - 6); - i += 1; - sendbuf[3] = length; - sendbuf[4] = length; - sendbuf[i++] = 0x16; // 信息尾 - serialport[devparam[portno].commid].cmdlen = i; } + sendbuf[i] = CalLpc((u_char *)&sendbuf[6], i - 6); + i += 1; + sendbuf[3] = length; + sendbuf[4] = length; + sendbuf[i++] = 0x16; // 信息尾 + serialport[devparam[portno].commid].cmdlen = i; +} - unsigned char CalLpc(unsigned char *msg, int len) - { - int i; - u_char retval = 0; +unsigned char CalLpc(unsigned char *msg, int len) +{ + int i; + u_char retval = 0; + + for (i = 0; i < len; i++) + retval += msg[i]; + return retval; +} - for (i = 0; i < len; i++) - retval += msg[i]; - return retval; +/*************************************************************** +* 读上海欣影传感器协议数据 * +***************************************************************/ +void ShxyProtocolRecvData(int devno, u_char *buf, int len)// 规约读数据处理 +{ + int i, ictime; + //uint16_t crc, check; + //SERIAL_DEV_DEF *pPortParam; + SIO_PARAM_SERIAL_DEF *pPortParam; + + if ((devno < 0) || (devno > MAX_SERIAL_DEV_NUM)) + { + return; } + pPortParam = &serialport[devparam[devno].commid]; - /*************************************************************** - * 读上海欣影传感器协议数据 * - ***************************************************************/ - void ShxyProtocolRecvData(int devno, u_char *buf, int len)// 规约读数据处理 + for (i = 0; i < len; i++) { - int i, ictime; - //uint16_t crc, check; - //SERIAL_DEV_DEF *pPortParam; - SIO_PARAM_SERIAL_DEF *pPortParam; - - if ((devno < 0) || (devno > MAX_SERIAL_DEV_NUM)) - { - return; - } - pPortParam = &serialport[devparam[devno].commid]; - - for (i = 0; i < len; i++) + switch (pPortParam->m_iRevStatus) { - switch (pPortParam->m_iRevStatus) - { case 0: // 0x68 pPortParam->m_iRecvLen = 0; pPortParam->m_au8RecvBuf[pPortParam->m_iRecvLen++] = buf[i]; @@ -3104,138 +3087,138 @@ int Gm_CtrlPtzCmd(u_char channel, uint32_t ptzcmd) } } break; - } } } +} - //******************************************************************************** - // 检查检验和是否正确 - //******************************************************************************** - int CheckShxyProtocolLpcError(u_char* msg, int len) - { - int bRetval = 0; - int iCheckLen; +//******************************************************************************** +// 检查检验和是否正确 +//******************************************************************************** +int CheckShxyProtocolLpcError(u_char* msg, int len) +{ + int bRetval = 0; + int iCheckLen; + + if (0x68 == msg[0]) + { + if (msg[0] != msg[3]) + return bRetval; + if (msg[len - 1] != 0x16) + return bRetval; + if (msg[1] != msg[2]) + return bRetval; + iCheckLen = msg[1]; + if (CalLpc(&msg[4], iCheckLen + 2) != msg[len - 2]) + return bRetval; + bRetval = 1; + } + return bRetval; +} - if (0x68 == msg[0]) - { - if (msg[0] != msg[3]) - return bRetval; - if (msg[len - 1] != 0x16) - return bRetval; - if (msg[1] != msg[2]) - return bRetval; - iCheckLen = msg[1]; - if (CalLpc(&msg[4], iCheckLen + 2) != msg[len - 2]) - return bRetval; - bRetval = 1; - } - return bRetval; - } +/********************************************************************************* + 上海欣影传感器协议数据处理 +**********************************************************************************/ +void ShxyProtocolDataProcess(int devno) +{ + float fvalue, fcorvalue, *fvalua, frnb/*, fwind*/; + uint16_t uDevAddr; + uint8_t cmdidx; + int i, j, aipnt, datanum; + SERIAL_DEV_DEF *pPortParam; + SIO_PARAM_SERIAL_DEF *curserial; + char szbuf[64]; + + pPortParam = &srdt.ms_dev[devno]; + curserial = &serialport[devparam[devno].commid]; - /********************************************************************************* - 上海欣影传感器协议数据处理 - **********************************************************************************/ - void ShxyProtocolDataProcess(int devno) + //取出装置地址,开始处理地址+++ + if (0x02 == curserial->m_au8RecvBuf[5]) { - float fvalue, fcorvalue, *fvalua, frnb/*, fwind*/; - uint16_t uDevAddr; - uint8_t cmdidx; - int i, j, aipnt, datanum; - SERIAL_DEV_DEF *pPortParam; - SIO_PARAM_SERIAL_DEF *curserial; - char szbuf[64]; + devparam[devno].devaddr = curserial->m_au8RecvBuf[4]; + return; + } - pPortParam = &srdt.ms_dev[devno]; - curserial = &serialport[devparam[devno].commid]; + cmdidx = curserial->m_au8RecvBuf[5]; + aipnt = pPortParam->SameTypeDevIdx; + uDevAddr = curserial->m_au8RecvBuf[4]; - //取出装置地址,开始处理地址+++ - if (0x02 == curserial->m_au8RecvBuf[5]) - { - devparam[devno].devaddr = curserial->m_au8RecvBuf[4]; + fvalua = &fvalue; + memset(szbuf, 0, sizeof(szbuf)); + if (0x06 == cmdidx) + { + if (0x08 != curserial->m_au8RecvBuf[1]) return; - } - - cmdidx = curserial->m_au8RecvBuf[5]; - aipnt = pPortParam->SameTypeDevIdx; - uDevAddr = curserial->m_au8RecvBuf[4]; + pPortParam->recvdatacnt++; + if (pPortParam->recvdatacnt < 2) + return; + // ++++++++++++++++++++++++++++ + //g_SelfTest.SensorsFault |= (0x800<m_au8RecvBuf[9]; + *((uint8_t*)fvalua + 1) = curserial->m_au8RecvBuf[8]; + *((uint8_t*)fvalua + 2) = curserial->m_au8RecvBuf[7]; + *((uint8_t*)fvalua + 3) = curserial->m_au8RecvBuf[6]; + if ((fvalue < -59) || (fvalue > 59)) { - if (0x08 != curserial->m_au8RecvBuf[1]) - return; - pPortParam->recvdatacnt++; - if (pPortParam->recvdatacnt < 2) - return; - // ++++++++++++++++++++++++++++ - //g_SelfTest.SensorsFault |= (0x800<m_au8RecvBuf[9]; - *((uint8_t*)fvalua + 1) = curserial->m_au8RecvBuf[8]; - *((uint8_t*)fvalua + 2) = curserial->m_au8RecvBuf[7]; - *((uint8_t*)fvalua + 3) = curserial->m_au8RecvBuf[6]; - if ((fvalue < -59) || (fvalue > 59)) - { - frnb = (GeneratingRandomNumber() % 101 - 50) / 1000.0; - pPortParam->aiValue[0].EuValue *= (1 + frnb); - } - else - pPortParam->aiValue[0].EuValue = fvalue; - pPortParam->aiValue[0].AiState = SER_SAMPLE; - //slantpntmsg[aipnt][0].EuValue = fvalue*slantpntmsg[aipnt][0].AiParam.fFactor\ + frnb = (GeneratingRandomNumber() % 101 - 50) / 1000.0; + pPortParam->aiValue[0].EuValue *= (1 + frnb); + } + else + pPortParam->aiValue[0].EuValue = fvalue; + pPortParam->aiValue[0].AiState = SER_SAMPLE; + //slantpntmsg[aipnt][0].EuValue = fvalue*slantpntmsg[aipnt][0].AiParam.fFactor\ // +slantpntmsg[aipnt][0].AiParam.EuValueDelta; //slantpntmsg[aipnt][0].AiState = 1; //if ((gDisSunRain & 0x20) == 0x20) - { - sprintf(szbuf, "倾角ID:%d slantangle X=%0.3f ", devparam[devno].devaddr, fvalue); - //DebugLog(devparam[devno].commid, szbuf, 'V'); - } - //XslantSec[aipnt][srdt.SectimesamplingCnt[0]] = (short)slantpntmsg[aipnt][0].EuValue; - //srdt.SectimesamplingCnt[0] += 1; - - *(uint8_t*)fvalua = curserial->m_au8RecvBuf[13]; - *((uint8_t*)fvalua + 1) = curserial->m_au8RecvBuf[12]; - *((uint8_t*)fvalua + 2) = curserial->m_au8RecvBuf[11]; - *((uint8_t*)fvalua + 3) = curserial->m_au8RecvBuf[10]; - //if ((gDisSunRain & 0x20) == 0x20) - { - sprintf(szbuf, "%sY =%0.3f ", szbuf, fvalue); - DebugLog(devparam[devno].commid, szbuf, 'V'); - } - if ((fvalue < -59) || (fvalue > 59)) - { - frnb = (GeneratingRandomNumber() % 101 - 50) / 1000.0; - pPortParam->aiValue[1].EuValue *= (1 + frnb); - //slantpntmsg[aipnt][1].EuValue *= (1+frnb); - } - else - pPortParam->aiValue[1].EuValue = fvalue; - pPortParam->aiValue[1].AiState = SER_SAMPLE; - /*slantpntmsg[aipnt][1].EuValue = fvalue*slantpntmsg[aipnt][1].AiParam.fFactor\ - +slantpntmsg[aipnt][1].AiParam.EuValueDelta; - slantpntmsg[aipnt][1].AiState = 1;*/ - //YslantSec[aipnt][srdt.SectimesamplingCnt[1]] = (short)slantpntmsg[aipnt][1].EuValue; - srdt.SectimesamplingCnt[1] += 1; + { + sprintf(szbuf, "倾角ID:%d slantangle X=%0.3f ", devparam[devno].devaddr, fvalue); + //DebugLog(devparam[devno].commid, szbuf, 'V'); } - datanum = curserial->m_au8RecvBuf[6]; - if ((0x08 != cmdidx) && (0x09 != cmdidx)) - return; + //XslantSec[aipnt][srdt.SectimesamplingCnt[0]] = (short)slantpntmsg[aipnt][0].EuValue; + //srdt.SectimesamplingCnt[0] += 1; - for (i = 0, j = 7; (i < datanum) && (j < 6 + curserial->m_au8RecvBuf[1]); i++, j += 5) + *(uint8_t*)fvalua = curserial->m_au8RecvBuf[13]; + *((uint8_t*)fvalua + 1) = curserial->m_au8RecvBuf[12]; + *((uint8_t*)fvalua + 2) = curserial->m_au8RecvBuf[11]; + *((uint8_t*)fvalua + 3) = curserial->m_au8RecvBuf[10]; + //if ((gDisSunRain & 0x20) == 0x20) + { + sprintf(szbuf, "%sY =%0.3f ", szbuf, fvalue); + DebugLog(devparam[devno].commid, szbuf, 'V'); + } + if ((fvalue < -59) || (fvalue > 59)) + { + frnb = (GeneratingRandomNumber() % 101 - 50) / 1000.0; + pPortParam->aiValue[1].EuValue *= (1 + frnb); + //slantpntmsg[aipnt][1].EuValue *= (1+frnb); + } + else + pPortParam->aiValue[1].EuValue = fvalue; + pPortParam->aiValue[1].AiState = SER_SAMPLE; + /*slantpntmsg[aipnt][1].EuValue = fvalue*slantpntmsg[aipnt][1].AiParam.fFactor\ + +slantpntmsg[aipnt][1].AiParam.EuValueDelta; + slantpntmsg[aipnt][1].AiState = 1;*/ + //YslantSec[aipnt][srdt.SectimesamplingCnt[1]] = (short)slantpntmsg[aipnt][1].EuValue; + srdt.SectimesamplingCnt[1] += 1; + } + datanum = curserial->m_au8RecvBuf[6]; + if ((0x08 != cmdidx) && (0x09 != cmdidx)) + return; + + for (i = 0, j = 7; (i < datanum) && (j < 6 + curserial->m_au8RecvBuf[1]); i++, j += 5) + { + if (0x08 == cmdidx) + fvalue = (curserial->m_au8RecvBuf[j + 1] << 24) + (curserial->m_au8RecvBuf[j + 2] << 16) + + (curserial->m_au8RecvBuf[j + 3] << 8) + curserial->m_au8RecvBuf[j + 4]; + else + { + *(uint8_t*)fvalua = curserial->m_au8RecvBuf[j + 4]; + *((uint8_t*)fvalua + 1) = curserial->m_au8RecvBuf[j + 3]; + *((uint8_t*)fvalua + 2) = curserial->m_au8RecvBuf[j + 2]; + *((uint8_t*)fvalua + 3) = curserial->m_au8RecvBuf[j + 1]; + } + switch (curserial->m_au8RecvBuf[j]) { - if (0x08 == cmdidx) - fvalue = (curserial->m_au8RecvBuf[j + 1] << 24) + (curserial->m_au8RecvBuf[j + 2] << 16) - + (curserial->m_au8RecvBuf[j + 3] << 8) + curserial->m_au8RecvBuf[j + 4]; - else - { - *(uint8_t*)fvalua = curserial->m_au8RecvBuf[j + 4]; - *((uint8_t*)fvalua + 1) = curserial->m_au8RecvBuf[j + 3]; - *((uint8_t*)fvalua + 2) = curserial->m_au8RecvBuf[j + 2]; - *((uint8_t*)fvalua + 3) = curserial->m_au8RecvBuf[j + 1]; - } - switch (curserial->m_au8RecvBuf[j]) - { case 1: /*温度*/ if ((fvalue < -40) || (fvalue > 85)) { @@ -3356,7 +3339,7 @@ int Gm_CtrlPtzCmd(u_char channel, uint32_t ptzcmd) pPortParam->aiValue[0].EuValue = fvalue;/*pPortParam->aiValue[0].AiParam.fFactor\ +pPortParam->aiValue[0].AiParam.EuValueDelta;*/ - //rallypntmsg[aipnt][0].EuValue = fvalue*rallypntmsg[aipnt][0].AiParam.fFactor\ + //rallypntmsg[aipnt][0].EuValue = fvalue*rallypntmsg[aipnt][0].AiParam.fFactor\ // +rallypntmsg[aipnt][0].AiParam.EuValueDelta; pPortParam->aiValue[0].AiState = SER_SAMPLE; //rallypntmsg[aipnt][0].AiState = 1; @@ -3400,93 +3383,92 @@ int Gm_CtrlPtzCmd(u_char channel, uint32_t ptzcmd) //slantpntmsg[aipnt][1].AiState = 1; break; - } } } +} + +void delete_old_files(const char *path, int days) +{ + struct stat file_stat; + struct tm *file_tm; + time_t now = time(NULL); + DIR *dir = opendir(path); + struct dirent *entry; + char szbuf[1024]; + char fullpath[256]; - void delete_old_files(const char *path, int days) + memset(szbuf, 0, sizeof(szbuf)); + if (!dir) { - struct stat file_stat; - struct tm *file_tm; - time_t now = time(NULL); - DIR *dir = opendir(path); - struct dirent *entry; - char* szbuf = new char[1024]; - std::unique_ptr szbufptr(szbuf); - char fullpath[256]; + sprintf(szbuf, "delete_old_files opendir %s error ", path); + DebugLog(8, szbuf, 'E'); + return; + } + while ((entry = readdir(dir))) + { memset(szbuf, 0, sizeof(szbuf)); - if (!dir) - { - sprintf(szbuf, "delete_old_files opendir %s error ", path); - DebugLog(8, szbuf, 'E'); - return; - } - - while ((entry = readdir(dir))) - { - memset(szbuf, 0, sizeof(szbuf)); - if (entry->d_type == DT_REG) - { // 只处理普通文件 - snprintf(fullpath, sizeof(fullpath), "%s/%s", path, entry->d_name); + if (entry->d_type == DT_REG) + { // 只处理普通文件 + snprintf(fullpath, sizeof(fullpath), "%s/%s", path, entry->d_name); - if (stat(fullpath, &file_stat) == -1) - { - perror("stat"); - sprintf(szbuf, "stat"); - DebugLog(8, szbuf, 'E'); - continue; - } + if (stat(fullpath, &file_stat) == -1) + { + perror("stat"); + sprintf(szbuf, "stat"); + DebugLog(8, szbuf, 'E'); + continue; + } - localtime_r(&(file_stat.st_mtime), file_tm); - //file_tm = localtime(&(file_stat.st_mtime)); + localtime_r(&(file_stat.st_mtime), file_tm); + //file_tm = localtime(&(file_stat.st_mtime)); - if (difftime(now, mktime(file_tm)) > days * 24 * 60 * 60) - { - if (unlink(fullpath) == -1) - { // 删除文件 - perror("unlink"); - } + if (difftime(now, mktime(file_tm)) > days * 24 * 60 * 60) + { + if (unlink(fullpath) == -1) + { // 删除文件 + perror("unlink"); } } } - - closedir(dir); } - /********************************************************************************* - 把16进制和10进制ASCII字符串转换成int整数 - *********************************************************************************/ - int ATOI(char *buf) - { - int i, ilen, iRetVal; - if (NULL == buf) - return 0; - ilen = strlen(buf); - if (ilen > 2) + closedir(dir); +} +/********************************************************************************* + 把16进制和10进制ASCII字符串转换成int整数 +*********************************************************************************/ +int ATOI(char *buf) +{ + int i, ilen, iRetVal; + + if (NULL == buf) + return 0; + ilen = strlen(buf); + if (ilen > 2) + { + if ((buf[0] == '0') && ((buf[1] == 'x') || (buf[1] == 'X'))) { - if ((buf[0] == '0') && ((buf[1] == 'x') || (buf[1] == 'X'))) - { - iRetVal = 0; - for (i = 2; i < ilen; i++) - { - iRetVal = (iRetVal << 4) + HexCharToInt(buf[i]); - } - } - else + iRetVal = 0; + for (i = 2; i < ilen; i++) { - iRetVal = atoi(buf); + iRetVal = (iRetVal << 4) + HexCharToInt(buf[i]); } } else { iRetVal = atoi(buf); } - return iRetVal; } + else + { + iRetVal = atoi(buf); + } + return iRetVal; +} #if 0 - // 控制关闭传感器电源 +// 控制关闭传感器电源 void Gm_CtrlCloseSensorsPower(int devidx) { if ((devidx < 0) || (devidx > MAX_SERIAL_DEV_NUM - 1)) @@ -3520,21 +3502,21 @@ int Gm_CtrlPtzCmd(u_char channel, uint32_t ptzcmd) } #endif - int GeneratingRandomNumber(void) - { - int ictime, randomdate; - /* 生成随机数n-m -> rand()%(m-n+1)+n*/ - ictime = (int)time(NULL); - srand((uint32_t)ictime); - randomdate = rand(); - return randomdate; - } +int GeneratingRandomNumber(void) +{ + int ictime, randomdate; + /* 生成随机数n-m -> rand()%(m-n+1)+n*/ + ictime = (int)time(NULL); + srand((uint32_t)ictime); + randomdate = rand(); + return randomdate; +} - /* 串口启动接口函数 开始*/ - void Collect_sensor_data() - { +/* 串口启动接口函数 开始*/ +void Collect_sensor_data() +{ #if 0 - int i; + int i; for (i = 0; i < MAX_SERIAL_DEV_NUM; i++) { @@ -3553,29 +3535,29 @@ int Gm_CtrlPtzCmd(u_char channel, uint32_t ptzcmd) } #endif #if 1 - static int ideletefile = 0; - time_t now; - struct tm t0; - const char *path = "/sdcard/log"; // 指定目录路径 - int days = 15; // 删除15天前的log文件 - - now = time(NULL); - localtime_r(&now, &t0); - if ((0 == t0.tm_hour) && (0 == ideletefile)) - { - delete_old_files(path, days); - ideletefile++; - } - if (0 < t0.tm_hour) - ideletefile = 0; -#endif - GM_StartSerialComm(); - } + static int ideletefile = 0; + time_t now; + struct tm t0; + const char *path = "/sdcard/log"; // 指定目录路径 + int days = 15; // 删除15天前的log文件 - void CameraPhotoCmd(int phototime, u_char channel, int cmdidx, u_char bImageSize, u_char presetno) + now = time(NULL); + localtime_r(&now, &t0); + if ((0 == t0.tm_hour) && (0 == ideletefile)) { + delete_old_files(path, days); + ideletefile++; + } + if (0 < t0.tm_hour) + ideletefile = 0; +#endif + GM_StartSerialComm(); +} + +void CameraPhotoCmd(int phototime, u_char channel, int cmdidx, u_char bImageSize, u_char presetno) +{ #if 0 - int i; + int i; //speed_t baudrate; for (i = 0; i < MAX_SERIAL_DEV_NUM; i++) @@ -3605,188 +3587,188 @@ int Gm_CtrlPtzCmd(u_char channel, uint32_t ptzcmd) sleep(10); } #endif - srdt.bImageSize = bImageSize; - srdt.presetno = presetno; - srdt.sendphototime = phototime; - GM_StartSerialCameraPhoto(1, cmdidx); - } - /* 串口启动接口函数 结束*/ + srdt.bImageSize = bImageSize; + srdt.presetno = presetno; + srdt.sendphototime = phototime; + GM_StartSerialCameraPhoto(1, cmdidx); +} +/* 串口启动接口函数 结束*/ - /* 数据和图片采集数据返回函数 开始*/ - int GetWeatherData(Data_DEF *data, int datano) - { - int i; +/* 数据和图片采集数据返回函数 开始*/ +int GetWeatherData(Data_DEF *data, int datano) +{ + int i; - if (NULL == data) - return -1; - if ((AirTempNo > datano) || (datano > OpticalRadiationNo)) - return -1; - data->EuValue = weatherpntmsg[datano].EuValue; - data->AiState = weatherpntmsg[datano].AiState; - if ((SER_SAMPLEFAIL == data->AiState) || (SAMPLINGSUCCESS == data->AiState)) - { - weatherpntmsg[datano].AiState = SER_IDLE; - return 2; - } - return 1; + if (NULL == data) + return -1; + if ((AirTempNo > datano) || (datano > OpticalRadiationNo)) + return -1; + data->EuValue = weatherpntmsg[datano].EuValue; + data->AiState = weatherpntmsg[datano].AiState; + if ((SER_SAMPLEFAIL == data->AiState) || (SAMPLINGSUCCESS == data->AiState)) + { + weatherpntmsg[datano].AiState = SER_IDLE; + return 2; } + return 1; +} - int GetAirTempData(Data_DEF *airt) +int GetAirTempData(Data_DEF *airt) +{ + if (NULL == airt) + return -1; + airt->EuValue = weatherpntmsg[AirTempNo].EuValue; + airt->AiState = weatherpntmsg[AirTempNo].AiState; + if ((SER_SAMPLEFAIL == airt->AiState) || (SAMPLINGSUCCESS == airt->AiState)) { - if (NULL == airt) - return -1; - airt->EuValue = weatherpntmsg[AirTempNo].EuValue; - airt->AiState = weatherpntmsg[AirTempNo].AiState; - if ((SER_SAMPLEFAIL == airt->AiState) || (SAMPLINGSUCCESS == airt->AiState)) - { - weatherpntmsg[AirTempNo].AiState = SER_IDLE; - return 2; - } - return 1; + weatherpntmsg[AirTempNo].AiState = SER_IDLE; + return 2; } + return 1; +} - int GetHumidityData(Data_DEF *airt) +int GetHumidityData(Data_DEF *airt) +{ + if (NULL == airt) + return -1; + airt->EuValue = weatherpntmsg[HumidityNo].EuValue; + airt->AiState = weatherpntmsg[HumidityNo].AiState; + if ((SER_SAMPLEFAIL == airt->AiState) || (SAMPLINGSUCCESS == airt->AiState)) { - if (NULL == airt) - return -1; - airt->EuValue = weatherpntmsg[HumidityNo].EuValue; - airt->AiState = weatherpntmsg[HumidityNo].AiState; - if ((SER_SAMPLEFAIL == airt->AiState) || (SAMPLINGSUCCESS == airt->AiState)) - { - weatherpntmsg[HumidityNo].AiState = SER_IDLE; - return 2; - } - return 1; + weatherpntmsg[HumidityNo].AiState = SER_IDLE; + return 2; } + return 1; +} - int GetWindSpeedData(Data_DEF *airt) +int GetWindSpeedData(Data_DEF *airt) +{ + if (NULL == airt) + return -1; + airt->EuValue = weatherpntmsg[WindSpeedNo].EuValue; + airt->AiState = weatherpntmsg[WindSpeedNo].AiState; + if ((SER_SAMPLEFAIL == airt->AiState) || (SAMPLINGSUCCESS == airt->AiState)) { - if (NULL == airt) - return -1; - airt->EuValue = weatherpntmsg[WindSpeedNo].EuValue; - airt->AiState = weatherpntmsg[WindSpeedNo].AiState; - if ((SER_SAMPLEFAIL == airt->AiState) || (SAMPLINGSUCCESS == airt->AiState)) - { - weatherpntmsg[WindSpeedNo].AiState = SER_IDLE; - return 2; - } - return 1; + weatherpntmsg[WindSpeedNo].AiState = SER_IDLE; + return 2; } + return 1; +} - int GetWindDirectionData(Data_DEF *airt) +int GetWindDirectionData(Data_DEF *airt) +{ + if (NULL == airt) + return -1; + airt->EuValue = weatherpntmsg[WindDirectionNo].EuValue; + airt->AiState = weatherpntmsg[WindDirectionNo].AiState; + if ((SER_SAMPLEFAIL == airt->AiState) || (SAMPLINGSUCCESS == airt->AiState)) { - if (NULL == airt) - return -1; - airt->EuValue = weatherpntmsg[WindDirectionNo].EuValue; - airt->AiState = weatherpntmsg[WindDirectionNo].AiState; - if ((SER_SAMPLEFAIL == airt->AiState) || (SAMPLINGSUCCESS == airt->AiState)) - { - weatherpntmsg[WindDirectionNo].AiState = SER_IDLE; - return 2; - } - return 1; + weatherpntmsg[WindDirectionNo].AiState = SER_IDLE; + return 2; } + return 1; +} - int GetRainfallData(Data_DEF *airt) +int GetRainfallData(Data_DEF *airt) +{ + if (NULL == airt) + return -1; + airt->EuValue = weatherpntmsg[RainfallNo].EuValue; + airt->AiState = weatherpntmsg[RainfallNo].AiState; + if ((SER_SAMPLEFAIL == airt->AiState) || (SAMPLINGSUCCESS == airt->AiState)) { - if (NULL == airt) - return -1; - airt->EuValue = weatherpntmsg[RainfallNo].EuValue; - airt->AiState = weatherpntmsg[RainfallNo].AiState; - if ((SER_SAMPLEFAIL == airt->AiState) || (SAMPLINGSUCCESS == airt->AiState)) - { - weatherpntmsg[RainfallNo].AiState = SER_IDLE; - return 2; - } - return 1; + weatherpntmsg[RainfallNo].AiState = SER_IDLE; + return 2; } + return 1; +} - int GetAtmosData(Data_DEF *airt) +int GetAtmosData(Data_DEF *airt) +{ + if (NULL == airt) + return -1; + airt->EuValue = weatherpntmsg[AtmosNo].EuValue; + airt->AiState = weatherpntmsg[AtmosNo].AiState; + if ((SER_SAMPLEFAIL == airt->AiState) || (SAMPLINGSUCCESS == airt->AiState)) { - if (NULL == airt) - return -1; - airt->EuValue = weatherpntmsg[AtmosNo].EuValue; - airt->AiState = weatherpntmsg[AtmosNo].AiState; - if ((SER_SAMPLEFAIL == airt->AiState) || (SAMPLINGSUCCESS == airt->AiState)) - { - weatherpntmsg[AtmosNo].AiState = SER_IDLE; - return 2; - } - return 1; + weatherpntmsg[AtmosNo].AiState = SER_IDLE; + return 2; } + return 1; +} - int GetOpticalRadiationData(Data_DEF *airt) +int GetOpticalRadiationData(Data_DEF *airt) +{ + if (NULL == airt) + return -1; + airt->EuValue = weatherpntmsg[OpticalRadiationNo].EuValue; + airt->AiState = weatherpntmsg[OpticalRadiationNo].AiState; + if ((SER_SAMPLEFAIL == airt->AiState) || (SAMPLINGSUCCESS == airt->AiState)) { - if (NULL == airt) - return -1; - airt->EuValue = weatherpntmsg[OpticalRadiationNo].EuValue; - airt->AiState = weatherpntmsg[OpticalRadiationNo].AiState; - if ((SER_SAMPLEFAIL == airt->AiState) || (SAMPLINGSUCCESS == airt->AiState)) - { - weatherpntmsg[OpticalRadiationNo].AiState = SER_IDLE; - return 2; - } - return 1; + weatherpntmsg[OpticalRadiationNo].AiState = SER_IDLE; + return 2; } + return 1; +} - int GetPullValue(int devno, Data_DEF *data) +int GetPullValue(int devno, Data_DEF *data) +{ + if (NULL == data) + return -1; + if ((0 > devno) || (MAX_SERIAL_DEV_NUM < devno)) + return -1; + if (RALLY_PROTOCOL != devparam[devno].ProtocolIdx) + return -1; + data->EuValue = srdt.ms_dev[devno].aiValue[0].EuValue; + data->AiState = srdt.ms_dev[devno].aiValue[0].AiState; + if ((SER_SAMPLEFAIL == data->AiState) || (SAMPLINGSUCCESS == data->AiState)) { - if (NULL == data) - return -1; - if ((0 > devno) || (MAX_SERIAL_DEV_NUM < devno)) - return -1; - if (RALLY_PROTOCOL != devparam[devno].ProtocolIdx) - return -1; - data->EuValue = srdt.ms_dev[devno].aiValue[0].EuValue; - data->AiState = srdt.ms_dev[devno].aiValue[0].AiState; - if ((SER_SAMPLEFAIL == data->AiState) || (SAMPLINGSUCCESS == data->AiState)) - { - srdt.ms_dev[devno].aiValue[0].AiState = SER_IDLE; - return 2; - } - return 1; + srdt.ms_dev[devno].aiValue[0].AiState = SER_IDLE; + return 2; } + return 1; +} - int GetAngleValue(int devno, Data_DEF *data, int Xy) - { - if (NULL == data) - return -1; - if ((0 > devno) || (MAX_SERIAL_DEV_NUM < devno)) - return -1; - if (SLANT_PROTOCOL != devparam[devno].ProtocolIdx) - return -1; - if ((0 > Xy) || (1 < Xy)) - return -1; +int GetAngleValue(int devno, Data_DEF *data, int Xy) +{ + if (NULL == data) + return -1; + if ((0 > devno) || (MAX_SERIAL_DEV_NUM < devno)) + return -1; + if (SLANT_PROTOCOL != devparam[devno].ProtocolIdx) + return -1; + if ((0 > Xy) || (1 < Xy)) + return -1; - data->EuValue = srdt.ms_dev[devno].aiValue[Xy].EuValue; - data->AiState = srdt.ms_dev[devno].aiValue[Xy].AiState; - if ((SER_SAMPLEFAIL == data->AiState) || (SAMPLINGSUCCESS == data->AiState)) - { - srdt.ms_dev[devno].aiValue[Xy].AiState = SER_IDLE; - return 2; - } - return 1; + data->EuValue = srdt.ms_dev[devno].aiValue[Xy].EuValue; + data->AiState = srdt.ms_dev[devno].aiValue[Xy].AiState; + if ((SER_SAMPLEFAIL == data->AiState) || (SAMPLINGSUCCESS == data->AiState)) + { + srdt.ms_dev[devno].aiValue[Xy].AiState = SER_IDLE; + return 2; } + return 1; +} - int GetImage(int devno, IMAGE_DEF *photo) +int GetImage(int devno, IMAGE_DEF *photo) +{ + if (NULL == photo) + return -1; + if ((0 > devno) || (MAX_SERIAL_DEV_NUM < devno)) + return -1; + if ((PELCO_D_PROTOCOL != devparam[devno].ProtocolIdx) && (PELCO_P_PROTOCOL != devparam[devno].ProtocolIdx) && (SERIALCAMERA_PROTOCOL != devparam[devno].ProtocolIdx)) + return -1; + photo->presetno = srdt.ms_dev[devno].image.presetno; + photo->phototime = srdt.ms_dev[devno].image.phototime; + memset(photo->photoname, 0, sizeof(photo->photoname)); + memmove(photo->photoname, srdt.ms_dev[devno].image.photoname, sizeof(photo->photoname)); + photo->imagelen = srdt.ms_dev[devno].image.imagelen; + photo->state = srdt.ms_dev[devno].image.state; + if ((SER_SAMPLEFAIL == photo->state) || (SAMPLINGSUCCESS == photo->state)) { - if (NULL == photo) - return -1; - if ((0 > devno) || (MAX_SERIAL_DEV_NUM < devno)) - return -1; - if ((PELCO_D_PROTOCOL != devparam[devno].ProtocolIdx) && (PELCO_P_PROTOCOL != devparam[devno].ProtocolIdx) && (SERIALCAMERA_PROTOCOL != devparam[devno].ProtocolIdx)) - return -1; - photo->presetno = srdt.ms_dev[devno].image.presetno; - photo->phototime = srdt.ms_dev[devno].image.phototime; - memset(photo->photoname, 0, sizeof(photo->photoname)); - memmove(photo->photoname, srdt.ms_dev[devno].image.photoname, sizeof(photo->photoname)); - photo->imagelen = srdt.ms_dev[devno].image.imagelen; - photo->state = srdt.ms_dev[devno].image.state; - if ((SER_SAMPLEFAIL == photo->state) || (SAMPLINGSUCCESS == photo->state)) - { - srdt.ms_dev[devno].image.state = SER_IDLE; - return 2; - } - return 1; + srdt.ms_dev[devno].image.state = SER_IDLE; + return 2; } - /* 数据和图片采集数据返回函数 结束*/ \ No newline at end of file + return 1; +} +/* 数据和图片采集数据返回函数 结束*/ \ No newline at end of file