Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 5 Sep 2025 05:17:18 +0100
From:      Jessica Clarke <jrtc27@freebsd.org>
To:        A FreeBSD User <freebsd@walstatt-de.de>
Cc:        Vladimir Kondratyev <wulf@FreeBSD.org>, "src-committers@freebsd.org" <src-committers@FreeBSD.org>, "dev-commits-src-all@freebsd.org" <dev-commits-src-all@FreeBSD.org>, "dev-commits-src-main@freebsd.org" <dev-commits-src-main@FreeBSD.org>
Subject:   Re: git: aef807876c30 - main - moused(8): Add support for evdev protocol
Message-ID:  <4AC13FF6-98EB-41C9-83EC-E8B9FB6A1093@freebsd.org>
In-Reply-To: <20250905061122.69e01f1a@thor.sb211.local>
References:  <202509042108.584L86Ro060944@gitrepo.freebsd.org> <20250905061122.69e01f1a@thor.sb211.local>

next in thread | previous in thread | raw e-mail | index | archive | help
On 5 Sep 2025, at 05:13, A FreeBSD User <freebsd@walstatt-de.de> wrote:

> Am Tage des Herren Thu, 4 Sep 2025 21:08:06 GMT
> Vladimir Kondratyev <wulf@FreeBSD.org> schrieb:
>=20
>> The branch main has been updated by wulf:
>>=20
>> URL: =
https://cgit.FreeBSD.org/src/commit/?id=3Daef807876c305587c60f73e2cd914115=
d22a53fd
>>=20
>> commit aef807876c305587c60f73e2cd914115d22a53fd
>> Author:     Vladimir Kondratyev <wulf@FreeBSD.org>
>> AuthorDate: 2025-09-04 21:07:25 +0000
>> Commit:     Vladimir Kondratyev <wulf@FreeBSD.org>
>> CommitDate: 2025-09-04 21:07:25 +0000
>>=20
>>    moused(8): Add support for evdev protocol
>>=20
>>    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.
>>=20
>>    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=3D"/dev/psm0"
>>          moused_nondefault_enable=3D"YES"
>>       One may add hw.usb.usbhid.enable=3D0 to /boot/loader.conf to =
enable
>>       ums(4) driver which supports sysmouse protocol.
>>=20
>>    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 =3D> msconvd/msconvd.8}    |  395 +--
>> usr.sbin/moused/{moused.c =3D> msconvd/msconvd.c}    | 1212 ++------
>> 24 files changed, 10008 insertions(+), 1340 deletions(-)
>>=20
>> 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=3D"NO" # font 8x14 from
>> /usr/share/{syscons,vt}/fonts/* (or NO). font8x8=3D"NO" # font 8x8 =
from
>> /usr/share/{syscons,vt}/fonts/* (or NO). blanktime=3D"300" # blank =
time (in
>> seconds) or "NO" to turn it off. saver=3D"NO" # screen saver: Uses
>> /boot/kernel/${saver}_saver.ko -moused_nondefault_enable=3D"YES" # =
Treat non-default mice as
>> enabled unless +moused_nondefault_enable=3D"NO" # Treat non-default =
mice as enabled unless
>>       # specifically overridden in rc.conf(5).
>> moused_enable=3D"NO" # Run the mouse daemon.
>> moused_type=3D"auto" # See man page for rc.conf(5) for available =
settings.
>> -moused_port=3D"/dev/psm0" # Set to your mouse port.
>> +moused_port=3D"auto" # Set to your mouse port.
>> moused_flags=3D"" # Any additional flags to moused.
>> mousechar_start=3D"NO" # if 0xd0-0xd3 default range is occupied in =
your
>> # language code table, specify alternative range
>> # start like mousechar_start=3D3, see vidcontrol(1)
>> +msconvd_enable=3D"NO" # Run the mouse protocol conversion daemon.
>> +msconvd_type=3D"auto" # See rc.conf(5) man page for available =
moused_type-s.
>> +msconvd_ports=3D"" # List of msconvd ports.
>> +msconvd_flags=3D"" # Any additional flags to msconvd.
>> allscreens_flags=3D"" # Set this vidcontrol mode for all virtual =
screens
>> allscreens_kbdflags=3D"" # Set this kbdcontrol mode for all virtual =
screens
>>=20
>> 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=3D jail
>> .if ${MK_LEGACY_CONSOLE} !=3D "no"
>> CONFGROUPS+=3D CONSOLE
>> CONSOLE+=3D moused
>> +CONSOLE+=3D msconvd
>> CONSOLE+=3D syscons
>> CONSOLEPACKAGE=3D 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=3D"msconvd"
>> +desc=3D"Mouse protocol conversion daemon"
>> +command=3D"/usr/sbin/${name}"
>> +start_cmd=3D"msconvd_start"
>> +pidprefix=3D"/var/run/msconvd"
>> +load_rc_config $name
>> +
>> +: ${msconvd_enable=3D"NO"}
>> +: ${msconvd_type=3D"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=3D"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=3D\${msconvd_$2_enable-${msconvd_enable}}
>> + rcvar=3D"msconvd_$2_enable"
>> + pidfile=3D"${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=3D$1
>> + eval myflags=3D\${msconvd_${ms}_flags-$msconvd_flags}
>> + eval myport=3D\${msconvd_${ms}_port-/dev/${ms}}
>> + eval mytype=3D\${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+=3Dusr/share/man/man1/host.1.gz
>> .endif
>>=20
>> .if ${MK_LEGACY_CONSOLE} =3D=3D no
>> +OLD_FILES+=3Detc/moused.conf
>> OLD_FILES+=3Detc/rc.d/moused
>> +OLD_FILES+=3Detc/rc.d/msconvd
>> OLD_FILES+=3Detc/rc.d/syscons
>> OLD_FILES+=3Dusr/sbin/kbdcontrol
>> OLD_FILES+=3Dusr/sbin/kbdmap
>> OLD_FILES+=3Dusr/sbin/moused
>> +OLD_FILES+=3Dusr/sbin/msconvd
>> OLD_FILES+=3Dusr/sbin/vidcontrol
>> OLD_FILES+=3Dusr/sbin/vidfont
>> OLD_FILES+=3Dusr/share/man/man1/kbdcontrol.1.gz
>> @@ -3806,7 +3809,11 @@ OLD_FILES+=3Dusr/share/man/man1/vidcontrol.1.gz
>> OLD_FILES+=3Dusr/share/man/man1/vidfont.1.gz
>> OLD_FILES+=3Dusr/share/man/man5/kbdmap.5.gz
>> OLD_FILES+=3Dusr/share/man/man5/keymap.5.gz
>> +OLD_FILES+=3Dusr/share/man/man5/moused.conf.5.gz
>> OLD_FILES+=3Dusr/share/man/man8/moused.8.gz
>> +OLD_FILES+=3Dusr/share/man/man8/msconvd.8.gz
>> +OLD_FILES+=3Dusr/share/moused/5-generic-touchpad.quirks
>> +OLD_DIRS+=3Dusr/share/moused
>> .endif
>>=20
>> .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=3D console-tools
>> -PROG=3D moused
>> -MAN=3D moused.8
>> +SUBDIR+=3Dmoused
>> +SUBDIR+=3Dmsconvd
>>=20
>> -LIBADD=3D m util
>> -
>> -#BINMODE=3D4555
>> -#PRECIOUSPROG=3D
>> -
>> -.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 =3D \
>> - include \
>> - include/xlocale \
>> - lib/${CSU_DIR} \
>> - lib/libc \
>> - lib/libcompiler_rt \
>> - lib/libutil \
>> - lib/msun \
>> -
>> -
>> -.include <dirdeps.mk>
>> -
>> -.if ${DEP_RELDIR} =3D=3D ${_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=3D console-tools
>> +PROG=3D moused
>> +
>> +SRCS=3D 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=3D moused.8 \
>> + moused.conf.5
>> +CONFS=3D moused.conf
>> +QUIRKS=3D 5-generic-touchpad.quirks
>> +
>> +CWARNFLAGS.quirks.c+=3D -Wno-cast-align -Wno-shadow -Wno-cast-qual \
>> + -Wno-unused-variable -Wno-unused-parameter
>> +CWARNFLAGS.util.c+=3D -Wno-shadow
>> +LIBADD=3D m util
>> +BINDIR=3D /usr/sbin
>> +
>> +FILES=3D ${QUIRKS:S|^|quirks/|}
>> +FILESDIR=3D /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] =3D {
>> +    [EV_SYN] =3D "EV_SYN",
>> +    [EV_KEY] =3D "EV_KEY",
>> +    [EV_REL] =3D "EV_REL",
>> +    [EV_ABS] =3D "EV_ABS",
>> +    [EV_MSC] =3D "EV_MSC",
>> +    [EV_SW] =3D "EV_SW",
>> +    [EV_LED] =3D "EV_LED",
>> +    [EV_SND] =3D "EV_SND",
>> +    [EV_REP] =3D "EV_REP",
>> +    [EV_FF] =3D "EV_FF",
>> +    [EV_PWR] =3D "EV_PWR",
>> +    [EV_FF_STATUS] =3D "EV_FF_STATUS",
>> +    [EV_MAX] =3D "EV_MAX",
>> +};
>> +
>> +static const char * const rel_map[REL_MAX + 1] =3D {
>> +    [REL_X] =3D "REL_X",
>> +    [REL_Y] =3D "REL_Y",
>> +    [REL_Z] =3D "REL_Z",
>> +    [REL_RX] =3D "REL_RX",
>> +    [REL_RY] =3D "REL_RY",
>> +    [REL_RZ] =3D "REL_RZ",
>> +    [REL_HWHEEL] =3D "REL_HWHEEL",
>> +    [REL_DIAL] =3D "REL_DIAL",
>> +    [REL_WHEEL] =3D "REL_WHEEL",
>> +    [REL_MISC] =3D "REL_MISC",
>> +    [REL_RESERVED] =3D "REL_RESERVED",
>> +    [REL_WHEEL_HI_RES] =3D "REL_WHEEL_HI_RES",
>> +    [REL_HWHEEL_HI_RES] =3D "REL_HWHEEL_HI_RES",
>> +    [REL_MAX] =3D "REL_MAX",
>> +};
>> +
>> +static const char * const abs_map[ABS_MAX + 1] =3D {
>> +    [ABS_X] =3D "ABS_X",
>> +    [ABS_Y] =3D "ABS_Y",
>> +    [ABS_Z] =3D "ABS_Z",
>> +    [ABS_RX] =3D "ABS_RX",
>> +    [ABS_RY] =3D "ABS_RY",
>> +    [ABS_RZ] =3D "ABS_RZ",
>> +    [ABS_THROTTLE] =3D "ABS_THROTTLE",
>> +    [ABS_RUDDER] =3D "ABS_RUDDER",
>> +    [ABS_WHEEL] =3D "ABS_WHEEL",
>> +    [ABS_GAS] =3D "ABS_GAS",
>> +    [ABS_BRAKE] =3D "ABS_BRAKE",
>> +    [ABS_HAT0X] =3D "ABS_HAT0X",
>> +    [ABS_HAT0Y] =3D "ABS_HAT0Y",
>> +    [ABS_HAT1X] =3D "ABS_HAT1X",
>> +    [ABS_HAT1Y] =3D "ABS_HAT1Y",
>> +    [ABS_HAT2X] =3D "ABS_HAT2X",
>> +    [ABS_HAT2Y] =3D "ABS_HAT2Y",
>> +    [ABS_HAT3X] =3D "ABS_HAT3X",
>> +    [ABS_HAT3Y] =3D "ABS_HAT3Y",
>> +    [ABS_PRESSURE] =3D "ABS_PRESSURE",
>> +    [ABS_DISTANCE] =3D "ABS_DISTANCE",
>> +    [ABS_TILT_X] =3D "ABS_TILT_X",
>> +    [ABS_TILT_Y] =3D "ABS_TILT_Y",
>> +    [ABS_TOOL_WIDTH] =3D "ABS_TOOL_WIDTH",
>> +    [ABS_VOLUME] =3D "ABS_VOLUME",
>> +    // [ABS_PROFILE] =3D "ABS_PROFILE",
>> +    [ABS_MISC] =3D "ABS_MISC",
>> +    [ABS_RESERVED] =3D "ABS_RESERVED",
>> +    [ABS_MT_SLOT] =3D "ABS_MT_SLOT",
>> +    [ABS_MT_TOUCH_MAJOR] =3D "ABS_MT_TOUCH_MAJOR",
>> +    [ABS_MT_TOUCH_MINOR] =3D "ABS_MT_TOUCH_MINOR",
>> +    [ABS_MT_WIDTH_MAJOR] =3D "ABS_MT_WIDTH_MAJOR",
>> +    [ABS_MT_WIDTH_MINOR] =3D "ABS_MT_WIDTH_MINOR",
>> +    [ABS_MT_ORIENTATION] =3D "ABS_MT_ORIENTATION",
>> +    [ABS_MT_POSITION_X] =3D "ABS_MT_POSITION_X",
>> +    [ABS_MT_POSITION_Y] =3D "ABS_MT_POSITION_Y",
>> +    [ABS_MT_TOOL_TYPE] =3D "ABS_MT_TOOL_TYPE",
>> +    [ABS_MT_BLOB_ID] =3D "ABS_MT_BLOB_ID",
>> +    [ABS_MT_TRACKING_ID] =3D "ABS_MT_TRACKING_ID",
>> +    [ABS_MT_PRESSURE] =3D "ABS_MT_PRESSURE",
>> +    [ABS_MT_DISTANCE] =3D "ABS_MT_DISTANCE",
>> +    [ABS_MT_TOOL_X] =3D "ABS_MT_TOOL_X",
>> +    [ABS_MT_TOOL_Y] =3D "ABS_MT_TOOL_Y",
>> +    [ABS_MAX] =3D "ABS_MAX",
>> +};
>> +
>> +static const char * const key_map[KEY_MAX + 1] =3D {
>> +    [KEY_RESERVED] =3D "KEY_RESERVED",
>> +    [KEY_ESC] =3D "KEY_ESC",
>> +    [KEY_1] =3D "KEY_1",
>> +    [KEY_2] =3D "KEY_2",
>> +    [KEY_3] =3D "KEY_3",
>> +    [KEY_4] =3D "KEY_4",
>> +    [KEY_5] =3D "KEY_5",
>> +    [KEY_6] =3D "KEY_6",
>> +    [KEY_7] =3D "KEY_7",
>> +    [KEY_8] =3D "KEY_8",
>> +    [KEY_9] =3D "KEY_9",
>> +    [KEY_0] =3D "KEY_0",
>> +    [KEY_MINUS] =3D "KEY_MINUS",
>> +    [KEY_EQUAL] =3D "KEY_EQUAL",
>> +    [KEY_BACKSPACE] =3D "KEY_BACKSPACE",
>> +    [KEY_TAB] =3D "KEY_TAB",
>> +    [KEY_Q] =3D "KEY_Q",
>> +    [KEY_W] =3D "KEY_W",
>> +    [KEY_E] =3D "KEY_E",
>> +    [KEY_R] =3D "KEY_R",
>> +    [KEY_T] =3D "KEY_T",
>> +    [KEY_Y] =3D "KEY_Y",
>> +    [KEY_U] =3D "KEY_U",
>> +    [KEY_I] =3D "KEY_I",
>> +    [KEY_O] =3D "KEY_O",
>> +    [KEY_P] =3D "KEY_P",
>> +    [KEY_LEFTBRACE] =3D "KEY_LEFTBRACE",
>> +    [KEY_RIGHTBRACE] =3D "KEY_RIGHTBRACE",
>> +    [KEY_ENTER] =3D "KEY_ENTER",
>> +    [KEY_LEFTCTRL] =3D "KEY_LEFTCTRL",
>> +    [KEY_A] =3D "KEY_A",
>> +    [KEY_S] =3D "KEY_S",
>> +    [KEY_D] =3D "KEY_D",
>> +    [KEY_F] =3D "KEY_F",
>> +    [KEY_G] =3D "KEY_G",
>> +    [KEY_H] =3D "KEY_H",
>> +    [KEY_J] =3D "KEY_J",
>> +    [KEY_K] =3D "KEY_K",
>> +    [KEY_L] =3D "KEY_L",
>> +    [KEY_SEMICOLON] =3D "KEY_SEMICOLON",
>> +    [KEY_APOSTROPHE] =3D "KEY_APOSTROPHE",
>> +    [KEY_GRAVE] =3D "KEY_GRAVE",
>> +    [KEY_LEFTSHIFT] =3D "KEY_LEFTSHIFT",
>> +    [KEY_BACKSLASH] =3D "KEY_BACKSLASH",
>> +    [KEY_Z] =3D "KEY_Z",
>> +    [KEY_X] =3D "KEY_X",
>> +    [KEY_C] =3D "KEY_C",
>> +    [KEY_V] =3D "KEY_V",
>> +    [KEY_B] =3D "KEY_B",
>> +    [KEY_N] =3D "KEY_N",
>> +    [KEY_M] =3D "KEY_M",
>> +    [KEY_COMMA] =3D "KEY_COMMA",
>> +    [KEY_DOT] =3D "KEY_DOT",
>> +    [KEY_SLASH] =3D "KEY_SLASH",
>> +    [KEY_RIGHTSHIFT] =3D "KEY_RIGHTSHIFT",
>> +    [KEY_KPASTERISK] =3D "KEY_KPASTERISK",
>> +    [KEY_LEFTALT] =3D "KEY_LEFTALT",
>> +    [KEY_SPACE] =3D "KEY_SPACE",
>> +    [KEY_CAPSLOCK] =3D "KEY_CAPSLOCK",
>> +    [KEY_F1] =3D "KEY_F1",
>> +    [KEY_F2] =3D "KEY_F2",
>> +    [KEY_F3] =3D "KEY_F3",
>> +    [KEY_F4] =3D "KEY_F4",
>> +    [KEY_F5] =3D "KEY_F5",
>> +    [KEY_F6] =3D "KEY_F6",
>> +    [KEY_F7] =3D "KEY_F7",
>> +    [KEY_F8] =3D "KEY_F8",
>> +    [KEY_F9] =3D "KEY_F9",
>> +    [KEY_F10] =3D "KEY_F10",
>> +    [KEY_NUMLOCK] =3D "KEY_NUMLOCK",
>> +    [KEY_SCROLLLOCK] =3D "KEY_SCROLLLOCK",
>> +    [KEY_KP7] =3D "KEY_KP7",
>> +    [KEY_KP8] =3D "KEY_KP8",
>> +    [KEY_KP9] =3D "KEY_KP9",
>> +    [KEY_KPMINUS] =3D "KEY_KPMINUS",
>> +    [KEY_KP4] =3D "KEY_KP4",
>> +    [KEY_KP5] =3D "KEY_KP5",
>> +    [KEY_KP6] =3D "KEY_KP6",
>> +    [KEY_KPPLUS] =3D "KEY_KPPLUS",
>> +    [KEY_KP1] =3D "KEY_KP1",
>> +    [KEY_KP2] =3D "KEY_KP2",
>> +    [KEY_KP3] =3D "KEY_KP3",
>> +    [KEY_KP0] =3D "KEY_KP0",
>> +    [KEY_KPDOT] =3D "KEY_KPDOT",
>> +    [KEY_ZENKAKUHANKAKU] =3D "KEY_ZENKAKUHANKAKU",
>> +    [KEY_102ND] =3D "KEY_102ND",
>> +    [KEY_F11] =3D "KEY_F11",
>> +    [KEY_F12] =3D "KEY_F12",
>> +    [KEY_RO] =3D "KEY_RO",
>> +    [KEY_KATAKANA] =3D "KEY_KATAKANA",
>> +    [KEY_HIRAGANA] =3D "KEY_HIRAGANA",
>> +    [KEY_HENKAN] =3D "KEY_HENKAN",
>> +    [KEY_KATAKANAHIRAGANA] =3D "KEY_KATAKANAHIRAGANA",
>> +    [KEY_MUHENKAN] =3D "KEY_MUHENKAN",
>> +    [KEY_KPJPCOMMA] =3D "KEY_KPJPCOMMA",
>> +    [KEY_KPENTER] =3D "KEY_KPENTER",
>> +    [KEY_RIGHTCTRL] =3D "KEY_RIGHTCTRL",
>> +    [KEY_KPSLASH] =3D "KEY_KPSLASH",
>> +    [KEY_SYSRQ] =3D "KEY_SYSRQ",
>> +    [KEY_RIGHTALT] =3D "KEY_RIGHTALT",
>> +    [KEY_LINEFEED] =3D "KEY_LINEFEED",
>> +    [KEY_HOME] =3D "KEY_HOME",
>> +    [KEY_UP] =3D "KEY_UP",
>> +    [KEY_PAGEUP] =3D "KEY_PAGEUP",
>> +    [KEY_LEFT] =3D "KEY_LEFT",
>> +    [KEY_RIGHT] =3D "KEY_RIGHT",
>> +    [KEY_END] =3D "KEY_END",
>> +    [KEY_DOWN] =3D "KEY_DOWN",
>> +    [KEY_PAGEDOWN] =3D "KEY_PAGEDOWN",
>> +    [KEY_INSERT] =3D "KEY_INSERT",
>> +    [KEY_DELETE] =3D "KEY_DELETE",
>> +    [KEY_MACRO] =3D "KEY_MACRO",
>> +    [KEY_MUTE] =3D "KEY_MUTE",
>> +    [KEY_VOLUMEDOWN] =3D "KEY_VOLUMEDOWN",
>> +    [KEY_VOLUMEUP] =3D "KEY_VOLUMEUP",
>> +    [KEY_POWER] =3D "KEY_POWER",
>> +    [KEY_KPEQUAL] =3D "KEY_KPEQUAL",
>> +    [KEY_KPPLUSMINUS] =3D "KEY_KPPLUSMINUS",
>> +    [KEY_PAUSE] =3D "KEY_PAUSE",
>> +    [KEY_SCALE] =3D "KEY_SCALE",
>> +    [KEY_KPCOMMA] =3D "KEY_KPCOMMA",
>> +    [KEY_HANGEUL] =3D "KEY_HANGEUL",
>> +    [KEY_HANJA] =3D "KEY_HANJA",
>> +    [KEY_YEN] =3D "KEY_YEN",
>> +    [KEY_LEFTMETA] =3D "KEY_LEFTMETA",
>> +    [KEY_RIGHTMETA] =3D "KEY_RIGHTMETA",
>> +    [KEY_COMPOSE] =3D "KEY_COMPOSE",
>> +    [KEY_STOP] =3D "KEY_STOP",
>> +    [KEY_AGAIN] =3D "KEY_AGAIN",
>> +    [KEY_PROPS] =3D "KEY_PROPS",
>> +    [KEY_UNDO] =3D "KEY_UNDO",
>> +    [KEY_FRONT] =3D "KEY_FRONT",
>> +    [KEY_COPY] =3D "KEY_COPY",
>> +    [KEY_OPEN] =3D "KEY_OPEN",
>> +    [KEY_PASTE] =3D "KEY_PASTE",
>> +    [KEY_FIND] =3D "KEY_FIND",
>> +    [KEY_CUT] =3D "KEY_CUT",
>> +    [KEY_HELP] =3D "KEY_HELP",
>> +    [KEY_MENU] =3D "KEY_MENU",
>> +    [KEY_CALC] =3D "KEY_CALC",
>> +    [KEY_SETUP] =3D "KEY_SETUP",
>> +    [KEY_SLEEP] =3D "KEY_SLEEP",
>> +    [KEY_WAKEUP] =3D "KEY_WAKEUP",
>> +    [KEY_FILE] =3D "KEY_FILE",
>> +    [KEY_SENDFILE] =3D "KEY_SENDFILE",
>> +    [KEY_DELETEFILE] =3D "KEY_DELETEFILE",
>> +    [KEY_XFER] =3D "KEY_XFER",
>> +    [KEY_PROG1] =3D "KEY_PROG1",
>> +    [KEY_PROG2] =3D "KEY_PROG2",
>> +    [KEY_WWW] =3D "KEY_WWW",
>> +    [KEY_MSDOS] =3D "KEY_MSDOS",
>> +    [KEY_COFFEE] =3D "KEY_COFFEE",
>> +    [KEY_ROTATE_DISPLAY] =3D "KEY_ROTATE_DISPLAY",
>> +    [KEY_CYCLEWINDOWS] =3D "KEY_CYCLEWINDOWS",
>> +    [KEY_MAIL] =3D "KEY_MAIL",
>> +    [KEY_BOOKMARKS] =3D "KEY_BOOKMARKS",
>> +    [KEY_COMPUTER] =3D "KEY_COMPUTER",
>> +    [KEY_BACK] =3D "KEY_BACK",
>> +    [KEY_FORWARD] =3D "KEY_FORWARD",
>> +    [KEY_CLOSECD] =3D "KEY_CLOSECD",
>> +    [KEY_EJECTCD] =3D "KEY_EJECTCD",
>> +    [KEY_EJECTCLOSECD] =3D "KEY_EJECTCLOSECD",
>> +    [KEY_NEXTSONG] =3D "KEY_NEXTSONG",
>> +    [KEY_PLAYPAUSE] =3D "KEY_PLAYPAUSE",
>> +    [KEY_PREVIOUSSONG] =3D "KEY_PREVIOUSSONG",
>> +    [KEY_STOPCD] =3D "KEY_STOPCD",
>> +    [KEY_RECORD] =3D "KEY_RECORD",
>> +    [KEY_REWIND] =3D "KEY_REWIND",
>> +    [KEY_PHONE] =3D "KEY_PHONE",
>> +    [KEY_ISO] =3D "KEY_ISO",
>> +    [KEY_CONFIG] =3D "KEY_CONFIG",
>> +    [KEY_HOMEPAGE] =3D "KEY_HOMEPAGE",
>> +    [KEY_REFRESH] =3D "KEY_REFRESH",
>> +    [KEY_EXIT] =3D "KEY_EXIT",
>> +    [KEY_MOVE] =3D "KEY_MOVE",
>> +    [KEY_EDIT] =3D "KEY_EDIT",
>> +    [KEY_SCROLLUP] =3D "KEY_SCROLLUP",
>> +    [KEY_SCROLLDOWN] =3D "KEY_SCROLLDOWN",
>> +    [KEY_KPLEFTPAREN] =3D "KEY_KPLEFTPAREN",
>> +    [KEY_KPRIGHTPAREN] =3D "KEY_KPRIGHTPAREN",
>> +    [KEY_NEW] =3D "KEY_NEW",
>> +    [KEY_REDO] =3D "KEY_REDO",
>> +    [KEY_F13] =3D "KEY_F13",
>> +    [KEY_F14] =3D "KEY_F14",
>> +    [KEY_F15] =3D "KEY_F15",
>> +    [KEY_F16] =3D "KEY_F16",
>> +    [KEY_F17] =3D "KEY_F17",
>> +    [KEY_F18] =3D "KEY_F18",
>> +    [KEY_F19] =3D "KEY_F19",
>> +    [KEY_F20] =3D "KEY_F20",
>> +    [KEY_F21] =3D "KEY_F21",
>> +    [KEY_F22] =3D "KEY_F22",
>> +    [KEY_F23] =3D "KEY_F23",
>> +    [KEY_F24] =3D "KEY_F24",
>> +    [KEY_PLAYCD] =3D "KEY_PLAYCD",
>> +    [KEY_PAUSECD] =3D "KEY_PAUSECD",
>> +    [KEY_PROG3] =3D "KEY_PROG3",
>> +    [KEY_PROG4] =3D "KEY_PROG4",
>> +    // [KEY_ALL_APPLICATIONS] =3D "KEY_ALL_APPLICATIONS",
>> +    [KEY_SUSPEND] =3D "KEY_SUSPEND",
>> +    [KEY_CLOSE] =3D "KEY_CLOSE",
>> +    [KEY_PLAY] =3D "KEY_PLAY",
>> +    [KEY_FASTFORWARD] =3D "KEY_FASTFORWARD",
>> +    [KEY_BASSBOOST] =3D "KEY_BASSBOOST",
>> +    [KEY_PRINT] =3D "KEY_PRINT",
>> +    [KEY_HP] =3D "KEY_HP",
>> +    [KEY_CAMERA] =3D "KEY_CAMERA",
>> +    [KEY_SOUND] =3D "KEY_SOUND",
>> +    [KEY_QUESTION] =3D "KEY_QUESTION",
>> +    [KEY_EMAIL] =3D "KEY_EMAIL",
>> +    [KEY_CHAT] =3D "KEY_CHAT",
>> +    [KEY_SEARCH] =3D "KEY_SEARCH",
>> +    [KEY_CONNECT] =3D "KEY_CONNECT",
>> +    [KEY_FINANCE] =3D "KEY_FINANCE",
>> +    [KEY_SPORT] =3D "KEY_SPORT",
>> +    [KEY_SHOP] =3D "KEY_SHOP",
>> +    [KEY_ALTERASE] =3D "KEY_ALTERASE",
>> +    [KEY_CANCEL] =3D "KEY_CANCEL",
>> +    [KEY_BRIGHTNESSDOWN] =3D "KEY_BRIGHTNESSDOWN",
>> +    [KEY_BRIGHTNESSUP] =3D "KEY_BRIGHTNESSUP",
>> +    [KEY_MEDIA] =3D "KEY_MEDIA",
>> +    [KEY_SWITCHVIDEOMODE] =3D "KEY_SWITCHVIDEOMODE",
>> +    [KEY_KBDILLUMTOGGLE] =3D "KEY_KBDILLUMTOGGLE",
>> +    [KEY_KBDILLUMDOWN] =3D "KEY_KBDILLUMDOWN",
>> +    [KEY_KBDILLUMUP] =3D "KEY_KBDILLUMUP",
>> +    [KEY_SEND] =3D "KEY_SEND",
>> +    [KEY_REPLY] =3D "KEY_REPLY",
>> +    [KEY_FORWARDMAIL] =3D "KEY_FORWARDMAIL",
>> +    [KEY_SAVE] =3D "KEY_SAVE",
>> +    [KEY_DOCUMENTS] =3D "KEY_DOCUMENTS",
>> +    [KEY_BATTERY] =3D "KEY_BATTERY",
>> +    [KEY_BLUETOOTH] =3D "KEY_BLUETOOTH",
>> +    [KEY_WLAN] =3D "KEY_WLAN",
>> +    [KEY_UWB] =3D "KEY_UWB",
>> +    [KEY_UNKNOWN] =3D "KEY_UNKNOWN",
>> +    [KEY_VIDEO_NEXT] =3D "KEY_VIDEO_NEXT",
>> +    [KEY_VIDEO_PREV] =3D "KEY_VIDEO_PREV",
>> +    [KEY_BRIGHTNESS_CYCLE] =3D "KEY_BRIGHTNESS_CYCLE",
>> +    [KEY_BRIGHTNESS_AUTO] =3D "KEY_BRIGHTNESS_AUTO",
>> +    [KEY_DISPLAY_OFF] =3D "KEY_DISPLAY_OFF",
>> +    [KEY_WWAN] =3D "KEY_WWAN",
>> +    [KEY_RFKILL] =3D "KEY_RFKILL",
>> +    [KEY_MICMUTE] =3D "KEY_MICMUTE",
>> +    [KEY_OK] =3D "KEY_OK",
>> +    [KEY_SELECT] =3D "KEY_SELECT",
>> +    [KEY_GOTO] =3D "KEY_GOTO",
>> +    [KEY_CLEAR] =3D "KEY_CLEAR",
>> +    [KEY_POWER2] =3D "KEY_POWER2",
>> +    [KEY_OPTION] =3D "KEY_OPTION",
>> +    [KEY_INFO] =3D "KEY_INFO",
>> +    [KEY_TIME] =3D "KEY_TIME",
>> +    [KEY_VENDOR] =3D "KEY_VENDOR",
>> +    [KEY_ARCHIVE] =3D "KEY_ARCHIVE",
>> +    [KEY_PROGRAM] =3D "KEY_PROGRAM",
>> +    [KEY_CHANNEL] =3D "KEY_CHANNEL",
>> +    [KEY_FAVORITES] =3D "KEY_FAVORITES",
>> +    [KEY_EPG] =3D "KEY_EPG",
>> +    [KEY_PVR] =3D "KEY_PVR",
>> +    [KEY_MHP] =3D "KEY_MHP",
>> +    [KEY_LANGUAGE] =3D "KEY_LANGUAGE",
>> +    [KEY_TITLE] =3D "KEY_TITLE",
>> +    [KEY_SUBTITLE] =3D "KEY_SUBTITLE",
>> +    [KEY_ANGLE] =3D "KEY_ANGLE",
>> +    [KEY_FULL_SCREEN] =3D "KEY_FULL_SCREEN",
>> +    [KEY_MODE] =3D "KEY_MODE",
>> +    [KEY_KEYBOARD] =3D "KEY_KEYBOARD",
>> +    [KEY_ASPECT_RATIO] =3D "KEY_ASPECT_RATIO",
>> +    [KEY_PC] =3D "KEY_PC",
>> +    [KEY_TV] =3D "KEY_TV",
>> +    [KEY_TV2] =3D "KEY_TV2",
>> +    [KEY_VCR] =3D "KEY_VCR",
>> +    [KEY_VCR2] =3D "KEY_VCR2",
>> +    [KEY_SAT] =3D "KEY_SAT",
>> +    [KEY_SAT2] =3D "KEY_SAT2",
>> +    [KEY_CD] =3D "KEY_CD",
>> +    [KEY_TAPE] =3D "KEY_TAPE",
>> +    [KEY_RADIO] =3D "KEY_RADIO",
>> +    [KEY_TUNER] =3D "KEY_TUNER",
>> +    [KEY_PLAYER] =3D "KEY_PLAYER",
>> +    [KEY_TEXT] =3D "KEY_TEXT",
>> +    [KEY_DVD] =3D "KEY_DVD",
>> +    [KEY_AUX] =3D "KEY_AUX",
>> +    [KEY_MP3] =3D "KEY_MP3",
>> +    [KEY_AUDIO] =3D "KEY_AUDIO",
>> +    [KEY_VIDEO] =3D "KEY_VIDEO",
>> +    [KEY_DIRECTORY] =3D "KEY_DIRECTORY",
>> +    [KEY_LIST] =3D "KEY_LIST",
>> +    [KEY_MEMO] =3D "KEY_MEMO",
>> +    [KEY_CALENDAR] =3D "KEY_CALENDAR",
>> +    [KEY_RED] =3D "KEY_RED",
>> +    [KEY_GREEN] =3D "KEY_GREEN",
>> +    [KEY_YELLOW] =3D "KEY_YELLOW",
>> +    [KEY_BLUE] =3D "KEY_BLUE",
>> +    [KEY_CHANNELUP] =3D "KEY_CHANNELUP",
>> +    [KEY_CHANNELDOWN] =3D "KEY_CHANNELDOWN",
>> +    [KEY_FIRST] =3D "KEY_FIRST",
>> +    [KEY_LAST] =3D "KEY_LAST",
>> +    [KEY_AB] =3D "KEY_AB",
>> +    [KEY_NEXT] =3D "KEY_NEXT",
>> +    [KEY_RESTART] =3D "KEY_RESTART",
>> +    [KEY_SLOW] =3D "KEY_SLOW",
>> +    [KEY_SHUFFLE] =3D "KEY_SHUFFLE",
>> +    [KEY_BREAK] =3D "KEY_BREAK",
>> +    [KEY_PREVIOUS] =3D "KEY_PREVIOUS",
>> +    [KEY_DIGITS] =3D "KEY_DIGITS",
>> +    [KEY_TEEN] =3D "KEY_TEEN",
>> +    [KEY_TWEN] =3D "KEY_TWEN",
>> +    [KEY_VIDEOPHONE] =3D "KEY_VIDEOPHONE",
>> +    [KEY_GAMES] =3D "KEY_GAMES",
>> +    [KEY_ZOOMIN] =3D "KEY_ZOOMIN",
>> +    [KEY_ZOOMOUT] =3D "KEY_ZOOMOUT",
>> +    [KEY_ZOOMRESET] =3D "KEY_ZOOMRESET",
>> +    [KEY_WORDPROCESSOR] =3D "KEY_WORDPROCESSOR",
>> +    [KEY_EDITOR] =3D "KEY_EDITOR",
>> +    [KEY_SPREADSHEET] =3D "KEY_SPREADSHEET",
>> +    [KEY_GRAPHICSEDITOR] =3D "KEY_GRAPHICSEDITOR",
>> +    [KEY_PRESENTATION] =3D "KEY_PRESENTATION",
>> +    [KEY_DATABASE] =3D "KEY_DATABASE",
>> +    [KEY_NEWS] =3D "KEY_NEWS",
>> +    [KEY_VOICEMAIL] =3D "KEY_VOICEMAIL",
>> +    [KEY_ADDRESSBOOK] =3D "KEY_ADDRESSBOOK",
>> +    [KEY_MESSENGER] =3D "KEY_MESSENGER",
>> +    [KEY_DISPLAYTOGGLE] =3D "KEY_DISPLAYTOGGLE",
>> +    [KEY_SPELLCHECK] =3D "KEY_SPELLCHECK",
>> +    [KEY_LOGOFF] =3D "KEY_LOGOFF",
>> +    [KEY_DOLLAR] =3D "KEY_DOLLAR",
>> +    [KEY_EURO] =3D "KEY_EURO",
>> +    [KEY_FRAMEBACK] =3D "KEY_FRAMEBACK",
>> +    [KEY_FRAMEFORWARD] =3D "KEY_FRAMEFORWARD",
>> +    [KEY_CONTEXT_MENU] =3D "KEY_CONTEXT_MENU",
>> +    [KEY_MEDIA_REPEAT] =3D "KEY_MEDIA_REPEAT",
>> +    [KEY_10CHANNELSUP] =3D "KEY_10CHANNELSUP",
>> +    [KEY_10CHANNELSDOWN] =3D "KEY_10CHANNELSDOWN",
>> +    [KEY_IMAGES] =3D "KEY_IMAGES",
>> +    // [KEY_NOTIFICATION_CENTER] =3D "KEY_NOTIFICATION_CENTER",
>> +    // [KEY_PICKUP_PHONE] =3D "KEY_PICKUP_PHONE",
>> +    // [KEY_HANGUP_PHONE] =3D "KEY_HANGUP_PHONE",
>> +    [KEY_DEL_EOL] =3D "KEY_DEL_EOL",
>> +    [KEY_DEL_EOS] =3D "KEY_DEL_EOS",
>> +    [KEY_INS_LINE] =3D "KEY_INS_LINE",
>> +    [KEY_DEL_LINE] =3D "KEY_DEL_LINE",
>> +    [KEY_FN] =3D "KEY_FN",
>> +    [KEY_FN_ESC] =3D "KEY_FN_ESC",
>> +    [KEY_FN_F1] =3D "KEY_FN_F1",
>> +    [KEY_FN_F2] =3D "KEY_FN_F2",
>> +    [KEY_FN_F3] =3D "KEY_FN_F3",
>> +    [KEY_FN_F4] =3D "KEY_FN_F4",
>> +    [KEY_FN_F5] =3D "KEY_FN_F5",
>> +    [KEY_FN_F6] =3D "KEY_FN_F6",
>> +    [KEY_FN_F7] =3D "KEY_FN_F7",
>> +    [KEY_FN_F8] =3D "KEY_FN_F8",
>> +    [KEY_FN_F9] =3D "KEY_FN_F9",
>> +    [KEY_FN_F10] =3D "KEY_FN_F10",
>> +    [KEY_FN_F11] =3D "KEY_FN_F11",
>> +    [KEY_FN_F12] =3D "KEY_FN_F12",
>> +    [KEY_FN_1] =3D "KEY_FN_1",
>> +    [KEY_FN_2] =3D "KEY_FN_2",
>> +    [KEY_FN_D] =3D "KEY_FN_D",
>> +    [KEY_FN_E] =3D "KEY_FN_E",
>> +    [KEY_FN_F] =3D "KEY_FN_F",
>> +    [KEY_FN_S] =3D "KEY_FN_S",
>> +    [KEY_FN_B] =3D "KEY_FN_B",
>> +    // [KEY_FN_RIGHT_SHIFT] =3D "KEY_FN_RIGHT_SHIFT",
>> +    [KEY_BRL_DOT1] =3D "KEY_BRL_DOT1",
>> +    [KEY_BRL_DOT2] =3D "KEY_BRL_DOT2",
>> +    [KEY_BRL_DOT3] =3D "KEY_BRL_DOT3",
>> +    [KEY_BRL_DOT4] =3D "KEY_BRL_DOT4",
>> +    [KEY_BRL_DOT5] =3D "KEY_BRL_DOT5",
>> +    [KEY_BRL_DOT6] =3D "KEY_BRL_DOT6",
>> +    [KEY_BRL_DOT7] =3D "KEY_BRL_DOT7",
>> +    [KEY_BRL_DOT8] =3D "KEY_BRL_DOT8",
>> +    [KEY_BRL_DOT9] =3D "KEY_BRL_DOT9",
>> +    [KEY_BRL_DOT10] =3D "KEY_BRL_DOT10",
>> +    [KEY_NUMERIC_0] =3D "KEY_NUMERIC_0",
>> +    [KEY_NUMERIC_1] =3D "KEY_NUMERIC_1",
>> +    [KEY_NUMERIC_2] =3D "KEY_NUMERIC_2",
>> +    [KEY_NUMERIC_3] =3D "KEY_NUMERIC_3",
>> +    [KEY_NUMERIC_4] =3D "KEY_NUMERIC_4",
>> +    [KEY_NUMERIC_5] =3D "KEY_NUMERIC_5",
>> +    [KEY_NUMERIC_6] =3D "KEY_NUMERIC_6",
>> +    [KEY_NUMERIC_7] =3D "KEY_NUMERIC_7",
>> +    [KEY_NUMERIC_8] =3D "KEY_NUMERIC_8",
>> +    [KEY_NUMERIC_9] =3D "KEY_NUMERIC_9",
>> +    [KEY_NUMERIC_STAR] =3D "KEY_NUMERIC_STAR",
>> +    [KEY_NUMERIC_POUND] =3D "KEY_NUMERIC_POUND",
>> +    [KEY_NUMERIC_A] =3D "KEY_NUMERIC_A",
>> +    [KEY_NUMERIC_B] =3D "KEY_NUMERIC_B",
>> +    [KEY_NUMERIC_C] =3D "KEY_NUMERIC_C",
>> +    [KEY_NUMERIC_D] =3D "KEY_NUMERIC_D",
>> +    [KEY_CAMERA_FOCUS] =3D "KEY_CAMERA_FOCUS",
>> +    [KEY_WPS_BUTTON] =3D "KEY_WPS_BUTTON",
>> +    [KEY_TOUCHPAD_TOGGLE] =3D "KEY_TOUCHPAD_TOGGLE",
>> +    [KEY_TOUCHPAD_ON] =3D "KEY_TOUCHPAD_ON",
>> +    [KEY_TOUCHPAD_OFF] =3D "KEY_TOUCHPAD_OFF",
>> +    [KEY_CAMERA_ZOOMIN] =3D "KEY_CAMERA_ZOOMIN",
>> +    [KEY_CAMERA_ZOOMOUT] =3D "KEY_CAMERA_ZOOMOUT",
>> +    [KEY_CAMERA_UP] =3D "KEY_CAMERA_UP",
>> +    [KEY_CAMERA_DOWN] =3D "KEY_CAMERA_DOWN",
>> +    [KEY_CAMERA_LEFT] =3D "KEY_CAMERA_LEFT",
>> +    [KEY_CAMERA_RIGHT] =3D "KEY_CAMERA_RIGHT",
>> +    [KEY_ATTENDANT_ON] =3D "KEY_ATTENDANT_ON",
>> +    [KEY_ATTENDANT_OFF] =3D "KEY_ATTENDANT_OFF",
>> +    [KEY_ATTENDANT_TOGGLE] =3D "KEY_ATTENDANT_TOGGLE",
>> +    [KEY_LIGHTS_TOGGLE] =3D "KEY_LIGHTS_TOGGLE",
>> +    [KEY_ALS_TOGGLE] =3D "KEY_ALS_TOGGLE",
>> +    [KEY_ROTATE_LOCK_TOGGLE] =3D "KEY_ROTATE_LOCK_TOGGLE",
>> +    [KEY_BUTTONCONFIG] =3D "KEY_BUTTONCONFIG",
>> +    [KEY_TASKMANAGER] =3D "KEY_TASKMANAGER",
>> +    [KEY_JOURNAL] =3D "KEY_JOURNAL",
>> +    [KEY_CONTROLPANEL] =3D "KEY_CONTROLPANEL",
>> +    [KEY_APPSELECT] =3D "KEY_APPSELECT",
>> +    [KEY_SCREENSAVER] =3D "KEY_SCREENSAVER",
>> +    [KEY_VOICECOMMAND] =3D "KEY_VOICECOMMAND",
>> +    [KEY_ASSISTANT] =3D "KEY_ASSISTANT",
>> +    [KEY_KBD_LAYOUT_NEXT] =3D "KEY_KBD_LAYOUT_NEXT",
>> +    // [KEY_EMOJI_PICKER] =3D "KEY_EMOJI_PICKER",
>> +    //[KEY_DICTATE] =3D "KEY_DICTATE",
>> +    //[KEY_CAMERA_ACCESS_ENABLE] =3D "KEY_CAMERA_ACCESS_ENABLE",
>> +    //[KEY_CAMERA_ACCESS_DISABLE] =3D "KEY_CAMERA_ACCESS_DISABLE",
>> +    //[KEY_CAMERA_ACCESS_TOGGLE] =3D "KEY_CAMERA_ACCESS_TOGGLE",
>> +    [KEY_BRIGHTNESS_MIN] =3D "KEY_BRIGHTNESS_MIN",
>> +    [KEY_BRIGHTNESS_MAX] =3D "KEY_BRIGHTNESS_MAX",
>> +    [KEY_KBDINPUTASSIST_PREV] =3D "KEY_KBDINPUTASSIST_PREV",
>> +    [KEY_KBDINPUTASSIST_NEXT] =3D "KEY_KBDINPUTASSIST_NEXT",
>> +    [KEY_KBDINPUTASSIST_PREVGROUP] =3D =
"KEY_KBDINPUTASSIST_PREVGROUP",
>> +    [KEY_KBDINPUTASSIST_NEXTGROUP] =3D =
"KEY_KBDINPUTASSIST_NEXTGROUP",
>> +    [KEY_KBDINPUTASSIST_ACCEPT] =3D "KEY_KBDINPUTASSIST_ACCEPT",
>> +    [KEY_KBDINPUTASSIST_CANCEL] =3D "KEY_KBDINPUTASSIST_CANCEL",
>> +    [KEY_RIGHT_UP] =3D "KEY_RIGHT_UP",
>> +    [KEY_RIGHT_DOWN] =3D "KEY_RIGHT_DOWN",
>> +    [KEY_LEFT_UP] =3D "KEY_LEFT_UP",
>> +    [KEY_LEFT_DOWN] =3D "KEY_LEFT_DOWN",
>> +    [KEY_ROOT_MENU] =3D "KEY_ROOT_MENU",
>> +    [KEY_MEDIA_TOP_MENU] =3D "KEY_MEDIA_TOP_MENU",
>> +    [KEY_NUMERIC_11] =3D "KEY_NUMERIC_11",
>> +    [KEY_NUMERIC_12] =3D "KEY_NUMERIC_12",
>> +    [KEY_AUDIO_DESC] =3D "KEY_AUDIO_DESC",
>> +    [KEY_3D_MODE] =3D "KEY_3D_MODE",
>> +    [KEY_NEXT_FAVORITE] =3D "KEY_NEXT_FAVORITE",
>> +    [KEY_STOP_RECORD] =3D "KEY_STOP_RECORD",
>> +    [KEY_PAUSE_RECORD] =3D "KEY_PAUSE_RECORD",
>> +    [KEY_VOD] =3D "KEY_VOD",
>> +    [KEY_UNMUTE] =3D "KEY_UNMUTE",
>> +    [KEY_FASTREVERSE] =3D "KEY_FASTREVERSE",
>> +    [KEY_SLOWREVERSE] =3D "KEY_SLOWREVERSE",
>> +    [KEY_DATA] =3D "KEY_DATA",
>> +    [KEY_ONSCREEN_KEYBOARD] =3D "KEY_ONSCREEN_KEYBOARD",
>> +    [KEY_PRIVACY_SCREEN_TOGGLE] =3D "KEY_PRIVACY_SCREEN_TOGGLE",
>> +    [KEY_SELECTIVE_SCREENSHOT] =3D "KEY_SELECTIVE_SCREENSHOT",
>> +    // [KEY_NEXT_ELEMENT] =3D "KEY_NEXT_ELEMENT",
>> +    // [KEY_PREVIOUS_ELEMENT] =3D "KEY_PREVIOUS_ELEMENT",
>> +    // [KEY_AUTOPILOT_ENGAGE_TOGGLE] =3D =
"KEY_AUTOPILOT_ENGAGE_TOGGLE",
>> +    // [KEY_MARK_WAYPOINT] =3D "KEY_MARK_WAYPOINT",
>> +    // [KEY_SOS] =3D "KEY_SOS",
>> +    // [KEY_NAV_CHART] =3D "KEY_NAV_CHART",
>> +    // [KEY_FISHING_CHART] =3D "KEY_FISHING_CHART",
>> +    // [KEY_SINGLE_RANGE_RADAR] =3D "KEY_SINGLE_RANGE_RADAR",
>> +    // [KEY_DUAL_RANGE_RADAR] =3D "KEY_DUAL_RANGE_RADAR",
>> +    // [KEY_RADAR_OVERLAY] =3D "KEY_RADAR_OVERLAY",
>> +    // [KEY_TRADITIONAL_SONAR] =3D "KEY_TRADITIONAL_SONAR",
>> +    //  [KEY_CLEARVU_SONAR] =3D "KEY_CLEARVU_SONAR",
>> +    // [KEY_SIDEVU_SONAR] =3D "KEY_SIDEVU_SONAR",
>> +    // [KEY_NAV_INFO] =3D "KEY_NAV_INFO",
>> +    // [KEY_BRIGHTNESS_MENU] =3D "KEY_BRIGHTNESS_MENU",
>> +    [KEY_MACRO1] =3D "KEY_MACRO1",
>> +    [KEY_MACRO2] =3D "KEY_MACRO2",
>> +    [KEY_MACRO3] =3D "KEY_MACRO3",
>> +    [KEY_MACRO4] =3D "KEY_MACRO4",
>> +    [KEY_MACRO5] =3D "KEY_MACRO5",
>> +    [KEY_MACRO6] =3D "KEY_MACRO6",
>> +    [KEY_MACRO7] =3D "KEY_MACRO7",
>> +    [KEY_MACRO8] =3D "KEY_MACRO8",
>> +    [KEY_MACRO9] =3D "KEY_MACRO9",
>> +    [KEY_MACRO10] =3D "KEY_MACRO10",
>> +    [KEY_MACRO11] =3D "KEY_MACRO11",
>> +    [KEY_MACRO12] =3D "KEY_MACRO12",
>> +    [KEY_MACRO13] =3D "KEY_MACRO13",
>> +    [KEY_MACRO14] =3D "KEY_MACRO14",
>> +    [KEY_MACRO15] =3D "KEY_MACRO15",
>> +    [KEY_MACRO16] =3D "KEY_MACRO16",
>> +    [KEY_MACRO17] =3D "KEY_MACRO17",
>> +    [KEY_MACRO18] =3D "KEY_MACRO18",
>> +    [KEY_MACRO19] =3D "KEY_MACRO19",
>> +    [KEY_MACRO20] =3D "KEY_MACRO20",
>> +    [KEY_MACRO21] =3D "KEY_MACRO21",
>> +    [KEY_MACRO22] =3D "KEY_MACRO22",
>> +    [KEY_MACRO23] =3D "KEY_MACRO23",
>> +    [KEY_MACRO24] =3D "KEY_MACRO24",
>> +    [KEY_MACRO25] =3D "KEY_MACRO25",
>> +    [KEY_MACRO26] =3D "KEY_MACRO26",
>> +    [KEY_MACRO27] =3D "KEY_MACRO27",
>> +    [KEY_MACRO28] =3D "KEY_MACRO28",
>> +    [KEY_MACRO29] =3D "KEY_MACRO29",
>> +    [KEY_MACRO30] =3D "KEY_MACRO30",
>> +    [KEY_MACRO_RECORD_START] =3D "KEY_MACRO_RECORD_START",
>> +    [KEY_MACRO_RECORD_STOP] =3D "KEY_MACRO_RECORD_STOP",
>> +    [KEY_MACRO_PRESET_CYCLE] =3D "KEY_MACRO_PRESET_CYCLE",
>> +    [KEY_MACRO_PRESET1] =3D "KEY_MACRO_PRESET1",
>> +    [KEY_MACRO_PRESET2] =3D "KEY_MACRO_PRESET2",
>> +    [KEY_MACRO_PRESET3] =3D "KEY_MACRO_PRESET3",
>> +    [KEY_KBD_LCD_MENU1] =3D "KEY_KBD_LCD_MENU1",
>> +    [KEY_KBD_LCD_MENU2] =3D "KEY_KBD_LCD_MENU2",
>> +    [KEY_KBD_LCD_MENU3] =3D "KEY_KBD_LCD_MENU3",
>> +    [KEY_KBD_LCD_MENU4] =3D "KEY_KBD_LCD_MENU4",
>> +    [KEY_KBD_LCD_MENU5] =3D "KEY_KBD_LCD_MENU5",
>> +    [KEY_MAX] =3D "KEY_MAX",
>> +    [BTN_0] =3D "BTN_0",
>> +    [BTN_1] =3D "BTN_1",
>> +    [BTN_2] =3D "BTN_2",
>> +    [BTN_3] =3D "BTN_3",
>> +    [BTN_4] =3D "BTN_4",
>> +    [BTN_5] =3D "BTN_5",
>> +    [BTN_6] =3D "BTN_6",
>> +    [BTN_7] =3D "BTN_7",
>> +    [BTN_8] =3D "BTN_8",
>> +    [BTN_9] =3D "BTN_9",
>> +    [BTN_LEFT] =3D "BTN_LEFT",
>> +    [BTN_RIGHT] =3D "BTN_RIGHT",
>> +    [BTN_MIDDLE] =3D "BTN_MIDDLE",
>> +    [BTN_SIDE] =3D "BTN_SIDE",
>> +    [BTN_EXTRA] =3D "BTN_EXTRA",
>> +    [BTN_FORWARD] =3D "BTN_FORWARD",
>> +    [BTN_BACK] =3D "BTN_BACK",
>> +    [BTN_TASK] =3D "BTN_TASK",
>> +    [BTN_TRIGGER] =3D "BTN_TRIGGER",
>> +    [BTN_THUMB] =3D "BTN_THUMB",
>> +    [BTN_THUMB2] =3D "BTN_THUMB2",
>> +    [BTN_TOP] =3D "BTN_TOP",
>> +    [BTN_TOP2] =3D "BTN_TOP2",
>> +    [BTN_PINKIE] =3D "BTN_PINKIE",
>> +    [BTN_BASE] =3D "BTN_BASE",
>> +    [BTN_BASE2] =3D "BTN_BASE2",
>> +    [BTN_BASE3] =3D "BTN_BASE3",
>> +    [BTN_BASE4] =3D "BTN_BASE4",
>> +    [BTN_BASE5] =3D "BTN_BASE5",
>> +    [BTN_BASE6] =3D "BTN_BASE6",
>> +    [BTN_DEAD] =3D "BTN_DEAD",
>> +    [BTN_SOUTH] =3D "BTN_SOUTH",
>> +    [BTN_EAST] =3D "BTN_EAST",
>> +    [BTN_C] =3D "BTN_C",
>> +    [BTN_NORTH] =3D "BTN_NORTH",
>> +    [BTN_WEST] =3D "BTN_WEST",
>> +    [BTN_Z] =3D "BTN_Z",
>> +    [BTN_TL] =3D "BTN_TL",
>> +    [BTN_TR] =3D "BTN_TR",
>> +    [BTN_TL2] =3D "BTN_TL2",
>> +    [BTN_TR2] =3D "BTN_TR2",
>> +    [BTN_SELECT] =3D "BTN_SELECT",
>> +    [BTN_START] =3D "BTN_START",
>> +    [BTN_MODE] =3D "BTN_MODE",
>> +    [BTN_THUMBL] =3D "BTN_THUMBL",
>> +    [BTN_THUMBR] =3D "BTN_THUMBR",
>> +    [BTN_TOOL_PEN] =3D "BTN_TOOL_PEN",
>> +    [BTN_TOOL_RUBBER] =3D "BTN_TOOL_RUBBER",
>> +    [BTN_TOOL_BRUSH] =3D "BTN_TOOL_BRUSH",
>> +    [BTN_TOOL_PENCIL] =3D "BTN_TOOL_PENCIL",
>> +    [BTN_TOOL_AIRBRUSH] =3D "BTN_TOOL_AIRBRUSH",
>> +    [BTN_TOOL_FINGER] =3D "BTN_TOOL_FINGER",
>> +    [BTN_TOOL_MOUSE] =3D "BTN_TOOL_MOUSE",
>> +    [BTN_TOOL_LENS] =3D "BTN_TOOL_LENS",
>> +    [BTN_TOOL_QUINTTAP] =3D "BTN_TOOL_QUINTTAP",
>> +    [BTN_STYLUS3] =3D "BTN_STYLUS3",
>> +    [BTN_TOUCH] =3D "BTN_TOUCH",
>> +    [BTN_STYLUS] =3D "BTN_STYLUS",
>> +    [BTN_STYLUS2] =3D "BTN_STYLUS2",
>> +    [BTN_TOOL_DOUBLETAP] =3D "BTN_TOOL_DOUBLETAP",
>> +    [BTN_TOOL_TRIPLETAP] =3D "BTN_TOOL_TRIPLETAP",
>> +    [BTN_TOOL_QUADTAP] =3D "BTN_TOOL_QUADTAP",
>> +    [BTN_GEAR_DOWN] =3D "BTN_GEAR_DOWN",
>> +    [BTN_GEAR_UP] =3D "BTN_GEAR_UP",
>> +    [BTN_DPAD_UP] =3D "BTN_DPAD_UP",
>> +    [BTN_DPAD_DOWN] =3D "BTN_DPAD_DOWN",
>> +    [BTN_DPAD_LEFT] =3D "BTN_DPAD_LEFT",
>> +    [BTN_DPAD_RIGHT] =3D "BTN_DPAD_RIGHT",
>> +    [BTN_TRIGGER_HAPPY1] =3D "BTN_TRIGGER_HAPPY1",
>> +    [BTN_TRIGGER_HAPPY2] =3D "BTN_TRIGGER_HAPPY2",
>> +    [BTN_TRIGGER_HAPPY3] =3D "BTN_TRIGGER_HAPPY3",
>> +    [BTN_TRIGGER_HAPPY4] =3D "BTN_TRIGGER_HAPPY4",
>> +    [BTN_TRIGGER_HAPPY5] =3D "BTN_TRIGGER_HAPPY5",
>> +    [BTN_TRIGGER_HAPPY6] =3D "BTN_TRIGGER_HAPPY6",
>> +    [BTN_TRIGGER_HAPPY7] =3D "BTN_TRIGGER_HAPPY7",
>> +    [BTN_TRIGGER_HAPPY8] =3D "BTN_TRIGGER_HAPPY8",
>> +    [BTN_TRIGGER_HAPPY9] =3D "BTN_TRIGGER_HAPPY9",
>> +    [BTN_TRIGGER_HAPPY10] =3D "BTN_TRIGGER_HAPPY10",
>> +    [BTN_TRIGGER_HAPPY11] =3D "BTN_TRIGGER_HAPPY11",
>> +    [BTN_TRIGGER_HAPPY12] =3D "BTN_TRIGGER_HAPPY12",
>> +    [BTN_TRIGGER_HAPPY13] =3D "BTN_TRIGGER_HAPPY13",
>> +    [BTN_TRIGGER_HAPPY14] =3D "BTN_TRIGGER_HAPPY14",
>> +    [BTN_TRIGGER_HAPPY15] =3D "BTN_TRIGGER_HAPPY15",
>> +    [BTN_TRIGGER_HAPPY16] =3D "BTN_TRIGGER_HAPPY16",
>> +    [BTN_TRIGGER_HAPPY17] =3D "BTN_TRIGGER_HAPPY17",
>> +    [BTN_TRIGGER_HAPPY18] =3D "BTN_TRIGGER_HAPPY18",
>> +    [BTN_TRIGGER_HAPPY19] =3D "BTN_TRIGGER_HAPPY19",
>> +    [BTN_TRIGGER_HAPPY20] =3D "BTN_TRIGGER_HAPPY20",
>> +    [BTN_TRIGGER_HAPPY21] =3D "BTN_TRIGGER_HAPPY21",
>> +    [BTN_TRIGGER_HAPPY22] =3D "BTN_TRIGGER_HAPPY22",
>> +    [BTN_TRIGGER_HAPPY23] =3D "BTN_TRIGGER_HAPPY23",
>> +    [BTN_TRIGGER_HAPPY24] =3D "BTN_TRIGGER_HAPPY24",
>> +    [BTN_TRIGGER_HAPPY25] =3D "BTN_TRIGGER_HAPPY25",
>> +    [BTN_TRIGGER_HAPPY26] =3D "BTN_TRIGGER_HAPPY26",
>> +    [BTN_TRIGGER_HAPPY27] =3D "BTN_TRIGGER_HAPPY27",
>> +    [BTN_TRIGGER_HAPPY28] =3D "BTN_TRIGGER_HAPPY28",
>> +    [BTN_TRIGGER_HAPPY29] =3D "BTN_TRIGGER_HAPPY29",
>> +    [BTN_TRIGGER_HAPPY30] =3D "BTN_TRIGGER_HAPPY30",
>> +    [BTN_TRIGGER_HAPPY31] =3D "BTN_TRIGGER_HAPPY31",
>> +    [BTN_TRIGGER_HAPPY32] =3D "BTN_TRIGGER_HAPPY32",
>> +    [BTN_TRIGGER_HAPPY33] =3D "BTN_TRIGGER_HAPPY33",
>> +    [BTN_TRIGGER_HAPPY34] =3D "BTN_TRIGGER_HAPPY34",
>> +    [BTN_TRIGGER_HAPPY35] =3D "BTN_TRIGGER_HAPPY35",
>> +    [BTN_TRIGGER_HAPPY36] =3D "BTN_TRIGGER_HAPPY36",
>> +    [BTN_TRIGGER_HAPPY37] =3D "BTN_TRIGGER_HAPPY37",
>> +    [BTN_TRIGGER_HAPPY38] =3D "BTN_TRIGGER_HAPPY38",
>> +    [BTN_TRIGGER_HAPPY39] =3D "BTN_TRIGGER_HAPPY39",
>> +    [BTN_TRIGGER_HAPPY40] =3D "BTN_TRIGGER_HAPPY40",
>> +};
>> +
>> +static const char * const led_map[LED_MAX + 1] =3D {
>> +    [LED_NUML] =3D "LED_NUML",
>> +    [LED_CAPSL] =3D "LED_CAPSL",
>> *** 11201 LINES SKIPPED ***
>>=20
>=20
> make buildworld fails to build due to this error:
>=20
> [...]
> c++  -target x86_64-unknown-freebsd16.0 =
--sysroot=3D/usr/obj/usr/src/amd64.amd64/tmp
> -B/usr/obj/usr/src/amd64.amd64/tmp/usr/bin -fpie  -O2 -pipe =
-fno-common -march=3Dnative -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=3Dunused-but-set-parameter
> -Wno-error=3Dcast-function-type-mismatch =
-Wno-missing-variable-declarations -Qunused-arguments
> -march=3Dnative  -fPIE -std=3Dgnu++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 :)

Jessica




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4AC13FF6-98EB-41C9-83EC-E8B9FB6A1093>