From 82678d33d6d6a3e4ce731345abccb2b71cbf9c65 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20Rodr=C3=ADguez=20P=C3=A9rez?= Date: Fri, 14 Nov 2025 17:22:31 +0000 Subject: [PATCH] ps/2 elantech: Split get_elantech_movement into 2 functions Keep separated common code from specific v4 code leaving room for implementing other versions on another stage. Change-Id: I7e02a395a867c79fcf646125d41add77626d2cac Reviewed-on: https://review.haiku-os.org/c/haiku/+/9932 Reviewed-by: waddlesplash Reviewed-by: Adrien Destugues Tested-by: Commit checker robot --- .../kernel/bus_managers/ps2/ps2_elantech.cpp | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/add-ons/kernel/bus_managers/ps2/ps2_elantech.cpp b/src/add-ons/kernel/bus_managers/ps2/ps2_elantech.cpp index 3977a6ad3f..9a9c808087 100644 --- a/src/add-ons/kernel/bus_managers/ps2/ps2_elantech.cpp +++ b/src/add-ons/kernel/bus_managers/ps2/ps2_elantech.cpp @@ -70,10 +70,14 @@ const char* kElantechPath[4] = { static touchpad_specs gHardwareSpecs; +static status_t +elantech_process_packet_v4(elantech_cookie *cookie, touchpad_movement *_event, + uint8 packet[PS2_PACKET_ELANTECH]); + + static status_t get_elantech_movement(elantech_cookie *cookie, touchpad_movement *_event, bigtime_t timeout) { - touchpad_movement event; uint8 packet[PS2_PACKET_ELANTECH]; status_t status = acquire_sem_etc(cookie->sem, 1, B_CAN_INTERRUPT | B_RELATIVE_TIMEOUT, @@ -92,6 +96,16 @@ get_elantech_movement(elantech_cookie *cookie, touchpad_movement *_event, bigtim return B_ERROR; } + return elantech_process_packet_v4(cookie, _event, packet); +} + + +static status_t +elantech_process_packet_v4(elantech_cookie *cookie, touchpad_movement *_event, + uint8 packet[PS2_PACKET_ELANTECH]) +{ + touchpad_movement event; + if (cookie->crcEnabled && (packet[3] & 0x08) != 0) { TRACE("ELANTECH: bad crc buffer\n"); return B_ERROR; @@ -155,7 +169,7 @@ get_elantech_movement(elantech_cookie *cookie, touchpad_movement *_event, bigtim event.fingerWidth = cookie->fingers == 1 ? 4 :0; *_event = event; - return status; + return B_OK; }