summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsakumisu <[email protected]>2025-04-17 11:28:53 +0800
committersakumisu <[email protected]>2025-04-17 11:29:18 +0800
commit947f8530ef2ae379ef0f5706683ae64eb6138525 (patch)
tree9bea62472d93e6cd3ca905ac18861ebebfc9c7bb
parent73c8062518d82e994011b0f9136226c86cc5a1c6 (diff)
feat(platform/lvgl): enable hid boot protocol
Signed-off-by: sakumisu <[email protected]>
-rw-r--r--platform/lvgl/usbh_hid_lvgl.c152
1 files changed, 77 insertions, 75 deletions
diff --git a/platform/lvgl/usbh_hid_lvgl.c b/platform/lvgl/usbh_hid_lvgl.c
index 253c10a0..092fcb11 100644
--- a/platform/lvgl/usbh_hid_lvgl.c
+++ b/platform/lvgl/usbh_hid_lvgl.c
@@ -10,7 +10,6 @@
#include "usbh_hid.h"
#include "usbh_hid_lvgl.h"
-
/* LVGL image of cursor */
LV_IMG_DECLARE(img_cursor)
@@ -63,22 +62,22 @@ static void usbh_hid_lvgl_read_mouse(lv_indev_t *indev_drv, lv_indev_data_t *dat
/* Get coordinates by rotation with sensitivity */
switch (lv_display_get_rotation(disp)) {
- case LV_DISPLAY_ROTATION_0:
- data->point.x = ctx->mouse.x / ctx->mouse.sensitivity;
- data->point.y = ctx->mouse.y / ctx->mouse.sensitivity;
- break;
- case LV_DISPLAY_ROTATION_90:
- data->point.y = width - ctx->mouse.x / ctx->mouse.sensitivity;
- data->point.x = ctx->mouse.y / ctx->mouse.sensitivity;
- break;
- case LV_DISPLAY_ROTATION_180:
- data->point.x = width - ctx->mouse.x / ctx->mouse.sensitivity;
- data->point.y = height - ctx->mouse.y / ctx->mouse.sensitivity;
- break;
- case LV_DISPLAY_ROTATION_270:
- data->point.y = ctx->mouse.x / ctx->mouse.sensitivity;
- data->point.x = height - ctx->mouse.y / ctx->mouse.sensitivity;
- break;
+ case LV_DISPLAY_ROTATION_0:
+ data->point.x = ctx->mouse.x / ctx->mouse.sensitivity;
+ data->point.y = ctx->mouse.y / ctx->mouse.sensitivity;
+ break;
+ case LV_DISPLAY_ROTATION_90:
+ data->point.y = width - ctx->mouse.x / ctx->mouse.sensitivity;
+ data->point.x = ctx->mouse.y / ctx->mouse.sensitivity;
+ break;
+ case LV_DISPLAY_ROTATION_180:
+ data->point.x = width - ctx->mouse.x / ctx->mouse.sensitivity;
+ data->point.y = height - ctx->mouse.y / ctx->mouse.sensitivity;
+ break;
+ case LV_DISPLAY_ROTATION_270:
+ data->point.y = ctx->mouse.x / ctx->mouse.sensitivity;
+ data->point.x = height - ctx->mouse.y / ctx->mouse.sensitivity;
+ break;
}
if (ctx->mouse.left_button) {
@@ -178,64 +177,65 @@ static char usb_hid_get_keyboard_char(uint8_t key, uint8_t shift)
{
char ret_key = 0;
- const uint8_t keycode2ascii [57][2] = {
- {0, 0}, /* HID_KEY_NO_PRESS */
- {0, 0}, /* HID_KEY_ROLLOVER */
- {0, 0}, /* HID_KEY_POST_FAIL */
- {0, 0}, /* HID_KEY_ERROR_UNDEFINED */
- {'a', 'A'}, /* HID_KEY_A */
- {'b', 'B'}, /* HID_KEY_B */
- {'c', 'C'}, /* HID_KEY_C */
- {'d', 'D'}, /* HID_KEY_D */
- {'e', 'E'}, /* HID_KEY_E */
- {'f', 'F'}, /* HID_KEY_F */
- {'g', 'G'}, /* HID_KEY_G */
- {'h', 'H'}, /* HID_KEY_H */
- {'i', 'I'}, /* HID_KEY_I */
- {'j', 'J'}, /* HID_KEY_J */
- {'k', 'K'}, /* HID_KEY_K */
- {'l', 'L'}, /* HID_KEY_L */
- {'m', 'M'}, /* HID_KEY_M */
- {'n', 'N'}, /* HID_KEY_N */
- {'o', 'O'}, /* HID_KEY_O */
- {'p', 'P'}, /* HID_KEY_P */
- {'q', 'Q'}, /* HID_KEY_Q */
- {'r', 'R'}, /* HID_KEY_R */
- {'s', 'S'}, /* HID_KEY_S */
- {'t', 'T'}, /* HID_KEY_T */
- {'u', 'U'}, /* HID_KEY_U */
- {'v', 'V'}, /* HID_KEY_V */
- {'w', 'W'}, /* HID_KEY_W */
- {'x', 'X'}, /* HID_KEY_X */
- {'y', 'Y'}, /* HID_KEY_Y */
- {'z', 'Z'}, /* HID_KEY_Z */
- {'1', '!'}, /* HID_KEY_1 */
- {'2', '@'}, /* HID_KEY_2 */
- {'3', '#'}, /* HID_KEY_3 */
- {'4', '$'}, /* HID_KEY_4 */
- {'5', '%'}, /* HID_KEY_5 */
- {'6', '^'}, /* HID_KEY_6 */
- {'7', '&'}, /* HID_KEY_7 */
- {'8', '*'}, /* HID_KEY_8 */
- {'9', '('}, /* HID_KEY_9 */
- {'0', ')'}, /* HID_KEY_0 */
- {'\r', '\r'}, /* HID_KEY_ENTER */
- {0, 0}, /* HID_KEY_ESC */
- {'\b', 0}, /* HID_KEY_DEL */
- {0, 0}, /* HID_KEY_TAB */
- {' ', ' '}, /* HID_KEY_SPACE */
- {'-', '_'}, /* HID_KEY_MINUS */
- {'=', '+'}, /* HID_KEY_EQUAL */
- {'[', '{'}, /* HID_KEY_OPEN_BRACKET */
- {']', '}'}, /* HID_KEY_CLOSE_BRACKET */
- {'\\', '|'}, /* HID_KEY_BACK_SLASH */
- {'\\', '|'}, /* HID_KEY_SHARP */ // HOTFIX: for NonUS Keyboards repeat HID_KEY_BACK_SLASH
- {';', ':'}, /* HID_KEY_COLON */
- {'\'', '"'}, /* HID_KEY_QUOTE */
- {'`', '~'}, /* HID_KEY_TILDE */
- {',', '<'}, /* HID_KEY_LESS */
- {'.', '>'}, /* HID_KEY_GREATER */
- {'/', '?'} /* HID_KEY_SLASH */
+ const uint8_t keycode2ascii[57][2] = {
+ { 0, 0 }, /* HID_KEY_NO_PRESS */
+ { 0, 0 }, /* HID_KEY_ROLLOVER */
+ { 0, 0 }, /* HID_KEY_POST_FAIL */
+ { 0, 0 }, /* HID_KEY_ERROR_UNDEFINED */
+ { 'a', 'A' }, /* HID_KEY_A */
+ { 'b', 'B' }, /* HID_KEY_B */
+ { 'c', 'C' }, /* HID_KEY_C */
+ { 'd', 'D' }, /* HID_KEY_D */
+ { 'e', 'E' }, /* HID_KEY_E */
+ { 'f', 'F' }, /* HID_KEY_F */
+ { 'g', 'G' }, /* HID_KEY_G */
+ { 'h', 'H' }, /* HID_KEY_H */
+ { 'i', 'I' }, /* HID_KEY_I */
+ { 'j', 'J' }, /* HID_KEY_J */
+ { 'k', 'K' }, /* HID_KEY_K */
+ { 'l', 'L' }, /* HID_KEY_L */
+ { 'm', 'M' }, /* HID_KEY_M */
+ { 'n', 'N' }, /* HID_KEY_N */
+ { 'o', 'O' }, /* HID_KEY_O */
+ { 'p', 'P' }, /* HID_KEY_P */
+ { 'q', 'Q' }, /* HID_KEY_Q */
+ { 'r', 'R' }, /* HID_KEY_R */
+ { 's', 'S' }, /* HID_KEY_S */
+ { 't', 'T' }, /* HID_KEY_T */
+ { 'u', 'U' }, /* HID_KEY_U */
+ { 'v', 'V' }, /* HID_KEY_V */
+ { 'w', 'W' }, /* HID_KEY_W */
+ { 'x', 'X' }, /* HID_KEY_X */
+ { 'y', 'Y' }, /* HID_KEY_Y */
+ { 'z', 'Z' }, /* HID_KEY_Z */
+ { '1', '!' }, /* HID_KEY_1 */
+ { '2', '@' }, /* HID_KEY_2 */
+ { '3', '#' }, /* HID_KEY_3 */
+ { '4', '$' }, /* HID_KEY_4 */
+ { '5', '%' }, /* HID_KEY_5 */
+ { '6', '^' }, /* HID_KEY_6 */
+ { '7', '&' }, /* HID_KEY_7 */
+ { '8', '*' }, /* HID_KEY_8 */
+ { '9', '(' }, /* HID_KEY_9 */
+ { '0', ')' }, /* HID_KEY_0 */
+ { '\r', '\r' }, /* HID_KEY_ENTER */
+ { 0, 0 }, /* HID_KEY_ESC */
+ { '\b', 0 }, /* HID_KEY_DEL */
+ { 0, 0 }, /* HID_KEY_TAB */
+ { ' ', ' ' }, /* HID_KEY_SPACE */
+ { '-', '_' }, /* HID_KEY_MINUS */
+ { '=', '+' }, /* HID_KEY_EQUAL */
+ { '[', '{' }, /* HID_KEY_OPEN_BRACKET */
+ { ']', '}' }, /* HID_KEY_CLOSE_BRACKET */
+ { '\\', '|' }, /* HID_KEY_BACK_SLASH */
+ { '\\', '|' },
+ /* HID_KEY_SHARP */ // HOTFIX: for NonUS Keyboards repeat HID_KEY_BACK_SLASH
+ { ';', ':' }, /* HID_KEY_COLON */
+ { '\'', '"' }, /* HID_KEY_QUOTE */
+ { '`', '~' }, /* HID_KEY_TILDE */
+ { ',', '<' }, /* HID_KEY_LESS */
+ { '.', '>' }, /* HID_KEY_GREATER */
+ { '/', '?' } /* HID_KEY_SLASH */
};
if (shift > 1) {
@@ -310,6 +310,8 @@ void usbh_hid_keyboard_callback(void *arg, int nbytes)
void usbh_hid_run(struct usbh_hid *hid_class)
{
+ usbh_hid_set_protocol(hid_class, 0);
+
if (hid_class->hport->config.intf[hid_class->intf].altsetting[0].intf_desc.bInterfaceProtocol == HID_PROTOCOL_KEYBOARD) {
usbh_int_urb_fill(&hid_class->intin_urb, hid_class->hport, hid_class->intin, hid_keyboard_buffer, hid_class->intin->wMaxPacketSize, 0,
usbh_hid_keyboard_callback, hid_class);