| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181 |
- #pragma once
- #include "common.h"
- #include <stdint.h>
- enum payload_type
- {
- PAYLOAD_TYPE_ELSE = 0, // 其它类载荷
- PAYLOAD_TYPE_GIMBAL_POD = 1, // 光电吊舱类载荷
- PAYLOAD_TYPE_SENSOR_LADAR = 2, // 传感器雷达类载荷
- PAYLOAD_TYPE_DGPS_BASE = 3, // 差分基站类载荷
- };
- #define PAYLOAD_SZHT_FILTER_BUFF_LEN 10
- enum payload_sensor_type
- {
- PAYLOAD_SENSOR_VISEBLE = 1, // 可见光
- PAYLOAD_SENSOR_INFRARED = 2, // 红外
- PAYLOAD_SENSOR_MIX_VISEBLE = 3, // 画中画, 可见光主
- PAYLOAD_SENSOR_MIX_INFRARED = 4, // 画中画, 红外主
- };
- // 光电吊舱操作枚举类
- enum
- {
- PAYLOAD_DIAOCANT_OPS_NULL = 0, // 控
- PAYLOAD_DIAOCANG_OPS_BACK_MID = 1, // 回中
- PAYLOAD_DIAOCANG_OPS_SET_PITCH = 2, // 设置俯仰角
- PAYLOAD_DIAOCANG_OPS_SET_YAW = 3, // 设置方位角
- PAYLOAD_DIAOCANG_OPS_LOOK_DOWN = 4, // 垂直下视
- PAYLOAD_DIAOCANG_OPS_TAR_TRACE = 5, // 目标跟踪
- PAYLOAD_DIAOCANG_OPS_ZOOM = 6, // 变焦
- PAYLOAD_DIAOCANG_OPS_SENSOR_SWITCH = 7, // 光学传感器切换
- PAYLOAD_DIAOCANG_OPS_TAKE_PHOTO = 8, // 拍照
- PAYLOAD_DIAOCANG_OPS_TAKE_VEDIO = 9, // 录制
- PAYLOAD_DIAOCANG_OPS_LASER_MEASURE = 10, // 激光测距
- PAYLOAD_DIAOCANG_OPS_MOVE = 11, // 向上下左右运动
- PAYLOAD_DIAOCANG_OPS_TOUCH_MOVE = 12, // 指点移动
- PAYLOAD_DIAOCANG_OPS_FOLLOW = 13, // 跟随模式
- PAYLOAD_DIAOCANG_OPS_LOCK = 14, // 锁定模式
- PAYLOAD_DIAOCANG_OPS_FOCUS = 15, // 聚焦目标
- PAYLOAD_DIAOCANG_OPS_OSD_SET = 16, // OSD 设置
- PAYLOAD_DIAOCANG_OPS_TTRANS = 200, // 指令透传
- };
- // 吊舱操作运动方向
- enum
- {
- PAYLOAD_MOVE_STOP = 0,
- PAYLOAD_MOVE_UP = 1,
- PAYLOAD_MOVE_DOWN = 2,
- PAYLOAD_MOVE_LEFT = 3,
- PAYLOAD_MOVE_RIGHT = 4,
- };
- // 吊舱变焦操作
- enum
- {
- PAYLOAD_ZOOM_STOP = 0,
- PAYLOAD_ZOOM_OUT = 1,
- PAYLOAD_ZOOM_IN = 2
- };
- // 吊舱跟踪操作
- enum
- {
- PAYLOAD_TRACE_STOP = 0,
- PAYLOAD_TRACE_START = 1,
- };
- struct payload_status
- {
- float laser_dist_m;
- float roll; /*deg*/
- float pitch;
- float yaw;
- uint8_t zoom;
- uint8_t trace_flag;
- int tar_lon; /* 跟踪使用的目标位置 */
- int tar_lat;
- int tar_alt;
- int tar_lon_loc; /* 根据激光测距计算的目标位置 */
- int tar_lat_loc;
- int tar_alt_loc;
- float y_axis[3]; /* 光轴空间向量 */
- };
- struct payload_diaocang;
- struct payload_ops
- {
- void (*_tx_poll)(uint32_t time_us, uint32_t *last_tx_time_us,
- uint32_t (*send_data)(const uint8_t *pdata, uint32_t len));
- /* 回中 */
- void (*_return_to_mid)(uint32_t (*send_data)(const uint8_t *pdata, uint32_t len));
- /* 设置俯仰 */
- void (*_set_pitch)(float pitch_ang, uint32_t (*send_data)(const uint8_t *pdata, uint32_t len));
- /* 设置航向 */
- void (*_set_yaw)(float yaw_ang, uint32_t (*send_data)(const uint8_t *pdata, uint32_t len));
- /* 拍照 */
- void (*_take_photo)(uint32_t (*send_data)(const uint8_t *pdata, uint32_t len));
- /* 录像 */
- void (*_take_vedio)(int on_off, uint32_t (*send_data)(const uint8_t *pdata, uint32_t len));
- /* 激光测距 */
- void (*_laser_dist)(uint32_t (*send_data)(const uint8_t *pdata, uint32_t len));
- /* 下视 */
- void (*_look_downward)(uint32_t (*send_data)(const uint8_t *pdata, uint32_t len));
- /* 跟随模式 */
- void (*_follow_mode)(uint32_t (*send_data)(const uint8_t *pdata, uint32_t len));
- /* 锁定模式 */
- void (*_lock_mode)(uint32_t (*send_data)(const uint8_t *pdata, uint32_t len));
- /* 运动 */
- void (*_move)(int direction, float rate,
- uint32_t (*send_data)(const uint8_t *pdata, uint32_t len));
- /* 指点移动 */
- void (*_touch_move)(float px, float py, uint32_t (*send_data)(const uint8_t *pdata, uint32_t len));
- /* 缩放 */
- void (*_zoom)(int direction, float rate,
- uint32_t (*send_data)(const uint8_t *pdata, uint32_t len));
- /* 光学传感器切换 */
- void (*_sensor_switch)(uint32_t (*send_data)(const uint8_t *pdata, uint32_t len), uint16_t sensor_type);
- /* 目标追踪 */
- void (*_trace)(int trace_act, float p1x, float p1y, float p2x, float p2y,
- uint32_t (*send_data)(const uint8_t *pdata, uint32_t len));
- /* 目标位置聚焦 */
- void (*_focus)(int focus_lon, int focus_lat, int focus_alt,
- uint32_t (*_send_data)(const uint8_t *pdata, uint32_t len));
- uint32_t (*_send_data)(const uint8_t *pdata, uint32_t len);
- int (*_rx_cbk)(uint8_t ch, struct payload_diaocang *status);
- };
- struct payload_diaocang
- {
- enum payload_type _type;
- struct payload_status _status;
- struct payload_ops _ops;
- uint32_t _last_tx_time;
- comp_status _link_status;
- uint32_t _link_lost_count;
- uint32_t _link_check_time;
- float _diste_filter_buffer[PAYLOAD_SZHT_FILTER_BUFF_LEN];
- float _distn_filter_buffer[PAYLOAD_SZHT_FILTER_BUFF_LEN];
- int _filter_in_index;
- };
- void payload_ctl_received(uint8_t ctl_ops_id, const void *param, uint32_t param_len,
- struct payload_diaocang *payload);
- void payload_tx_poll(uint32_t tiem_us, struct payload_diaocang *payload);
- int payload_rx_cbk(uint8_t ch, struct payload_diaocang *payload);
- void payload_check_linkstatu_poll(uint32_t time_now_us,
- struct payload_diaocang *payload);
- void payload_targte_locate(struct payload_diaocang *payload, uint8_t gimbal_euler_type);
|