303 lines
12 KiB
C
303 lines
12 KiB
C
#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
|
||
|