diff --git a/TestComm/app/src/main/cpp/SensorsProtocol.cpp b/TestComm/app/src/main/cpp/SensorsProtocol.cpp index abecc266..5648eb27 100644 --- a/TestComm/app/src/main/cpp/SensorsProtocol.cpp +++ b/TestComm/app/src/main/cpp/SensorsProtocol.cpp @@ -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*/ 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*/ + 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_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 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(); +} + + diff --git a/TestComm/app/src/main/cpp/SensorsProtocol.h b/TestComm/app/src/main/cpp/SensorsProtocol.h index 4e3802ce..791ab9cf 100644 --- a/TestComm/app/src/main/cpp/SensorsProtocol.h +++ b/TestComm/app/src/main/cpp/SensorsProtocol.h @@ -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 diff --git a/TestComm/app/src/main/cpp/native-lib.cpp b/TestComm/app/src/main/cpp/native-lib.cpp index e0d1870d..9c793ba0 100644 --- a/TestComm/app/src/main/cpp/native-lib.cpp +++ b/TestComm/app/src/main/cpp/native-lib.cpp @@ -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); diff --git a/app/src/main/cpp/SensorsProtocol.cpp b/app/src/main/cpp/SensorsProtocol.cpp index abecc266..5648eb27 100644 --- a/app/src/main/cpp/SensorsProtocol.cpp +++ b/app/src/main/cpp/SensorsProtocol.cpp @@ -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*/ 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*/ + 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_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 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(); +} + + diff --git a/app/src/main/cpp/SensorsProtocol.h b/app/src/main/cpp/SensorsProtocol.h index 4e3802ce..791ab9cf 100644 --- a/app/src/main/cpp/SensorsProtocol.h +++ b/app/src/main/cpp/SensorsProtocol.h @@ -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