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