From 63a19333421643deb7250fa23eaaad1d47c8c31e Mon Sep 17 00:00:00 2001 From: Maxim Devaev Date: Thu, 1 May 2025 06:09:45 +0300 Subject: [PATCH] audio keys --- genmap.py | 4 +++- hid/arduino/lib/drivers-avr/ps2/keymap.h | 3 +++ hid/arduino/lib/drivers-avr/ps2/keymap.h.mako | 2 ++ hid/arduino/lib/drivers/usb-keymap.h | 4 ++++ hid/pico/src/ph_usb_keymap.h | 4 ++++ keymap.csv | 4 ++++ kvmd/keyboard/mappings.py | 12 ++++++++++++ 7 files changed, 32 insertions(+), 1 deletion(-) diff --git a/genmap.py b/genmap.py index 6ddc3fc0..1119aefa 100755 --- a/genmap.py +++ b/genmap.py @@ -108,7 +108,9 @@ def _parse_usb_key(key: str) -> _UsbKey: return _UsbKey(code, is_modifier) -def _parse_ps2_key(key: str) -> _Ps2Key: +def _parse_ps2_key(key: str) -> (_Ps2Key | None): + if ":" not in key: + return None (code_type, raw_code) = key.split(":") return _Ps2Key( code=int(raw_code, 16), diff --git a/hid/arduino/lib/drivers-avr/ps2/keymap.h b/hid/arduino/lib/drivers-avr/ps2/keymap.h index b864c8c1..e2187208 100644 --- a/hid/arduino/lib/drivers-avr/ps2/keymap.h +++ b/hid/arduino/lib/drivers-avr/ps2/keymap.h @@ -148,5 +148,8 @@ void keymapPs2(uint8_t code, Ps2KeyType *ps2_type, uint8_t *ps2_code) { case 109: *ps2_type = PS2_KEY_TYPE_REG; *ps2_code = 19; return; // KanaMode case 110: *ps2_type = PS2_KEY_TYPE_REG; *ps2_code = 100; return; // Convert case 111: *ps2_type = PS2_KEY_TYPE_REG; *ps2_code = 103; return; // NonConvert + case 112: *ps2_type = PS2_KEY_TYPE_SPEC; *ps2_code = 35; return; // AudioVolumeMute + case 113: *ps2_type = PS2_KEY_TYPE_SPEC; *ps2_code = 50; return; // AudioVolumeUp + case 114: *ps2_type = PS2_KEY_TYPE_SPEC; *ps2_code = 33; return; // AudioVolumeDown } } diff --git a/hid/arduino/lib/drivers-avr/ps2/keymap.h.mako b/hid/arduino/lib/drivers-avr/ps2/keymap.h.mako index 8e31e44d..6a1cd543 100644 --- a/hid/arduino/lib/drivers-avr/ps2/keymap.h.mako +++ b/hid/arduino/lib/drivers-avr/ps2/keymap.h.mako @@ -38,7 +38,9 @@ void keymapPs2(uint8_t code, Ps2KeyType *ps2_type, uint8_t *ps2_code) { switch (code) { % for km in sorted(keymap, key=operator.attrgetter("mcu_code")): + % if km.ps2_key is not None: case ${km.mcu_code}: *ps2_type = PS2_KEY_TYPE_${km.ps2_key.type.upper()}; *ps2_code = ${km.ps2_key.code}; return; // ${km.web_name} + % endif % endfor } } diff --git a/hid/arduino/lib/drivers/usb-keymap.h b/hid/arduino/lib/drivers/usb-keymap.h index 95134453..8c1421cf 100644 --- a/hid/arduino/lib/drivers/usb-keymap.h +++ b/hid/arduino/lib/drivers/usb-keymap.h @@ -136,6 +136,10 @@ uint8_t keymapUsb(uint8_t code) { case 109: return 136; // KanaMode case 110: return 138; // Convert case 111: return 139; // NonConvert + case 112: return 127; // AudioVolumeMute + case 113: return 128; // AudioVolumeUp + case 114: return 129; // AudioVolumeDown + case 115: return 111; // F20 default: return 0; } } diff --git a/hid/pico/src/ph_usb_keymap.h b/hid/pico/src/ph_usb_keymap.h index f2481e41..c7d98ef8 100644 --- a/hid/pico/src/ph_usb_keymap.h +++ b/hid/pico/src/ph_usb_keymap.h @@ -138,6 +138,10 @@ inline u8 ph_usb_keymap(u8 key) { case 109: return 136; // KanaMode case 110: return 138; // Convert case 111: return 139; // NonConvert + case 112: return 127; // AudioVolumeMute + case 113: return 128; // AudioVolumeUp + case 114: return 129; // AudioVolumeDown + case 115: return 111; // F20 } return 0; } diff --git a/keymap.csv b/keymap.csv index 3691d9ca..93454eb7 100644 --- a/keymap.csv +++ b/keymap.csv @@ -110,3 +110,7 @@ IntlRo,KEY_RO,108,0x87,reg:0x51,0x73, KanaMode,KEY_KATAKANA,109,0x88,reg:0x13,0x70, Convert,KEY_HENKAN,110,0x8a,reg:0x64,0x79, NonConvert,KEY_MUHENKAN,111,0x8b,reg:0x67,0x7b, +AudioVolumeMute,KEY_MUTE,112,0x7f,spec:0x23,0xe020, +AudioVolumeUp,KEY_VOLUMEUP,113,0x80,spec:0x32,0xe030, +AudioVolumeDown,KEY_VOLUMEDOWN,114,0x81,spec:0x21,0xe02e, +F20,KEY_F20,115,0x6f,,0x5a, diff --git a/kvmd/keyboard/mappings.py b/kvmd/keyboard/mappings.py index 0be56d7d..5a66f030 100644 --- a/kvmd/keyboard/mappings.py +++ b/kvmd/keyboard/mappings.py @@ -155,6 +155,10 @@ KEYMAP: dict[int, Key] = { ecodes.KEY_KATAKANA: Key(mcu=McuKey(code=109), usb=UsbKey(code=136, is_modifier=False)), ecodes.KEY_HENKAN: Key(mcu=McuKey(code=110), usb=UsbKey(code=138, is_modifier=False)), ecodes.KEY_MUHENKAN: Key(mcu=McuKey(code=111), usb=UsbKey(code=139, is_modifier=False)), + ecodes.KEY_MUTE: Key(mcu=McuKey(code=112), usb=UsbKey(code=127, is_modifier=False)), + ecodes.KEY_VOLUMEUP: Key(mcu=McuKey(code=113), usb=UsbKey(code=128, is_modifier=False)), + ecodes.KEY_VOLUMEDOWN: Key(mcu=McuKey(code=114), usb=UsbKey(code=129, is_modifier=False)), + ecodes.KEY_F20: Key(mcu=McuKey(code=115), usb=UsbKey(code=111, is_modifier=False)), } @@ -270,6 +274,10 @@ WEB_TO_EVDEV = { "KanaMode": ecodes.KEY_KATAKANA, "Convert": ecodes.KEY_HENKAN, "NonConvert": ecodes.KEY_MUHENKAN, + "AudioVolumeMute": ecodes.KEY_MUTE, + "AudioVolumeUp": ecodes.KEY_VOLUMEUP, + "AudioVolumeDown": ecodes.KEY_VOLUMEDOWN, + "F20": ecodes.KEY_F20, } @@ -562,6 +570,7 @@ AT1_TO_EVDEV = { 86: ecodes.KEY_102ND, 87: ecodes.KEY_F11, 88: ecodes.KEY_F12, + 90: ecodes.KEY_F20, 112: ecodes.KEY_KATAKANA, 115: ecodes.KEY_RO, 121: ecodes.KEY_HENKAN, @@ -569,6 +578,9 @@ AT1_TO_EVDEV = { 125: ecodes.KEY_YEN, 57372: ecodes.KEY_KPENTER, 57373: ecodes.KEY_RIGHTCTRL, + 57376: ecodes.KEY_MUTE, + 57390: ecodes.KEY_VOLUMEDOWN, + 57392: ecodes.KEY_VOLUMEUP, 57397: ecodes.KEY_KPSLASH, 57400: ecodes.KEY_RIGHTALT, 57414: ecodes.KEY_PAUSE,