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

serial
huyizhong 12 months ago
parent b5e41a652c
commit 64bf7a5194

@ -483,9 +483,9 @@ int serial_port_comm()
weather_comm(portparm); weather_comm(portparm);
return 0; return 0;
} }
#endif
static speed_t getBaudrate(unsigned int baudrate)
static speed_t getBaudrate(int baudrate)
{ {
switch(baudrate) { switch(baudrate) {
case 0: return B0; case 0: return B0;
@ -519,10 +519,9 @@ static speed_t getBaudrate(int baudrate)
case 3000000: return B3000000; case 3000000: return B3000000;
case 3500000: return B3500000; case 3500000: return B3500000;
case 4000000: return B4000000; case 4000000: return B4000000;
default: return -1; default: return B9600;
} }
} }
#endif
//u_char serialstatus[MAX_SERIAL_PORT_NUM]; //u_char serialstatus[MAX_SERIAL_PORT_NUM];
SRDT_DEF srdt; SRDT_DEF srdt;
@ -651,7 +650,7 @@ void Gm_OpenSerialPort(int devidx)
if((devidx < 0) || (devidx >= MAX_SERIAL_DEV_NUM)) if((devidx < 0) || (devidx >= MAX_SERIAL_DEV_NUM))
return; return;
if(serialport[devparam[devidx].commid].fd < 0) if(serialport[devparam[devidx].commid].fd <= 0)
{ {
fd = open(devparam[devidx].pathname, O_RDWR | O_NDELAY); fd = open(devparam[devidx].pathname, O_RDWR | O_NDELAY);
if(fd < 0) if(fd < 0)
@ -735,10 +734,11 @@ int Gm_SetSerialPortParam(int commid)
return ret; return ret;
} }
void Gm_InitSerialComm_Test() void Gm_InitSerialComm_Test(SENSOR_PARAM *sensorParam)
{ {
int i, j; int i, j;
#if 1
srdt.PtzCmdType = Cmd_Cancel; // 云台指令类型 srdt.PtzCmdType = Cmd_Cancel; // 云台指令类型
for(i=0; i<MAX_SERIAL_PORT_NUM; i++) for(i=0; i<MAX_SERIAL_PORT_NUM; i++)
{ {
@ -760,38 +760,45 @@ void Gm_InitSerialComm_Test()
//g_serialparam[1].Baud = 1200; //g_serialparam[1].Baud = 1200;
for(i=0; i<MAX_SERIAL_DEV_NUM; i++) for(i=0; i<MAX_SERIAL_DEV_NUM; i++)
devparam[i].IsNoInsta = 0; devparam[i].IsNoInsta = 0;
devparam[0].ProtocolIdx = WEATHER_PROTOCOL; #endif
devparam[0].baudrate = B9600; if(NULL == sensorParam)
devparam[0].databit = 8; return;
memset(devparam[0].stopbit, 0, sizeof(devparam[0].stopbit)); srdt.camerauseserial = -1;
sprintf(devparam[0].stopbit, "1"); sensorParam[0].SensorsType = WEATHER_PROTOCOL;
devparam[0].parity = 0; sensorParam[0].baudrate = 9600;
devparam[0].IsNoInsta = 1; 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].PowerPort = 2;
//devparam[0].devaddr = 4; //devparam[0].devaddr = 4;
devparam[0].devaddr = 10; sensorParam[0].devaddr = 10;
devparam[1].ProtocolIdx = WEATHER_PROTOCOL; sensorParam[1].SensorsType = WEATHER_PROTOCOL;
devparam[1].baudrate = B9600; sensorParam[1].baudrate = 9600;
devparam[1].databit = 8; sensorParam[1].databit = 8;
memset(devparam[1].stopbit, 0, sizeof(devparam[1].stopbit)); //memset(devparam[1].stopbit, 0, sizeof(devparam[1].stopbit));
sprintf(devparam[1].stopbit, "1"); //sprintf(devparam[1].stopbit, "1");
devparam[1].parity = 0; sensorParam[1].stopbit = 1;
devparam[1].IsNoInsta = 1; sensorParam[1].parity = 0;
//devparam[1].PowerPort = 14; sensorParam[1].IsNoInsta = 1;
//devparam[1].devaddr = 1; //sensorParam[1].PowerPort = 14;
devparam[1].devaddr = 2; //sensorParam[1].devaddr = 1;
sensorParam[1].devaddr = 2;
devparam[2].ProtocolIdx = RALLY_PROTOCOL;
devparam[2].baudrate = B9600; sensorParam[2].SensorsType = RALLY_PROTOCOL;
devparam[2].databit = 8; sensorParam[2].baudrate = 9600;
memset(devparam[2].stopbit, 0, sizeof(devparam[2].stopbit)); sensorParam[2].databit = 8;
sprintf(devparam[2].stopbit, "1"); //memset(devparam[2].stopbit, 0, sizeof(devparam[2].stopbit));
devparam[2].parity = 0; //sprintf(devparam[2].stopbit, "1");
devparam[2].IsNoInsta = 1; sensorParam[0].stopbit = 1;
//devparam[2].PowerPort = 3; sensorParam[2].parity = 0;
//devparam[2].devaddr = 13; sensorParam[2].IsNoInsta = 1;
devparam[2].devaddr = 13; //sensorParam[2].PowerPort = 3;
//sensorParam[2].devaddr = 13;
sensorParam[2].devaddr = 13;
#if 0 #if 0
devparam[3].ProtocolIdx = PELCO_P_PROTOCOL; devparam[3].ProtocolIdx = PELCO_P_PROTOCOL;
devparam[3].baudrate = 9600; devparam[3].baudrate = 9600;
@ -886,15 +893,16 @@ void Gm_InitSerialComm_Test()
devparam[12].devaddr = 5; devparam[12].devaddr = 5;
#endif #endif
devparam[13].ProtocolIdx = SLANT_PROTOCOL; sensorParam[13].SensorsType = SLANT_PROTOCOL;
devparam[13].baudrate = B9600; sensorParam[13].baudrate = B9600;
devparam[13].databit = 8; sensorParam[13].databit = 8;
memset(devparam[13].stopbit, 0, sizeof(devparam[13].stopbit)); //memset(devparam[13].stopbit, 0, sizeof(devparam[13].stopbit));
sprintf(devparam[13].stopbit, "1"); //sprintf(devparam[13].stopbit, "1");
devparam[13].parity = 0; sensorParam[0].stopbit = 1;
sensorParam[13].parity = 0;
//devparam[13].PowerPort = 4; //devparam[13].PowerPort = 4;
devparam[13].IsNoInsta = 1; sensorParam[13].IsNoInsta = 1;
devparam[13].devaddr = 2; sensorParam[13].devaddr = 3;
#if 0 #if 0
devparam[14].ProtocolIdx = SLANT_PROTOCOL; devparam[14].ProtocolIdx = SLANT_PROTOCOL;
devparam[14].baudrate = 1200; devparam[14].baudrate = 1200;
@ -973,8 +981,11 @@ void Gm_InitSerialComm()
{ {
int i; int i;
char szbuf[128]; char szbuf[128];
SENSOR_PARAM sensorParam[MAX_SERIAL_DEV_NUM];
Gm_InitSerialComm_Test(); //if(NULL == sensorParam)
// return;
Gm_InitSerialComm_Test(sensorParam);
// srdt 配置 // srdt 配置
//srdt.PtzCmdType = Cmd_Cancel; // 云台指令类型 //srdt.PtzCmdType = Cmd_Cancel; // 云台指令类型
//srdt.SendStopPtzCmdTimeCnt=-1; // 发送云台停止指令计数 //srdt.SendStopPtzCmdTimeCnt=-1; // 发送云台停止指令计数
@ -1039,6 +1050,7 @@ void Gm_InitSerialComm()
LOGI("%s", szbuf); LOGI("%s", szbuf);
} }
} }
Collect_sensor_data(sensorParam);
#endif #endif
#if 0 #if 0
//u_char UseSerialidx; // 使用的串口序号 //u_char UseSerialidx; // 使用的串口序号
@ -1089,12 +1101,20 @@ void FindDevUseSerialCommNo()
case WIND_PROTOCOL: case WIND_PROTOCOL:
case SLANT_PROTOCOL: case SLANT_PROTOCOL:
case RALLY_PROTOCOL: case RALLY_PROTOCOL:
case SERIALCAMERA_PROTOCOL:
memset(devparam[i].pathname, 0, sizeof(devparam[i].pathname)); memset(devparam[i].pathname, 0, sizeof(devparam[i].pathname));
/* 目前还不确定具体串口分配暂时默认使用串口1</dev/ttyS0>*/ /* 目前还不确定具体串口分配暂时默认使用串口1</dev/ttyS0>*/
sprintf(devparam[i].pathname, "/dev/ttyS0"); sprintf(devparam[i].pathname, "/dev/ttyS0");
devparam[i].commid = 0; devparam[i].commid = 0;
break; 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: default:
devparam[i].IsNoInsta = 0; devparam[i].IsNoInsta = 0;
break; break;
@ -1109,19 +1129,21 @@ void GM_StartSerialComm()
long polltime=0; long polltime=0;
// 测试使用初始化配置 // 测试使用初始化配置
Gm_InitSerialComm(); //Gm_InitSerialComm();
//DebugStringPrintf(szbuf, strlen(szbuf), 1); //DebugStringPrintf(szbuf, strlen(szbuf), 1);
// 此处不能对轮询设备标识清零否则如果先起摄像机就会导致poll乱掉 // 此处不能对轮询设备标识清零否则如果先起摄像机就会导致poll乱掉
//memset((void*)srdt.curdevidx, 0, sizeof(srdt.curdevidx)); //memset((void*)srdt.curdevidx, 0, sizeof(srdt.curdevidx));
//Gm_OpenSerialPower(); /* 不在这使用*/ //Gm_OpenSerialPower(); /* 不在这使用*/
srdt.sampling[0] = 1; //srdt.sampling[0] = 1;
FindDevUseSerialCommNo(); FindDevUseSerialCommNo();
//Gm_InitSensorsIsUse(); //Gm_InitSensorsIsUse();
// 初始化串口使用状态(需要考虑不同时间启用了摄像机使用) // 初始化串口使用状态(需要考虑不同时间启用了摄像机使用)
if(0 == srdt.sampling[1]) //if(0 == srdt.sampling[1])
{ {
for (i = 0; i < MAX_SERIAL_PORT_NUM; i++) for (i = 0; i < MAX_SERIAL_PORT_NUM; i++)
{ {
if(i == srdt.camerauseserial)
continue;
serialport[i].m_iRevStatus = 0; serialport[i].m_iRevStatus = 0;
serialport[i].m_iRecvLen = 0; serialport[i].m_iRecvLen = 0;
serialport[i].m_iNeedRevLength = 0; serialport[i].m_iNeedRevLength = 0;
@ -1129,6 +1151,7 @@ void GM_StartSerialComm()
ClearCmdAllFlag(i); ClearCmdAllFlag(i);
} }
} }
#if 0/* 简化插入使用摄像机过程,摄像机使用单独的串口*/
else else
{ {
for (i = 0; i < MAX_SERIAL_PORT_NUM; i++) for (i = 0; i < MAX_SERIAL_PORT_NUM; i++)
@ -1148,6 +1171,7 @@ void GM_StartSerialComm()
ClearCmdAllFlag(i); ClearCmdAllFlag(i);
} }
} }
#endif
for(i=0; i<MAX_SERIAL_DEV_NUM; i++) for(i=0; i<MAX_SERIAL_DEV_NUM; i++)
{ {
if(0 == devparam[i].IsNoInsta) if(0 == devparam[i].IsNoInsta)
@ -1246,7 +1270,6 @@ void GM_StartSerialComm()
// 启动使用串口拍照 // 启动使用串口拍照
void GM_StartSerialCameraPhoto(BYTE channel, int cmdidx) void GM_StartSerialCameraPhoto(BYTE channel, int cmdidx)
{ {
BYTE bCameratype=SPEED_DOME_CAMERA;
int i, flag=0; int i, flag=0;
char szbuf[64]; char szbuf[64];
@ -1271,15 +1294,15 @@ void GM_StartSerialCameraPhoto(BYTE channel, int cmdidx)
if(0x01 == (srdt.sampling & 0x01)) if(0x01 == (srdt.sampling & 0x01))
flag = 0; flag = 0;
#endif #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++) 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) if(0 == devparam[i].IsNoInsta)
{ {
srdt.ms_dev[i].IsNeedSerial = 0; srdt.ms_dev[i].IsNeedSerial = 0;
@ -1301,19 +1324,15 @@ void GM_StartSerialCameraPhoto(BYTE channel, int cmdidx)
} }
else else
break; break;
if(SERIAL_CAMERA == bCameratype) if(0 == srdt.ms_dev[i].IsNeedSerial)
{ srdt.iLastGetPhotoNo = -1;
if(0 == srdt.ms_dev[i].IsNeedSerial) else
srdt.iLastGetPhotoNo = -1; srdt.iLastGetPhotoNo = srdt.ms_dev[i].SerialCmdidx;
else srdt.ms_dev[i].IsNeedSerial = 1;
srdt.iLastGetPhotoNo = srdt.ms_dev[i].SerialCmdidx; srdt.ms_dev[i].SerialCmdidx = cmdidx;
srdt.ms_dev[i].IsNeedSerial = 1; srdt.ms_dev[i].FirstCmdTimeCnt = get_msec();
srdt.ms_dev[i].SerialCmdidx = cmdidx; srdt.sendphotocmdcnt = 0;
srdt.ms_dev[i].FirstCmdTimeCnt = -1; flag = 1;
srdt.sendphotocmdcnt = 0;
break;
}
srdt.ms_dev[i].IsNeedSerial = 0;
break; break;
default: default:
if(1 == srdt.ms_dev[i].IsNeedSerial) if(1 == srdt.ms_dev[i].IsNeedSerial)
@ -1322,12 +1341,25 @@ void GM_StartSerialCameraPhoto(BYTE channel, int cmdidx)
break; break;
} }
} }
//if(0x01 == flag) if(0x01 == flag)
//{ {
sprintf(szbuf, "摄像机拍照启动串口定时器!"); sprintf(szbuf, "摄像机拍照启动串口定时器!");
LOGI("%s", 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; return;
} }
#endif #endif
@ -1986,7 +2018,7 @@ int FindNextCameraPhotoCommand(int devidx)
char szbuf[128]; 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; return -1;
if(-1 == srdt.ms_dev[devidx].SerialCmdidx)/* 下发拍照指令*/ if(-1 == srdt.ms_dev[devidx].SerialCmdidx)/* 下发拍照指令*/
return -1; return -1;
@ -3090,4 +3122,29 @@ int GeneratingRandomNumber(void)
return randomdate; 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 PTZ_MOVETIME 1 // 云台移动等待时间为1秒
#define MAX_CHANNEL_NUM 2 /* 视频通道最大通道*/ #define MAX_CHANNEL_NUM 2 /* 视频通道最大通道*/
#define MAX_PHOTO_FRAME_LEN 256 /* 图片数据一包最大长度*/ #define MAX_PHOTO_FRAME_LEN 1024 /* 图片数据一包最大长度*/
#define RECVDATA_MAXLENTH 2048 /* 接收数据缓冲区最大值*/ #define RECVDATA_MAXLENTH 2048 /* 接收数据缓冲区最大值*/
#define TIMER_CNT 50 // Poll命令定时器时间 5 ms #define TIMER_CNT 50 // Poll命令定时器时间 5 ms
@ -136,6 +136,21 @@ typedef struct
float EuValue; // 遥测工程值 float EuValue; // 遥测工程值
} AI_DEF; } 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 typedef struct
{ {
@ -149,7 +164,7 @@ typedef struct
int devaddr; /* 装置使用的地址*/ int devaddr; /* 装置使用的地址*/
u_char IsNoInsta; /* 装置没有安装或者已经坏了(1:正常, 0:无效,坏了或没有安装)*/ u_char IsNoInsta; /* 装置没有安装或者已经坏了(1:正常, 0:无效,坏了或没有安装)*/
u_char CameraChannel; /* 像机的通道号*/ u_char CameraChannel; /* 像机的通道号*/
//u_char PowerPort; /* 传感器所接航空头编号*/ u_char Phase; /* 传感器所安装相别指拉力和倾角11表示A1....*/
} SERIAL_PARAM; } SERIAL_PARAM;
typedef struct typedef struct
@ -236,7 +251,7 @@ typedef struct
u_char sampling[5]; /* 正在进行采样(0:没有进行采样;1:正在进行采样;)*/ u_char sampling[5]; /* 正在进行采样(0:没有进行采样;1:正在进行采样;)*/
u_char clcyesampling; /* 正在进行采样(0:没有进行采样;1:正在进行采样;)*/ u_char clcyesampling; /* 正在进行采样(0:没有进行采样;1:正在进行采样;)*/
u_char camerauseserial; /* 云台指令正在使用那个串口*/ u_char camerauseserial; /* 摄像机使用那个串口*/
DWORD PtzCmdType; /* 云台指令类型*/ DWORD PtzCmdType; /* 云台指令类型*/
int usecameradevidx; /* 有像机指令需要执行*/ int usecameradevidx; /* 有像机指令需要执行*/
/* 执行指令的装置序号(-1:表示没有需要执行的指令;)*/ /* 执行指令的装置序号(-1:表示没有需要执行的指令;)*/
@ -258,12 +273,6 @@ typedef struct
int SensorsIsUse; /* 传感器是否启用与自检位置匹配*/ int SensorsIsUse; /* 传感器是否启用与自检位置匹配*/
int sequsampling; /* 顺序采样控制序号-1:无采样;其他对应相应装置序号*/ int sequsampling; /* 顺序采样控制序号-1:无采样;其他对应相应装置序号*/
#if !SOUTHERN_POWER_GRID_V1
int SensorsFault; /*字节位从低到高温度、湿度、风速、风向、
线*/
int FlagSensorsFault; /*标志字节位从低到高温度、湿度、风速、风向、
线*/
#endif
int imagepacketnum; /* 串口摄像机拍照图片总包数*/ int imagepacketnum; /* 串口摄像机拍照图片总包数*/
int historyimagenum[MAX_CHANNEL_NUM]; /* 球机保存的历史图片数量*/ int historyimagenum[MAX_CHANNEL_NUM]; /* 球机保存的历史图片数量*/
#if 1 #if 1
@ -324,8 +333,9 @@ void Gm_OpenSerialPort(int devidx);
void Gm_CloseSerialPort(void); 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); void GM_StartSerialComm(void);
// 启动使用串口拍照 // 启动使用串口拍照
@ -411,9 +421,9 @@ int Gm_SetSerialPortBaud(int commid);
// 得到串口波特率 // 得到串口波特率
//T_baudrate Gm_GetSerialPortBaud(UART_baudrate Baudrate); //T_baudrate Gm_GetSerialPortBaud(UART_baudrate Baudrate);
void Gm_CloseSerialCamera(void); void Gm_CloseSerialCamera();
// 生成一个随机整数 // 生成一个随机整数
int GeneratingRandomNumber(void); int GeneratingRandomNumber();
#endif //WEATHERCOMM_H #endif //WEATHERCOMM_H

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

