修改数据采集接入接口函数,完善摄像机使用接入代码等等

serial
huyizhong 12 months ago
parent b5e41a652c
commit 64bf7a5194

@ -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.sendphotocmdcnt = 0;
break;
}
srdt.ms_dev[i].IsNeedSerial = 0;
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 = get_msec();
srdt.sendphotocmdcnt = 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();
}

@ -56,7 +56,7 @@ typedef unsigned char BYTE;
#define PTZ_MOVETIME 1 // 云台移动等待时间为1秒
#define MAX_CHANNEL_NUM 2 /* 视频通道最大通道*/
#define MAX_PHOTO_FRAME_LEN 256 /* 图片数据一包最大长度*/
#define MAX_PHOTO_FRAME_LEN 1024 /* 图片数据一包最大长度*/
#define RECVDATA_MAXLENTH 2048 /* 接收数据缓冲区最大值*/
#define TIMER_CNT 50 // Poll命令定时器时间 5 ms
@ -136,6 +136,21 @@ typedef struct
float EuValue; // 遥测工程值
} AI_DEF;
// 上层调用采集传感器参数
typedef struct
{
unsigned int baudrate; /* 波特率*/
int databit; /* 数据位*/
float stopbit; /* 停止位*/
char parity; /* 校验位*/
//int commNo; /* 约定的串口序号例如我们PC机上显示的COM1。。。*/
u_char SensorsType; /* 传感器类型索引,大于 0*/
int devaddr; /* 装置(传感器)使用的地址*/
u_char IsNoInsta; /* 装置没有安装或者已经坏了(1:正常, 0:无效,坏了或没有安装)*/
u_char CameraChannel; /* 像机的通道号*/
u_char Phase; /* 传感器所安装相别指拉力和倾角11表示A1....*/
} SENSOR_PARAM;
// 需要配置的串口装置参数
typedef struct
{
@ -149,7 +164,7 @@ typedef struct
int devaddr; /* 装置使用的地址*/
u_char IsNoInsta; /* 装置没有安装或者已经坏了(1:正常, 0:无效,坏了或没有安装)*/
u_char CameraChannel; /* 像机的通道号*/
//u_char PowerPort; /* 传感器所接航空头编号*/
u_char Phase; /* 传感器所安装相别指拉力和倾角11表示A1....*/
} SERIAL_PARAM;
typedef struct
@ -236,7 +251,7 @@ typedef struct
u_char sampling[5]; /* 正在进行采样(0:没有进行采样;1:正在进行采样;)*/
u_char clcyesampling; /* 正在进行采样(0:没有进行采样;1:正在进行采样;)*/
u_char camerauseserial; /* 云台指令正在使用那个串口*/
u_char camerauseserial; /* 摄像机使用那个串口*/
DWORD PtzCmdType; /* 云台指令类型*/
int usecameradevidx; /* 有像机指令需要执行*/
/* 执行指令的装置序号(-1:表示没有需要执行的指令;)*/
@ -258,12 +273,6 @@ typedef struct
int SensorsIsUse; /* 传感器是否启用与自检位置匹配*/
int sequsampling; /* 顺序采样控制序号-1:无采样;其他对应相应装置序号*/
#if !SOUTHERN_POWER_GRID_V1
int SensorsFault; /*字节位从低到高温度、湿度、风速、风向、
线*/
int FlagSensorsFault; /*标志字节位从低到高温度、湿度、风速、风向、
线*/
#endif
int imagepacketnum; /* 串口摄像机拍照图片总包数*/
int historyimagenum[MAX_CHANNEL_NUM]; /* 球机保存的历史图片数量*/
#if 1
@ -324,8 +333,9 @@ void Gm_OpenSerialPort(int devidx);
void Gm_CloseSerialPort(void);
// 功能说明:串口发送数据 返回实际发送的字节数
WORD GM_SerialComSend(const unsigned char * cSendBuf, unsigned long nSendLen, int commid);
int GM_SerialComSend(const unsigned char * cSendBuf, unsigned long nSendLen, int commid);
void Gm_InitSerialComm();
void Collect_sensor_data(SENSOR_PARAM *sensorParam);
// 启动串口通讯
void GM_StartSerialComm(void);
// 启动使用串口拍照
@ -411,9 +421,9 @@ int Gm_SetSerialPortBaud(int commid);
// 得到串口波特率
//T_baudrate Gm_GetSerialPortBaud(UART_baudrate Baudrate);
void Gm_CloseSerialCamera(void);
void Gm_CloseSerialCamera();
// 生成一个随机整数
int GeneratingRandomNumber(void);
int GeneratingRandomNumber();
#endif //WEATHERCOMM_H

