From nobody Fri Sep 5 05:10:57 2025 X-Original-To: dev-commits-src-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4cJ4FJ58k6z6759f for ; Fri, 05 Sep 2025 05:11:16 +0000 (UTC) (envelope-from wlosh@bsdimp.com) Received: from mail-pj1-x102d.google.com (mail-pj1-x102d.google.com [IPv6:2607:f8b0:4864:20::102d]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtp.gmail.com", Issuer "WR4" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4cJ4FG6hHZz3hYw for ; Fri, 05 Sep 2025 05:11:14 +0000 (UTC) (envelope-from wlosh@bsdimp.com) Authentication-Results: mx1.freebsd.org; dkim=pass header.d=bsdimp-com.20230601.gappssmtp.com header.s=20230601 header.b=UKchDmk3; dmarc=none; spf=none (mx1.freebsd.org: domain of wlosh@bsdimp.com has no SPF policy when checking 2607:f8b0:4864:20::102d) smtp.mailfrom=wlosh@bsdimp.com Received: by mail-pj1-x102d.google.com with SMTP id 98e67ed59e1d1-32b02d88d80so1554209a91.0 for ; Thu, 04 Sep 2025 22:11:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bsdimp-com.20230601.gappssmtp.com; s=20230601; t=1757049069; x=1757653869; darn=freebsd.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=GJ6+THKNMtydbTB+bKbk3OrXyp7M2u7ODUEafjY4nUM=; b=UKchDmk3FpTDpivEclw0ptxuAEcZiIP5aWtaalJyoI5rzf1eXh8Q8KUQU9I/penk91 oh2HwPdm8seM/pvPpjGRc3FmN12m+42ZqE5O9WY582UfDOOt/s1VtrupZ92z4KJu6Nmx F6goksCpQadONDNeJ/fd6DU9sfIQfw5IZ97vqQsoLpZmfG7Khb2cTEiQ6Pq5k//PiOWp EDoYjuCnvKjRqOXfGuk8QPYdtpx/VQ0gk/7dSE9HIuK8iqQl4Errlmq6I8pRmaDnIUrW eMx7txeqwp+Fs4D051+/gqnlVQmg6RIs2yS/b25Cnu0KdlvVD90aQkfMv8HGczNw1n5l T7pw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1757049069; x=1757653869; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=GJ6+THKNMtydbTB+bKbk3OrXyp7M2u7ODUEafjY4nUM=; b=A4rWFgI8dxHQuvwQ5hxGbB8680t3xRmQ6fD5UpIcBUzaL07IHZkbBlc/UdBs1Kej6K +4aI5+IHNiTc99rVIi1I1Wi0POOn7KCIYMHzFYME8a+r8TR4sV0zy0YPZcGneUvbY1gT ZpSHQRBrs77MkoZemPj+WTU/JbPXCL0/oBqvRC3xaMu1AKfDBCnaAnWSkuwIXTQdwL/3 kw/uh3+dxplnwQjhjuf4rzF+CCCjmzOQcKPGDte6RD2Ht924XVKdWHMcH9XWX5AT1PFy XiKHORSixOaV5iSd3O4abUrirKJ4a3pZxqzDLFwittH9+44rcuF7YHQSI9+COCORmNg6 QufQ== X-Forwarded-Encrypted: i=1; AJvYcCUvST0NTZe+f34Vh5dX7YNhT20lt3ASo5WrDsJqf+qJQKdQa8hlkbONkcKtSnDrRnCZD8esk/QbzagaSqDprlB61iz4bA==@freebsd.org X-Gm-Message-State: AOJu0YyLJprzaEEZET7GYztbJD0Ss3n39pzRJCPGwsgJ8O5awtKb31GH JAj2dASUz4vczWgcWJhsdZMhZowd/BUWwFIe4MrhrhLThEiG2i87WIKG2809Ot5mToE3M/7WHH9 spvuACDdlkcCJ6auDF+6vfEzk1kA6IS0/j4NNxNgLSQ== X-Gm-Gg: ASbGncsQ1+jSzbsJW3BrKlW2tjaR2J55fRmGTsPsJf+WeHbHR2E3Jpe7Y2ne17uqMnT G9GS6uBuw8InPRRYGN+czbQOq9WkBoK9S3ymc3ffPFBLr/6Blfe/3TX22DxvqcNV1/bAtJrT4ba +CU464ynPU7HkTlqQP4bo7DKsp7kn1L7vIhwYsbn1x5SISB2TTFzL3fn1n6J7DH+KLynzOTsZ+1 nVgi4NXOq3ITXPDd/63wVqAhtQChv4hYj14gPGr7GGMAinggQ== X-Google-Smtp-Source: AGHT+IGohWdM1SQpUsqIvTub3f9SUHIO4gBXRWrmWBgHQG7NM8D8OChy1T0WwFvHDsFuTnUshJERX8qk4iKVKLRhk8I= X-Received: by 2002:a17:90b:51c4:b0:32b:98a3:7409 with SMTP id 98e67ed59e1d1-32b98a37612mr5699776a91.34.1757049068464; Thu, 04 Sep 2025 22:11:08 -0700 (PDT) List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org MIME-Version: 1.0 References: <202509042108.584L86Ro060944@gitrepo.freebsd.org> <20250905061122.69e01f1a@thor.sb211.local> <4AC13FF6-98EB-41C9-83EC-E8B9FB6A1093@freebsd.org> In-Reply-To: From: Warner Losh Date: Thu, 4 Sep 2025 23:10:57 -0600 X-Gm-Features: Ac12FXyTfkWRulOPYpyz2TmGmUyqLWZbM6fmust4mwpfCj-QPSHX0BTb4vWD934 Message-ID: Subject: Re: git: aef807876c30 - main - moused(8): Add support for evdev protocol To: Jessica Clarke Cc: A FreeBSD User , Vladimir Kondratyev , "src-committers@freebsd.org" , "dev-commits-src-all@freebsd.org" , "dev-commits-src-main@freebsd.org" Content-Type: multipart/alternative; boundary="000000000000943e38063e06dd6e" X-Spamd-Bar: -- X-Spamd-Result: default: False [-2.98 / 15.00]; NEURAL_HAM_LONG(-1.00)[-1.000]; NEURAL_HAM_MEDIUM(-1.00)[-1.000]; NEURAL_HAM_SHORT(-0.98)[-0.982]; FORGED_SENDER(0.30)[imp@bsdimp.com,wlosh@bsdimp.com]; R_DKIM_ALLOW(-0.20)[bsdimp-com.20230601.gappssmtp.com:s=20230601]; MIME_GOOD(-0.10)[multipart/alternative,text/plain]; ASN(0.00)[asn:15169, ipnet:2607:f8b0::/32, country:US]; RCVD_COUNT_ONE(0.00)[1]; MIME_TRACE(0.00)[0:+,1:+,2:~]; TO_DN_SOME(0.00)[]; TO_DN_EQ_ADDR_SOME(0.00)[]; MISSING_XM_UA(0.00)[]; R_SPF_NA(0.00)[no SPF record]; MLMMJ_DEST(0.00)[dev-commits-src-main@freebsd.org]; RCPT_COUNT_FIVE(0.00)[6]; RCVD_IN_DNSWL_NONE(0.00)[2607:f8b0:4864:20::102d:from]; FROM_NEQ_ENVFROM(0.00)[imp@bsdimp.com,wlosh@bsdimp.com]; FROM_HAS_DN(0.00)[]; DMARC_NA(0.00)[bsdimp.com]; TO_MATCH_ENVRCPT_SOME(0.00)[]; RCVD_TLS_LAST(0.00)[]; PREVIOUSLY_DELIVERED(0.00)[dev-commits-src-main@freebsd.org]; ARC_NA(0.00)[]; DKIM_TRACE(0.00)[bsdimp-com.20230601.gappssmtp.com:+] X-Rspamd-Queue-Id: 4cJ4FG6hHZz3hYw --000000000000943e38063e06dd6e Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Thu, Sep 4, 2025 at 10:37=E2=80=AFPM Warner Losh wrote: > > > On Thu, Sep 4, 2025 at 10:17=E2=80=AFPM Jessica Clarke wrote: > >> On 5 Sep 2025, at 05:13, A FreeBSD User wrote: >> >> > Am Tage des Herren Thu, 4 Sep 2025 21:08:06 GMT >> > Vladimir Kondratyev schrieb: >> > >> >> The branch main has been updated by wulf: >> >> >> >> URL: >> https://cgit.FreeBSD.org/src/commit/?id=3Daef807876c305587c60f73e2cd9141= 15d22a53fd >> >> >> >> commit aef807876c305587c60f73e2cd914115d22a53fd >> >> Author: Vladimir Kondratyev >> >> AuthorDate: 2025-09-04 21:07:25 +0000 >> >> Commit: Vladimir Kondratyev >> >> 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 en= able >> >> 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 fr= om >> >> /usr/share/{syscons,vt}/fonts/* (or NO). blanktime=3D"300" # blank ti= me >> (in >> >> seconds) or "NO" to turn it off. saver=3D"NO" # screen saver: Uses >> >> /boot/kernel/${saver}_saver.ko -moused_nondefault_enable=3D"YES" # Tr= eat >> non-default mice as >> >> enabled unless +moused_nondefault_enable=3D"NO" # Treat non-default m= ice >> as enabled unless >> >> # specifically overridden in rc.conf(5). >> >> moused_enable=3D"NO" # Run the mouse daemon. >> >> moused_type=3D"auto" # See man page for rc.conf(5) for available >> settings. >> >> -moused_port=3D"/dev/psm0" # Set to your mouse port. >> >> +moused_port=3D"auto" # Set to your mouse port. >> >> moused_flags=3D"" # Any additional flags to moused. >> >> mousechar_start=3D"NO" # if 0xd0-0xd3 default range is occupied in yo= ur >> >> # 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 scre= ens >> >> 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.g= z >> >> 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 >> >> +.include >> >> 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 >> >> - >> >> -.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 >> >> 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_TOGGL= E", >> >> + // [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-commo= n >> -march=3Dnative -I. >> > -I/usr/src/sbin/devd -fPIE -DNDEBUG -MD -MF.depend.devd.pieo >> -MTdevd.pieo >> > -Wno-format-zero-length -fstack-protector-strong -Wsystem-headers -Wal= l >> -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/de= vd.cc >> -o devd.pieo >> > /usr/src/sbin/devd/devd.cc:1228:2: error: "Remove this gross hack" 122= 8 >> | #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. > [Creating objdir /usr/home/imp/obj/usr/home/imp/git/head/amd64.amd64/usr.sbin/moused/moused.= ..] mkdir: /usr/home/imp/obj/usr/home/imp/git/head/amd64.amd64/usr.sbin/moused/moused: File exists [Creating objdir /usr/home/imp/obj/usr/home/imp/git/head/amd64.amd64/usr.sbin/moused/msconvd= ...] make[5]: /usr/home/imp/git/head/share/mk/auto.obj.mk:74: could not use /usr/home/imp/obj/usr/home/imp/git/head/amd64.amd64/usr.sbin/moused/moused: .OBJDIR=3D/usr/home/imp/git/head/usr.sbin/moused/moused in /usr/home/imp/git/head/share/mk/sys.mk:105 in make[5] in directory "/usr/home/imp/git/head/usr.sbin/moused/moused" make[5]: stopped making "includes" in /usr/home/imp/git/head/usr.sbin/moused/moused make[4]: stopped making "includes" in /usr/home/imp/git/head/usr.sbin/mouse= d Is the error I got, though... Because we went from building usr.sbin/moused/moused to that being a directory and make won't overwrite a file with a directory. Warner --000000000000943e38063e06dd6e Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable


On Thu, Sep 4, = 2025 at 10:37=E2=80=AFPM Warner Losh <= imp@bsdimp.com> wrote:


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@wal= statt-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: http= s://cgit.FreeBSD.org/src/commit/?id=3Daef807876c305587c60f73e2cd914115d22a5= 3fd
>>
>> commit aef807876c305587c60f73e2cd914115d22a53fd
>> Author:=C2=A0 =C2=A0 =C2=A0Vladimir Kondratyev <wulf@FreeBSD.or= g>
>> AuthorDate: 2025-09-04 21:07:25 +0000
>> Commit:=C2=A0 =C2=A0 =C2=A0Vladimir Kondratyev <wulf@FreeBSD.or= g>
>> CommitDate: 2025-09-04 21:07:25 +0000
>>
>>=C2=A0 =C2=A0 moused(8): Add support for evdev protocol
>>
>>=C2=A0 =C2=A0 The new daemon have following properties as compared = with previous
>>=C2=A0 =C2=A0 incarnation:
>>=C2=A0 =C2=A0 - evdev protocol support for mices and touchpads. Add= itionally to
>>=C2=A0 =C2=A0 =C2=A0 relative PS/2 and USB devices it enables conso= le support for I2C/USB
>>=C2=A0 =C2=A0 =C2=A0 touchpads and bluetooth mices.
>>=C2=A0 =C2=A0 - Other aged protocols like COM, raw PS/2 and X10 are= dropped with only
>>=C2=A0 =C2=A0 =C2=A0 exception of sysmouse. For those who still use= them there is an
>>=C2=A0 =C2=A0 =C2=A0 utility called msconvd(8).
>>=C2=A0 =C2=A0 - single daemon per system where hotplug is processed= via devd socket.
>>=C2=A0 =C2=A0 =C2=A0 Per device mode still supported too.
>>=C2=A0 =C2=A0 - Configuration and quirks files in libinput-compatib= le format.
>>=C2=A0 =C2=A0 =C2=A0 Actually, the new moused config parser is take= n from libinput.
>>
>>=C2=A0 =C2=A0 The moused(8) can work in 2 modes:
>>=C2=A0 =C2=A0 1. Evdev support mode. It enables all previously ment= ioned devices.
>>=C2=A0 =C2=A0 =C2=A0 =C2=A0It is enabled by deault.
>>=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
>>=C2=A0 =C2=A0 =C2=A0 =C2=A0/etc/rc.conf:
>>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 moused_port=3D"/dev/psm0&qu= ot;
>>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 moused_nondefault_enable=3D"= ;YES"
>>=C2=A0 =C2=A0 =C2=A0 =C2=A0One may add hw.usb.usbhid.enable=3D0 to = /boot/loader.conf to enable
>>=C2=A0 =C2=A0 =C2=A0 =C2=A0ums(4) driver which supports sysmouse pr= otocol.
>>
>>=C2=A0 =C2=A0 Differential Revision:=C2=A0 https://reviews= .freebsd.org/D52164
>> ---
>> 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 +-
>> 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 + >> 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 +
>> 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 -
>> 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 +
>> usr.sbin/moused/moused/event-names.h=C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0| 1656 ++++++++++
>> 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 ++++
>> 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 ++++++++++++++++++++
>> 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 +
>> 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 +++
>> 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 +++++++++++++
>> 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 +++
>> .../moused/moused/quirks/5-generic-touchpad.quirks |=C2=A0 =C2=A0 = 9 +
>> 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 ++
>> 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 +
>> 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 +
>> 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 ++
>> 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 +++
>> 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 +++
>> 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 +
>> usr.sbin/moused/{moused.8 =3D> msconvd/msconvd.8}=C2=A0 =C2=A0 = |=C2=A0 395 +--
>> usr.sbin/moused/{moused.c =3D> msconvd/msconvd.c}=C2=A0 =C2=A0 = | 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 from
>> /usr/share/{syscons,vt}/fonts/* (or NO). blanktime=3D"300&quo= t; # blank time (in
>> seconds) or "NO" to turn it off. saver=3D"NO" = # screen saver: Uses
>> /boot/kernel/${saver}_saver.ko -moused_nondefault_enable=3D"Y= ES" # Treat non-default mice as
>> enabled unless +moused_nondefault_enable=3D"NO" # Treat = non-default mice as enabled unless
>>=C2=A0 =C2=A0 =C2=A0 =C2=A0# 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 a= vailable settings.
>> -moused_port=3D"/dev/psm0" # Set to your mouse port.
>> +moused_port=3D"auto" # Set to your mouse port.
>> moused_flags=3D"" # Any additional flags to moused.
>> mousechar_start=3D"NO" # if 0xd0-0xd3 default range is o= ccupied in your
>> # language code table, specify alternative range
>> # start like mousechar_start=3D3, see vidcontrol(1)
>> +msconvd_enable=3D"NO" # Run the mouse protocol conversi= on daemon.
>> +msconvd_type=3D"auto" # See rc.conf(5) man page for ava= ilable moused_type-s.
>> +msconvd_ports=3D"" # List of msconvd ports.
>> +msconvd_flags=3D"" # Any additional flags to msconvd. >> allscreens_flags=3D"" # Set this vidcontrol mode for all= virtual screens
>> allscreens_kbdflags=3D"" # Set this kbdcontrol mode for = all virtual screens
>>
>> 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..a2f= b28f1a186 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<= br> >> .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/Mak= efile.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/mou= sed/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-qua= l \
>> + -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/mouse= d/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 {
>> +=C2=A0 =C2=A0 [EV_SYN] =3D "EV_SYN",
>> +=C2=A0 =C2=A0 [EV_KEY] =3D "EV_KEY",
>> +=C2=A0 =C2=A0 [EV_REL] =3D "EV_REL",
>> +=C2=A0 =C2=A0 [EV_ABS] =3D "EV_ABS",
>> +=C2=A0 =C2=A0 [EV_MSC] =3D "EV_MSC",
>> +=C2=A0 =C2=A0 [EV_SW] =3D "EV_SW",
>> +=C2=A0 =C2=A0 [EV_LED] =3D "EV_LED",
>> +=C2=A0 =C2=A0 [EV_SND] =3D "EV_SND",
>> +=C2=A0 =C2=A0 [EV_REP] =3D "EV_REP",
>> +=C2=A0 =C2=A0 [EV_FF] =3D "EV_FF",
>> +=C2=A0 =C2=A0 [EV_PWR] =3D "EV_PWR",
>> +=C2=A0 =C2=A0 [EV_FF_STATUS] =3D "EV_FF_STATUS",
>> +=C2=A0 =C2=A0 [EV_MAX] =3D "EV_MAX",
>> +};
>> +
>> +static const char * const rel_map[REL_MAX + 1] =3D {
>> +=C2=A0 =C2=A0 [REL_X] =3D "REL_X",
>> +=C2=A0 =C2=A0 [REL_Y] =3D "REL_Y",
>> +=C2=A0 =C2=A0 [REL_Z] =3D "REL_Z",
>> +=C2=A0 =C2=A0 [REL_RX] =3D "REL_RX",
>> +=C2=A0 =C2=A0 [REL_RY] =3D "REL_RY",
>> +=C2=A0 =C2=A0 [REL_RZ] =3D "REL_RZ",
>> +=C2=A0 =C2=A0 [REL_HWHEEL] =3D "REL_HWHEEL",
>> +=C2=A0 =C2=A0 [REL_DIAL] =3D "REL_DIAL",
>> +=C2=A0 =C2=A0 [REL_WHEEL] =3D "REL_WHEEL",
>> +=C2=A0 =C2=A0 [REL_MISC] =3D "REL_MISC",
>> +=C2=A0 =C2=A0 [REL_RESERVED] =3D "REL_RESERVED",
>> +=C2=A0 =C2=A0 [REL_WHEEL_HI_RES] =3D "REL_WHEEL_HI_RES"= ,
>> +=C2=A0 =C2=A0 [REL_HWHEEL_HI_RES] =3D "REL_HWHEEL_HI_RES&quo= t;,
>> +=C2=A0 =C2=A0 [REL_MAX] =3D "REL_MAX",
>> +};
>> +
>> +static const char * const abs_map[ABS_MAX + 1] =3D {
>> +=C2=A0 =C2=A0 [ABS_X] =3D "ABS_X",
>> +=C2=A0 =C2=A0 [ABS_Y] =3D "ABS_Y",
>> +=C2=A0 =C2=A0 [ABS_Z] =3D "ABS_Z",
>> +=C2=A0 =C2=A0 [ABS_RX] =3D "ABS_RX",
>> +=C2=A0 =C2=A0 [ABS_RY] =3D "ABS_RY",
>> +=C2=A0 =C2=A0 [ABS_RZ] =3D "ABS_RZ",
>> +=C2=A0 =C2=A0 [ABS_THROTTLE] =3D "ABS_THROTTLE",
>> +=C2=A0 =C2=A0 [ABS_RUDDER] =3D "ABS_RUDDER",
>> +=C2=A0 =C2=A0 [ABS_WHEEL] =3D "ABS_WHEEL",
>> +=C2=A0 =C2=A0 [ABS_GAS] =3D "ABS_GAS",
>> +=C2=A0 =C2=A0 [ABS_BRAKE] =3D "ABS_BRAKE",
>> +=C2=A0 =C2=A0 [ABS_HAT0X] =3D "ABS_HAT0X",
>> +=C2=A0 =C2=A0 [ABS_HAT0Y] =3D "ABS_HAT0Y",
>> +=C2=A0 =C2=A0 [ABS_HAT1X] =3D "ABS_HAT1X",
>> +=C2=A0 =C2=A0 [ABS_HAT1Y] =3D "ABS_HAT1Y",
>> +=C2=A0 =C2=A0 [ABS_HAT2X] =3D "ABS_HAT2X",
>> +=C2=A0 =C2=A0 [ABS_HAT2Y] =3D "ABS_HAT2Y",
>> +=C2=A0 =C2=A0 [ABS_HAT3X] =3D "ABS_HAT3X",
>> +=C2=A0 =C2=A0 [ABS_HAT3Y] =3D "ABS_HAT3Y",
>> +=C2=A0 =C2=A0 [ABS_PRESSURE] =3D "ABS_PRESSURE",
>> +=C2=A0 =C2=A0 [ABS_DISTANCE] =3D "ABS_DISTANCE",
>> +=C2=A0 =C2=A0 [ABS_TILT_X] =3D "ABS_TILT_X",
>> +=C2=A0 =C2=A0 [ABS_TILT_Y] =3D "ABS_TILT_Y",
>> +=C2=A0 =C2=A0 [ABS_TOOL_WIDTH] =3D "ABS_TOOL_WIDTH", >> +=C2=A0 =C2=A0 [ABS_VOLUME] =3D "ABS_VOLUME",
>> +=C2=A0 =C2=A0 // [ABS_PROFILE] =3D "ABS_PROFILE",
>> +=C2=A0 =C2=A0 [ABS_MISC] =3D "ABS_MISC",
>> +=C2=A0 =C2=A0 [ABS_RESERVED] =3D "ABS_RESERVED",
>> +=C2=A0 =C2=A0 [ABS_MT_SLOT] =3D "ABS_MT_SLOT",
>> +=C2=A0 =C2=A0 [ABS_MT_TOUCH_MAJOR] =3D "ABS_MT_TOUCH_MAJOR&q= uot;,
>> +=C2=A0 =C2=A0 [ABS_MT_TOUCH_MINOR] =3D "ABS_MT_TOUCH_MINOR&q= uot;,
>> +=C2=A0 =C2=A0 [ABS_MT_WIDTH_MAJOR] =3D "ABS_MT_WIDTH_MAJOR&q= uot;,
>> +=C2=A0 =C2=A0 [ABS_MT_WIDTH_MINOR] =3D "ABS_MT_WIDTH_MINOR&q= uot;,
>> +=C2=A0 =C2=A0 [ABS_MT_ORIENTATION] =3D "ABS_MT_ORIENTATION&q= uot;,
>> +=C2=A0 =C2=A0 [ABS_MT_POSITION_X] =3D "ABS_MT_POSITION_X&quo= t;,
>> +=C2=A0 =C2=A0 [ABS_MT_POSITION_Y] =3D "ABS_MT_POSITION_Y&quo= t;,
>> +=C2=A0 =C2=A0 [ABS_MT_TOOL_TYPE] =3D "ABS_MT_TOOL_TYPE"= ,
>> +=C2=A0 =C2=A0 [ABS_MT_BLOB_ID] =3D "ABS_MT_BLOB_ID", >> +=C2=A0 =C2=A0 [ABS_MT_TRACKING_ID] =3D "ABS_MT_TRACKING_ID&q= uot;,
>> +=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",
>> +=C2=A0 =C2=A0 [ABS_MT_TOOL_Y] =3D "ABS_MT_TOOL_Y",
>> +=C2=A0 =C2=A0 [ABS_MAX] =3D "ABS_MAX",
>> +};
>> +
>> +static const char * const key_map[KEY_MAX + 1] =3D {
>> +=C2=A0 =C2=A0 [KEY_RESERVED] =3D "KEY_RESERVED",
>> +=C2=A0 =C2=A0 [KEY_ESC] =3D "KEY_ESC",
>> +=C2=A0 =C2=A0 [KEY_1] =3D "KEY_1",
>> +=C2=A0 =C2=A0 [KEY_2] =3D "KEY_2",
>> +=C2=A0 =C2=A0 [KEY_3] =3D "KEY_3",
>> +=C2=A0 =C2=A0 [KEY_4] =3D "KEY_4",
>> +=C2=A0 =C2=A0 [KEY_5] =3D "KEY_5",
>> +=C2=A0 =C2=A0 [KEY_6] =3D "KEY_6",
>> +=C2=A0 =C2=A0 [KEY_7] =3D "KEY_7",
>> +=C2=A0 =C2=A0 [KEY_8] =3D "KEY_8",
>> +=C2=A0 =C2=A0 [KEY_9] =3D "KEY_9",
>> +=C2=A0 =C2=A0 [KEY_0] =3D "KEY_0",
>> +=C2=A0 =C2=A0 [KEY_MINUS] =3D "KEY_MINUS",
>> +=C2=A0 =C2=A0 [KEY_EQUAL] =3D "KEY_EQUAL",
>> +=C2=A0 =C2=A0 [KEY_BACKSPACE] =3D "KEY_BACKSPACE",
>> +=C2=A0 =C2=A0 [KEY_TAB] =3D "KEY_TAB",
>> +=C2=A0 =C2=A0 [KEY_Q] =3D "KEY_Q",
>> +=C2=A0 =C2=A0 [KEY_W] =3D "KEY_W",
>> +=C2=A0 =C2=A0 [KEY_E] =3D "KEY_E",
>> +=C2=A0 =C2=A0 [KEY_R] =3D "KEY_R",
>> +=C2=A0 =C2=A0 [KEY_T] =3D "KEY_T",
>> +=C2=A0 =C2=A0 [KEY_Y] =3D "KEY_Y",
>> +=C2=A0 =C2=A0 [KEY_U] =3D "KEY_U",
>> +=C2=A0 =C2=A0 [KEY_I] =3D "KEY_I",
>> +=C2=A0 =C2=A0 [KEY_O] =3D "KEY_O",
>> +=C2=A0 =C2=A0 [KEY_P] =3D "KEY_P",
>> +=C2=A0 =C2=A0 [KEY_LEFTBRACE] =3D "KEY_LEFTBRACE",
>> +=C2=A0 =C2=A0 [KEY_RIGHTBRACE] =3D "KEY_RIGHTBRACE", >> +=C2=A0 =C2=A0 [KEY_ENTER] =3D "KEY_ENTER",
>> +=C2=A0 =C2=A0 [KEY_LEFTCTRL] =3D "KEY_LEFTCTRL",
>> +=C2=A0 =C2=A0 [KEY_A] =3D "KEY_A",
>> +=C2=A0 =C2=A0 [KEY_S] =3D "KEY_S",
>> +=C2=A0 =C2=A0 [KEY_D] =3D "KEY_D",
>> +=C2=A0 =C2=A0 [KEY_F] =3D "KEY_F",
>> +=C2=A0 =C2=A0 [KEY_G] =3D "KEY_G",
>> +=C2=A0 =C2=A0 [KEY_H] =3D "KEY_H",
>> +=C2=A0 =C2=A0 [KEY_J] =3D "KEY_J",
>> +=C2=A0 =C2=A0 [KEY_K] =3D "KEY_K",
>> +=C2=A0 =C2=A0 [KEY_L] =3D "KEY_L",
>> +=C2=A0 =C2=A0 [KEY_SEMICOLON] =3D "KEY_SEMICOLON",
>> +=C2=A0 =C2=A0 [KEY_APOSTROPHE] =3D "KEY_APOSTROPHE", >> +=C2=A0 =C2=A0 [KEY_GRAVE] =3D "KEY_GRAVE",
>> +=C2=A0 =C2=A0 [KEY_LEFTSHIFT] =3D "KEY_LEFTSHIFT",
>> +=C2=A0 =C2=A0 [KEY_BACKSLASH] =3D "KEY_BACKSLASH",
>> +=C2=A0 =C2=A0 [KEY_Z] =3D "KEY_Z",
>> +=C2=A0 =C2=A0 [KEY_X] =3D "KEY_X",
>> +=C2=A0 =C2=A0 [KEY_C] =3D "KEY_C",
>> +=C2=A0 =C2=A0 [KEY_V] =3D "KEY_V",
>> +=C2=A0 =C2=A0 [KEY_B] =3D "KEY_B",
>> +=C2=A0 =C2=A0 [KEY_N] =3D "KEY_N",
>> +=C2=A0 =C2=A0 [KEY_M] =3D "KEY_M",
>> +=C2=A0 =C2=A0 [KEY_COMMA] =3D "KEY_COMMA",
>> +=C2=A0 =C2=A0 [KEY_DOT] =3D "KEY_DOT",
>> +=C2=A0 =C2=A0 [KEY_SLASH] =3D "KEY_SLASH",
>> +=C2=A0 =C2=A0 [KEY_RIGHTSHIFT] =3D "KEY_RIGHTSHIFT", >> +=C2=A0 =C2=A0 [KEY_KPASTERISK] =3D "KEY_KPASTERISK", >> +=C2=A0 =C2=A0 [KEY_LEFTALT] =3D "KEY_LEFTALT",
>> +=C2=A0 =C2=A0 [KEY_SPACE] =3D "KEY_SPACE",
>> +=C2=A0 =C2=A0 [KEY_CAPSLOCK] =3D "KEY_CAPSLOCK",
>> +=C2=A0 =C2=A0 [KEY_F1] =3D "KEY_F1",
>> +=C2=A0 =C2=A0 [KEY_F2] =3D "KEY_F2",
>> +=C2=A0 =C2=A0 [KEY_F3] =3D "KEY_F3",
>> +=C2=A0 =C2=A0 [KEY_F4] =3D "KEY_F4",
>> +=C2=A0 =C2=A0 [KEY_F5] =3D "KEY_F5",
>> +=C2=A0 =C2=A0 [KEY_F6] =3D "KEY_F6",
>> +=C2=A0 =C2=A0 [KEY_F7] =3D "KEY_F7",
>> +=C2=A0 =C2=A0 [KEY_F8] =3D "KEY_F8",
>> +=C2=A0 =C2=A0 [KEY_F9] =3D "KEY_F9",
>> +=C2=A0 =C2=A0 [KEY_F10] =3D "KEY_F10",
>> +=C2=A0 =C2=A0 [KEY_NUMLOCK] =3D "KEY_NUMLOCK",
>> +=C2=A0 =C2=A0 [KEY_SCROLLLOCK] =3D "KEY_SCROLLLOCK", >> +=C2=A0 =C2=A0 [KEY_KP7] =3D "KEY_KP7",
>> +=C2=A0 =C2=A0 [KEY_KP8] =3D "KEY_KP8",
>> +=C2=A0 =C2=A0 [KEY_KP9] =3D "KEY_KP9",
>> +=C2=A0 =C2=A0 [KEY_KPMINUS] =3D "KEY_KPMINUS",
>> +=C2=A0 =C2=A0 [KEY_KP4] =3D "KEY_KP4",
>> +=C2=A0 =C2=A0 [KEY_KP5] =3D "KEY_KP5",
>> +=C2=A0 =C2=A0 [KEY_KP6] =3D "KEY_KP6",
>> +=C2=A0 =C2=A0 [KEY_KPPLUS] =3D "KEY_KPPLUS",
>> +=C2=A0 =C2=A0 [KEY_KP1] =3D "KEY_KP1",
>> +=C2=A0 =C2=A0 [KEY_KP2] =3D "KEY_KP2",
>> +=C2=A0 =C2=A0 [KEY_KP3] =3D "KEY_KP3",
>> +=C2=A0 =C2=A0 [KEY_KP0] =3D "KEY_KP0",
>> +=C2=A0 =C2=A0 [KEY_KPDOT] =3D "KEY_KPDOT",
>> +=C2=A0 =C2=A0 [KEY_ZENKAKUHANKAKU] =3D "KEY_ZENKAKUHANKAKU&q= uot;,
>> +=C2=A0 =C2=A0 [KEY_102ND] =3D "KEY_102ND",
>> +=C2=A0 =C2=A0 [KEY_F11] =3D "KEY_F11",
>> +=C2=A0 =C2=A0 [KEY_F12] =3D "KEY_F12",
>> +=C2=A0 =C2=A0 [KEY_RO] =3D "KEY_RO",
>> +=C2=A0 =C2=A0 [KEY_KATAKANA] =3D "KEY_KATAKANA",
>> +=C2=A0 =C2=A0 [KEY_HIRAGANA] =3D "KEY_HIRAGANA",
>> +=C2=A0 =C2=A0 [KEY_HENKAN] =3D "KEY_HENKAN",
>> +=C2=A0 =C2=A0 [KEY_KATAKANAHIRAGANA] =3D "KEY_KATAKANAHIRAGA= NA",
>> +=C2=A0 =C2=A0 [KEY_MUHENKAN] =3D "KEY_MUHENKAN",
>> +=C2=A0 =C2=A0 [KEY_KPJPCOMMA] =3D "KEY_KPJPCOMMA",
>> +=C2=A0 =C2=A0 [KEY_KPENTER] =3D "KEY_KPENTER",
>> +=C2=A0 =C2=A0 [KEY_RIGHTCTRL] =3D "KEY_RIGHTCTRL",
>> +=C2=A0 =C2=A0 [KEY_KPSLASH] =3D "KEY_KPSLASH",
>> +=C2=A0 =C2=A0 [KEY_SYSRQ] =3D "KEY_SYSRQ",
>> +=C2=A0 =C2=A0 [KEY_RIGHTALT] =3D "KEY_RIGHTALT",
>> +=C2=A0 =C2=A0 [KEY_LINEFEED] =3D "KEY_LINEFEED",
>> +=C2=A0 =C2=A0 [KEY_HOME] =3D "KEY_HOME",
>> +=C2=A0 =C2=A0 [KEY_UP] =3D "KEY_UP",
>> +=C2=A0 =C2=A0 [KEY_PAGEUP] =3D "KEY_PAGEUP",
>> +=C2=A0 =C2=A0 [KEY_LEFT] =3D "KEY_LEFT",
>> +=C2=A0 =C2=A0 [KEY_RIGHT] =3D "KEY_RIGHT",
>> +=C2=A0 =C2=A0 [KEY_END] =3D "KEY_END",
>> +=C2=A0 =C2=A0 [KEY_DOWN] =3D "KEY_DOWN",
>> +=C2=A0 =C2=A0 [KEY_PAGEDOWN] =3D "KEY_PAGEDOWN",
>> +=C2=A0 =C2=A0 [KEY_INSERT] =3D "KEY_INSERT",
>> +=C2=A0 =C2=A0 [KEY_DELETE] =3D "KEY_DELETE",
>> +=C2=A0 =C2=A0 [KEY_MACRO] =3D "KEY_MACRO",
>> +=C2=A0 =C2=A0 [KEY_MUTE] =3D "KEY_MUTE",
>> +=C2=A0 =C2=A0 [KEY_VOLUMEDOWN] =3D "KEY_VOLUMEDOWN", >> +=C2=A0 =C2=A0 [KEY_VOLUMEUP] =3D "KEY_VOLUMEUP",
>> +=C2=A0 =C2=A0 [KEY_POWER] =3D "KEY_POWER",
>> +=C2=A0 =C2=A0 [KEY_KPEQUAL] =3D "KEY_KPEQUAL",
>> +=C2=A0 =C2=A0 [KEY_KPPLUSMINUS] =3D "KEY_KPPLUSMINUS",<= br> >> +=C2=A0 =C2=A0 [KEY_PAUSE] =3D "KEY_PAUSE",
>> +=C2=A0 =C2=A0 [KEY_SCALE] =3D "KEY_SCALE",
>> +=C2=A0 =C2=A0 [KEY_KPCOMMA] =3D "KEY_KPCOMMA",
>> +=C2=A0 =C2=A0 [KEY_HANGEUL] =3D "KEY_HANGEUL",
>> +=C2=A0 =C2=A0 [KEY_HANJA] =3D "KEY_HANJA",
>> +=C2=A0 =C2=A0 [KEY_YEN] =3D "KEY_YEN",
>> +=C2=A0 =C2=A0 [KEY_LEFTMETA] =3D "KEY_LEFTMETA",
>> +=C2=A0 =C2=A0 [KEY_RIGHTMETA] =3D "KEY_RIGHTMETA",
>> +=C2=A0 =C2=A0 [KEY_COMPOSE] =3D "KEY_COMPOSE",
>> +=C2=A0 =C2=A0 [KEY_STOP] =3D "KEY_STOP",
>> +=C2=A0 =C2=A0 [KEY_AGAIN] =3D "KEY_AGAIN",
>> +=C2=A0 =C2=A0 [KEY_PROPS] =3D "KEY_PROPS",
>> +=C2=A0 =C2=A0 [KEY_UNDO] =3D "KEY_UNDO",
>> +=C2=A0 =C2=A0 [KEY_FRONT] =3D "KEY_FRONT",
>> +=C2=A0 =C2=A0 [KEY_COPY] =3D "KEY_COPY",
>> +=C2=A0 =C2=A0 [KEY_OPEN] =3D "KEY_OPEN",
>> +=C2=A0 =C2=A0 [KEY_PASTE] =3D "KEY_PASTE",
>> +=C2=A0 =C2=A0 [KEY_FIND] =3D "KEY_FIND",
>> +=C2=A0 =C2=A0 [KEY_CUT] =3D "KEY_CUT",
>> +=C2=A0 =C2=A0 [KEY_HELP] =3D "KEY_HELP",
>> +=C2=A0 =C2=A0 [KEY_MENU] =3D "KEY_MENU",
>> +=C2=A0 =C2=A0 [KEY_CALC] =3D "KEY_CALC",
>> +=C2=A0 =C2=A0 [KEY_SETUP] =3D "KEY_SETUP",
>> +=C2=A0 =C2=A0 [KEY_SLEEP] =3D "KEY_SLEEP",
>> +=C2=A0 =C2=A0 [KEY_WAKEUP] =3D "KEY_WAKEUP",
>> +=C2=A0 =C2=A0 [KEY_FILE] =3D "KEY_FILE",
>> +=C2=A0 =C2=A0 [KEY_SENDFILE] =3D "KEY_SENDFILE",
>> +=C2=A0 =C2=A0 [KEY_DELETEFILE] =3D "KEY_DELETEFILE", >> +=C2=A0 =C2=A0 [KEY_XFER] =3D "KEY_XFER",
>> +=C2=A0 =C2=A0 [KEY_PROG1] =3D "KEY_PROG1",
>> +=C2=A0 =C2=A0 [KEY_PROG2] =3D "KEY_PROG2",
>> +=C2=A0 =C2=A0 [KEY_WWW] =3D "KEY_WWW",
>> +=C2=A0 =C2=A0 [KEY_MSDOS] =3D "KEY_MSDOS",
>> +=C2=A0 =C2=A0 [KEY_COFFEE] =3D "KEY_COFFEE",
>> +=C2=A0 =C2=A0 [KEY_ROTATE_DISPLAY] =3D "KEY_ROTATE_DISPLAY&q= uot;,
>> +=C2=A0 =C2=A0 [KEY_CYCLEWINDOWS] =3D "KEY_CYCLEWINDOWS"= ,
>> +=C2=A0 =C2=A0 [KEY_MAIL] =3D "KEY_MAIL",
>> +=C2=A0 =C2=A0 [KEY_BOOKMARKS] =3D "KEY_BOOKMARKS",
>> +=C2=A0 =C2=A0 [KEY_COMPUTER] =3D "KEY_COMPUTER",
>> +=C2=A0 =C2=A0 [KEY_BACK] =3D "KEY_BACK",
>> +=C2=A0 =C2=A0 [KEY_FORWARD] =3D "KEY_FORWARD",
>> +=C2=A0 =C2=A0 [KEY_CLOSECD] =3D "KEY_CLOSECD",
>> +=C2=A0 =C2=A0 [KEY_EJECTCD] =3D "KEY_EJECTCD",
>> +=C2=A0 =C2=A0 [KEY_EJECTCLOSECD] =3D "KEY_EJECTCLOSECD"= ,
>> +=C2=A0 =C2=A0 [KEY_NEXTSONG] =3D "KEY_NEXTSONG",
>> +=C2=A0 =C2=A0 [KEY_PLAYPAUSE] =3D "KEY_PLAYPAUSE",
>> +=C2=A0 =C2=A0 [KEY_PREVIOUSSONG] =3D "KEY_PREVIOUSSONG"= ,
>> +=C2=A0 =C2=A0 [KEY_STOPCD] =3D "KEY_STOPCD",
>> +=C2=A0 =C2=A0 [KEY_RECORD] =3D "KEY_RECORD",
>> +=C2=A0 =C2=A0 [KEY_REWIND] =3D "KEY_REWIND",
>> +=C2=A0 =C2=A0 [KEY_PHONE] =3D "KEY_PHONE",
>> +=C2=A0 =C2=A0 [KEY_ISO] =3D "KEY_ISO",
>> +=C2=A0 =C2=A0 [KEY_CONFIG] =3D "KEY_CONFIG",
>> +=C2=A0 =C2=A0 [KEY_HOMEPAGE] =3D "KEY_HOMEPAGE",
>> +=C2=A0 =C2=A0 [KEY_REFRESH] =3D "KEY_REFRESH",
>> +=C2=A0 =C2=A0 [KEY_EXIT] =3D "KEY_EXIT",
>> +=C2=A0 =C2=A0 [KEY_MOVE] =3D "KEY_MOVE",
>> +=C2=A0 =C2=A0 [KEY_EDIT] =3D "KEY_EDIT",
>> +=C2=A0 =C2=A0 [KEY_SCROLLUP] =3D "KEY_SCROLLUP",
>> +=C2=A0 =C2=A0 [KEY_SCROLLDOWN] =3D "KEY_SCROLLDOWN", >> +=C2=A0 =C2=A0 [KEY_KPLEFTPAREN] =3D "KEY_KPLEFTPAREN",<= br> >> +=C2=A0 =C2=A0 [KEY_KPRIGHTPAREN] =3D "KEY_KPRIGHTPAREN"= ,
>> +=C2=A0 =C2=A0 [KEY_NEW] =3D "KEY_NEW",
>> +=C2=A0 =C2=A0 [KEY_REDO] =3D "KEY_REDO",
>> +=C2=A0 =C2=A0 [KEY_F13] =3D "KEY_F13",
>> +=C2=A0 =C2=A0 [KEY_F14] =3D "KEY_F14",
>> +=C2=A0 =C2=A0 [KEY_F15] =3D "KEY_F15",
>> +=C2=A0 =C2=A0 [KEY_F16] =3D "KEY_F16",
>> +=C2=A0 =C2=A0 [KEY_F17] =3D "KEY_F17",
>> +=C2=A0 =C2=A0 [KEY_F18] =3D "KEY_F18",
>> +=C2=A0 =C2=A0 [KEY_F19] =3D "KEY_F19",
>> +=C2=A0 =C2=A0 [KEY_F20] =3D "KEY_F20",
>> +=C2=A0 =C2=A0 [KEY_F21] =3D "KEY_F21",
>> +=C2=A0 =C2=A0 [KEY_F22] =3D "KEY_F22",
>> +=C2=A0 =C2=A0 [KEY_F23] =3D "KEY_F23",
>> +=C2=A0 =C2=A0 [KEY_F24] =3D "KEY_F24",
>> +=C2=A0 =C2=A0 [KEY_PLAYCD] =3D "KEY_PLAYCD",
>> +=C2=A0 =C2=A0 [KEY_PAUSECD] =3D "KEY_PAUSECD",
>> +=C2=A0 =C2=A0 [KEY_PROG3] =3D "KEY_PROG3",
>> +=C2=A0 =C2=A0 [KEY_PROG4] =3D "KEY_PROG4",
>> +=C2=A0 =C2=A0 // [KEY_ALL_APPLICATIONS] =3D "KEY_ALL_APPLICA= TIONS",
>> +=C2=A0 =C2=A0 [KEY_SUSPEND] =3D "KEY_SUSPEND",
>> +=C2=A0 =C2=A0 [KEY_CLOSE] =3D "KEY_CLOSE",
>> +=C2=A0 =C2=A0 [KEY_PLAY] =3D "KEY_PLAY",
>> +=C2=A0 =C2=A0 [KEY_FASTFORWARD] =3D "KEY_FASTFORWARD",<= br> >> +=C2=A0 =C2=A0 [KEY_BASSBOOST] =3D "KEY_BASSBOOST",
>> +=C2=A0 =C2=A0 [KEY_PRINT] =3D "KEY_PRINT",
>> +=C2=A0 =C2=A0 [KEY_HP] =3D "KEY_HP",
>> +=C2=A0 =C2=A0 [KEY_CAMERA] =3D "KEY_CAMERA",
>> +=C2=A0 =C2=A0 [KEY_SOUND] =3D "KEY_SOUND",
>> +=C2=A0 =C2=A0 [KEY_QUESTION] =3D "KEY_QUESTION",
>> +=C2=A0 =C2=A0 [KEY_EMAIL] =3D "KEY_EMAIL",
>> +=C2=A0 =C2=A0 [KEY_CHAT] =3D "KEY_CHAT",
>> +=C2=A0 =C2=A0 [KEY_SEARCH] =3D "KEY_SEARCH",
>> +=C2=A0 =C2=A0 [KEY_CONNECT] =3D "KEY_CONNECT",
>> +=C2=A0 =C2=A0 [KEY_FINANCE] =3D "KEY_FINANCE",
>> +=C2=A0 =C2=A0 [KEY_SPORT] =3D "KEY_SPORT",
>> +=C2=A0 =C2=A0 [KEY_SHOP] =3D "KEY_SHOP",
>> +=C2=A0 =C2=A0 [KEY_ALTERASE] =3D "KEY_ALTERASE",
>> +=C2=A0 =C2=A0 [KEY_CANCEL] =3D "KEY_CANCEL",
>> +=C2=A0 =C2=A0 [KEY_BRIGHTNESSDOWN] =3D "KEY_BRIGHTNESSDOWN&q= uot;,
>> +=C2=A0 =C2=A0 [KEY_BRIGHTNESSUP] =3D "KEY_BRIGHTNESSUP"= ,
>> +=C2=A0 =C2=A0 [KEY_MEDIA] =3D "KEY_MEDIA",
>> +=C2=A0 =C2=A0 [KEY_SWITCHVIDEOMODE] =3D "KEY_SWITCHVIDEOMODE= ",
>> +=C2=A0 =C2=A0 [KEY_KBDILLUMTOGGLE] =3D "KEY_KBDILLUMTOGGLE&q= uot;,
>> +=C2=A0 =C2=A0 [KEY_KBDILLUMDOWN] =3D "KEY_KBDILLUMDOWN"= ,
>> +=C2=A0 =C2=A0 [KEY_KBDILLUMUP] =3D "KEY_KBDILLUMUP", >> +=C2=A0 =C2=A0 [KEY_SEND] =3D "KEY_SEND",
>> +=C2=A0 =C2=A0 [KEY_REPLY] =3D "KEY_REPLY",
>> +=C2=A0 =C2=A0 [KEY_FORWARDMAIL] =3D "KEY_FORWARDMAIL",<= br> >> +=C2=A0 =C2=A0 [KEY_SAVE] =3D "KEY_SAVE",
>> +=C2=A0 =C2=A0 [KEY_DOCUMENTS] =3D "KEY_DOCUMENTS",
>> +=C2=A0 =C2=A0 [KEY_BATTERY] =3D "KEY_BATTERY",
>> +=C2=A0 =C2=A0 [KEY_BLUETOOTH] =3D "KEY_BLUETOOTH",
>> +=C2=A0 =C2=A0 [KEY_WLAN] =3D "KEY_WLAN",
>> +=C2=A0 =C2=A0 [KEY_UWB] =3D "KEY_UWB",
>> +=C2=A0 =C2=A0 [KEY_UNKNOWN] =3D "KEY_UNKNOWN",
>> +=C2=A0 =C2=A0 [KEY_VIDEO_NEXT] =3D "KEY_VIDEO_NEXT", >> +=C2=A0 =C2=A0 [KEY_VIDEO_PREV] =3D "KEY_VIDEO_PREV", >> +=C2=A0 =C2=A0 [KEY_BRIGHTNESS_CYCLE] =3D "KEY_BRIGHTNESS_CYC= LE",
>> +=C2=A0 =C2=A0 [KEY_BRIGHTNESS_AUTO] =3D "KEY_BRIGHTNESS_AUTO= ",
>> +=C2=A0 =C2=A0 [KEY_DISPLAY_OFF] =3D "KEY_DISPLAY_OFF",<= br> >> +=C2=A0 =C2=A0 [KEY_WWAN] =3D "KEY_WWAN",
>> +=C2=A0 =C2=A0 [KEY_RFKILL] =3D "KEY_RFKILL",
>> +=C2=A0 =C2=A0 [KEY_MICMUTE] =3D "KEY_MICMUTE",
>> +=C2=A0 =C2=A0 [KEY_OK] =3D "KEY_OK",
>> +=C2=A0 =C2=A0 [KEY_SELECT] =3D "KEY_SELECT",
>> +=C2=A0 =C2=A0 [KEY_GOTO] =3D "KEY_GOTO",
>> +=C2=A0 =C2=A0 [KEY_CLEAR] =3D "KEY_CLEAR",
>> +=C2=A0 =C2=A0 [KEY_POWER2] =3D "KEY_POWER2",
>> +=C2=A0 =C2=A0 [KEY_OPTION] =3D "KEY_OPTION",
>> +=C2=A0 =C2=A0 [KEY_INFO] =3D "KEY_INFO",
>> +=C2=A0 =C2=A0 [KEY_TIME] =3D "KEY_TIME",
>> +=C2=A0 =C2=A0 [KEY_VENDOR] =3D "KEY_VENDOR",
>> +=C2=A0 =C2=A0 [KEY_ARCHIVE] =3D "KEY_ARCHIVE",
>> +=C2=A0 =C2=A0 [KEY_PROGRAM] =3D "KEY_PROGRAM",
>> +=C2=A0 =C2=A0 [KEY_CHANNEL] =3D "KEY_CHANNEL",
>> +=C2=A0 =C2=A0 [KEY_FAVORITES] =3D "KEY_FAVORITES",
>> +=C2=A0 =C2=A0 [KEY_EPG] =3D "KEY_EPG",
>> +=C2=A0 =C2=A0 [KEY_PVR] =3D "KEY_PVR",
>> +=C2=A0 =C2=A0 [KEY_MHP] =3D "KEY_MHP",
>> +=C2=A0 =C2=A0 [KEY_LANGUAGE] =3D "KEY_LANGUAGE",
>> +=C2=A0 =C2=A0 [KEY_TITLE] =3D "KEY_TITLE",
>> +=C2=A0 =C2=A0 [KEY_SUBTITLE] =3D "KEY_SUBTITLE",
>> +=C2=A0 =C2=A0 [KEY_ANGLE] =3D "KEY_ANGLE",
>> +=C2=A0 =C2=A0 [KEY_FULL_SCREEN] =3D "KEY_FULL_SCREEN",<= br> >> +=C2=A0 =C2=A0 [KEY_MODE] =3D "KEY_MODE",
>> +=C2=A0 =C2=A0 [KEY_KEYBOARD] =3D "KEY_KEYBOARD",
>> +=C2=A0 =C2=A0 [KEY_ASPECT_RATIO] =3D "KEY_ASPECT_RATIO"= ,
>> +=C2=A0 =C2=A0 [KEY_PC] =3D "KEY_PC",
>> +=C2=A0 =C2=A0 [KEY_TV] =3D "KEY_TV",
>> +=C2=A0 =C2=A0 [KEY_TV2] =3D "KEY_TV2",
>> +=C2=A0 =C2=A0 [KEY_VCR] =3D "KEY_VCR",
>> +=C2=A0 =C2=A0 [KEY_VCR2] =3D "KEY_VCR2",
>> +=C2=A0 =C2=A0 [KEY_SAT] =3D "KEY_SAT",
>> +=C2=A0 =C2=A0 [KEY_SAT2] =3D "KEY_SAT2",
>> +=C2=A0 =C2=A0 [KEY_CD] =3D "KEY_CD",
>> +=C2=A0 =C2=A0 [KEY_TAPE] =3D "KEY_TAPE",
>> +=C2=A0 =C2=A0 [KEY_RADIO] =3D "KEY_RADIO",
>> +=C2=A0 =C2=A0 [KEY_TUNER] =3D "KEY_TUNER",
>> +=C2=A0 =C2=A0 [KEY_PLAYER] =3D "KEY_PLAYER",
>> +=C2=A0 =C2=A0 [KEY_TEXT] =3D "KEY_TEXT",
>> +=C2=A0 =C2=A0 [KEY_DVD] =3D "KEY_DVD",
>> +=C2=A0 =C2=A0 [KEY_AUX] =3D "KEY_AUX",
>> +=C2=A0 =C2=A0 [KEY_MP3] =3D "KEY_MP3",
>> +=C2=A0 =C2=A0 [KEY_AUDIO] =3D "KEY_AUDIO",
>> +=C2=A0 =C2=A0 [KEY_VIDEO] =3D "KEY_VIDEO",
>> +=C2=A0 =C2=A0 [KEY_DIRECTORY] =3D "KEY_DIRECTORY",
>> +=C2=A0 =C2=A0 [KEY_LIST] =3D "KEY_LIST",
>> +=C2=A0 =C2=A0 [KEY_MEMO] =3D "KEY_MEMO",
>> +=C2=A0 =C2=A0 [KEY_CALENDAR] =3D "KEY_CALENDAR",
>> +=C2=A0 =C2=A0 [KEY_RED] =3D "KEY_RED",
>> +=C2=A0 =C2=A0 [KEY_GREEN] =3D "KEY_GREEN",
>> +=C2=A0 =C2=A0 [KEY_YELLOW] =3D "KEY_YELLOW",
>> +=C2=A0 =C2=A0 [KEY_BLUE] =3D "KEY_BLUE",
>> +=C2=A0 =C2=A0 [KEY_CHANNELUP] =3D "KEY_CHANNELUP",
>> +=C2=A0 =C2=A0 [KEY_CHANNELDOWN] =3D "KEY_CHANNELDOWN",<= br> >> +=C2=A0 =C2=A0 [KEY_FIRST] =3D "KEY_FIRST",
>> +=C2=A0 =C2=A0 [KEY_LAST] =3D "KEY_LAST",
>> +=C2=A0 =C2=A0 [KEY_AB] =3D "KEY_AB",
>> +=C2=A0 =C2=A0 [KEY_NEXT] =3D "KEY_NEXT",
>> +=C2=A0 =C2=A0 [KEY_RESTART] =3D "KEY_RESTART",
>> +=C2=A0 =C2=A0 [KEY_SLOW] =3D "KEY_SLOW",
>> +=C2=A0 =C2=A0 [KEY_SHUFFLE] =3D "KEY_SHUFFLE",
>> +=C2=A0 =C2=A0 [KEY_BREAK] =3D "KEY_BREAK",
>> +=C2=A0 =C2=A0 [KEY_PREVIOUS] =3D "KEY_PREVIOUS",
>> +=C2=A0 =C2=A0 [KEY_DIGITS] =3D "KEY_DIGITS",
>> +=C2=A0 =C2=A0 [KEY_TEEN] =3D "KEY_TEEN",
>> +=C2=A0 =C2=A0 [KEY_TWEN] =3D "KEY_TWEN",
>> +=C2=A0 =C2=A0 [KEY_VIDEOPHONE] =3D "KEY_VIDEOPHONE", >> +=C2=A0 =C2=A0 [KEY_GAMES] =3D "KEY_GAMES",
>> +=C2=A0 =C2=A0 [KEY_ZOOMIN] =3D "KEY_ZOOMIN",
>> +=C2=A0 =C2=A0 [KEY_ZOOMOUT] =3D "KEY_ZOOMOUT",
>> +=C2=A0 =C2=A0 [KEY_ZOOMRESET] =3D "KEY_ZOOMRESET",
>> +=C2=A0 =C2=A0 [KEY_WORDPROCESSOR] =3D "KEY_WORDPROCESSOR&quo= t;,
>> +=C2=A0 =C2=A0 [KEY_EDITOR] =3D "KEY_EDITOR",
>> +=C2=A0 =C2=A0 [KEY_SPREADSHEET] =3D "KEY_SPREADSHEET",<= br> >> +=C2=A0 =C2=A0 [KEY_GRAPHICSEDITOR] =3D "KEY_GRAPHICSEDITOR&q= uot;,
>> +=C2=A0 =C2=A0 [KEY_PRESENTATION] =3D "KEY_PRESENTATION"= ,
>> +=C2=A0 =C2=A0 [KEY_DATABASE] =3D "KEY_DATABASE",
>> +=C2=A0 =C2=A0 [KEY_NEWS] =3D "KEY_NEWS",
>> +=C2=A0 =C2=A0 [KEY_VOICEMAIL] =3D "KEY_VOICEMAIL",
>> +=C2=A0 =C2=A0 [KEY_ADDRESSBOOK] =3D "KEY_ADDRESSBOOK",<= br> >> +=C2=A0 =C2=A0 [KEY_MESSENGER] =3D "KEY_MESSENGER",
>> +=C2=A0 =C2=A0 [KEY_DISPLAYTOGGLE] =3D "KEY_DISPLAYTOGGLE&quo= t;,
>> +=C2=A0 =C2=A0 [KEY_SPELLCHECK] =3D "KEY_SPELLCHECK", >> +=C2=A0 =C2=A0 [KEY_LOGOFF] =3D "KEY_LOGOFF",
>> +=C2=A0 =C2=A0 [KEY_DOLLAR] =3D "KEY_DOLLAR",
>> +=C2=A0 =C2=A0 [KEY_EURO] =3D "KEY_EURO",
>> +=C2=A0 =C2=A0 [KEY_FRAMEBACK] =3D "KEY_FRAMEBACK",
>> +=C2=A0 =C2=A0 [KEY_FRAMEFORWARD] =3D "KEY_FRAMEFORWARD"= ,
>> +=C2=A0 =C2=A0 [KEY_CONTEXT_MENU] =3D "KEY_CONTEXT_MENU"= ,
>> +=C2=A0 =C2=A0 [KEY_MEDIA_REPEAT] =3D "KEY_MEDIA_REPEAT"= ,
>> +=C2=A0 =C2=A0 [KEY_10CHANNELSUP] =3D "KEY_10CHANNELSUP"= ,
>> +=C2=A0 =C2=A0 [KEY_10CHANNELSDOWN] =3D "KEY_10CHANNELSDOWN&q= uot;,
>> +=C2=A0 =C2=A0 [KEY_IMAGES] =3D "KEY_IMAGES",
>> +=C2=A0 =C2=A0 // [KEY_NOTIFICATION_CENTER] =3D "KEY_NOTIFICA= TION_CENTER",
>> +=C2=A0 =C2=A0 // [KEY_PICKUP_PHONE] =3D "KEY_PICKUP_PHONE&qu= ot;,
>> +=C2=A0 =C2=A0 // [KEY_HANGUP_PHONE] =3D "KEY_HANGUP_PHONE&qu= ot;,
>> +=C2=A0 =C2=A0 [KEY_DEL_EOL] =3D "KEY_DEL_EOL",
>> +=C2=A0 =C2=A0 [KEY_DEL_EOS] =3D "KEY_DEL_EOS",
>> +=C2=A0 =C2=A0 [KEY_INS_LINE] =3D "KEY_INS_LINE",
>> +=C2=A0 =C2=A0 [KEY_DEL_LINE] =3D "KEY_DEL_LINE",
>> +=C2=A0 =C2=A0 [KEY_FN] =3D "KEY_FN",
>> +=C2=A0 =C2=A0 [KEY_FN_ESC] =3D "KEY_FN_ESC",
>> +=C2=A0 =C2=A0 [KEY_FN_F1] =3D "KEY_FN_F1",
>> +=C2=A0 =C2=A0 [KEY_FN_F2] =3D "KEY_FN_F2",
>> +=C2=A0 =C2=A0 [KEY_FN_F3] =3D "KEY_FN_F3",
>> +=C2=A0 =C2=A0 [KEY_FN_F4] =3D "KEY_FN_F4",
>> +=C2=A0 =C2=A0 [KEY_FN_F5] =3D "KEY_FN_F5",
>> +=C2=A0 =C2=A0 [KEY_FN_F6] =3D "KEY_FN_F6",
>> +=C2=A0 =C2=A0 [KEY_FN_F7] =3D "KEY_FN_F7",
>> +=C2=A0 =C2=A0 [KEY_FN_F8] =3D "KEY_FN_F8",
>> +=C2=A0 =C2=A0 [KEY_FN_F9] =3D "KEY_FN_F9",
>> +=C2=A0 =C2=A0 [KEY_FN_F10] =3D "KEY_FN_F10",
>> +=C2=A0 =C2=A0 [KEY_FN_F11] =3D "KEY_FN_F11",
>> +=C2=A0 =C2=A0 [KEY_FN_F12] =3D "KEY_FN_F12",
>> +=C2=A0 =C2=A0 [KEY_FN_1] =3D "KEY_FN_1",
>> +=C2=A0 =C2=A0 [KEY_FN_2] =3D "KEY_FN_2",
>> +=C2=A0 =C2=A0 [KEY_FN_D] =3D "KEY_FN_D",
>> +=C2=A0 =C2=A0 [KEY_FN_E] =3D "KEY_FN_E",
>> +=C2=A0 =C2=A0 [KEY_FN_F] =3D "KEY_FN_F",
>> +=C2=A0 =C2=A0 [KEY_FN_S] =3D "KEY_FN_S",
>> +=C2=A0 =C2=A0 [KEY_FN_B] =3D "KEY_FN_B",
>> +=C2=A0 =C2=A0 // [KEY_FN_RIGHT_SHIFT] =3D "KEY_FN_RIGHT_SHIF= T",
>> +=C2=A0 =C2=A0 [KEY_BRL_DOT1] =3D "KEY_BRL_DOT1",
>> +=C2=A0 =C2=A0 [KEY_BRL_DOT2] =3D "KEY_BRL_DOT2",
>> +=C2=A0 =C2=A0 [KEY_BRL_DOT3] =3D "KEY_BRL_DOT3",
>> +=C2=A0 =C2=A0 [KEY_BRL_DOT4] =3D "KEY_BRL_DOT4",
>> +=C2=A0 =C2=A0 [KEY_BRL_DOT5] =3D "KEY_BRL_DOT5",
>> +=C2=A0 =C2=A0 [KEY_BRL_DOT6] =3D "KEY_BRL_DOT6",
>> +=C2=A0 =C2=A0 [KEY_BRL_DOT7] =3D "KEY_BRL_DOT7",
>> +=C2=A0 =C2=A0 [KEY_BRL_DOT8] =3D "KEY_BRL_DOT8",
>> +=C2=A0 =C2=A0 [KEY_BRL_DOT9] =3D "KEY_BRL_DOT9",
>> +=C2=A0 =C2=A0 [KEY_BRL_DOT10] =3D "KEY_BRL_DOT10",
>> +=C2=A0 =C2=A0 [KEY_NUMERIC_0] =3D "KEY_NUMERIC_0",
>> +=C2=A0 =C2=A0 [KEY_NUMERIC_1] =3D "KEY_NUMERIC_1",
>> +=C2=A0 =C2=A0 [KEY_NUMERIC_2] =3D "KEY_NUMERIC_2",
>> +=C2=A0 =C2=A0 [KEY_NUMERIC_3] =3D "KEY_NUMERIC_3",
>> +=C2=A0 =C2=A0 [KEY_NUMERIC_4] =3D "KEY_NUMERIC_4",
>> +=C2=A0 =C2=A0 [KEY_NUMERIC_5] =3D "KEY_NUMERIC_5",
>> +=C2=A0 =C2=A0 [KEY_NUMERIC_6] =3D "KEY_NUMERIC_6",
>> +=C2=A0 =C2=A0 [KEY_NUMERIC_7] =3D "KEY_NUMERIC_7",
>> +=C2=A0 =C2=A0 [KEY_NUMERIC_8] =3D "KEY_NUMERIC_8",
>> +=C2=A0 =C2=A0 [KEY_NUMERIC_9] =3D "KEY_NUMERIC_9",
>> +=C2=A0 =C2=A0 [KEY_NUMERIC_STAR] =3D "KEY_NUMERIC_STAR"= ,
>> +=C2=A0 =C2=A0 [KEY_NUMERIC_POUND] =3D "KEY_NUMERIC_POUND&quo= t;,
>> +=C2=A0 =C2=A0 [KEY_NUMERIC_A] =3D "KEY_NUMERIC_A",
>> +=C2=A0 =C2=A0 [KEY_NUMERIC_B] =3D "KEY_NUMERIC_B",
>> +=C2=A0 =C2=A0 [KEY_NUMERIC_C] =3D "KEY_NUMERIC_C",
>> +=C2=A0 =C2=A0 [KEY_NUMERIC_D] =3D "KEY_NUMERIC_D",
>> +=C2=A0 =C2=A0 [KEY_CAMERA_FOCUS] =3D "KEY_CAMERA_FOCUS"= ,
>> +=C2=A0 =C2=A0 [KEY_WPS_BUTTON] =3D "KEY_WPS_BUTTON", >> +=C2=A0 =C2=A0 [KEY_TOUCHPAD_TOGGLE] =3D "KEY_TOUCHPAD_TOGGLE= ",
>> +=C2=A0 =C2=A0 [KEY_TOUCHPAD_ON] =3D "KEY_TOUCHPAD_ON",<= br> >> +=C2=A0 =C2=A0 [KEY_TOUCHPAD_OFF] =3D "KEY_TOUCHPAD_OFF"= ,
>> +=C2=A0 =C2=A0 [KEY_CAMERA_ZOOMIN] =3D "KEY_CAMERA_ZOOMIN&quo= t;,
>> +=C2=A0 =C2=A0 [KEY_CAMERA_ZOOMOUT] =3D "KEY_CAMERA_ZOOMOUT&q= uot;,
>> +=C2=A0 =C2=A0 [KEY_CAMERA_UP] =3D "KEY_CAMERA_UP",
>> +=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"= ,
>> +=C2=A0 =C2=A0 [KEY_ATTENDANT_ON] =3D "KEY_ATTENDANT_ON"= ,
>> +=C2=A0 =C2=A0 [KEY_ATTENDANT_OFF] =3D "KEY_ATTENDANT_OFF&quo= t;,
>> +=C2=A0 =C2=A0 [KEY_ATTENDANT_TOGGLE] =3D "KEY_ATTENDANT_TOGG= LE",
>> +=C2=A0 =C2=A0 [KEY_LIGHTS_TOGGLE] =3D "KEY_LIGHTS_TOGGLE&quo= t;,
>> +=C2=A0 =C2=A0 [KEY_ALS_TOGGLE] =3D "KEY_ALS_TOGGLE", >> +=C2=A0 =C2=A0 [KEY_ROTATE_LOCK_TOGGLE] =3D "KEY_ROTATE_LOCK_= TOGGLE",
>> +=C2=A0 =C2=A0 [KEY_BUTTONCONFIG] =3D "KEY_BUTTONCONFIG"= ,
>> +=C2=A0 =C2=A0 [KEY_TASKMANAGER] =3D "KEY_TASKMANAGER",<= br> >> +=C2=A0 =C2=A0 [KEY_JOURNAL] =3D "KEY_JOURNAL",
>> +=C2=A0 =C2=A0 [KEY_CONTROLPANEL] =3D "KEY_CONTROLPANEL"= ,
>> +=C2=A0 =C2=A0 [KEY_APPSELECT] =3D "KEY_APPSELECT",
>> +=C2=A0 =C2=A0 [KEY_SCREENSAVER] =3D "KEY_SCREENSAVER",<= br> >> +=C2=A0 =C2=A0 [KEY_VOICECOMMAND] =3D "KEY_VOICECOMMAND"= ,
>> +=C2=A0 =C2=A0 [KEY_ASSISTANT] =3D "KEY_ASSISTANT",
>> +=C2=A0 =C2=A0 [KEY_KBD_LAYOUT_NEXT] =3D "KEY_KBD_LAYOUT_NEXT= ",
>> +=C2=A0 =C2=A0 // [KEY_EMOJI_PICKER] =3D "KEY_EMOJI_PICKER&qu= ot;,
>> +=C2=A0 =C2=A0 //[KEY_DICTATE] =3D "KEY_DICTATE",
>> +=C2=A0 =C2=A0 //[KEY_CAMERA_ACCESS_ENABLE] =3D "KEY_CAMERA_A= CCESS_ENABLE",
>> +=C2=A0 =C2=A0 //[KEY_CAMERA_ACCESS_DISABLE] =3D "KEY_CAMERA_= ACCESS_DISABLE",
>> +=C2=A0 =C2=A0 //[KEY_CAMERA_ACCESS_TOGGLE] =3D "KEY_CAMERA_A= CCESS_TOGGLE",
>> +=C2=A0 =C2=A0 [KEY_BRIGHTNESS_MIN] =3D "KEY_BRIGHTNESS_MIN&q= uot;,
>> +=C2=A0 =C2=A0 [KEY_BRIGHTNESS_MAX] =3D "KEY_BRIGHTNESS_MAX&q= uot;,
>> +=C2=A0 =C2=A0 [KEY_KBDINPUTASSIST_PREV] =3D "KEY_KBDINPUTASS= IST_PREV",
>> +=C2=A0 =C2=A0 [KEY_KBDINPUTASSIST_NEXT] =3D "KEY_KBDINPUTASS= IST_NEXT",
>> +=C2=A0 =C2=A0 [KEY_KBDINPUTASSIST_PREVGROUP] =3D "KEY_KBDINP= UTASSIST_PREVGROUP",
>> +=C2=A0 =C2=A0 [KEY_KBDINPUTASSIST_NEXTGROUP] =3D "KEY_KBDINP= UTASSIST_NEXTGROUP",
>> +=C2=A0 =C2=A0 [KEY_KBDINPUTASSIST_ACCEPT] =3D "KEY_KBDINPUTA= SSIST_ACCEPT",
>> +=C2=A0 =C2=A0 [KEY_KBDINPUTASSIST_CANCEL] =3D "KEY_KBDINPUTA= SSIST_CANCEL",
>> +=C2=A0 =C2=A0 [KEY_RIGHT_UP] =3D "KEY_RIGHT_UP",
>> +=C2=A0 =C2=A0 [KEY_RIGHT_DOWN] =3D "KEY_RIGHT_DOWN", >> +=C2=A0 =C2=A0 [KEY_LEFT_UP] =3D "KEY_LEFT_UP",
>> +=C2=A0 =C2=A0 [KEY_LEFT_DOWN] =3D "KEY_LEFT_DOWN",
>> +=C2=A0 =C2=A0 [KEY_ROOT_MENU] =3D "KEY_ROOT_MENU",
>> +=C2=A0 =C2=A0 [KEY_MEDIA_TOP_MENU] =3D "KEY_MEDIA_TOP_MENU&q= uot;,
>> +=C2=A0 =C2=A0 [KEY_NUMERIC_11] =3D "KEY_NUMERIC_11", >> +=C2=A0 =C2=A0 [KEY_NUMERIC_12] =3D "KEY_NUMERIC_12", >> +=C2=A0 =C2=A0 [KEY_AUDIO_DESC] =3D "KEY_AUDIO_DESC", >> +=C2=A0 =C2=A0 [KEY_3D_MODE] =3D "KEY_3D_MODE",
>> +=C2=A0 =C2=A0 [KEY_NEXT_FAVORITE] =3D "KEY_NEXT_FAVORITE&quo= t;,
>> +=C2=A0 =C2=A0 [KEY_STOP_RECORD] =3D "KEY_STOP_RECORD",<= br> >> +=C2=A0 =C2=A0 [KEY_PAUSE_RECORD] =3D "KEY_PAUSE_RECORD"= ,
>> +=C2=A0 =C2=A0 [KEY_VOD] =3D "KEY_VOD",
>> +=C2=A0 =C2=A0 [KEY_UNMUTE] =3D "KEY_UNMUTE",
>> +=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",
>> +=C2=A0 =C2=A0 [KEY_ONSCREEN_KEYBOARD] =3D "KEY_ONSCREEN_KEYB= OARD",
>> +=C2=A0 =C2=A0 [KEY_PRIVACY_SCREEN_TOGGLE] =3D "KEY_PRIVACY_S= CREEN_TOGGLE",
>> +=C2=A0 =C2=A0 [KEY_SELECTIVE_SCREENSHOT] =3D "KEY_SELECTIVE_= SCREENSHOT",
>> +=C2=A0 =C2=A0 // [KEY_NEXT_ELEMENT] =3D "KEY_NEXT_ELEMENT&qu= ot;,
>> +=C2=A0 =C2=A0 // [KEY_PREVIOUS_ELEMENT] =3D "KEY_PREVIOUS_EL= EMENT",
>> +=C2=A0 =C2=A0 // [KEY_AUTOPILOT_ENGAGE_TOGGLE] =3D "KEY_AUTO= PILOT_ENGAGE_TOGGLE",
>> +=C2=A0 =C2=A0 // [KEY_MARK_WAYPOINT] =3D "KEY_MARK_WAYPOINT&= quot;,
>> +=C2=A0 =C2=A0 // [KEY_SOS] =3D "KEY_SOS",
>> +=C2=A0 =C2=A0 // [KEY_NAV_CHART] =3D "KEY_NAV_CHART", >> +=C2=A0 =C2=A0 // [KEY_FISHING_CHART] =3D "KEY_FISHING_CHART&= quot;,
>> +=C2=A0 =C2=A0 // [KEY_SINGLE_RANGE_RADAR] =3D "KEY_SINGLE_RA= NGE_RADAR",
>> +=C2=A0 =C2=A0 // [KEY_DUAL_RANGE_RADAR] =3D "KEY_DUAL_RANGE_= RADAR",
>> +=C2=A0 =C2=A0 // [KEY_RADAR_OVERLAY] =3D "KEY_RADAR_OVERLAY&= quot;,
>> +=C2=A0 =C2=A0 // [KEY_TRADITIONAL_SONAR] =3D "KEY_TRADITIONA= L_SONAR",
>> +=C2=A0 =C2=A0 //=C2=A0 [KEY_CLEARVU_SONAR] =3D "KEY_CLEARVU_= SONAR",
>> +=C2=A0 =C2=A0 // [KEY_SIDEVU_SONAR] =3D "KEY_SIDEVU_SONAR&qu= ot;,
>> +=C2=A0 =C2=A0 // [KEY_NAV_INFO] =3D "KEY_NAV_INFO",
>> +=C2=A0 =C2=A0 // [KEY_BRIGHTNESS_MENU] =3D "KEY_BRIGHTNESS_M= ENU",
>> +=C2=A0 =C2=A0 [KEY_MACRO1] =3D "KEY_MACRO1",
>> +=C2=A0 =C2=A0 [KEY_MACRO2] =3D "KEY_MACRO2",
>> +=C2=A0 =C2=A0 [KEY_MACRO3] =3D "KEY_MACRO3",
>> +=C2=A0 =C2=A0 [KEY_MACRO4] =3D "KEY_MACRO4",
>> +=C2=A0 =C2=A0 [KEY_MACRO5] =3D "KEY_MACRO5",
>> +=C2=A0 =C2=A0 [KEY_MACRO6] =3D "KEY_MACRO6",
>> +=C2=A0 =C2=A0 [KEY_MACRO7] =3D "KEY_MACRO7",
>> +=C2=A0 =C2=A0 [KEY_MACRO8] =3D "KEY_MACRO8",
>> +=C2=A0 =C2=A0 [KEY_MACRO9] =3D "KEY_MACRO9",
>> +=C2=A0 =C2=A0 [KEY_MACRO10] =3D "KEY_MACRO10",
>> +=C2=A0 =C2=A0 [KEY_MACRO11] =3D "KEY_MACRO11",
>> +=C2=A0 =C2=A0 [KEY_MACRO12] =3D "KEY_MACRO12",
>> +=C2=A0 =C2=A0 [KEY_MACRO13] =3D "KEY_MACRO13",
>> +=C2=A0 =C2=A0 [KEY_MACRO14] =3D "KEY_MACRO14",
>> +=C2=A0 =C2=A0 [KEY_MACRO15] =3D "KEY_MACRO15",
>> +=C2=A0 =C2=A0 [KEY_MACRO16] =3D "KEY_MACRO16",
>> +=C2=A0 =C2=A0 [KEY_MACRO17] =3D "KEY_MACRO17",
>> +=C2=A0 =C2=A0 [KEY_MACRO18] =3D "KEY_MACRO18",
>> +=C2=A0 =C2=A0 [KEY_MACRO19] =3D "KEY_MACRO19",
>> +=C2=A0 =C2=A0 [KEY_MACRO20] =3D "KEY_MACRO20",
>> +=C2=A0 =C2=A0 [KEY_MACRO21] =3D "KEY_MACRO21",
>> +=C2=A0 =C2=A0 [KEY_MACRO22] =3D "KEY_MACRO22",
>> +=C2=A0 =C2=A0 [KEY_MACRO23] =3D "KEY_MACRO23",
>> +=C2=A0 =C2=A0 [KEY_MACRO24] =3D "KEY_MACRO24",
>> +=C2=A0 =C2=A0 [KEY_MACRO25] =3D "KEY_MACRO25",
>> +=C2=A0 =C2=A0 [KEY_MACRO26] =3D "KEY_MACRO26",
>> +=C2=A0 =C2=A0 [KEY_MACRO27] =3D "KEY_MACRO27",
>> +=C2=A0 =C2=A0 [KEY_MACRO28] =3D "KEY_MACRO28",
>> +=C2=A0 =C2=A0 [KEY_MACRO29] =3D "KEY_MACRO29",
>> +=C2=A0 =C2=A0 [KEY_MACRO30] =3D "KEY_MACRO30",
>> +=C2=A0 =C2=A0 [KEY_MACRO_RECORD_START] =3D "KEY_MACRO_RECORD= _START",
>> +=C2=A0 =C2=A0 [KEY_MACRO_RECORD_STOP] =3D "KEY_MACRO_RECORD_= STOP",
>> +=C2=A0 =C2=A0 [KEY_MACRO_PRESET_CYCLE] =3D "KEY_MACRO_PRESET= _CYCLE",
>> +=C2=A0 =C2=A0 [KEY_MACRO_PRESET1] =3D "KEY_MACRO_PRESET1&quo= t;,
>> +=C2=A0 =C2=A0 [KEY_MACRO_PRESET2] =3D "KEY_MACRO_PRESET2&quo= t;,
>> +=C2=A0 =C2=A0 [KEY_MACRO_PRESET3] =3D "KEY_MACRO_PRESET3&quo= t;,
>> +=C2=A0 =C2=A0 [KEY_KBD_LCD_MENU1] =3D "KEY_KBD_LCD_MENU1&quo= t;,
>> +=C2=A0 =C2=A0 [KEY_KBD_LCD_MENU2] =3D "KEY_KBD_LCD_MENU2&quo= t;,
>> +=C2=A0 =C2=A0 [KEY_KBD_LCD_MENU3] =3D "KEY_KBD_LCD_MENU3&quo= t;,
>> +=C2=A0 =C2=A0 [KEY_KBD_LCD_MENU4] =3D "KEY_KBD_LCD_MENU4&quo= t;,
>> +=C2=A0 =C2=A0 [KEY_KBD_LCD_MENU5] =3D "KEY_KBD_LCD_MENU5&quo= t;,
>> +=C2=A0 =C2=A0 [KEY_MAX] =3D "KEY_MAX",
>> +=C2=A0 =C2=A0 [BTN_0] =3D "BTN_0",
>> +=C2=A0 =C2=A0 [BTN_1] =3D "BTN_1",
>> +=C2=A0 =C2=A0 [BTN_2] =3D "BTN_2",
>> +=C2=A0 =C2=A0 [BTN_3] =3D "BTN_3",
>> +=C2=A0 =C2=A0 [BTN_4] =3D "BTN_4",
>> +=C2=A0 =C2=A0 [BTN_5] =3D "BTN_5",
>> +=C2=A0 =C2=A0 [BTN_6] =3D "BTN_6",
>> +=C2=A0 =C2=A0 [BTN_7] =3D "BTN_7",
>> +=C2=A0 =C2=A0 [BTN_8] =3D "BTN_8",
>> +=C2=A0 =C2=A0 [BTN_9] =3D "BTN_9",
>> +=C2=A0 =C2=A0 [BTN_LEFT] =3D "BTN_LEFT",
>> +=C2=A0 =C2=A0 [BTN_RIGHT] =3D "BTN_RIGHT",
>> +=C2=A0 =C2=A0 [BTN_MIDDLE] =3D "BTN_MIDDLE",
>> +=C2=A0 =C2=A0 [BTN_SIDE] =3D "BTN_SIDE",
>> +=C2=A0 =C2=A0 [BTN_EXTRA] =3D "BTN_EXTRA",
>> +=C2=A0 =C2=A0 [BTN_FORWARD] =3D "BTN_FORWARD",
>> +=C2=A0 =C2=A0 [BTN_BACK] =3D "BTN_BACK",
>> +=C2=A0 =C2=A0 [BTN_TASK] =3D "BTN_TASK",
>> +=C2=A0 =C2=A0 [BTN_TRIGGER] =3D "BTN_TRIGGER",
>> +=C2=A0 =C2=A0 [BTN_THUMB] =3D "BTN_THUMB",
>> +=C2=A0 =C2=A0 [BTN_THUMB2] =3D "BTN_THUMB2",
>> +=C2=A0 =C2=A0 [BTN_TOP] =3D "BTN_TOP",
>> +=C2=A0 =C2=A0 [BTN_TOP2] =3D "BTN_TOP2",
>> +=C2=A0 =C2=A0 [BTN_PINKIE] =3D "BTN_PINKIE",
>> +=C2=A0 =C2=A0 [BTN_BASE] =3D "BTN_BASE",
>> +=C2=A0 =C2=A0 [BTN_BASE2] =3D "BTN_BASE2",
>> +=C2=A0 =C2=A0 [BTN_BASE3] =3D "BTN_BASE3",
>> +=C2=A0 =C2=A0 [BTN_BASE4] =3D "BTN_BASE4",
>> +=C2=A0 =C2=A0 [BTN_BASE5] =3D "BTN_BASE5",
>> +=C2=A0 =C2=A0 [BTN_BASE6] =3D "BTN_BASE6",
>> +=C2=A0 =C2=A0 [BTN_DEAD] =3D "BTN_DEAD",
>> +=C2=A0 =C2=A0 [BTN_SOUTH] =3D "BTN_SOUTH",
>> +=C2=A0 =C2=A0 [BTN_EAST] =3D "BTN_EAST",
>> +=C2=A0 =C2=A0 [BTN_C] =3D "BTN_C",
>> +=C2=A0 =C2=A0 [BTN_NORTH] =3D "BTN_NORTH",
>> +=C2=A0 =C2=A0 [BTN_WEST] =3D "BTN_WEST",
>> +=C2=A0 =C2=A0 [BTN_Z] =3D "BTN_Z",
>> +=C2=A0 =C2=A0 [BTN_TL] =3D "BTN_TL",
>> +=C2=A0 =C2=A0 [BTN_TR] =3D "BTN_TR",
>> +=C2=A0 =C2=A0 [BTN_TL2] =3D "BTN_TL2",
>> +=C2=A0 =C2=A0 [BTN_TR2] =3D "BTN_TR2",
>> +=C2=A0 =C2=A0 [BTN_SELECT] =3D "BTN_SELECT",
>> +=C2=A0 =C2=A0 [BTN_START] =3D "BTN_START",
>> +=C2=A0 =C2=A0 [BTN_MODE] =3D "BTN_MODE",
>> +=C2=A0 =C2=A0 [BTN_THUMBL] =3D "BTN_THUMBL",
>> +=C2=A0 =C2=A0 [BTN_THUMBR] =3D "BTN_THUMBR",
>> +=C2=A0 =C2=A0 [BTN_TOOL_PEN] =3D "BTN_TOOL_PEN",
>> +=C2=A0 =C2=A0 [BTN_TOOL_RUBBER] =3D "BTN_TOOL_RUBBER",<= br> >> +=C2=A0 =C2=A0 [BTN_TOOL_BRUSH] =3D "BTN_TOOL_BRUSH", >> +=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;,
>> +=C2=A0 =C2=A0 [BTN_TOOL_FINGER] =3D "BTN_TOOL_FINGER",<= br> >> +=C2=A0 =C2=A0 [BTN_TOOL_MOUSE] =3D "BTN_TOOL_MOUSE", >> +=C2=A0 =C2=A0 [BTN_TOOL_LENS] =3D "BTN_TOOL_LENS",
>> +=C2=A0 =C2=A0 [BTN_TOOL_QUINTTAP] =3D "BTN_TOOL_QUINTTAP&quo= t;,
>> +=C2=A0 =C2=A0 [BTN_STYLUS3] =3D "BTN_STYLUS3",
>> +=C2=A0 =C2=A0 [BTN_TOUCH] =3D "BTN_TOUCH",
>> +=C2=A0 =C2=A0 [BTN_STYLUS] =3D "BTN_STYLUS",
>> +=C2=A0 =C2=A0 [BTN_STYLUS2] =3D "BTN_STYLUS2",
>> +=C2=A0 =C2=A0 [BTN_TOOL_DOUBLETAP] =3D "BTN_TOOL_DOUBLETAP&q= uot;,
>> +=C2=A0 =C2=A0 [BTN_TOOL_TRIPLETAP] =3D "BTN_TOOL_TRIPLETAP&q= uot;,
>> +=C2=A0 =C2=A0 [BTN_TOOL_QUADTAP] =3D "BTN_TOOL_QUADTAP"= ,
>> +=C2=A0 =C2=A0 [BTN_GEAR_DOWN] =3D "BTN_GEAR_DOWN",
>> +=C2=A0 =C2=A0 [BTN_GEAR_UP] =3D "BTN_GEAR_UP",
>> +=C2=A0 =C2=A0 [BTN_DPAD_UP] =3D "BTN_DPAD_UP",
>> +=C2=A0 =C2=A0 [BTN_DPAD_DOWN] =3D "BTN_DPAD_DOWN",
>> +=C2=A0 =C2=A0 [BTN_DPAD_LEFT] =3D "BTN_DPAD_LEFT",
>> +=C2=A0 =C2=A0 [BTN_DPAD_RIGHT] =3D "BTN_DPAD_RIGHT", >> +=C2=A0 =C2=A0 [BTN_TRIGGER_HAPPY1] =3D "BTN_TRIGGER_HAPPY1&q= uot;,
>> +=C2=A0 =C2=A0 [BTN_TRIGGER_HAPPY2] =3D "BTN_TRIGGER_HAPPY2&q= uot;,
>> +=C2=A0 =C2=A0 [BTN_TRIGGER_HAPPY3] =3D "BTN_TRIGGER_HAPPY3&q= uot;,
>> +=C2=A0 =C2=A0 [BTN_TRIGGER_HAPPY4] =3D "BTN_TRIGGER_HAPPY4&q= uot;,
>> +=C2=A0 =C2=A0 [BTN_TRIGGER_HAPPY5] =3D "BTN_TRIGGER_HAPPY5&q= uot;,
>> +=C2=A0 =C2=A0 [BTN_TRIGGER_HAPPY6] =3D "BTN_TRIGGER_HAPPY6&q= uot;,
>> +=C2=A0 =C2=A0 [BTN_TRIGGER_HAPPY7] =3D "BTN_TRIGGER_HAPPY7&q= uot;,
>> +=C2=A0 =C2=A0 [BTN_TRIGGER_HAPPY8] =3D "BTN_TRIGGER_HAPPY8&q= uot;,
>> +=C2=A0 =C2=A0 [BTN_TRIGGER_HAPPY9] =3D "BTN_TRIGGER_HAPPY9&q= uot;,
>> +=C2=A0 =C2=A0 [BTN_TRIGGER_HAPPY10] =3D "BTN_TRIGGER_HAPPY10= ",
>> +=C2=A0 =C2=A0 [BTN_TRIGGER_HAPPY11] =3D "BTN_TRIGGER_HAPPY11= ",
>> +=C2=A0 =C2=A0 [BTN_TRIGGER_HAPPY12] =3D "BTN_TRIGGER_HAPPY12= ",
>> +=C2=A0 =C2=A0 [BTN_TRIGGER_HAPPY13] =3D "BTN_TRIGGER_HAPPY13= ",
>> +=C2=A0 =C2=A0 [BTN_TRIGGER_HAPPY14] =3D "BTN_TRIGGER_HAPPY14= ",
>> +=C2=A0 =C2=A0 [BTN_TRIGGER_HAPPY15] =3D "BTN_TRIGGER_HAPPY15= ",
>> +=C2=A0 =C2=A0 [BTN_TRIGGER_HAPPY16] =3D "BTN_TRIGGER_HAPPY16= ",
>> +=C2=A0 =C2=A0 [BTN_TRIGGER_HAPPY17] =3D "BTN_TRIGGER_HAPPY17= ",
>> +=C2=A0 =C2=A0 [BTN_TRIGGER_HAPPY18] =3D "BTN_TRIGGER_HAPPY18= ",
>> +=C2=A0 =C2=A0 [BTN_TRIGGER_HAPPY19] =3D "BTN_TRIGGER_HAPPY19= ",
>> +=C2=A0 =C2=A0 [BTN_TRIGGER_HAPPY20] =3D "BTN_TRIGGER_HAPPY20= ",
>> +=C2=A0 =C2=A0 [BTN_TRIGGER_HAPPY21] =3D "BTN_TRIGGER_HAPPY21= ",
>> +=C2=A0 =C2=A0 [BTN_TRIGGER_HAPPY22] =3D "BTN_TRIGGER_HAPPY22= ",
>> +=C2=A0 =C2=A0 [BTN_TRIGGER_HAPPY23] =3D "BTN_TRIGGER_HAPPY23= ",
>> +=C2=A0 =C2=A0 [BTN_TRIGGER_HAPPY24] =3D "BTN_TRIGGER_HAPPY24= ",
>> +=C2=A0 =C2=A0 [BTN_TRIGGER_HAPPY25] =3D "BTN_TRIGGER_HAPPY25= ",
>> +=C2=A0 =C2=A0 [BTN_TRIGGER_HAPPY26] =3D "BTN_TRIGGER_HAPPY26= ",
>> +=C2=A0 =C2=A0 [BTN_TRIGGER_HAPPY27] =3D "BTN_TRIGGER_HAPPY27= ",
>> +=C2=A0 =C2=A0 [BTN_TRIGGER_HAPPY28] =3D "BTN_TRIGGER_HAPPY28= ",
>> +=C2=A0 =C2=A0 [BTN_TRIGGER_HAPPY29] =3D "BTN_TRIGGER_HAPPY29= ",
>> +=C2=A0 =C2=A0 [BTN_TRIGGER_HAPPY30] =3D "BTN_TRIGGER_HAPPY30= ",
>> +=C2=A0 =C2=A0 [BTN_TRIGGER_HAPPY31] =3D "BTN_TRIGGER_HAPPY31= ",
>> +=C2=A0 =C2=A0 [BTN_TRIGGER_HAPPY32] =3D "BTN_TRIGGER_HAPPY32= ",
>> +=C2=A0 =C2=A0 [BTN_TRIGGER_HAPPY33] =3D "BTN_TRIGGER_HAPPY33= ",
>> +=C2=A0 =C2=A0 [BTN_TRIGGER_HAPPY34] =3D "BTN_TRIGGER_HAPPY34= ",
>> +=C2=A0 =C2=A0 [BTN_TRIGGER_HAPPY35] =3D "BTN_TRIGGER_HAPPY35= ",
>> +=C2=A0 =C2=A0 [BTN_TRIGGER_HAPPY36] =3D "BTN_TRIGGER_HAPPY36= ",
>> +=C2=A0 =C2=A0 [BTN_TRIGGER_HAPPY37] =3D "BTN_TRIGGER_HAPPY37= ",
>> +=C2=A0 =C2=A0 [BTN_TRIGGER_HAPPY38] =3D "BTN_TRIGGER_HAPPY38= ",
>> +=C2=A0 =C2=A0 [BTN_TRIGGER_HAPPY39] =3D "BTN_TRIGGER_HAPPY39= ",
>> +=C2=A0 =C2=A0 [BTN_TRIGGER_HAPPY40] =3D "BTN_TRIGGER_HAPPY40= ",
>> +};
>> +
>> +static const char * const led_map[LED_MAX + 1] =3D {
>> +=C2=A0 =C2=A0 [LED_NUML] =3D "LED_NUML",
>> +=C2=A0 =C2=A0 [LED_CAPSL] =3D "LED_CAPSL",
>> *** 11201 LINES SKIPPED ***
>>
>
> make buildworld fails to build due to this error:
>
> [...]
> c++=C2=A0 -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=C2=A0 -O2 -pipe -fno-= common -march=3Dnative -I.
> -I/usr/src/sbin/devd -fPIE -DNDEBUG -MD -MF.depend.devd.pieo -MTdevd.p= ieo
> -Wno-format-zero-length -fstack-protector-strong -Wsystem-headers -Wal= l -Wno-format-y2k -W
> -Wno-unused-parameter -Wpointer-arith -Wreturn-type -Wcast-qual -Wwrit= e-strings -Wswitch
> -Wshadow -Wunused-parameter -Wcast-align -Wchar-subscripts -Wdate-time=
> -Wmissing-variable-declarations -Wthread-safety -Wno-empty-body -Wno-s= tring-plus-int
> -Wno-unused-const-variable -Wno-error=3Dunused-but-set-parameter
> -Wno-error=3Dcast-function-type-mismatch -Wno-missing-variable-declara= tions -Qunused-arguments
> -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
> /usr/src/sbin/devd/devd.cc:1228:2: error: "Remove this gross hack= " 1228 | #error "Remove this
> gross hack" |=C2=A0 ^ 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= .

[Creating objdir /usr/home/i= mp/obj/usr/home/imp/git/head/amd64.amd64/usr.sbin/moused/moused...]
mkdi= r: /usr/home/imp/obj/usr/home/imp/git/head/amd64.amd64/usr.sbin/moused/mous= ed: File exists
[Creating objdir /usr/home/imp/obj/usr/home/imp/git/head= /amd64.amd64/usr.sbin/moused/msconvd...]
make[5]: /usr/home/imp/git/head= /share/mk/auto.obj.mk:74: could not u= se /usr/home/imp/obj/usr/home/imp/git/head/amd64.amd64/usr.sbin/moused/mous= ed: .OBJDIR=3D/usr/home/imp/git/head/usr.sbin/moused/moused
in /usr/hom= e/imp/git/head/share/mk/sys.mk:105
in= make[5] in directory "/usr/home/imp/git/head/usr.sbin/moused/moused&q= uot;

make[5]: stopped making "includes" in /usr/home/imp/g= it/head/usr.sbin/moused/moused

make[4]: stopped making "include= s" in /usr/home/imp/git/head/usr.sbin/moused

Is the error I got, though...=C2=A0 Because we went from build= ing usr.sbin/moused/moused to that being a directory and make won't ove= rwrite a file with a directory.

Warner=C2=A0
=
--000000000000943e38063e06dd6e--