|
|
|
@ -483,9 +483,9 @@ int serial_port_comm()
|
|
|
|
|
weather_comm(portparm);
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static speed_t getBaudrate(int baudrate)
|
|
|
|
|
static speed_t getBaudrate(unsigned int baudrate)
|
|
|
|
|
{
|
|
|
|
|
switch(baudrate) {
|
|
|
|
|
case 0: return B0;
|
|
|
|
@ -519,10 +519,9 @@ static speed_t getBaudrate(int baudrate)
|
|
|
|
|
case 3000000: return B3000000;
|
|
|
|
|
case 3500000: return B3500000;
|
|
|
|
|
case 4000000: return B4000000;
|
|
|
|
|
default: return -1;
|
|
|
|
|
default: return B9600;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
//u_char serialstatus[MAX_SERIAL_PORT_NUM];
|
|
|
|
|
SRDT_DEF srdt;
|
|
|
|
@ -651,7 +650,7 @@ void Gm_OpenSerialPort(int devidx)
|
|
|
|
|
|
|
|
|
|
if((devidx < 0) || (devidx >= MAX_SERIAL_DEV_NUM))
|
|
|
|
|
return;
|
|
|
|
|
if(serialport[devparam[devidx].commid].fd < 0)
|
|
|
|
|
if(serialport[devparam[devidx].commid].fd <= 0)
|
|
|
|
|
{
|
|
|
|
|
fd = open(devparam[devidx].pathname, O_RDWR | O_NDELAY);
|
|
|
|
|
if(fd < 0)
|
|
|
|
@ -735,10 +734,11 @@ int Gm_SetSerialPortParam(int commid)
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void Gm_InitSerialComm_Test()
|
|
|
|
|
void Gm_InitSerialComm_Test(SENSOR_PARAM *sensorParam)
|
|
|
|
|
{
|
|
|
|
|
int i, j;
|
|
|
|
|
|
|
|
|
|
#if 1
|
|
|
|
|
srdt.PtzCmdType = Cmd_Cancel; // 云台指令类型
|
|
|
|
|
for(i=0; i<MAX_SERIAL_PORT_NUM; i++)
|
|
|
|
|
{
|
|
|
|
@ -760,38 +760,45 @@ void Gm_InitSerialComm_Test()
|
|
|
|
|
//g_serialparam[1].Baud = 1200;
|
|
|
|
|
for(i=0; i<MAX_SERIAL_DEV_NUM; i++)
|
|
|
|
|
devparam[i].IsNoInsta = 0;
|
|
|
|
|
devparam[0].ProtocolIdx = WEATHER_PROTOCOL;
|
|
|
|
|
devparam[0].baudrate = B9600;
|
|
|
|
|
devparam[0].databit = 8;
|
|
|
|
|
memset(devparam[0].stopbit, 0, sizeof(devparam[0].stopbit));
|
|
|
|
|
sprintf(devparam[0].stopbit, "1");
|
|
|
|
|
devparam[0].parity = 0;
|
|
|
|
|
devparam[0].IsNoInsta = 1;
|
|
|
|
|
#endif
|
|
|
|
|
if(NULL == sensorParam)
|
|
|
|
|
return;
|
|
|
|
|
srdt.camerauseserial = -1;
|
|
|
|
|
sensorParam[0].SensorsType = WEATHER_PROTOCOL;
|
|
|
|
|
sensorParam[0].baudrate = 9600;
|
|
|
|
|
sensorParam[0].databit = 8;
|
|
|
|
|
//memset(devparam[0].stopbit, 0, sizeof(devparam[0].stopbit));
|
|
|
|
|
//sprintf(devparam[0].stopbit, "1");
|
|
|
|
|
sensorParam[0].stopbit = 1;
|
|
|
|
|
sensorParam[0].parity = 'n';
|
|
|
|
|
sensorParam[0].IsNoInsta = 1;
|
|
|
|
|
//devparam[0].PowerPort = 2;
|
|
|
|
|
//devparam[0].devaddr = 4;
|
|
|
|
|
devparam[0].devaddr = 10;
|
|
|
|
|
|
|
|
|
|
devparam[1].ProtocolIdx = WEATHER_PROTOCOL;
|
|
|
|
|
devparam[1].baudrate = B9600;
|
|
|
|
|
devparam[1].databit = 8;
|
|
|
|
|
memset(devparam[1].stopbit, 0, sizeof(devparam[1].stopbit));
|
|
|
|
|
sprintf(devparam[1].stopbit, "1");
|
|
|
|
|
devparam[1].parity = 0;
|
|
|
|
|
devparam[1].IsNoInsta = 1;
|
|
|
|
|
//devparam[1].PowerPort = 14;
|
|
|
|
|
//devparam[1].devaddr = 1;
|
|
|
|
|
devparam[1].devaddr = 2;
|
|
|
|
|
|
|
|
|
|
devparam[2].ProtocolIdx = RALLY_PROTOCOL;
|
|
|
|
|
devparam[2].baudrate = B9600;
|
|
|
|
|
devparam[2].databit = 8;
|
|
|
|
|
memset(devparam[2].stopbit, 0, sizeof(devparam[2].stopbit));
|
|
|
|
|
sprintf(devparam[2].stopbit, "1");
|
|
|
|
|
devparam[2].parity = 0;
|
|
|
|
|
devparam[2].IsNoInsta = 1;
|
|
|
|
|
//devparam[2].PowerPort = 3;
|
|
|
|
|
//devparam[2].devaddr = 13;
|
|
|
|
|
devparam[2].devaddr = 13;
|
|
|
|
|
sensorParam[0].devaddr = 10;
|
|
|
|
|
|
|
|
|
|
sensorParam[1].SensorsType = WEATHER_PROTOCOL;
|
|
|
|
|
sensorParam[1].baudrate = 9600;
|
|
|
|
|
sensorParam[1].databit = 8;
|
|
|
|
|
//memset(devparam[1].stopbit, 0, sizeof(devparam[1].stopbit));
|
|
|
|
|
//sprintf(devparam[1].stopbit, "1");
|
|
|
|
|
sensorParam[1].stopbit = 1;
|
|
|
|
|
sensorParam[1].parity = 0;
|
|
|
|
|
sensorParam[1].IsNoInsta = 1;
|
|
|
|
|
//sensorParam[1].PowerPort = 14;
|
|
|
|
|
//sensorParam[1].devaddr = 1;
|
|
|
|
|
sensorParam[1].devaddr = 2;
|
|
|
|
|
|
|
|
|
|
sensorParam[2].SensorsType = RALLY_PROTOCOL;
|
|
|
|
|
sensorParam[2].baudrate = 9600;
|
|
|
|
|
sensorParam[2].databit = 8;
|
|
|
|
|
//memset(devparam[2].stopbit, 0, sizeof(devparam[2].stopbit));
|
|
|
|
|
//sprintf(devparam[2].stopbit, "1");
|
|
|
|
|
sensorParam[0].stopbit = 1;
|
|
|
|
|
sensorParam[2].parity = 0;
|
|
|
|
|
sensorParam[2].IsNoInsta = 1;
|
|
|
|
|
//sensorParam[2].PowerPort = 3;
|
|
|
|
|
//sensorParam[2].devaddr = 13;
|
|
|
|
|
sensorParam[2].devaddr = 13;
|
|
|
|
|
#if 0
|
|
|
|
|
devparam[3].ProtocolIdx = PELCO_P_PROTOCOL;
|
|
|
|
|
devparam[3].baudrate = 9600;
|
|
|
|
@ -886,15 +893,16 @@ void Gm_InitSerialComm_Test()
|
|
|
|
|
devparam[12].devaddr = 5;
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
devparam[13].ProtocolIdx = SLANT_PROTOCOL;
|
|
|
|
|
devparam[13].baudrate = B9600;
|
|
|
|
|
devparam[13].databit = 8;
|
|
|
|
|
memset(devparam[13].stopbit, 0, sizeof(devparam[13].stopbit));
|
|
|
|
|
sprintf(devparam[13].stopbit, "1");
|
|
|
|
|
devparam[13].parity = 0;
|
|
|
|
|
sensorParam[13].SensorsType = SLANT_PROTOCOL;
|
|
|
|
|
sensorParam[13].baudrate = B9600;
|
|
|
|
|
sensorParam[13].databit = 8;
|
|
|
|
|
//memset(devparam[13].stopbit, 0, sizeof(devparam[13].stopbit));
|
|
|
|
|
//sprintf(devparam[13].stopbit, "1");
|
|
|
|
|
sensorParam[0].stopbit = 1;
|
|
|
|
|
sensorParam[13].parity = 0;
|
|
|
|
|
//devparam[13].PowerPort = 4;
|
|
|
|
|
devparam[13].IsNoInsta = 1;
|
|
|
|
|
devparam[13].devaddr = 2;
|
|
|
|
|
sensorParam[13].IsNoInsta = 1;
|
|
|
|
|
sensorParam[13].devaddr = 3;
|
|
|
|
|
#if 0
|
|
|
|
|
devparam[14].ProtocolIdx = SLANT_PROTOCOL;
|
|
|
|
|
devparam[14].baudrate = 1200;
|
|
|
|
@ -973,8 +981,11 @@ void Gm_InitSerialComm()
|
|
|
|
|
{
|
|
|
|
|
int i;
|
|
|
|
|
char szbuf[128];
|
|
|
|
|
SENSOR_PARAM sensorParam[MAX_SERIAL_DEV_NUM];
|
|
|
|
|
|
|
|
|
|
Gm_InitSerialComm_Test();
|
|
|
|
|
//if(NULL == sensorParam)
|
|
|
|
|
// return;
|
|
|
|
|
Gm_InitSerialComm_Test(sensorParam);
|
|
|
|
|
// srdt 配置
|
|
|
|
|
//srdt.PtzCmdType = Cmd_Cancel; // 云台指令类型
|
|
|
|
|
//srdt.SendStopPtzCmdTimeCnt=-1; // 发送云台停止指令计数
|
|
|
|
@ -1039,6 +1050,7 @@ void Gm_InitSerialComm()
|
|
|
|
|
LOGI("%s", szbuf);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
Collect_sensor_data(sensorParam);
|
|
|
|
|
#endif
|
|
|
|
|
#if 0
|
|
|
|
|
//u_char UseSerialidx; // 使用的串口序号
|
|
|
|
@ -1089,12 +1101,20 @@ void FindDevUseSerialCommNo()
|
|
|
|
|
case WIND_PROTOCOL:
|
|
|
|
|
case SLANT_PROTOCOL:
|
|
|
|
|
case RALLY_PROTOCOL:
|
|
|
|
|
case SERIALCAMERA_PROTOCOL:
|
|
|
|
|
memset(devparam[i].pathname, 0, sizeof(devparam[i].pathname));
|
|
|
|
|
/* 目前还不确定具体串口分配,暂时默认使用串口1</dev/ttyS0>*/
|
|
|
|
|
sprintf(devparam[i].pathname, "/dev/ttyS0");
|
|
|
|
|
devparam[i].commid = 0;
|
|
|
|
|
break;
|
|
|
|
|
case PELCO_D_PROTOCOL: /* 摄像机协议*/
|
|
|
|
|
case PELCO_P_PROTOCOL: /* 摄像机协议*/
|
|
|
|
|
case SERIALCAMERA_PROTOCOL: /* 串口摄像机协议*/
|
|
|
|
|
memset(devparam[i].pathname, 0, sizeof(devparam[i].pathname));
|
|
|
|
|
/* 目前还不确定具体串口分配,暂时默认使用串口1</dev/ttyS0>*/
|
|
|
|
|
sprintf(devparam[i].pathname, "/dev/ttyS0");
|
|
|
|
|
devparam[i].commid = 0;
|
|
|
|
|
srdt.camerauseserial = 0;
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
devparam[i].IsNoInsta = 0;
|
|
|
|
|
break;
|
|
|
|
@ -1109,19 +1129,21 @@ void GM_StartSerialComm()
|
|
|
|
|
long polltime=0;
|
|
|
|
|
|
|
|
|
|
// 测试使用初始化配置
|
|
|
|
|
Gm_InitSerialComm();
|
|
|
|
|
//Gm_InitSerialComm();
|
|
|
|
|
//DebugStringPrintf(szbuf, strlen(szbuf), 1);
|
|
|
|
|
// 此处不能对轮询设备标识清零,否则如果先起摄像机,就会导致poll乱掉
|
|
|
|
|
//memset((void*)srdt.curdevidx, 0, sizeof(srdt.curdevidx));
|
|
|
|
|
//Gm_OpenSerialPower(); /* 不在这使用*/
|
|
|
|
|
srdt.sampling[0] = 1;
|
|
|
|
|
//srdt.sampling[0] = 1;
|
|
|
|
|
FindDevUseSerialCommNo();
|
|
|
|
|
//Gm_InitSensorsIsUse();
|
|
|
|
|
// 初始化串口使用状态(需要考虑不同时间启用了摄像机使用)
|
|
|
|
|
if(0 == srdt.sampling[1])
|
|
|
|
|
//if(0 == srdt.sampling[1])
|
|
|
|
|
{
|
|
|
|
|
for (i = 0; i < MAX_SERIAL_PORT_NUM; i++)
|
|
|
|
|
{
|
|
|
|
|
if(i == srdt.camerauseserial)
|
|
|
|
|
continue;
|
|
|
|
|
serialport[i].m_iRevStatus = 0;
|
|
|
|
|
serialport[i].m_iRecvLen = 0;
|
|
|
|
|
serialport[i].m_iNeedRevLength = 0;
|
|
|
|
@ -1129,6 +1151,7 @@ void GM_StartSerialComm()
|
|
|
|
|
ClearCmdAllFlag(i);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
#if 0/* 简化插入使用摄像机过程,摄像机使用单独的串口*/
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
for (i = 0; i < MAX_SERIAL_PORT_NUM; i++)
|
|
|
|
@ -1148,6 +1171,7 @@ void GM_StartSerialComm()
|
|
|
|
|
ClearCmdAllFlag(i);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
for(i=0; i<MAX_SERIAL_DEV_NUM; i++)
|
|
|
|
|
{
|
|
|
|
|
if(0 == devparam[i].IsNoInsta)
|
|
|
|
@ -1246,7 +1270,6 @@ void GM_StartSerialComm()
|
|
|
|
|
// 启动使用串口拍照
|
|
|
|
|
void GM_StartSerialCameraPhoto(BYTE channel, int cmdidx)
|
|
|
|
|
{
|
|
|
|
|
BYTE bCameratype=SPEED_DOME_CAMERA;
|
|
|
|
|
int i, flag=0;
|
|
|
|
|
char szbuf[64];
|
|
|
|
|
|
|
|
|
@ -1271,15 +1294,15 @@ void GM_StartSerialCameraPhoto(BYTE channel, int cmdidx)
|
|
|
|
|
if(0x01 == (srdt.sampling & 0x01))
|
|
|
|
|
flag = 0;
|
|
|
|
|
#endif
|
|
|
|
|
serialport[i].m_iRevStatus = 0;
|
|
|
|
|
serialport[i].m_iRecvLen = 0;
|
|
|
|
|
serialport[i].m_iNeedRevLength = 0;
|
|
|
|
|
serialport[i].fd = -1;
|
|
|
|
|
ClearCmdAllFlag(i);
|
|
|
|
|
|
|
|
|
|
// 初始化串口使用状态
|
|
|
|
|
for(i=0; i<MAX_SERIAL_DEV_NUM; i++)
|
|
|
|
|
{
|
|
|
|
|
srdt.ms_dev[i].recvdatacnt = 0;
|
|
|
|
|
srdt.ms_dev[i].m_iRevStatus = 0;
|
|
|
|
|
srdt.ms_dev[i].m_iRecvLen = 0;
|
|
|
|
|
srdt.ms_dev[i].m_iNeedRevLength = 0;
|
|
|
|
|
//sprintf(szbuf, "装置%d, IsNoInsta=%d, 规约序号=%d", i+1, srdt.ms_dev[i].IsNoInsta, srdt.ms_dev[i].ProtocolIdx);
|
|
|
|
|
//DebugStringPrintf(szbuf, strlen(szbuf), 1);
|
|
|
|
|
if(0 == devparam[i].IsNoInsta)
|
|
|
|
|
{
|
|
|
|
|
srdt.ms_dev[i].IsNeedSerial = 0;
|
|
|
|
@ -1301,19 +1324,15 @@ void GM_StartSerialCameraPhoto(BYTE channel, int cmdidx)
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
break;
|
|
|
|
|
if(SERIAL_CAMERA == bCameratype)
|
|
|
|
|
{
|
|
|
|
|
if(0 == srdt.ms_dev[i].IsNeedSerial)
|
|
|
|
|
srdt.iLastGetPhotoNo = -1;
|
|
|
|
|
else
|
|
|
|
|
srdt.iLastGetPhotoNo = srdt.ms_dev[i].SerialCmdidx;
|
|
|
|
|
srdt.ms_dev[i].IsNeedSerial = 1;
|
|
|
|
|
srdt.ms_dev[i].SerialCmdidx = cmdidx;
|
|
|
|
|
srdt.ms_dev[i].FirstCmdTimeCnt = -1;
|
|
|
|
|
srdt.ms_dev[i].FirstCmdTimeCnt = get_msec();
|
|
|
|
|
srdt.sendphotocmdcnt = 0;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
srdt.ms_dev[i].IsNeedSerial = 0;
|
|
|
|
|
flag = 1;
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
if(1 == srdt.ms_dev[i].IsNeedSerial)
|
|
|
|
@ -1322,12 +1341,25 @@ void GM_StartSerialCameraPhoto(BYTE channel, int cmdidx)
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//if(0x01 == flag)
|
|
|
|
|
//{
|
|
|
|
|
if(0x01 == flag)
|
|
|
|
|
{
|
|
|
|
|
sprintf(szbuf, "摄像机拍照启动串口定时器!");
|
|
|
|
|
LOGI("%s", szbuf);
|
|
|
|
|
//StartTimer(GM_SERIAL_START, TIMER_CNT, GM_SerialTimer);
|
|
|
|
|
//}
|
|
|
|
|
for(;;)
|
|
|
|
|
{
|
|
|
|
|
usleep(10);
|
|
|
|
|
//LOGW("polltime=%ldms", get_msec()-polltime);
|
|
|
|
|
//polltime = get_msec();
|
|
|
|
|
if(GM_SerialTimer() < 0)
|
|
|
|
|
{
|
|
|
|
|
//LOGE("12V state=%d", getInt(CMD_SET_12V_EN_STATE));
|
|
|
|
|
LOGV("退出采样流程!");
|
|
|
|
|
sleep(15);
|
|
|
|
|
GM_StartSerialComm();
|
|
|
|
|
//break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
@ -1986,7 +2018,7 @@ int FindNextCameraPhotoCommand(int devidx)
|
|
|
|
|
char szbuf[128];
|
|
|
|
|
|
|
|
|
|
//如果命令缓冲区仍有命令,则退出本函数
|
|
|
|
|
if((srdt.ms_dev[devidx].UseSerialidx < 1) || (srdt.ms_dev[devidx].UseSerialidx >= MAX_SERIAL_PORT_NUM))
|
|
|
|
|
if((devparam[devidx].commid < 1) || (devparam[devidx].commid >= MAX_SERIAL_PORT_NUM))
|
|
|
|
|
return -1;
|
|
|
|
|
if(-1 == srdt.ms_dev[devidx].SerialCmdidx)/* 下发拍照指令*/
|
|
|
|
|
return -1;
|
|
|
|
@ -3090,4 +3122,29 @@ int GeneratingRandomNumber(void)
|
|
|
|
|
return randomdate;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void Collect_sensor_data(SENSOR_PARAM *sensorParam)
|
|
|
|
|
{
|
|
|
|
|
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);
|
|
|
|
|
devparam[i].databit = sensorParam[i].databit;
|
|
|
|
|
if((sensorParam[i].stopbit > 0) && (sensorParam[i].stopbit < 3))
|
|
|
|
|
{
|
|
|
|
|
memset(devparam[i].stopbit, 0, sizeof(devparam[i].stopbit));
|
|
|
|
|
sprintf(devparam[i].stopbit, "%0.1f", sensorParam[i].stopbit);
|
|
|
|
|
}
|
|
|
|
|
devparam[i].CameraChannel = sensorParam[i].CameraChannel;
|
|
|
|
|
devparam[i].Phase = sensorParam[i].Phase;
|
|
|
|
|
}
|
|
|
|
|
GM_StartSerialComm();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|