#ifndef _agent_hyt_H_ #define _agent_hyt_H_ #include "comm_types.h" #include "sock_utils.h" #ifdef __cplusplus extern "C" { #endif #pragma pack(push,1) #define PTZ_CONNECT_STATE_DEAD 0 #define PTZ_CONNECT_STATE_FAILED 1 #define PTZ_CONNECT_STATE_SUCCESS 2 #define CLIENT_NUM 3 typedef struct _CMD_MAP_INFO_{ u_int8_t chl_swich;//通道选择 u_int8_t init;// u_int8_t angle_status;//角度回复发送状态选择位0不发送,1发送数据 u_int8_t speed_status;//速度回复发送状态选择位0不发送,1发送数据 u_int8_t temp_status;//温度 u_int8_t voltage_status;//电压 u_int16_t angle_time;//角度回复时间 u_int16_t speed_time;//速度回复时间 u_int16_t temp_time;//温度回复时间 u_int16_t voltage_time;//电压 u_int16_t time;//自动回复间隔时间 struct sockaddr_in client_add; //客户端地址 }CMD_MAP_INFO; extern CMD_MAP_INFO client_map_info[CLIENT_NUM]; //七字节指令 typedef struct _PTZ_DATA_PACK_{ u_int8_t head; u_int8_t addr; u_int8_t command[2]; u_int8_t data[2]; u_int8_t checksum; }PTZ_DATA_PACK; //变长指令 typedef struct _PTZ_DATA_PACK_A_{ unsigned char head;//头,默认0XFF unsigned char addr;//云台地址 unsigned char cmd_type;//指令类型,即指控制哪一方面的指令 unsigned char cmd_func;//指令功能,即指这条指令具体是干什么的 unsigned short int cmd_len;//协议数据长度 unsigned int head_crc;//包头校验,包头数据char相加 unsigned char cmd_data[1];//协议传输的具体数据的第一个字节 }PTZ_DATA_PACK_A; /***************************** 定长协议 HYT_PACK ******************************/ //======标准Pelco-D协议,command[0] == 0 command[1] == 指令功能 #define HYT_PACK_CMD_1_FUNC_KEEP_UP 0x08 //向上 #define HYT_PACK_CMD_1_FUNC_KEEP_DUWN 0x10 //向下 #define HYT_PACK_CMD_1_FUNC_KEEP_LEFT 0x04 //向左 #define HYT_PACK_CMD_1_FUNC_KEEP_RIGHT 0x02 //向右 #define HYT_PACK_CMD_1_FUNC_KEEP_LEFT_UP 0x0c //左上 #define HYT_PACK_CMD_1_FUNC_KEEP_RIGHT_UP 0x0a //右上 #define HYT_PACK_CMD_1_FUNC_KEEP_LEFT_DUWN 0x14 //左下 #define HYT_PACK_CMD_1_FUNC_KEEP_RIGHT_DUWN 0x12 //右下 #define HYT_PACK_CMD_1_FUNC_LOCATE_HORI_ANGLE 0x4b //水平角度定位 #define HYT_PACK_CMD_1_FUNC_LOCATE_VERT_ANGLE 0x4d //垂直角度定位 #define HYT_PACK_CMD_1_FUNC_INQUIRE_HORI_ANGLE 0x51 //查询水平角度 #define HYT_PACK_CMD_1_FUNC_INQUIRE_VERT_ANGLE 0x53 //查询垂直角度 #define HYT_PACK_CMD_1_FUNC_RETURN_HORI_ANGLE 0x59 //回传水平角度 (云台->上位机) #define HYT_PACK_CMD_1_FUNC_RETURN_VERT_ANGLE 0x5b //回传垂直角度 (云台->上位机) #define HYT_PACK_CMD_1_FUNC_SET_PRESET_BIT_V 0x03 //视频设置预置位(当前角度) #define HYT_PACK_CMD_1_FUNC_SELECT_PRESET_BIT 0x07 //调用预置位 #define HYT_PACK_CMD_1_FUNC_DELETE_PRESET_BIT 0x05 //删除预置位 #define HYT_PACK_CMD_1_FUNC_CONTROL_TOP_POWER_ON 0x09 //控制云台顶端电源开 #define HYT_PACK_CMD_1_FUNC_CONTROL_TOP_POWER_OFF 0x0b //控制云台顶部电源关 #define HYT_PACK_CMD_1_FUNC_FLASH_ERASE 0x88 //片外flash擦除 #define HYT_PACK_CMD_1_HORI_ANGLE_ERROR_SWITCH 0x89 //水平角度误差消除开关 //======根据标准协议自定义的7字节协议 //======command[0] == 指令类型或功能 command[1] == 指令功能 /**************************云台水平角度方向定位控制***************************/ #define HYT_PACK_CMD_0_FUNC_LOCATE_HORI_ANGLE_SPEED 0x4b //指定速度水平角度定位 #define HYT_PACK_CMD_0_FUNC_LOCATE_VERT_ANGLE_SPEED 0x4d //指定速度垂直角度定位 #define HYT_PACK_CMD_0_FUNC_CONTROL_HORI_ANGLE 0xbd //水平角度控制 #define HYT_PACK_CMD_0_FUNC_ANGLE_LOCATION_RETURN_SWITCH 0xc5 //角度定位回传开关 //设置预置位扫描参数 #define HYT_PACK_CMD_0_FUNC_SET_PRESET_BIT_HORI_A 0xe4 //通过角度设置水平预置位 #define HYT_PACK_CMD_0_FUNC_SET_PRESET_BIT_VERT_A 0xe5 //通过角度设置垂直预置位 #define HYT_PACK_CMD_0_FUNC_SET_PRESET_BIT_STOP_TIME 0xf1 //设置预置位停止时间 #define HYT_PACK_CMD_0_FUNC_SET_PRESET_BIT_SPEED 0xf2 //设置预置位扫描速度 //设置预置位扫描模式 #define HYT_PACK_CMD_0_TYPE_SET_PRESET_BIT_MODEL 0xf0 //设置预置位扫描模式 //预置位扫描回传 #define HYT_PACK_CMD_0_TYPE_RETURN_PRESET_BIT_SWITCH 0x9f //预置位回传开关 #define HYT_PACK_CMD_0_TYPE_INQUIRE_PRESET_SCAN_DATA 0xea //预置位参数查询 /*********************************云台区域扫描控制*****************************/ #define HYT_PACK_CMD_0_FUNC_SET_SCAN_HORI_START_BORDER_V 0xe6 //通过视频设置扫描水平起始边界 (即以当前位置) #define HYT_PACK_CMD_0_FUNC_SET_SCAN_HORI_END_BOTDER_V 0xe7 //通过视频设置扫描水平结束边界 #define HYT_PACK_CMD_0_FUNC_SET_SCAN_VERT_START_BORDER_V 0xe8 //通过视频设置扫描垂直起始边界 #define HYT_PACK_CMD_0_FUNC_SET_SCAN_VERT_END_BORDER_V 0xe9 //通过视频设置扫描垂直结束边界 #define HYT_PACK_CMD_0_FUNC_SET_SCAN_HORI_VERT_STOP_TIME 0xf6 //设置区域扫描水平垂直停止时间 #define HYT_PACK_CMD_0_FUNC_SET_SCAN_HORI_START_BORDER_A 0xf7 //通过角度设置区域扫描水平起始边界 #define HYT_PACK_CMD_0_FUNC_SET_SCAN_HORI_END_BOTDER_A 0xf8 //通过角度设置区域扫描水平结束边界 #define HYT_PACK_CMD_0_FUNC_SET_SCAN_VERT_START_BORDER_A 0xf9 //通过角度设置区域扫描垂直起始边界 #define HYT_PACK_CMD_0_FUNC_SET_SCAN_VERT_END_BORDER_A 0xfa //通过角度设置区域扫描垂直结束边界 #define HYT_PACK_CMD_0_FUNC_SET_SCAN_HORI_GAP_ANGLE 0xfb //通过发送角度设置水平扫描间隔角度 #define HYT_PACK_CMD_0_FUNC_SET_SCAN_VERT_GAP_ANGLE 0xfc //通过发送角度设置垂直扫描间隔角度 #define HYT_PACK_CMD_0_FUNC_SET_SCAN_HORI_VERT_SPEED 0xfd //设置区域扫描水平垂直扫描速度 #define HYT_PACK_CMD_0_FUNC_SAVE_AREA_SCAN_DATA 0xf3 //保存区域扫描参数 #define HYT_PACK_CMD_0_TYPE_SET_SCAN_STATE 0xf4 //区域扫描状态,使能或不使能某个扫描区域 #define HYT_PACK_CMD_0_TYPE_SET_AREA_SCAN_FUNC 0xf5 //设置区域扫描扫描模式 #define HYT_PACK_CMD_0_TYPE_AREA_SCAN_RETURN_SWITCH 0xc4 //设置区域扫描回传开关 #define HYT_PACK_CMD_0_TYPE_INQUIRE_AREA_SCAN_DATA 0xca //查询区域扫描参数 /***********************云台状态参数查询及实时回传开关 ************************/ #define HYT_PACK_CMD_0_TYPE_INQUIRE_CURRENT 0xc8 //电流查询与回复 #define HYT_PACK_CMD_0_TYPE_INQUIRE_VOLTAGE 0xcd //电压查询与回复 #define HYT_PACK_CMD_0_FUNC_INQUIRE_TEMP 0xd6 //温度查询与回复 #define HYT_PACK_CMD_0_TYPE_INQUIRE_SPEED 0xd0 //速度查询与回复 #define HYT_PACK_CMD_0_TYPE_INQUIRE_WORK_MODEL 0xe0 //查询工作模式 #define HYT_PACK_CMD_0_TYPE_INQUIRE_WORK_STATE 0xdd //查询工作状态 #define HYT_PACK_CMD_0_FUNC_INQUIRE_ANGLE_STATE 0x9d //查询角度状态 #define HYT_PACK_CMD_0_FUNC_AUTO_RETURN_SPEED_SWITCH 0xdc //转速自动回传开关 #define HYT_PACK_CMD_0_FUNC_AUTO_RETURN_ANGLE_SWITCH 0xe1 //云台角度自动回传开关 #define HYT_PACK_CMD_0_FUNC_AUTO_RETURN_VERF_SWITCH 0xbf //云台电机驱动芯片模拟电压输入等级回传 #define HYT_PACK_CMD_0_FUNC_AUTO_RETURN_CURRENT_SWITCH 0xc1 //云台工作电流实时回传开关 #define HYT_PACK_CMD_0_FUNC_AUTO_RETURN_VOLTAGE_SWITCH 0xcc //云台工作电压实时回传开关 #define HYT_PACK_CMD_0_FUNC_AUTO_RETURN_TEMP_SWITCH 0xd4 //云台工作温度实时回传开关 #define HYT_PACK_CMD_0_FUNC_AUTO_RETURN_CPU_SWITCH 0xb0 //云台CPU占有率实时回传开关 /****************************设置&查询云台基准0位 *****************************/ #define HYT_PACK_CMD_0_TYPE_SET_ZERO_POSITION 0xe3 //零位设置 #define HYT_PACK_CMD_0_TYPE_INQUIRE_ZERO_POSITION 0x3e //查询基准零位 /********************************云台重启&自检指令*****************************/ #define HYT_PACK_CMD_0_FUNC_REBOOT 0xde //云台重启 #define HYT_PACK_CMD_0_FUNC_COMPLETE_CHECK_AGAIN 0xce //清除数据重新进行全范围自检 #define HYT_PACK_CMD_0_FUNC_SIMPLY_CHECK_AGAIN 0xbb //清除数据重新进行简易自检 /******************************** 指令回复开关 *****************************/ #define HYT_PACK_CMD_0_TYPE_SET_CMD_REPLY_SWITCH 0xdf //开启或关闭指令回复开关 /**********************************加热电阻开关*******************************/ #define HYT_PACK_CMD_0_TYPE_HEAT_RESISTANCE_SWITCH 0xcf //加热电阻开关 /********************************指令保存预处理功能*****************************/ #define HYT_PACK_CMD_0_FUNC_CMD_SAVE_BEFORE 0xba //指令保存预处理功能 /********************************电磁继电器开关*****************************/ #define HYT_PACK_CMD_0_TYPE_MOTOR_RELAY_SWITCH 0xc0 //电磁继电器开关 //角度回复选择 #define PTZ_HORI 0 #define PTZ_VERT 1 #define CMD_ALLOW 1//命令允许 #define CMD_NOT_ALLOW 0//命令不允许 ///回复开关 #define CMD_REPLY 1 //回复打开 #define CMD_NO_REPLY 0 //回复关闭 ///指令回复 #define CMD_RIGHT 0 #define CMD_WRONG 1 #define CMD_FAIL 2 //云台回复通道选择 #define PTZ_UART_422 1 #define PTZ_UART_485 2 #define PTZ_UDP 3 #define PTZ_UART_0 4 /**云台定位回传**/ #define LOCATION_RETURN_OFF 0//关闭 #define LOCATION_RETURN_ON 1//打开 #define LOCATION_UDP_CMD_ON 1//收到角度控制指令 #define LOCATION_UART_422_CMD_ON 2//收到角度控制指令 #define LOCATION_UART_485_CMD_ON 3//收到角度控制指令 #define LOCATION_CMD_OFF 0//没有收到角度控制指令 #define LOCATION_HORI 2//水平角度控制到位回复 #define LOCATION_VERT 3//垂直角度控制到位回复 #define PACK_A_HEAD 0XFF #define PACK_A_TAIL 0X16 //指令类型//指令功能 /**/ #define EDIT_CFG_FILE 0X01 //修改配置文件类型 #define EDIT_IP 0X01//设置IP功能 #define EDIT_MAC 0X02//设置MAC功能 #define EDIT_NETMASK 0X03//设置NETMASK功能 #define EDIT_GATEWAY 0X04//设置GATEWAY功能 #define EDIT_TERM_IP 0X05 #define EDIT_WEB_IP 0X06 #define EDIT_A9_IP 0X07 #define EDIT_HARDWAREVER 0X08 #define EDIT_CMD_ID 0X09 #define EDIT_COMPONENT_ID 0X0A /**/ #define UPLOAD_CFG_DATA 0X02//云台上传配置文件信息 #define UPLOAD_CFG_DATA_REQUEST 0X01//上传配置文件请求 #define UPLOAD_CFG_DATA_REQUEST_BROADCAST 0X02//广播上传配置文件请求 #define UPLOAD_CFG_DATA_RIGHT 0XEE//上传配置文件且配置文件正确 #define UPLOAD_CFG_DATA_WRONG 0XFF//配置文件错误,无法上传 /**/ #define UPLOAD_VERSION 0X03//上传云台程序版本号 #define UPLOAD_VERSION_REQUEST 0X01//上传版本号请求 #define UPLOAD_VERSION_RIGHT 0XEE//上传版本号且版本号存在 /**/ #define CMDA_REPLY 0XFF//指令回复类型 TYPE #define CMDA_WRONG 0XFF//指令错误回复功能 FUNC #define CMDA_RIGHT 0XEE//指令正确且执行成功回复功能 #define CMDA_FAIL 0XFE//指令正确但执行失败回复功能 extern int ptz_communicaton; extern char tiedian_id[3]; #define PTZ_UART_FREE_STATE 0//串口处于空闲状态 #define PTZ_UART_RECV_STATE 1//串口处于数据接收状态 #define PTZ_UART_HAND_STATE 2//串口处于数据处理状态 #define POWER_ON 1 //电源打开 #define POWER_OFF 0 //电源关闭 #define PTZ_UART_RECV_OVERTIME 20 //串口接收超时时间(单位:ms) void ptz_reply(char dev, unsigned char type); void task_uart_data_process_init(); void send_udp_data_aim(u_int8_t *buff,u_int16_t buff_size, struct sockaddr* source, socklen_t sourcelen); void ptz_send_data(char dev,unsigned char *buff, unsigned short int buff_size); void init_agent_hyt_module(); u_int8_t MotorCalPelcoDSUM(u_int8_t *data,u_int16_t datalen); //云台不定长数据指令回复 char ptz_data_pack_a_reply(char dev, unsigned char reply); void send_udp_data(u_int8_t *buff,u_int16_t buff_size); void ptz_data_pack_a_process(char dev, PTZ_DATA_PACK_A *pack); void ptz_data_pack_process(char dev, PTZ_DATA_PACK *pack); #pragma pack(pop) #ifdef __cplusplus } #endif void init_agent_module(void); #endif