diff --git a/app/src/main/cpp/SensorsProtocol.cpp b/app/src/main/cpp/SensorsProtocol.cpp index b7feb1dd..0bf61514 100644 --- a/app/src/main/cpp/SensorsProtocol.cpp +++ b/app/src/main/cpp/SensorsProtocol.cpp @@ -28,8 +28,8 @@ #include -SIO_PARAM_SERIAL_DEF serialport[MAX_SERIAL_PORT_NUM]; -SERIAL_PARAM devparam[MAX_SERIAL_DEV_NUM]; +SIO_PARAM_SERIAL_DEF serialport; +SERIAL_PARAM devparam; SRDT_DEF srdt; AI_DEF weatherpntmsg[WEATHER_DATA_NUM]; AI_DEF rallypntmsg[6][RALLY_DATA_NUM]; @@ -93,412 +93,6 @@ static void setCam3V3Enable(bool enabled) #endif } -#if 0 -/********************************************************************************* -* 气象数据处理 * -**********************************************************************************/ -static void PortDataProcess(void) -{ - float fvalue, fcorvalue, *fvalua, frnb/*, fwind*/; - //uint16_t uDevAddr; - unsigned char cmdidx; - int i, j, aipnt, datanum; - SIO_PARAM_SERIAL_DEF *pPortParam; - char szbuf[64]; - - pPortParam = &serialport; - //取出装置地址,开始处理地址+++ - if (0x02 == pPortParam->m_au8RecvBuf[5]) - { - //pPortParam->devaddr = pPortParam->m_au8RecvBuf[4]; - return; - } - cmdidx = pPortParam->m_au8RecvBuf[5]; -#if 0 - aipnt = pPortParam->SameTypeDevIdx; - uDevAddr = serialport->m_au8RecvBuf[4]; - if (0 == srdt.IsReadWireTem) - { - if (uDevAddr != pPortParam->devaddr) - return; - } -#endif - fvalua = &fvalue; - datanum = pPortParam->m_au8RecvBuf[6]; - if ((0x08 != cmdidx) && (0x09 != cmdidx)) - return; - - for (i = 0, j = 7; (i < datanum) && (j < 6 + pPortParam->m_au8RecvBuf[1]); i++, j += 5) - { - if (0x08 == cmdidx) - fvalue = (pPortParam->m_au8RecvBuf[j + 1] << 24) + (pPortParam->m_au8RecvBuf[j + 2] << 16) - + (pPortParam->m_au8RecvBuf[j + 3] << 8) + pPortParam->m_au8RecvBuf[j + 4]; - else - { - *(u_char *)fvalua = pPortParam->m_au8RecvBuf[j + 4]; - *((u_char *)fvalua + 1) = pPortParam->m_au8RecvBuf[j + 3]; - *((u_char *)fvalua + 2) = pPortParam->m_au8RecvBuf[j + 2]; - *((u_char *)fvalua + 3) = pPortParam->m_au8RecvBuf[j + 1]; - } - switch (pPortParam->m_au8RecvBuf[j]) - { - case 1: /*温度*/ - weatherpntmsg[0] = fvalue; - LOGE("温度:%0.3f ", fvalue); - break; - case 2: /*气压*/ - weatherpntmsg[5] = fvalue; - LOGE("气压:%0.3f ", fvalue); - break; - case 3: /*湿度*/ - weatherpntmsg[1] = fvalue; - LOGE("湿度:%0.3f ", fvalue); - break; - case 4: /*雨量*/ - break; - case 5: /*日照*/ - break; - case 6: /*风速*/ - weatherpntmsg[2] = fvalue; - LOGE("风速:%0.3f ", fvalue); - break; - case 7: /*风向*/ - weatherpntmsg[3] = fvalue; - LOGE("风向:%0.3f ", fvalue); - break; - case 8: /*拉力*/ - case 9: /*倾角传感器X轴倾角*/ - case 10: /*倾角传感器Y轴倾角*/ - case 11: /*测温球导线温度*/ - case 12: /*测温球内部温度*/ - break; - case 13: /*测温球导线X轴倾角*/ - break; - case 14: /*测温球导线Y轴倾角*/ - break; - case 15: /*测温球导线电流*/ - break; - case 16: /*测温球电池电压*/ - break; - case 17: /*A相泄漏电流平均值;*/ - break; - case 18: /*A相泄漏电流最大值;*/ - break; - case 19: /*A相超过3mA的脉冲频次*/ - break; - case 20: /*A相超过10mA的脉冲频次*/ - break; - case 21: /*B相泄漏电流平均值;*/ - break; - case 22: /*B相泄漏电流最大值;*/ - break; - case 23: /*B相超过3mA的脉冲频次*/ - break; - case 24: /*B相超过10mA的脉冲频次*/ - case 25: /*C相泄漏电流平均值;*/ - case 26: /*C相泄漏电流最大值;*/ - case 27: /*C相超过3mA的脉冲频次*/ - case 28: /*C相超过10mA的脉冲频次*/ - break; - } - } -} - -/*************************************************************** -* 按照协议格式化接收数据 * -***************************************************************/ -static void RecvData(u_char *buf, int len)// 规约读数据处理 -{ - int i, ictime; - //uint16_t crc, check; - SIO_PARAM_SERIAL_DEF *pPortParam; - - pPortParam = &serialport; - ictime = (int)time(NULL); - - if (pPortParam->m_iRecvLen == 0) - { - pPortParam->iRecvTime = ictime; - } - else - { - if ((ictime - pPortParam->iRecvTime > 6) || (ictime - pPortParam->iRecvTime < 0)) - pPortParam->iRecvTime = ictime; - else if (ictime - pPortParam->iRecvTime > 2) - { - pPortParam->m_iRecvLen = 0; - pPortParam->m_iRevStatus = 0; - } - } - - for (i = 0; i < len; i++) - { - switch (pPortParam->m_iRevStatus) - { - 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++; - break; - case 2: // len2 - pPortParam->m_au8RecvBuf[pPortParam->m_iRecvLen++] = buf[i]; - if (buf[i] == pPortParam->m_au8RecvBuf[pPortParam->m_iRecvLen - 2]) - { - pPortParam->m_iRevStatus++; - pPortParam->m_iNeedRevLength = buf[i] + 5; - } - else - pPortParam->m_iRevStatus = 18; - break; - 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(CheckLpcError(serialport->m_au8RecvBuf, pPortParam->m_iRecvLen) == TRUE) - { - PortDataProcess(); - pPortParam->m_iRevStatus = 0; - pPortParam->RevCmdFlag = 1; - } - 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; - pPortParam->m_iRecvLen = 0; - } - else - { - pPortParam->m_au8RecvBuf[pPortParam->m_iRecvLen++] = buf[i]; - if (pPortParam->m_iRecvLen > 200) - { - pPortParam->m_iRecvLen = 0; - } - } - break; - } - } -} - -static int64_t get_msec(void) -{ - struct timeval tv; - - gettimeofday(&tv, NULL); - int64_t time_in_msec = tv.tv_sec * 1000 + tv.tv_usec / 1000; - - return time_in_msec; -} -//int inum =0; -//int itimecnt=0; -static int weather_comm(SERIAL_PARAM weatherport) -{ - int fd = -1; - int len, i, ret, icnt = 0; - int64_t ictime, iruntime, isendtime, irecvtime; - unsigned char sendbuf[] = { 0x68,0x00,0x00,0x68,0x01,0x09,0x0a,0x16 }; - char recvbuf[256], szbuf[512]; - //char serial_description[] = "/dev/ttyS0"; - -#if 0 - DIR *dir = opendir("/dev"); - if (dir == NULL) { - LOGE("_test_ opendir"); - return -1; - } - - // 读取目录项 - struct dirent *entry; - while ((entry = readdir(dir)) != NULL) { - // 过滤出串口设备,通常以"ttyS"或"ttyUSB"开头 - if ((strncmp(entry->d_name, "ttyS2", 5) == 0) || - (strncmp(entry->d_name, "ttyS0", 5) == 0)) { - LOGE("_test_ Found serial port: %s\n", entry->d_name); - } - } - - // 关闭目录 - closedir(dir); -#endif - serialport.RevCmdFlag = 1; - serialport.m_iRecvLen = 0; - serialport.m_iRevStatus = 0; - - set12VEnable(true); - setCam3V3Enable(true); - setRS485Enable(true); - sleep(2); - //ictime = (int)time(NULL); - ictime = get_msec(); - for (;;) - { - if (fd < 0) - { - fd = open(weatherport.pathname, O_RDWR | O_NDELAY); - //fd = open(weatherport.pathname, O_RDWR | O_NOCTTY); - if (fd < 0) - { - LOGE("_test_ open serial error \n"); - perror(weatherport.pathname); - return -1; - } - - ret = set_port_attr(fd, weatherport.baudrate, weatherport.databit, weatherport.stopbit, weatherport.parity, 0, 0);/*9600 8n1 */ - if (ret < 0) - { - LOGE("_test_ set uart arrt faile \n"); - return -1; - } - } - - usleep(10000); - //iruntime = (int)time(NULL); - iruntime = get_msec(); - if ((iruntime - ictime > 120000) || (iruntime - ictime < 0)) - ictime = iruntime; - if (iruntime - ictime > 20000) - { - memset(szbuf, 0, sizeof(szbuf)); - sprintf(szbuf, "气象采样时间=%0.3f秒,停止采样!", (iruntime - ictime) / 1000.0); - LOGE("%s", szbuf); - break; - } - - if (1 == serialport.RevCmdFlag) - { - set485WriteMode(); - - len = write(fd, sendbuf, sizeof(sendbuf));/* 向串囗发送字符串 */ - serialport.RevCmdFlag = 0; - LOGE("发送命令时间差%ld毫秒", get_msec() - isendtime); - //isendtime = time(NULL); - isendtime = get_msec(); - if (len < 0) { - LOGE("write data error \n"); - return -1; - } - else { - memset(szbuf, 0, sizeof(szbuf)); - sprintf(szbuf, "Send:"); - for (i = 0; i < len; i++) { - sprintf(szbuf, "%s %02X", szbuf, sendbuf[i]); - } - LOGE("%s", szbuf); - //icnt = 0; - //inum++; - } - tcdrain(fd); - //usleep(50000); - } - else - { - //irecvtime = time(NULL); - irecvtime = get_msec(); - if ((irecvtime - isendtime > 6000) || (irecvtime - isendtime < 0)) - isendtime = irecvtime; - if (irecvtime - isendtime > 300) - { - LOGE("传感器超过%ld毫秒未应答", irecvtime - isendtime); - serialport.RevCmdFlag = 1; - serialport.m_iRecvLen = 0; - serialport.m_iRevStatus = 0; - close(fd); - fd = -1; - continue; - } - } - set485ReadMode(); - memset(recvbuf, 0, sizeof(recvbuf)); - len = read(fd, recvbuf, sizeof(recvbuf));/* 在串口读取字符串 */ - if (len < 0) { - LOGE("serial read error \n"); - continue; - } - if (0 == len) - { - //icnt++; - continue; - } - memset(szbuf, 0, sizeof(szbuf)); - sprintf(szbuf, "Recv:"); - for (i = 0; i < len; i++) { - sprintf(szbuf, "%s %02X", szbuf, recvbuf[i]); - } - __android_log_print(ANDROID_LOG_INFO, "serial", "%s", szbuf); - RecvData((u_char*)recvbuf, len); - //LOGE("一周期空循环次数%d, 读取次数%d, 时间:%d %d", icnt, inum, (int)time(NULL), itimecnt); - icnt = 0; - //serialport.RevCmdFlag =1; - } - - close(fd); - set12VEnable(false); - setCam3V3Enable(false); - setRS485Enable(false); - - //exit(-1); - return(0); -} - -int serial_port_comm() -{ - SERIAL_PARAM portparm; - - //struct timeval tv; - - //gettimeofday(&tv, NULL); - //int64_t time_in_microseconds = tv.tv_sec * 1000000 + tv.tv_usec; - - //LOGE("Current time in microseconds: %ld\n", time_in_microseconds); - -#if 1 - memset(portparm.pathname, 0, sizeof(portparm.pathname)); - sprintf(portparm.pathname, "/dev/ttyS0"); - portparm.parity = 'N'; - portparm.databit = 8; - portparm.baudrate = B9600; - memset(portparm.stopbit, 0, sizeof(portparm.stopbit)); - sprintf(portparm.stopbit, "1"); -#endif - //itimecnt = (int)time(NULL); - - //for(;;) - weather_comm(portparm); - return 0; -} -#endif - static speed_t getBaudrate(unsigned int baudrate) { switch (baudrate) { @@ -732,46 +326,38 @@ void BytestreamLOG(int commid, char* describe, u_char* buf, int len, char flag) } // 打开串口通讯 -void Gm_OpenSerialPort(int devidx) +void Gm_OpenSerialPort(void) { int fd = -1; char szbuf[512]; - if ((devidx < 0) || (devidx >= MAX_SERIAL_DEV_NUM)) - return; memset(szbuf, 0, sizeof(szbuf)); - if (serialport[devparam[devidx].commid].fd <= 0) + if (serialport.fd <= 0) { - fd = open(devparam[devidx].pathname, O_RDWR | O_NDELAY); + fd = open(devparam.pathname, O_RDWR | O_NDELAY); if (fd < 0) { - sprintf(szbuf, "装置%d 打开串口%d失败!fd=%d", devidx + 1, devparam[devidx].commid + 1, fd); - DebugLog(devparam[devidx].commid, szbuf, 'E'); + sprintf(szbuf, "打开串口%d失败!fd=%d", devparam.commid + 1, fd); + DebugLog(devparam.commid, szbuf, 'E'); return; } - sprintf(szbuf, "装置%d 打开串口%d %s成功!fd=%d", devidx + 1, devparam[devidx].commid + 1, devparam[devidx].pathname, fd); - DebugLog(devparam[devidx].commid, szbuf, 'I'); - serialport[devparam[devidx].commid].fd = fd; + sprintf(szbuf, "打开串口%d %s成功!fd=%d", devparam.commid + 1, devparam.pathname, fd); + DebugLog(devparam.commid, szbuf, 'I'); + serialport.fd = fd; return; } - sprintf(szbuf, "装置%d 串口%d %s已经打开!fd=%d", devidx + 1, devparam[devidx].commid + 1, devparam[devidx].pathname, serialport[devparam[devidx].commid].fd); - DebugLog(devparam[devidx].commid, szbuf, 'I'); + sprintf(szbuf, "串口%d %s已经打开!fd=%d", devparam.commid + 1, devparam.pathname, serialport.fd); + DebugLog(devparam.commid, szbuf, 'I'); } // 关闭串口通讯 void Gm_CloseSerialPort() { - int i; - - for (i = 0; i < MAX_SERIAL_PORT_NUM; i++) + if (serialport.fd > 0) { - if (serialport[i].fd > 0) - { - close(serialport[i].fd); - serialport[i].fd = -1; - } + close(serialport.fd); + serialport.fd = -1; } - } /******************************************************************************* @@ -783,12 +369,12 @@ void Gm_CloseSerialPort() *********************************************************************************/ int GM_SerialComSend(unsigned char * cSendBuf, size_t nSendLen, int commid) { - int i, len; + int len; char szbuf[512]; memset(szbuf, 0, sizeof(szbuf)); - len = write(serialport[commid].fd, cSendBuf, (size_t)nSendLen);/* 向串囗发送字符串 */ - //serialport[commid].RevCmdFlag = 0; + len = write(serialport.fd, cSendBuf, (size_t)nSendLen);/* 向串囗发送字符串 */ + //serialport.RevCmdFlag = 0; //LOGE("发送命令时间差%ld毫秒", get_msec() - isendtime); //isendtime = time(NULL); //isendtime = get_msec(); @@ -805,24 +391,25 @@ int GM_SerialComSend(unsigned char * cSendBuf, size_t nSendLen, int commid) return len; } -int Gm_SetSerialPortParam(int commid) +int Gm_SetSerialPortParam() { int ret; char szbuf[128]; SERIAL_PARAM *pPortParam = NULL; - pPortParam = &devparam[srdt.curdevidx[commid]]; - ret = set_port_attr(serialport[commid].fd, pPortParam->baudrate, pPortParam->databit, pPortParam->stopbit, pPortParam->parity, 0, 0);/*9600 8n1 */ + pPortParam = &devparam; + ret = set_port_attr(serialport.fd, pPortParam->baudrate, pPortParam->databit, pPortParam->stopbit, pPortParam->parity, 0, 0);/*9600 8n1 */ if (ret < 0) { memset(szbuf, 0, sizeof(szbuf)); - sprintf(szbuf, "串口%d 波特率等参数设置错误!", commid + 1); - DebugLog(commid, szbuf, 'E'); + sprintf(szbuf, "串口%d 波特率等参数设置错误!", pPortParam->commid + 1); + DebugLog(pPortParam->commid, szbuf, 'E'); return -1; } return ret; } +#if 0 void Gm_InitSerialComm_Test() { int i, j; @@ -995,92 +582,77 @@ void Gm_InitSerialComm_Test() //#endif Gm_InitSerialComm(sensorParam, "/sdcard/photo/"); } +#endif // 初始化所有串口及所接传感器的配置 void Gm_InitSerialComm(SENSOR_PARAM *sensorParam, char *filedir) { - int i; char szbuf[128]; - for (i = 0; i < MAX_SERIAL_DEV_NUM; i++) - { - memset(&devparam[i], 0, sizeof(SERIAL_PARAM)); - memset(&srdt, 0, sizeof(srdt)); - srdt.camerauseserial = -1; - } - for (i = 0; i < MAX_SERIAL_PORT_NUM; i++) - { - memset(&serialport[i], 0, sizeof(SIO_PARAM_SERIAL_DEF)); - serialport[i].fd = -1; - serialport[i].lsendtime = get_msec(); - } + memset(&devparam, 0, sizeof(SERIAL_PARAM)); + memset(&srdt, 0, sizeof(srdt)); + srdt.camerauseserial = -1; + memset(&serialport, 0, sizeof(SIO_PARAM_SERIAL_DEF)); + serialport.fd = -1; + serialport.lsendtime = get_msec(); if (NULL == sensorParam) return; //memset(sensorParam, 0, sizeof(sensorParam)); //Gm_InitSerialComm_Test(sensorParam); - for (i = 0; i < MAX_SERIAL_DEV_NUM; i++) - { - devparam[i].IsNoInsta = sensorParam[i].IsNoInsta; - if (0 == sensorParam[i].IsNoInsta) - continue; - devparam[i].ProtocolIdx = sensorParam[i].SensorsType; - devparam[i].devaddr = sensorParam[i].devaddr; - devparam[i].baudrate = getBaudrate(sensorParam[i].baudrate); - memset(devparam[i].pathname, 0, sizeof(devparam[i].pathname)); - memmove(devparam[i].pathname, sensorParam[i].pathname, sizeof(devparam[i].pathname)); - devparam[i].databit = sensorParam[i].databit; - devparam[i].stopbit = (int)(sensorParam[i].stopbit * 10); - devparam[i].CameraChannel = sensorParam[i].CameraChannel; - devparam[i].Phase = sensorParam[i].Phase; - } + devparam.IsNoInsta = sensorParam->IsNoInsta; + if (0 == sensorParam->IsNoInsta) + return; + devparam.ProtocolIdx = sensorParam->SensorsType; + devparam.devaddr = sensorParam->devaddr; + devparam.baudrate = getBaudrate(sensorParam->baudrate); + memset(devparam.pathname, 0, sizeof(devparam.pathname)); + memmove(devparam.pathname, sensorParam->pathname, sizeof(devparam.pathname)); + devparam.databit = sensorParam->databit; + devparam.stopbit = (int)(sensorParam->stopbit * 10); + devparam.CameraChannel = sensorParam->CameraChannel; + devparam.Phase = sensorParam->Phase; #if 1 //******************** 端口基本信息 ************************ - for (i = 0; i < MAX_SERIAL_DEV_NUM; i++) + memset(szbuf, 0, sizeof(szbuf)); + switch (sensorParam->SensorsType) { - 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"); + break; + case WEATHER_PROTOCOL: + sprintf(szbuf, "传感器是气象传感器!"); + break; + case SERIALCAMERA_PROTOCOL: + sprintf(szbuf, "传感器是串口摄像机!"); + break; + case PELCO_P_PROTOCOL: + sprintf(szbuf, "传感器是PELCO_P摄像机!"); + break; + case SLANT_PROTOCOL: + sprintf(szbuf, "传感器是倾角!"); + break; + case WIND_PROTOCOL: + sprintf(szbuf, "传感器是风速风向传感器"); + break; + case RALLY_PROTOCOL: + sprintf(szbuf, "传感器是拉力!"); + break; + case PELCO_D_PROTOCOL: + sprintf(szbuf, "传感器是PELCO_D摄像机!"); + break; + default: + sprintf(szbuf, "没有接传感器!"); + break; + } - sprintf(szbuf, "%s 地址%d!;", szbuf, sensorParam[i].devaddr); - if (0 == sensorParam[i].IsNoInsta) - sprintf(szbuf, "没有启用!;"); - else - { - sprintf(szbuf, "%s 已启用!;", szbuf); - DebugLog(8, szbuf, 'I'); - } + sprintf(szbuf, "%s 地址%d!;", szbuf, sensorParam->devaddr); + if (0 == sensorParam->IsNoInsta) + sprintf(szbuf, "没有启用!;"); + else + { + sprintf(szbuf, "%s 已启用!;", szbuf); + DebugLog(8, szbuf, 'I'); } if (NULL == filedir) return; @@ -1220,46 +792,42 @@ void testComm() // 通过传感器名称来确定使用的串口号 void FindDevUseSerialCommNo() { - int i; - for (i = 0; i < MAX_SERIAL_DEV_NUM; i++) - { - if (0 == devparam[i].IsNoInsta) - 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; - } + if (0 == devparam.IsNoInsta) + return; + switch (devparam.ProtocolIdx) + { + case WEATHER_PROTOCOL: + case WIND_PROTOCOL: + //memset(devparam.pathname, 0, sizeof(devparam.pathname)); + /* 目前还不确定具体串口分配,暂时默认使用串口1*/ + //sprintf(devparam.pathname, "/dev/swk3"); + devparam.commid = 3; + break; + case SLANT_PROTOCOL: + //memset(devparam.pathname, 0, sizeof(devparam.pathname)); + /* 目前还不确定具体串口分配,暂时默认使用串口1*/ + //sprintf(devparam.pathname, "/dev/swk2"); + devparam.commid = 2; + break; + case RALLY_PROTOCOL: + //memset(devparam.pathname, 0, sizeof(devparam.pathname)); + /* 目前还不确定具体串口分配,暂时默认使用串口1*/ + //sprintf(devparam.pathname, "/dev/swk1"); + devparam.commid = 1; + break; + case PELCO_D_PROTOCOL: /* 摄像机协议*/ + case PELCO_P_PROTOCOL: /* 摄像机协议*/ + case SERIALCAMERA_PROTOCOL: /* 串口摄像机协议*/ + //memset(devparam.pathname, 0, sizeof(devparam.pathname)); + /* 目前还不确定//具体串口分配,暂时默认使用串口1*/ + //sprintf(devparam.pathname, "/dev/ttyS1"); + devparam.commid = 0; + srdt.camerauseserial = 0; + break; + default: + devparam.IsNoInsta = 0; + break; } } @@ -1274,21 +842,19 @@ void GM_StartSerialComm() //Gm_OpenSerialPower(); /* 不在这使用*/ //FindDevUseSerialCommNo(); // 初始化串口使用状态(需要考虑不同时间启用了摄像机使用) - for (i = 0; i < MAX_SERIAL_PORT_NUM; i++) - { - if (i == srdt.camerauseserial) - continue; + if (1 == srdt.camerauseserial) + return; + + serialport.Retry = 0; + serialport.RetryTime = 800; + serialport.WaitTime = 20; + serialport.m_iRevStatus = 0; + serialport.m_iRecvLen = 0; + serialport.m_iNeedRevLength = 0; + serialport.fd = -1; + memset(serialport.m_au8RecvBuf, 0, RECVDATA_MAXLENTH); // 接收数据缓存区 + ClearCmdFormPollCmdBuf(); - serialport[i].Retry = 0; - serialport[i].RetryTime = 800; - serialport[i].WaitTime = 20; - serialport[i].m_iRevStatus = 0; - serialport[i].m_iRecvLen = 0; - serialport[i].m_iNeedRevLength = 0; - serialport[i].fd = -1; - memset(serialport[i].m_au8RecvBuf, 0, RECVDATA_MAXLENTH); // 接收数据缓存区 - ClearCmdFormPollCmdBuf(i); - } #if 0/* 简化插入使用摄像机过程,摄像机使用单独的串口*/ else { @@ -1310,58 +876,56 @@ void GM_StartSerialComm() } } #endif - for (i = 0; i < MAX_SERIAL_DEV_NUM; i++) + if (0 == devparam.IsNoInsta) { - if (0 == devparam[i].IsNoInsta) - { - srdt.ms_dev[i].IsNeedSerial = 0; - continue; - } - memset(szbuf, 0, sizeof(szbuf)); - switch (devparam[i].ProtocolIdx) - { - case WEATHER_PROTOCOL: // 气象 + srdt.ms_dev.IsNeedSerial = 0; + return; + } + memset(szbuf, 0, sizeof(szbuf)); + switch (devparam.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; + srdt.ms_dev.IsNeedSerial = 1; + srdt.ms_dev.FirstCmdTimeCnt = get_msec(); + srdt.ms_dev.recvdatacnt = 0; for (j = 0; j < WEATHER_DATA_NUM; j++) - srdt.ms_dev[i].aiValue[j].AiState = SER_STARTSAMPLE; + srdt.ms_dev.aiValue[j].AiState = SER_STARTSAMPLE; break; - case RALLY_PROTOCOL: /* 拉力*/ + case RALLY_PROTOCOL: /* 拉力*/ sprintf(szbuf, "拉力"); - srdt.ms_dev[i].IsNeedSerial = 1; - srdt.ms_dev[i].FirstCmdTimeCnt = get_msec(); - srdt.ms_dev[i].recvdatacnt = 0; + srdt.ms_dev.IsNeedSerial = 1; + srdt.ms_dev.FirstCmdTimeCnt = get_msec(); + srdt.ms_dev.recvdatacnt = 0; for (j = 0; j < RALLY_DATA_NUM; j++) - srdt.ms_dev[i].aiValue[j].AiState = SER_STARTSAMPLE; + srdt.ms_dev.aiValue[j].AiState = SER_STARTSAMPLE; break; - case WIND_PROTOCOL: /* 风速风向*/ + case WIND_PROTOCOL: /* 风速风向*/ sprintf(szbuf, "风速风向"); - srdt.ms_dev[i].IsNeedSerial = 1; - srdt.ms_dev[i].FirstCmdTimeCnt = get_msec(); + srdt.ms_dev.IsNeedSerial = 1; + srdt.ms_dev.FirstCmdTimeCnt = get_msec(); for (j = 0; j < WEATHER_DATA_NUM; j++) - srdt.ms_dev[i].aiValue[j].AiState = SER_STARTSAMPLE; + srdt.ms_dev.aiValue[j].AiState = SER_STARTSAMPLE; break; - case SLANT_PROTOCOL: /* 倾角*/ + case SLANT_PROTOCOL: /* 倾角*/ sprintf(szbuf, "倾角"); - srdt.ms_dev[i].IsNeedSerial = 1; - srdt.ms_dev[i].FirstCmdTimeCnt = get_msec(); - srdt.ms_dev[i].recvdatacnt = 0; + srdt.ms_dev.IsNeedSerial = 1; + srdt.ms_dev.FirstCmdTimeCnt = get_msec(); + srdt.ms_dev.recvdatacnt = 0; for (j = 0; j < SLANTANGLE_DATA_NUM; j++) - srdt.ms_dev[i].aiValue[j].AiState = SER_STARTSAMPLE; + srdt.ms_dev.aiValue[j].AiState = SER_STARTSAMPLE; break; - case PELCO_D_PROTOCOL: /* 摄像机协议*/ - case PELCO_P_PROTOCOL: /* 摄像机协议*/ - case SERIALCAMERA_PROTOCOL: /* 串口摄像机协议*/ + case PELCO_D_PROTOCOL: /* 摄像机协议*/ + case PELCO_P_PROTOCOL: /* 摄像机协议*/ + case SERIALCAMERA_PROTOCOL: /* 串口摄像机协议*/ sprintf(szbuf, "摄像机"); break; default: - srdt.ms_dev[i].IsNeedSerial = 0; + srdt.ms_dev.IsNeedSerial = 0; sprintf(szbuf, "无效传感器"); break; - } - // 测试查询传感器电源状态 + } + // 测试查询传感器电源状态 #if 0 LOGE("12V state=%d", getInt(CMD_SET_12V_EN_STATE)); LOGE("3.3V state= %d", getInt(CMD_SET_CAM_3V3_EN_STATE)); @@ -1385,14 +949,13 @@ void GM_StartSerialComm() // 打开传感器电源 // 打开对应的485电源 // 打开串口通讯 - memset(logbuf, 0, sizeof(logbuf)); - if (1 == srdt.ms_dev[i].IsNeedSerial) - { - sprintf(logbuf, "装置%d, IsNoInsta=%d, 类型:%s", i + 1, devparam[i].IsNoInsta, szbuf); - DebugLog(8, logbuf, 'I'); - Gm_OpenSensorsPower(); - Gm_OpenSerialPort(i); - } + memset(logbuf, 0, sizeof(logbuf)); + if (1 == srdt.ms_dev.IsNeedSerial) + { + sprintf(logbuf, "传感器IsNoInsta=%d, 类型:%s", devparam.IsNoInsta, szbuf); + DebugLog(8, logbuf, 'I'); + Gm_OpenSensorsPower(); + Gm_OpenSerialPort(); } DebugLog(8, "启动数据采样!", 'I'); @@ -1443,77 +1006,73 @@ void GM_StartSerialCameraPhoto(uint8_t channel, int cmdidx) if (0x01 == (srdt.sampling & 0x01)) flag = 0; #endif - i = srdt.camerauseserial; - if ((i < 0) || (i >= MAX_SERIAL_PORT_NUM)) - return; - serialport[i].Retry = 0; - serialport[i].RetryTime = 1000; - serialport[i].WaitTime = 0; - serialport[i].m_iRevStatus = 0; - serialport[i].m_iRecvLen = 0; - serialport[i].m_iNeedRevLength = 0; - serialport[i].fd = -1; - memset(serialport[i].m_au8RecvBuf, 0, RECVDATA_MAXLENTH); // 接收数据缓存区 - ClearCmdFormPollCmdBuf(i); + //i = srdt.camerauseserial; + serialport.Retry = 0; + serialport.RetryTime = 1000; + serialport.WaitTime = 0; + serialport.m_iRevStatus = 0; + serialport.m_iRecvLen = 0; + serialport.m_iNeedRevLength = 0; + serialport.fd = -1; + memset(serialport.m_au8RecvBuf, 0, RECVDATA_MAXLENTH); // 接收数据缓存区 + ClearCmdFormPollCmdBuf(); // 初始化串口使用状态 - for (i = 0; i < MAX_SERIAL_DEV_NUM; i++) + if (0 == devparam.IsNoInsta) + { + srdt.ms_dev.IsNeedSerial = 0; + return; + } + memset(szbuf, 0, sizeof(szbuf)); + switch (devparam.ProtocolIdx) { - if (0 == devparam[i].IsNoInsta) + case SERIALCAMERA_PROTOCOL: /* 串口摄像机协议*/ + case PELCO_P_PROTOCOL: /* 摄像机协议*/ + case PELCO_D_PROTOCOL: /* 摄像机协议*/ + if ((1 > devparam.CameraChannel) || (devparam.CameraChannel > MAX_CHANNEL_NUM)) { - srdt.ms_dev[i].IsNeedSerial = 0; - continue; + srdt.ms_dev.IsNeedSerial = 0; + break; } - memset(szbuf, 0, sizeof(szbuf)); - switch (devparam[i].ProtocolIdx) + if (channel == devparam.CameraChannel) { - 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; - default: - if (1 == srdt.ms_dev[i].IsNeedSerial) - break; - srdt.ms_dev[i].IsNeedSerial = 0; - break; + ; } - if (1 == srdt.ms_dev[i].IsNeedSerial) + else + break; + if (0 == srdt.ms_dev.IsNeedSerial) + srdt.iLastGetPhotoNo = -1; + else + srdt.iLastGetPhotoNo = srdt.ms_dev.SerialCmdidx; + srdt.ms_dev.IsNeedSerial = 1; + if (0 == cmdidx) + srdt.ms_dev.image.state = SER_STARTSAMPLE; + if ((0 == cmdidx) && (srdt.presetno > 0)) { - sprintf(logbuf, "装置%d, IsNoInsta=%d, 类型:%s", i + 1, devparam[i].IsNoInsta, szbuf); - DebugLog(8, logbuf, 'I'); - Gm_OpenSensorsPower(); - Gm_OpenSerialPort(i); + srdt.ms_dev.SerialCmdidx = 10017; + srdt.iLastGetPhotoNo = cmdidx; } + else + srdt.ms_dev.SerialCmdidx = cmdidx; + srdt.ms_dev.FirstCmdTimeCnt = get_msec(); + srdt.sendphotocmdcnt = 0; + sprintf(szbuf, "摄像机"); + flag = 1; + break; + default: + if (1 == srdt.ms_dev.IsNeedSerial) + break; + srdt.ms_dev.IsNeedSerial = 0; + break; + } + if (1 == srdt.ms_dev.IsNeedSerial) + { + sprintf(logbuf, "传感器 IsNoInsta=%d, 类型:%s", i + 1, devparam.IsNoInsta, szbuf); + DebugLog(8, logbuf, 'I'); + Gm_OpenSensorsPower(); + Gm_OpenSerialPort(); } + if (0x01 == flag) { sprintf(szbuf, "摄像机启动串口定时器!"); @@ -1557,59 +1116,44 @@ int GM_SerialTimer(void) *********************************************************************************/ void Gm_FindAllSensorsCommand() { - int i, j, curidx, flag; + int flag; //Gm_CheckSensorsPower(); /* 暂时不考虑电源控制*/ - for (j = 0; j < MAX_SERIAL_PORT_NUM; j++) - { - // 发送缓冲区中命令 接收到了应答报文,紧接着进行缓冲区清理 - SendCmdFormPollCmdBuf(j); - // 串口已经被占用则直接跳过 - curidx = srdt.curdevidx[j]; - for (i = 0; i < MAX_SERIAL_DEV_NUM; i++) - { - curidx = (curidx + 1) % MAX_SERIAL_DEV_NUM; - if (j != devparam[curidx].commid) - continue; - if (srdt.ms_dev[curidx].IsNeedSerial == 0) - continue; - if (serialport[devparam[curidx].commid].fd < 0) - Gm_OpenSerialPort(curidx); - if (serialport[devparam[curidx].commid].cmdlen > 0) - break; - //LOGE("12V state=%d", getInt(CMD_SET_12V_EN_STATE)); - //LOGE("3.3V state= %d", getInt(CMD_SET_CAM_3V3_EN_STATE)); - //LOGE("485 state=%d", getInt(CMD_SET_485_EN_STATE)); - - - 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; - } - if (flag == -1) - continue; - srdt.curdevidx[j] = curidx; - break; - } - // 发送缓冲区中命令 生成了命令之后紧接着进行命令发送 - SendCmdFormPollCmdBuf(j); + // 发送缓冲区中命令 接收到了应答报文,紧接着进行缓冲区清理 + SendCmdFormPollCmdBuf(); + // 串口已经被占用则直接跳过 + if (srdt.ms_dev.IsNeedSerial == 0) + return; + if (serialport.fd < 0) + Gm_OpenSerialPort(); + if (serialport.cmdlen > 0) + return; + //LOGE("12V state=%d", getInt(CMD_SET_12V_EN_STATE)); + //LOGE("3.3V state= %d", getInt(CMD_SET_CAM_3V3_EN_STATE)); + //LOGE("485 state=%d", getInt(CMD_SET_485_EN_STATE)); + flag = -1; + switch (devparam.ProtocolIdx) + { + case WEATHER_PROTOCOL: /* 温湿度气压*/ + case RALLY_PROTOCOL: /* 拉力*/ + case WIND_PROTOCOL: /* 风速风向*/ + case SLANT_PROTOCOL: /* 倾角*/ + flag = FindNextShxyProtocolCommand(); + break; + case RESERVE2_PROTOCOL: + break; + case RESERVE5_PROTOCOL: + break; + case PELCO_D_PROTOCOL: /* 摄像机协议*/ + case PELCO_P_PROTOCOL: /* 摄像机协议*/ + case SERIALCAMERA_PROTOCOL: /* 串口摄像机协议*/ + flag = FindNextCameraPhotoCommand(); + break; } + if (flag == -1) + return; + // 发送缓冲区中命令 生成了命令之后紧接着进行命令发送 + SendCmdFormPollCmdBuf(); } /******************************************************************************** @@ -1626,60 +1170,59 @@ void GM_IsCloseSensors() int64_t lctime; lctime = get_msec(); - for (i = 0; i < MAX_SERIAL_DEV_NUM; i++) + + if (srdt.ms_dev.IsNeedSerial == 0) + return; + memset(buf, 0, sizeof(buf)); + switch (devparam.ProtocolIdx) { - if (srdt.ms_dev[i].IsNeedSerial == 0) - continue; - 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.FirstCmdTimeCnt > 50 * 1000) || (lctime - srdt.ms_dev.FirstCmdTimeCnt < 0)) { - 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.FirstCmdTimeCnt = lctime; + break; + } + if (lctime - srdt.ms_dev.FirstCmdTimeCnt > 15 * 1000) + { + srdt.ms_dev.IsNeedSerial = 0; + // 关闭传感器电源 + sprintf(buf, "读取装置%d数据%0.3f秒,关闭装置%d电源!", i + 1, (get_msec() - srdt.ms_dev.FirstCmdTimeCnt) / 1000.0, i + 1); + DebugLog(devparam.commid, buf, 'I'); + for (j = 0; j < MAX_DEV_VALUE_NUM; j++) { - 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; - } + if (SER_STARTSAMPLE == srdt.ms_dev.aiValue[j].AiState) + srdt.ms_dev.aiValue[j].AiState = SER_SAMPLEFAIL; + else if (SER_SAMPLE == srdt.ms_dev.aiValue[j].AiState) + srdt.ms_dev.aiValue[j].AiState = SAMPLINGSUCCESS; } - break; - case PELCO_D_PROTOCOL: /* 摄像机类型*/ - case PELCO_P_PROTOCOL: /* 摄像机类型*/ - case SERIALCAMERA_PROTOCOL: /* 串口摄像机协议*/ - if (-1 == srdt.ms_dev[i].SerialCmdidx) + for (j = 0; j < WEATHER_DATA_NUM; j++) { - 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'); + if (SER_STARTSAMPLE == weatherpntmsg[j].AiState) + weatherpntmsg[j].AiState = SER_SAMPLEFAIL; + else if (SER_SAMPLE == weatherpntmsg[j].AiState) + weatherpntmsg[j].AiState = SAMPLINGSUCCESS; } - break; } + break; + case PELCO_D_PROTOCOL: /* 摄像机类型*/ + case PELCO_P_PROTOCOL: /* 摄像机类型*/ + case SERIALCAMERA_PROTOCOL: /* 串口摄像机协议*/ + if (-1 == srdt.ms_dev.SerialCmdidx) + { + if ((SER_STARTSAMPLE == srdt.ms_dev.image.state) || (SER_SAMPLE == srdt.ms_dev.image.state)) + srdt.ms_dev.image.state = SER_SAMPLEFAIL; + else if (PHOTO_SAVE_SUCC == srdt.ms_dev.image.state) + srdt.ms_dev.image.state = SAMPLINGSUCCESS; + srdt.ms_dev.IsNeedSerial = 0; + sprintf(buf, "通道%d摄像机使用完毕!可以关闭摄像机电源!", devparam.CameraChannel); + DebugLog(devparam.commid, buf, 'I'); + } + break; } + } /******************************************************************************** @@ -1695,23 +1238,20 @@ void GM_AllSerialComRecv() u_char recvbuf[RECVDATA_MAXLENTH]; char buf[256]; - for (j = 0; j < MAX_SERIAL_PORT_NUM; j++) - { - memset(recvbuf, 0, sizeof(recvbuf)); - if (serialport[j].fd <= 0) - continue; - //for(;;) - recvlen = read(serialport[j].fd, recvbuf, sizeof(recvbuf));/* 在串口读取字符串 */ + memset(recvbuf, 0, sizeof(recvbuf)); + if (serialport.fd <= 0) + return; + //for(;;) + recvlen = read(serialport.fd, recvbuf, sizeof(recvbuf));/* 在串口读取字符串 */ - if (recvlen < 1) - continue; + if (recvlen < 1) + return; #if 1 - sprintf(buf, "收到串口%d, %d字节数据:", j + 1, recvlen); - BytestreamLOG(j, buf, recvbuf, recvlen, 'I'); + sprintf(buf, "收到串口%d, %d字节数据:", j + 1, recvlen); + BytestreamLOG(srdt.ms_dev.UseSerialidx+1, buf, recvbuf, recvlen, 'I'); #endif - SerialDataProcess(srdt.curdevidx[j], recvbuf, recvlen); - } + SerialDataProcess(recvbuf, recvlen); } /******************************************************************************** @@ -1726,46 +1266,37 @@ int GM_CloseTimer() int i, j, iretime; char buf[256]; - for (i = 0; i < MAX_SERIAL_DEV_NUM; i++) - { - if ((srdt.ms_dev[i].IsNeedSerial == 1) - && ((0 < devparam[i].ProtocolIdx) && (INVALID_PROTOCOL > devparam[i].ProtocolIdx))) - break; - } - if (i < MAX_SERIAL_DEV_NUM) - { - return 1; // 寻找 - } - else // 关闭所有串口及电源 - { - Gm_CloseSerialPort(); - for (j = 0; j < MAX_SERIAL_DEV_NUM; j++) - Gm_CloseSensorsPower(); - for (j = 0; j < MAX_SERIAL_PORT_NUM; j++) - ClearCmdFormPollCmdBuf(j); - sprintf(buf, "关闭串口定时器!"); - DebugLog(8, buf, 'I'); + if ((srdt.ms_dev.IsNeedSerial == 1) + && ((0 < devparam.ProtocolIdx) && (INVALID_PROTOCOL > devparam.ProtocolIdx))) return -1; - } + + Gm_CloseSerialPort(); + //for (j = 0; j < MAX_SERIAL_DEV_NUM; j++) + // Gm_CloseSensorsPower(); + //for (j = 0; j < MAX_SERIAL_PORT_NUM; j++) + ClearCmdFormPollCmdBuf(); + sprintf(buf, "关闭串口定时器!"); + DebugLog(8, buf, 'I'); + return -1; } -void SerialDataProcess(int devidx, u_char *buf, int len) +void SerialDataProcess(u_char *buf, int len) { - switch (devparam[devidx].ProtocolIdx) + switch (devparam.ProtocolIdx) { case WEATHER_PROTOCOL: /* 气象*/ case RALLY_PROTOCOL: /* 拉力*/ case WIND_PROTOCOL: /* 风速风向*/ case SLANT_PROTOCOL: /* 倾角*/ - ShxyProtocolRecvData(devidx, buf, len); + ShxyProtocolRecvData(buf, len); break; case RESERVE2_PROTOCOL: /* 意科电池电量读取协议*/ break; case PELCO_D_PROTOCOL: /* 摄像机协议*/ case PELCO_P_PROTOCOL: /* 摄像机协议*/ case SERIALCAMERA_PROTOCOL: /* 串口摄像机协议*/ - CameraRecvData(devidx, buf, len); + CameraRecvData( buf, len); break; } } @@ -1843,7 +1374,7 @@ int SaveLogTofile(int commid, char *szbuf) return 1; } -int SaveImageDataTofile(int devno) +int SaveImageDataTofile() { u_char *image = NULL, *tempphoto = NULL; int i, status; @@ -1852,7 +1383,7 @@ int SaveImageDataTofile(int devno) FILE *fp = NULL; SERIAL_DEV_DEF *pPortParam; - pPortParam = &srdt.ms_dev[devno]; + pPortParam = &srdt.ms_dev; image = (u_char*)malloc(pPortParam->image.imagelen); if (NULL == image) return -1; @@ -1869,7 +1400,7 @@ int SaveImageDataTofile(int devno) if (access(srdt.filedir, 0) == 0) { sprintf(szbuf, "文件路径%s已经存在!", srdt.filedir); - DebugLog(devparam[devno].commid, szbuf, 'I'); + DebugLog(devparam.commid, szbuf, 'I'); } else { @@ -1879,7 +1410,7 @@ int SaveImageDataTofile(int devno) } // 写入文件到sdcard memset(pPortParam->image.photoname, 0, sizeof(pPortParam->image.photoname)); - sprintf(pPortParam->image.photoname, "%s%d-%d-%d.jpg", srdt.filedir, devparam[devno].CameraChannel, pPortParam->image.presetno, pPortParam->image.phototime); + sprintf(pPortParam->image.photoname, "%s%d-%d-%d.jpg", srdt.filedir, devparam.CameraChannel, pPortParam->image.presetno, pPortParam->image.phototime); fp = fopen(pPortParam->image.photoname, "wb+"); if (NULL == fp) return -1; @@ -1893,7 +1424,7 @@ int SaveImageDataTofile(int devno) { memset(szbuf, 0, sizeof(szbuf)); sprintf(szbuf, "写入图片文件%s成功!", pPortParam->image.photoname); - DebugLog(devparam[devno].commid, szbuf, 'I'); + DebugLog(devparam.commid, szbuf, 'I'); return 1; } } @@ -1901,16 +1432,12 @@ int SaveImageDataTofile(int devno) /******************************************************************* * 读 摄像机 数据 * *******************************************************************/ -void CameraRecvData(int devno, u_char *buf, int len) +void CameraRecvData(u_char *buf, int len) { int i; SIO_PARAM_SERIAL_DEF *pPortParam; - if ((devno < 0) || (devno > MAX_SERIAL_DEV_NUM)) - { - return; - } - pPortParam = &serialport[devparam[devno].commid]; + pPortParam = &serialport; for (i = 0; i < len; i++) { @@ -1955,7 +1482,7 @@ void CameraRecvData(int devno, u_char *buf, int len) if (pPortParam->m_au8RecvBuf[pPortParam->m_iRecvLen - 2] == CalLpc(&pPortParam->m_au8RecvBuf[4], pPortParam->m_iRecvLen - 6)) { - CameraPhotoPortDataProcess(devno); + CameraPhotoPortDataProcess(); pPortParam->m_iRevStatus = 0; pPortParam->RevCmdFlag = 1; } @@ -1995,7 +1522,7 @@ void CameraRecvData(int devno, u_char *buf, int len) /********************************************************************************* CameraPhoto 端口数据处理 **********************************************************************************/ -void CameraPhotoPortDataProcess(int devno) +void CameraPhotoPortDataProcess() { RTUMSG rtumsg; SERIAL_DEV_DEF *pPortParam; @@ -2005,19 +1532,19 @@ void CameraPhotoPortDataProcess(int devno) uint16_t uDevAddr; uint8_t cmdidx, recvend; - pPortParam = &srdt.ms_dev[devno]; - curserial = &serialport[devparam[devno].commid]; + pPortParam = &srdt.ms_dev; + curserial = &serialport; memset((void*)rtumsg.MsgData, 0, sizeof(rtumsg.MsgData)); memcpy((void*)rtumsg.MsgData, (void*)curserial->m_au8RecvBuf, curserial->m_iRecvLen); rtumsg.MsgLen = curserial->m_iRecvLen; - rtumsg.PortIdx = devparam[devno].commid; + rtumsg.PortIdx = devparam.commid; cmdidx = curserial->m_au8RecvBuf[5]; uDevAddr = curserial->m_au8RecvBuf[4]; //sprintf(szbuf, "摄像机地址%d,命令%02X!", uDevAddr, cmdidx); //DebugStringPrintf(szbuf, strlen(szbuf), 1); - if (uDevAddr != devparam[devno].devaddr) + if (uDevAddr != devparam.devaddr) return; memset(szbuf, 0, sizeof(szbuf)); switch (cmdidx) @@ -2030,7 +1557,7 @@ void CameraPhotoPortDataProcess(int devno) { pPortParam->SerialCmdidx = -1; sprintf(szbuf, "因摄像机重拍%d次均未成功!结束拍照!", srdt.RephotographCnt); - DebugLog(devparam[devno].commid, szbuf, 'E'); + DebugLog(devparam.commid, szbuf, 'E'); } break; } @@ -2045,9 +1572,9 @@ void CameraPhotoPortDataProcess(int devno) 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'); + srdt.historyimagenum[devparam.CameraChannel - 1] = rtumsg.MsgData[i + 7] + (rtumsg.MsgData[i + 6] << 8); + sprintf(szbuf, "有%d张历史图片!", srdt.historyimagenum[devparam.CameraChannel - 1]); + DebugLog(devparam.commid, szbuf, 'V'); presetno = (int)rtumsg.MsgData[i + 8]; pPortParam->image.presetno = presetno; pPortParam->image.state = SER_SAMPLE; @@ -2062,7 +1589,7 @@ void CameraPhotoPortDataProcess(int devno) 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'); + DebugLog(devparam.commid, szbuf, 'V'); curserial->RevCmdFlag = 1; pPortParam->FirstCmdTimeCnt = get_msec(); if ((iNo == pPortParam->SerialCmdidx) && (0xFF > rtumsg.MsgData[i + 2])) @@ -2081,7 +1608,7 @@ void CameraPhotoPortDataProcess(int devno) } else { - if ((1 == SaveImageDataTofile(devno)) && (SER_SAMPLE == pPortParam->image.state)) + if ((1 == SaveImageDataTofile()) && (SER_SAMPLE == pPortParam->image.state)) pPortParam->image.state = PHOTO_SAVE_SUCC; recvend = 1; } @@ -2116,7 +1643,7 @@ void CameraPhotoPortDataProcess(int devno) srdt.errorPhotoNoCnt++; sprintf(szbuf, "问询第%d包图片摄像机应答第%d包,连续错误%d次!", pPortParam->SerialCmdidx, iNo, srdt.errorPhotoNoCnt); - DebugLog(devparam[devno].commid, szbuf, 'E'); + DebugLog(devparam.commid, szbuf, 'E'); if (srdt.errorPhotoNoCnt > 5) { pPortParam->SerialCmdidx = 0; @@ -2125,13 +1652,13 @@ void CameraPhotoPortDataProcess(int devno) { pPortParam->SerialCmdidx = -1; sprintf(szbuf, "因摄像机重拍%d次均未成功!结束拍照!", srdt.RephotographCnt); - DebugLog(devparam[devno].commid, szbuf, 'E'); + DebugLog(devparam.commid, szbuf, 'E'); } } break; case 0x03: - sprintf(szbuf, "设置波特率%d成功", devparam[devno].baudrate); - DebugLog(devparam[devno].commid, szbuf, 'D'); + sprintf(szbuf, "设置波特率%d成功", devparam.baudrate); + DebugLog(devparam.commid, szbuf, 'D'); pPortParam->SerialCmdidx = srdt.iLastGetPhotoNo; srdt.iLastGetPhotoNo = -1; curserial->RevCmdFlag = 1; @@ -2142,7 +1669,7 @@ void CameraPhotoPortDataProcess(int devno) { pPortParam->SerialCmdidx = -1; sprintf(szbuf, "没有历史图片!结束读取图片!"); - DebugLog(devparam[devno].commid, szbuf, 'I'); + DebugLog(devparam.commid, szbuf, 'I'); break; } i = 6; @@ -2155,11 +1682,11 @@ void CameraPhotoPortDataProcess(int devno) 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); + srdt.historyimagenum[devparam.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'); + sprintf(szbuf, "读取历史图片,还有%d张历史图片!", srdt.historyimagenum[devparam.CameraChannel - 1]); + DebugLog(devparam.commid, szbuf, 'I'); curserial->RevCmdFlag = 1; pPortParam->SerialCmdidx = 1; srdt.sendphotocmdcnt = 0; @@ -2169,12 +1696,12 @@ void CameraPhotoPortDataProcess(int devno) { pPortParam->SerialCmdidx = -1; sprintf(szbuf, "摄像机图片保存失败!"); - DebugLog(devparam[devno].commid, szbuf, 'E'); + DebugLog(devparam.commid, szbuf, 'E'); } pPortParam->SerialCmdidx = -1; if (0 == rtumsg.MsgData[10]) { - if (0 == srdt.historyimagenum[devparam[devno].CameraChannel - 1]) + if (0 == srdt.historyimagenum[devparam.CameraChannel - 1]) { ; } @@ -2195,14 +1722,14 @@ void CameraPhotoPortDataProcess(int devno) /********************************************************************************* 发送命令 **********************************************************************************/ -void SendCmdFormPollCmdBuf(int port) +void SendCmdFormPollCmdBuf() { char buf[128]; int len, ret; int64_t lctime; SIO_PARAM_SERIAL_DEF *pPortParam; - pPortParam = &serialport[port]; + pPortParam = &serialport; memset(buf, 0, sizeof(buf)); lctime = get_msec(); if (pPortParam->ForceWaitFlag && pPortParam->ForceWaitCnt) @@ -2228,7 +1755,7 @@ void SendCmdFormPollCmdBuf(int port) pPortParam->RetryCnt++; if (pPortParam->RetryCnt > pPortParam->Retry) { - ClearCmdFormPollCmdBuf(port); + ClearCmdFormPollCmdBuf(); } else { @@ -2241,7 +1768,7 @@ void SendCmdFormPollCmdBuf(int port) if (pPortParam->SendCmdFlag && pPortParam->RevCmdFlag) { // 清除当前命令 - ClearCmdFormPollCmdBuf(port); + ClearCmdFormPollCmdBuf(); } if (pPortParam->WaitTime > 0) @@ -2269,26 +1796,26 @@ void SendCmdFormPollCmdBuf(int port) if (len == 0) return; - serialport[devparam[srdt.curdevidx[port]].commid].m_iRecvLen = 0; // 当发送一条新指令时,清除接收状态 - serialport[devparam[srdt.curdevidx[port]].commid].m_iRevStatus = 0; - if (serialport[port].fd < 0) + serialport.m_iRecvLen = 0; // 当发送一条新指令时,清除接收状态 + serialport.m_iRevStatus = 0; + if (serialport.fd < 0) return; - ret = Gm_SetSerialPortParam(port); + ret = Gm_SetSerialPortParam(); if (ret < 0) return; - len = GM_SerialComSend(&pPortParam->PollCmd[2], pPortParam->cmdlen - 2, port); + len = GM_SerialComSend(&pPortParam->PollCmd[2], pPortParam->cmdlen - 2, devparam.commid); if (len < 1) { - sprintf(buf, "串口%d, 发送命令失败!", port + 1); - DebugLog(port, buf, 'E'); + sprintf(buf, "串口%d, 发送命令失败!", devparam.commid + 1); + DebugLog(devparam.commid, buf, 'E'); } else { - sprintf(buf, "发送串口%d 装置%d命令:", port + 1, srdt.curdevidx[port] + 1); - BytestreamLOG(port, buf, &pPortParam->PollCmd[2], len, 'D'); + sprintf(buf, "发送串口%d 装置%d命令:", devparam.commid + 1, srdt.curdevidx + 1); + BytestreamLOG(devparam.commid, buf, &pPortParam->PollCmd[2], len, 'D'); sprintf(buf, "sendtimeconst= %lld", lctime - pPortParam->lsendtime); - DebugLog(port, buf, 'W'); + DebugLog(devparam.commid, buf, 'W'); pPortParam->lsendtime = lctime; } pPortParam->SendCmdFlag = 1; @@ -2304,39 +1831,34 @@ void SendCmdFormPollCmdBuf(int port) } } -void ClearCmdAllFlag(int commid) +void ClearCmdAllFlag() { - if ((commid < 0) || (commid >= MAX_SERIAL_PORT_NUM)) - return; - - serialport[commid].RetryCnt = 0; - serialport[commid].RetryTimeCnt = get_msec(); - serialport[commid].WaitTimeCnt = get_msec(); - serialport[commid].ForceWaitFlag = 0; - serialport[commid].ForceWaitCnt = 0; - serialport[commid].SendCmdFlag = 0; - serialport[commid].RevCmdFlag = 0; - serialport[commid].ReSendCmdFlag = 0; + serialport.RetryCnt = 0; + serialport.RetryTimeCnt = get_msec(); + serialport.WaitTimeCnt = get_msec(); + serialport.ForceWaitFlag = 0; + serialport.ForceWaitCnt = 0; + serialport.SendCmdFlag = 0; + serialport.RevCmdFlag = 0; + serialport.ReSendCmdFlag = 0; } -void ClearCmdFormPollCmdBuf(int port) +void ClearCmdFormPollCmdBuf() { //int len, idx; SIO_PARAM_SERIAL_DEF *pPortParam; - if ((port < 0) || (port >= MAX_SERIAL_PORT_NUM)) - return; - pPortParam = &serialport[port]; + pPortParam = &serialport; pPortParam->cmdlen = 0; memset(pPortParam->PollCmd, 0, sizeof(pPortParam->PollCmd)); - srdt.serialstatus[port] = 0; + srdt.serialstatus = 0; // 清除指令下发标识 - ClearCmdAllFlag(port); + ClearCmdAllFlag(); } // 下发串口拍照指令控制 -int FindNextCameraPhotoCommand(int devidx) +int FindNextCameraPhotoCommand() { int imagesize = 3, cmdno; uint8_t channel, imagequality = 90, presetno; @@ -2346,47 +1868,45 @@ int FindNextCameraPhotoCommand(int devidx) char szbuf[128]; //如果命令缓冲区仍有命令,则退出本函数 - 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; - if (-1 == srdt.ms_dev[devidx].SerialCmdidx)/* 下发拍照指令*/ + if (-1 == srdt.ms_dev.SerialCmdidx)/* 下发拍照指令*/ return -1; - channel = devparam[devidx].CameraChannel; + channel = devparam.CameraChannel; if ((1 > channel) || (channel > MAX_CHANNEL_NUM)) { /* 通道号错误退出拍照流程*/; - srdt.ms_dev[devidx].SerialCmdidx = -1; + srdt.ms_dev.SerialCmdidx = -1; sprintf(szbuf, "装置配置中,通道号配置错误!结束拍照!"); - DebugLog(devparam[devidx].commid, szbuf, 'I'); + DebugLog(devparam.commid, szbuf, 'I'); } - cmdno = srdt.ms_dev[devidx].SerialCmdidx; + cmdno = srdt.ms_dev.SerialCmdidx; lcurtime = get_msec(); if ((1 > cmdno) || (10000 <= cmdno)) { - if (lcurtime - srdt.ms_dev[devidx].FirstCmdTimeCnt < 300) + if (lcurtime - srdt.ms_dev.FirstCmdTimeCnt < 300) return -1; } switch (cmdno) { case 0:/* 下发拍照指令*/ - if (lcurtime - srdt.ms_dev[devidx].FirstCmdTimeCnt < 3800) + if (lcurtime - srdt.ms_dev.FirstCmdTimeCnt < 3800) return -1; - if ((lcurtime - srdt.ms_dev[devidx].FirstCmdTimeCnt > 3 * 35 * 1000) || (lcurtime - srdt.ms_dev[devidx].FirstCmdTimeCnt < 0)) + if ((lcurtime - srdt.ms_dev.FirstCmdTimeCnt > 3 * 35 * 1000) || (lcurtime - srdt.ms_dev.FirstCmdTimeCnt < 0)) { - srdt.ms_dev[devidx].FirstCmdTimeCnt = lcurtime; + srdt.ms_dev.FirstCmdTimeCnt = lcurtime; return -1; } - if (lcurtime - srdt.ms_dev[devidx].FirstCmdTimeCnt > 35 * 1000) + if (lcurtime - srdt.ms_dev.FirstCmdTimeCnt > 35 * 1000) { - srdt.ms_dev[devidx].SerialCmdidx = -1; + srdt.ms_dev.SerialCmdidx = -1; sprintf(szbuf, "串口摄像机未接或故障!结束拍照!"); - DebugLog(devparam[devidx].commid, szbuf, 'I'); + DebugLog(devparam.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'); + sprintf(szbuf, "time=%lldms", lcurtime - srdt.ms_dev.FirstCmdTimeCnt); + DebugLog(devparam.commid, szbuf, 'I'); packetsize = (uint16_t)MAX_PHOTO_FRAME_LEN; srdt.sendphotocmdcnt++; srdt.imagepacketnum = 0; @@ -2396,7 +1916,7 @@ int FindNextCameraPhotoCommand(int devidx) break; case 10000: /* 下发设置串口波特率命令*/ - switch (devparam[devidx].baudrate) + switch (devparam.baudrate) { case B9600: imagesize = 0x07; @@ -2409,17 +1929,17 @@ int FindNextCameraPhotoCommand(int devidx) break; default: sprintf(szbuf, "设置串口摄像机参数时,配置参数错误!退出设置!"); - DebugLog(devparam[devidx].commid, szbuf, 'I'); - srdt.ms_dev[devidx].SerialCmdidx = srdt.iLastGetPhotoNo; + DebugLog(devparam.commid, szbuf, 'I'); + srdt.ms_dev.SerialCmdidx = srdt.iLastGetPhotoNo; srdt.iLastGetPhotoNo = -1; return -1; } - if (lcurtime - srdt.ms_dev[devidx].FirstCmdTimeCnt > 15 * 1000) + if (lcurtime - srdt.ms_dev.FirstCmdTimeCnt > 15 * 1000) { - srdt.ms_dev[devidx].SerialCmdidx = -1; + srdt.ms_dev.SerialCmdidx = -1; sprintf(szbuf, "设置串口摄像机参数时,15秒未收到摄像机应答!退出设置!"); - DebugLog(devparam[devidx].commid, szbuf, 'I'); + DebugLog(devparam.commid, szbuf, 'I'); return -1; } cmdidx = 0x03; @@ -2446,26 +1966,26 @@ int FindNextCameraPhotoCommand(int devidx) //sleep(2); Gm_CtrlPtzCmd(channel, Cmd_Cancel); usleep(100000); - srdt.ms_dev[devidx].SerialCmdidx = srdt.iLastGetPhotoNo; + srdt.ms_dev.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.ms_dev.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.ms_dev.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.ms_dev.SerialCmdidx = srdt.iLastGetPhotoNo; srdt.iLastGetPhotoNo = -1; return 1; case 10009: /* 近距离聚焦(1 有效)*/ @@ -2473,7 +1993,7 @@ int FindNextCameraPhotoCommand(int devidx) usleep(100000); Gm_CtrlPtzCmd(channel, Cmd_Cancel); usleep(100000); - srdt.ms_dev[devidx].SerialCmdidx = srdt.iLastGetPhotoNo; + srdt.ms_dev.SerialCmdidx = srdt.iLastGetPhotoNo; srdt.iLastGetPhotoNo = -1; return 1; case 10010: /* 远距离聚焦(1 有效)*/ @@ -2481,7 +2001,7 @@ int FindNextCameraPhotoCommand(int devidx) usleep(100000); Gm_CtrlPtzCmd(channel, Cmd_Cancel); usleep(100000); - srdt.ms_dev[devidx].SerialCmdidx = srdt.iLastGetPhotoNo; + srdt.ms_dev.SerialCmdidx = srdt.iLastGetPhotoNo; srdt.iLastGetPhotoNo = -1; return 1; case 10011: /* 远离物体(1 有效)*/ @@ -2489,7 +2009,7 @@ int FindNextCameraPhotoCommand(int devidx) usleep(100000); Gm_CtrlPtzCmd(channel, Cmd_Cancel); usleep(100000); - srdt.ms_dev[devidx].SerialCmdidx = srdt.iLastGetPhotoNo; + srdt.ms_dev.SerialCmdidx = srdt.iLastGetPhotoNo; srdt.iLastGetPhotoNo = -1; return 1; case 10012: /* 接近物体(1 有效)*/ @@ -2497,7 +2017,7 @@ int FindNextCameraPhotoCommand(int devidx) usleep(100000); Gm_CtrlPtzCmd(channel, Cmd_Cancel); usleep(100000); - srdt.ms_dev[devidx].SerialCmdidx = srdt.iLastGetPhotoNo; + srdt.ms_dev.SerialCmdidx = srdt.iLastGetPhotoNo; srdt.iLastGetPhotoNo = -1; return 1; case 10013: /* 向下移动镜头(1 有效)*/ @@ -2505,7 +2025,7 @@ int FindNextCameraPhotoCommand(int devidx) sleep(1); Gm_CtrlPtzCmd(channel, Cmd_Cancel); usleep(100000); - srdt.ms_dev[devidx].SerialCmdidx = srdt.iLastGetPhotoNo; + srdt.ms_dev.SerialCmdidx = srdt.iLastGetPhotoNo; srdt.iLastGetPhotoNo = -1; return 1; case 10014: /* 向上移动镜头(1 有效)*/ @@ -2513,7 +2033,7 @@ int FindNextCameraPhotoCommand(int devidx) sleep(1); Gm_CtrlPtzCmd(channel, Cmd_Cancel); usleep(100000); - srdt.ms_dev[devidx].SerialCmdidx = srdt.iLastGetPhotoNo; + srdt.ms_dev.SerialCmdidx = srdt.iLastGetPhotoNo; srdt.iLastGetPhotoNo = -1; return 1; case 10015: /* 向左移动镜头(1 有效)*/ @@ -2521,7 +2041,7 @@ int FindNextCameraPhotoCommand(int devidx) sleep(1); Gm_CtrlPtzCmd(channel, Cmd_Cancel); usleep(100000); - srdt.ms_dev[devidx].SerialCmdidx = srdt.iLastGetPhotoNo; + srdt.ms_dev.SerialCmdidx = srdt.iLastGetPhotoNo; srdt.iLastGetPhotoNo = -1; return 1; case 10016: /* 向右移动镜头(1 有效)*/ @@ -2529,7 +2049,7 @@ int FindNextCameraPhotoCommand(int devidx) sleep(1); Gm_CtrlPtzCmd(channel, Cmd_Cancel); usleep(100000); - srdt.ms_dev[devidx].SerialCmdidx = srdt.iLastGetPhotoNo; + srdt.ms_dev.SerialCmdidx = srdt.iLastGetPhotoNo; srdt.iLastGetPhotoNo = -1; return 1; case 10017: /* 调用预置点*/ @@ -2538,7 +2058,7 @@ int FindNextCameraPhotoCommand(int devidx) sleep(2); if (0 == srdt.IsSleep) { - srdt.ms_dev[devidx].SerialCmdidx = 10017; + srdt.ms_dev.SerialCmdidx = 10017; srdt.IsSleep++; return 1; } @@ -2546,22 +2066,22 @@ int FindNextCameraPhotoCommand(int devidx) // srdt.presetno = 1; // else // srdt.presetno++; - //srdt.ms_dev[devidx].SerialCmdidx = -1; + //srdt.ms_dev.SerialCmdidx = -1; //Gm_CtrlPtzCmd(channel, MOVE_TO_PRESETNO+srdt.presetno); //usleep(1000); - srdt.ms_dev[devidx].SerialCmdidx = srdt.iLastGetPhotoNo; + srdt.ms_dev.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.ms_dev.SerialCmdidx = srdt.iLastGetPhotoNo; srdt.iLastGetPhotoNo = -1; return 1; default: imagesize = 0xFF; - packetsize = (uint16_t)srdt.ms_dev[devidx].SerialCmdidx; + packetsize = (uint16_t)srdt.ms_dev.SerialCmdidx; cmdidx = 0x11; #if 0 if (0 == srdt.IsSleep) @@ -2570,31 +2090,30 @@ int FindNextCameraPhotoCommand(int devidx) testComm(); } #endif - if (lcurtime - srdt.ms_dev[devidx].FirstCmdTimeCnt > 35 * 1000) + if (lcurtime - srdt.ms_dev.FirstCmdTimeCnt > 35 * 1000) { - srdt.ms_dev[devidx].SerialCmdidx = -1; + srdt.ms_dev.SerialCmdidx = -1; sprintf(szbuf, "读取第%d包图片数据35秒未收到!结束拍照!", packetsize); - DebugLog(devparam[devidx].commid, szbuf, 'I'); + DebugLog(devparam.commid, szbuf, 'I'); return -1; } break; } - MakeCameraPhotoCommand(devidx, cmdidx, imagesize, packetsize, imagequality, srdt.sendphototime); + MakeCameraPhotoCommand(cmdidx, imagesize, packetsize, imagequality, srdt.sendphototime); //MakeCameraPhotoCommand(devidx, 2, imagesize, packetsize, imagequality); - srdt.curdevidx[devparam[devidx].commid] = devidx; return 1; } /********************************************************************************* 生成 CameraPhoto命令 **********************************************************************************/ -void MakeCameraPhotoCommand(int portno, uint8_t cmdidx, int OneParam, uint16_t TwoParam, uint8_t Threep, int phototime) +void MakeCameraPhotoCommand(uint8_t cmdidx, int OneParam, uint16_t TwoParam, uint8_t Threep, int phototime) { int i, icurtime; u_char *sendbuf; //char szbuf[128]; - sendbuf = serialport[devparam[portno].commid].PollCmd; + sendbuf = serialport.PollCmd; icurtime = phototime; i = 0; @@ -2604,7 +2123,7 @@ void MakeCameraPhotoCommand(int portno, uint8_t cmdidx, int OneParam, uint16_t T sendbuf[i++] = (uint8_t)0x00; /* length */ sendbuf[i++] = (uint8_t)0x00; /* length */ sendbuf[i++] = 0x68; /* 起始字符*/ - sendbuf[i++] = (uint8_t)devparam[portno].devaddr;/* 传感器地址*/ + sendbuf[i++] = (uint8_t)devparam.devaddr;/* 传感器地址*/ sendbuf[i++] = cmdidx; /* 命令字*/ switch (cmdidx) { @@ -2629,7 +2148,7 @@ void MakeCameraPhotoCommand(int portno, uint8_t cmdidx, int OneParam, uint16_t T 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)*/ + sendbuf[i++] = srdt.presetno;//netportparam.CurPresetno[srdt.ms_dev.CameraChannel-1];/*拍照预置点(PresetNo)*/ break; case 0x11: /* 获取指定包数据(11H)*/ sendbuf[i++] = HIBYTE(TwoParam);/*图片包号:(PackageNo)*/ @@ -2652,1115 +2171,1068 @@ void MakeCameraPhotoCommand(int portno, uint8_t cmdidx, int OneParam, uint16_t T sendbuf[i++] = 0x16; /* 信息尾*/ sendbuf[3] = (uint8_t)((i - 10) >> 8); sendbuf[4] = (uint8_t)(i - 10); - serialport[devparam[portno].commid].cmdlen = i; + serialport.cmdlen = i; //return; } // 准备发送云台指令 -int Gm_CtrlPtzCmd(u_char channel, uint32_t ptzcmd) -{ - int i; - char szbuf[64]; +int Gm_CtrlPtzCmd(u_char channel, uint32_t ptzcmd) { + int i; + char szbuf[64]; srdt.PtzCmdType = 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))) - break; - } - if (i == MAX_SERIAL_DEV_NUM) - { + + if ((channel == devparam.CameraChannel) && ((devparam.ProtocolIdx == PELCO_P_PROTOCOL) + || + (devparam.ProtocolIdx == PELCO_D_PROTOCOL))) { sprintf(szbuf, "没有找到摄像机使用的通道和串口通讯协议"); DebugLog(8, szbuf, 'E'); return 1; } -#if 0 - if ((2 > srdt.ms_dev[i].UseSerialidx + 1) || (MAX_SERIAL_PORT_NUM < srdt.ms_dev[i].UseSerialidx + 1)) - { - sprintf(szbuf, "通道%d摄像机错误的使用了串口%d", channel, srdt.ms_dev[i].UseSerialidx + 1); - LOGI("%s", szbuf); - return 1; - } - 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.commid + 1); + DebugLog(devparam.commid, szbuf, '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.ProtocolIdx) + { + switch (srdt.PtzCmdType) { - switch (srdt.PtzCmdType) - { - case P_Auto_Scan: - srdt.PtzCmdType = D_Auto_Scan; - break; - case P_IRIS_CLOSE: - srdt.PtzCmdType = D_IRIS_CLOSE; - break; - case P_IRIS_OPEN: - srdt.PtzCmdType = D_IRIS_OPEN; - break; - case P_FOCUS_NEAR: - srdt.PtzCmdType = D_FOCUS_NEAR; - break; - case P_FOCUS_FAR: - srdt.PtzCmdType = D_FOCUS_FAR; - break; - case P_ZOOM_WIDE: - srdt.PtzCmdType = D_ZOOM_WIDE; - break; - case P_ZOOM_TELE: - srdt.PtzCmdType = D_ZOOM_TELE; - break; - case P_MOVE_DOWN: - srdt.PtzCmdType = D_MOVE_DOWN; - break; - case P_MOVE_UP: - srdt.PtzCmdType = D_MOVE_UP; - break; - case P_MOVE_LEFT: - srdt.PtzCmdType = D_MOVE_LEFT; - break; - case P_MOVE_RIGHT: - srdt.PtzCmdType = D_MOVE_RIGHT; - break; - } + case P_Auto_Scan: + srdt.PtzCmdType = D_Auto_Scan; + break; + case P_IRIS_CLOSE: + srdt.PtzCmdType = D_IRIS_CLOSE; + break; + case P_IRIS_OPEN: + srdt.PtzCmdType = D_IRIS_OPEN; + break; + case P_FOCUS_NEAR: + srdt.PtzCmdType = D_FOCUS_NEAR; + break; + case P_FOCUS_FAR: + srdt.PtzCmdType = D_FOCUS_FAR; + break; + case P_ZOOM_WIDE: + srdt.PtzCmdType = D_ZOOM_WIDE; + break; + case P_ZOOM_TELE: + srdt.PtzCmdType = D_ZOOM_TELE; + break; + case P_MOVE_DOWN: + srdt.PtzCmdType = D_MOVE_DOWN; + break; + case P_MOVE_UP: + srdt.PtzCmdType = D_MOVE_UP; + break; + case P_MOVE_LEFT: + srdt.PtzCmdType = D_MOVE_LEFT; + break; + 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.cmdlen > 0) + return -1; + if (PELCO_D_PROTOCOL == devparam.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; - } - return 1; -#if 0 - //if(srdt.SendStopPtzCmdTimeCnt > PTZ_MOVETIME*1000/TIMER_CNT) + if ((SET_PRESETNO == (srdt.PtzCmdType & 0xFFFF0000)) + || (MOVE_TO_PRESETNO == (srdt.PtzCmdType & 0xFFFF0000))) { - 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); - srdt.SendStopPtzCmdTimeCnt = -1; //srdt.sampling &= 0xFD; return 1; } - //else - // srdt.SendStopPtzCmdTimeCnt ++; - //return -1; -#endif + srdt.PtzCmdType = Cmd_Cancel; + srdt.SendStopPtzCmdTimeCnt = 0; } + return 1; +} - /******************************************************************************** - * 生成 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); +/******************************************************************************** +* 生成 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.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.cmdlen = len; + Gm_SetSerialPortParam(); + //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'); } - - uint8_t Gm_Pelco_pXORCheck(uint8_t *msg, int len) + else { - int i; - uint8_t checkvalue = 0; + sprintf(buf, "发送串口%d 像机通道%d Pelco_P命令:", + devparam.commid + 1, devparam.CameraChannel); + BytestreamLOG(devparam.commid, buf, commandbuf, len, 'D'); + } + ClearCmdFormPollCmdBuf(); +} - if (len <= 0) - return checkvalue; - checkvalue = msg[0]; - for (i = 1; i < len; i++) - checkvalue ^= msg[i]; +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]; + 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.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命令:", - 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; + len++; + serialport.cmdlen = len; + Gm_SetSerialPortParam(); + len = GM_SerialComSend(commandbuf, len, devparam.commid); + if (len < 1) + { + DebugLog(devparam.commid, "发送Pelco_D命令失败", 'E'); } - - // 计算Pelco_D校验 - uint8_t Gm_Pelco_DCheck(uint8_t *msg, int len) + else { - int i; - uint8_t checkvalue = 0; + sprintf(buf, "发送串口%d 像机通道%d Pelco_D命令:", + devparam.commid + 1, devparam.CameraChannel); + BytestreamLOG(devparam.commid, buf, commandbuf, len, 'D'); + } + ClearCmdFormPollCmdBuf(); + //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; - 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 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) - { - case 0: /* 正常采集数据*/ - MakeShxyProtocolPollCommand(devidx, 0x09); - srdt.curdevidx[devparam[devidx].commid] = devidx; - return 1; - case 1: /* 测试读取地址*/ - MakeShxyProtocolPollCommand(devidx, 0x02); - srdt.curdevidx[devparam[devidx].commid] = devidx; - return 1; - default: - break; - } + //如果命令缓冲区仍有命令,则退出本函数 + if (get_msec() - srdt.ms_dev.FirstCmdTimeCnt < 3 * 1000) + { return -1; } - - /********************************************************************************* - 生成下发命令 - **********************************************************************************/ - void MakeShxyProtocolPollCommand(int portno, uint8_t cmdidx) + //if(SLANT_PROTOCOL == devparam.ProtocolIdx) + // return -1; + switch (cmdno) { - int i, length = 0; - int newaddr = 9, baud = 9600, stopbit = 1, parity = 0; - //char buf[128]; - u_char *sendbuf; + case 0: /* 正常采集数据*/ + MakeShxyProtocolPollCommand(0x09); + return 1; + case 1: /* 测试读取地址*/ + MakeShxyProtocolPollCommand(0x02); + return 1; + default: + break; + } + return -1; +} - sendbuf = serialport[devparam[portno].commid].PollCmd; +/********************************************************************************* + 生成下发命令 +**********************************************************************************/ +void MakeShxyProtocolPollCommand(uint8_t cmdidx) +{ + int i, length = 0; + int newaddr = 9, baud = 9600, stopbit = 1, parity = 0; + //char buf[128]; + u_char *sendbuf; - /* 测试变量*/ - cmdidx = cmdidx; + sendbuf = serialport.PollCmd; - 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; - break; - case 2: /* 广播读地址*/ - sendbuf[6] = 0xFF; - break; - case 3: /* 设置串口参数*/ - sendbuf[i++] = (u_char)(baud >> 24); - sendbuf[i++] = (u_char)(baud >> 16); - sendbuf[i++] = (u_char)(baud >> 8); - sendbuf[i++] = (u_char)baud; - sendbuf[i++] = 8; - sendbuf[i++] = parity; - sendbuf[i++] = stopbit; - length = 7; - break; - default: - break; - } - sendbuf[i] = CalLpc((u_char *)&sendbuf[6], i - 6); - i += 1; - sendbuf[3] = length; - sendbuf[4] = length; - sendbuf[i++] = 0x16; // 信息尾 - serialport[devparam[portno].commid].cmdlen = i; - } + /* 测试变量*/ + cmdidx = cmdidx; - unsigned char CalLpc(unsigned char *msg, int len) + 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.devaddr; // 传感器地址 + sendbuf[i++] = cmdidx; // 命令信息0x06 + switch (cmdidx) { - int i; - u_char retval = 0; - - for (i = 0; i < len; i++) - retval += msg[i]; - return retval; + case 1: /* 设置传感器新地址*/ + sendbuf[i++] = newaddr; + length = 1; + break; + case 2: /* 广播读地址*/ + sendbuf[6] = 0xFF; + break; + case 3: /* 设置串口参数*/ + sendbuf[i++] = (u_char)(baud >> 24); + sendbuf[i++] = (u_char)(baud >> 16); + sendbuf[i++] = (u_char)(baud >> 8); + sendbuf[i++] = (u_char)baud; + sendbuf[i++] = 8; + sendbuf[i++] = parity; + sendbuf[i++] = stopbit; + length = 7; + break; + default: + break; } + sendbuf[i] = CalLpc((u_char *)&sendbuf[6], i - 6); + i += 1; + sendbuf[3] = length; + sendbuf[4] = length; + sendbuf[i++] = 0x16; // 信息尾 + serialport.cmdlen = i; +} - /*************************************************************** - * 读上海欣影传感器协议数据 * - ***************************************************************/ - 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; +unsigned char CalLpc(unsigned char *msg, int len) +{ + int i; + u_char retval = 0; - if ((devno < 0) || (devno > MAX_SERIAL_DEV_NUM)) - { - return; - } - pPortParam = &serialport[devparam[devno].commid]; + for (i = 0; i < len; i++) + retval += msg[i]; + return retval; +} + +/*************************************************************** +* 读上海欣影传感器协议数据 * +***************************************************************/ +void ShxyProtocolRecvData(u_char *buf, int len)// 规约读数据处理 +{ + int i, ictime; + //uint16_t crc, check; + //SERIAL_DEV_DEF *pPortParam; + SIO_PARAM_SERIAL_DEF *pPortParam; - for (i = 0; i < len; i++) + pPortParam = &serialport; + + 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]; + 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++; + break; + case 2: // len2 + pPortParam->m_au8RecvBuf[pPortParam->m_iRecvLen++] = buf[i]; + if (buf[i] == pPortParam->m_au8RecvBuf[pPortParam->m_iRecvLen - 2]) { - 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++; + pPortParam->m_iNeedRevLength = buf[i] + 5; + } + else + pPortParam->m_iRevStatus = 18; + break; + 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; - case 2: // len2 - pPortParam->m_au8RecvBuf[pPortParam->m_iRecvLen++] = buf[i]; - if (buf[i] == pPortParam->m_au8RecvBuf[pPortParam->m_iRecvLen - 2]) - { - pPortParam->m_iRevStatus++; - pPortParam->m_iNeedRevLength = buf[i] + 5; - } - else - pPortParam->m_iRevStatus = 18; - break; - 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; + if (buf[i] != 0x16) + { + 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 (CheckShxyProtocolLpcError(pPortParam->m_au8RecvBuf, pPortParam->m_iRecvLen) == 1) - { - ShxyProtocolDataProcess(devno); - pPortParam->m_iRevStatus = 0; - pPortParam->RevCmdFlag = 1; - } - else - { - pPortParam->m_iRevStatus = 0; - } + if (CheckShxyProtocolLpcError(pPortParam->m_au8RecvBuf, pPortParam->m_iRecvLen) == 1) + { + ShxyProtocolDataProcess(); + 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; 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) + } + else + { + pPortParam->m_au8RecvBuf[pPortParam->m_iRecvLen++] = buf[i]; + if (pPortParam->m_iRecvLen > 200) { - pPortParam->m_au8RecvBuf[pPortParam->m_iRecvLen++] = buf[i]; - pPortParam->m_iRevStatus = 0; pPortParam->m_iRecvLen = 0; } - else - { - pPortParam->m_au8RecvBuf[pPortParam->m_iRecvLen++] = buf[i]; - if (pPortParam->m_iRecvLen > 200) - { - pPortParam->m_iRecvLen = 0; - } - } - break; } + 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() +{ + 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; + curserial = &serialport; - /********************************************************************************* - 上海欣影传感器协议数据处理 - **********************************************************************************/ - 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.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; - } + pPortParam->recvdatacnt++; + if (pPortParam->recvdatacnt < 2) + return; + // ++++++++++++++++++++++++++++ + //g_SelfTest.SensorsFault |= (0x800<m_au8RecvBuf[5]; - aipnt = pPortParam->SameTypeDevIdx; - uDevAddr = curserial->m_au8RecvBuf[4]; + *(uint8_t*)fvalua = curserial->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\ + // +slantpntmsg[aipnt][0].AiParam.EuValueDelta; + //slantpntmsg[aipnt][0].AiState = 1; + //if ((gDisSunRain & 0x20) == 0x20) + { + sprintf(szbuf, "倾角ID:%d slantangle X=%0.3f ", devparam.devaddr, fvalue); + //DebugLog(devparam.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.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; - fvalua = &fvalue; - memset(szbuf, 0, sizeof(szbuf)); - if (0x06 == cmdidx) + 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 { - 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)) + *(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)) { frnb = (GeneratingRandomNumber() % 101 - 50) / 1000.0; - pPortParam->aiValue[0].EuValue *= (1 + frnb); + pPortParam->aiValue[AirTempNo].EuValue *= (1 + frnb); + weatherpntmsg[AirTempNo].EuValue *= (1 + frnb); + //weatherpntmsg[AirTempNo].AiState = SER_SAMPLE; } 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'); + pPortParam->aiValue[AirTempNo].EuValue = fvalue;/*pPortParam->aiValue[0].AiParam.fFactor + pPortParam->aiValue[0].AiParam.EuValueDelta;*/ + weatherpntmsg[AirTempNo].EuValue = fvalue;/*weatherpntmsg[AirTempNo].AiParam.fFactor + weatherpntmsg[AirTempNo].AiParam.EuValueDelta;*/ } - //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) + pPortParam->aiValue[AirTempNo].AiState = SER_SAMPLE; + weatherpntmsg[AirTempNo].AiState = SER_SAMPLE; + //g_SelfTest.SensorsFault |= (0x01); + //if ((gDisSunRain & 0x80) == 0x80) { - sprintf(szbuf, "%sY =%0.3f ", szbuf, fvalue); - DebugLog(devparam[devno].commid, szbuf, 'V'); + sprintf(szbuf, "ID:%d 温度:%0.3f ", devparam.devaddr, fvalue); + //DebugLog(devparam.commid, szbuf, 'V'); } - if ((fvalue < -59) || (fvalue > 59)) + break; + case 2: /*气压*/ + if ((fvalue < 550) || (fvalue > 1060)) { - frnb = (GeneratingRandomNumber() % 101 - 50) / 1000.0; - pPortParam->aiValue[1].EuValue *= (1 + frnb); - //slantpntmsg[aipnt][1].EuValue *= (1+frnb); + frnb = (GeneratingRandomNumber() % 41 - 20) / 10000.0; + pPortParam->aiValue[AtmosNo].EuValue *= (1 + frnb); + weatherpntmsg[AtmosNo].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]; + { + pPortParam->aiValue[AtmosNo].EuValue = fvalue;/*pPortParam->aiValue[5].AiParam.fFactor + pPortParam->aiValue[5].AiParam.EuValueDelta;*/ + weatherpntmsg[AtmosNo].EuValue = fvalue;/*weatherpntmsg[AtmosNo].AiParam.fFactor + weatherpntmsg[AtmosNo].AiParam.EuValueDelta;*/ + } + pPortParam->aiValue[AtmosNo].AiState = SER_SAMPLE; + weatherpntmsg[AtmosNo].AiState = SER_SAMPLE; + //g_SelfTest.SensorsFault |= (0x10); + //if ((gDisSunRain & 0x80) == 0x80) + { + sprintf(szbuf, "气压:%0.3f ", fvalue); + DebugLog(devparam.commid, szbuf, 'V'); + } + break; + case 3: /*湿度*/ + if ((fvalue < 0) || (fvalue > 100)) + { + frnb = (GeneratingRandomNumber() % 41 - 20) / 1000.0; + pPortParam->aiValue[HumidityNo].EuValue *= (1 + frnb); + weatherpntmsg[HumidityNo].EuValue *= (1 + frnb); + } 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]; + pPortParam->aiValue[HumidityNo].EuValue = fvalue;/*pPortParam->aiValue[1].AiParam.fFactor + pPortParam->aiValue[1].AiParam.EuValueDelta;*/ + weatherpntmsg[HumidityNo].EuValue = fvalue;/*weatherpntmsg[HumidityNo].AiParam.fFactor + weatherpntmsg[HumidityNo].AiParam.EuValueDelta;*/ } - switch (curserial->m_au8RecvBuf[j]) + pPortParam->aiValue[HumidityNo].AiState = SER_SAMPLE; + weatherpntmsg[HumidityNo].AiState = SER_SAMPLE; + //g_SelfTest.SensorsFault |= (0x02); + //if ((gDisSunRain & 0x80) == 0x80) { - case 1: /*温度*/ - if ((fvalue < -40) || (fvalue > 85)) - { - frnb = (GeneratingRandomNumber() % 101 - 50) / 1000.0; - pPortParam->aiValue[AirTempNo].EuValue *= (1 + frnb); - weatherpntmsg[AirTempNo].EuValue *= (1 + frnb); - //weatherpntmsg[AirTempNo].AiState = SER_SAMPLE; - } - else - { - pPortParam->aiValue[AirTempNo].EuValue = fvalue;/*pPortParam->aiValue[0].AiParam.fFactor + pPortParam->aiValue[0].AiParam.EuValueDelta;*/ - weatherpntmsg[AirTempNo].EuValue = fvalue;/*weatherpntmsg[AirTempNo].AiParam.fFactor + weatherpntmsg[AirTempNo].AiParam.EuValueDelta;*/ - } - pPortParam->aiValue[AirTempNo].AiState = SER_SAMPLE; - weatherpntmsg[AirTempNo].AiState = SER_SAMPLE; - //g_SelfTest.SensorsFault |= (0x01); - //if ((gDisSunRain & 0x80) == 0x80) - { - sprintf(szbuf, "ID:%d 温度:%0.3f ", devparam[devno].devaddr, fvalue); - //DebugLog(devparam[devno].commid, szbuf, 'V'); - } - break; - case 2: /*气压*/ - if ((fvalue < 550) || (fvalue > 1060)) - { - frnb = (GeneratingRandomNumber() % 41 - 20) / 10000.0; - pPortParam->aiValue[AtmosNo].EuValue *= (1 + frnb); - weatherpntmsg[AtmosNo].EuValue *= (1 + frnb); - } - else - { - pPortParam->aiValue[AtmosNo].EuValue = fvalue;/*pPortParam->aiValue[5].AiParam.fFactor + pPortParam->aiValue[5].AiParam.EuValueDelta;*/ - weatherpntmsg[AtmosNo].EuValue = fvalue;/*weatherpntmsg[AtmosNo].AiParam.fFactor + weatherpntmsg[AtmosNo].AiParam.EuValueDelta;*/ - } - pPortParam->aiValue[AtmosNo].AiState = SER_SAMPLE; - weatherpntmsg[AtmosNo].AiState = SER_SAMPLE; - //g_SelfTest.SensorsFault |= (0x10); - //if ((gDisSunRain & 0x80) == 0x80) - { - sprintf(szbuf, "气压:%0.3f ", fvalue); - DebugLog(devparam[devno].commid, szbuf, 'V'); - } - break; - case 3: /*湿度*/ - if ((fvalue < 0) || (fvalue > 100)) - { - frnb = (GeneratingRandomNumber() % 41 - 20) / 1000.0; - pPortParam->aiValue[HumidityNo].EuValue *= (1 + frnb); - weatherpntmsg[HumidityNo].EuValue *= (1 + frnb); - } - else - { - pPortParam->aiValue[HumidityNo].EuValue = fvalue;/*pPortParam->aiValue[1].AiParam.fFactor + pPortParam->aiValue[1].AiParam.EuValueDelta;*/ - weatherpntmsg[HumidityNo].EuValue = fvalue;/*weatherpntmsg[HumidityNo].AiParam.fFactor + weatherpntmsg[HumidityNo].AiParam.EuValueDelta;*/ - } - pPortParam->aiValue[HumidityNo].AiState = SER_SAMPLE; - weatherpntmsg[HumidityNo].AiState = SER_SAMPLE; - //g_SelfTest.SensorsFault |= (0x02); - //if ((gDisSunRain & 0x80) == 0x80) - { - sprintf(szbuf, "%s湿度:%0.3f ", szbuf, fvalue); - DebugLog(devparam[devno].commid, szbuf, 'V'); - } - break; - case 4: /*雨量*/ - break; - case 5: /*日照*/ - break; - case 6: /*风速*/ - if ((fvalue < 0) || (fvalue > 80)) - { - frnb = (GeneratingRandomNumber() % 41 - 20) / 1000.0; - pPortParam->aiValue[WindSpeedNo].EuValue *= (1 + frnb); - weatherpntmsg[WindSpeedNo].EuValue *= (1 + frnb); - } - else - { - pPortParam->aiValue[WindSpeedNo].EuValue = fvalue;/*pPortParam->aiValue[2].AiParam.fFactor + pPortParam->aiValue[2].AiParam.EuValueDelta;*/ - weatherpntmsg[WindSpeedNo].EuValue = fvalue;/*weatherpntmsg[WindSpeedNo].AiParam.fFactor + weatherpntmsg[WindSpeedNo].AiParam.EuValueDelta;*/ - } - pPortParam->aiValue[WindSpeedNo].AiState = SER_SAMPLE; - weatherpntmsg[WindSpeedNo].AiState = SER_SAMPLE; - //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, "ID:%d 风速:%0.3f ", devparam[devno].devaddr, fvalue); - } - break; - case 7: /*风向*/ - if ((fvalue / 1000 < 0) || (fvalue / 1000 > 359.99)) - { - frnb = (GeneratingRandomNumber() % 41 - 20) / 1000.0; - pPortParam->aiValue[WindDirectionNo].EuValue *= (1 + frnb); - weatherpntmsg[WindDirectionNo].EuValue *= (1 + frnb); - } - else - { - pPortParam->aiValue[WindDirectionNo].EuValue = fvalue;/*pPortParam->aiValue[3].AiParam.fFactor + pPortParam->aiValue[3].AiParam.EuValueDelta;*/ - weatherpntmsg[WindDirectionNo].EuValue = fvalue;/*weatherpntmsg[WindDirectionNo].AiParam.fFactor + weatherpntmsg[WindDirectionNo].AiParam.EuValueDelta;*/ - } - pPortParam->aiValue[WindDirectionNo].AiState = SER_SAMPLE; - weatherpntmsg[WindDirectionNo].AiState = SER_SAMPLE; - //g_SelfTest.SensorsFault |= (0x08); - //if ((gDisSunRain & 0x10) == 0x10) - { - sprintf(szbuf, "%s 风向:%0.3f ", szbuf, fvalue); - DebugLog(devparam[devno].commid, szbuf, 'V'); - } - break; - case 8: /*拉力*/ - pPortParam->recvdatacnt++; - if (pPortParam->recvdatacnt < 2) - break; - - pPortParam->aiValue[0].EuValue = fvalue;/*pPortParam->aiValue[0].AiParam.fFactor\ - +pPortParam->aiValue[0].AiParam.EuValueDelta;*/ - //rallypntmsg[aipnt][0].EuValue = fvalue*rallypntmsg[aipnt][0].AiParam.fFactor\ - // +rallypntmsg[aipnt][0].AiParam.EuValueDelta; - pPortParam->aiValue[0].AiState = SER_SAMPLE; - //rallypntmsg[aipnt][0].AiState = 1; - sprintf(szbuf, "地址%d拉力:%0.3fKg ", devparam[devno].devaddr, fvalue); - DebugLog(devparam[devno].commid, szbuf, 'V'); - //} - break; - case 9: /*倾角传感器X轴倾角*/ - if ((fvalue < -59) || (fvalue > 59)) - { - frnb = (GeneratingRandomNumber() % 101 - 50) / 1000.0; - pPortParam->aiValue[0].EuValue *= (1 + frnb); - //slantpntmsg[aipnt][0].EuValue *= (1+frnb); - } - else - { - pPortParam->aiValue[0].EuValue = fvalue;/*pPortParam->aiValue[0].AiParam.fFactor\ - +pPortParam->aiValue[0].AiParam.EuValueDelta;*/ - //slantpntmsg[aipnt][0].EuValue = fvalue*slantpntmsg[aipnt][0].AiParam.fFactor\ - //+slantpntmsg[aipnt][0].AiParam.EuValueDelta; - } - pPortParam->aiValue[0].AiState = SER_SAMPLE; - //slantpntmsg[aipnt][0].AiState = 1; - sprintf(szbuf, "倾角ID:%d slantangle X=%0.3f ", devparam[devno].devaddr, fvalue); + sprintf(szbuf, "%s湿度:%0.3f ", szbuf, fvalue); + DebugLog(devparam.commid, szbuf, 'V'); + } + break; + case 4: /*雨量*/ + break; + case 5: /*日照*/ + break; + case 6: /*风速*/ + if ((fvalue < 0) || (fvalue > 80)) + { + frnb = (GeneratingRandomNumber() % 41 - 20) / 1000.0; + pPortParam->aiValue[WindSpeedNo].EuValue *= (1 + frnb); + weatherpntmsg[WindSpeedNo].EuValue *= (1 + frnb); + } + else + { + pPortParam->aiValue[WindSpeedNo].EuValue = fvalue;/*pPortParam->aiValue[2].AiParam.fFactor + pPortParam->aiValue[2].AiParam.EuValueDelta;*/ + weatherpntmsg[WindSpeedNo].EuValue = fvalue;/*weatherpntmsg[WindSpeedNo].AiParam.fFactor + weatherpntmsg[WindSpeedNo].AiParam.EuValueDelta;*/ + } + pPortParam->aiValue[WindSpeedNo].AiState = SER_SAMPLE; + weatherpntmsg[WindSpeedNo].AiState = SER_SAMPLE; + //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, "ID:%d 风速:%0.3f ", devparam.devaddr, fvalue); + } + break; + case 7: /*风向*/ + if ((fvalue / 1000 < 0) || (fvalue / 1000 > 359.99)) + { + frnb = (GeneratingRandomNumber() % 41 - 20) / 1000.0; + pPortParam->aiValue[WindDirectionNo].EuValue *= (1 + frnb); + weatherpntmsg[WindDirectionNo].EuValue *= (1 + frnb); + } + else + { + pPortParam->aiValue[WindDirectionNo].EuValue = fvalue;/*pPortParam->aiValue[3].AiParam.fFactor + pPortParam->aiValue[3].AiParam.EuValueDelta;*/ + weatherpntmsg[WindDirectionNo].EuValue = fvalue;/*weatherpntmsg[WindDirectionNo].AiParam.fFactor + weatherpntmsg[WindDirectionNo].AiParam.EuValueDelta;*/ + } + pPortParam->aiValue[WindDirectionNo].AiState = SER_SAMPLE; + weatherpntmsg[WindDirectionNo].AiState = SER_SAMPLE; + //g_SelfTest.SensorsFault |= (0x08); + //if ((gDisSunRain & 0x10) == 0x10) + { + sprintf(szbuf, "%s 风向:%0.3f ", szbuf, fvalue); + DebugLog(devparam.commid, szbuf, 'V'); + } + break; + case 8: /*拉力*/ + pPortParam->recvdatacnt++; + if (pPortParam->recvdatacnt < 2) break; - case 10: /*倾角传感器Y轴倾角*/ - sprintf(szbuf, "%s Y =%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); - } - else - { - pPortParam->aiValue[1].EuValue = fvalue;/*pPortParam->aiValue[1].AiParam.fFactor\ - +pPortParam->aiValue[1].AiParam.EuValueDelta;*/ - } - pPortParam->aiValue[1].AiState = SER_SAMPLE; - //slantpntmsg[aipnt][1].AiState = 1; - break; + pPortParam->aiValue[0].EuValue = fvalue;/*pPortParam->aiValue[0].AiParam.fFactor\ + +pPortParam->aiValue[0].AiParam.EuValueDelta;*/ + //rallypntmsg[aipnt][0].EuValue = fvalue*rallypntmsg[aipnt][0].AiParam.fFactor\ + // +rallypntmsg[aipnt][0].AiParam.EuValueDelta; + pPortParam->aiValue[0].AiState = SER_SAMPLE; + //rallypntmsg[aipnt][0].AiState = 1; + sprintf(szbuf, "地址%d拉力:%0.3fKg ", devparam.devaddr, fvalue); + DebugLog(devparam.commid, szbuf, 'V'); + //} + break; + case 9: /*倾角传感器X轴倾角*/ + if ((fvalue < -59) || (fvalue > 59)) + { + frnb = (GeneratingRandomNumber() % 101 - 50) / 1000.0; + pPortParam->aiValue[0].EuValue *= (1 + frnb); + //slantpntmsg[aipnt][0].EuValue *= (1+frnb); + } + else + { + pPortParam->aiValue[0].EuValue = fvalue;/*pPortParam->aiValue[0].AiParam.fFactor\ + +pPortParam->aiValue[0].AiParam.EuValueDelta;*/ + //slantpntmsg[aipnt][0].EuValue = fvalue*slantpntmsg[aipnt][0].AiParam.fFactor\ + //+slantpntmsg[aipnt][0].AiParam.EuValueDelta; + } + pPortParam->aiValue[0].AiState = SER_SAMPLE; + //slantpntmsg[aipnt][0].AiState = 1; + sprintf(szbuf, "倾角ID:%d slantangle X=%0.3f ", devparam.devaddr, fvalue); + break; + case 10: /*倾角传感器Y轴倾角*/ + sprintf(szbuf, "%s Y =%0.3f ", szbuf, fvalue); + DebugLog(devparam.commid, szbuf, 'V'); + if ((fvalue < -59) || (fvalue > 59)) + { + frnb = (GeneratingRandomNumber() % 101 - 50) / 1000.0; + pPortParam->aiValue[1].EuValue *= (1 + frnb); } + else + { + pPortParam->aiValue[1].EuValue = fvalue;/*pPortParam->aiValue[1].AiParam.fFactor\ + +pPortParam->aiValue[1].AiParam.EuValueDelta;*/ + } + pPortParam->aiValue[1].AiState = SER_SAMPLE; + //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[1024]; - 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; } - -#if 0 - // 控制关闭传感器电源 - void Gm_CtrlCloseSensorsPower(int devidx) + else { - if ((devidx < 0) || (devidx > MAX_SERIAL_DEV_NUM - 1)) - return; - srdt.ms_dev[devidx].uOpenPowerFlag = CLOSEPOWER; + iRetVal = atoi(buf); } + return iRetVal; +} + +#if 0 +// 控制关闭传感器电源 +void Gm_CtrlCloseSensorsPower(int devidx) +{ + if ((devidx < 0) || (devidx > MAX_SERIAL_DEV_NUM - 1)) + return; + srdt.ms_dev.uOpenPowerFlag = CLOSEPOWER; +} - // 检查传感器电源是否应该关闭或打开 - void Gm_CheckSensorsPower(void) - { - int i, j; +// 检查传感器电源是否应该关闭或打开 +void Gm_CheckSensorsPower(void) +{ + int i, j; - for (i = 0; i < MAX_SERIAL_DEV_NUM - 2; i++) + for (i = 0; i < MAX_SERIAL_DEV_NUM - 2; i++) + { + if ((1 > srdt.ms_dev[i].ProtocolIdx) || (INVALID_PROTOCOL <= srdt.ms_dev[i].ProtocolIdx)) + continue; + if ((PELCO_P_PROTOCOL == srdt.ms_dev[i].ProtocolIdx) || (PELCO_D_PROTOCOL == srdt.ms_dev[i].ProtocolIdx) + || (SERIALCAMERA_PROTOCOL == srdt.ms_dev[i].ProtocolIdx)) + continue; + // 需要传感器处于上电状态 + for (j = 0; j < MAX_SERIAL_DEV_NUM - 2; j++) { - if ((1 > srdt.ms_dev[i].ProtocolIdx) || (INVALID_PROTOCOL <= srdt.ms_dev[i].ProtocolIdx)) - continue; - if ((PELCO_P_PROTOCOL == srdt.ms_dev[i].ProtocolIdx) || (PELCO_D_PROTOCOL == srdt.ms_dev[i].ProtocolIdx) - || (SERIALCAMERA_PROTOCOL == srdt.ms_dev[i].ProtocolIdx)) - continue; - // 需要传感器处于上电状态 - for (j = 0; j < MAX_SERIAL_DEV_NUM - 2; j++) - { - if ((srdt.ms_dev[i].PowerPort == srdt.ms_dev[j].PowerPort) && (srdt.ms_dev[j].uOpenPowerFlag == OPENPOWER)) - break; - } - if (j < MAX_SERIAL_DEV_NUM - 2) - continue; - + if ((srdt.ms_dev[i].PowerPort == srdt.ms_dev[j].PowerPort) && (srdt.ms_dev[j].uOpenPowerFlag == OPENPOWER)) + break; } + if (j < MAX_SERIAL_DEV_NUM - 2) + continue; + } +} #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++) - { - devparam[i].IsNoInsta = sensorParam[i].IsNoInsta; - if (0 == sensorParam[i].IsNoInsta) - continue; - devparam[i].ProtocolIdx = sensorParam[i].SensorsType; - devparam[i].devaddr = sensorParam[i].devaddr; - devparam[i].baudrate = getBaudrate(sensorParam[i].baudrate); - memset(devparam[i].pathname, 0, sizeof(devparam[i].pathname)); - memmove(devparam[i].pathname, sensorParam[i].pathname, sizeof(devparam[i].pathname)); - devparam[i].databit = sensorParam[i].databit; - devparam[i].stopbit = (int)(sensorParam[i].stopbit * 10); - devparam[i].CameraChannel = sensorParam[i].CameraChannel; - devparam[i].Phase = sensorParam[i].Phase; - } + for (i = 0; i < MAX_SERIAL_DEV_NUM; i++) + { + devparam[i].IsNoInsta = sensorParam[i].IsNoInsta; + if (0 == sensorParam[i].IsNoInsta) + continue; + devparam[i].ProtocolIdx = sensorParam[i].SensorsType; + devparam[i].devaddr = sensorParam[i].devaddr; + devparam[i].baudrate = getBaudrate(sensorParam[i].baudrate); + memset(devparam[i].pathname, 0, sizeof(devparam[i].pathname)); + memmove(devparam[i].pathname, sensorParam[i].pathname, sizeof(devparam[i].pathname)); + devparam[i].databit = sensorParam[i].databit; + devparam[i].stopbit = (int)(sensorParam[i].stopbit * 10); + devparam[i].CameraChannel = sensorParam[i].CameraChannel; + devparam[i].Phase = sensorParam[i].Phase; + } #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)) { -#if 0 - int i; - //speed_t baudrate; + delete_old_files(path, days); + ideletefile++; + } + if (0 < t0.tm_hour) + ideletefile = 0; +#endif + GM_StartSerialComm(); +} - for (i = 0; i < MAX_SERIAL_DEV_NUM; i++) - { - devparam[i].IsNoInsta = sensorParam[i].IsNoInsta; - if (0 == sensorParam[i].IsNoInsta) - continue; - devparam[i].ProtocolIdx = sensorParam[i].SensorsType; - devparam[i].devaddr = sensorParam[i].devaddr; - //baudrate = getBaudrate(sensorParam[i].baudrate); - devparam[i].baudrate = getBaudrate(sensorParam[i].baudrate); - devparam[i].databit = sensorParam[i].databit; - devparam[i].stopbit = (int)(sensorParam[i].stopbit * 10); - devparam[i].CameraChannel = sensorParam[i].CameraChannel; - devparam[i].Phase = sensorParam[i].Phase; - memset(devparam[i].pathname, 0, sizeof(devparam[i].pathname)); - memmove(devparam[i].pathname, sensorParam[i].pathname, sizeof(devparam[i].pathname)); - } +void CameraPhotoCmd(int phototime, u_char channel, int cmdidx, u_char bImageSize, u_char presetno) +{ +#if 0 + int i; + //speed_t baudrate; - FindDevUseSerialCommNo(); - for (;;) - { - Gm_CtrlPtzCmd(1, P_MOVE_LEFT); - sleep(3); - GM_AllSerialComRecv(); - Gm_CtrlPtzCmd(1, Cmd_Cancel); - sleep(10); - } -#endif - srdt.bImageSize = bImageSize; - srdt.presetno = presetno; - srdt.sendphototime = phototime; - GM_StartSerialCameraPhoto(1, cmdidx); + for (i = 0; i < MAX_SERIAL_DEV_NUM; i++) + { + devparam[i].IsNoInsta = sensorParam[i].IsNoInsta; + if (0 == sensorParam[i].IsNoInsta) + continue; + devparam[i].ProtocolIdx = sensorParam[i].SensorsType; + devparam[i].devaddr = sensorParam[i].devaddr; + //baudrate = getBaudrate(sensorParam[i].baudrate); + devparam[i].baudrate = getBaudrate(sensorParam[i].baudrate); + devparam[i].databit = sensorParam[i].databit; + devparam[i].stopbit = (int)(sensorParam[i].stopbit * 10); + devparam[i].CameraChannel = sensorParam[i].CameraChannel; + devparam[i].Phase = sensorParam[i].Phase; + memset(devparam[i].pathname, 0, sizeof(devparam[i].pathname)); + memmove(devparam[i].pathname, sensorParam[i].pathname, sizeof(devparam[i].pathname)); } - /* 串口启动接口函数 结束*/ - /* 数据和图片采集数据返回函数 开始*/ - int GetWeatherData(Data_DEF *data, int datano) + FindDevUseSerialCommNo(); + for (;;) { - 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; + Gm_CtrlPtzCmd(1, P_MOVE_LEFT); + sleep(3); + GM_AllSerialComRecv(); + Gm_CtrlPtzCmd(1, Cmd_Cancel); + sleep(10); } +#endif + srdt.bImageSize = bImageSize; + srdt.presetno = presetno; + srdt.sendphototime = phototime; + GM_StartSerialCameraPhoto(1, cmdidx); +} +/* 串口启动接口函数 结束*/ + +/* 数据和图片采集数据返回函数 开始*/ +int GetWeatherData(Data_DEF *data, int datano) +{ + int i; - int GetAirTempData(Data_DEF *airt) + 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)) { - 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[datano].AiState = SER_IDLE; + return 2; } + return 1; +} - int GetHumidityData(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[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[AirTempNo].AiState = SER_IDLE; + return 2; } + return 1; +} - int GetWindSpeedData(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[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[HumidityNo].AiState = SER_IDLE; + return 2; } + return 1; +} - int GetWindDirectionData(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[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[WindSpeedNo].AiState = SER_IDLE; + return 2; } + return 1; +} - int GetRainfallData(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[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[WindDirectionNo].AiState = SER_IDLE; + return 2; } + return 1; +} - int GetAtmosData(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[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[RainfallNo].AiState = SER_IDLE; + return 2; } + return 1; +} - int GetOpticalRadiationData(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[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[AtmosNo].AiState = SER_IDLE; + return 2; } + return 1; +} - int GetPullValue(int devno, Data_DEF *data) +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 == 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; + weatherpntmsg[OpticalRadiationNo].AiState = SER_IDLE; + return 2; } + return 1; +} - int GetAngleValue(int devno, Data_DEF *data, int Xy) +int GetPullValue(Data_DEF *data) +{ + if (NULL == data) + return -1; + if (RALLY_PROTOCOL != devparam.ProtocolIdx) + return -1; + data->EuValue = srdt.ms_dev.aiValue[0].EuValue; + data->AiState = srdt.ms_dev.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 (SLANT_PROTOCOL != devparam[devno].ProtocolIdx) - return -1; - if ((0 > Xy) || (1 < Xy)) - return -1; + srdt.ms_dev.aiValue[0].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 GetAngleValue(Data_DEF *data, int Xy) +{ + if (NULL == data) + return -1; + if (SLANT_PROTOCOL != devparam.ProtocolIdx) + return -1; + if ((0 > Xy) || (1 < Xy)) + return -1; + + data->EuValue = srdt.ms_dev.aiValue[Xy].EuValue; + data->AiState = srdt.ms_dev.aiValue[Xy].AiState; + if ((SER_SAMPLEFAIL == data->AiState) || (SAMPLINGSUCCESS == data->AiState)) + { + srdt.ms_dev.aiValue[Xy].AiState = SER_IDLE; + return 2; } + return 1; +} - int GetImage(int devno, IMAGE_DEF *photo) +int GetImage(IMAGE_DEF *photo) +{ + if (NULL == photo) + return -1; + if ((PELCO_D_PROTOCOL != devparam.ProtocolIdx) && (PELCO_P_PROTOCOL != devparam.ProtocolIdx) && (SERIALCAMERA_PROTOCOL != devparam.ProtocolIdx)) + return -1; + photo->presetno = srdt.ms_dev.image.presetno; + photo->phototime = srdt.ms_dev.image.phototime; + memset(photo->photoname, 0, sizeof(photo->photoname)); + memmove(photo->photoname, srdt.ms_dev.image.photoname, sizeof(photo->photoname)); + photo->imagelen = srdt.ms_dev.image.imagelen; + photo->state = srdt.ms_dev.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.image.state = SER_IDLE; + return 2; } - /* 数据和图片采集数据返回函数 结束*/ \ No newline at end of file + return 1; +} +/* 数据和图片采集数据返回函数 结束*/ \ No newline at end of file