实现键盘动作
This commit is contained in:
@@ -17,6 +17,12 @@ static const char *TAG = "USB";
|
||||
#define USB_PID 0x50A6
|
||||
#define USB_BCD 0x0200
|
||||
|
||||
enum {
|
||||
ITF_NUM_KEYBOARD, // 0
|
||||
ITF_NUM_MOUSE, // 1
|
||||
ITF_NUM_TOTAL
|
||||
};
|
||||
|
||||
static tusb_desc_device_t const desc_device =
|
||||
{
|
||||
.bLength = sizeof(tusb_desc_device_t),
|
||||
@@ -35,40 +41,67 @@ static tusb_desc_device_t const desc_device =
|
||||
.bNumConfigurations = 0x01
|
||||
};
|
||||
|
||||
uint8_t const desc_hid_report[] =
|
||||
{
|
||||
TUD_HID_REPORT_DESC_KEYBOARD(HID_REPORT_ID(REPORT_ID_KEYBOARD)),
|
||||
// 独立键盘描述符
|
||||
uint8_t const desc_hid_report_kb[] = {
|
||||
TUD_HID_REPORT_DESC_KEYBOARD(HID_REPORT_ID(REPORT_ID_KEYBOARD))
|
||||
};
|
||||
|
||||
// 独立鼠标描述符
|
||||
uint8_t const desc_hid_report_mouse[] = {
|
||||
TUD_HID_REPORT_DESC_MOUSE(HID_REPORT_ID(REPORT_ID_MOUSE))
|
||||
};
|
||||
|
||||
// 按接口返回正确描述符
|
||||
uint8_t const * tud_hid_descriptor_report_cb(uint8_t instance)
|
||||
{
|
||||
(void) instance;
|
||||
return desc_hid_report;
|
||||
if (instance == ITF_NUM_KEYBOARD) {
|
||||
return desc_hid_report_kb;
|
||||
}
|
||||
if (instance == ITF_NUM_MOUSE) {
|
||||
return desc_hid_report_mouse;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static char const *hid_string_descriptor[] = {
|
||||
(char[]){0x09, 0x04},
|
||||
"久鼎智控",
|
||||
"智控键鼠套装",
|
||||
"1",
|
||||
"HID 智控键盘",
|
||||
"HID 智控鼠标",
|
||||
};
|
||||
|
||||
enum {
|
||||
ITF_NUM_KEYBOARD,
|
||||
ITF_NUM_MOUSE,
|
||||
ITF_NUM_TOTAL
|
||||
(char[]){0x09, 0x04}, // 0: 语言ID
|
||||
"久鼎智控", // 1: 厂商
|
||||
"智控键鼠套装", // 2: 产品
|
||||
"1", // 3: 序列号
|
||||
"HID 智控键盘", // 4: 键盘接口
|
||||
"HID 智控鼠标", // 5: 鼠标接口
|
||||
};
|
||||
|
||||
#define EPNUM_KEYBOARD 0x81
|
||||
#define EPNUM_MOUSE 0x82
|
||||
|
||||
// ==============================
|
||||
// 🔥 这里是修复重点!!!
|
||||
// ==============================
|
||||
static uint8_t const hid_configuration_descriptor[] = {
|
||||
TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, TUSB_DESC_TOTAL_LEN, TUSB_DESC_CONFIG_ATT_REMOTE_WAKEUP, 100),
|
||||
TUD_HID_DESCRIPTOR(ITF_NUM_KEYBOARD, 4, HID_ITF_PROTOCOL_KEYBOARD, sizeof(desc_hid_report), EPNUM_KEYBOARD, CFG_TUD_HID_EP_BUFSIZE, 10),
|
||||
TUD_HID_DESCRIPTOR(ITF_NUM_MOUSE, 5, HID_ITF_PROTOCOL_MOUSE, sizeof(desc_hid_report), EPNUM_MOUSE, CFG_TUD_HID_EP_BUFSIZE, 10)
|
||||
|
||||
// 键盘 HID 接口
|
||||
TUD_HID_DESCRIPTOR(
|
||||
ITF_NUM_KEYBOARD, // 接口号
|
||||
4, // 字符串索引
|
||||
0, // 协议 = 0(必须!)
|
||||
sizeof(desc_hid_report_kb),
|
||||
EPNUM_KEYBOARD,
|
||||
CFG_TUD_HID_EP_BUFSIZE,
|
||||
10
|
||||
),
|
||||
|
||||
// 鼠标 HID 接口
|
||||
TUD_HID_DESCRIPTOR(
|
||||
ITF_NUM_MOUSE, // 接口号
|
||||
5, // 字符串索引
|
||||
0, // 协议 = 0(必须!不能用 MOUSE 协议)
|
||||
sizeof(desc_hid_report_mouse),
|
||||
EPNUM_MOUSE,
|
||||
CFG_TUD_HID_EP_BUFSIZE,
|
||||
10
|
||||
)
|
||||
};
|
||||
|
||||
uint16_t tud_hid_get_report_cb(uint8_t instance, uint8_t report_id, hid_report_type_t report_type, uint8_t* buffer, uint16_t reqlen)
|
||||
@@ -97,11 +130,16 @@ bool rust_is_usb_mounted() {
|
||||
return mounted;
|
||||
}
|
||||
|
||||
//====================================================================
|
||||
// 键盘函数(不动)
|
||||
//====================================================================
|
||||
void rust_send_keyboard_report(uint8_t report_id, uint8_t modifier, uint8_t const* keycode) {
|
||||
tud_hid_keyboard_report(report_id, modifier, keycode);
|
||||
}
|
||||
|
||||
// 暴露鼠标报告函数给 Rust
|
||||
//====================================================================
|
||||
// 鼠标函数(正确 6 参数版)
|
||||
//====================================================================
|
||||
void rust_send_mouse_report(uint8_t report_id, uint8_t buttons, int8_t x, int8_t y, int8_t wheel, int8_t pan) {
|
||||
tud_hid_mouse_report(report_id, buttons, x, y, wheel, pan);
|
||||
}
|
||||
@@ -136,7 +174,7 @@ void app_main(void)
|
||||
.device = &desc_device,
|
||||
.qualifier = NULL,
|
||||
.string = hid_string_descriptor,
|
||||
.string_count = sizeof(hid_string_descriptor) / sizeof(hid_string_descriptor[0]),
|
||||
.string_count = sizeof(hid_string_descriptor)/sizeof(hid_string_descriptor[0]),
|
||||
.full_speed_config = hid_configuration_descriptor,
|
||||
.high_speed_config = NULL,
|
||||
},
|
||||
@@ -149,8 +187,7 @@ void app_main(void)
|
||||
ESP_LOGI(TAG, "✅ USB HID 设备启动成功");
|
||||
ESP_LOGI(TAG, "请连接 USB OTG 线到电脑");
|
||||
|
||||
// 暂时禁用 Rust 应用,先测试 USB 稳定性
|
||||
// rust_app_wrapper_init();
|
||||
rust_app_wrapper_init();
|
||||
|
||||
int count = 0;
|
||||
bool last_mounted = false;
|
||||
@@ -172,4 +209,4 @@ void app_main(void)
|
||||
}
|
||||
count++;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user