mirror of
https://github.com/goldenfishs/MRobot.git
synced 2025-12-20 14:51:35 +08:00
145 lines
5.5 KiB
C
145 lines
5.5 KiB
C
/*
|
||
* CMD 模块 V2 - 使用示例和配置模板
|
||
*
|
||
* 本文件展示如何配置和使用新的CMD模块
|
||
*/
|
||
#include "cmd.h"
|
||
|
||
/* ========================================================================== */
|
||
/* 配置示例 */
|
||
/* ========================================================================== */
|
||
|
||
/* 默认配置 */
|
||
// static CMD_Config_t g_cmd_config = {
|
||
// /* 灵敏度设置 */
|
||
// .sensitivity = {
|
||
// .mouse_sens = 0.8f,
|
||
// .move_sens = 1.0f,
|
||
// .move_fast_mult = 1.5f,
|
||
// .move_slow_mult = 0.5f,
|
||
// },
|
||
|
||
// /* RC拨杆模式映射 */
|
||
// .rc_mode_map = {
|
||
// /* 左拨杆控制底盘模式 */
|
||
// .sw_left_up = CHASSIS_MODE_BREAK,
|
||
// .sw_left_mid = CHASSIS_MODE_FOLLOW_GIMBAL,
|
||
// .sw_left_down = CHASSIS_MODE_ROTOR,
|
||
|
||
// /* 用于云台模式 */
|
||
// .gimbal_sw_up = GIMBAL_MODE_ABSOLUTE,
|
||
// .gimbal_sw_mid = GIMBAL_MODE_ABSOLUTE,
|
||
// .gimbal_sw_down = GIMBAL_MODE_RELATIVE,
|
||
// },
|
||
|
||
// };
|
||
|
||
// /* CMD上下文 */
|
||
// static CMD_t g_cmd_ctx;
|
||
|
||
/* ========================================================================== */
|
||
/* 任务示例 */
|
||
/* ========================================================================== */
|
||
|
||
/*
|
||
* 初始化示例
|
||
*/
|
||
// void Example_CMD_Init(void) {
|
||
// CMD_Init(&g_cmd_ctx, &g_cmd_config);
|
||
// }
|
||
|
||
// /*
|
||
// * 任务循环示例
|
||
// */
|
||
// void Example_CMD_Task(void) {
|
||
// /* 一键更新 */
|
||
// CMD_Update(&g_cmd_ctx);
|
||
|
||
// /* 获取命令发送到各模块 */
|
||
// Chassis_CMD_t *chassis_cmd = CMD_GetChassisCmd(&g_cmd_ctx);
|
||
// Gimbal_CMD_t *gimbal_cmd = CMD_GetGimbalCmd(&g_cmd_ctx);
|
||
// Shoot_CMD_t *shoot_cmd = CMD_GetShootCmd(&g_cmd_ctx);
|
||
|
||
// /* 使用命令... */
|
||
// (void)chassis_cmd;
|
||
// (void)gimbal_cmd;
|
||
// (void)shoot_cmd;
|
||
// }
|
||
|
||
/* ========================================================================== */
|
||
/* 架构说明 */
|
||
/* ========================================================================== */
|
||
|
||
/*
|
||
* ## 新架构优势
|
||
*
|
||
* ### 1. 统一的输入抽象层 (CMD_RawInput_t)
|
||
* - 所有设备(DR16/AT9S/VT13等)都转换成相同格式
|
||
* - 上层代码无需关心具体设备类型
|
||
* - 添加新设备只需实现适配器,不改动主逻辑
|
||
*
|
||
* ### 2. 适配器模式
|
||
* - 每个设备一个适配器文件
|
||
* - 实现 Init, GetInput, IsOnline 三个函数
|
||
* - 通过宏选择编译哪个适配器
|
||
*
|
||
* ### 3. X-Macro配置表
|
||
* - CMD_INPUT_SOURCE_TABLE: 配置输入源
|
||
* - CMD_OUTPUT_MODULE_TABLE: 配置输出模块
|
||
* - CMD_BEHAVIOR_TABLE: 配置按键行为映射
|
||
* - 编译时生成枚举、配置数组、处理函数
|
||
*
|
||
* ### 4. 行为驱动设计
|
||
* - 行为与按键解耦
|
||
* - 运行时可修改映射
|
||
* - 支持边沿触发和持续触发
|
||
*
|
||
* ### 5. 清晰的分层
|
||
*
|
||
* ┌──────────────────────────────────────┐
|
||
* │ 应用层 (cmd.c) │
|
||
* │ - CMD_Update() │
|
||
* │ - 仲裁、命令生成 │
|
||
* └──────────────┬───────────────────────┘
|
||
* │
|
||
* ┌──────────────▼───────────────────────┐
|
||
* │ 行为处理层 (cmd_behavior.c) │
|
||
* │ - 按键触发检测 │
|
||
* │ - 行为函数调用 │
|
||
* └──────────────┬───────────────────────┘
|
||
* │
|
||
* ┌──────────────▼──────────────────────────┐
|
||
* │ 抽象输入层 (cmd_types.h) │
|
||
* │ - 多输入源操作同一CMD_RawInput_t不同分区 │
|
||
* │ - 统一的摇杆、开关、键鼠结构 │
|
||
* └──────────────┬──────────────────────────┘
|
||
* │
|
||
* ┌──────────────▼───────────────────────┐
|
||
* │ 适配器层 (cmd_adapter.c) │
|
||
* │ - DR16_Adapter │
|
||
* │ - AT9S_Adapter │
|
||
* │ - 设备数据 → CMD_RawInput_t │
|
||
* └──────────────────────────────────────┘
|
||
*
|
||
* ## 扩展指南
|
||
*
|
||
* ### 添加新遥控器设备
|
||
* 1. 在 cmd_adapter.h 中添加宏定义选项
|
||
* 2. 在 cmd_adapter.c 中实现三个适配器函数
|
||
* 3. 修改 CMD_RC_DEVICE_TYPE 宏选择新设备
|
||
*
|
||
* ### 添加新输入源(如自定义协议)
|
||
* 1. 在 CMD_INPUT_SOURCE_TABLE 添加条目
|
||
* 2. 实现对应的适配器
|
||
* 3. 在 CMD_GenerateCommands 添加处理分支
|
||
*
|
||
* ### 添加新行为
|
||
* 1. 在 CMD_BEHAVIOR_TABLE 添加条目,并修正BEHAVIOR_CONFIG_COUNT
|
||
* 2. 实现 CMD_Behavior_Handle_XXX 函数
|
||
*
|
||
* ### 添加新输出模块
|
||
* 1. 在 CMD_OUTPUT_MODULE_TABLE 添加条目
|
||
* 2. 在 CMD_t 中添加输出成员
|
||
* 3. 实现对应的 BuildXXXCmd 函数
|
||
*/
|