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);