| /* |
| * Copyright 2024 Google LLC |
| * |
| * SPDX-License-Identifier: Apache-2.0 |
| */ |
| |
| #include <stdint.h> |
| #include <zephyr/dt-bindings/input/input-event-codes.h> |
| #include <zephyr/sys/util.h> |
| #include <zephyr/usb/class/hid.h> |
| |
| static uint8_t input_to_hid_map[] = { |
| [INPUT_KEY_A] = HID_KEY_A, |
| [INPUT_KEY_B] = HID_KEY_B, |
| [INPUT_KEY_C] = HID_KEY_C, |
| [INPUT_KEY_D] = HID_KEY_D, |
| [INPUT_KEY_E] = HID_KEY_E, |
| [INPUT_KEY_F] = HID_KEY_F, |
| [INPUT_KEY_G] = HID_KEY_G, |
| [INPUT_KEY_H] = HID_KEY_H, |
| [INPUT_KEY_I] = HID_KEY_I, |
| [INPUT_KEY_J] = HID_KEY_J, |
| [INPUT_KEY_K] = HID_KEY_K, |
| [INPUT_KEY_L] = HID_KEY_L, |
| [INPUT_KEY_M] = HID_KEY_M, |
| [INPUT_KEY_N] = HID_KEY_N, |
| [INPUT_KEY_O] = HID_KEY_O, |
| [INPUT_KEY_P] = HID_KEY_P, |
| [INPUT_KEY_Q] = HID_KEY_Q, |
| [INPUT_KEY_R] = HID_KEY_R, |
| [INPUT_KEY_S] = HID_KEY_S, |
| [INPUT_KEY_T] = HID_KEY_T, |
| [INPUT_KEY_U] = HID_KEY_U, |
| [INPUT_KEY_V] = HID_KEY_V, |
| [INPUT_KEY_W] = HID_KEY_W, |
| [INPUT_KEY_X] = HID_KEY_X, |
| [INPUT_KEY_Y] = HID_KEY_Y, |
| [INPUT_KEY_Z] = HID_KEY_Z, |
| [INPUT_KEY_1] = HID_KEY_1, |
| [INPUT_KEY_2] = HID_KEY_2, |
| [INPUT_KEY_3] = HID_KEY_3, |
| [INPUT_KEY_4] = HID_KEY_4, |
| [INPUT_KEY_5] = HID_KEY_5, |
| [INPUT_KEY_6] = HID_KEY_6, |
| [INPUT_KEY_7] = HID_KEY_7, |
| [INPUT_KEY_8] = HID_KEY_8, |
| [INPUT_KEY_9] = HID_KEY_9, |
| [INPUT_KEY_0] = HID_KEY_0, |
| [INPUT_KEY_ENTER] = HID_KEY_ENTER, |
| [INPUT_KEY_ESC] = HID_KEY_ESC, |
| [INPUT_KEY_BACKSPACE] = HID_KEY_BACKSPACE, |
| [INPUT_KEY_TAB] = HID_KEY_TAB, |
| [INPUT_KEY_SPACE] = HID_KEY_SPACE, |
| [INPUT_KEY_MINUS] = HID_KEY_MINUS, |
| [INPUT_KEY_EQUAL] = HID_KEY_EQUAL, |
| [INPUT_KEY_LEFTBRACE] = HID_KEY_LEFTBRACE, |
| [INPUT_KEY_RIGHTBRACE] = HID_KEY_RIGHTBRACE, |
| [INPUT_KEY_BACKSLASH] = HID_KEY_BACKSLASH, |
| [INPUT_KEY_SEMICOLON] = HID_KEY_SEMICOLON, |
| [INPUT_KEY_APOSTROPHE] = HID_KEY_APOSTROPHE, |
| [INPUT_KEY_GRAVE] = HID_KEY_GRAVE, |
| [INPUT_KEY_COMMA] = HID_KEY_COMMA, |
| [INPUT_KEY_DOT] = HID_KEY_DOT, |
| [INPUT_KEY_SLASH] = HID_KEY_SLASH, |
| [INPUT_KEY_CAPSLOCK] = HID_KEY_CAPSLOCK, |
| [INPUT_KEY_F1] = HID_KEY_F1, |
| [INPUT_KEY_F2] = HID_KEY_F2, |
| [INPUT_KEY_F3] = HID_KEY_F3, |
| [INPUT_KEY_F4] = HID_KEY_F4, |
| [INPUT_KEY_F5] = HID_KEY_F5, |
| [INPUT_KEY_F6] = HID_KEY_F6, |
| [INPUT_KEY_F7] = HID_KEY_F7, |
| [INPUT_KEY_F8] = HID_KEY_F8, |
| [INPUT_KEY_F9] = HID_KEY_F9, |
| [INPUT_KEY_F10] = HID_KEY_F10, |
| [INPUT_KEY_F11] = HID_KEY_F11, |
| [INPUT_KEY_F12] = HID_KEY_F12, |
| [INPUT_KEY_SYSRQ] = HID_KEY_SYSRQ, |
| [INPUT_KEY_SCROLLLOCK] = HID_KEY_SCROLLLOCK, |
| [INPUT_KEY_PAUSE] = HID_KEY_PAUSE, |
| [INPUT_KEY_INSERT] = HID_KEY_INSERT, |
| [INPUT_KEY_HOME] = HID_KEY_HOME, |
| [INPUT_KEY_PAGEUP] = HID_KEY_PAGEUP, |
| [INPUT_KEY_DELETE] = HID_KEY_DELETE, |
| [INPUT_KEY_END] = HID_KEY_END, |
| [INPUT_KEY_PAGEDOWN] = HID_KEY_PAGEDOWN, |
| [INPUT_KEY_RIGHT] = HID_KEY_RIGHT, |
| [INPUT_KEY_LEFT] = HID_KEY_LEFT, |
| [INPUT_KEY_DOWN] = HID_KEY_DOWN, |
| [INPUT_KEY_UP] = HID_KEY_UP, |
| [INPUT_KEY_NUMLOCK] = HID_KEY_NUMLOCK, |
| [INPUT_KEY_KPSLASH] = HID_KEY_KPSLASH, |
| [INPUT_KEY_KPASTERISK] = HID_KEY_KPASTERISK, |
| [INPUT_KEY_KPMINUS] = HID_KEY_KPMINUS, |
| [INPUT_KEY_KPPLUS] = HID_KEY_KPPLUS, |
| [INPUT_KEY_KPENTER] = HID_KEY_KPENTER, |
| [INPUT_KEY_KP1] = HID_KEY_KP_1, |
| [INPUT_KEY_KP2] = HID_KEY_KP_2, |
| [INPUT_KEY_KP3] = HID_KEY_KP_3, |
| [INPUT_KEY_KP4] = HID_KEY_KP_4, |
| [INPUT_KEY_KP5] = HID_KEY_KP_5, |
| [INPUT_KEY_KP6] = HID_KEY_KP_6, |
| [INPUT_KEY_KP7] = HID_KEY_KP_7, |
| [INPUT_KEY_KP8] = HID_KEY_KP_8, |
| [INPUT_KEY_KP9] = HID_KEY_KP_9, |
| [INPUT_KEY_KP0] = HID_KEY_KP_0, |
| }; |
| |
| int16_t input_to_hid_code(uint16_t input_code) |
| { |
| uint8_t hid_code; |
| |
| if (input_code >= ARRAY_SIZE(input_to_hid_map)) { |
| return -1; |
| } |
| |
| hid_code = input_to_hid_map[input_code]; |
| |
| if (hid_code == 0) { |
| return -1; |
| } |
| |
| return hid_code; |
| } |
| |
| uint8_t input_to_hid_modifier(uint16_t input_code) |
| { |
| switch (input_code) { |
| case INPUT_KEY_LEFTCTRL: |
| return HID_KBD_MODIFIER_LEFT_CTRL; |
| case INPUT_KEY_LEFTSHIFT: |
| return HID_KBD_MODIFIER_LEFT_SHIFT; |
| case INPUT_KEY_LEFTALT: |
| return HID_KBD_MODIFIER_LEFT_ALT; |
| case INPUT_KEY_LEFTMETA: |
| return HID_KBD_MODIFIER_LEFT_UI; |
| case INPUT_KEY_RIGHTCTRL: |
| return HID_KBD_MODIFIER_RIGHT_CTRL; |
| case INPUT_KEY_RIGHTSHIFT: |
| return HID_KBD_MODIFIER_RIGHT_SHIFT; |
| case INPUT_KEY_RIGHTALT: |
| return HID_KBD_MODIFIER_RIGHT_ALT; |
| case INPUT_KEY_RIGHTMETA: |
| return HID_KBD_MODIFIER_RIGHT_UI; |
| default: |
| return HID_KBD_MODIFIER_NONE; |
| } |
| } |