payload.h 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  1. #pragma once
  2. #include "common.h"
  3. #include <stdint.h>
  4. enum payload_type
  5. {
  6. PAYLOAD_TYPE_ELSE = 0, // 其它类载荷
  7. PAYLOAD_TYPE_GIMBAL_POD = 1, // 光电吊舱类载荷
  8. PAYLOAD_TYPE_SENSOR_LADAR = 2, // 传感器雷达类载荷
  9. PAYLOAD_TYPE_DGPS_BASE = 3, // 差分基站类载荷
  10. };
  11. #define PAYLOAD_SZHT_FILTER_BUFF_LEN 10
  12. enum payload_sensor_type
  13. {
  14. PAYLOAD_SENSOR_VISEBLE = 1, // 可见光
  15. PAYLOAD_SENSOR_INFRARED = 2, // 红外
  16. PAYLOAD_SENSOR_MIX_VISEBLE = 3, // 画中画, 可见光主
  17. PAYLOAD_SENSOR_MIX_INFRARED = 4, // 画中画, 红外主
  18. };
  19. // 光电吊舱操作枚举类
  20. enum
  21. {
  22. PAYLOAD_DIAOCANT_OPS_NULL = 0, // 控
  23. PAYLOAD_DIAOCANG_OPS_BACK_MID = 1, // 回中
  24. PAYLOAD_DIAOCANG_OPS_SET_PITCH = 2, // 设置俯仰角
  25. PAYLOAD_DIAOCANG_OPS_SET_YAW = 3, // 设置方位角
  26. PAYLOAD_DIAOCANG_OPS_LOOK_DOWN = 4, // 垂直下视
  27. PAYLOAD_DIAOCANG_OPS_TAR_TRACE = 5, // 目标跟踪
  28. PAYLOAD_DIAOCANG_OPS_ZOOM = 6, // 变焦
  29. PAYLOAD_DIAOCANG_OPS_SENSOR_SWITCH = 7, // 光学传感器切换
  30. PAYLOAD_DIAOCANG_OPS_TAKE_PHOTO = 8, // 拍照
  31. PAYLOAD_DIAOCANG_OPS_TAKE_VEDIO = 9, // 录制
  32. PAYLOAD_DIAOCANG_OPS_LASER_MEASURE = 10, // 激光测距
  33. PAYLOAD_DIAOCANG_OPS_MOVE = 11, // 向上下左右运动
  34. PAYLOAD_DIAOCANG_OPS_TOUCH_MOVE = 12, // 指点移动
  35. PAYLOAD_DIAOCANG_OPS_FOLLOW = 13, // 跟随模式
  36. PAYLOAD_DIAOCANG_OPS_LOCK = 14, // 锁定模式
  37. PAYLOAD_DIAOCANG_OPS_FOCUS = 15, // 聚焦目标
  38. PAYLOAD_DIAOCANG_OPS_OSD_SET = 16, // OSD 设置
  39. PAYLOAD_DIAOCANG_OPS_TTRANS = 200, // 指令透传
  40. };
  41. // 吊舱操作运动方向
  42. enum
  43. {
  44. PAYLOAD_MOVE_STOP = 0,
  45. PAYLOAD_MOVE_UP = 1,
  46. PAYLOAD_MOVE_DOWN = 2,
  47. PAYLOAD_MOVE_LEFT = 3,
  48. PAYLOAD_MOVE_RIGHT = 4,
  49. };
  50. // 吊舱变焦操作
  51. enum
  52. {
  53. PAYLOAD_ZOOM_STOP = 0,
  54. PAYLOAD_ZOOM_OUT = 1,
  55. PAYLOAD_ZOOM_IN = 2
  56. };
  57. // 吊舱跟踪操作
  58. enum
  59. {
  60. PAYLOAD_TRACE_STOP = 0,
  61. PAYLOAD_TRACE_START = 1,
  62. };
  63. struct payload_status
  64. {
  65. float laser_dist_m;
  66. float roll; /*deg*/
  67. float pitch;
  68. float yaw;
  69. uint8_t zoom;
  70. uint8_t trace_flag;
  71. int tar_lon; /* 跟踪使用的目标位置 */
  72. int tar_lat;
  73. int tar_alt;
  74. int tar_lon_loc; /* 根据激光测距计算的目标位置 */
  75. int tar_lat_loc;
  76. int tar_alt_loc;
  77. float y_axis[3]; /* 光轴空间向量 */
  78. };
  79. struct payload_diaocang;
  80. struct payload_ops
  81. {
  82. void (*_tx_poll)(uint32_t time_us, uint32_t *last_tx_time_us,
  83. uint32_t (*send_data)(const uint8_t *pdata, uint32_t len));
  84. /* 回中 */
  85. void (*_return_to_mid)(uint32_t (*send_data)(const uint8_t *pdata, uint32_t len));
  86. /* 设置俯仰 */
  87. void (*_set_pitch)(float pitch_ang, uint32_t (*send_data)(const uint8_t *pdata, uint32_t len));
  88. /* 设置航向 */
  89. void (*_set_yaw)(float yaw_ang, uint32_t (*send_data)(const uint8_t *pdata, uint32_t len));
  90. /* 拍照 */
  91. void (*_take_photo)(uint32_t (*send_data)(const uint8_t *pdata, uint32_t len));
  92. /* 录像 */
  93. void (*_take_vedio)(int on_off, uint32_t (*send_data)(const uint8_t *pdata, uint32_t len));
  94. /* 激光测距 */
  95. void (*_laser_dist)(uint32_t (*send_data)(const uint8_t *pdata, uint32_t len));
  96. /* 下视 */
  97. void (*_look_downward)(uint32_t (*send_data)(const uint8_t *pdata, uint32_t len));
  98. /* 跟随模式 */
  99. void (*_follow_mode)(uint32_t (*send_data)(const uint8_t *pdata, uint32_t len));
  100. /* 锁定模式 */
  101. void (*_lock_mode)(uint32_t (*send_data)(const uint8_t *pdata, uint32_t len));
  102. /* 运动 */
  103. void (*_move)(int direction, float rate,
  104. uint32_t (*send_data)(const uint8_t *pdata, uint32_t len));
  105. /* 指点移动 */
  106. void (*_touch_move)(float px, float py, uint32_t (*send_data)(const uint8_t *pdata, uint32_t len));
  107. /* 缩放 */
  108. void (*_zoom)(int direction, float rate,
  109. uint32_t (*send_data)(const uint8_t *pdata, uint32_t len));
  110. /* 光学传感器切换 */
  111. void (*_sensor_switch)(uint32_t (*send_data)(const uint8_t *pdata, uint32_t len), uint16_t sensor_type);
  112. /* 目标追踪 */
  113. void (*_trace)(int trace_act, float p1x, float p1y, float p2x, float p2y,
  114. uint32_t (*send_data)(const uint8_t *pdata, uint32_t len));
  115. /* 目标位置聚焦 */
  116. void (*_focus)(int focus_lon, int focus_lat, int focus_alt,
  117. uint32_t (*_send_data)(const uint8_t *pdata, uint32_t len));
  118. uint32_t (*_send_data)(const uint8_t *pdata, uint32_t len);
  119. int (*_rx_cbk)(uint8_t ch, struct payload_diaocang *status);
  120. };
  121. struct payload_diaocang
  122. {
  123. enum payload_type _type;
  124. struct payload_status _status;
  125. struct payload_ops _ops;
  126. uint32_t _last_tx_time;
  127. comp_status _link_status;
  128. uint32_t _link_lost_count;
  129. uint32_t _link_check_time;
  130. float _diste_filter_buffer[PAYLOAD_SZHT_FILTER_BUFF_LEN];
  131. float _distn_filter_buffer[PAYLOAD_SZHT_FILTER_BUFF_LEN];
  132. int _filter_in_index;
  133. };
  134. void payload_ctl_received(uint8_t ctl_ops_id, const void *param, uint32_t param_len,
  135. struct payload_diaocang *payload);
  136. void payload_tx_poll(uint32_t tiem_us, struct payload_diaocang *payload);
  137. int payload_rx_cbk(uint8_t ch, struct payload_diaocang *payload);
  138. void payload_check_linkstatu_poll(uint32_t time_now_us,
  139. struct payload_diaocang *payload);
  140. void payload_targte_locate(struct payload_diaocang *payload, uint8_t gimbal_euler_type);