diff --git a/User/module/cmd.c b/User/module/cmd.c index 58318ef..49bd8e2 100644 --- a/User/module/cmd.c +++ b/User/module/cmd.c @@ -16,19 +16,19 @@ /* Private variables -------------------------------------------------------- */ /* Private function -------------------------------------------------------- */ -bool isREFOnline(CMD_t *c){return c->input_ref.online;} -bool isNUCOnline(CMD_t *c){return c->input_nuc.online;} -bool isRCOnline(CMD_t *c){return c->input_rc.online;} -bool isPCOnline(CMD_t *c){return c->input_pc.online;} +bool isREFOnline(CMD_t *c){return c->inputData.ref.online;} +bool isNUCOnline(CMD_t *c){return c->inputData.nuc.online;} +bool isRCOnline(CMD_t *c){return c->inputData.rc.online;} +bool isPCOnline(CMD_t *c){return c->inputData.pc.online;} void PriorityConfigsRanking(CMD_Param_t *param) { static bool init=false; if(init) return; for (int i = 0; i < CMD_SRC_NUM - 1; i++) { for (int j = 0; j < CMD_SRC_NUM - i - 1; j++) { - if (param->rcSourcePriorityConfigs[j].priority < param->rcSourcePriorityConfigs[j + 1].priority) { - CMD_RCSourcePriorityConfig_t temp = param->rcSourcePriorityConfigs[j]; - param->rcSourcePriorityConfigs[j] = param->rcSourcePriorityConfigs[j + 1]; - param->rcSourcePriorityConfigs[j + 1] = temp; + if (param->sourcePriorityConfigs[j].priority < param->sourcePriorityConfigs[j + 1].priority) { + CMD_SourcePriorityConfig_t temp = param->sourcePriorityConfigs[j]; + param->sourcePriorityConfigs[j] = param->sourcePriorityConfigs[j + 1]; + param->sourcePriorityConfigs[j + 1] = temp; } } } @@ -36,7 +36,7 @@ void PriorityConfigsRanking(CMD_Param_t *param) { } CMD_InputSource_t getHighestPrioritySource(CMD_t *c) { for (int i = 0; i < CMD_SRC_NUM; i++) { - CMD_InputSource_t source = c->params.rcSourcePriorityConfigs[i].source; + CMD_InputSource_t source = c->params.sourcePriorityConfigs[i].source; switch (source) { case CMD_SRC_REFEREE: if (isREFOnline(c)) { @@ -59,7 +59,7 @@ CMD_InputSource_t getHighestPrioritySource(CMD_t *c) { } } } - return CMD_SRC_PC; /*默认使用键盘鼠标*/ + return CMD_SRC_ERR; } int8_t Cmd_Arbiter(CMD_t *c) { @@ -71,9 +71,9 @@ int8_t Cmd_Arbiter(CMD_t *c) { CMD_InputSource_t source = getHighestPrioritySource(c); - c->out_chassis.source = source; - c->out_gimbal.source = source; - c->out_shoot.source = source; + c->outCmd.chassis.source = source; + c->outCmd.gimbal.source = source; + c->outCmd.shoot.source = source; return CMD_OK; } @@ -89,9 +89,9 @@ int8_t Cmd_Arbiter(CMD_t *c) { #define RC_SELECT_Index 1 /* 扩展接口 */ #if RC_SELECT_Index == 0 -#define FOR_EACH_RC(_) _(dr16, DR16) +#define FOR_EACH_RC(X) X(dr16, DR16) #elif RC_SELECT_Index == 1 -#define FOR_EACH_RC(_) _(at9s, AT9S) +#define FOR_EACH_RC(X) X(at9s, AT9S) #endif /* Includes ----------------------------------------------------------------- */ #if RC_SELECT_Index == 0 @@ -132,23 +132,23 @@ int8_t Cmd_BuildChassisCommandFromInput_rc(CMD_t *c) { #if RC_SELECT_Index == 0 c->input_rc.inputData->dr16.data = #elif RC_SELECT_Index == 1 - switch (c->input_rc.inputData->at9s.data.key_E) { + switch (c->inputData.rc.inputData->at9s.data.key_E) { case AT9S_CMD_SW_DOWN: - c->out_chassis.cmd.mode = CHASSIS_MODE_RELAX; + c->outCmd.chassis.cmd.mode = CHASSIS_MODE_RELAX; break; case AT9S_CMD_SW_MID: - c->out_chassis.cmd.mode = CHASSIS_MODE_FOLLOW_GIMBAL; + c->outCmd.chassis.cmd.mode = CHASSIS_MODE_FOLLOW_GIMBAL; break; case AT9S_CMD_SW_UP: - c->out_chassis.cmd.mode = CHASSIS_MODE_ROTOR; + c->outCmd.chassis.cmd.mode = CHASSIS_MODE_ROTOR; break; default: - c->out_chassis.cmd.mode = CHASSIS_MODE_RELAX; + c->outCmd.chassis.cmd.mode = CHASSIS_MODE_RELAX; break; } - c->out_chassis.cmd.ctrl_vec.vx = c->input_rc.inputData->at9s.data.ch_l_y; - c->out_chassis.cmd.ctrl_vec.vy = c->input_rc.inputData->at9s.data.ch_l_x; - c->out_chassis.cmd.ctrl_vec.wz = c->input_rc.inputData->at9s.data.ch_r_x; + c->outCmd.chassis.cmd.ctrl_vec.vx = c->inputData.rc.inputData->at9s.data.ch_l_y; + c->outCmd.chassis.cmd.ctrl_vec.vy = c->inputData.rc.inputData->at9s.data.ch_l_x; + c->outCmd.chassis.cmd.ctrl_vec.wz = c->inputData.rc.inputData->at9s.data.ch_r_x; #endif return CMD_OK; } @@ -160,26 +160,26 @@ int8_t Cmd_BuildGimbalCommandFromInput_rc(CMD_t *c) { #if RC_SELECT_Index == 0 c->input_rc.inputData->dr16.data = #elif RC_SELECT_Index == 1 - switch (c->input_rc.inputData->at9s.data.key_G) { + switch (c->inputData.rc.inputData->at9s.data.key_G) { case AT9S_CMD_SW_DOWN: - c->out_gimbal.cmd.mode = GIMBAL_MODE_RELAX; - c->out_gimbal.cmd.delta_yaw = 0.0f; - c->out_gimbal.cmd.delta_pit = 0.0f; + c->outCmd.gimbal.cmd.mode = GIMBAL_MODE_RELAX; + c->outCmd.gimbal.cmd.delta_yaw = 0.0f; + c->outCmd.gimbal.cmd.delta_pit = 0.0f; break; case AT9S_CMD_SW_MID: - c->out_gimbal.cmd.mode = GIMBAL_MODE_ABSOLUTE; - c->out_gimbal.cmd.delta_yaw = -at9s_out.data.ch_l_x * 2.0f; - c->out_gimbal.cmd.delta_pit = -at9s_out.data.ch_l_y * 1.5f; + c->outCmd.gimbal.cmd.mode = GIMBAL_MODE_ABSOLUTE; + c->outCmd.gimbal.cmd.delta_yaw = -at9s_out.data.ch_l_x * 2.0f; + c->outCmd.gimbal.cmd.delta_pit = -at9s_out.data.ch_l_y * 1.5f; break; case AT9S_CMD_SW_UP: - c->out_gimbal.cmd.mode = GIMBAL_MODE_ABSOLUTE; - c->out_gimbal.cmd.delta_yaw = -at9s_out.data.ch_l_x * 2.0f; - c->out_gimbal.cmd.delta_pit = -at9s_out.data.ch_l_y * 1.5f; + c->outCmd.gimbal.cmd.mode = GIMBAL_MODE_ABSOLUTE; + c->outCmd.gimbal.cmd.delta_yaw = -at9s_out.data.ch_l_x * 2.0f; + c->outCmd.gimbal.cmd.delta_pit = -at9s_out.data.ch_l_y * 1.5f; break; default: - c->out_gimbal.cmd.mode = GIMBAL_MODE_RELAX; - c->out_gimbal.cmd.delta_yaw = 0.0f; - c->out_gimbal.cmd.delta_pit = 0.0f; + c->outCmd.gimbal.cmd.mode = GIMBAL_MODE_RELAX; + c->outCmd.gimbal.cmd.delta_yaw = 0.0f; + c->outCmd.gimbal.cmd.delta_pit = 0.0f; break; } #endif @@ -194,26 +194,26 @@ int8_t Cmd_BuildShootCommandFromInput_rc(CMD_t *c) { #if RC_SELECT_Index == 0 c->input_rc.inputData->dr16.data = #elif RC_SELECT_Index == 1 - switch (c->input_rc.inputData->at9s.data.key_C) { + switch (c->inputData.rc.inputData->at9s.data.key_C) { case AT9S_CMD_SW_DOWN: - c->out_shoot.cmd.online = at9s_out.online; - c->out_shoot.cmd.ready = true; - c->out_shoot.cmd.firecmd = true; + c->outCmd.shoot.cmd.online = at9s_out.online; + c->outCmd.shoot.cmd.ready = true; + c->outCmd.shoot.cmd.firecmd = true; break; case AT9S_CMD_SW_MID: - c->out_shoot.cmd.online = at9s_out.online; - c->out_shoot.cmd.ready = true; - c->out_shoot.cmd.firecmd = false; + c->outCmd.shoot.cmd.online = at9s_out.online; + c->outCmd.shoot.cmd.ready = true; + c->outCmd.shoot.cmd.firecmd = false; break; case AT9S_CMD_SW_UP: - c->out_shoot.cmd.online = at9s_out.online; - c->out_shoot.cmd.ready = false; - c->out_shoot.cmd.firecmd = false; + c->outCmd.shoot.cmd.online = at9s_out.online; + c->outCmd.shoot.cmd.ready = false; + c->outCmd.shoot.cmd.firecmd = false; break; default: - c->out_shoot.cmd.online = at9s_out.online; - c->out_shoot.cmd.ready = false; - c->out_shoot.cmd.firecmd = false; + c->outCmd.shoot.cmd.online = at9s_out.online; + c->outCmd.shoot.cmd.ready = false; + c->outCmd.shoot.cmd.firecmd = false; break; } #endif @@ -228,20 +228,189 @@ int8_t Cmd_BuildShootCommandFromInput_rc(CMD_t *c) { /* Includes ----------------------------------------------------------------- */ /* Private typedef ---------------------------------------------------------- */ +typedef int8_t (*CMD_BehaviorFunc)(CMD_t *c); +typedef struct { + CMD_Behavior_t behavior; + CMD_BehaviorFunc func; +} CMD_BehaviorHandlerFunc_t; + /* Private define ----------------------------------------------------------- */ /* Private macro ------------------------------------------------------------ */ +#define PC_MACRO_BEHAVIOR_TABLE(X) \ + X(FORE) \ + X(BACK) \ + X(LEFT) \ + X(RIGHT) \ + X(ACCELERATE) \ + X(DECELEBRATE) \ + X(FIRE) \ + X(FIRE_MODE) \ + X(BUFF) \ + X(AUTOAIM) \ + X(OPENCOVER) \ + X(ROTOR) \ + X(REVTRIG) \ + X(FOLLOWGIMBAL35) +#define PC_MACRO_FOR_DECLARE_HANDLER_FUNCTION(BEHAVIOR) \ + static int8_t Cmd_PC_HandleBehavior##BEHAVIOR(CMD_t *c); + +#define PC_MACRO_FOR_BUILD_BEHAVIOR_HANDLER_ARRAY(BEHAVIOR) \ + {CMD_BEHAVIOR_##BEHAVIOR, Cmd_PC_HandleBehavior##BEHAVIOR}, + +PC_MACRO_BEHAVIOR_TABLE(PC_MACRO_FOR_DECLARE_HANDLER_FUNCTION) /* Private variables -------------------------------------------------------- */ +CMD_BehaviorHandlerFunc_t behaviorHandlerFunc[] = { + PC_MACRO_BEHAVIOR_TABLE(PC_MACRO_FOR_BUILD_BEHAVIOR_HANDLER_ARRAY) +}; /* Private function -------------------------------------------------------- */ -int8_t Cmd_Get_pc(CMD_InputData_PC_t *pc) -{ - FOR_EACH_RC(RC_X_COPYREFERENCE_MACRO)(&rc_buffer); - rc->inputData = &rc_buffer; - rc->type = RC_SELECT_Index; +static int8_t Cmd_PC_HandleBehaviorFORE(CMD_t *c){ + c->outCmd.chassis.cmd.ctrl_vec.vy += c->params.pc.sensitivity.move_sense; return CMD_OK; } +static int8_t Cmd_PC_HandleBehaviorBACK(CMD_t *c){ + c->outCmd.chassis.cmd.ctrl_vec.vy -= c->params.pc.sensitivity.move_sense; + return CMD_OK; +} +static int8_t Cmd_PC_HandleBehaviorLEFT(CMD_t *c){ + c->outCmd.chassis.cmd.ctrl_vec.vx -= c->params.pc.sensitivity.move_sense; + return CMD_OK; +} +static int8_t Cmd_PC_HandleBehaviorRIGHT(CMD_t *c){ + c->outCmd.chassis.cmd.ctrl_vec.vx += c->params.pc.sensitivity.move_sense; + return CMD_OK; +} +static int8_t Cmd_PC_HandleBehaviorACCELERATE(CMD_t *c){ + c->outCmd.chassis.cmd.ctrl_vec.vx *= c->params.pc.sensitivity.move_fast_sense; + c->outCmd.chassis.cmd.ctrl_vec.vy *= c->params.pc.sensitivity.move_fast_sense; + return CMD_OK; +} +static int8_t Cmd_PC_HandleBehaviorDECELEBRATE(CMD_t *c){ + c->outCmd.chassis.cmd.ctrl_vec.vx *= c->params.pc.sensitivity.move_slow_sense; + c->outCmd.chassis.cmd.ctrl_vec.vy *= c->params.pc.sensitivity.move_slow_sense; + return CMD_OK; +} +static int8_t Cmd_PC_HandleBehaviorFIRE(CMD_t *c){ + c->outCmd.shoot.cmd.firecmd = true; + return CMD_OK; +} +static int8_t Cmd_PC_HandleBehaviorFIRE_MODE(CMD_t *c){ + c->outCmd.shoot.cmd.mode++; + c->outCmd.shoot.cmd.mode %= SHOOT_MODE_NUM; + return CMD_OK; +} +static int8_t Cmd_PC_HandleBehaviorBUFF(CMD_t *c){ +// if (cmd->ai_status == AI_STATUS_HITSWITCH) { +// CMD_RefereeAdd(&(cmd->referee), CMD_UI_HIT_SWITCH_STOP); +// cmd->host_overwrite = false; +// cmd->ai_status = AI_STATUS_STOP; +// } else if (cmd->ai_status == AI_STATUS_AUTOAIM) { +// // 自瞄模式中切换失败提醒 +// } else { +// CMD_RefereeAdd(&(cmd->referee), CMD_UI_HIT_SWITCH_START); +// cmd->ai_status = AI_STATUS_HITSWITCH; +// cmd->host_overwrite = true; +// } + return CMD_OK; +} +static int8_t Cmd_PC_HandleBehaviorAUTOAIM(CMD_t *c){ +// if (cmd->ai_status == AI_STATUS_AUTOAIM) { +// cmd->host_overwrite = false; +// cmd->ai_status = AI_STATUS_STOP; +// CMD_RefereeAdd(&(cmd->referee), CMD_UI_AUTO_AIM_STOP); +// } else { +// cmd->ai_status = AI_STATUS_AUTOAIM; +// cmd->host_overwrite = true; +// CMD_RefereeAdd(&(cmd->referee), CMD_UI_AUTO_AIM_START); +// } + return CMD_OK; +} +static int8_t Cmd_PC_HandleBehaviorOPENCOVER(CMD_t *c){ +// c->shoot.cover_open = !c->shoot.cover_open; + return CMD_OK; +} +static int8_t Cmd_PC_HandleBehaviorROTOR(CMD_t *c){ + c->outCmd.chassis.cmd.mode = CHASSIS_MODE_ROTOR; + c->outCmd.chassis.cmd.mode_rotor = ROTOR_MODE_RAND; + return CMD_OK; +} +static int8_t Cmd_PC_HandleBehaviorREVTRIG(CMD_t *c){ +// c->outCmd.shoot.cmd.reverse_trig = true; + return CMD_OK; +} +static int8_t Cmd_PC_HandleBehaviorFOLLOWGIMBAL35(CMD_t *c){ + c->outCmd.chassis.cmd.mode = CHASSIS_MODE_FOLLOW_GIMBAL_35; + return CMD_OK; +} + +static inline CMD_KeyValue_t CMD_BehaviorToKey(CMD_t *c, + CMD_Behavior_t behavior) { + return c->params.pc.map.key_map[behavior].key; +} + +static inline CMD_TriggerType_t CMD_BehaviorToActive(CMD_t *c, + CMD_Behavior_t behavior) { + return c->params.pc.map.key_map[behavior].trigger_type; +} + +int8_t Cmd_Get_pc(CMD_InputData_PC_t *pc) +{ + pc->online = false; +// pc->data= + return CMD_OK; +} + +static bool CMD_BehaviorOccurredRc(CMD_t *c, CMD_Behavior_t behavior) { + CMD_KeyValue_t key = CMD_BehaviorToKey(c, behavior); + CMD_TriggerType_t active = CMD_BehaviorToActive(c, behavior); + + bool now_key_pressed, last_key_pressed; + + /* 按下按键为鼠标左、右键 */ + if (key == CMD_L_CLICK) { + now_key_pressed = c->inputData.pc.data.mouse.l_click; + last_key_pressed = c->inputData.pc.lastData.mouse.l_click; + } else if (key == CMD_R_CLICK) { + now_key_pressed = c->inputData.pc.data.mouse.r_click; + last_key_pressed = c->inputData.pc.lastData.mouse.r_click; + } else { + now_key_pressed = c->inputData.pc.data.key & (1u << key); + last_key_pressed = c->inputData.pc.lastData.key & (1u << key); + } + + switch (active) { + case CMD_ACTIVE_RISING_EDGE: + return !now_key_pressed && last_key_pressed; + case CMD_ACTIVE_FALLING_EDGE: + return now_key_pressed && !last_key_pressed; + case CMD_ACTIVE_PRESSED: + return now_key_pressed; + } +} + /* Exported functions ------------------------------------------------------- */ + +static void CMD_PcLogic(CMD_t *c, float dt_sec) { + c->outCmd.gimbal.cmd.mode = GIMBAL_MODE_ABSOLUTE; + + c->outCmd.gimbal.cmd.delta_yaw = (float)c->inputData.pc.data.mouse.x * dt_sec * c->params.pc.sensitivity.sens_mouse; + c->outCmd.gimbal.cmd.delta_pit = (float)c->inputData.pc.data.mouse.y * dt_sec * c->params.pc.sensitivity.sens_mouse; + c->outCmd.chassis.cmd.ctrl_vec.vx = c->outCmd.chassis.cmd.ctrl_vec.vy = 0.0f; + + c->outCmd.shoot.cmd.firecmd = false; + + for (size_t i = 0; i < CMD_BEHAVIOR_NUM; i++) { + if (CMD_BehaviorOccurredRc(&c, behaviorHandlerFunc[i].behavior)) { + behaviorHandlerFunc[i].func(c); + } + } + + c->inputData.pc.lastData.key = c->inputData.pc.data.key; + c->inputData.pc.lastData.mouse.l_click = c->inputData.pc.data.mouse.l_click; + c->inputData.pc.lastData.mouse.r_click = c->inputData.pc.data.mouse.r_click; +} + int8_t Cmd_BuildChassisCommandFromInput_pc(CMD_t *c) { if (c == NULL) { return CMD_ERR_NULL; // 参数错误 @@ -262,6 +431,18 @@ int8_t Cmd_BuildShootCommandFromInput_pc(CMD_t *c) { return CMD_ERR_NULL; // 参数错误 } + c->outCmd.shoot.cmd.firecmd = false; + + for (size_t i = 0; i < CMD_BEHAVIOR_NUM; i++) { + if (CMD_BehaviorOccurredRc(&c, behaviorHandlerFunc[i].behavior)) { + behaviorHandlerFunc[i].func(c); + } + } + + c->inputData.pc.lastData.key = c->inputData.pc.data.key; + c->inputData.pc.lastData.mouse.l_click = c->inputData.pc.data.mouse.l_click; + c->inputData.pc.lastData.mouse.r_click = c->inputData.pc.data.mouse.r_click; + return CMD_OK; } /*************************************************************************************************************************************/ @@ -346,13 +527,13 @@ int8_t Cmd_BuildShootCommandFromInput_referee(CMD_t *c) { /* Private function -------------------------------------------------------- */ /* Exported functions ------------------------------------------------------- */ -typedef int8_t (*Cmd_BuildCommandFunc)(CMD_t *c); +typedef int8_t (*CMD_BuildCommandFunc)(CMD_t *c); typedef struct { CMD_InputSource_t source; - Cmd_BuildCommandFunc chassisFunc; - Cmd_BuildCommandFunc gimbalFunc; - Cmd_BuildCommandFunc shootFunc; + CMD_BuildCommandFunc chassisFunc; + CMD_BuildCommandFunc gimbalFunc; + CMD_BuildCommandFunc shootFunc; } CMD_SourceHandler_t; CMD_SourceHandler_t sourceHandlers[CMD_SRC_NUM] = { @@ -368,7 +549,7 @@ int8_t Cmd_GenerateCommand(CMD_t *c) { } Cmd_Arbiter(c); - switch (c->out_chassis.source) { + switch (c->outCmd.chassis.source) { case CMD_SRC_RC: sourceHandlers[CMD_SRC_RC].chassisFunc(c); break; @@ -384,7 +565,7 @@ int8_t Cmd_GenerateCommand(CMD_t *c) { default: break; } - switch (c->out_gimbal.source) { + switch (c->outCmd.gimbal.source) { case CMD_SRC_RC: sourceHandlers[CMD_SRC_RC].gimbalFunc(c); break; @@ -400,7 +581,7 @@ int8_t Cmd_GenerateCommand(CMD_t *c) { default: break; } - switch (c->out_shoot.source) { + switch (c->outCmd.shoot.source) { case CMD_SRC_RC: sourceHandlers[CMD_SRC_RC].shootFunc(c); break; diff --git a/User/module/cmd.h b/User/module/cmd.h index 2b8b895..8b462f8 100644 --- a/User/module/cmd.h +++ b/User/module/cmd.h @@ -36,6 +36,13 @@ typedef enum { 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; @@ -43,14 +50,6 @@ typedef struct { rc_inputdata_u *inputData; } CMD_InputData_RC_t; - -typedef struct { - -} CMD_RC_Param_t; - -typedef struct { - CMD_InputData_RC_t input; -} CMD_RC_t; /* RC part end---------------------------------------- */ /* PC part begin-------------------------------------- */ @@ -111,6 +110,13 @@ 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; @@ -123,20 +129,27 @@ typedef struct { uint16_t key; /* 按键值 */ uint16_t res; /* 保留,未启用 */ -} CMD_PC_data_t; +} 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_Data_t data; + CMD_PC_LastData_t lastData; }CMD_InputData_PC_t; typedef struct { - -} CMD_PC_Param_t; + CMD_KeyMap_Params_t map; /* 按键映射行为命令 */ + CMD_PC_Sensitivity_t sensitivity; /* PC灵敏度设置 */ +}CMD_PCParams_t; -typedef struct { - CMD_InputData_PC_t input; -} CMD_PC_t; /* PC part end---------------------------------------- */ /* NUC part begin------------------------------------- */ @@ -144,27 +157,14 @@ typedef struct { bool online; }CMD_InputData_NUC_t; -typedef struct { - -} CMD_NUC_Param_t; - -typedef struct { - CMD_InputData_NUC_t input; -} CMD_NUC_t; /* NUC part end--------------------------------------- */ /* REF part begin------------------------------------- */ typedef struct { bool online; + CMD_PC_Data_t data; }CMD_InputData_REF_t; -typedef struct { - -} CMD_REF_Param_t; - -typedef struct { - CMD_InputData_REF_t input; -} CMD_REF_t; /* REF part begin------------------------------------- */ /* 底盘控制命令 */ @@ -185,29 +185,34 @@ typedef struct { 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_SourcePriorityConfig_t sourcePriorityConfigs[CMD_SRC_NUM];/* 输入源优先级配置 */ + CMD_PCParams_t pc; } CMD_Param_t; typedef struct { - - uint16_t key_last; /* 上次按键键值 */ CMD_Param_t params; - - CMD_RC_t rc; - CMD_PC_t pc; - CMD_NUC_t nuc; - CMD_REF_t ref; - CMD_OutputCmd_CHASSIS_t out_chassis; - CMD_OutputCmd_GIMBAL_t out_gimbal; - CMD_OutputCmd_SHOOT_t out_shoot; + CMD_InputData_t inputData; + CMD_OutputCmd_t outCmd; + } CMD_t; diff --git a/User/module/shoot.h b/User/module/shoot.h index 2c02431..248cd64 100644 --- a/User/module/shoot.h +++ b/User/module/shoot.h @@ -42,7 +42,8 @@ typedef enum { SHOOT_MODE_SAFE = 0, /* 安全模式 */ SHOOT_MODE_SINGLE, /* 单发模式 */ SHOOT_MODE_BURST, /* 多发模式 */ - SHOOT_MODE_CONTINUE /* 连发模式 */ + SHOOT_MODE_CONTINUE, /* 连发模式 */ + SHOOT_MODE_NUM }Shoot_Mode_t; typedef enum { @@ -52,7 +53,7 @@ typedef enum { typedef struct { bool online; /* 遥控器在线 */ - bool mode; /* 射击模式 */ + Shoot_Mode_t mode; /* 射击模式 */ bool ready; /* 准备射击 */ bool firecmd; /* 射击指令 */ }Shoot_CMD_t;