@ -634,7 +634,7 @@ Java_com_xinyingpower_testcomm_MainActivity_stringFromJNI(
extern "C" JNIEXPORT jstring JNICALL
Java_com_xinyingpower_testcomm_MainActivity_testSpi(
JNIEnv* env,
jobject /* this */, jint port,jstring ss) {
jobject /* this */, jint port) {
//testSpi();
SpiLIb a;
unsigned char newkey[32]={0xaf,0x0c,0xa9,0x40,0x1f,0xe6,0xee,0x0f,0x4c,
@ -663,7 +663,8 @@ Java_com_xinyingpower_testcomm_MainActivity_testSpi(
//set12VEnable(true);
//serial_port_comm();
GM_StartSerialComm();
//GM_StartSerialComm();
Gm_InitSerialComm();
//lxy modify modify
//LOGE("_test_ setRS485Enable false");
//setRS485Enable(false);

@ -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.sendphotocmdcnt = 0;
break;
}
srdt.ms_dev[i].IsNeedSerial = 0;
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 = get_msec();
srdt.sendphotocmdcnt = 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();
}

@ -56,7 +56,7 @@ typedef unsigned char BYTE;
#define PTZ_MOVETIME 1 // 云台移动等待时间为1秒
#define MAX_CHANNEL_NUM 2 /* 视频通道最大通道*/
#define MAX_PHOTO_FRAME_LEN 256 /* 图片数据一包最大长度*/
#define MAX_PHOTO_FRAME_LEN 1024 /* 图片数据一包最大长度*/
#define RECVDATA_MAXLENTH 2048 /* 接收数据缓冲区最大值*/
#define TIMER_CNT 50 // Poll命令定时器时间 5 ms
@ -136,6 +136,21 @@ typedef struct
float EuValue; // 遥测工程值
} AI_DEF;
// 上层调用采集传感器参数
typedef struct
{
unsigned int baudrate; /* 波特率*/
int databit; /* 数据位*/
float stopbit; /* 停止位*/
char parity; /* 校验位*/
//int commNo; /* 约定的串口序号例如我们PC机上显示的COM1。。。*/
u_char SensorsType; /* 传感器类型索引,大于 0*/
int devaddr; /* 装置(传感器)使用的地址*/
u_char IsNoInsta; /* 装置没有安装或者已经坏了(1:正常, 0:无效,坏了或没有安装)*/
u_char CameraChannel; /* 像机的通道号*/
u_char Phase; /* 传感器所安装相别指拉力和倾角11表示A1....*/
} SENSOR_PARAM;
// 需要配置的串口装置参数
typedef struct
{
@ -149,7 +164,7 @@ typedef struct
int devaddr; /* 装置使用的地址*/
u_char IsNoInsta; /* 装置没有安装或者已经坏了(1:正常, 0:无效,坏了或没有安装)*/
u_char CameraChannel; /* 像机的通道号*/
//u_char PowerPort; /* 传感器所接航空头编号*/
u_char Phase; /* 传感器所安装相别指拉力和倾角11表示A1....*/
} SERIAL_PARAM;
typedef struct
@ -236,7 +251,7 @@ typedef struct
u_char sampling[5]; /* 正在进行采样(0:没有进行采样;1:正在进行采样;)*/
u_char clcyesampling; /* 正在进行采样(0:没有进行采样;1:正在进行采样;)*/
u_char camerauseserial; /* 云台指令正在使用那个串口*/
u_char camerauseserial; /* 摄像机使用那个串口*/
DWORD PtzCmdType; /* 云台指令类型*/
int usecameradevidx; /* 有像机指令需要执行*/
/* 执行指令的装置序号(-1:表示没有需要执行的指令;)*/
@ -258,12 +273,6 @@ typedef struct
int SensorsIsUse; /* 传感器是否启用与自检位置匹配*/
int sequsampling; /* 顺序采样控制序号-1:无采样;其他对应相应装置序号*/
#if !SOUTHERN_POWER_GRID_V1
int SensorsFault; /*字节位从低到高温度、湿度、风速、风向、
线*/
int FlagSensorsFault; /*标志字节位从低到高温度、湿度、风速、风向、
线*/
#endif
int imagepacketnum; /* 串口摄像机拍照图片总包数*/
int historyimagenum[MAX_CHANNEL_NUM]; /* 球机保存的历史图片数量*/
#if 1
@ -324,8 +333,9 @@ void Gm_OpenSerialPort(int devidx);
void Gm_CloseSerialPort(void);
// 功能说明:串口发送数据 返回实际发送的字节数
WORD GM_SerialComSend(const unsigned char * cSendBuf, unsigned long nSendLen, int commid);
int GM_SerialComSend(const unsigned char * cSendBuf, unsigned long nSendLen, int commid);
void Gm_InitSerialComm();
void Collect_sensor_data(SENSOR_PARAM *sensorParam);
// 启动串口通讯
void GM_StartSerialComm(void);
// 启动使用串口拍照
@ -411,9 +421,9 @@ int Gm_SetSerialPortBaud(int commid);
// 得到串口波特率
//T_baudrate Gm_GetSerialPortBaud(UART_baudrate Baudrate);
void Gm_CloseSerialCamera(void);
void Gm_CloseSerialCamera();
// 生成一个随机整数
int GeneratingRandomNumber(void);
int GeneratingRandomNumber();
#endif //WEATHERCOMM_H

Loading…
Cancel
Save