#ifndef __SOFT_CAN_YY_H_ #define __SOFT_CAN_YY_H_ #include #include "hpm_can_drv.h" enum Rotate_State { ROTATE_DEFAULT = 0x00, ROTATE_START = 0x01, ROTATE_FINISH = 0x02, }; enum yy_CAN_node_id { NODE_TXGL = 0X01, // 通信管理 NODE_MEMS = 0X02, // mems NODE_WRJ = 0X04, // 无人机 NODE_HDWMK = 0X08, // 互定位模块 NODE_RADAR = 0X10, // 雷达 }; enum yy_CAN_msg_id { MSG_XLTB = 0X01, // 系留同步帧 MSG_RADAR_STATUS = 0X02, MSG_DRONE_STATUS = 0X03, MSG_IMU_SOLV = 0X04, MSG_IMU_A = 0x05, MSG_IMU_B = 0x06, MSG_IMU_C = 0x07, MSG_GLOBAL_POS = 0X08, MSG_GLOBAL_VEL = 0X09, MSG_POS_BIAS = 0X0A, MSG_HDW = 0X0B, MSG_HDW_DRIFT = 0X0C, MSG_RADAR_TAR1 = 0X0D, MSG_RADAR_TAR2 = 0X0E, MSG_RADAR_TAR3 = 0X0F, MSG_RADAR_TAR4 = 0X10, MSG_RADAR_TAR5 = 0X11, MSG_RADAR_TAR_MOVE1 = 0X12, MSG_RADAR_TAR_MOVE2 = 0X13, MSG_RADAR_TAR_MOVE3 = 0X14, MSG_RADAR_TAR_MOVE4 = 0X15, MSG_RADAR_TAR_MOVE5 = 0X16, MSG_DRONE_SELF_CHECK = 0x17, }; enum yy_CAN_cmd_id { CTL_RTO_ACTION = 0x01, CTL_CW_ROTATION = 0x02, CTL_CCW_ROTATION = 0x04, CTL_ALT_ACTION = 0x08, CTL_YAW_ACTION = 0x10, CTL_TO_ACTION = 0x20, CTL_FIND_ACTION = 0x40, CTL_STOP_ACTION = 0x80, }; enum yy_CAN_cmd_mask_id { CTL_RTO_CMD_MASK = 0x01, /*预备弹射指令*/ CTL_ROTATE_CMD_MASK = 0x06, /*搜索指令:顺时针旋转/逆时针旋转*/ CTL_ALT_CMD_MASK = 0x08, /*执行设定高度有效性*/ CTL_YAW_CMD_MASK = 0x10, /*执行设定航向有效性*/ CTL_TO_CMD_MASK = 0x20, /*执行弹射指令*/ CTL_FIND_CMD_MASK = 0x40, /*范围搜索(±30度)*/ CTL_STOP_CMD_MASK = 0x80, /*任务结束指令*/ }; #define CLEAR_STATUS_BIT(x, y) ((x) &= ~(1 << y)) #define SET_STATUS_BIT(x, y) ((x) |= (1 << y)) enum yy_CAN_cmd_execute_bit { TAX_READY = 0, ALT_SETTING = 1, ALT_EXECUTE = 2, YAW_SETTING = 3, YAW_EXECUTE = 4, CW_EXECUTE_COMPLETE = 5, CCW_EXECUTE_COMPLETE = 6, TAX_EXECUTE = 7, }; struct yy_can_rx_msg_data { // 通讯管理模块相关数据 int32_t txgl_lon; // 1e-7deg int32_t txgl_lat; float txgl_enu_vel[3]; // m/s uint8_t txgl_pos_fix_status; uint8_t txgl_gps_num; uint8_t temp_count; /*CAN帧ID类接收标志位: 按bit对应:b0:互定位帧 b1:卫导定位帧 b2:卫导速度帧 b3:卫导经度是否丢失0丢失1未丢失 b4:卫导纬度是否丢失0丢失1未丢失*/ // int16_t txgl_pos_fix_status; float txgl_msl_alt; // m uint8_t txgl_wk_stage; uint8_t txgl_drone_cmd; // b0 1-弹射准备 b1~2 00-无效 01-顺时针旋转 10-逆时针旋转 uint8_t txgl_radar_cmd; uint8_t txgl_selfcheck; // 00-自检无效 11-自检有效 float txgl_alt_sp; // m float txgl_yaw_sp; // deg // 互定位模块相关数据 float hdw_enu_rpos[3]; // m 右前下 float hdw_drift_vel[3]; // m/s uint16_t hdw_status; // mems imu 模块相关数据 float imu_yaw; // in deg float imu_roll; float imu_pitch; uint8_t imu_status; /*bit0: 0--正欧拉角 1--反欧拉角 默认0*/ float imu_xyz_rate[3]; // in deg/s float imu_xyz_acc[3]; // in m/s^2 uint8_t temp; // 温度 °C uint16_t nav_status; /* 01-对准中 02-转导航 */ uint16_t mems_status; /* 按 bit 对应 b0~b2 自检,*/ }; extern uint16_t hdw_can_delay; extern bool debug_mode, alt_reached, yaw_reached; extern uint32_t recv_alt_time; extern uint8_t status_broadcast; void updata_cmd_status(enum yy_CAN_cmd_execute_bit bit, bool status); const struct yy_can_rx_msg_data *yy_can_rx_data_get(void); int YY_can_rx_decode(const can_receive_buf_t *rxmsg); void YY_tx_loop(void); #endif