arduino hid: fixed mouse movement on windows

This commit is contained in:
Devaev Maxim 2019-10-05 02:42:06 +03:00
parent f5bbfeb8b5
commit da660d02cd
5 changed files with 35 additions and 1 deletions

View File

@ -10,7 +10,7 @@ upload:
clean-all: clean
clean:
rm -rf .pioenvs .piolibdeps
rm -rf .pio
help:
@ cat Makefile

18
hid/patch.py Normal file
View File

@ -0,0 +1,18 @@
from os.path import join
from os.path import exists
Import("env")
# =====
env_path = join(env["PROJECTLIBDEPS_DIR"], env["PIOENV"])
flag_path = join(env_path, ".patched")
if not exists(flag_path):
env.Execute(f"patch -p1 -d {join(env_path, 'HID-Project_ID523')} < {join('patches', 'absmouse.patch')}")
def touch_flag(*_, **__) -> None:
with open(flag_path, "w") as flag_file:
pass
env.Execute(touch_flag)

View File

@ -0,0 +1,12 @@
See /kvmd/apps/otg/hid/keyboard.py for details
--- a/src/SingleReport/SingleAbsoluteMouse.cpp 2019-07-13 21:16:23.000000000 +0300
+++ b/src/SingleReport/SingleAbsoluteMouse.cpp 2019-10-05 00:58:34.592003332 +0300
@@ -43,7 +43,7 @@
0x05, 0x01, /* USAGE_PAGE (Generic Desktop) */
0x09, 0x30, /* USAGE (X) */
0x09, 0x31, /* USAGE (Y) */
- 0x16, 0x00, 0x80, /* Logical Minimum (-32768) */
+ 0x16, 0x00, 0x00, /* Logical Minimum (0) */
0x26, 0xFF, 0x7F, /* Logical Maximum (32767) */
0x75, 0x10, /* Report Size (16), */
0x95, 0x02, /* Report Count (2), */

View File

@ -20,6 +20,7 @@ framework = arduino
upload_port = /dev/ttyACM0
lib_deps = ${common.lib_deps}
build_flags = -DCMD_SERIAL=Serial1
extra_scripts = post:patch.py
[env:serial_test]
platform = atmelavr
@ -28,3 +29,4 @@ framework = arduino
upload_port = /dev/ttyACM0
lib_deps = ${common.lib_deps}
build_flags = -DCMD_SERIAL=Serial
extra_scripts = post:patch.py

View File

@ -98,9 +98,11 @@ INLINE void cmdMouseButtonEvent(const uint8_t *buffer) { // 1 byte
INLINE void cmdMouseMoveEvent(const uint8_t *buffer) { // 4 bytes
int x = (int)buffer[0] << 8;
x |= (int)buffer[1];
x = (x + 32768) / 2; // See /kvmd/apps/otg/hid/keyboard.py for details
int y = (int)buffer[2] << 8;
y |= (int)buffer[3];
y = (y + 32768) / 2; // See /kvmd/apps/otg/hid/keyboard.py for details
SingleAbsoluteMouse.moveTo(x, y);
}