feat: 添加HID主机命令和主题颜色功能
- 添加了新的事件类型包括display_theme_event、hid_host_ack_event、 hid_host_command_error_event和hid_host_command_event用于处理HID主机命令 - 在CMakeLists.txt中添加了新的源文件,包括显示主题事件和HID主机命令相关模块 - 实现了HID主机命令协议定义,包括主题颜色和时间同步命令 - 在BLE HID模块中添加了对供应商命令报告的支持,增加新的报告ID用于主机命令传输 - 扩展了HID传输路由机制,支持USB和BLE双通道传输 - 实现了显示模块的主题颜色存储功能,支持通过settings持久化保存主题颜色 - 添加了完整的BLE时间同步服务PC主机接入文档 - 修改了电池采样逻辑,增加2秒延迟以等待电池电压稳定
This commit is contained in:
16
inc/hid_host_command_protocol.h
Normal file
16
inc/hid_host_command_protocol.h
Normal file
@@ -0,0 +1,16 @@
|
||||
#ifndef HID_HOST_COMMAND_PROTOCOL_H__
|
||||
#define HID_HOST_COMMAND_PROTOCOL_H__
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#define HID_HOST_CMD_DATA_SIZE 8U
|
||||
#define HID_HOST_CMD_OUTPUT_PAYLOAD_SIZE (1U + HID_HOST_CMD_DATA_SIZE)
|
||||
#define HID_HOST_CMD_ACK_PAYLOAD_SIZE 1U
|
||||
|
||||
#define HID_HOST_CMD_ID_THEME_COLOR 0x01U
|
||||
#define HID_HOST_CMD_ID_TIME_SYNC 0x02U
|
||||
|
||||
#define HID_HOST_CMD_THEME_PARAM_SIZE 3U
|
||||
#define HID_HOST_CMD_TIME_SYNC_PARAM_SIZE 8U
|
||||
|
||||
#endif /* HID_HOST_COMMAND_PROTOCOL_H__ */
|
||||
9
inc/hid_host_transport.h
Normal file
9
inc/hid_host_transport.h
Normal file
@@ -0,0 +1,9 @@
|
||||
#ifndef HID_HOST_TRANSPORT_H__
|
||||
#define HID_HOST_TRANSPORT_H__
|
||||
|
||||
enum hid_host_transport {
|
||||
HID_HOST_TRANSPORT_USB = 0,
|
||||
HID_HOST_TRANSPORT_BLE,
|
||||
};
|
||||
|
||||
#endif /* HID_HOST_TRANSPORT_H__ */
|
||||
@@ -3,11 +3,14 @@
|
||||
|
||||
#include <zephyr/usb/class/usbd_hid.h>
|
||||
|
||||
#include "hid_host_command_protocol.h"
|
||||
|
||||
/* 与 HID Report Map 对齐的 Report ID。 */
|
||||
enum {
|
||||
REPORT_ID_KEYBOARD = 1,
|
||||
REPORT_ID_CONSUMER = 3,
|
||||
REPORT_ID_VENDOR = 4,
|
||||
REPORT_ID_VENDOR_CMD = 5,
|
||||
};
|
||||
|
||||
#define HID_KBD_USAGE_MAX 0x00E7U
|
||||
@@ -18,6 +21,7 @@ enum {
|
||||
#define HID_BOOT_KBD_PAYLOAD_SIZE 8U
|
||||
#define HID_CONSUMER_PAYLOAD_SIZE 2U
|
||||
#define HID_VENDOR_PAYLOAD_SIZE HID_KBD_PAYLOAD_SIZE
|
||||
#define HID_VENDOR_ACK_PAYLOAD_SIZE HID_HOST_CMD_ACK_PAYLOAD_SIZE
|
||||
#define HID_KBD_LED_PAYLOAD_SIZE 1U
|
||||
#define HID_FULL_REPORT_SIZE(payload) (1U + (payload))
|
||||
|
||||
@@ -33,9 +37,10 @@ enum {
|
||||
* 键盘(NKRO) + Consumer + Vendor 的复合 Report 描述符:
|
||||
* - USB Report 接口和 BLE HIDS Report Map 统一使用这份定义,
|
||||
* 避免两边手写常量后长期演进出现不一致。
|
||||
* - Vendor Report 复用与 NKRO 键盘状态相同的 payload 结构:
|
||||
* [modifier(1B) | usage_bitmap(29B)]。
|
||||
* 这样主机可以下发“屏蔽遮罩”,设备也可以上报“真实键盘状态”。
|
||||
* - Report ID 0x04 继续复用 NKRO payload,承载私有状态/遮罩语义。
|
||||
* - Report ID 0x05 预留给“主机命令 + 设备 ACK”通道:
|
||||
* - Output payload 固定 9 字节:[cmd(1) | data(8)]
|
||||
* - Input payload 固定 1 字节:[cmd]
|
||||
*/
|
||||
#define HID_DESC_KEYBOARD_NKRO_CONSUMER() \
|
||||
{ \
|
||||
@@ -105,6 +110,22 @@ enum {
|
||||
HID_REPORT_COUNT(HID_VENDOR_PAYLOAD_SIZE), \
|
||||
HID_USAGE(0x02U), \
|
||||
HID_OUTPUT(0x02), \
|
||||
HID_END_COLLECTION, \
|
||||
\
|
||||
/* Vendor 页(0xFF01):主机命令写入 + 设备 ACK 返回。 */ \
|
||||
HID_USAGE_PAGE16(0x01, 0xFF), \
|
||||
HID_USAGE(0x05U), \
|
||||
HID_COLLECTION(HID_COLLECTION_APPLICATION), \
|
||||
HID_REPORT_ID(REPORT_ID_VENDOR_CMD), \
|
||||
HID_LOGICAL_MIN8(0), \
|
||||
HID_LOGICAL_MAX16(0xFF, 0x00), \
|
||||
HID_REPORT_SIZE(8), \
|
||||
HID_REPORT_COUNT(HID_VENDOR_ACK_PAYLOAD_SIZE), \
|
||||
HID_USAGE(0x05U), \
|
||||
HID_INPUT(0x02), \
|
||||
HID_REPORT_COUNT(HID_HOST_CMD_OUTPUT_PAYLOAD_SIZE), \
|
||||
HID_USAGE(0x05U), \
|
||||
HID_OUTPUT(0x02), \
|
||||
HID_END_COLLECTION, \
|
||||
}
|
||||
|
||||
|
||||
@@ -18,6 +18,7 @@ enum time_sync_source {
|
||||
TIME_SYNC_SOURCE_BLE,
|
||||
TIME_SYNC_SOURCE_USB,
|
||||
TIME_SYNC_SOURCE_MANUAL,
|
||||
TIME_SYNC_SOURCE_HID,
|
||||
};
|
||||
|
||||
/*
|
||||
|
||||
Reference in New Issue
Block a user