MW22-02A/APP/Agent/agent_hyt.h

303 lines
12 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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