On Thu, Sep 4, 2025 at 10:17 PM Jessica Clarke <jrt...@freebsd.org> wrote:
> On 5 Sep 2025, at 05:13, A FreeBSD User <free...@walstatt-de.de> wrote: > > > Am Tage des Herren Thu, 4 Sep 2025 21:08:06 GMT > > Vladimir Kondratyev <w...@freebsd.org> schrieb: > > > >> The branch main has been updated by wulf: > >> > >> URL: > https://cgit.FreeBSD.org/src/commit/?id=aef807876c305587c60f73e2cd914115d22a53fd > >> > >> commit aef807876c305587c60f73e2cd914115d22a53fd > >> Author: Vladimir Kondratyev <w...@freebsd.org> > >> AuthorDate: 2025-09-04 21:07:25 +0000 > >> Commit: Vladimir Kondratyev <w...@freebsd.org> > >> CommitDate: 2025-09-04 21:07:25 +0000 > >> > >> moused(8): Add support for evdev protocol > >> > >> The new daemon have following properties as compared with previous > >> incarnation: > >> - evdev protocol support for mices and touchpads. Additionally to > >> relative PS/2 and USB devices it enables console support for > I2C/USB > >> touchpads and bluetooth mices. > >> - Other aged protocols like COM, raw PS/2 and X10 are dropped with > only > >> exception of sysmouse. For those who still use them there is an > >> utility called msconvd(8). > >> - single daemon per system where hotplug is processed via devd > socket. > >> Per device mode still supported too. > >> - Configuration and quirks files in libinput-compatible format. > >> Actually, the new moused config parser is taken from libinput. > >> > >> The moused(8) can work in 2 modes: > >> 1. Evdev support mode. It enables all previously mentioned devices. > >> It is enabled by deault. > >> 2. Sysmouse support mode. All should work as before. > >> No new devices supported. To enable it add following lines to > >> /etc/rc.conf: > >> moused_port="/dev/psm0" > >> moused_nondefault_enable="YES" > >> One may add hw.usb.usbhid.enable=0 to /boot/loader.conf to enable > >> ums(4) driver which supports sysmouse protocol. > >> > >> Differential Revision: https://reviews.freebsd.org/D52164 > >> --- > >> libexec/rc/rc.conf | 8 +- > >> libexec/rc/rc.d/Makefile | 1 + > >> libexec/rc/rc.d/msconvd | 61 + > >> tools/build/mk/OptionalObsoleteFiles.inc | 7 + > >> usr.sbin/moused/Makefile | 12 +- > >> usr.sbin/moused/Makefile.depend | 17 - > >> usr.sbin/moused/moused/Makefile | 28 + > >> usr.sbin/moused/moused/event-names.h | 1656 ++++++++++ > >> usr.sbin/moused/moused/moused.8 | 538 ++++ > >> usr.sbin/moused/moused/moused.c | 3205 > ++++++++++++++++++++ > >> usr.sbin/moused/moused/moused.conf | 43 + > >> usr.sbin/moused/moused/moused.conf.5 | 422 +++ > >> usr.sbin/moused/moused/quirks.c | 2033 +++++++++++++ > >> usr.sbin/moused/moused/quirks.h | 369 +++ > >> .../moused/moused/quirks/5-generic-touchpad.quirks | 9 + > >> usr.sbin/moused/moused/util-evdev.c | 173 ++ > >> usr.sbin/moused/moused/util-evdev.h | 35 + > >> usr.sbin/moused/moused/util-list.c | 86 + > >> usr.sbin/moused/moused/util-list.h | 194 ++ > >> usr.sbin/moused/moused/util.c | 423 +++ > >> usr.sbin/moused/moused/util.h | 413 +++ > >> usr.sbin/moused/msconvd/Makefile | 8 + > >> usr.sbin/moused/{moused.8 => msconvd/msconvd.8} | 395 +-- > >> usr.sbin/moused/{moused.c => msconvd/msconvd.c} | 1212 ++------ > >> 24 files changed, 10008 insertions(+), 1340 deletions(-) > >> > >> diff --git a/libexec/rc/rc.conf b/libexec/rc/rc.conf > >> index bfa46bd343a6..0ef3012892dd 100644 > >> --- a/libexec/rc/rc.conf > >> +++ b/libexec/rc/rc.conf > >> @@ -586,15 +586,19 @@ font8x14="NO" # font 8x14 from > >> /usr/share/{syscons,vt}/fonts/* (or NO). font8x8="NO" # font 8x8 from > >> /usr/share/{syscons,vt}/fonts/* (or NO). blanktime="300" # blank time > (in > >> seconds) or "NO" to turn it off. saver="NO" # screen saver: Uses > >> /boot/kernel/${saver}_saver.ko -moused_nondefault_enable="YES" # Treat > non-default mice as > >> enabled unless +moused_nondefault_enable="NO" # Treat non-default mice > as enabled unless > >> # specifically overridden in rc.conf(5). > >> moused_enable="NO" # Run the mouse daemon. > >> moused_type="auto" # See man page for rc.conf(5) for available settings. > >> -moused_port="/dev/psm0" # Set to your mouse port. > >> +moused_port="auto" # Set to your mouse port. > >> moused_flags="" # Any additional flags to moused. > >> mousechar_start="NO" # if 0xd0-0xd3 default range is occupied in your > >> # language code table, specify alternative range > >> # start like mousechar_start=3, see vidcontrol(1) > >> +msconvd_enable="NO" # Run the mouse protocol conversion daemon. > >> +msconvd_type="auto" # See rc.conf(5) man page for available > moused_type-s. > >> +msconvd_ports="" # List of msconvd ports. > >> +msconvd_flags="" # Any additional flags to msconvd. > >> allscreens_flags="" # Set this vidcontrol mode for all virtual screens > >> allscreens_kbdflags="" # Set this kbdcontrol mode for all virtual > screens > >> > >> diff --git a/libexec/rc/rc.d/Makefile b/libexec/rc/rc.d/Makefile > >> index 7c1f50b027a9..e5ee34e62185 100644 > >> --- a/libexec/rc/rc.d/Makefile > >> +++ b/libexec/rc/rc.d/Makefile > >> @@ -273,6 +273,7 @@ JAILPACKAGE= jail > >> .if ${MK_LEGACY_CONSOLE} != "no" > >> CONFGROUPS+= CONSOLE > >> CONSOLE+= moused > >> +CONSOLE+= msconvd > >> CONSOLE+= syscons > >> CONSOLEPACKAGE= console-tools > >> .endif > >> diff --git a/libexec/rc/rc.d/msconvd b/libexec/rc/rc.d/msconvd > >> new file mode 100755 > >> index 000000000000..c2a96bf2eb68 > >> --- /dev/null > >> +++ b/libexec/rc/rc.d/msconvd > >> @@ -0,0 +1,61 @@ > >> +#!/bin/sh > >> +# > >> +# > >> + > >> +# PROVIDE: msconvd > >> +# REQUIRE: DAEMON FILESYSTEMS > >> +# KEYWORD: nojail shutdown > >> + > >> +. /etc/rc.subr > >> + > >> +name="msconvd" > >> +desc="Mouse protocol conversion daemon" > >> +command="/usr/sbin/${name}" > >> +start_cmd="msconvd_start" > >> +pidprefix="/var/run/msconvd" > >> +load_rc_config $name > >> + > >> +: ${msconvd_enable="NO"} > >> +: ${msconvd_type="auto"} > >> + > >> +# doesn't make sense to run in a svcj: nojail keyword > >> +# XXX: How does msconvd communiacte with the kernel? > >> +# XXX: Does the kernel prevent this communcation in jails? > >> +msconvd_svcj="NO" > >> + > >> +# Set the pid file and variable name. The second argument, if it > exists, is > >> +# expected to be the mouse device. > >> +# > >> +if [ -n "$2" ]; then > >> + eval msconvd_$2_enable=\${msconvd_$2_enable-${msconvd_enable}} > >> + rcvar="msconvd_$2_enable" > >> + pidfile="${pidprefix}.$2.pid" > >> +else > >> + for ms in ${msconvd_ports}; do > >> + /etc/rc.d/msconvd $1 ${ms} > >> + done > >> + exit 0 > >> +fi > >> + > >> +msconvd_start() > >> +{ > >> + local ms myflags myport mytype > >> + > >> + # Set the mouse device and get any related variables. If > >> + # a msconvd device has been specified on the commandline, then > >> + # rc.conf(5) variables defined for that device take precedence > >> + # over the generic msconvd_* variables. The only exception is > >> + # the msconvd_port variable, which if not defined sets it to > >> + # the passed in device name. > >> + # > >> + ms=$1 > >> + eval myflags=\${msconvd_${ms}_flags-$msconvd_flags} > >> + eval myport=\${msconvd_${ms}_port-/dev/${ms}} > >> + eval mytype=\${msconvd_${ms}_type-$msconvd_type} > >> + > >> + startmsg -n "Starting ${ms} ${name}" > >> + ${command} ${myflags} -p ${myport} -t ${mytype} -I ${pidfile} > >> + startmsg '.' > >> +} > >> + > >> +run_rc_command $* > >> diff --git a/tools/build/mk/OptionalObsoleteFiles.inc > >> b/tools/build/mk/OptionalObsoleteFiles.inc index > 5eea402c4526..a2fb28f1a186 100644 > >> --- a/tools/build/mk/OptionalObsoleteFiles.inc > >> +++ b/tools/build/mk/OptionalObsoleteFiles.inc > >> @@ -3793,11 +3793,14 @@ OLD_FILES+=usr/share/man/man1/host.1.gz > >> .endif > >> > >> .if ${MK_LEGACY_CONSOLE} == no > >> +OLD_FILES+=etc/moused.conf > >> OLD_FILES+=etc/rc.d/moused > >> +OLD_FILES+=etc/rc.d/msconvd > >> OLD_FILES+=etc/rc.d/syscons > >> OLD_FILES+=usr/sbin/kbdcontrol > >> OLD_FILES+=usr/sbin/kbdmap > >> OLD_FILES+=usr/sbin/moused > >> +OLD_FILES+=usr/sbin/msconvd > >> OLD_FILES+=usr/sbin/vidcontrol > >> OLD_FILES+=usr/sbin/vidfont > >> OLD_FILES+=usr/share/man/man1/kbdcontrol.1.gz > >> @@ -3806,7 +3809,11 @@ OLD_FILES+=usr/share/man/man1/vidcontrol.1.gz > >> OLD_FILES+=usr/share/man/man1/vidfont.1.gz > >> OLD_FILES+=usr/share/man/man5/kbdmap.5.gz > >> OLD_FILES+=usr/share/man/man5/keymap.5.gz > >> +OLD_FILES+=usr/share/man/man5/moused.conf.5.gz > >> OLD_FILES+=usr/share/man/man8/moused.8.gz > >> +OLD_FILES+=usr/share/man/man8/msconvd.8.gz > >> +OLD_FILES+=usr/share/moused/5-generic-touchpad.quirks > >> +OLD_DIRS+=usr/share/moused > >> .endif > >> > >> .for LIBCOMPAT libcompat in ${_ALL_LIBCOMPATS_libcompats} > >> diff --git a/usr.sbin/moused/Makefile b/usr.sbin/moused/Makefile > >> index 2a7aa0484542..b6319b6fef20 100644 > >> --- a/usr.sbin/moused/Makefile > >> +++ b/usr.sbin/moused/Makefile > >> @@ -1,10 +1,4 @@ > >> -PACKAGE= console-tools > >> -PROG= moused > >> -MAN= moused.8 > >> +SUBDIR+=moused > >> +SUBDIR+=msconvd > >> > >> -LIBADD= m util > >> - > >> -#BINMODE=4555 > >> -#PRECIOUSPROG= > >> - > >> -.include <bsd.prog.mk> > >> +.include <bsd.subdir.mk> > >> diff --git a/usr.sbin/moused/Makefile.depend > b/usr.sbin/moused/Makefile.depend > >> deleted file mode 100644 > >> index af3b7054df7a..000000000000 > >> --- a/usr.sbin/moused/Makefile.depend > >> +++ /dev/null > >> @@ -1,17 +0,0 @@ > >> -# Autogenerated - do NOT edit! > >> - > >> -DIRDEPS = \ > >> - include \ > >> - include/xlocale \ > >> - lib/${CSU_DIR} \ > >> - lib/libc \ > >> - lib/libcompiler_rt \ > >> - lib/libutil \ > >> - lib/msun \ > >> - > >> - > >> -.include <dirdeps.mk> > >> - > >> -.if ${DEP_RELDIR} == ${_DEP_RELDIR} > >> -# local dependencies - needed for -jN in clean tree > >> -.endif > >> diff --git a/usr.sbin/moused/moused/Makefile > b/usr.sbin/moused/moused/Makefile > >> new file mode 100644 > >> index 000000000000..8479764b710b > >> --- /dev/null > >> +++ b/usr.sbin/moused/moused/Makefile > >> @@ -0,0 +1,28 @@ > >> +PACKAGE= console-tools > >> +PROG= moused > >> + > >> +SRCS= moused.c \ > >> + event-names.h \ > >> + quirks.c \ > >> + quirks.h \ > >> + util.c \ > >> + util.h \ > >> + util-evdev.c \ > >> + util-evdev.h \ > >> + util-list.c \ > >> + util-list.h > >> +MAN= moused.8 \ > >> + moused.conf.5 > >> +CONFS= moused.conf > >> +QUIRKS= 5-generic-touchpad.quirks > >> + > >> +CWARNFLAGS.quirks.c+= -Wno-cast-align -Wno-shadow -Wno-cast-qual \ > >> + -Wno-unused-variable -Wno-unused-parameter > >> +CWARNFLAGS.util.c+= -Wno-shadow > >> +LIBADD= m util > >> +BINDIR= /usr/sbin > >> + > >> +FILES= ${QUIRKS:S|^|quirks/|} > >> +FILESDIR= /usr/share/${PROG} > >> + > >> +.include <bsd.prog.mk> > >> diff --git a/usr.sbin/moused/moused/event-names.h > b/usr.sbin/moused/moused/event-names.h > >> new file mode 100644 > >> index 000000000000..05093a1d0db3 > >> --- /dev/null > >> +++ b/usr.sbin/moused/moused/event-names.h > >> @@ -0,0 +1,1656 @@ > >> +/* THIS FILE IS GENERATED, DO NOT EDIT */ > >> + > >> +#ifndef EVENT_NAMES_H > >> +#define EVENT_NAMES_H > >> + > >> +static const char * const ev_map[EV_MAX + 1] = { > >> + [EV_SYN] = "EV_SYN", > >> + [EV_KEY] = "EV_KEY", > >> + [EV_REL] = "EV_REL", > >> + [EV_ABS] = "EV_ABS", > >> + [EV_MSC] = "EV_MSC", > >> + [EV_SW] = "EV_SW", > >> + [EV_LED] = "EV_LED", > >> + [EV_SND] = "EV_SND", > >> + [EV_REP] = "EV_REP", > >> + [EV_FF] = "EV_FF", > >> + [EV_PWR] = "EV_PWR", > >> + [EV_FF_STATUS] = "EV_FF_STATUS", > >> + [EV_MAX] = "EV_MAX", > >> +}; > >> + > >> +static const char * const rel_map[REL_MAX + 1] = { > >> + [REL_X] = "REL_X", > >> + [REL_Y] = "REL_Y", > >> + [REL_Z] = "REL_Z", > >> + [REL_RX] = "REL_RX", > >> + [REL_RY] = "REL_RY", > >> + [REL_RZ] = "REL_RZ", > >> + [REL_HWHEEL] = "REL_HWHEEL", > >> + [REL_DIAL] = "REL_DIAL", > >> + [REL_WHEEL] = "REL_WHEEL", > >> + [REL_MISC] = "REL_MISC", > >> + [REL_RESERVED] = "REL_RESERVED", > >> + [REL_WHEEL_HI_RES] = "REL_WHEEL_HI_RES", > >> + [REL_HWHEEL_HI_RES] = "REL_HWHEEL_HI_RES", > >> + [REL_MAX] = "REL_MAX", > >> +}; > >> + > >> +static const char * const abs_map[ABS_MAX + 1] = { > >> + [ABS_X] = "ABS_X", > >> + [ABS_Y] = "ABS_Y", > >> + [ABS_Z] = "ABS_Z", > >> + [ABS_RX] = "ABS_RX", > >> + [ABS_RY] = "ABS_RY", > >> + [ABS_RZ] = "ABS_RZ", > >> + [ABS_THROTTLE] = "ABS_THROTTLE", > >> + [ABS_RUDDER] = "ABS_RUDDER", > >> + [ABS_WHEEL] = "ABS_WHEEL", > >> + [ABS_GAS] = "ABS_GAS", > >> + [ABS_BRAKE] = "ABS_BRAKE", > >> + [ABS_HAT0X] = "ABS_HAT0X", > >> + [ABS_HAT0Y] = "ABS_HAT0Y", > >> + [ABS_HAT1X] = "ABS_HAT1X", > >> + [ABS_HAT1Y] = "ABS_HAT1Y", > >> + [ABS_HAT2X] = "ABS_HAT2X", > >> + [ABS_HAT2Y] = "ABS_HAT2Y", > >> + [ABS_HAT3X] = "ABS_HAT3X", > >> + [ABS_HAT3Y] = "ABS_HAT3Y", > >> + [ABS_PRESSURE] = "ABS_PRESSURE", > >> + [ABS_DISTANCE] = "ABS_DISTANCE", > >> + [ABS_TILT_X] = "ABS_TILT_X", > >> + [ABS_TILT_Y] = "ABS_TILT_Y", > >> + [ABS_TOOL_WIDTH] = "ABS_TOOL_WIDTH", > >> + [ABS_VOLUME] = "ABS_VOLUME", > >> + // [ABS_PROFILE] = "ABS_PROFILE", > >> + [ABS_MISC] = "ABS_MISC", > >> + [ABS_RESERVED] = "ABS_RESERVED", > >> + [ABS_MT_SLOT] = "ABS_MT_SLOT", > >> + [ABS_MT_TOUCH_MAJOR] = "ABS_MT_TOUCH_MAJOR", > >> + [ABS_MT_TOUCH_MINOR] = "ABS_MT_TOUCH_MINOR", > >> + [ABS_MT_WIDTH_MAJOR] = "ABS_MT_WIDTH_MAJOR", > >> + [ABS_MT_WIDTH_MINOR] = "ABS_MT_WIDTH_MINOR", > >> + [ABS_MT_ORIENTATION] = "ABS_MT_ORIENTATION", > >> + [ABS_MT_POSITION_X] = "ABS_MT_POSITION_X", > >> + [ABS_MT_POSITION_Y] = "ABS_MT_POSITION_Y", > >> + [ABS_MT_TOOL_TYPE] = "ABS_MT_TOOL_TYPE", > >> + [ABS_MT_BLOB_ID] = "ABS_MT_BLOB_ID", > >> + [ABS_MT_TRACKING_ID] = "ABS_MT_TRACKING_ID", > >> + [ABS_MT_PRESSURE] = "ABS_MT_PRESSURE", > >> + [ABS_MT_DISTANCE] = "ABS_MT_DISTANCE", > >> + [ABS_MT_TOOL_X] = "ABS_MT_TOOL_X", > >> + [ABS_MT_TOOL_Y] = "ABS_MT_TOOL_Y", > >> + [ABS_MAX] = "ABS_MAX", > >> +}; > >> + > >> +static const char * const key_map[KEY_MAX + 1] = { > >> + [KEY_RESERVED] = "KEY_RESERVED", > >> + [KEY_ESC] = "KEY_ESC", > >> + [KEY_1] = "KEY_1", > >> + [KEY_2] = "KEY_2", > >> + [KEY_3] = "KEY_3", > >> + [KEY_4] = "KEY_4", > >> + [KEY_5] = "KEY_5", > >> + [KEY_6] = "KEY_6", > >> + [KEY_7] = "KEY_7", > >> + [KEY_8] = "KEY_8", > >> + [KEY_9] = "KEY_9", > >> + [KEY_0] = "KEY_0", > >> + [KEY_MINUS] = "KEY_MINUS", > >> + [KEY_EQUAL] = "KEY_EQUAL", > >> + [KEY_BACKSPACE] = "KEY_BACKSPACE", > >> + [KEY_TAB] = "KEY_TAB", > >> + [KEY_Q] = "KEY_Q", > >> + [KEY_W] = "KEY_W", > >> + [KEY_E] = "KEY_E", > >> + [KEY_R] = "KEY_R", > >> + [KEY_T] = "KEY_T", > >> + [KEY_Y] = "KEY_Y", > >> + [KEY_U] = "KEY_U", > >> + [KEY_I] = "KEY_I", > >> + [KEY_O] = "KEY_O", > >> + [KEY_P] = "KEY_P", > >> + [KEY_LEFTBRACE] = "KEY_LEFTBRACE", > >> + [KEY_RIGHTBRACE] = "KEY_RIGHTBRACE", > >> + [KEY_ENTER] = "KEY_ENTER", > >> + [KEY_LEFTCTRL] = "KEY_LEFTCTRL", > >> + [KEY_A] = "KEY_A", > >> + [KEY_S] = "KEY_S", > >> + [KEY_D] = "KEY_D", > >> + [KEY_F] = "KEY_F", > >> + [KEY_G] = "KEY_G", > >> + [KEY_H] = "KEY_H", > >> + [KEY_J] = "KEY_J", > >> + [KEY_K] = "KEY_K", > >> + [KEY_L] = "KEY_L", > >> + [KEY_SEMICOLON] = "KEY_SEMICOLON", > >> + [KEY_APOSTROPHE] = "KEY_APOSTROPHE", > >> + [KEY_GRAVE] = "KEY_GRAVE", > >> + [KEY_LEFTSHIFT] = "KEY_LEFTSHIFT", > >> + [KEY_BACKSLASH] = "KEY_BACKSLASH", > >> + [KEY_Z] = "KEY_Z", > >> + [KEY_X] = "KEY_X", > >> + [KEY_C] = "KEY_C", > >> + [KEY_V] = "KEY_V", > >> + [KEY_B] = "KEY_B", > >> + [KEY_N] = "KEY_N", > >> + [KEY_M] = "KEY_M", > >> + [KEY_COMMA] = "KEY_COMMA", > >> + [KEY_DOT] = "KEY_DOT", > >> + [KEY_SLASH] = "KEY_SLASH", > >> + [KEY_RIGHTSHIFT] = "KEY_RIGHTSHIFT", > >> + [KEY_KPASTERISK] = "KEY_KPASTERISK", > >> + [KEY_LEFTALT] = "KEY_LEFTALT", > >> + [KEY_SPACE] = "KEY_SPACE", > >> + [KEY_CAPSLOCK] = "KEY_CAPSLOCK", > >> + [KEY_F1] = "KEY_F1", > >> + [KEY_F2] = "KEY_F2", > >> + [KEY_F3] = "KEY_F3", > >> + [KEY_F4] = "KEY_F4", > >> + [KEY_F5] = "KEY_F5", > >> + [KEY_F6] = "KEY_F6", > >> + [KEY_F7] = "KEY_F7", > >> + [KEY_F8] = "KEY_F8", > >> + [KEY_F9] = "KEY_F9", > >> + [KEY_F10] = "KEY_F10", > >> + [KEY_NUMLOCK] = "KEY_NUMLOCK", > >> + [KEY_SCROLLLOCK] = "KEY_SCROLLLOCK", > >> + [KEY_KP7] = "KEY_KP7", > >> + [KEY_KP8] = "KEY_KP8", > >> + [KEY_KP9] = "KEY_KP9", > >> + [KEY_KPMINUS] = "KEY_KPMINUS", > >> + [KEY_KP4] = "KEY_KP4", > >> + [KEY_KP5] = "KEY_KP5", > >> + [KEY_KP6] = "KEY_KP6", > >> + [KEY_KPPLUS] = "KEY_KPPLUS", > >> + [KEY_KP1] = "KEY_KP1", > >> + [KEY_KP2] = "KEY_KP2", > >> + [KEY_KP3] = "KEY_KP3", > >> + [KEY_KP0] = "KEY_KP0", > >> + [KEY_KPDOT] = "KEY_KPDOT", > >> + [KEY_ZENKAKUHANKAKU] = "KEY_ZENKAKUHANKAKU", > >> + [KEY_102ND] = "KEY_102ND", > >> + [KEY_F11] = "KEY_F11", > >> + [KEY_F12] = "KEY_F12", > >> + [KEY_RO] = "KEY_RO", > >> + [KEY_KATAKANA] = "KEY_KATAKANA", > >> + [KEY_HIRAGANA] = "KEY_HIRAGANA", > >> + [KEY_HENKAN] = "KEY_HENKAN", > >> + [KEY_KATAKANAHIRAGANA] = "KEY_KATAKANAHIRAGANA", > >> + [KEY_MUHENKAN] = "KEY_MUHENKAN", > >> + [KEY_KPJPCOMMA] = "KEY_KPJPCOMMA", > >> + [KEY_KPENTER] = "KEY_KPENTER", > >> + [KEY_RIGHTCTRL] = "KEY_RIGHTCTRL", > >> + [KEY_KPSLASH] = "KEY_KPSLASH", > >> + [KEY_SYSRQ] = "KEY_SYSRQ", > >> + [KEY_RIGHTALT] = "KEY_RIGHTALT", > >> + [KEY_LINEFEED] = "KEY_LINEFEED", > >> + [KEY_HOME] = "KEY_HOME", > >> + [KEY_UP] = "KEY_UP", > >> + [KEY_PAGEUP] = "KEY_PAGEUP", > >> + [KEY_LEFT] = "KEY_LEFT", > >> + [KEY_RIGHT] = "KEY_RIGHT", > >> + [KEY_END] = "KEY_END", > >> + [KEY_DOWN] = "KEY_DOWN", > >> + [KEY_PAGEDOWN] = "KEY_PAGEDOWN", > >> + [KEY_INSERT] = "KEY_INSERT", > >> + [KEY_DELETE] = "KEY_DELETE", > >> + [KEY_MACRO] = "KEY_MACRO", > >> + [KEY_MUTE] = "KEY_MUTE", > >> + [KEY_VOLUMEDOWN] = "KEY_VOLUMEDOWN", > >> + [KEY_VOLUMEUP] = "KEY_VOLUMEUP", > >> + [KEY_POWER] = "KEY_POWER", > >> + [KEY_KPEQUAL] = "KEY_KPEQUAL", > >> + [KEY_KPPLUSMINUS] = "KEY_KPPLUSMINUS", > >> + [KEY_PAUSE] = "KEY_PAUSE", > >> + [KEY_SCALE] = "KEY_SCALE", > >> + [KEY_KPCOMMA] = "KEY_KPCOMMA", > >> + [KEY_HANGEUL] = "KEY_HANGEUL", > >> + [KEY_HANJA] = "KEY_HANJA", > >> + [KEY_YEN] = "KEY_YEN", > >> + [KEY_LEFTMETA] = "KEY_LEFTMETA", > >> + [KEY_RIGHTMETA] = "KEY_RIGHTMETA", > >> + [KEY_COMPOSE] = "KEY_COMPOSE", > >> + [KEY_STOP] = "KEY_STOP", > >> + [KEY_AGAIN] = "KEY_AGAIN", > >> + [KEY_PROPS] = "KEY_PROPS", > >> + [KEY_UNDO] = "KEY_UNDO", > >> + [KEY_FRONT] = "KEY_FRONT", > >> + [KEY_COPY] = "KEY_COPY", > >> + [KEY_OPEN] = "KEY_OPEN", > >> + [KEY_PASTE] = "KEY_PASTE", > >> + [KEY_FIND] = "KEY_FIND", > >> + [KEY_CUT] = "KEY_CUT", > >> + [KEY_HELP] = "KEY_HELP", > >> + [KEY_MENU] = "KEY_MENU", > >> + [KEY_CALC] = "KEY_CALC", > >> + [KEY_SETUP] = "KEY_SETUP", > >> + [KEY_SLEEP] = "KEY_SLEEP", > >> + [KEY_WAKEUP] = "KEY_WAKEUP", > >> + [KEY_FILE] = "KEY_FILE", > >> + [KEY_SENDFILE] = "KEY_SENDFILE", > >> + [KEY_DELETEFILE] = "KEY_DELETEFILE", > >> + [KEY_XFER] = "KEY_XFER", > >> + [KEY_PROG1] = "KEY_PROG1", > >> + [KEY_PROG2] = "KEY_PROG2", > >> + [KEY_WWW] = "KEY_WWW", > >> + [KEY_MSDOS] = "KEY_MSDOS", > >> + [KEY_COFFEE] = "KEY_COFFEE", > >> + [KEY_ROTATE_DISPLAY] = "KEY_ROTATE_DISPLAY", > >> + [KEY_CYCLEWINDOWS] = "KEY_CYCLEWINDOWS", > >> + [KEY_MAIL] = "KEY_MAIL", > >> + [KEY_BOOKMARKS] = "KEY_BOOKMARKS", > >> + [KEY_COMPUTER] = "KEY_COMPUTER", > >> + [KEY_BACK] = "KEY_BACK", > >> + [KEY_FORWARD] = "KEY_FORWARD", > >> + [KEY_CLOSECD] = "KEY_CLOSECD", > >> + [KEY_EJECTCD] = "KEY_EJECTCD", > >> + [KEY_EJECTCLOSECD] = "KEY_EJECTCLOSECD", > >> + [KEY_NEXTSONG] = "KEY_NEXTSONG", > >> + [KEY_PLAYPAUSE] = "KEY_PLAYPAUSE", > >> + [KEY_PREVIOUSSONG] = "KEY_PREVIOUSSONG", > >> + [KEY_STOPCD] = "KEY_STOPCD", > >> + [KEY_RECORD] = "KEY_RECORD", > >> + [KEY_REWIND] = "KEY_REWIND", > >> + [KEY_PHONE] = "KEY_PHONE", > >> + [KEY_ISO] = "KEY_ISO", > >> + [KEY_CONFIG] = "KEY_CONFIG", > >> + [KEY_HOMEPAGE] = "KEY_HOMEPAGE", > >> + [KEY_REFRESH] = "KEY_REFRESH", > >> + [KEY_EXIT] = "KEY_EXIT", > >> + [KEY_MOVE] = "KEY_MOVE", > >> + [KEY_EDIT] = "KEY_EDIT", > >> + [KEY_SCROLLUP] = "KEY_SCROLLUP", > >> + [KEY_SCROLLDOWN] = "KEY_SCROLLDOWN", > >> + [KEY_KPLEFTPAREN] = "KEY_KPLEFTPAREN", > >> + [KEY_KPRIGHTPAREN] = "KEY_KPRIGHTPAREN", > >> + [KEY_NEW] = "KEY_NEW", > >> + [KEY_REDO] = "KEY_REDO", > >> + [KEY_F13] = "KEY_F13", > >> + [KEY_F14] = "KEY_F14", > >> + [KEY_F15] = "KEY_F15", > >> + [KEY_F16] = "KEY_F16", > >> + [KEY_F17] = "KEY_F17", > >> + [KEY_F18] = "KEY_F18", > >> + [KEY_F19] = "KEY_F19", > >> + [KEY_F20] = "KEY_F20", > >> + [KEY_F21] = "KEY_F21", > >> + [KEY_F22] = "KEY_F22", > >> + [KEY_F23] = "KEY_F23", > >> + [KEY_F24] = "KEY_F24", > >> + [KEY_PLAYCD] = "KEY_PLAYCD", > >> + [KEY_PAUSECD] = "KEY_PAUSECD", > >> + [KEY_PROG3] = "KEY_PROG3", > >> + [KEY_PROG4] = "KEY_PROG4", > >> + // [KEY_ALL_APPLICATIONS] = "KEY_ALL_APPLICATIONS", > >> + [KEY_SUSPEND] = "KEY_SUSPEND", > >> + [KEY_CLOSE] = "KEY_CLOSE", > >> + [KEY_PLAY] = "KEY_PLAY", > >> + [KEY_FASTFORWARD] = "KEY_FASTFORWARD", > >> + [KEY_BASSBOOST] = "KEY_BASSBOOST", > >> + [KEY_PRINT] = "KEY_PRINT", > >> + [KEY_HP] = "KEY_HP", > >> + [KEY_CAMERA] = "KEY_CAMERA", > >> + [KEY_SOUND] = "KEY_SOUND", > >> + [KEY_QUESTION] = "KEY_QUESTION", > >> + [KEY_EMAIL] = "KEY_EMAIL", > >> + [KEY_CHAT] = "KEY_CHAT", > >> + [KEY_SEARCH] = "KEY_SEARCH", > >> + [KEY_CONNECT] = "KEY_CONNECT", > >> + [KEY_FINANCE] = "KEY_FINANCE", > >> + [KEY_SPORT] = "KEY_SPORT", > >> + [KEY_SHOP] = "KEY_SHOP", > >> + [KEY_ALTERASE] = "KEY_ALTERASE", > >> + [KEY_CANCEL] = "KEY_CANCEL", > >> + [KEY_BRIGHTNESSDOWN] = "KEY_BRIGHTNESSDOWN", > >> + [KEY_BRIGHTNESSUP] = "KEY_BRIGHTNESSUP", > >> + [KEY_MEDIA] = "KEY_MEDIA", > >> + [KEY_SWITCHVIDEOMODE] = "KEY_SWITCHVIDEOMODE", > >> + [KEY_KBDILLUMTOGGLE] = "KEY_KBDILLUMTOGGLE", > >> + [KEY_KBDILLUMDOWN] = "KEY_KBDILLUMDOWN", > >> + [KEY_KBDILLUMUP] = "KEY_KBDILLUMUP", > >> + [KEY_SEND] = "KEY_SEND", > >> + [KEY_REPLY] = "KEY_REPLY", > >> + [KEY_FORWARDMAIL] = "KEY_FORWARDMAIL", > >> + [KEY_SAVE] = "KEY_SAVE", > >> + [KEY_DOCUMENTS] = "KEY_DOCUMENTS", > >> + [KEY_BATTERY] = "KEY_BATTERY", > >> + [KEY_BLUETOOTH] = "KEY_BLUETOOTH", > >> + [KEY_WLAN] = "KEY_WLAN", > >> + [KEY_UWB] = "KEY_UWB", > >> + [KEY_UNKNOWN] = "KEY_UNKNOWN", > >> + [KEY_VIDEO_NEXT] = "KEY_VIDEO_NEXT", > >> + [KEY_VIDEO_PREV] = "KEY_VIDEO_PREV", > >> + [KEY_BRIGHTNESS_CYCLE] = "KEY_BRIGHTNESS_CYCLE", > >> + [KEY_BRIGHTNESS_AUTO] = "KEY_BRIGHTNESS_AUTO", > >> + [KEY_DISPLAY_OFF] = "KEY_DISPLAY_OFF", > >> + [KEY_WWAN] = "KEY_WWAN", > >> + [KEY_RFKILL] = "KEY_RFKILL", > >> + [KEY_MICMUTE] = "KEY_MICMUTE", > >> + [KEY_OK] = "KEY_OK", > >> + [KEY_SELECT] = "KEY_SELECT", > >> + [KEY_GOTO] = "KEY_GOTO", > >> + [KEY_CLEAR] = "KEY_CLEAR", > >> + [KEY_POWER2] = "KEY_POWER2", > >> + [KEY_OPTION] = "KEY_OPTION", > >> + [KEY_INFO] = "KEY_INFO", > >> + [KEY_TIME] = "KEY_TIME", > >> + [KEY_VENDOR] = "KEY_VENDOR", > >> + [KEY_ARCHIVE] = "KEY_ARCHIVE", > >> + [KEY_PROGRAM] = "KEY_PROGRAM", > >> + [KEY_CHANNEL] = "KEY_CHANNEL", > >> + [KEY_FAVORITES] = "KEY_FAVORITES", > >> + [KEY_EPG] = "KEY_EPG", > >> + [KEY_PVR] = "KEY_PVR", > >> + [KEY_MHP] = "KEY_MHP", > >> + [KEY_LANGUAGE] = "KEY_LANGUAGE", > >> + [KEY_TITLE] = "KEY_TITLE", > >> + [KEY_SUBTITLE] = "KEY_SUBTITLE", > >> + [KEY_ANGLE] = "KEY_ANGLE", > >> + [KEY_FULL_SCREEN] = "KEY_FULL_SCREEN", > >> + [KEY_MODE] = "KEY_MODE", > >> + [KEY_KEYBOARD] = "KEY_KEYBOARD", > >> + [KEY_ASPECT_RATIO] = "KEY_ASPECT_RATIO", > >> + [KEY_PC] = "KEY_PC", > >> + [KEY_TV] = "KEY_TV", > >> + [KEY_TV2] = "KEY_TV2", > >> + [KEY_VCR] = "KEY_VCR", > >> + [KEY_VCR2] = "KEY_VCR2", > >> + [KEY_SAT] = "KEY_SAT", > >> + [KEY_SAT2] = "KEY_SAT2", > >> + [KEY_CD] = "KEY_CD", > >> + [KEY_TAPE] = "KEY_TAPE", > >> + [KEY_RADIO] = "KEY_RADIO", > >> + [KEY_TUNER] = "KEY_TUNER", > >> + [KEY_PLAYER] = "KEY_PLAYER", > >> + [KEY_TEXT] = "KEY_TEXT", > >> + [KEY_DVD] = "KEY_DVD", > >> + [KEY_AUX] = "KEY_AUX", > >> + [KEY_MP3] = "KEY_MP3", > >> + [KEY_AUDIO] = "KEY_AUDIO", > >> + [KEY_VIDEO] = "KEY_VIDEO", > >> + [KEY_DIRECTORY] = "KEY_DIRECTORY", > >> + [KEY_LIST] = "KEY_LIST", > >> + [KEY_MEMO] = "KEY_MEMO", > >> + [KEY_CALENDAR] = "KEY_CALENDAR", > >> + [KEY_RED] = "KEY_RED", > >> + [KEY_GREEN] = "KEY_GREEN", > >> + [KEY_YELLOW] = "KEY_YELLOW", > >> + [KEY_BLUE] = "KEY_BLUE", > >> + [KEY_CHANNELUP] = "KEY_CHANNELUP", > >> + [KEY_CHANNELDOWN] = "KEY_CHANNELDOWN", > >> + [KEY_FIRST] = "KEY_FIRST", > >> + [KEY_LAST] = "KEY_LAST", > >> + [KEY_AB] = "KEY_AB", > >> + [KEY_NEXT] = "KEY_NEXT", > >> + [KEY_RESTART] = "KEY_RESTART", > >> + [KEY_SLOW] = "KEY_SLOW", > >> + [KEY_SHUFFLE] = "KEY_SHUFFLE", > >> + [KEY_BREAK] = "KEY_BREAK", > >> + [KEY_PREVIOUS] = "KEY_PREVIOUS", > >> + [KEY_DIGITS] = "KEY_DIGITS", > >> + [KEY_TEEN] = "KEY_TEEN", > >> + [KEY_TWEN] = "KEY_TWEN", > >> + [KEY_VIDEOPHONE] = "KEY_VIDEOPHONE", > >> + [KEY_GAMES] = "KEY_GAMES", > >> + [KEY_ZOOMIN] = "KEY_ZOOMIN", > >> + [KEY_ZOOMOUT] = "KEY_ZOOMOUT", > >> + [KEY_ZOOMRESET] = "KEY_ZOOMRESET", > >> + [KEY_WORDPROCESSOR] = "KEY_WORDPROCESSOR", > >> + [KEY_EDITOR] = "KEY_EDITOR", > >> + [KEY_SPREADSHEET] = "KEY_SPREADSHEET", > >> + [KEY_GRAPHICSEDITOR] = "KEY_GRAPHICSEDITOR", > >> + [KEY_PRESENTATION] = "KEY_PRESENTATION", > >> + [KEY_DATABASE] = "KEY_DATABASE", > >> + [KEY_NEWS] = "KEY_NEWS", > >> + [KEY_VOICEMAIL] = "KEY_VOICEMAIL", > >> + [KEY_ADDRESSBOOK] = "KEY_ADDRESSBOOK", > >> + [KEY_MESSENGER] = "KEY_MESSENGER", > >> + [KEY_DISPLAYTOGGLE] = "KEY_DISPLAYTOGGLE", > >> + [KEY_SPELLCHECK] = "KEY_SPELLCHECK", > >> + [KEY_LOGOFF] = "KEY_LOGOFF", > >> + [KEY_DOLLAR] = "KEY_DOLLAR", > >> + [KEY_EURO] = "KEY_EURO", > >> + [KEY_FRAMEBACK] = "KEY_FRAMEBACK", > >> + [KEY_FRAMEFORWARD] = "KEY_FRAMEFORWARD", > >> + [KEY_CONTEXT_MENU] = "KEY_CONTEXT_MENU", > >> + [KEY_MEDIA_REPEAT] = "KEY_MEDIA_REPEAT", > >> + [KEY_10CHANNELSUP] = "KEY_10CHANNELSUP", > >> + [KEY_10CHANNELSDOWN] = "KEY_10CHANNELSDOWN", > >> + [KEY_IMAGES] = "KEY_IMAGES", > >> + // [KEY_NOTIFICATION_CENTER] = "KEY_NOTIFICATION_CENTER", > >> + // [KEY_PICKUP_PHONE] = "KEY_PICKUP_PHONE", > >> + // [KEY_HANGUP_PHONE] = "KEY_HANGUP_PHONE", > >> + [KEY_DEL_EOL] = "KEY_DEL_EOL", > >> + [KEY_DEL_EOS] = "KEY_DEL_EOS", > >> + [KEY_INS_LINE] = "KEY_INS_LINE", > >> + [KEY_DEL_LINE] = "KEY_DEL_LINE", > >> + [KEY_FN] = "KEY_FN", > >> + [KEY_FN_ESC] = "KEY_FN_ESC", > >> + [KEY_FN_F1] = "KEY_FN_F1", > >> + [KEY_FN_F2] = "KEY_FN_F2", > >> + [KEY_FN_F3] = "KEY_FN_F3", > >> + [KEY_FN_F4] = "KEY_FN_F4", > >> + [KEY_FN_F5] = "KEY_FN_F5", > >> + [KEY_FN_F6] = "KEY_FN_F6", > >> + [KEY_FN_F7] = "KEY_FN_F7", > >> + [KEY_FN_F8] = "KEY_FN_F8", > >> + [KEY_FN_F9] = "KEY_FN_F9", > >> + [KEY_FN_F10] = "KEY_FN_F10", > >> + [KEY_FN_F11] = "KEY_FN_F11", > >> + [KEY_FN_F12] = "KEY_FN_F12", > >> + [KEY_FN_1] = "KEY_FN_1", > >> + [KEY_FN_2] = "KEY_FN_2", > >> + [KEY_FN_D] = "KEY_FN_D", > >> + [KEY_FN_E] = "KEY_FN_E", > >> + [KEY_FN_F] = "KEY_FN_F", > >> + [KEY_FN_S] = "KEY_FN_S", > >> + [KEY_FN_B] = "KEY_FN_B", > >> + // [KEY_FN_RIGHT_SHIFT] = "KEY_FN_RIGHT_SHIFT", > >> + [KEY_BRL_DOT1] = "KEY_BRL_DOT1", > >> + [KEY_BRL_DOT2] = "KEY_BRL_DOT2", > >> + [KEY_BRL_DOT3] = "KEY_BRL_DOT3", > >> + [KEY_BRL_DOT4] = "KEY_BRL_DOT4", > >> + [KEY_BRL_DOT5] = "KEY_BRL_DOT5", > >> + [KEY_BRL_DOT6] = "KEY_BRL_DOT6", > >> + [KEY_BRL_DOT7] = "KEY_BRL_DOT7", > >> + [KEY_BRL_DOT8] = "KEY_BRL_DOT8", > >> + [KEY_BRL_DOT9] = "KEY_BRL_DOT9", > >> + [KEY_BRL_DOT10] = "KEY_BRL_DOT10", > >> + [KEY_NUMERIC_0] = "KEY_NUMERIC_0", > >> + [KEY_NUMERIC_1] = "KEY_NUMERIC_1", > >> + [KEY_NUMERIC_2] = "KEY_NUMERIC_2", > >> + [KEY_NUMERIC_3] = "KEY_NUMERIC_3", > >> + [KEY_NUMERIC_4] = "KEY_NUMERIC_4", > >> + [KEY_NUMERIC_5] = "KEY_NUMERIC_5", > >> + [KEY_NUMERIC_6] = "KEY_NUMERIC_6", > >> + [KEY_NUMERIC_7] = "KEY_NUMERIC_7", > >> + [KEY_NUMERIC_8] = "KEY_NUMERIC_8", > >> + [KEY_NUMERIC_9] = "KEY_NUMERIC_9", > >> + [KEY_NUMERIC_STAR] = "KEY_NUMERIC_STAR", > >> + [KEY_NUMERIC_POUND] = "KEY_NUMERIC_POUND", > >> + [KEY_NUMERIC_A] = "KEY_NUMERIC_A", > >> + [KEY_NUMERIC_B] = "KEY_NUMERIC_B", > >> + [KEY_NUMERIC_C] = "KEY_NUMERIC_C", > >> + [KEY_NUMERIC_D] = "KEY_NUMERIC_D", > >> + [KEY_CAMERA_FOCUS] = "KEY_CAMERA_FOCUS", > >> + [KEY_WPS_BUTTON] = "KEY_WPS_BUTTON", > >> + [KEY_TOUCHPAD_TOGGLE] = "KEY_TOUCHPAD_TOGGLE", > >> + [KEY_TOUCHPAD_ON] = "KEY_TOUCHPAD_ON", > >> + [KEY_TOUCHPAD_OFF] = "KEY_TOUCHPAD_OFF", > >> + [KEY_CAMERA_ZOOMIN] = "KEY_CAMERA_ZOOMIN", > >> + [KEY_CAMERA_ZOOMOUT] = "KEY_CAMERA_ZOOMOUT", > >> + [KEY_CAMERA_UP] = "KEY_CAMERA_UP", > >> + [KEY_CAMERA_DOWN] = "KEY_CAMERA_DOWN", > >> + [KEY_CAMERA_LEFT] = "KEY_CAMERA_LEFT", > >> + [KEY_CAMERA_RIGHT] = "KEY_CAMERA_RIGHT", > >> + [KEY_ATTENDANT_ON] = "KEY_ATTENDANT_ON", > >> + [KEY_ATTENDANT_OFF] = "KEY_ATTENDANT_OFF", > >> + [KEY_ATTENDANT_TOGGLE] = "KEY_ATTENDANT_TOGGLE", > >> + [KEY_LIGHTS_TOGGLE] = "KEY_LIGHTS_TOGGLE", > >> + [KEY_ALS_TOGGLE] = "KEY_ALS_TOGGLE", > >> + [KEY_ROTATE_LOCK_TOGGLE] = "KEY_ROTATE_LOCK_TOGGLE", > >> + [KEY_BUTTONCONFIG] = "KEY_BUTTONCONFIG", > >> + [KEY_TASKMANAGER] = "KEY_TASKMANAGER", > >> + [KEY_JOURNAL] = "KEY_JOURNAL", > >> + [KEY_CONTROLPANEL] = "KEY_CONTROLPANEL", > >> + [KEY_APPSELECT] = "KEY_APPSELECT", > >> + [KEY_SCREENSAVER] = "KEY_SCREENSAVER", > >> + [KEY_VOICECOMMAND] = "KEY_VOICECOMMAND", > >> + [KEY_ASSISTANT] = "KEY_ASSISTANT", > >> + [KEY_KBD_LAYOUT_NEXT] = "KEY_KBD_LAYOUT_NEXT", > >> + // [KEY_EMOJI_PICKER] = "KEY_EMOJI_PICKER", > >> + //[KEY_DICTATE] = "KEY_DICTATE", > >> + //[KEY_CAMERA_ACCESS_ENABLE] = "KEY_CAMERA_ACCESS_ENABLE", > >> + //[KEY_CAMERA_ACCESS_DISABLE] = "KEY_CAMERA_ACCESS_DISABLE", > >> + //[KEY_CAMERA_ACCESS_TOGGLE] = "KEY_CAMERA_ACCESS_TOGGLE", > >> + [KEY_BRIGHTNESS_MIN] = "KEY_BRIGHTNESS_MIN", > >> + [KEY_BRIGHTNESS_MAX] = "KEY_BRIGHTNESS_MAX", > >> + [KEY_KBDINPUTASSIST_PREV] = "KEY_KBDINPUTASSIST_PREV", > >> + [KEY_KBDINPUTASSIST_NEXT] = "KEY_KBDINPUTASSIST_NEXT", > >> + [KEY_KBDINPUTASSIST_PREVGROUP] = "KEY_KBDINPUTASSIST_PREVGROUP", > >> + [KEY_KBDINPUTASSIST_NEXTGROUP] = "KEY_KBDINPUTASSIST_NEXTGROUP", > >> + [KEY_KBDINPUTASSIST_ACCEPT] = "KEY_KBDINPUTASSIST_ACCEPT", > >> + [KEY_KBDINPUTASSIST_CANCEL] = "KEY_KBDINPUTASSIST_CANCEL", > >> + [KEY_RIGHT_UP] = "KEY_RIGHT_UP", > >> + [KEY_RIGHT_DOWN] = "KEY_RIGHT_DOWN", > >> + [KEY_LEFT_UP] = "KEY_LEFT_UP", > >> + [KEY_LEFT_DOWN] = "KEY_LEFT_DOWN", > >> + [KEY_ROOT_MENU] = "KEY_ROOT_MENU", > >> + [KEY_MEDIA_TOP_MENU] = "KEY_MEDIA_TOP_MENU", > >> + [KEY_NUMERIC_11] = "KEY_NUMERIC_11", > >> + [KEY_NUMERIC_12] = "KEY_NUMERIC_12", > >> + [KEY_AUDIO_DESC] = "KEY_AUDIO_DESC", > >> + [KEY_3D_MODE] = "KEY_3D_MODE", > >> + [KEY_NEXT_FAVORITE] = "KEY_NEXT_FAVORITE", > >> + [KEY_STOP_RECORD] = "KEY_STOP_RECORD", > >> + [KEY_PAUSE_RECORD] = "KEY_PAUSE_RECORD", > >> + [KEY_VOD] = "KEY_VOD", > >> + [KEY_UNMUTE] = "KEY_UNMUTE", > >> + [KEY_FASTREVERSE] = "KEY_FASTREVERSE", > >> + [KEY_SLOWREVERSE] = "KEY_SLOWREVERSE", > >> + [KEY_DATA] = "KEY_DATA", > >> + [KEY_ONSCREEN_KEYBOARD] = "KEY_ONSCREEN_KEYBOARD", > >> + [KEY_PRIVACY_SCREEN_TOGGLE] = "KEY_PRIVACY_SCREEN_TOGGLE", > >> + [KEY_SELECTIVE_SCREENSHOT] = "KEY_SELECTIVE_SCREENSHOT", > >> + // [KEY_NEXT_ELEMENT] = "KEY_NEXT_ELEMENT", > >> + // [KEY_PREVIOUS_ELEMENT] = "KEY_PREVIOUS_ELEMENT", > >> + // [KEY_AUTOPILOT_ENGAGE_TOGGLE] = "KEY_AUTOPILOT_ENGAGE_TOGGLE", > >> + // [KEY_MARK_WAYPOINT] = "KEY_MARK_WAYPOINT", > >> + // [KEY_SOS] = "KEY_SOS", > >> + // [KEY_NAV_CHART] = "KEY_NAV_CHART", > >> + // [KEY_FISHING_CHART] = "KEY_FISHING_CHART", > >> + // [KEY_SINGLE_RANGE_RADAR] = "KEY_SINGLE_RANGE_RADAR", > >> + // [KEY_DUAL_RANGE_RADAR] = "KEY_DUAL_RANGE_RADAR", > >> + // [KEY_RADAR_OVERLAY] = "KEY_RADAR_OVERLAY", > >> + // [KEY_TRADITIONAL_SONAR] = "KEY_TRADITIONAL_SONAR", > >> + // [KEY_CLEARVU_SONAR] = "KEY_CLEARVU_SONAR", > >> + // [KEY_SIDEVU_SONAR] = "KEY_SIDEVU_SONAR", > >> + // [KEY_NAV_INFO] = "KEY_NAV_INFO", > >> + // [KEY_BRIGHTNESS_MENU] = "KEY_BRIGHTNESS_MENU", > >> + [KEY_MACRO1] = "KEY_MACRO1", > >> + [KEY_MACRO2] = "KEY_MACRO2", > >> + [KEY_MACRO3] = "KEY_MACRO3", > >> + [KEY_MACRO4] = "KEY_MACRO4", > >> + [KEY_MACRO5] = "KEY_MACRO5", > >> + [KEY_MACRO6] = "KEY_MACRO6", > >> + [KEY_MACRO7] = "KEY_MACRO7", > >> + [KEY_MACRO8] = "KEY_MACRO8", > >> + [KEY_MACRO9] = "KEY_MACRO9", > >> + [KEY_MACRO10] = "KEY_MACRO10", > >> + [KEY_MACRO11] = "KEY_MACRO11", > >> + [KEY_MACRO12] = "KEY_MACRO12", > >> + [KEY_MACRO13] = "KEY_MACRO13", > >> + [KEY_MACRO14] = "KEY_MACRO14", > >> + [KEY_MACRO15] = "KEY_MACRO15", > >> + [KEY_MACRO16] = "KEY_MACRO16", > >> + [KEY_MACRO17] = "KEY_MACRO17", > >> + [KEY_MACRO18] = "KEY_MACRO18", > >> + [KEY_MACRO19] = "KEY_MACRO19", > >> + [KEY_MACRO20] = "KEY_MACRO20", > >> + [KEY_MACRO21] = "KEY_MACRO21", > >> + [KEY_MACRO22] = "KEY_MACRO22", > >> + [KEY_MACRO23] = "KEY_MACRO23", > >> + [KEY_MACRO24] = "KEY_MACRO24", > >> + [KEY_MACRO25] = "KEY_MACRO25", > >> + [KEY_MACRO26] = "KEY_MACRO26", > >> + [KEY_MACRO27] = "KEY_MACRO27", > >> + [KEY_MACRO28] = "KEY_MACRO28", > >> + [KEY_MACRO29] = "KEY_MACRO29", > >> + [KEY_MACRO30] = "KEY_MACRO30", > >> + [KEY_MACRO_RECORD_START] = "KEY_MACRO_RECORD_START", > >> + [KEY_MACRO_RECORD_STOP] = "KEY_MACRO_RECORD_STOP", > >> + [KEY_MACRO_PRESET_CYCLE] = "KEY_MACRO_PRESET_CYCLE", > >> + [KEY_MACRO_PRESET1] = "KEY_MACRO_PRESET1", > >> + [KEY_MACRO_PRESET2] = "KEY_MACRO_PRESET2", > >> + [KEY_MACRO_PRESET3] = "KEY_MACRO_PRESET3", > >> + [KEY_KBD_LCD_MENU1] = "KEY_KBD_LCD_MENU1", > >> + [KEY_KBD_LCD_MENU2] = "KEY_KBD_LCD_MENU2", > >> + [KEY_KBD_LCD_MENU3] = "KEY_KBD_LCD_MENU3", > >> + [KEY_KBD_LCD_MENU4] = "KEY_KBD_LCD_MENU4", > >> + [KEY_KBD_LCD_MENU5] = "KEY_KBD_LCD_MENU5", > >> + [KEY_MAX] = "KEY_MAX", > >> + [BTN_0] = "BTN_0", > >> + [BTN_1] = "BTN_1", > >> + [BTN_2] = "BTN_2", > >> + [BTN_3] = "BTN_3", > >> + [BTN_4] = "BTN_4", > >> + [BTN_5] = "BTN_5", > >> + [BTN_6] = "BTN_6", > >> + [BTN_7] = "BTN_7", > >> + [BTN_8] = "BTN_8", > >> + [BTN_9] = "BTN_9", > >> + [BTN_LEFT] = "BTN_LEFT", > >> + [BTN_RIGHT] = "BTN_RIGHT", > >> + [BTN_MIDDLE] = "BTN_MIDDLE", > >> + [BTN_SIDE] = "BTN_SIDE", > >> + [BTN_EXTRA] = "BTN_EXTRA", > >> + [BTN_FORWARD] = "BTN_FORWARD", > >> + [BTN_BACK] = "BTN_BACK", > >> + [BTN_TASK] = "BTN_TASK", > >> + [BTN_TRIGGER] = "BTN_TRIGGER", > >> + [BTN_THUMB] = "BTN_THUMB", > >> + [BTN_THUMB2] = "BTN_THUMB2", > >> + [BTN_TOP] = "BTN_TOP", > >> + [BTN_TOP2] = "BTN_TOP2", > >> + [BTN_PINKIE] = "BTN_PINKIE", > >> + [BTN_BASE] = "BTN_BASE", > >> + [BTN_BASE2] = "BTN_BASE2", > >> + [BTN_BASE3] = "BTN_BASE3", > >> + [BTN_BASE4] = "BTN_BASE4", > >> + [BTN_BASE5] = "BTN_BASE5", > >> + [BTN_BASE6] = "BTN_BASE6", > >> + [BTN_DEAD] = "BTN_DEAD", > >> + [BTN_SOUTH] = "BTN_SOUTH", > >> + [BTN_EAST] = "BTN_EAST", > >> + [BTN_C] = "BTN_C", > >> + [BTN_NORTH] = "BTN_NORTH", > >> + [BTN_WEST] = "BTN_WEST", > >> + [BTN_Z] = "BTN_Z", > >> + [BTN_TL] = "BTN_TL", > >> + [BTN_TR] = "BTN_TR", > >> + [BTN_TL2] = "BTN_TL2", > >> + [BTN_TR2] = "BTN_TR2", > >> + [BTN_SELECT] = "BTN_SELECT", > >> + [BTN_START] = "BTN_START", > >> + [BTN_MODE] = "BTN_MODE", > >> + [BTN_THUMBL] = "BTN_THUMBL", > >> + [BTN_THUMBR] = "BTN_THUMBR", > >> + [BTN_TOOL_PEN] = "BTN_TOOL_PEN", > >> + [BTN_TOOL_RUBBER] = "BTN_TOOL_RUBBER", > >> + [BTN_TOOL_BRUSH] = "BTN_TOOL_BRUSH", > >> + [BTN_TOOL_PENCIL] = "BTN_TOOL_PENCIL", > >> + [BTN_TOOL_AIRBRUSH] = "BTN_TOOL_AIRBRUSH", > >> + [BTN_TOOL_FINGER] = "BTN_TOOL_FINGER", > >> + [BTN_TOOL_MOUSE] = "BTN_TOOL_MOUSE", > >> + [BTN_TOOL_LENS] = "BTN_TOOL_LENS", > >> + [BTN_TOOL_QUINTTAP] = "BTN_TOOL_QUINTTAP", > >> + [BTN_STYLUS3] = "BTN_STYLUS3", > >> + [BTN_TOUCH] = "BTN_TOUCH", > >> + [BTN_STYLUS] = "BTN_STYLUS", > >> + [BTN_STYLUS2] = "BTN_STYLUS2", > >> + [BTN_TOOL_DOUBLETAP] = "BTN_TOOL_DOUBLETAP", > >> + [BTN_TOOL_TRIPLETAP] = "BTN_TOOL_TRIPLETAP", > >> + [BTN_TOOL_QUADTAP] = "BTN_TOOL_QUADTAP", > >> + [BTN_GEAR_DOWN] = "BTN_GEAR_DOWN", > >> + [BTN_GEAR_UP] = "BTN_GEAR_UP", > >> + [BTN_DPAD_UP] = "BTN_DPAD_UP", > >> + [BTN_DPAD_DOWN] = "BTN_DPAD_DOWN", > >> + [BTN_DPAD_LEFT] = "BTN_DPAD_LEFT", > >> + [BTN_DPAD_RIGHT] = "BTN_DPAD_RIGHT", > >> + [BTN_TRIGGER_HAPPY1] = "BTN_TRIGGER_HAPPY1", > >> + [BTN_TRIGGER_HAPPY2] = "BTN_TRIGGER_HAPPY2", > >> + [BTN_TRIGGER_HAPPY3] = "BTN_TRIGGER_HAPPY3", > >> + [BTN_TRIGGER_HAPPY4] = "BTN_TRIGGER_HAPPY4", > >> + [BTN_TRIGGER_HAPPY5] = "BTN_TRIGGER_HAPPY5", > >> + [BTN_TRIGGER_HAPPY6] = "BTN_TRIGGER_HAPPY6", > >> + [BTN_TRIGGER_HAPPY7] = "BTN_TRIGGER_HAPPY7", > >> + [BTN_TRIGGER_HAPPY8] = "BTN_TRIGGER_HAPPY8", > >> + [BTN_TRIGGER_HAPPY9] = "BTN_TRIGGER_HAPPY9", > >> + [BTN_TRIGGER_HAPPY10] = "BTN_TRIGGER_HAPPY10", > >> + [BTN_TRIGGER_HAPPY11] = "BTN_TRIGGER_HAPPY11", > >> + [BTN_TRIGGER_HAPPY12] = "BTN_TRIGGER_HAPPY12", > >> + [BTN_TRIGGER_HAPPY13] = "BTN_TRIGGER_HAPPY13", > >> + [BTN_TRIGGER_HAPPY14] = "BTN_TRIGGER_HAPPY14", > >> + [BTN_TRIGGER_HAPPY15] = "BTN_TRIGGER_HAPPY15", > >> + [BTN_TRIGGER_HAPPY16] = "BTN_TRIGGER_HAPPY16", > >> + [BTN_TRIGGER_HAPPY17] = "BTN_TRIGGER_HAPPY17", > >> + [BTN_TRIGGER_HAPPY18] = "BTN_TRIGGER_HAPPY18", > >> + [BTN_TRIGGER_HAPPY19] = "BTN_TRIGGER_HAPPY19", > >> + [BTN_TRIGGER_HAPPY20] = "BTN_TRIGGER_HAPPY20", > >> + [BTN_TRIGGER_HAPPY21] = "BTN_TRIGGER_HAPPY21", > >> + [BTN_TRIGGER_HAPPY22] = "BTN_TRIGGER_HAPPY22", > >> + [BTN_TRIGGER_HAPPY23] = "BTN_TRIGGER_HAPPY23", > >> + [BTN_TRIGGER_HAPPY24] = "BTN_TRIGGER_HAPPY24", > >> + [BTN_TRIGGER_HAPPY25] = "BTN_TRIGGER_HAPPY25", > >> + [BTN_TRIGGER_HAPPY26] = "BTN_TRIGGER_HAPPY26", > >> + [BTN_TRIGGER_HAPPY27] = "BTN_TRIGGER_HAPPY27", > >> + [BTN_TRIGGER_HAPPY28] = "BTN_TRIGGER_HAPPY28", > >> + [BTN_TRIGGER_HAPPY29] = "BTN_TRIGGER_HAPPY29", > >> + [BTN_TRIGGER_HAPPY30] = "BTN_TRIGGER_HAPPY30", > >> + [BTN_TRIGGER_HAPPY31] = "BTN_TRIGGER_HAPPY31", > >> + [BTN_TRIGGER_HAPPY32] = "BTN_TRIGGER_HAPPY32", > >> + [BTN_TRIGGER_HAPPY33] = "BTN_TRIGGER_HAPPY33", > >> + [BTN_TRIGGER_HAPPY34] = "BTN_TRIGGER_HAPPY34", > >> + [BTN_TRIGGER_HAPPY35] = "BTN_TRIGGER_HAPPY35", > >> + [BTN_TRIGGER_HAPPY36] = "BTN_TRIGGER_HAPPY36", > >> + [BTN_TRIGGER_HAPPY37] = "BTN_TRIGGER_HAPPY37", > >> + [BTN_TRIGGER_HAPPY38] = "BTN_TRIGGER_HAPPY38", > >> + [BTN_TRIGGER_HAPPY39] = "BTN_TRIGGER_HAPPY39", > >> + [BTN_TRIGGER_HAPPY40] = "BTN_TRIGGER_HAPPY40", > >> +}; > >> + > >> +static const char * const led_map[LED_MAX + 1] = { > >> + [LED_NUML] = "LED_NUML", > >> + [LED_CAPSL] = "LED_CAPSL", > >> *** 11201 LINES SKIPPED *** > >> > > > > make buildworld fails to build due to this error: > > > > [...] > > c++ -target x86_64-unknown-freebsd16.0 > --sysroot=/usr/obj/usr/src/amd64.amd64/tmp > > -B/usr/obj/usr/src/amd64.amd64/tmp/usr/bin -fpie -O2 -pipe -fno-common > -march=native -I. > > -I/usr/src/sbin/devd -fPIE -DNDEBUG -MD -MF.depend.devd.pieo -MTdevd.pieo > > -Wno-format-zero-length -fstack-protector-strong -Wsystem-headers -Wall > -Wno-format-y2k -W > > -Wno-unused-parameter -Wpointer-arith -Wreturn-type -Wcast-qual > -Wwrite-strings -Wswitch > > -Wshadow -Wunused-parameter -Wcast-align -Wchar-subscripts -Wdate-time > > -Wmissing-variable-declarations -Wthread-safety -Wno-empty-body > -Wno-string-plus-int > > -Wno-unused-const-variable -Wno-error=unused-but-set-parameter > > -Wno-error=cast-function-type-mismatch > -Wno-missing-variable-declarations -Qunused-arguments > > -march=native -fPIE -std=gnu++17 -c /usr/src/sbin/devd/devd.cc > -o devd.pieo > > /usr/src/sbin/devd/devd.cc:1228:2: error: "Remove this gross hack" 1228 > | #error "Remove this > > gross hack" | ^ 1 error generated. *** Error code 1 > > Unrelated. This is because __FreeBSD_version was bumped now 15 > branched, and this was left in to scream at people to do something for > FreeBSD 16. I guess that worked, though a bit of an unfortunate way to > start the 16 cycle :) > Works as designed. Warner