soft_can_yy.h 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. #ifndef __SOFT_CAN_YY_H_
  2. #define __SOFT_CAN_YY_H_
  3. #include <stdint.h>
  4. #include "hpm_can_drv.h"
  5. enum Rotate_State
  6. {
  7. ROTATE_DEFAULT = 0x00,
  8. ROTATE_START = 0x01,
  9. ROTATE_FINISH = 0x02,
  10. };
  11. enum yy_CAN_node_id
  12. {
  13. NODE_TXGL = 0X01, // 通信管理
  14. NODE_MEMS = 0X02, // mems
  15. NODE_WRJ = 0X04, // 无人机
  16. NODE_HDWMK = 0X08, // 互定位模块
  17. NODE_RADAR = 0X10, // 雷达
  18. };
  19. enum yy_CAN_msg_id
  20. {
  21. MSG_XLTB = 0X01, // 系留同步帧
  22. MSG_RADAR_STATUS = 0X02,
  23. MSG_DRONE_STATUS = 0X03,
  24. MSG_IMU_SOLV = 0X04,
  25. MSG_IMU_A = 0x05,
  26. MSG_IMU_B = 0x06,
  27. MSG_IMU_C = 0x07,
  28. MSG_GLOBAL_POS = 0X08,
  29. MSG_GLOBAL_VEL = 0X09,
  30. MSG_POS_BIAS = 0X0A,
  31. MSG_HDW = 0X0B,
  32. MSG_HDW_DRIFT = 0X0C,
  33. MSG_RADAR_TAR1 = 0X0D,
  34. MSG_RADAR_TAR2 = 0X0E,
  35. MSG_RADAR_TAR3 = 0X0F,
  36. MSG_RADAR_TAR4 = 0X10,
  37. MSG_RADAR_TAR5 = 0X11,
  38. MSG_RADAR_TAR_MOVE1 = 0X12,
  39. MSG_RADAR_TAR_MOVE2 = 0X13,
  40. MSG_RADAR_TAR_MOVE3 = 0X14,
  41. MSG_RADAR_TAR_MOVE4 = 0X15,
  42. MSG_RADAR_TAR_MOVE5 = 0X16,
  43. MSG_DRONE_SELF_CHECK = 0x17,
  44. };
  45. enum yy_CAN_cmd_id
  46. {
  47. CTL_RTO_ACTION = 0x01,
  48. CTL_CW_ROTATION = 0x02,
  49. CTL_CCW_ROTATION = 0x04,
  50. CTL_ALT_ACTION = 0x08,
  51. CTL_YAW_ACTION = 0x10,
  52. CTL_TO_ACTION = 0x20,
  53. CTL_FIND_ACTION = 0x40,
  54. CTL_STOP_ACTION = 0x80,
  55. };
  56. enum yy_CAN_cmd_mask_id
  57. {
  58. CTL_RTO_CMD_MASK = 0x01, /*预备弹射指令*/
  59. CTL_ROTATE_CMD_MASK = 0x06, /*搜索指令:顺时针旋转/逆时针旋转*/
  60. CTL_ALT_CMD_MASK = 0x08, /*执行设定高度有效性*/
  61. CTL_YAW_CMD_MASK = 0x10, /*执行设定航向有效性*/
  62. CTL_TO_CMD_MASK = 0x20, /*执行弹射指令*/
  63. CTL_FIND_CMD_MASK = 0x40, /*范围搜索(±30度)*/
  64. CTL_STOP_CMD_MASK = 0x80, /*任务结束指令*/
  65. };
  66. #define CLEAR_STATUS_BIT(x, y) ((x) &= ~(1 << y))
  67. #define SET_STATUS_BIT(x, y) ((x) |= (1 << y))
  68. enum yy_CAN_cmd_execute_bit
  69. {
  70. TAX_READY = 0,
  71. ALT_SETTING = 1,
  72. ALT_EXECUTE = 2,
  73. YAW_SETTING = 3,
  74. YAW_EXECUTE = 4,
  75. CW_EXECUTE_COMPLETE = 5,
  76. CCW_EXECUTE_COMPLETE = 6,
  77. TAX_EXECUTE = 7,
  78. };
  79. struct yy_can_rx_msg_data
  80. {
  81. // 通讯管理模块相关数据
  82. int32_t txgl_lon; // 1e-7deg
  83. int32_t txgl_lat;
  84. float txgl_enu_vel[3]; // m/s
  85. uint8_t txgl_pos_fix_status;
  86. uint8_t txgl_gps_num;
  87. uint8_t temp_count; /*CAN帧ID类接收标志位: 按bit对应:b0:互定位帧 b1:卫导定位帧 b2:卫导速度帧
  88. b3:卫导经度是否丢失0丢失1未丢失 b4:卫导纬度是否丢失0丢失1未丢失*/
  89. // int16_t txgl_pos_fix_status;
  90. float txgl_msl_alt; // m
  91. uint8_t txgl_wk_stage;
  92. uint8_t txgl_drone_cmd; // b0 1-弹射准备 b1~2 00-无效 01-顺时针旋转 10-逆时针旋转
  93. uint8_t txgl_radar_cmd;
  94. uint8_t txgl_selfcheck; // 00-自检无效 11-自检有效
  95. float txgl_alt_sp; // m
  96. float txgl_yaw_sp; // deg
  97. // 互定位模块相关数据
  98. float hdw_enu_rpos[3]; // m 右前下
  99. float hdw_drift_vel[3]; // m/s
  100. uint16_t hdw_status;
  101. // mems imu 模块相关数据
  102. float imu_yaw; // in deg
  103. float imu_roll;
  104. float imu_pitch;
  105. uint8_t imu_status; /*bit0: 0--正欧拉角 1--反欧拉角 默认0*/
  106. float imu_xyz_rate[3]; // in deg/s
  107. float imu_xyz_acc[3]; // in m/s^2
  108. uint8_t temp; // 温度 °C
  109. uint16_t nav_status; /* 01-对准中 02-转导航 */
  110. uint16_t mems_status; /* 按 bit 对应 b0~b2 自检,*/
  111. };
  112. extern uint16_t hdw_can_delay;
  113. extern bool debug_mode, alt_reached, yaw_reached;
  114. extern uint32_t recv_alt_time;
  115. extern uint8_t status_broadcast;
  116. void updata_cmd_status(enum yy_CAN_cmd_execute_bit bit, bool status);
  117. const struct yy_can_rx_msg_data *yy_can_rx_data_get(void);
  118. int YY_can_rx_decode(const can_receive_buf_t *rxmsg);
  119. void YY_tx_loop(void);
  120. #endif