god-yuan-hero/User/module/cmd.h

223 lines
5.4 KiB
C

/*
控制命令
*/
#pragma once
#ifdef __cplusplus
extern "C" {
#endif
#include "module/chassis.h"
#include "module/gimbal.h"
#include "module/shoot.h"
/* Exported constants ------------------------------------------------------- */
#define CMD_OK (0) /* 运行正常 */
#define CMD_ERR_NULL (-1) /* 运行时发现NULL指针 */
#define CMD_ERR_ERR (-2) /* 运行时发现了其他错误 */
#define CMD_ERR_MODE (-3) /* 运行时配置了错误的Mode */
#define CMD_ERR_MOTOR (-4) /* 运行时配置了不存在的电机类型 */
#define CMD_ERR_MALLOC (-5) /* 内存分配失败 */
/* Exported macro ----------------------------------------------------------- */
/* Exported types ----------------------------------------------------------- */
typedef union rc_inputdata_u rc_inputdata_u;
#define CMD_REFEREE_MAX_NUM (3) /* 发送命令限定的最大数量 */
/* 输入源枚举 */
typedef enum {
CMD_SRC_RC=0, /* 遥控器 */
CMD_SRC_PC, /* 键盘鼠标 */
CMD_SRC_NUC, /* 上位机 */
CMD_SRC_REFEREE, /* 裁判系统 */
CMD_SRC_NUM,
CMD_SRC_ERR
} CMD_InputSource_t;
typedef enum {
CMD_MODULE_CHASSIS=0,
CMD_MODULE_GIMBAL,
CMD_MODULE_SHOOT,
CMD_MODULE_NUM /* 模块数量 */
} CMD_MODULE_t;
/* RC part begin-------------------------------------- */
typedef struct {
bool online;
enum {DR16, AT9S} type;
rc_inputdata_u *inputData;
} CMD_InputData_RC_t;
/* RC part end---------------------------------------- */
/* PC part begin-------------------------------------- */
/* 键盘按键值 */
typedef enum {
CMD_KEY_W = 0,
CMD_KEY_S,
CMD_KEY_A,
CMD_KEY_D,
CMD_KEY_SHIFT,
CMD_KEY_CTRL,
CMD_KEY_Q,
CMD_KEY_E,
CMD_KEY_R,
CMD_KEY_F,
CMD_KEY_G,
CMD_KEY_Z,
CMD_KEY_X,
CMD_KEY_C,
CMD_KEY_V,
CMD_KEY_B,
CMD_L_CLICK,
CMD_R_CLICK,
CMD_KEY_NUM,
} CMD_KeyValue_t;
typedef enum {
CMD_ACTIVE_RISING_EDGE, /* 按下时触发 */
CMD_ACTIVE_FALLING_EDGE, /* 抬起时触发 */
CMD_ACTIVE_PRESSED, /* 按住时触发 */
} CMD_TriggerType_t;
/* 行为值序列 */
typedef enum {
CMD_BEHAVIOR_FORE = 0, /* 向前 */
CMD_BEHAVIOR_BACK, /* 向后 */
CMD_BEHAVIOR_LEFT, /* 向左 */
CMD_BEHAVIOR_RIGHT, /* 向右 */
CMD_BEHAVIOR_ACCELERATE, /* 加速 */
CMD_BEHAVIOR_DECELEBRATE, /* 减速 */
CMD_BEHAVIOR_FIRE, /* 开火 */
CMD_BEHAVIOR_FIRE_MODE, /* 切换开火模式 */
CMD_BEHAVIOR_BUFF, /* 打符模式 */
CMD_BEHAVIOR_AUTOAIM, /* 自瞄模式 */
CMD_BEHAVIOR_OPENCOVER, /* 弹舱盖开关 */
CMD_BEHAVIOR_ROTOR, /* 小陀螺模式 */
CMD_BEHAVIOR_REVTRIG, /* 反转拨弹 */
CMD_BEHAVIOR_FOLLOWGIMBAL35, /* 跟随云台呈35度 */
CMD_BEHAVIOR_NUM,
} CMD_Behavior_t;
typedef struct {
CMD_KeyValue_t key;
CMD_TriggerType_t trigger_type;
} CMD_KeyMapItem_t;
/* 行为映射的对应按键数组 */
typedef struct {
CMD_KeyMapItem_t key_map[CMD_BEHAVIOR_NUM];
} CMD_KeyMap_Params_t;
typedef struct {
float sens_mouse; /* 鼠标灵敏度 */
float move_sense; /* 移动灵敏度 */
float move_fast_sense; /* 快速移动灵敏度 */
float move_slow_sense; /* 慢速移动灵敏度 */
} CMD_PC_Sensitivity_t;
typedef struct {
struct {
int16_t x;
int16_t y;
int16_t z;
bool l_click; /* 左键 */
bool r_click; /* 右键 */
} mouse; /* 鼠标值 */
uint16_t key; /* 按键值 */
uint16_t res; /* 保留,未启用 */
} CMD_PC_Data_t;
typedef struct {
struct {
bool l_click; /* 左键 */
bool r_click; /* 右键 */
} mouse; /* 鼠标值 */
uint16_t key; /* 按键值 */
} CMD_PC_LastData_t;
typedef struct {
bool online;
CMD_PC_Data_t data;
CMD_PC_LastData_t lastData;
}CMD_InputData_PC_t;
typedef struct {
CMD_KeyMap_Params_t map; /* 按键映射行为命令 */
CMD_PC_Sensitivity_t sensitivity; /* PC灵敏度设置 */
}CMD_PCParams_t;
/* PC part end---------------------------------------- */
/* NUC part begin------------------------------------- */
typedef struct {
bool online;
}CMD_InputData_NUC_t;
/* NUC part end--------------------------------------- */
/* REF part begin------------------------------------- */
typedef struct {
bool online;
CMD_PC_Data_t data;
}CMD_InputData_REF_t;
/* REF part begin------------------------------------- */
/* 底盘控制命令 */
typedef struct {
CMD_InputSource_t source;
Chassis_CMD_t cmd;
} CMD_OutputCmd_CHASSIS_t;
/* 云台控制命令 */
typedef struct {
CMD_InputSource_t source;
Gimbal_CMD_t cmd;
} CMD_OutputCmd_GIMBAL_t;
/* 射击控制命令 */
typedef struct {
CMD_InputSource_t source;
Shoot_CMD_t cmd;
} CMD_OutputCmd_SHOOT_t;
typedef struct {
CMD_InputData_RC_t rc;
CMD_InputData_PC_t pc;
CMD_InputData_NUC_t nuc;
CMD_InputData_REF_t ref;
} CMD_InputData_t;
typedef struct {
CMD_OutputCmd_CHASSIS_t chassis;
CMD_OutputCmd_GIMBAL_t gimbal;
CMD_OutputCmd_SHOOT_t shoot;
} CMD_OutputCmd_t;
typedef struct {
CMD_InputSource_t source;
uint8_t priority;
} CMD_SourcePriorityConfig_t;
typedef struct {
CMD_SourcePriorityConfig_t sourcePriorityConfigs[CMD_SRC_NUM];/* 输入源优先级配置 */
CMD_PCParams_t pc;
} CMD_Param_t;
typedef struct {
CMD_Param_t params;
CMD_InputData_t inputData;
CMD_OutputCmd_t outCmd;
} CMD_t;
/* Exported functions prototypes -------------------------------------------- */
#ifdef __cplusplus
}
#endif