From owner-dev-commits-src-main@freebsd.org Thu Jan 7 23:20:50 2021 Return-Path: Delivered-To: dev-commits-src-main@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id D701C4DEC0E; Thu, 7 Jan 2021 23:20:50 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4DBj025g6zz4SbF; Thu, 7 Jan 2021 23:20:50 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id B3BC9193DD; Thu, 7 Jan 2021 23:20:50 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 107NKo1p063048; Thu, 7 Jan 2021 23:20:50 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 107NKox0063047; Thu, 7 Jan 2021 23:20:50 GMT (envelope-from git) Date: Thu, 7 Jan 2021 23:20:50 GMT Message-Id: <202101072320.107NKox0063047@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Vladimir Kondratyev Subject: git: 3b2175fdb62c - main - evdev: Implement fuzz. MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: wulf X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 3b2175fdb62c7f872e78ce732952f2ac2ff99c8d Auto-Submitted: auto-generated X-BeenThere: dev-commits-src-main@freebsd.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Commit messages for the main branch of the src repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 07 Jan 2021 23:20:51 -0000 The branch main has been updated by wulf: URL: https://cgit.FreeBSD.org/src/commit/?id=3b2175fdb62c7f872e78ce732952f2ac2ff99c8d commit 3b2175fdb62c7f872e78ce732952f2ac2ff99c8d Author: Vladimir Kondratyev AuthorDate: 2020-11-30 21:10:04 +0000 Commit: Vladimir Kondratyev CommitDate: 2021-01-07 23:18:44 +0000 evdev: Implement fuzz. Fuzz is used to filter noise from the event stream. Upcoming gamepad drivers use it. Reviewed by: hselasky (as part of D27993) --- sys/dev/evdev/evdev.c | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/sys/dev/evdev/evdev.c b/sys/dev/evdev/evdev.c index e76abbc816d3..086ee36333dc 100644 --- a/sys/dev/evdev/evdev.c +++ b/sys/dev/evdev/evdev.c @@ -684,6 +684,7 @@ static void evdev_modify_event(struct evdev_dev *evdev, uint16_t type, uint16_t code, int32_t *value) { + int32_t fuzz, old_value, abs_change; EVDEV_LOCK_ASSERT(evdev); @@ -710,7 +711,24 @@ evdev_modify_event(struct evdev_dev *evdev, uint16_t type, uint16_t code, break; case EV_ABS: - /* TBD: implement fuzz */ + fuzz = evdev->ev_absinfo[code].fuzz; + if (fuzz == 0 || code == ABS_MT_SLOT) + break; + else if (!ABS_IS_MT(code)) + old_value = evdev->ev_absinfo[code].value; + else if (bit_test(evdev->ev_abs_flags, ABS_MT_SLOT)) + old_value = evdev_get_mt_value(evdev, + evdev_get_last_mt_slot(evdev), code); + else /* Pass MT protocol type A events as is */ + break; + + abs_change = abs(*value - old_value); + if (abs_change < fuzz / 2) + *value = old_value; + else if (abs_change < fuzz) + *value = (old_value * 3 + *value) / 4; + else if (abs_change < fuzz * 2) + *value = (old_value + *value) / 2; break; } }