diff options
Diffstat (limited to 'hid/src/usb')
-rw-r--r-- | hid/src/usb/hid.h | 229 | ||||
-rw-r--r-- | hid/src/usb/keymap.h | 139 | ||||
-rw-r--r-- | hid/src/usb/keymap.h.mako | 35 |
3 files changed, 0 insertions, 403 deletions
diff --git a/hid/src/usb/hid.h b/hid/src/usb/hid.h deleted file mode 100644 index ca923352..00000000 --- a/hid/src/usb/hid.h +++ /dev/null @@ -1,229 +0,0 @@ -/***************************************************************************** -# # -# KVMD - The main PiKVM daemon. # -# # -# Copyright (C) 2018-2022 Maxim Devaev <[email protected]> # -# # -# This program is free software: you can redistribute it and/or modify # -# it under the terms of the GNU General Public License as published by # -# the Free Software Foundation, either version 3 of the License, or # -# (at your option) any later version. # -# # -# This program is distributed in the hope that it will be useful, # -# but WITHOUT ANY WARRANTY; without even the implied warranty of # -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # -# GNU General Public License for more details. # -# # -# You should have received a copy of the GNU General Public License # -# along with this program. If not, see <https://www.gnu.org/licenses/>. # -# # -*****************************************************************************/ - - -#pragma once - -#include <Arduino.h> -#include <HID-Project.h> - -#include "keyboard.h" -#include "mouse.h" -#include "../tools.h" -#ifdef AUM -# include "../aum.h" -#endif -#include "keymap.h" - -using namespace DRIVERS; - -// ----------------------------------------------------------------------------- -#ifdef HID_USB_CHECK_ENDPOINT -// https://github.com/arduino/ArduinoCore-avr/blob/2f67c916f6ab6193c404eebe22efe901e0f9542d/cores/arduino/USBCore.cpp#L249 -// https://sourceforge.net/p/arduinomidilib/svn/41/tree/branch/3.1/Teensy/teensy_core/usb_midi/usb_api.cpp#l103 -# ifdef AUM -# define CHECK_AUM_USB { if (!aumIsUsbConnected()) { return true; } } -# else -# define CHECK_AUM_USB -# endif -# define CLS_IS_OFFLINE(_hid) \ - bool isOffline() override { \ - CHECK_AUM_USB; \ - uint8_t ep = _hid.getPluggedEndpoint(); \ - uint8_t intr_state = SREG; \ - cli(); \ - UENUM = ep & 7; \ - bool rw_allowed = UEINTX & (1 << RWAL); \ - SREG = intr_state; \ - if (rw_allowed) { \ - return false; \ - } \ - return true; \ - } -# define CHECK_HID_EP { if (isOffline()) return; } - -#else -# define CLS_IS_OFFLINE(_hid) \ - bool isOffline() override { \ - return false; \ - } -# define CHECK_HID_EP - -#endif - -class UsbKeyboard : public DRIVERS::Keyboard { - public: - UsbKeyboard() : DRIVERS::Keyboard(DRIVERS::USB_KEYBOARD) {} - - void begin() override { - _kbd.begin(); - } - - void periodic() override { -# ifdef HID_USB_CHECK_ENDPOINT - static unsigned long prev_ts = 0; - if (is_micros_timed_out(prev_ts, 50000)) { - static bool prev_online = true; - bool online = !isOffline(); - if (!_sent || (online && !prev_online)) { - _sendCurrent(); - } - prev_online = online; - prev_ts = micros(); - } -# endif - } - - void clear() override { - _kbd.releaseAll(); - } - - void sendKey(uint8_t code, bool state) override { - KeyboardKeycode usb_code = keymapUsb(code); - if (usb_code != KEY_ERROR_UNDEFINED) { - if (state ? _kbd.add(usb_code) : _kbd.remove(usb_code)) { - _sendCurrent(); - } - } - } - - CLS_IS_OFFLINE(_kbd) - - KeyboardLedsState getLeds() override { - uint8_t leds = _kbd.getLeds(); - KeyboardLedsState result = { - .caps = leds & LED_CAPS_LOCK, - .scroll = leds & LED_SCROLL_LOCK, - .num = leds & LED_NUM_LOCK, - }; - return result; - } - - private: - BootKeyboard_ _kbd; - bool _sent = true; - - void _sendCurrent() { -# ifdef HID_USB_CHECK_ENDPOINT - if (isOffline()) { - _sent = false; - } else { -# endif - _sent = (_kbd.send() >= 0); -# ifdef HID_USB_CHECK_ENDPOINT - } -# endif - } -}; - -#define CLS_SEND_BUTTONS \ - void sendButtons( \ - bool left_select, bool left_state, \ - bool right_select, bool right_state, \ - bool middle_select, bool middle_state, \ - bool up_select, bool up_state, \ - bool down_select, bool down_state \ - ) override { \ - if (left_select) _sendButton(MOUSE_LEFT, left_state); \ - if (right_select) _sendButton(MOUSE_RIGHT, right_state); \ - if (middle_select) _sendButton(MOUSE_MIDDLE, middle_state); \ - if (up_select) _sendButton(MOUSE_PREV, up_state); \ - if (down_select) _sendButton(MOUSE_NEXT, down_state); \ - } - -class UsbMouseAbsolute : public DRIVERS::Mouse { - public: - UsbMouseAbsolute(DRIVERS::type _type) : Mouse(_type) {} - - void begin() override { - _mouse.begin(); - _mouse.setWin98FixEnabled(getType() == DRIVERS::USB_MOUSE_ABSOLUTE_WIN98); - } - - void clear() override { - _mouse.releaseAll(); - } - - CLS_SEND_BUTTONS - - void sendMove(int x, int y) override { - CHECK_HID_EP; - _mouse.moveTo(x, y); - } - - void sendWheel(int delta_y) override { - // delta_x is not supported by hid-project now - CHECK_HID_EP; - _mouse.move(0, 0, delta_y); - } - - CLS_IS_OFFLINE(_mouse) - - private: - SingleAbsoluteMouse_ _mouse; - - void _sendButton(uint8_t button, bool state) { - CHECK_HID_EP; - if (state) _mouse.press(button); - else _mouse.release(button); - } -}; - -class UsbMouseRelative : public DRIVERS::Mouse { - public: - UsbMouseRelative() : DRIVERS::Mouse(DRIVERS::USB_MOUSE_RELATIVE) {} - - void begin() override { - _mouse.begin(); - } - - void clear() override { - _mouse.releaseAll(); - } - - CLS_SEND_BUTTONS - - void sendRelative(int x, int y) override { - CHECK_HID_EP; - _mouse.move(x, y, 0); - } - - void sendWheel(int delta_y) override { - // delta_x is not supported by hid-project now - CHECK_HID_EP; - _mouse.move(0, 0, delta_y); - } - - CLS_IS_OFFLINE(_mouse) - - private: - BootMouse_ _mouse; - - void _sendButton(uint8_t button, bool state) { - CHECK_HID_EP; - if (state) _mouse.press(button); - else _mouse.release(button); - } -}; - -#undef CLS_SEND_BUTTONS -#undef CLS_IS_OFFLINE -#undef CHECK_HID_EP diff --git a/hid/src/usb/keymap.h b/hid/src/usb/keymap.h deleted file mode 100644 index 224a181c..00000000 --- a/hid/src/usb/keymap.h +++ /dev/null @@ -1,139 +0,0 @@ -/***************************************************************************** -# # -# KVMD - The main PiKVM daemon. # -# # -# Copyright (C) 2018-2022 Maxim Devaev <[email protected]> # -# # -# This program is free software: you can redistribute it and/or modify # -# it under the terms of the GNU General Public License as published by # -# the Free Software Foundation, either version 3 of the License, or # -# (at your option) any later version. # -# # -# This program is distributed in the hope that it will be useful, # -# but WITHOUT ANY WARRANTY; without even the implied warranty of # -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # -# GNU General Public License for more details. # -# # -# You should have received a copy of the GNU General Public License # -# along with this program. If not, see <https://www.gnu.org/licenses/>. # -# # -*****************************************************************************/ - - -#pragma once - -#include <HID-Project.h> - - -KeyboardKeycode keymapUsb(uint8_t code) { - switch (code) { - case 1: return KEY_A; - case 2: return KEY_B; - case 3: return KEY_C; - case 4: return KEY_D; - case 5: return KEY_E; - case 6: return KEY_F; - case 7: return KEY_G; - case 8: return KEY_H; - case 9: return KEY_I; - case 10: return KEY_J; - case 11: return KEY_K; - case 12: return KEY_L; - case 13: return KEY_M; - case 14: return KEY_N; - case 15: return KEY_O; - case 16: return KEY_P; - case 17: return KEY_Q; - case 18: return KEY_R; - case 19: return KEY_S; - case 20: return KEY_T; - case 21: return KEY_U; - case 22: return KEY_V; - case 23: return KEY_W; - case 24: return KEY_X; - case 25: return KEY_Y; - case 26: return KEY_Z; - case 27: return KEY_1; - case 28: return KEY_2; - case 29: return KEY_3; - case 30: return KEY_4; - case 31: return KEY_5; - case 32: return KEY_6; - case 33: return KEY_7; - case 34: return KEY_8; - case 35: return KEY_9; - case 36: return KEY_0; - case 37: return KEY_ENTER; - case 38: return KEY_ESC; - case 39: return KEY_BACKSPACE; - case 40: return KEY_TAB; - case 41: return KEY_SPACE; - case 42: return KEY_MINUS; - case 43: return KEY_EQUAL; - case 44: return KEY_LEFT_BRACE; - case 45: return KEY_RIGHT_BRACE; - case 46: return KEY_BACKSLASH; - case 47: return KEY_SEMICOLON; - case 48: return KEY_QUOTE; - case 49: return KEY_TILDE; - case 50: return KEY_COMMA; - case 51: return KEY_PERIOD; - case 52: return KEY_SLASH; - case 53: return KEY_CAPS_LOCK; - case 54: return KEY_F1; - case 55: return KEY_F2; - case 56: return KEY_F3; - case 57: return KEY_F4; - case 58: return KEY_F5; - case 59: return KEY_F6; - case 60: return KEY_F7; - case 61: return KEY_F8; - case 62: return KEY_F9; - case 63: return KEY_F10; - case 64: return KEY_F11; - case 65: return KEY_F12; - case 66: return KEY_PRINT; - case 67: return KEY_INSERT; - case 68: return KEY_HOME; - case 69: return KEY_PAGE_UP; - case 70: return KEY_DELETE; - case 71: return KEY_END; - case 72: return KEY_PAGE_DOWN; - case 73: return KEY_RIGHT_ARROW; - case 74: return KEY_LEFT_ARROW; - case 75: return KEY_DOWN_ARROW; - case 76: return KEY_UP_ARROW; - case 77: return KEY_LEFT_CTRL; - case 78: return KEY_LEFT_SHIFT; - case 79: return KEY_LEFT_ALT; - case 80: return KEY_LEFT_GUI; - case 81: return KEY_RIGHT_CTRL; - case 82: return KEY_RIGHT_SHIFT; - case 83: return KEY_RIGHT_ALT; - case 84: return KEY_RIGHT_GUI; - case 85: return KEY_PAUSE; - case 86: return KEY_SCROLL_LOCK; - case 87: return KEY_NUM_LOCK; - case 88: return KEY_MENU; - case 89: return KEYPAD_DIVIDE; - case 90: return KEYPAD_MULTIPLY; - case 91: return KEYPAD_SUBTRACT; - case 92: return KEYPAD_ADD; - case 93: return KEYPAD_ENTER; - case 94: return KEYPAD_1; - case 95: return KEYPAD_2; - case 96: return KEYPAD_3; - case 97: return KEYPAD_4; - case 98: return KEYPAD_5; - case 99: return KEYPAD_6; - case 100: return KEYPAD_7; - case 101: return KEYPAD_8; - case 102: return KEYPAD_9; - case 103: return KEYPAD_0; - case 104: return KEYPAD_DOT; - case 105: return KEY_POWER; - case 106: return KEY_NON_US; - case 107: return KEY_INTERNATIONAL3; - default: return KEY_ERROR_UNDEFINED; - } -} diff --git a/hid/src/usb/keymap.h.mako b/hid/src/usb/keymap.h.mako deleted file mode 100644 index fe295bea..00000000 --- a/hid/src/usb/keymap.h.mako +++ /dev/null @@ -1,35 +0,0 @@ -/***************************************************************************** -# # -# KVMD - The main PiKVM daemon. # -# # -# Copyright (C) 2018-2022 Maxim Devaev <[email protected]> # -# # -# This program is free software: you can redistribute it and/or modify # -# it under the terms of the GNU General Public License as published by # -# the Free Software Foundation, either version 3 of the License, or # -# (at your option) any later version. # -# # -# This program is distributed in the hope that it will be useful, # -# but WITHOUT ANY WARRANTY; without even the implied warranty of # -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # -# GNU General Public License for more details. # -# # -# You should have received a copy of the GNU General Public License # -# along with this program. If not, see <https://www.gnu.org/licenses/>. # -# # -*****************************************************************************/ - - -#pragma once - -#include <HID-Project.h> - -<%! import operator %> -KeyboardKeycode keymapUsb(uint8_t code) { - switch (code) { -% for km in sorted(keymap, key=operator.attrgetter("mcu_code")): - case ${km.mcu_code}: return ${km.arduino_name}; -% endfor - default: return KEY_ERROR_UNDEFINED; - } -} |