Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 13 Feb 2021 18:20:53 GMT
From:      Vladimir Kondratyev <wulf@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
Subject:   git: 812c59ed614d - main - hkbd: Fix handling of keyboard ErrorRollOver reports
Message-ID:  <202102131820.11DIKrKh025882@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
The branch main has been updated by wulf:

URL: https://cgit.FreeBSD.org/src/commit/?id=812c59ed614df94380e0b1f9ff4a3d15b78ce1bf

commit 812c59ed614df94380e0b1f9ff4a3d15b78ce1bf
Author:     Vladimir Kondratyev <wulf@FreeBSD.org>
AuthorDate: 2021-02-13 18:18:07 +0000
Commit:     Vladimir Kondratyev <wulf@FreeBSD.org>
CommitDate: 2021-02-13 18:18:07 +0000

    hkbd: Fix handling of keyboard ErrorRollOver reports
    
    Ignore fantom keyboard state reports entirelly rather than ignore
    RollOver states for each key separatelly.  Latter results in spurious
    release/push pairs of events on each fantom keyboard state report.
    
    Reported by:    Jan Martin Mikkelsen <janm_AT_transactionware_DOT_com>
    Submitted by:   Jan Martin Mikkelsen (initial version)
    PR:             253249
    MFC after:      1 week
---
 sys/dev/hid/hkbd.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/sys/dev/hid/hkbd.c b/sys/dev/hid/hkbd.c
index 6f4b71dd49b6..89325f9b2499 100644
--- a/sys/dev/hid/hkbd.c
+++ b/sys/dev/hid/hkbd.c
@@ -715,11 +715,16 @@ hkbd_intr_callback(void *context, void *data, hid_size_t len)
 				uint32_t key =
 				    hid_get_data(buf + offset, len - offset,
 				    &sc->sc_loc_key[i]);
+				if (key == KEY_ERROR) {
+					DPRINTF("KEY_ERROR\n");
+					sc->sc_ndata = sc->sc_odata;
+					return;	/* ignore */
+				}
 				if (modifiers & MOD_FN)
 					key = hkbd_apple_fn(key);
 				if (sc->sc_flags & HKBD_FLAG_APPLE_SWAP)
 					key = hkbd_apple_swap(key);
-				if (key == KEY_NONE || key == KEY_ERROR || key >= HKBD_NKEYCODE)
+				if (key == KEY_NONE || key >= HKBD_NKEYCODE)
 					continue;
 				/* set key in bitmap */
 				sc->sc_ndata.bitmap[key / 64] |= 1ULL << (key % 64);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202102131820.11DIKrKh025882>