// // Created by hyz on 2024/6/5. // #ifndef __SENSOR_PROTOCOL_H__ #define __SENSOR_PROTOCOL_H__ #include #ifndef LOBYTE #define LOBYTE(w) ((unsigned char)(w)) #endif #ifndef HIBYTE #define HIBYTE(w) ((unsigned char)(((unsigned short)(w) >> 8) & 0xFF)) #endif #ifndef LOWORD #define LOWORD(l) ((uint16_t)(l)) #endif #ifndef HIWORD #define HIWORD(l) ((uint16_t)((uint32_t)(l) >> 16)) #endif #define MAX_STRING_LEN 32 #define IOT_PARAM_WRITE 0xAE #define IOT_PARAM_READ 0xAF #define MAX_FIELDS_NUM 20 /* BD_NMEA0183单组字符串数据内含数据最大数量*/ #define MAX_SERIAL_DEV_NUM 25 /* 最大接串口传感器数量*/ #define MAX_SERIAL_PORT_NUM 5 #define MAX_DEV_VALUE_NUM 12 /* 一台装置最大的采样值数量*/ #define WEATHER_PROTOCOL 1 /* 温湿度协议序号*/ #define WIND_PROTOCOL 2 /* 风速风向协议序号*/ #define SLANT_PROTOCOL 3 /* 倾斜角协议序号*/ #define RALLY_PROTOCOL 4 /* 拉力协议序号*/ #define PELCO_P_PROTOCOL 5 /* 摄像机Pelco_P协议序号*/ #define PELCO_D_PROTOCOL 6 /* 摄像机Pelco_D协议序号*/ #define SERIALCAMERA_PROTOCOL 8 /* 串口摄像机协议序号*/ #define MUTIWEATHER_PROTOCOL 9 /*多合一气象*/ #define NMEA0183_PROTOCOL 10 /* 单一北斗NMEA0183标准协议*/ #define RESERVE2_PROTOCOL 17 /* 备用2协议序号*/ #define RESERVE4_PROTOCOL 19 /* 备用4协议序号*/ #define RESERVE5_PROTOCOL 20 /* 备用5协议序号*/ #define INVALID_PROTOCOL 21 /* 无效协议序号*/ #define AirTempNo 0 /* 空气温度数据存储序号*/ #define HumidityNo 1 /* 相对湿度数据存储序号*/ #define WindSpeedNo 2 /* 风速数据存储序号*/ #define WindDirectionNo 3 /* 风向数据存储序号*/ #define RainfallNo 4 /* 雨量数据存储序号*/ #define AtmosNo 5 /* 大气压数据存储序号*/ #define OpticalRadiationNo 6 /* 日照(光辐射)数据存储序号*/ #define SER_IDLE 0 /* 传感器处于空闲状态,未启动采样*/ #define SER_SAMPLE 1 /* 正在采样过程中*/ #define SAMPLINGSUCCESS 2 /* 采样结束,正常读取到数据*/ #define SER_STARTSAMPLE 3 /* 启动采样*/ #define SER_SAMPLEFAIL -1 /* 采样失败,未采集到数据,传感器故障或未接*/ #define PHOTO_SAVE_SUCC 5 /* 图片保存成功*/ #define WEATHER_DATA_NUM 8 /* 气象数据最大数量(一般最多是6要素)*/ #define RALLY_DATA_NUM 2 /* 拉力数据最大数量(一般是1个)*/ #define SLANTANGLE_DATA_NUM 3 /* 倾角数据最大数量(一般只有X轴和Y轴值)*/ #define PTZ_MOVETIME 1 // 云台移动等待时间为1秒 #define MAX_CHANNEL_NUM 2 /* 视频通道最大通道*/ #define MAX_PHOTO_FRAME_LEN 1024 /* 图片数据一包最大长度*/ #define MAX_PHOTO_PACKET_NUM 1024 /* 图片最大包数(图片最大定为1MB)*/ #define RECVDATA_MAXLENTH 2048 /* 接收数据缓冲区最大值*/ #define TIMER_CNT 50 // Poll命令定时器时间 5 ms #define SENDDATA_MAXLENTH RECVDATA_MAXLENTH /* 正常发送数据缓冲区最大值*/ // 摄像机控制命令宏定义 #define Cmd_Cancel 0x00000000 // 关闭功能 #define SET_PRESETNO 0x00030000 // 设置预置点 #define MOVE_TO_PRESETNO 0x00070000 // 调用预置点 /* 摄像机PELCO-P控制命令宏定义*/ #define P_Auto_Scan 0x20000000 /* 自动扫描功能控制(1/0 打开/关闭该功能)*/ #define P_IRIS_CLOSE 0x08000000 /* 光圈缩小(1 有效)*/ #define P_IRIS_OPEN 0x04000000 /* 光圈放大(1 有效)*/ #define P_FOCUS_NEAR 0x02000000 /* 近距离聚焦(1 有效)*/ #define P_FOCUS_FAR 0x01000000 /* 远距离聚焦(1 有效)*/ #define P_ZOOM_WIDE 0x00400000 /* 远离物体(1 有效)*/ #define P_ZOOM_TELE 0x00200000 /* 接近物体(1 有效)*/ #define P_MOVE_DOWN 0x0010001f /* 向下移动镜头(1 有效)*/ #define P_MOVE_UP 0x0008001f /* 向上移动镜头(1 有效)*/ #define P_MOVE_LEFT 0x00041f00 /* 向左移动镜头(1 有效)*/ #define P_MOVE_RIGHT 0x00021f00 /* 向右移动镜头(1 有效)*/ // 摄像机PELCO-D控制命令宏定义 #define D_Auto_Scan 0x10000000 /* 自动扫描功能控制(1/0 打开/关闭该功能)*/ #define D_IRIS_CLOSE 0x04000000 /* 光圈缩小(1 有效)*/ #define D_IRIS_OPEN 0x02000000 /* 光圈放大(1 有效)*/ #define D_FOCUS_NEAR 0x01000000 /* 近距离聚焦(1 有效)*/ #define D_FOCUS_FAR 0x00800000 /* 远距离聚焦(1 有效)*/ #define D_ZOOM_WIDE 0x00400000 /* 远离物体(1 有效)*/ #define D_ZOOM_TELE 0x00200000 /* 接近物体(1 有效)*/ #define D_MOVE_DOWN 0x0010002d /* 向下移动镜头(1 有效)*/ #define D_MOVE_UP 0x0008002d /* 向上移动镜头(1 有效)*/ #define D_MOVE_LEFT 0x00042d00 /* 向左移动镜头(1 有效)*/ #define D_MOVE_RIGHT 0x00022d00 /* 向右移动镜头(1 有效)*/ #define D_OPEN_TOTAL 0x0009000B /* 打开总电源(1 有效)*/ #define D_OPEN_MODULE_POWER 0x0009000C /* 打开机芯电源(1 有效)*/ /* 摄像机下发命令宏定义*/ #define TAKE_PHOTO 20000 /* 拍照*/ #define SET_BAUD 10000 /* 设置球机波特率*/ #define STOP_CMD 10005 /* 取消或停止指令*/ #define AUTO_SCAN 10006 /* 自动扫描功能控制(1/0 打开/关闭该功能)*/ #define IRIS_CLOSE 10007 /* 光圈缩小(1 有效)*/ #define IRIS_OPEN 10008 /* 光圈放大(1 有效)*/ #define FOCUS_NEAR 10009 /* 近距离聚焦(1 有效)*/ #define FOCUS_FAR 10010 /* 远距离聚焦(1 有效)*/ #define ZOOM_WIDE 10011 /* 远离物体(1 有效)*/ #define ZOOM_TELE 10012 /* 接近物体(1 有效)*/ #define MOVE_DOWN 10013 /* 向下移动镜头(1 有效)*/ #define MOVE_UP 10014 /* 向上移动镜头(1 有效)*/ #define MOVE_LEFT 10015 /* 向左移动镜头(1 有效)*/ #define MOVE_RIGHT 10016 /* 向右移动镜头(1 有效)*/ #define MOVE_PRESETNO 10017 // 调用预置点 #define SAVE_PRESETNO 10018 // 设置预置点 #define OPEN_TOTAL 10019 /* 打开总电源(1 有效)*/ #define OPEN_MODULE_POWER 10020 /* 打开机芯电源(1 有效)*/ #define NOTIFY_PTZ_CLOSE 10021 // 通知云台关闭 #define QUERY_PTZ_STATE 10022 // 查询云台状态 #define CLOSE_TOTAL 10040 /* 关闭总电源*/ #define SPEED_DOME_CAMERA 0 /* 球机摄像机*/ #define SERIAL_CAMERA 2 /* 串口摄像机a*/ #define START_ONCE_SELF 200 /* 一次性自检需要的调用的预置点200*/ #define COLLECT_DATA 0 /* 调试使用*/ #define HexCharToInt( c ) (((c) >= '0') && ((c) <= '9') ? (c) - '0' : ((c) >= 'a') && ((c) <= 'f') ? (c) - 'a' + 10 :((c) >= 'A') && ((c) <= 'F') ? (c) - 'A' + 10 : 0 ) //SDS包类型结构 typedef struct { uint8_t PortIdx; // 信息类型 uint16_t MsgType; // 信息类型 int MsgLen; // 信息长度 uint8_t MsgData[RECVDATA_MAXLENTH]; } RTUMSG; typedef struct { float fFactor; // 数据系数 float EuValueDelta; // 数据工程值偏移 } AI_PARAM; typedef struct { AI_PARAM AiParam; // 数据点配置参数 int AiState; // 数据标识(-1:采样失败;0:没有采样;1:正在采样;2:采样结束;3:启动采样;) float EuValue; // 数据工程值 } AI_DEF; typedef struct { uint8_t AiState; // 数据标识(-1:采样失败;0:没有采样;1:正在采样;2:采样结束;3:启动采样;) float EuValue; // 数据工程值 } Data_DEF; typedef struct { int imagelen; // 整个图片大小 int phototime; // 拍照时间 uint8_t presetno; // 拍照预置点 char photoname[512]; // 图片存储名称和路径 int state;// 标识(-1:拍照失败;0:没有拍照;1:正在取图;2:拍照成功;3:启动拍照;) } IMAGE_DEF; typedef struct { int imagelen; // 整个图片大小 int imagenum; // 整个图片的总包数 int phototime; // 拍照时间 uint8_t presetno; // 拍照预置点 char photoname[512]; // 图片存储名称和路径 uint8_t buf[MAX_PHOTO_PACKET_NUM][MAX_PHOTO_FRAME_LEN]; // 图片数据缓存 int ilen[MAX_PHOTO_PACKET_NUM]; // 相对应的每包图片数据的长度 int state;// 标识(-1:拍照失败;0:没有拍照;1:正在取图;2:拍照成功;3:启动拍照;) } PHOTO_DEF; // 上层调用采集传感器参数 typedef struct SENSOR_PARAM { unsigned int baudrate; /* 波特率*/ int databit; /* 数据位*/ float stopbit; /* 停止位*/ char parity; /* 校验位*/ char pathname[64]; /* 串口文件名及路径*/ //int commNo; /* 约定的串口序号,例如我们PC机上显示的COM1。。。*/ uint8_t SensorsType; /* 传感器类型索引,大于 0*/ int devaddr; /* 装置(传感器)使用的地址*/ uint8_t IsNoInsta; /* 装置没有安装或者已经坏了(1:正常, 0:无效,坏了或没有安装)*/ uint8_t CameraChannel; /* 像机的通道号*/ uint8_t Phase; /* 传感器所安装相别,指拉力和倾角11表示A1....*/ float multiple; /*系数*/ float offset; /*偏移值*/ } SENSOR_PARAM; // 需要配置的串口装置参数 typedef struct { unsigned int baudrate; /* 波特率*/ int databit; /* 数据位*/ int stopbit; /* 停止位*/ char parity; /* 校验位*/ char pathname[64]; /* 串口文件名及路径*/ int commid; /* 串口序号 注意:从0开始*/ uint8_t ProtocolIdx; /* 规约索引,大于 0*/ int devaddr; /* 装置使用的地址*/ uint8_t IsNoInsta; /* 装置没有安装或者已经坏了(1:正常, 0:无效,坏了或没有安装)*/ uint8_t CameraChannel; /* 像机的通道号*/ uint8_t Phase; /* 传感器所安装相别,指拉力和倾角11表示A1....*/ } SERIAL_PARAM; // 云台状态数据 typedef struct { uint8_t ptz_process; /* 云台所处过程(1:自检状态;2:调用预置点;3:一般状态;)*/ uint8_t ptz_status; /* 云台当前状态值(0:停止;1:运动;2:机芯未上电;其他:其他错误*/ int presetno; /* 云台所处预置点值*/ float x_coordinate; /* 云台所处位置水平方向坐标*/ float y_coordinate; /* 云台所处位置垂直方向坐标*/ } PTZ_STATE; /* $--RMC 字符串 消息 ID,RMC 语句头,’--‘为系统标识 2 UTCtime hhmmss.ss 当前定位的 UTC 时间 3 status 字符串 位置有效标志。 V=接收机警告,数据无效 A=数据有效 4 lat ddmm.mmmmm 纬度,前 2 字符表示度,后面的字符表示分 5 uLat 字符 纬度方向:N-北,S-南 6 lon dddmm.mmmm m 经度,前 3 字符表示度,后面的字符表示分 7 uLon 字符 经度方向:E-东,W-西 8 spd 数值 对地速度,单位为节 9 cog 数值 对地真航向,单位为度 10 date ddmmyy 日期(dd 为日,mm 为月,yy 为年) 11 mv 数值 磁偏角,单位为度。固定为空 12 mvE 字符 磁偏角方向:E-东,W-西。固定为空 13 mode 字符 定位模式标志(备注[1]) 14 navStatus 字符 导航状态标示符(V 表示系统不输出导航状态信息) 仅 NMEA 4.1 及以上版本有效 15 CS 16 进制数值 校验和,$和*之间(不包括$和*)所有字符的异或结果*/ // 北斗卫星数据 typedef struct { struct tm UTC_time; /* UTC时间*/ int ms_time; /* 毫秒*/ double lat; /* 纬度,原值(前 2 字符表示度,后面的字符表示分)转换后为° */ char uLat; /* 纬度方向:N-北,S-南*/ double lon; /* 经度,原值(前 3 字符表示度,后面的字符表示分)转换后为°*/ char uLon; /* 经度'E'-东,'W'-西*/ char status; /* 'A'=数据有效 其他字符表示数据无效*/ } BD_GNSS_DATA; typedef struct { int m_iRevStatus; /* */ int m_iRecvLen; /* */ int m_iNeedRevLength; /* */ int iRecvTime; /* */ uint8_t m_au8RecvBuf[RECVDATA_MAXLENTH];/* */ int fd; /* 串口打开的文件句柄*/ uint8_t PollCmd[SENDDATA_MAXLENTH]; int cmdlen; // 发送缓冲区命令长度 //******************** Poll Cmd **************************** uint8_t Retry; /* 重试命令次数 */ uint8_t RetryCnt; /* 重试命令计数*/ int64_t RetryTime; /* 重试命令时间 */ int64_t RetryTimeCnt; /* 重试命令时间计数*/ int64_t WaitTime; /* 命令间隔时间 */ int64_t WaitTimeCnt; /* 命令间隔时间计数*/ uint8_t ForceWaitFlag; /* 强制等待标志*/ uint16_t ForceWaitCnt; /* 强制等待计数*/ uint8_t ReSendCmdFlag; /* 重发命令标志 */ uint8_t SendCmdFlag; /* 命令发送标志 */ uint8_t RevCmdFlag; /* 命令正常接收标志*/ //********************************************************** int64_t lsendtime; /* 命令发送绝对时间计时(毫秒)*/ int cameraaddr; /* 摄像机地址*/ int SerialCmdidx; /* 正在使用的串口发送命令的命令序号(-1:表示没有命令发送) 摄像机使用命令序号存储*/ PHOTO_DEF image; /* 临时存储图片数据*/ int64_t FirstCmdTimeCnt; /* 串口读取数据起始时间*/ PTZ_STATE ptz_state; int sendptzstatecmd; // 查询命令次数控制 BD_GNSS_DATA bd_data; } SIO_PARAM_SERIAL_DEF; typedef const struct { //char *account; // 命令说明 char *cmd_name; // 命令名称 int (*recv_process)(SIO_PARAM_SERIAL_DEF *); /* urc数据处理*/ }BD_NMEA0183_PROC_FUNC; //串口相关装置所有参数集中定义 typedef struct { //******************** 端口基本信息 ************************ uint8_t IsNeedSerial; /* 是否需要使用串口通讯*/ int CmdWaitTime; /* 没有使用*/ uint8_t UseSerialidx; /* 使用的串口序号*/ int SerialCmdidx; /* 正在使用的串口发送命令的命令序号(-1:表示没有命令发送) 摄像机使用命令序号存储*/ int enrecvtime; /* 发送加密命令后接收到应答计时*/ int64_t FirstCmdTimeCnt; /* 串口读取数据起始时间*/ uint8_t nextcmd; /* 第二次发送读取气象雨量命令 */ uint8_t SameTypeDevIdx; /* 相同类型装置顺序排列序号(从0开始)*/ uint8_t uOpenPowerFlag; /* 传感器上电标志(0:不需要打开; 1:需要打开)*/ int recvdatacnt; /* 接收到有效数据*/ PHOTO_DEF image; /* 临时存储图片数据*/ AI_DEF aiValue[MAX_DEV_VALUE_NUM]; /* 传感器采样值*/ } SERIAL_DEV_DEF; //串口相关装置所有参数集中定义 typedef struct { uint8_t clcyesampling; /* 正在进行采样(0:没有进行采样;1:正在进行采样;)*/ uint8_t camerauseserial; /* 摄像机使用那个串口*/ uint32_t PtzCmdType; /* 云台指令类型*/ int usecameradevidx; /* 有像机指令需要执行*/ /* 执行指令的装置序号(-1:表示没有需要执行的指令;)*/ int SendStopPtzCmdTimeCnt; /* 发送云台停止指令*/ uint8_t serialstatus[MAX_SERIAL_PORT_NUM]; /* 串口是否可以使用状态分别对应串口1、2、3*/ SERIAL_DEV_DEF ms_dev[MAX_SERIAL_DEV_NUM]; /* 装置所接传感器数量*/ int UseingSerialdev[MAX_SERIAL_PORT_NUM]; /* 正在使用串口通讯的装置序号(-1,表示串口空闲)*/ int curdevidx[MAX_SERIAL_PORT_NUM]; /* 当前正在通讯的装置序号(-1表示没有装置需要通讯)*/ uint8_t IsReadWireTem; /* 是否在开始读取测温数据(0:表示没有;1:是)*/ //int proruntime; /* 程序运行时间*/ int IsSleep; /* 是否使程序休眠(1:不休眠;2:休眠)*/ int tempsamplingstartime; /* 测温启动距离采样启动时间间隔*/ int tempsamplingsucctime; /* 测温启动距离采样成功时间间隔*/ int samplingtimeSec; /* 高速采样数据秒级时间控制*/ int SectimesamplingCnt[3]; /* 高速采样数据秒级采样数*/ int SunshineSensorsFault; /* 控制日照传感器故障发送*/ int TempSensorsFault; /* 控制测温传感器故障发送*/ int FirstSensorsFault; /* 第一次检测传感器故障发送*/ int SensorsIsUse; /* 传感器是否启用与自检位置匹配*/ int sequsampling; /* 顺序采样控制序号-1:无采样;其他对应相应装置序号*/ int imagepacketnum; /* 串口摄像机拍照图片总包数*/ int historyimagenum[MAX_CHANNEL_NUM]; /* 球机保存的历史图片数量*/ #if 1 //int sendflag; /* 临时上送泄露电流值标志*/ int sendphototime; /* 临时上送图片数据统计*/ int sendphotocmdcnt; /* 一次拍照过程中发送拍照指令计数*/ int photographtime; /* 图片拍摄的时间*/ int iLastGetPhotoNo; /* 设置串口摄像机参数时暂存拍照命令序号*/ uint8_t bImageSize; /* 用于临时存储接收上层命令的图片大小*/ uint8_t presetno; /* 用于临时存储接收上层命令的预置点*/ char filedir[512]; /* 用于摄像机拍照之后暂时存放的路径*/ #endif uint8_t errorPhotoNoCnt; /* 串口摄像机拍照时回应错误包号计数(如:召第6包回应第3包)*/ uint8_t RephotographCnt; /* 串口摄像机重拍计数(只在读照片数据应答出错时才重拍)*/ } SRDT_DEF; static void PortDataProcess( void ); static int64_t get_msec(); int serial_port_comm(); static int weather_comm(SERIAL_PARAM weatherport); static void setRS485Enable(bool z); static void set485WriteMode(); static void set485ReadMode(); static void set12VEnable(bool z); static void setCam3V3Enable(bool enabled); // 串口相关的所有函数定义 /* 打开串口电源*/ void Gm_OpenSerialPower(); uint8_t getdevtype(int devno); // 打开传感器电源 void Gm_OpenSensorsPower(); // 关闭传感器电源 void Gm_CloseSensorsPower(int port); // 打开串口通讯 void Gm_OpenSerialPort(int devidx); // 关闭串口通讯 void Gm_CloseSerialPort(); void DebugLog(int commid, const char *szbuf, char flag); int SaveLogTofile(int commid, const char *szbuf); // 功能说明:串口发送数据 返回实际发送的字节数 int GM_SerialComSend(const unsigned char * cSendBuf, size_t nSendLen, int commid); void Gm_InitSerialComm(SENSOR_PARAM *sensorParam, const char *filedir,const char *log); // 启动串口通讯 void GM_StartSerialComm(); // 启动使用串口拍照 int GM_StartSerialCameraPhoto(int phototime, unsigned char channel, int cmdidx, unsigned char bImageSize, unsigned char presetno, const char *serfile, unsigned int baud, int addr); void delete_old_files(const char *path, int days); // 串口轮询通讯定时器 int GM_SerialTimer(); //轮询所有串口和传感器是否需要生成下发命令 void Gm_FindAllSensorsCommand(); //检查所有传感器是否采集完毕,采集完毕的关闭传感器电源 void GM_IsCloseSensors(); //检查所有串口是否有数据接收,有则启动接收 void GM_AllSerialComRecv(); //判断是否需要关闭定时器 int GM_CloseTimer(); void testComm(); void Gm_InitSerialComm_Test(); // 串口接收数据处理 void SerialDataProcess(int devidx, uint8_t *buf, int len); void CameraRecvData(SIO_PARAM_SERIAL_DEF *pPortParam, uint8_t *buf, int len); // 串口摄像机数据处理 void CameraPhotoPortDataProcess(SIO_PARAM_SERIAL_DEF *curserial); // 发送命令 void SendCmdFormPollCmdBuf( int port ); // 清除发送命令的所有标识 void ClearCmdAllFlag(int commid); // 下发串口拍照指令控制 int FindNextCameraPhotoCommand(SIO_PARAM_SERIAL_DEF *pPortParam); // 生成 CameraPhoto命令 void MakeCameraPhotoCommand(SIO_PARAM_SERIAL_DEF *pPortParam, uint8_t cmdidx, int OneParam, uint16_t TwoParam, uint8_t Threep, int phototime); // 清除命令缓冲区 void ClearCmdFormPollCmdBuf(int port); // 准备发送云台指令 int Gm_CtrlPtzCmd(SIO_PARAM_SERIAL_DEF *pPortParam, uint32_t ptzcmd); // 发送转动摄像机云台命令定时器 int Gm_Camera_Timer(); // 生成 PELCO_P 命令 * void Gm_SendPelco_pCommand( uint32_t cmdtype); // 计算Pelco_p校验 uint8_t Gm_Pelco_pXORCheck( uint8_t *msg, int len ); // 生成 PELCO_D 命令 * void Gm_SendPelco_DCommand(SIO_PARAM_SERIAL_DEF *pPortParam, uint32_t cmdtype); // 计算Pelco_D校验 uint8_t Gm_Pelco_DCheck( uint8_t *msg, int len ); // 查询传感器电源状态 char Gm_GetSensorsPowerState(int port); // 通过传感器使用的航空头查找传感器使用的串口序号 void FindDevUseSerialCommNo(); // 寻找并生成下一条倾角命令 int FindNextShxyProtocolCommand( int devidx ); // 倾角命令校验码计算 unsigned char CalLpc(unsigned char *msg, int len); // 读上海欣影传感器协议数据 void ShxyProtocolRecvData(int commid, uint8_t *buf, int len); // 检查检验和是否正确 int CheckShxyProtocolLpcError( uint8_t* msg, int len ); // 把16进制和10进制ASCII字符串转换成int整数 int ATOI(char *buf); //生成倾角命令 void MakeShxyProtocolPollCommand(int portno, uint8_t cmdidx); // 上海欣影传感器协议数据处理 void ShxyProtocolDataProcess( int commid); // 控制关闭传感器电源 //void Gm_CtrlCloseSensorsPower(int devidx); // 检查传感器电源是否应该关闭或打开 //void Gm_CheckSensorsPower(void); int SaveImageDataTofile(int devno); void Collect_sensor_data(); int CameraPhotoCmd(int phototime, unsigned char channel, int cmdidx, unsigned char bImageSize, unsigned char presetno, const char *serfile, unsigned int baud, int addr); /* 数据和图片采集数据返回函数 开始*/ int GetWeatherData(Data_DEF *data, int datano); int GetAirTempData(Data_DEF *airt); int GetHumidityData(Data_DEF *airt); int GetWindSpeedData(Data_DEF *airt); int GetWindDirectionData(Data_DEF *airt); int GetRainfallData(Data_DEF *airt); int GetAtmosData(Data_DEF *airt); int GetOpticalRadiationData(Data_DEF *airt); int GetPullValue(int devno, Data_DEF *data); int GetAngleValue(int devno, Data_DEF *data, int Xy); int GetImage(int devno, IMAGE_DEF *photo); /* 数据和图片采集数据返回函数 结束*/ // 生成一个随机整数 int GeneratingRandomNumber(); int Gm_SetSerialPortParam(int commid); void ClearCameraCmdAllFlag(SIO_PARAM_SERIAL_DEF *pPortParam); void ClearCameraCmdFormPollCmdBuf(SIO_PARAM_SERIAL_DEF *pPortParam); int Gm_OpenCameraSerial(SIO_PARAM_SERIAL_DEF *pPortParam, const char *serfile, unsigned int baud); int Gm_SetCameraSerialPortParam(int fd, unsigned int baud); int GM_CameraComSend(unsigned char * cSendBuf, size_t nSendLen, int fd); void SendCameraCmdFormPollCmdBuf(SIO_PARAM_SERIAL_DEF *pPortParam); void Gm_FindCameraCommand(SIO_PARAM_SERIAL_DEF *pPortParam); void GM_CameraSerialComRecv(SIO_PARAM_SERIAL_DEF *pPortParam); int GM_IsCloseCamera(SIO_PARAM_SERIAL_DEF *pPortParam); int GM_CameraSerialTimer(SIO_PARAM_SERIAL_DEF *pPortParam); int QueryPtzState(PTZ_STATE *ptz_state, int cmdidx, const char *serfile, unsigned int baud, int addr); int Query_BDGNSS_Data(BD_GNSS_DATA *BD_data, int samptime, const char *serfile, unsigned int baud); int GM_BdSerialTimer(SIO_PARAM_SERIAL_DEF *pPortParam); void GM_BdSerialComRecv(SIO_PARAM_SERIAL_DEF *pPortParam); void BdRecvData(SIO_PARAM_SERIAL_DEF *pPortParam, u_char *buf, int len); unsigned char BDXorCheck(unsigned char *msg, int len); void BD_NMEA0183_PortDataProcess(SIO_PARAM_SERIAL_DEF *curserial); char** BD_NMEA0183_SplitString(char *str, int *total_fields); int BD_get_BDRMC_data(SIO_PARAM_SERIAL_DEF *curserial); #endif // __SENSOR_PROTOCOL_H__