/* 该任务用于接收来自各个不同的控制方式所期望的控制指令 将其集中统一化后分发给各个模块 */ /* 按键控制逻辑 RC模式,左按键打到最上,右按键启用,中间无状态,上下各代表模式1、模式2 雷达导航,左按键打到中间,右按键禁用 左按键打到下面,保留,未启用 */ #ifndef _CMD_H #define _CMD_H #include "struct_typedef.h" #include "device.h" #define MID (0x09) typedef enum{ RC,//遥控器控制,左按键上 MID_NAVI,//雷达导航 }CMD_Chassis_CtrlType_e; typedef enum{ RELAXED,//异常模式 NORMAL, GYRO_STAY, RC_MODE1, RC_NO_MODE, RC_MODE2, RC_MODE3, RC_MODE4, AUTO_NAVI }CMD_Chassis_mode_e; /*该结构体负责接收和解析地盘模块所需要的控制指令*/ typedef struct{ CMD_Chassis_CtrlType_e type; CMD_Chassis_mode_e mode; }CMD_Chassis_Ctrl_t; /* 拨杆位置 */ typedef enum { CMD_SW_ERR = 0, CMD_SW_UP = 1, CMD_SW_MID = 3, CMD_SW_DOWN = 2, } CMD_SwitchPos_t; /*遥控器值,使用CMD_RcLogic函数传入CMD_t结构体*/ typedef struct { float ch_l_x; /* 遥控器左侧摇杆横轴值,上为正 */ float ch_l_y; /* 遥控器左侧摇杆纵轴值,右为正 */ float ch_r_x; /* 遥控器右侧摇杆横轴值,上为正 */ float ch_r_y; /* 遥控器右侧摇杆纵轴值,右为正 */ float ch_res; /* 第五通道值 */ CMD_SwitchPos_t sw_r; /* 右侧拨杆位置 */ CMD_SwitchPos_t sw_l; /* 左侧拨杆位置 */ uint16_t key; /* 按键值 */ uint16_t res; /* 保留,未启用 */ } __attribute__((packed))CMD_RC_t; typedef struct { fp32 Vx; fp32 Vy; fp32 Vw; }OpsHopeVector_t; typedef struct { fp32 x; fp32 y; fp32 z; int cnt_point;//计数点 }ops_point; typedef struct { OpsHopeVector_t out; int flag;//传递flag触发标志位 } CMD_ACTION_t; typedef struct { uint8_t status_fromnuc; uint8_t ctrl_status; //取其中每一个二进制位用作通信 struct { fp32 vx; fp32 vy; fp32 wz; }navi; struct { fp32 posx; fp32 posy; fp32 posw; }pick; struct { fp32 angle; }sick_cali; } CMD_NUC_t; typedef struct{ fp32 posy; fp32 posx; fp32 posw; }CMD_FOR_PICK; typedef struct { fp32 vx; fp32 vy; fp32 wz; }CMD_FOR_NAVI; typedef struct { uint8_t cmd_status; uint8_t raw_status; uint8_t status[7]; fp32 Vx; fp32 Vy; fp32 Vw; fp32 poscamear; fp32 key_ctrl_l; fp32 key_ctrl_r; fp32 forsick_wz; CMD_Chassis_Ctrl_t C_cmd; CMD_FOR_NAVI C_navi; } CMD_t; int8_t CMD_Init(CMD_t *cmd); int8_t CMD_ParseRc(CMD_t *cmd,CMD_RC_t *rc); int8_t CMD_ParseAction(CMD_t *cmd,CMD_ACTION_t *act); int8_t CMD_ParseNuc(CMD_t *cmd,CMD_NUC_t *n); int8_t CMD_SwitchStatus(CMD_t *cmd); int8_t CMD_CtrlSet(CMD_t *cmd); #endif