237 lines
6.3 KiB
C
237 lines
6.3 KiB
C
/*
|
||
控制命令
|
||
*/
|
||
#pragma once
|
||
|
||
#include <stdint.h>
|
||
#ifdef __cplusplus
|
||
extern "C" {
|
||
#endif
|
||
/* Includes ----------------------------------------------------------------- */
|
||
#include "module/chassis.h"
|
||
#include "module/gimbal.h"
|
||
#include "module/shoot.h"
|
||
#if CMD_RCTypeTable_Index == 0
|
||
#include "device/dr16.h"
|
||
#elif CMD_RCTypeTable_Index == 1
|
||
#include "device/at9s_pro.h"
|
||
#elif CMD_RCTypeTable_Index == 2
|
||
#include "device/vt13.h"
|
||
#endif
|
||
|
||
/* Exported constants ------------------------------------------------------- */
|
||
#define CMD_OK (0) /* 运行正常 */
|
||
#define CMD_ERR_NULL (-1) /* 运行时发现NULL指针 */
|
||
#define CMD_ERR_ERR (-2) /* 运行时发现了其他错误 */
|
||
#define CMD_ERR_SOURCE (-3) /* 运行时配置了不存在的输入源 */
|
||
|
||
/* Exported macro ----------------------------------------------------------- */
|
||
#define CMD_RCTypeTable_Index 0 /* 0:DR16 1:AT9S 2:VT13 */
|
||
|
||
#if CMD_RCTypeTable_Index == 0
|
||
#define CMD_RCType_TABLE(X) X(dr16, DR16)
|
||
#elif CMD_RCTypeTable_Index == 1
|
||
#define CMD_RCType_TABLE(X) X(at9s, AT9S)
|
||
#elif CMD_RCTypeTable_Index == 2
|
||
#define CMD_RCType_TABLE(X) X(vt13, VT13)
|
||
#endif
|
||
|
||
#if CMD_RCTypeTable_Index == 1
|
||
#define CMD_NOPC_FLAG
|
||
#endif
|
||
#define CMDMACRO_NAME_EXPANSION(name, NAME) NAME##_t name
|
||
#define CMDMACRO_VAR_RCDATA(name, NAME) NAME##_DataRC_t name;
|
||
#define CMDMACRO_VAR_PCDATA(name, NAME) NAME##_DataPC_t name;
|
||
#define CMDMACRO_VAR_LASTPCDATA(name, NAME) NAME##_DataPC_t last##name;
|
||
/* Exported types ----------------------------------------------------------- */
|
||
#define CMD_REFEREE_MAX_NUM (3) /* 发送命令限定的最大数量 */
|
||
/* 输入源枚举 */
|
||
typedef enum {
|
||
CMD_SRC_RC=0, /* 遥控器 */
|
||
CMD_SRC_PC, /* 键盘鼠标 */
|
||
CMD_SRC_NUC, /* 上位机 */
|
||
CMD_SRC_REF, /* 裁判系统 */
|
||
CMD_SRC_NUM
|
||
} CMD_InputSource_t;
|
||
|
||
/* RC part begin-------------------------------------- */
|
||
|
||
typedef struct {
|
||
bool online;
|
||
enum {DR16=0, AT9S} type;
|
||
CMD_RCType_TABLE(CMDMACRO_VAR_RCDATA)
|
||
#undef CMDMACRO_VAR_RCDATA
|
||
} CMD_Input_RC_t;//或者这里直接把CMD_Input_RC_t前向声明了,看哪个好看
|
||
|
||
/* RC part end---------------------------------------- */
|
||
|
||
/* PC part begin-------------------------------------- */
|
||
typedef enum {
|
||
CMD_MODULE_NONE = 0,
|
||
CMD_MODULE_CHASSIS = (1 << 0),
|
||
CMD_MODULE_GIMBAL = (1 << 1),
|
||
CMD_MODULE_SHOOT = (1 << 2),
|
||
CMD_MODULE_ALL = (CMD_MODULE_CHASSIS | CMD_MODULE_GIMBAL | CMD_MODULE_SHOOT)
|
||
} CMD_ModuleMask_t;
|
||
/* 键盘按键值 */
|
||
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_M_CLICK,
|
||
CMD_KEY_NUM,
|
||
} CMD_PCValue_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_GIMBAL_MODE, /* 切换云台模式 */
|
||
CMD_BEHAVIOR_NUM,
|
||
} CMD_Behavior_t;
|
||
typedef struct {
|
||
CMD_PCValue_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 {
|
||
CMD_KeyMap_Params_t map; /* 按键映射行为命令 */
|
||
CMD_PC_Sensitivity_t sensitivity; /* PC灵敏度设置 */
|
||
}CMD_PCParams_t;
|
||
#ifndef CMD_NOPC_FLAG
|
||
typedef struct {
|
||
bool online;
|
||
CMD_RCType_TABLE(CMDMACRO_VAR_PCDATA)
|
||
CMD_RCType_TABLE(CMDMACRO_VAR_LASTPCDATA)
|
||
#undef CMDMACRO_VAR_PCDATA
|
||
#undef CMDMACRO_VAR_LASTPCDATA
|
||
}CMD_Input_PC_t;
|
||
#else
|
||
typedef struct {
|
||
bool online;
|
||
}CMD_Input_PC_t;
|
||
#endif
|
||
/* PC part end---------------------------------------- */
|
||
|
||
/* NUC part begin------------------------------------- */
|
||
typedef struct {
|
||
bool online;
|
||
struct {
|
||
float delta_yaw;
|
||
float delta_pit;
|
||
}gimbal;
|
||
struct {
|
||
float expectedSpeed;
|
||
bool fire;
|
||
}shoot;
|
||
}CMD_Input_NUC_t;
|
||
|
||
/* NUC part end--------------------------------------- */
|
||
|
||
/* REF part begin------------------------------------- */
|
||
typedef struct {
|
||
bool online;
|
||
}CMD_Input_REF_t;
|
||
|
||
/* REF part begin------------------------------------- */
|
||
|
||
/* 底盘控制命令 */
|
||
typedef struct {
|
||
CMD_InputSource_t source;
|
||
Chassis_CMD_t cmd;
|
||
} CMD_Output_CHASSIS_t;
|
||
|
||
/* 云台控制命令 */
|
||
typedef struct {
|
||
CMD_InputSource_t source;
|
||
Gimbal_CMD_t cmd;
|
||
} CMD_Output_GIMBAL_t;
|
||
|
||
/* 射击控制命令 */
|
||
typedef struct {
|
||
CMD_InputSource_t source;
|
||
Shoot_CMD_t cmd;
|
||
} CMD_Output_SHOOT_t;
|
||
|
||
typedef struct {
|
||
CMD_Input_RC_t rc;
|
||
CMD_Input_PC_t pc;
|
||
CMD_Input_NUC_t nuc;
|
||
CMD_Input_REF_t ref;
|
||
} CMD_Input_t;
|
||
typedef struct {
|
||
CMD_Output_CHASSIS_t chassis;
|
||
CMD_Output_GIMBAL_t gimbal;
|
||
CMD_Output_SHOOT_t shoot;
|
||
} CMD_Output_t;
|
||
|
||
typedef struct {
|
||
CMD_InputSource_t sourcePriorityConfigs[CMD_SRC_NUM];/* 输入源优先级配置 */
|
||
CMD_PCParams_t pc;
|
||
} CMD_Params_t;
|
||
|
||
typedef struct {
|
||
float now;
|
||
float dt;
|
||
uint64_t last;
|
||
} CMD_Timer_t;
|
||
typedef struct {
|
||
CMD_Timer_t timer;
|
||
CMD_Params_t *params;
|
||
|
||
CMD_Input_t input;
|
||
CMD_Output_t output;
|
||
} CMD_t;
|
||
|
||
/* Exported functions prototypes -------------------------------------------- */
|
||
int8_t Cmd_Init(CMD_t *c, CMD_Params_t *params);
|
||
int8_t Cmd_Get(CMD_t *c, CMD_RCType_TABLE(CMDMACRO_NAME_EXPANSION));
|
||
int8_t Cmd_GenerateCommand(CMD_t *c);
|
||
#ifdef __cplusplus
|
||
}
|
||
#endif
|