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:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user