mirror of
https://github.com/goldenfishs/MRobot.git
synced 2025-12-20 14:51:35 +08:00
112 lines
3.9 KiB
C
112 lines
3.9 KiB
C
/*
|
|
* 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
|