@ -483,9 +483,9 @@ int serial_port_comm()
weather_comm(portparm); weather_comm(portparm);
return 0; return 0;
} }
#endif
static speed_t getBaudrate(unsigned int baudrate)
static speed_t getBaudrate(int baudrate)
{ {
switch(baudrate) { switch(baudrate) {
case 0: return B0; case 0: return B0;
@ -519,10 +519,9 @@ static speed_t getBaudrate(int baudrate)
case 3000000: return B3000000; case 3000000: return B3000000;
case 3500000: return B3500000; case 3500000: return B3500000;
case 4000000: return B4000000; case 4000000: return B4000000;
default: return -1; default: return B9600;
} }
} }
#endif
//u_char serialstatus[MAX_SERIAL_PORT_NUM]; //u_char serialstatus[MAX_SERIAL_PORT_NUM];
SRDT_DEF srdt; SRDT_DEF srdt;
@ -651,7 +650,7 @@ void Gm_OpenSerialPort(int devidx)
if((devidx < 0) || (devidx >= MAX_SERIAL_DEV_NUM)) if((devidx < 0) || (devidx >= MAX_SERIAL_DEV_NUM))
return; return;
if(serialport[devparam[devidx].commid].fd < 0) if(serialport[devparam[devidx].commid].fd <= 0)
{ {
fd = open(devparam[devidx].pathname, O_RDWR | O_NDELAY); fd = open(devparam[devidx].pathname, O_RDWR | O_NDELAY);
if(fd < 0) if(fd < 0)
@ -735,10 +734,11 @@ int Gm_SetSerialPortParam(int commid)
return ret; return ret;
} }
void Gm_InitSerialComm_Test() void Gm_InitSerialComm_Test(SENSOR_PARAM *sensorParam)
{ {
int i, j; int i, j;
#if 1
srdt.PtzCmdType = Cmd_Cancel; // 云台指令类型 srdt.PtzCmdType = Cmd_Cancel; // 云台指令类型
for(i=0; i<MAX_SERIAL_PORT_NUM; i++) for(i=0; i<MAX_SERIAL_PORT_NUM; i++)
{ {
@ -760,38 +760,45 @@ void Gm_InitSerialComm_Test()
//g_serialparam[1].Baud = 1200; //g_serialparam[1].Baud = 1200;
for(i=0; i<MAX_SERIAL_DEV_NUM; i++) for(i=0; i<MAX_SERIAL_DEV_NUM; i++)
devparam[i].IsNoInsta = 0; devparam[i].IsNoInsta = 0;
devparam[0].ProtocolIdx = WEATHER_PROTOCOL; #endif
devparam[0].baudrate = B9600; if(NULL == sensorParam)
devparam[0].databit = 8; return;
memset(devparam[0].stopbit, 0, sizeof(devparam[0].stopbit)); srdt.camerauseserial = -1;
sprintf(devparam[0].stopbit, "1"); sensorParam[0].SensorsType = WEATHER_PROTOCOL;
devparam[0].parity = 0; sensorParam[0].baudrate = 9600;
devparam[0].IsNoInsta = 1; 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].PowerPort = 2;
//devparam[0].devaddr = 4; //devparam[0].devaddr = 4;
devparam[0].devaddr = 10; sensorParam[0].devaddr = 10;
devparam[1].ProtocolIdx = WEATHER_PROTOCOL; sensorParam[1].SensorsType = WEATHER_PROTOCOL;
devparam[1].baudrate = B9600; sensorParam[1].baudrate = 9600;
devparam[1].databit = 8; sensorParam[1].databit = 8;
memset(devparam[1].stopbit, 0, sizeof(devparam[1].stopbit)); //memset(devparam[1].stopbit, 0, sizeof(devparam[1].stopbit));
sprintf(devparam[1].stopbit, "1"); //sprintf(devparam[1].stopbit, "1");
devparam[1].parity = 0; sensorParam[1].stopbit = 1;
devparam[1].IsNoInsta = 1; sensorParam[1].parity = 0;
//devparam[1].PowerPort = 14; sensorParam[1].IsNoInsta = 1;
//devparam[1].devaddr = 1; //sensorParam[1].PowerPort = 14;
devparam[1].devaddr = 2; //sensorParam[1].devaddr = 1;
sensorParam[1].devaddr = 2;
devparam[2].ProtocolIdx = RALLY_PROTOCOL;
devparam[2].baudrate = B9600; sensorParam[2].SensorsType = RALLY_PROTOCOL;
devparam[2].databit = 8; sensorParam[2].baudrate = 9600;
memset(devparam[2].stopbit, 0, sizeof(devparam[2].stopbit)); sensorParam[2].databit = 8;
sprintf(devparam[2].stopbit, "1"); //memset(devparam[2].stopbit, 0, sizeof(devparam[2].stopbit));
devparam[2].parity = 0; //sprintf(devparam[2].stopbit, "1");
devparam[2].IsNoInsta = 1; sensorParam[0].stopbit = 1;
//devparam[2].PowerPort = 3; sensorParam[2].parity = 0;
//devparam[2].devaddr = 13; sensorParam[2].IsNoInsta = 1;
devparam[2].devaddr = 13; //sensorParam[2].PowerPort = 3;
//sensorParam[2].devaddr = 13;
sensorParam[2].devaddr = 13;
#if 0 #if 0
devparam[3].ProtocolIdx = PELCO_P_PROTOCOL; devparam[3].ProtocolIdx = PELCO_P_PROTOCOL;
devparam[3].baudrate = 9600; devparam[3].baudrate = 9600;
@ -886,15 +893,16 @@ void Gm_InitSerialComm_Test()
devparam[12].devaddr = 5; devparam[12].devaddr = 5;
#endif #endif
devparam[13].ProtocolIdx = SLANT_PROTOCOL; sensorParam[13].SensorsType = SLANT_PROTOCOL;
devparam[13].baudrate = B9600; sensorParam[13].baudrate = B9600;
devparam[13].databit = 8; sensorParam[13].databit = 8;
memset(devparam[13].stopbit, 0, sizeof(devparam[13].stopbit)); //memset(devparam[13].stopbit, 0, sizeof(devparam[13].stopbit));
sprintf(devparam[13].stopbit, "1"); //sprintf(devparam[13].stopbit, "1");
devparam[13].parity = 0; sensorParam[0].stopbit = 1;
sensorParam[13].parity = 0;
//devparam[13].PowerPort = 4; //devparam[13].PowerPort = 4;
devparam[13].IsNoInsta = 1; sensorParam[13].IsNoInsta = 1;
devparam[13].devaddr = 2; sensorParam[13].devaddr = 3;
#if 0 #if 0
devparam[14].ProtocolIdx = SLANT_PROTOCOL; devparam[14].ProtocolIdx = SLANT_PROTOCOL;
devparam[14].baudrate = 1200; devparam[14].baudrate = 1200;
@ -973,8 +981,11 @@ void Gm_InitSerialComm()
{ {
int i; int i;
char szbuf[128]; char szbuf[128];
SENSOR_PARAM sensorParam[MAX_SERIAL_DEV_NUM];
Gm_InitSerialComm_Test(); //if(NULL == sensorParam)
// return;
Gm_InitSerialComm_Test(sensorParam);
// srdt 配置 // srdt 配置
//srdt.PtzCmdType = Cmd_Cancel; // 云台指令类型 //srdt.PtzCmdType = Cmd_Cancel; // 云台指令类型
//srdt.SendStopPtzCmdTimeCnt=-1; // 发送云台停止指令计数 //srdt.SendStopPtzCmdTimeCnt=-1; // 发送云台停止指令计数
@ -1039,6 +1050,7 @@ void Gm_InitSerialComm()
LOGI("%s", szbuf); LOGI("%s", szbuf);
} }
} }
Collect_sensor_data(sensorParam);
#endif #endif
#if 0 #if 0
//u_char UseSerialidx; // 使用的串口序号 //u_char UseSerialidx; // 使用的串口序号
@ -1089,12 +1101,20 @@ void FindDevUseSerialCommNo()
case WIND_PROTOCOL: case WIND_PROTOCOL:
case SLANT_PROTOCOL: case SLANT_PROTOCOL:
case RALLY_PROTOCOL: case RALLY_PROTOCOL:
case SERIALCAMERA_PROTOCOL:
memset(devparam[i].pathname, 0, sizeof(devparam[i].pathname)); memset(devparam[i].pathname, 0, sizeof(devparam[i].pathname));
/* 目前还不确定具体串口分配暂时默认使用串口1</dev/ttyS0>*/ /* 目前还不确定具体串口分配暂时默认使用串口1</dev/ttyS0>*/
sprintf(devparam[i].pathname, "/dev/ttyS0"); sprintf(devparam[i].pathname, "/dev/ttyS0");
devparam[i].commid = 0; devparam[i].commid = 0;
break; 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: default:
devparam[i].IsNoInsta = 0; devparam[i].IsNoInsta = 0;
break; break;
@ -1109,19 +1129,21 @@ void GM_StartSerialComm()
long polltime=0; long polltime=0;
// 测试使用初始化配置 // 测试使用初始化配置
Gm_InitSerialComm(); //Gm_InitSerialComm();
//DebugStringPrintf(szbuf, strlen(szbuf), 1); //DebugStringPrintf(szbuf, strlen(szbuf), 1);
// 此处不能对轮询设备标识清零否则如果先起摄像机就会导致poll乱掉 // 此处不能对轮询设备标识清零否则如果先起摄像机就会导致poll乱掉
//memset((void*)srdt.curdevidx, 0, sizeof(srdt.curdevidx)); //memset((void*)srdt.curdevidx, 0, sizeof(srdt.curdevidx));
//Gm_OpenSerialPower(); /* 不在这使用*/ //Gm_OpenSerialPower(); /* 不在这使用*/
srdt.sampling[0] = 1; //srdt.sampling[0] = 1;
FindDevUseSerialCommNo(); FindDevUseSerialCommNo();
//Gm_InitSensorsIsUse(); //Gm_InitSensorsIsUse();
// 初始化串口使用状态(需要考虑不同时间启用了摄像机使用) // 初始化串口使用状态(需要考虑不同时间启用了摄像机使用)
if(0 == srdt.sampling[1]) //if(0 == srdt.sampling[1])
{ {
for (i = 0; i < MAX_SERIAL_PORT_NUM; i++) for (i = 0; i < MAX_SERIAL_PORT_NUM; i++)
{ {
if(i == srdt.camerauseserial)
continue;
serialport[i].m_iRevStatus = 0; serialport[i].m_iRevStatus = 0;
serialport[i].m_iRecvLen = 0; serialport[i].m_iRecvLen = 0;
serialport[i].m_iNeedRevLength = 0; serialport[i].m_iNeedRevLength = 0;
@ -1129,6 +1151,7 @@ void GM_StartSerialComm()
ClearCmdAllFlag(i); ClearCmdAllFlag(i);
} }
} }
#if 0/* 简化插入使用摄像机过程,摄像机使用单独的串口*/
else else
{ {
for (i = 0; i < MAX_SERIAL_PORT_NUM; i++) for (i = 0; i < MAX_SERIAL_PORT_NUM; i++)
@ -1148,6 +1171,7 @@ void GM_StartSerialComm()
ClearCmdAllFlag(i); ClearCmdAllFlag(i);
} }
} }
#endif
for(i=0; i<MAX_SERIAL_DEV_NUM; i++) for(i=0; i<MAX_SERIAL_DEV_NUM; i++)
{ {
if(0 == devparam[i].IsNoInsta) if(0 == devparam[i].IsNoInsta)
@ -1246,7 +1270,6 @@ void GM_StartSerialComm()
// 启动使用串口拍照 // 启动使用串口拍照
void GM_StartSerialCameraPhoto(BYTE channel, int cmdidx) void GM_StartSerialCameraPhoto(BYTE channel, int cmdidx)
{ {
BYTE bCameratype=SPEED_DOME_CAMERA;
int i, flag=0; int i, flag=0;
char szbuf[64]; char szbuf[64];
@ -1271,15 +1294,15 @@ void GM_StartSerialCameraPhoto(BYTE channel, int cmdidx)
if(0x01 == (srdt.sampling & 0x01)) if(0x01 == (srdt.sampling & 0x01))
flag = 0; flag = 0;
#endif #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++) 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) if(0 == devparam[i].IsNoInsta)
{ {
srdt.ms_dev[i].IsNeedSerial = 0; srdt.ms_dev[i].IsNeedSerial = 0;
@ -1301,19 +1324,15 @@ void GM_StartSerialCameraPhoto(BYTE channel, int cmdidx)
} }
else else
break; break;
if(SERIAL_CAMERA == bCameratype) if(0 == srdt.ms_dev[i].IsNeedSerial)
{ srdt.iLastGetPhotoNo = -1;
if(0 == srdt.ms_dev[i].IsNeedSerial) else
srdt.iLastGetPhotoNo = -1; srdt.iLastGetPhotoNo = srdt.ms_dev[i].SerialCmdidx;
else srdt.ms_dev[i].IsNeedSerial = 1;
srdt.iLastGetPhotoNo = srdt.ms_dev[i].SerialCmdidx; srdt.ms_dev[i].SerialCmdidx = cmdidx;
srdt.ms_dev[i].IsNeedSerial = 1; srdt.ms_dev[i].FirstCmdTimeCnt = get_msec();
srdt.ms_dev[i].SerialCmdidx = cmdidx; srdt.sendphotocmdcnt = 0;
srdt.ms_dev[i].FirstCmdTimeCnt = -1; flag = 1;
srdt.sendphotocmdcnt = 0;
break;
}
srdt.ms_dev[i].IsNeedSerial = 0;
break; break;
default: default:
if(1 == srdt.ms_dev[i].IsNeedSerial) if(1 == srdt.ms_dev[i].IsNeedSerial)
@ -1322,12 +1341,25 @@ void GM_StartSerialCameraPhoto(BYTE channel, int cmdidx)
break; break;
} }
} }
//if(0x01 == flag) if(0x01 == flag)
//{ {
sprintf(szbuf, "摄像机拍照启动串口定时器!"); sprintf(szbuf, "摄像机拍照启动串口定时器!");
LOGI("%s", 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; return;
} }
#endif #endif
@ -1986,7 +2018,7 @@ int FindNextCameraPhotoCommand(int devidx)
char szbuf[128]; 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; return -1;
if(-1 == srdt.ms_dev[devidx].SerialCmdidx)/* 下发拍照指令*/ if(-1 == srdt.ms_dev[devidx].SerialCmdidx)/* 下发拍照指令*/
return -1; return -1;
@ -3090,4 +3122,29 @@ int GeneratingRandomNumber(void)
return randomdate; 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 PTZ_MOVETIME 1 // 云台移动等待时间为1秒
#define MAX_CHANNEL_NUM 2 /* 视频通道最大通道*/ #define MAX_CHANNEL_NUM 2 /* 视频通道最大通道*/
#define MAX_PHOTO_FRAME_LEN 256 /* 图片数据一包最大长度*/ #define MAX_PHOTO_FRAME_LEN 1024 /* 图片数据一包最大长度*/
#define RECVDATA_MAXLENTH 2048 /* 接收数据缓冲区最大值*/ #define RECVDATA_MAXLENTH 2048 /* 接收数据缓冲区最大值*/
#define TIMER_CNT 50 // Poll命令定时器时间 5 ms #define TIMER_CNT 50 // Poll命令定时器时间 5 ms
@ -136,6 +136,21 @@ typedef struct
float EuValue; // 遥测工程值 float EuValue; // 遥测工程值
} AI_DEF; } 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 typedef struct
{ {
@ -149,7 +164,7 @@ typedef struct
int devaddr; /* 装置使用的地址*/ int devaddr; /* 装置使用的地址*/
u_char IsNoInsta; /* 装置没有安装或者已经坏了(1:正常, 0:无效,坏了或没有安装)*/ u_char IsNoInsta; /* 装置没有安装或者已经坏了(1:正常, 0:无效,坏了或没有安装)*/
u_char CameraChannel; /* 像机的通道号*/ u_char CameraChannel; /* 像机的通道号*/
//u_char PowerPort; /* 传感器所接航空头编号*/ u_char Phase; /* 传感器所安装相别指拉力和倾角11表示A1....*/
} SERIAL_PARAM; } SERIAL_PARAM;
typedef struct typedef struct
@ -236,7 +251,7 @@ typedef struct
u_char sampling[5]; /* 正在进行采样(0:没有进行采样;1:正在进行采样;)*/ u_char sampling[5]; /* 正在进行采样(0:没有进行采样;1:正在进行采样;)*/
u_char clcyesampling; /* 正在进行采样(0:没有进行采样;1:正在进行采样;)*/ u_char clcyesampling; /* 正在进行采样(0:没有进行采样;1:正在进行采样;)*/
u_char camerauseserial; /* 云台指令正在使用那个串口*/ u_char camerauseserial; /* 摄像机使用那个串口*/
DWORD PtzCmdType; /* 云台指令类型*/ DWORD PtzCmdType; /* 云台指令类型*/
int usecameradevidx; /* 有像机指令需要执行*/ int usecameradevidx; /* 有像机指令需要执行*/
/* 执行指令的装置序号(-1:表示没有需要执行的指令;)*/ /* 执行指令的装置序号(-1:表示没有需要执行的指令;)*/
@ -258,12 +273,6 @@ typedef struct
int SensorsIsUse; /* 传感器是否启用与自检位置匹配*/ int SensorsIsUse; /* 传感器是否启用与自检位置匹配*/
int sequsampling; /* 顺序采样控制序号-1:无采样;其他对应相应装置序号*/ int sequsampling; /* 顺序采样控制序号-1:无采样;其他对应相应装置序号*/
#if !SOUTHERN_POWER_GRID_V1
int SensorsFault; /*字节位从低到高温度、湿度、风速、风向、
线*/
int FlagSensorsFault; /*标志字节位从低到高温度、湿度、风速、风向、
线*/
#endif
int imagepacketnum; /* 串口摄像机拍照图片总包数*/ int imagepacketnum; /* 串口摄像机拍照图片总包数*/
int historyimagenum[MAX_CHANNEL_NUM]; /* 球机保存的历史图片数量*/ int historyimagenum[MAX_CHANNEL_NUM]; /* 球机保存的历史图片数量*/
#if 1 #if 1
@ -324,8 +333,9 @@ void Gm_OpenSerialPort(int devidx);
void Gm_CloseSerialPort(void); 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); void GM_StartSerialComm(void);
// 启动使用串口拍照 // 启动使用串口拍照
@ -411,9 +421,9 @@ int Gm_SetSerialPortBaud(int commid);
// 得到串口波特率 // 得到串口波特率
//T_baudrate Gm_GetSerialPortBaud(UART_baudrate Baudrate); //T_baudrate Gm_GetSerialPortBaud(UART_baudrate Baudrate);
void Gm_CloseSerialCamera(void); void Gm_CloseSerialCamera();
// 生成一个随机整数 // 生成一个随机整数
int GeneratingRandomNumber(void); int GeneratingRandomNumber();
#endif //WEATHERCOMM_H #endif //WEATHERCOMM_H

Loading…
Cancel
Save