diff options
Diffstat (limited to 'hid')
-rw-r--r-- | hid/lib/drivers/driver.h | 42 | ||||
-rw-r--r-- | hid/lib/drivers/keyboard.h | 15 | ||||
-rw-r--r-- | hid/lib/drivers/mouse.h | 32 | ||||
-rw-r--r-- | hid/src/main.cpp | 12 | ||||
-rw-r--r-- | hid/src/usb/hid.h | 14 |
5 files changed, 98 insertions, 17 deletions
diff --git a/hid/lib/drivers/driver.h b/hid/lib/drivers/driver.h new file mode 100644 index 00000000..520c7456 --- /dev/null +++ b/hid/lib/drivers/driver.h @@ -0,0 +1,42 @@ +/***************************************************************************** +# # +# 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 <stdint.h> + +namespace DRIVERS { + + enum type { + USB_MOUSE_ABSOLUTE, + USB_MOUSE_RELATIVE, + USB_MOUSE_ABSOLUTE_WIN98, + }; + + class Driver { + public: + Driver(type _type) : _type(_type) {} + uint8_t getType() { return _type; } + + private: + type _type; + }; +} diff --git a/hid/lib/drivers/keyboard.h b/hid/lib/drivers/keyboard.h index fe724247..44ffe61a 100644 --- a/hid/lib/drivers/keyboard.h +++ b/hid/lib/drivers/keyboard.h @@ -21,9 +21,14 @@ #pragma once +#include <stdint.h> +#include "driver.h" -typedef struct { - bool caps; - bool scroll; - bool num; -} KeyboardLedsState; +namespace DRIVERS { + + typedef struct { + bool caps; + bool scroll; + bool num; + } KeyboardLedsState; +} diff --git a/hid/lib/drivers/mouse.h b/hid/lib/drivers/mouse.h new file mode 100644 index 00000000..8f76b041 --- /dev/null +++ b/hid/lib/drivers/mouse.h @@ -0,0 +1,32 @@ +/***************************************************************************** +# # +# 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 <stdint.h> +#include "driver.h" + +namespace DRIVERS { + + class Mouse : public Driver { + using Driver::Driver; + }; +} diff --git a/hid/src/main.cpp b/hid/src/main.cpp index a512b65b..ce2d8da9 100644 --- a/hid/src/main.cpp +++ b/hid/src/main.cpp @@ -125,7 +125,11 @@ static void _initOutputs() { switch (mouse) { # ifdef HID_WITH_USB case PROTO::OUTPUTS1::MOUSE::USB_ABS: - case PROTO::OUTPUTS1::MOUSE::USB_WIN98: _usb_mouse_abs = new UsbMouseAbsolute(); break; + _usb_mouse_abs = new UsbMouseAbsolute(DRIVERS::USB_MOUSE_ABSOLUTE); + break; + case PROTO::OUTPUTS1::MOUSE::USB_WIN98: + _usb_mouse_abs = new UsbMouseAbsolute(DRIVERS::USB_MOUSE_ABSOLUTE_WIN98); + break; case PROTO::OUTPUTS1::MOUSE::USB_REL: _usb_mouse_rel = new UsbMouseRelative(); break; # endif } @@ -147,7 +151,7 @@ static void _initOutputs() { # ifdef HID_WITH_USB_WIN98 case PROTO::OUTPUTS1::MOUSE::USB_WIN98: # endif - _usb_mouse_abs->begin(mouse == PROTO::OUTPUTS1::MOUSE::USB_WIN98); + _usb_mouse_abs->begin(); break; case PROTO::OUTPUTS1::MOUSE::USB_REL: _usb_mouse_rel->begin(); break; # endif @@ -299,8 +303,8 @@ static void _sendResponse(uint8_t code) { response[2] |= PROTO::OUTPUTS1::KEYBOARD::PS2; } if (_usb_mouse_abs) { - response[1] |= (_usb_mouse_abs->isOffline() ? PROTO::PONG::MOUSE_OFFLINE : 0); - if (_usb_mouse_abs->isWin98FixEnabled()) { + response[1] |= _usb_mouse_abs->isOffline() ? PROTO::PONG::MOUSE_OFFLINE : 0; + if (_usb_mouse_abs->getType() == DRIVERS::USB_MOUSE_ABSOLUTE_WIN98) { response[2] |= PROTO::OUTPUTS1::MOUSE::USB_WIN98; } else { response[2] |= PROTO::OUTPUTS1::MOUSE::USB_ABS; diff --git a/hid/src/usb/hid.h b/hid/src/usb/hid.h index cd58a1f8..6e5d7279 100644 --- a/hid/src/usb/hid.h +++ b/hid/src/usb/hid.h @@ -26,12 +26,14 @@ #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 @@ -147,17 +149,13 @@ class UsbKeyboard { if (down_select) _sendButton(MOUSE_NEXT, down_state); \ } -class UsbMouseAbsolute { +class UsbMouseAbsolute : public DRIVERS::Mouse { public: - UsbMouseAbsolute() {} + UsbMouseAbsolute(DRIVERS::type _type) : Mouse(_type) {} - void begin(bool win98_fix) { + void begin() { _mouse.begin(); - _mouse.setWin98FixEnabled(win98_fix); - } - - bool isWin98FixEnabled() { - return _mouse.isWin98FixEnabled(); + _mouse.setWin98FixEnabled(getType() == DRIVERS::USB_MOUSE_ABSOLUTE_WIN98); } void clear() { |