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; }