145 lines
5.3 KiB
C
145 lines
5.3 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 添加条目
|
||
* 2. 实现 CMD_Behavior_Handle_XXX 函数
|
||
*
|
||
* ### 添加新输出模块
|
||
* 1. 在 CMD_OUTPUT_MODULE_TABLE 添加条目
|
||
* 2. 在 CMD_t 中添加输出成员
|
||
* 3. 实现对应的 BuildXXXCmd 函数
|
||
*/
|