#pragma once #include #include #include #include #define adwin_config_protocol_size sizeof(adwin_config_protocol_t) #define active_report_data_size sizeof(active_report_data_t) #define protocol_basic_size sizeof(protocol_basic_t) typedef enum { CMD_SET_AUTOMATIC_REPORTING_FREQUENCY = 0X01, CMD_GET_ENCODER_DATA = 0X02, CMD_SET_ACTIVE = 0X03, CMD_CLEAR_ENCODER = 0X04, } cmd_id_type; typedef enum { PROTOCOL_CMD_CLEAR_ENCODER = 0X01, PROTOCOL_CMD_READ_ENCODER = 0X02, PROTOCOL_CMD_ACTIVE = 0X03, PROTOCOL_CMD_TRIGGER = 0X04, PROTOCOL_CMD_MODIFY_NETWORK_CONFIGURATIONS = 0X05, } protocol_pc_and_control_cmd_id_type; typedef enum { PROTOCOL_STATUS_SUCCESS = 0X00, PROTOCOL_STATUS_PARAMETER_ERROR = 0X01, PROTOCOL_STATUS_HARDWARE_ERROR = 0X02, } protocol_status_code_type; #pragma pack(push, 1) typedef struct { uint32_t fixed_bit_1; /* 固定位1:F0 00 20 00 */ uint32_t time_stamp_s; /* 相对时间戳,上位机通知Xsync开始工作时,从0开始,每秒+1 */ uint32_t fixed_bit_2; /* 固定位2:00 00 B0 42 */ uint32_t server_version; /* server版本号 */ uint32_t xilinx_version; /* Xilinx Version,看需求中固定为:41 61 F7 FF */ uint8_t mac_address[6]; /* MAC地址 */ uint16_t fixed_bit_3; /* 固定位3:00 00 */ uint16_t fixed_bit_4; /* 固定位4:00 00 */ uint8_t dhcp_enable; /* DHCP enable :0-False 1- TRUE */ uint8_t netmask_count; /* netmask COUNT */ uint32_t gateway_ip; /* 网关 */ uint64_t fixed_bit_5; /* 固定位5:00 00 00 00 00 00 00 00 */ uint64_t fixed_bit_6; /* 固定位6:00 00 00 00 00 00 00 00 */ } adwin_config_protocol_t; typedef struct { uint16_t index; /* */ uint16_t cmd_id; /* 指令id */ uint32_t time_stamp_s; /* 时间戳 */ uint32_t encoder_1_count; /* 编码器1计数 */ uint32_t encoder_2_count; /* 编码器2计数 */ uint8_t device_id; /* 设备ID号 */ uint8_t checksum; /* 校验和 */ } active_report_data_t; typedef struct { uint16_t index; /* */ uint16_t cmd_id; /* 指令id */ uint16_t data; /* 数据 */ uint8_t checksum; /* 校验和 */ } basic_report_data_t; typedef struct { uint16_t index; /* */ uint16_t cmd_id; /* 指令id */ uint8_t checksum; /* 校验和 */ } get_encoder_report_t; typedef struct { uint16_t index; /* */ uint16_t cmd_id; /* 指令id */ uint32_t encoder1; /* 编码器1的数据 */ uint32_t encoder2; /* 编码器2的数据 */ uint8_t checksum; /* 校验和 */ } get_encoder_respont_t; /*********************************************************************************************************************** * *******************************************************basic******************************************************* * ***********************************************************************************************************************/ /* 为了拿指令id而出来的指令格式 */ typedef struct { uint16_t index; /* */ uint16_t cmd_id; /* 指令id */ uint8_t checksum; /* 校验和 */ } protocol_basic_t; /*********************************************************************************************************************** * ************************************************清除编码器数据指令************************************************* * ***********************************************************************************************************************/ typedef struct { uint16_t index; /* */ uint16_t cmd_id; /* 指令id */ uint8_t checksum; /* 校验和 */ } protocol_clear_encoder_order_t; typedef struct { uint16_t index; /* */ uint16_t cmd_id; /* 指令id */ uint16_t status_code; /* 状态码 */ uint8_t checksum; /* 校验和 */ } protocol_clear_encoder_receipt_t; /*********************************************************************************************************************** * ************************************************读取编码器数据指令************************************************* * ***********************************************************************************************************************/ typedef struct { uint16_t index; /* */ uint16_t cmd_id; /* 指令id */ uint8_t checksum; /* 校验和 */ } protocol_read_encoder_order_t; typedef struct { uint16_t index; /* */ uint16_t cmd_id; /* 指令id */ int32_t encoder1; /* 编码器1的数据 */ int32_t encoder2; /* 编码器2的数据 */ uint8_t checksum; /* 校验和 */ } protocol_read_encoder_receipt_t; /*********************************************************************************************************************** * *************************************************设置主动上报指令************************************************** * ***********************************************************************************************************************/ typedef struct { uint16_t index; /* */ uint16_t cmd_id; /* 指令id */ uint16_t active_report_flag; /* 是否开启上报*/ uint16_t report_cycle; /* 上报周期 */ uint8_t checksum; /* 校验和 */ } protocol_active_order_t; typedef struct { uint16_t index; /* */ uint16_t cmd_id; /* 指令id */ uint16_t active_report_flag; /* 是否开启上报*/ uint16_t report_cycle; /* 上报周期 */ uint16_t status_code; /* 状态码 */ uint8_t checksum; /* 校验和 */ } protocol_active_receipt_t; /*********************************************************************************************************************** * ***********************************************设置触发上报模式指令************************************************ * ***********************************************************************************************************************/ typedef struct { uint16_t index; /* */ uint16_t cmd_id; /* 指令id */ uint16_t trigger_mode; /* 触发上报模式*/ uint8_t checksum; /* 校验和 */ } protocol_trigger_order_t; typedef struct { uint16_t index; /* */ uint16_t cmd_id; /* 指令id */ uint16_t trigger_mode; /* 触发上报模式*/ uint16_t status_code; /* 状态码 */ uint8_t checksum; /* 校验和 */ } protocol_trigger_receipt_t; /*********************************************************************************************************************** * *************************************************网络相关配置指令************************************************** * ***********************************************************************************************************************/ typedef struct { uint16_t index; /* */ uint16_t cmd_id; /* 指令id */ uint8_t configuration_option; /* 配置选项 */ uint32_t data; /* 数据 */ uint8_t checksum; /* 校验和 */ } protocol_modify_network_configurations_order_t; typedef struct { uint16_t index; /* */ uint16_t cmd_id; /* 指令id */ uint16_t status_code; /* 状态码 */ uint8_t checksum; /* 校验和 */ } protocol_modify_network_configurations_receipt_t; /*********************************************************************************************************************** * **********************************************主动上报指令的协议格式*********************************************** * ***********************************************************************************************************************/ /* 指令ID为0XC003 */ typedef struct { uint16_t index; /* */ uint16_t cmd_id; /* 指令id */ uint32_t placeholder_1; /* 占位符1 */ uint32_t placeholder_2; /* 占位符2 */ int32_t encoder1; /* 编码器1的数据 */ int32_t encoder2; /* 编码器2的数据 */ uint8_t checksum; /* 校验和 */ } protocol_active_and_trigger_report_t; #pragma pack(pop) uint8_t computesum8(char *data, size_t size);