feat(usb): 简化USB状态管理并引入模式策略模块

- 修改usb_state_event结构,将复杂的flag操作简化为单一的state枚举值
- 新增usb_function_hook机制用于USB功能预初始化
- 将ble_adv_ctrl_module重命名为mode_policy_module以更好地反映其功能
- 在mode_policy_module中添加USB设备启用/暂停控制逻辑
- 添加对电源事件的处理支持休眠/唤醒功能
- 更新CMakeLists.txt添加必要的链接器脚本和源文件
- 移除不再需要的ble_adv_ctrl_module并添加新的mode_policy_module
This commit is contained in:
2026-04-15 15:13:44 +08:00
parent 0a905d280d
commit 6125f04102
9 changed files with 300 additions and 250 deletions

View File

@@ -11,70 +11,29 @@
extern "C" {
#endif
enum usb_state_event_op {
USB_STATE_EVENT_OP_SET_BITS,
USB_STATE_EVENT_OP_CLEAR_BITS,
USB_STATE_EVENT_OP_SNAPSHOT,
};
enum usb_state_flag {
USB_STATEF_PREPARE = BIT(0),
USB_STATEF_HID_READY = BIT(1),
USB_STATEF_CDC_READY = BIT(2),
USB_STATEF_STACK_READY = BIT(3),
USB_STATEF_POWERED = BIT(4),
USB_STATEF_ACTIVE = BIT(5),
USB_STATEF_SUSPENDED = BIT(6),
USB_STATEF_STACK_RUNNING = BIT(31),
enum usb_state {
USB_STATE_DISABLED = 0,
USB_STATE_DISCONNECTED,
USB_STATE_POWERED,
USB_STATE_ACTIVE,
USB_STATE_SUSPENDED,
};
struct usb_state_event {
struct app_event_header header;
const void *src_module_id;
const void *sink_module_id;
uint8_t op;
uint32_t flags;
enum usb_state state;
};
APP_EVENT_TYPE_DECLARE(usb_state_event);
static inline void submit_usb_state_event(const void *src_module_id,
const void *sink_module_id,
uint8_t op,
uint32_t flags)
static inline void submit_usb_state(enum usb_state state)
{
struct usb_state_event *event = new_usb_state_event();
event->src_module_id = src_module_id;
event->sink_module_id = sink_module_id;
event->op = op;
event->flags = flags;
event->state = state;
APP_EVENT_SUBMIT(event);
}
static inline void submit_usb_state_set(const void *src_module_id,
const void *sink_module_id,
uint32_t flags)
{
submit_usb_state_event(src_module_id, sink_module_id,
USB_STATE_EVENT_OP_SET_BITS, flags);
}
static inline void submit_usb_state_clear(const void *src_module_id,
const void *sink_module_id,
uint32_t flags)
{
submit_usb_state_event(src_module_id, sink_module_id,
USB_STATE_EVENT_OP_CLEAR_BITS, flags);
}
static inline void submit_usb_state_snapshot(const void *src_module_id,
uint32_t flags)
{
submit_usb_state_event(src_module_id, NULL,
USB_STATE_EVENT_OP_SNAPSHOT, flags);
}
#ifdef __cplusplus
}
#endif