MRobot/module/cmd/cmd_example.c

145 lines
5.5 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* 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 函数
*/