mirror of
https://github.com/goldenfishs/MRobot.git
synced 2026-04-01 05:17:13 +08:00
解决不更新
This commit is contained in:
111
assets/User_code/module/cmd/cmd_adapter.h
Normal file
111
assets/User_code/module/cmd/cmd_adapter.h
Normal file
@@ -0,0 +1,111 @@
|
||||
/*
|
||||
* CMD 模块 V2 - 输入适配器接口
|
||||
* 定义设备到统一输入结构的转换接口
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#include "cmd_types.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* ========================================================================== */
|
||||
/* 适配器接口定义 */
|
||||
/* ========================================================================== */
|
||||
|
||||
/* 适配器操作函数指针类型 */
|
||||
typedef int8_t (*CMD_AdapterInitFunc)(void *device_data);
|
||||
typedef int8_t (*CMD_AdapterGetInputFunc)(void *device_data, CMD_RawInput_t *output);
|
||||
typedef bool (*CMD_AdapterIsOnlineFunc)(void *device_data);
|
||||
|
||||
/* 适配器描述结构 */
|
||||
typedef struct {
|
||||
const char *name; /* 适配器名称 */
|
||||
CMD_InputSource_t source; /* 对应的输入源 */
|
||||
void *device_data; /* 设备数据指针 */
|
||||
CMD_AdapterInitFunc init; /* 初始化函数 */
|
||||
CMD_AdapterGetInputFunc get_input; /* 获取输入函数 */
|
||||
CMD_AdapterIsOnlineFunc is_online; /* 在线检测函数 */
|
||||
} CMD_InputAdapter_t;
|
||||
|
||||
/* ========================================================================== */
|
||||
/* 适配器注册宏 */
|
||||
/* ========================================================================== */
|
||||
|
||||
/*
|
||||
* 声明适配器
|
||||
* 使用示例:
|
||||
* CMD_DECLARE_ADAPTER(DR16, dr16, DR16_t)
|
||||
*
|
||||
* 会生成:
|
||||
* - extern DR16_t dr16; // 设备实例声明
|
||||
* - int8_t CMD_DR16_Init(void *data);
|
||||
* - int8_t CMD_DR16_GetInput(void *data, CMD_RawInput_t *output);
|
||||
* - bool CMD_DR16_IsOnline(void *data);
|
||||
*/
|
||||
#define CMD_DECLARE_ADAPTER(NAME, var, TYPE) \
|
||||
extern TYPE var; \
|
||||
int8_t CMD_##NAME##_Init(void *data); \
|
||||
int8_t CMD_##NAME##_GetInput(void *data, CMD_RawInput_t *output); \
|
||||
bool CMD_##NAME##_IsOnline(void *data);
|
||||
|
||||
/*
|
||||
* 定义适配器实例
|
||||
* 使用示例:
|
||||
* CMD_DEFINE_ADAPTER(DR16_RC, dr16, CMD_SRC_RC, CMD_DR16_Init, CMD_DR16_RC_GetInput, CMD_DR16_RC_IsOnline)
|
||||
*/
|
||||
#define CMD_DEFINE_ADAPTER(NAME, var, source_enum, init_func, get_func, online_func) \
|
||||
static CMD_InputAdapter_t g_adapter_##NAME = { \
|
||||
.name = #NAME, \
|
||||
.source = source_enum, \
|
||||
.device_data = (void*)&var, \
|
||||
.init = init_func, \
|
||||
.get_input = get_func, \
|
||||
.is_online = online_func, \
|
||||
};
|
||||
|
||||
/* ========================================================================== */
|
||||
/* RC设备适配器配置 */
|
||||
/* ========================================================================== */
|
||||
|
||||
/* 选择使用的RC设备 - 只需修改这里 */
|
||||
#define CMD_RC_DEVICE_TYPE 0 /* 0:DR16, 1:AT9S, 2:VT13 */
|
||||
|
||||
#if CMD_RC_DEVICE_TYPE == 0
|
||||
#include "device/dr16.h"
|
||||
CMD_DECLARE_ADAPTER(DR16_RC, dr16, DR16_t)
|
||||
CMD_DECLARE_ADAPTER(DR16_PC, dr16, DR16_t)
|
||||
#define CMD_RC_ADAPTER_NAME DR16
|
||||
#define CMD_RC_ADAPTER_VAR dr16
|
||||
#elif CMD_RC_DEVICE_TYPE == 1
|
||||
#include "device/at9s_pro.h"
|
||||
CMD_DECLARE_ADAPTER(AT9S, at9s, AT9S_t)
|
||||
#define CMD_RC_ADAPTER_NAME AT9S
|
||||
#define CMD_RC_ADAPTER_VAR at9s
|
||||
#elif CMD_RC_DEVICE_TYPE == 2
|
||||
#include "device/vt13.h"
|
||||
CMD_DECLARE_ADAPTER(VT13, vt13, VT13_t)
|
||||
#define CMD_RC_ADAPTER_NAME VT13
|
||||
#define CMD_RC_ADAPTER_VAR vt13
|
||||
#endif
|
||||
|
||||
/* ========================================================================== */
|
||||
/* 适配器管理接口 */
|
||||
/* ========================================================================== */
|
||||
|
||||
/* 初始化所有适配器 */
|
||||
int8_t CMD_Adapter_InitAll(void);
|
||||
|
||||
/* 获取指定输入源的原始输入 */
|
||||
int8_t CMD_Adapter_GetInput(CMD_InputSource_t source, CMD_RawInput_t *output);
|
||||
|
||||
/* 检查输入源是否在线 */
|
||||
bool CMD_Adapter_IsOnline(CMD_InputSource_t source);
|
||||
|
||||
/* 注册适配器 (运行时注册,可选) */
|
||||
int8_t CMD_Adapter_Register(CMD_InputAdapter_t *adapter);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
Reference in New Issue
Block a user