PC会覆盖其他输入源命令
This commit is contained in:
parent
218f8f62e7
commit
206ca6f6bd
@ -16,19 +16,19 @@
|
|||||||
/* Private variables -------------------------------------------------------- */
|
/* Private variables -------------------------------------------------------- */
|
||||||
/* Private function -------------------------------------------------------- */
|
/* Private function -------------------------------------------------------- */
|
||||||
|
|
||||||
bool isREFOnline(CMD_t *c){return c->input_ref.online;}
|
bool isREFOnline(CMD_t *c){return c->inputData.ref.online;}
|
||||||
bool isNUCOnline(CMD_t *c){return c->input_nuc.online;}
|
bool isNUCOnline(CMD_t *c){return c->inputData.nuc.online;}
|
||||||
bool isRCOnline(CMD_t *c){return c->input_rc.online;}
|
bool isRCOnline(CMD_t *c){return c->inputData.rc.online;}
|
||||||
bool isPCOnline(CMD_t *c){return c->input_pc.online;}
|
bool isPCOnline(CMD_t *c){return c->inputData.pc.online;}
|
||||||
void PriorityConfigsRanking(CMD_Param_t *param) {
|
void PriorityConfigsRanking(CMD_Param_t *param) {
|
||||||
static bool init=false;
|
static bool init=false;
|
||||||
if(init) return;
|
if(init) return;
|
||||||
for (int i = 0; i < CMD_SRC_NUM - 1; i++) {
|
for (int i = 0; i < CMD_SRC_NUM - 1; i++) {
|
||||||
for (int j = 0; j < CMD_SRC_NUM - i - 1; j++) {
|
for (int j = 0; j < CMD_SRC_NUM - i - 1; j++) {
|
||||||
if (param->rcSourcePriorityConfigs[j].priority < param->rcSourcePriorityConfigs[j + 1].priority) {
|
if (param->sourcePriorityConfigs[j].priority < param->sourcePriorityConfigs[j + 1].priority) {
|
||||||
CMD_RCSourcePriorityConfig_t temp = param->rcSourcePriorityConfigs[j];
|
CMD_SourcePriorityConfig_t temp = param->sourcePriorityConfigs[j];
|
||||||
param->rcSourcePriorityConfigs[j] = param->rcSourcePriorityConfigs[j + 1];
|
param->sourcePriorityConfigs[j] = param->sourcePriorityConfigs[j + 1];
|
||||||
param->rcSourcePriorityConfigs[j + 1] = temp;
|
param->sourcePriorityConfigs[j + 1] = temp;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -36,7 +36,7 @@ void PriorityConfigsRanking(CMD_Param_t *param) {
|
|||||||
}
|
}
|
||||||
CMD_InputSource_t getHighestPrioritySource(CMD_t *c) {
|
CMD_InputSource_t getHighestPrioritySource(CMD_t *c) {
|
||||||
for (int i = 0; i < CMD_SRC_NUM; i++) {
|
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) {
|
switch (source) {
|
||||||
case CMD_SRC_REFEREE:
|
case CMD_SRC_REFEREE:
|
||||||
if (isREFOnline(c)) {
|
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) {
|
int8_t Cmd_Arbiter(CMD_t *c) {
|
||||||
@ -71,9 +71,9 @@ int8_t Cmd_Arbiter(CMD_t *c) {
|
|||||||
|
|
||||||
CMD_InputSource_t source = getHighestPrioritySource(c);
|
CMD_InputSource_t source = getHighestPrioritySource(c);
|
||||||
|
|
||||||
c->out_chassis.source = source;
|
c->outCmd.chassis.source = source;
|
||||||
c->out_gimbal.source = source;
|
c->outCmd.gimbal.source = source;
|
||||||
c->out_shoot.source = source;
|
c->outCmd.shoot.source = source;
|
||||||
|
|
||||||
return CMD_OK;
|
return CMD_OK;
|
||||||
}
|
}
|
||||||
@ -89,9 +89,9 @@ int8_t Cmd_Arbiter(CMD_t *c) {
|
|||||||
#define RC_SELECT_Index 1
|
#define RC_SELECT_Index 1
|
||||||
/* 扩展接口 */
|
/* 扩展接口 */
|
||||||
#if RC_SELECT_Index == 0
|
#if RC_SELECT_Index == 0
|
||||||
#define FOR_EACH_RC(_) _(dr16, DR16)
|
#define FOR_EACH_RC(X) X(dr16, DR16)
|
||||||
#elif RC_SELECT_Index == 1
|
#elif RC_SELECT_Index == 1
|
||||||
#define FOR_EACH_RC(_) _(at9s, AT9S)
|
#define FOR_EACH_RC(X) X(at9s, AT9S)
|
||||||
#endif
|
#endif
|
||||||
/* Includes ----------------------------------------------------------------- */
|
/* Includes ----------------------------------------------------------------- */
|
||||||
#if RC_SELECT_Index == 0
|
#if RC_SELECT_Index == 0
|
||||||
@ -132,23 +132,23 @@ int8_t Cmd_BuildChassisCommandFromInput_rc(CMD_t *c) {
|
|||||||
#if RC_SELECT_Index == 0
|
#if RC_SELECT_Index == 0
|
||||||
c->input_rc.inputData->dr16.data =
|
c->input_rc.inputData->dr16.data =
|
||||||
#elif RC_SELECT_Index == 1
|
#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:
|
case AT9S_CMD_SW_DOWN:
|
||||||
c->out_chassis.cmd.mode = CHASSIS_MODE_RELAX;
|
c->outCmd.chassis.cmd.mode = CHASSIS_MODE_RELAX;
|
||||||
break;
|
break;
|
||||||
case AT9S_CMD_SW_MID:
|
case AT9S_CMD_SW_MID:
|
||||||
c->out_chassis.cmd.mode = CHASSIS_MODE_FOLLOW_GIMBAL;
|
c->outCmd.chassis.cmd.mode = CHASSIS_MODE_FOLLOW_GIMBAL;
|
||||||
break;
|
break;
|
||||||
case AT9S_CMD_SW_UP:
|
case AT9S_CMD_SW_UP:
|
||||||
c->out_chassis.cmd.mode = CHASSIS_MODE_ROTOR;
|
c->outCmd.chassis.cmd.mode = CHASSIS_MODE_ROTOR;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
c->out_chassis.cmd.mode = CHASSIS_MODE_RELAX;
|
c->outCmd.chassis.cmd.mode = CHASSIS_MODE_RELAX;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
c->out_chassis.cmd.ctrl_vec.vx = c->input_rc.inputData->at9s.data.ch_l_y;
|
c->outCmd.chassis.cmd.ctrl_vec.vx = c->inputData.rc.inputData->at9s.data.ch_l_y;
|
||||||
c->out_chassis.cmd.ctrl_vec.vy = c->input_rc.inputData->at9s.data.ch_l_x;
|
c->outCmd.chassis.cmd.ctrl_vec.vy = c->inputData.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.wz = c->inputData.rc.inputData->at9s.data.ch_r_x;
|
||||||
#endif
|
#endif
|
||||||
return CMD_OK;
|
return CMD_OK;
|
||||||
}
|
}
|
||||||
@ -160,26 +160,26 @@ int8_t Cmd_BuildGimbalCommandFromInput_rc(CMD_t *c) {
|
|||||||
#if RC_SELECT_Index == 0
|
#if RC_SELECT_Index == 0
|
||||||
c->input_rc.inputData->dr16.data =
|
c->input_rc.inputData->dr16.data =
|
||||||
#elif RC_SELECT_Index == 1
|
#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:
|
case AT9S_CMD_SW_DOWN:
|
||||||
c->out_gimbal.cmd.mode = GIMBAL_MODE_RELAX;
|
c->outCmd.gimbal.cmd.mode = GIMBAL_MODE_RELAX;
|
||||||
c->out_gimbal.cmd.delta_yaw = 0.0f;
|
c->outCmd.gimbal.cmd.delta_yaw = 0.0f;
|
||||||
c->out_gimbal.cmd.delta_pit = 0.0f;
|
c->outCmd.gimbal.cmd.delta_pit = 0.0f;
|
||||||
break;
|
break;
|
||||||
case AT9S_CMD_SW_MID:
|
case AT9S_CMD_SW_MID:
|
||||||
c->out_gimbal.cmd.mode = GIMBAL_MODE_ABSOLUTE;
|
c->outCmd.gimbal.cmd.mode = GIMBAL_MODE_ABSOLUTE;
|
||||||
c->out_gimbal.cmd.delta_yaw = -at9s_out.data.ch_l_x * 2.0f;
|
c->outCmd.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.delta_pit = -at9s_out.data.ch_l_y * 1.5f;
|
||||||
break;
|
break;
|
||||||
case AT9S_CMD_SW_UP:
|
case AT9S_CMD_SW_UP:
|
||||||
c->out_gimbal.cmd.mode = GIMBAL_MODE_ABSOLUTE;
|
c->outCmd.gimbal.cmd.mode = GIMBAL_MODE_ABSOLUTE;
|
||||||
c->out_gimbal.cmd.delta_yaw = -at9s_out.data.ch_l_x * 2.0f;
|
c->outCmd.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.delta_pit = -at9s_out.data.ch_l_y * 1.5f;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
c->out_gimbal.cmd.mode = GIMBAL_MODE_RELAX;
|
c->outCmd.gimbal.cmd.mode = GIMBAL_MODE_RELAX;
|
||||||
c->out_gimbal.cmd.delta_yaw = 0.0f;
|
c->outCmd.gimbal.cmd.delta_yaw = 0.0f;
|
||||||
c->out_gimbal.cmd.delta_pit = 0.0f;
|
c->outCmd.gimbal.cmd.delta_pit = 0.0f;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@ -194,26 +194,26 @@ int8_t Cmd_BuildShootCommandFromInput_rc(CMD_t *c) {
|
|||||||
#if RC_SELECT_Index == 0
|
#if RC_SELECT_Index == 0
|
||||||
c->input_rc.inputData->dr16.data =
|
c->input_rc.inputData->dr16.data =
|
||||||
#elif RC_SELECT_Index == 1
|
#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:
|
case AT9S_CMD_SW_DOWN:
|
||||||
c->out_shoot.cmd.online = at9s_out.online;
|
c->outCmd.shoot.cmd.online = at9s_out.online;
|
||||||
c->out_shoot.cmd.ready = true;
|
c->outCmd.shoot.cmd.ready = true;
|
||||||
c->out_shoot.cmd.firecmd = true;
|
c->outCmd.shoot.cmd.firecmd = true;
|
||||||
break;
|
break;
|
||||||
case AT9S_CMD_SW_MID:
|
case AT9S_CMD_SW_MID:
|
||||||
c->out_shoot.cmd.online = at9s_out.online;
|
c->outCmd.shoot.cmd.online = at9s_out.online;
|
||||||
c->out_shoot.cmd.ready = true;
|
c->outCmd.shoot.cmd.ready = true;
|
||||||
c->out_shoot.cmd.firecmd = false;
|
c->outCmd.shoot.cmd.firecmd = false;
|
||||||
break;
|
break;
|
||||||
case AT9S_CMD_SW_UP:
|
case AT9S_CMD_SW_UP:
|
||||||
c->out_shoot.cmd.online = at9s_out.online;
|
c->outCmd.shoot.cmd.online = at9s_out.online;
|
||||||
c->out_shoot.cmd.ready = false;
|
c->outCmd.shoot.cmd.ready = false;
|
||||||
c->out_shoot.cmd.firecmd = false;
|
c->outCmd.shoot.cmd.firecmd = false;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
c->out_shoot.cmd.online = at9s_out.online;
|
c->outCmd.shoot.cmd.online = at9s_out.online;
|
||||||
c->out_shoot.cmd.ready = false;
|
c->outCmd.shoot.cmd.ready = false;
|
||||||
c->out_shoot.cmd.firecmd = false;
|
c->outCmd.shoot.cmd.firecmd = false;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@ -228,20 +228,189 @@ int8_t Cmd_BuildShootCommandFromInput_rc(CMD_t *c) {
|
|||||||
|
|
||||||
/* Includes ----------------------------------------------------------------- */
|
/* Includes ----------------------------------------------------------------- */
|
||||||
/* Private typedef ---------------------------------------------------------- */
|
/* 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 define ----------------------------------------------------------- */
|
||||||
/* Private macro ------------------------------------------------------------ */
|
/* 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 -------------------------------------------------------- */
|
/* Private variables -------------------------------------------------------- */
|
||||||
|
CMD_BehaviorHandlerFunc_t behaviorHandlerFunc[] = {
|
||||||
|
PC_MACRO_BEHAVIOR_TABLE(PC_MACRO_FOR_BUILD_BEHAVIOR_HANDLER_ARRAY)
|
||||||
|
};
|
||||||
/* Private function -------------------------------------------------------- */
|
/* Private function -------------------------------------------------------- */
|
||||||
int8_t Cmd_Get_pc(CMD_InputData_PC_t *pc)
|
static int8_t Cmd_PC_HandleBehaviorFORE(CMD_t *c){
|
||||||
{
|
c->outCmd.chassis.cmd.ctrl_vec.vy += c->params.pc.sensitivity.move_sense;
|
||||||
FOR_EACH_RC(RC_X_COPYREFERENCE_MACRO)(&rc_buffer);
|
|
||||||
rc->inputData = &rc_buffer;
|
|
||||||
rc->type = RC_SELECT_Index;
|
|
||||||
return CMD_OK;
|
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 ------------------------------------------------------- */
|
/* 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) {
|
int8_t Cmd_BuildChassisCommandFromInput_pc(CMD_t *c) {
|
||||||
if (c == NULL) {
|
if (c == NULL) {
|
||||||
return CMD_ERR_NULL; // 参数错误
|
return CMD_ERR_NULL; // 参数错误
|
||||||
@ -262,6 +431,18 @@ int8_t Cmd_BuildShootCommandFromInput_pc(CMD_t *c) {
|
|||||||
return CMD_ERR_NULL; // 参数错误
|
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;
|
return CMD_OK;
|
||||||
}
|
}
|
||||||
/*************************************************************************************************************************************/
|
/*************************************************************************************************************************************/
|
||||||
@ -346,13 +527,13 @@ int8_t Cmd_BuildShootCommandFromInput_referee(CMD_t *c) {
|
|||||||
/* Private function -------------------------------------------------------- */
|
/* Private function -------------------------------------------------------- */
|
||||||
/* Exported functions ------------------------------------------------------- */
|
/* Exported functions ------------------------------------------------------- */
|
||||||
|
|
||||||
typedef int8_t (*Cmd_BuildCommandFunc)(CMD_t *c);
|
typedef int8_t (*CMD_BuildCommandFunc)(CMD_t *c);
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
CMD_InputSource_t source;
|
CMD_InputSource_t source;
|
||||||
Cmd_BuildCommandFunc chassisFunc;
|
CMD_BuildCommandFunc chassisFunc;
|
||||||
Cmd_BuildCommandFunc gimbalFunc;
|
CMD_BuildCommandFunc gimbalFunc;
|
||||||
Cmd_BuildCommandFunc shootFunc;
|
CMD_BuildCommandFunc shootFunc;
|
||||||
} CMD_SourceHandler_t;
|
} CMD_SourceHandler_t;
|
||||||
|
|
||||||
CMD_SourceHandler_t sourceHandlers[CMD_SRC_NUM] = {
|
CMD_SourceHandler_t sourceHandlers[CMD_SRC_NUM] = {
|
||||||
@ -368,7 +549,7 @@ int8_t Cmd_GenerateCommand(CMD_t *c) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Cmd_Arbiter(c);
|
Cmd_Arbiter(c);
|
||||||
switch (c->out_chassis.source) {
|
switch (c->outCmd.chassis.source) {
|
||||||
case CMD_SRC_RC:
|
case CMD_SRC_RC:
|
||||||
sourceHandlers[CMD_SRC_RC].chassisFunc(c);
|
sourceHandlers[CMD_SRC_RC].chassisFunc(c);
|
||||||
break;
|
break;
|
||||||
@ -384,7 +565,7 @@ int8_t Cmd_GenerateCommand(CMD_t *c) {
|
|||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
switch (c->out_gimbal.source) {
|
switch (c->outCmd.gimbal.source) {
|
||||||
case CMD_SRC_RC:
|
case CMD_SRC_RC:
|
||||||
sourceHandlers[CMD_SRC_RC].gimbalFunc(c);
|
sourceHandlers[CMD_SRC_RC].gimbalFunc(c);
|
||||||
break;
|
break;
|
||||||
@ -400,7 +581,7 @@ int8_t Cmd_GenerateCommand(CMD_t *c) {
|
|||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
switch (c->out_shoot.source) {
|
switch (c->outCmd.shoot.source) {
|
||||||
case CMD_SRC_RC:
|
case CMD_SRC_RC:
|
||||||
sourceHandlers[CMD_SRC_RC].shootFunc(c);
|
sourceHandlers[CMD_SRC_RC].shootFunc(c);
|
||||||
break;
|
break;
|
||||||
|
|||||||
@ -36,6 +36,13 @@ typedef enum {
|
|||||||
CMD_SRC_ERR
|
CMD_SRC_ERR
|
||||||
} CMD_InputSource_t;
|
} CMD_InputSource_t;
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
CMD_MODULE_CHASSIS=0,
|
||||||
|
CMD_MODULE_GIMBAL,
|
||||||
|
CMD_MODULE_SHOOT,
|
||||||
|
CMD_MODULE_NUM /* 模块数量 */
|
||||||
|
} CMD_MODULE_t;
|
||||||
|
|
||||||
/* RC part begin-------------------------------------- */
|
/* RC part begin-------------------------------------- */
|
||||||
typedef struct {
|
typedef struct {
|
||||||
bool online;
|
bool online;
|
||||||
@ -43,14 +50,6 @@ typedef struct {
|
|||||||
rc_inputdata_u *inputData;
|
rc_inputdata_u *inputData;
|
||||||
} CMD_InputData_RC_t;
|
} CMD_InputData_RC_t;
|
||||||
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
|
|
||||||
} CMD_RC_Param_t;
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
CMD_InputData_RC_t input;
|
|
||||||
} CMD_RC_t;
|
|
||||||
/* RC part end---------------------------------------- */
|
/* RC part end---------------------------------------- */
|
||||||
|
|
||||||
/* PC part begin-------------------------------------- */
|
/* PC part begin-------------------------------------- */
|
||||||
@ -111,6 +110,13 @@ typedef struct {
|
|||||||
CMD_KeyMapItem_t key_map[CMD_BEHAVIOR_NUM];
|
CMD_KeyMapItem_t key_map[CMD_BEHAVIOR_NUM];
|
||||||
} CMD_KeyMap_Params_t;
|
} 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 {
|
typedef struct {
|
||||||
struct {
|
struct {
|
||||||
int16_t x;
|
int16_t x;
|
||||||
@ -123,20 +129,27 @@ typedef struct {
|
|||||||
uint16_t key; /* 按键值 */
|
uint16_t key; /* 按键值 */
|
||||||
|
|
||||||
uint16_t res; /* 保留,未启用 */
|
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 {
|
typedef struct {
|
||||||
bool online;
|
bool online;
|
||||||
CMD_PC_data_t data;
|
CMD_PC_Data_t data;
|
||||||
|
CMD_PC_LastData_t lastData;
|
||||||
}CMD_InputData_PC_t;
|
}CMD_InputData_PC_t;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
CMD_KeyMap_Params_t map; /* 按键映射行为命令 */
|
||||||
} CMD_PC_Param_t;
|
CMD_PC_Sensitivity_t sensitivity; /* PC灵敏度设置 */
|
||||||
|
}CMD_PCParams_t;
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
CMD_InputData_PC_t input;
|
|
||||||
} CMD_PC_t;
|
|
||||||
/* PC part end---------------------------------------- */
|
/* PC part end---------------------------------------- */
|
||||||
|
|
||||||
/* NUC part begin------------------------------------- */
|
/* NUC part begin------------------------------------- */
|
||||||
@ -144,27 +157,14 @@ typedef struct {
|
|||||||
bool online;
|
bool online;
|
||||||
}CMD_InputData_NUC_t;
|
}CMD_InputData_NUC_t;
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
|
|
||||||
} CMD_NUC_Param_t;
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
CMD_InputData_NUC_t input;
|
|
||||||
} CMD_NUC_t;
|
|
||||||
/* NUC part end--------------------------------------- */
|
/* NUC part end--------------------------------------- */
|
||||||
|
|
||||||
/* REF part begin------------------------------------- */
|
/* REF part begin------------------------------------- */
|
||||||
typedef struct {
|
typedef struct {
|
||||||
bool online;
|
bool online;
|
||||||
|
CMD_PC_Data_t data;
|
||||||
}CMD_InputData_REF_t;
|
}CMD_InputData_REF_t;
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
|
|
||||||
} CMD_REF_Param_t;
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
CMD_InputData_REF_t input;
|
|
||||||
} CMD_REF_t;
|
|
||||||
/* REF part begin------------------------------------- */
|
/* REF part begin------------------------------------- */
|
||||||
|
|
||||||
/* 底盘控制命令 */
|
/* 底盘控制命令 */
|
||||||
@ -185,29 +185,34 @@ typedef struct {
|
|||||||
Shoot_CMD_t cmd;
|
Shoot_CMD_t cmd;
|
||||||
} CMD_OutputCmd_SHOOT_t;
|
} 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 {
|
typedef struct {
|
||||||
CMD_InputSource_t source;
|
CMD_InputSource_t source;
|
||||||
uint8_t priority;
|
uint8_t priority;
|
||||||
} CMD_SourcePriorityConfig_t;
|
} CMD_SourcePriorityConfig_t;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
CMD_SourcePriorityConfig_t SourcePriorityConfigs[CMD_SRC_NUM];
|
CMD_SourcePriorityConfig_t sourcePriorityConfigs[CMD_SRC_NUM];/* 输入源优先级配置 */
|
||||||
|
CMD_PCParams_t pc;
|
||||||
} CMD_Param_t;
|
} CMD_Param_t;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
|
||||||
uint16_t key_last; /* 上次按键键值 */
|
|
||||||
|
|
||||||
CMD_Param_t params;
|
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_InputData_t inputData;
|
||||||
CMD_OutputCmd_GIMBAL_t out_gimbal;
|
CMD_OutputCmd_t outCmd;
|
||||||
CMD_OutputCmd_SHOOT_t out_shoot;
|
|
||||||
|
|
||||||
} CMD_t;
|
} CMD_t;
|
||||||
|
|
||||||
|
|||||||
@ -42,7 +42,8 @@ typedef enum {
|
|||||||
SHOOT_MODE_SAFE = 0, /* 安全模式 */
|
SHOOT_MODE_SAFE = 0, /* 安全模式 */
|
||||||
SHOOT_MODE_SINGLE, /* 单发模式 */
|
SHOOT_MODE_SINGLE, /* 单发模式 */
|
||||||
SHOOT_MODE_BURST, /* 多发模式 */
|
SHOOT_MODE_BURST, /* 多发模式 */
|
||||||
SHOOT_MODE_CONTINUE /* 连发模式 */
|
SHOOT_MODE_CONTINUE, /* 连发模式 */
|
||||||
|
SHOOT_MODE_NUM
|
||||||
}Shoot_Mode_t;
|
}Shoot_Mode_t;
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
@ -52,7 +53,7 @@ typedef enum {
|
|||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
bool online; /* 遥控器在线 */
|
bool online; /* 遥控器在线 */
|
||||||
bool mode; /* 射击模式 */
|
Shoot_Mode_t mode; /* 射击模式 */
|
||||||
bool ready; /* 准备射击 */
|
bool ready; /* 准备射击 */
|
||||||
bool firecmd; /* 射击指令 */
|
bool firecmd; /* 射击指令 */
|
||||||
}Shoot_CMD_t;
|
}Shoot_CMD_t;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user