tsphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget*/translations/zh_CN/input/devices/elantechmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget*/translations/zh_TW/input/devices/elantechmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget*/translations/it_IT/input/devices/elantechmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget*/translations/ja_JP/input/devices/elantechmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget*/translations/ko_KR/input/devices/elantechmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget*/translations/sp_SP/input/devices/elantechmodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhsection)}(hhh](htitle)}(hElantech Touchpad Driverh]hElantech Touchpad Driver}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhD/var/lib/git/docbuild/linux/Documentation/input/devices/elantech.rsthKubh block_quote)}(hXCopyright (C) 2007-2008 Arjan Opmeer Extra information for hardware version 1 found and provided by Steve Havelka Version 2 (EeePC) hardware support based on patches received from Woody at Xandros and forwarded to me by user StewieGriffin at the eeeuser.com forum h](h paragraph)}(h7Copyright (C) 2007-2008 Arjan Opmeer h](h&Copyright (C) 2007-2008 Arjan Opmeer <}(hhhhhNhNubh reference)}(harjan@opmeer.neth]harjan@opmeer.net}(hhhhhNhNubah}(h]h ]h"]h$]h&]refurimailto:arjan@opmeer.netuh1hhhubh>}(hhhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhhubh)}(hLExtra information for hardware version 1 found and provided by Steve Havelkah]hLExtra information for hardware version 1 found and provided by Steve Havelka}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhubh)}(hVersion 2 (EeePC) hardware support based on patches received from Woody at Xandros and forwarded to me by user StewieGriffin at the eeeuser.com forumh]hVersion 2 (EeePC) hardware support based on patches received from Woody at Xandros and forwarded to me by user StewieGriffin at the eeeuser.com forum}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK hhubeh}(h]h ]h"]h$]h&]uh1hhhhKhhhhubhcomment)}(hXvContents 1. Introduction 2. Extra knobs 3. Differentiating hardware versions 4. Hardware version 1 4.1 Registers 4.2 Native relative mode 4 byte packet format 4.3 Native absolute mode 4 byte packet format 5. Hardware version 2 5.1 Registers 5.2 Native absolute mode 6 byte packet format 5.2.1 Parity checking and packet re-synchronization 5.2.2 One/Three finger touch 5.2.3 Two finger touch 6. Hardware version 3 6.1 Registers 6.2 Native absolute mode 6 byte packet format 6.2.1 One/Three finger touch 6.2.2 Two finger touch 7. Hardware version 4 7.1 Registers 7.2 Native absolute mode 6 byte packet format 7.2.1 Status packet 7.2.2 Head packet 7.2.3 Motion packet 8. Trackpoint (for Hardware version 3 and 4) 8.1 Registers 8.2 Native relative mode 6 byte packet format 8.2.1 Status Packeth]hXvContents 1. Introduction 2. Extra knobs 3. Differentiating hardware versions 4. Hardware version 1 4.1 Registers 4.2 Native relative mode 4 byte packet format 4.3 Native absolute mode 4 byte packet format 5. Hardware version 2 5.1 Registers 5.2 Native absolute mode 6 byte packet format 5.2.1 Parity checking and packet re-synchronization 5.2.2 One/Three finger touch 5.2.3 Two finger touch 6. Hardware version 3 6.1 Registers 6.2 Native absolute mode 6 byte packet format 6.2.1 One/Three finger touch 6.2.2 Two finger touch 7. Hardware version 4 7.1 Registers 7.2 Native absolute mode 6 byte packet format 7.2.1 Status packet 7.2.2 Head packet 7.2.3 Motion packet 8. Trackpoint (for Hardware version 3 and 4) 8.1 Registers 8.2 Native relative mode 6 byte packet format 8.2.1 Status Packet}hjsbah}(h]h ]h"]h$]h&] xml:spacepreserveuh1jhhhhhhhK-ubh)}(hhh](h)}(h Introductionh]h Introduction}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhK/ubh)}(hXCurrently the Linux Elantech touchpad driver is aware of four different hardware versions unimaginatively called version 1,version 2, version 3 and version 4. Version 1 is found in "older" laptops and uses 4 bytes per packet. Version 2 seems to be introduced with the EeePC and uses 6 bytes per packet, and provides additional features such as position of two fingers, and width of the touch. Hardware version 3 uses 6 bytes per packet (and for 2 fingers the concatenation of two 6 bytes packets) and allows tracking of up to 3 fingers. Hardware version 4 uses 6 bytes per packet, and can combine a status packet with multiple head or motion packets. Hardware version 4 allows tracking up to 5 fingers.h]hXCurrently the Linux Elantech touchpad driver is aware of four different hardware versions unimaginatively called version 1,version 2, version 3 and version 4. Version 1 is found in “older” laptops and uses 4 bytes per packet. Version 2 seems to be introduced with the EeePC and uses 6 bytes per packet, and provides additional features such as position of two fingers, and width of the touch. Hardware version 3 uses 6 bytes per packet (and for 2 fingers the concatenation of two 6 bytes packets) and allows tracking of up to 3 fingers. Hardware version 4 uses 6 bytes per packet, and can combine a status packet with multiple head or motion packets. Hardware version 4 allows tracking up to 5 fingers.}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK1hjhhubh)}(hSome Hardware version 3 and version 4 also have a trackpoint which uses a separate packet format. It is also 6 bytes per packet.h]hSome Hardware version 3 and version 4 also have a trackpoint which uses a separate packet format. It is also 6 bytes per packet.}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK EF013 02.06.00 => EF019h]ht4 bytes version: (after the arrow is the name given in the Dell-provided driver) 02.00.22 => EF013 02.06.00 => EF019}hjsbah}(h]h ]h"]h$]h&]jjuh1jhhhKhjhhubh)}(hiIn the wild, there appear to be more versions, such as 00.01.64, 01.00.21, 02.00.00, 02.00.04, 02.00.06::h]hhIn the wild, there appear to be more versions, such as 00.01.64, 01.00.21, 02.00.00, 02.00.04, 02.00.06:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubj)}(h{6 bytes: 02.00.30 => EF113 02.08.00 => EF023 02.08.XX => EF123 02.0B.00 => EF215 04.01.XX => Scroll_EF051 04.02.XX => EF051h]h{6 bytes: 02.00.30 => EF113 02.08.00 => EF023 02.08.XX => EF123 02.0B.00 => EF215 04.01.XX => Scroll_EF051 04.02.XX => EF051}hjsbah}(h]h ]h"]h$]h&]jjuh1jhhhKhjhhubh)}(hIn the wild, there appear to be more versions, such as 04.03.01, 04.04.11. There appears to be almost no difference, except for EF113, which does not report pressure/width and has different data consistency checks.h]hIn the wild, there appear to be more versions, such as 04.03.01, 04.04.11. There appears to be almost no difference, except for EF113, which does not report pressure/width and has different data consistency checks.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(hProbably all the versions with param[0] <= 01 can be considered as 4 bytes/firmware 1. The versions < 02.08.00, with the exception of 02.00.30, as 4 bytes/firmware 2. Everything >= 02.08.00 can be considered as 6 bytes.h]hProbably all the versions with param[0] <= 01 can be considered as 4 bytes/firmware 1. The versions < 02.08.00, with the exception of 02.00.30, as 4 bytes/firmware 2. Everything >= 02.08.00 can be considered as 6 bytes.}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubeh}(h]!differentiating-hardware-versionsah ]h"]!differentiating hardware versionsah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hHardware version 1h]hHardware version 1}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7hhhhhKubh)}(hhh](h)}(h Registersh]h Registers}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjHhhhhhKubh)}(hHBy echoing a hexadecimal value to a register it contents can be altered.h]hHBy echoing a hexadecimal value to a register it contents can be altered.}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjHhhubh)}(h For example::h]h For example:}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjHhhubj)}(hecho -n 0x16 > reg_10h]hecho -n 0x16 > reg_10}hjusbah}(h]h ]h"]h$]h&]jjuh1jhhhKhjHhhubj)}(hhh](j)}(hXreg_10:: bit 7 6 5 4 3 2 1 0 B C T D L A S E E: 1 = enable smart edges unconditionally S: 1 = enable smart edges only when dragging A: 1 = absolute mode (needs 4 byte packets, see reg_11) L: 1 = enable drag lock (see reg_22) D: 1 = disable dynamic resolution T: 1 = disable tapping C: 1 = enable corner tap B: 1 = swap left and right button h](h)}(hreg_10::h]hreg_10:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubj)}(hXbit 7 6 5 4 3 2 1 0 B C T D L A S E E: 1 = enable smart edges unconditionally S: 1 = enable smart edges only when dragging A: 1 = absolute mode (needs 4 byte packets, see reg_11) L: 1 = enable drag lock (see reg_22) D: 1 = disable dynamic resolution T: 1 = disable tapping C: 1 = enable corner tap B: 1 = swap left and right buttonh]hXbit 7 6 5 4 3 2 1 0 B C T D L A S E E: 1 = enable smart edges unconditionally S: 1 = enable smart edges only when dragging A: 1 = absolute mode (needs 4 byte packets, see reg_11) L: 1 = enable drag lock (see reg_22) D: 1 = disable dynamic resolution T: 1 = disable tapping C: 1 = enable corner tap B: 1 = swap left and right button}hjsbah}(h]h ]h"]h$]h&]jjuh1jhhhKhjubeh}(h]h ]h"]h$]h&]uh1jhjhhhhhNubj)}(hXreg_11:: bit 7 6 5 4 3 2 1 0 1 0 0 H V 1 F P P: 1 = enable parity checking for relative mode F: 1 = enable native 4 byte packet mode V: 1 = enable vertical scroll area H: 1 = enable horizontal scroll area h](h)}(hreg_11::h]hreg_11:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubj)}(hXbit 7 6 5 4 3 2 1 0 1 0 0 H V 1 F P P: 1 = enable parity checking for relative mode F: 1 = enable native 4 byte packet mode V: 1 = enable vertical scroll area H: 1 = enable horizontal scroll areah]hXbit 7 6 5 4 3 2 1 0 1 0 0 H V 1 F P P: 1 = enable parity checking for relative mode F: 1 = enable native 4 byte packet mode V: 1 = enable vertical scroll area H: 1 = enable horizontal scroll area}hjsbah}(h]h ]h"]h$]h&]jjuh1jhhhKhjubeh}(h]h ]h"]h$]h&]uh1jhjhhhhhNubj)}(h®_20:: single finger width? h](h)}(hreg_20::h]hreg_20:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubj)}(hsingle finger width?h]hsingle finger width?}hjsbah}(h]h ]h"]h$]h&]jjuh1jhhhKhjubeh}(h]h ]h"]h$]h&]uh1jhjhhhhhNubj)}(h@reg_21:: scroll area width (small: 0x40 ... wide: 0xff) h](h)}(hreg_21::h]hreg_21:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubj)}(h.scroll area width (small: 0x40 ... wide: 0xff)h]h.scroll area width (small: 0x40 ... wide: 0xff)}hj sbah}(h]h ]h"]h$]h&]jjuh1jhhhKhjubeh}(h]h ]h"]h$]h&]uh1jhjhhhhhNubj)}(hyreg_22:: drag lock time out (short: 0x14 ... long: 0xfe; 0xff = tap again to release) h](h)}(hreg_22::h]hreg_22:}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubj)}(h`drag lock time out (short: 0x14 ... long: 0xfe; 0xff = tap again to release)h]h`drag lock time out (short: 0x14 ... long: 0xfe; 0xff = tap again to release)}hj0sbah}(h]h ]h"]h$]h&]jjuh1jhhhKhjubeh}(h]h ]h"]h$]h&]uh1jhjhhhhhNubj)}(h#reg_23:: tap make timeout? h](h)}(hreg_23::h]hreg_23:}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjDubj)}(htap make timeout?h]htap make timeout?}hjVsbah}(h]h ]h"]h$]h&]jjuh1jhhhKhjDubeh}(h]h ]h"]h$]h&]uh1jhjhhhhhNubj)}(h®_24:: tap release timeout? h](h)}(hreg_24::h]hreg_24:}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjjubj)}(htap release timeout?h]htap release timeout?}hj|sbah}(h]h ]h"]h$]h&]jjuh1jhhhKhjjubeh}(h]h ]h"]h$]h&]uh1jhjhhhhhNubj)}(hSreg_25:: smart edge cursor speed (0x02 = slow, 0x03 = medium, 0x04 = fast) h](h)}(hreg_25::h]hreg_25:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubj)}(hAsmart edge cursor speed (0x02 = slow, 0x03 = medium, 0x04 = fast)h]hAsmart edge cursor speed (0x02 = slow, 0x03 = medium, 0x04 = fast)}hjsbah}(h]h ]h"]h$]h&]jjuh1jhhhKhjubeh}(h]h ]h"]h$]h&]uh1jhjhhhhhNubj)}(h4reg_26:: smart edge activation area width? h](h)}(hreg_26::h]hreg_26:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubj)}(h!smart edge activation area width?h]h!smart edge activation area width?}hjsbah}(h]h ]h"]h$]h&]jjuh1jhhhKhjubeh}(h]h ]h"]h$]h&]uh1jhjhhhhhNubeh}(h]h ]h"]h$]h&]jjuh1jhhhKhjHhhubeh}(h] registersah ]h"]h$] registersah&]uh1hhj7hhhhhK referencedKubh)}(hhh](h)}(h)Native relative mode 4 byte packet formath]h)Native relative mode 4 byte packet format}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(hbyte 0::h]hbyte 0:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubj)}(hXGbit 7 6 5 4 3 2 1 0 c c p2 p1 1 M R L L, R, M = 1 when Left, Right, Middle mouse button pressed some models have M as byte 3 odd parity bit when parity checking is enabled (reg_11, P = 1): p1..p2 = byte 1 and 2 odd parity bit c = 1 when corner tap detectedh]hXGbit 7 6 5 4 3 2 1 0 c c p2 p1 1 M R L L, R, M = 1 when Left, Right, Middle mouse button pressed some models have M as byte 3 odd parity bit when parity checking is enabled (reg_11, P = 1): p1..p2 = byte 1 and 2 odd parity bit c = 1 when corner tap detected}hj sbah}(h]h ]h"]h$]h&]jjuh1jhhhKhjhhubh)}(hbyte 1::h]hbyte 1:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubj)}(hbit 7 6 5 4 3 2 1 0 dx7 dx6 dx5 dx4 dx3 dx2 dx1 dx0 dx7..dx0 = x movement; positive = right, negative = left byte 1 = 0xf0 when corner tap detectedh]hbit 7 6 5 4 3 2 1 0 dx7 dx6 dx5 dx4 dx3 dx2 dx1 dx0 dx7..dx0 = x movement; positive = right, negative = left byte 1 = 0xf0 when corner tap detected}hj&sbah}(h]h ]h"]h$]h&]jjuh1jhhhKhjhhubh)}(hbyte 2::h]hbyte 2:}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjhhubj)}(hbit 7 6 5 4 3 2 1 0 dy7 dy6 dy5 dy4 dy3 dy2 dy1 dy0 dy7..dy0 = y movement; positive = up, negative = downh]hbit 7 6 5 4 3 2 1 0 dy7 dy6 dy5 dy4 dy3 dy2 dy1 dy0 dy7..dy0 = y movement; positive = up, negative = down}hjBsbah}(h]h ]h"]h$]h&]jjuh1jhhhMhjhhubh)}(hbyte 3::h]hbyte 3:}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjhhubj)}(hX5parity checking enabled (reg_11, P = 1): bit 7 6 5 4 3 2 1 0 w h n1 n0 ds3 ds2 ds1 ds0 normally: ds3..ds0 = scroll wheel amount and direction positive = down or left negative = up or right when corner tap detected: ds0 = 1 when top right corner tapped ds1 = 1 when bottom right corner tapped ds2 = 1 when bottom left corner tapped ds3 = 1 when top left corner tapped n1..n0 = number of fingers on touchpad only models with firmware 2.x report this, models with firmware 1.x seem to map one, two and three finger taps directly to L, M and R mouse buttons h = 1 when horizontal scroll action w = 1 when wide finger touch? otherwise (reg_11, P = 0): bit 7 6 5 4 3 2 1 0 ds7 ds6 ds5 ds4 ds3 ds2 ds1 ds0 ds7..ds0 = vertical scroll amount and direction negative = up positive = downh]hX5parity checking enabled (reg_11, P = 1): bit 7 6 5 4 3 2 1 0 w h n1 n0 ds3 ds2 ds1 ds0 normally: ds3..ds0 = scroll wheel amount and direction positive = down or left negative = up or right when corner tap detected: ds0 = 1 when top right corner tapped ds1 = 1 when bottom right corner tapped ds2 = 1 when bottom left corner tapped ds3 = 1 when top left corner tapped n1..n0 = number of fingers on touchpad only models with firmware 2.x report this, models with firmware 1.x seem to map one, two and three finger taps directly to L, M and R mouse buttons h = 1 when horizontal scroll action w = 1 when wide finger touch? otherwise (reg_11, P = 0): bit 7 6 5 4 3 2 1 0 ds7 ds6 ds5 ds4 ds3 ds2 ds1 ds0 ds7..ds0 = vertical scroll amount and direction negative = up positive = down}hj^sbah}(h]h ]h"]h$]h&]jjuh1jhhhM hjhhubeh}(h])native-relative-mode-4-byte-packet-formatah ]h"])native relative mode 4 byte packet formatah$]h&]uh1hhj7hhhhhKubh)}(hhh](h)}(h)Native absolute mode 4 byte packet formath]h)Native absolute mode 4 byte packet format}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjthhhhhM*ubh)}(hEF013 and EF019 have a special behaviour (due to a bug in the firmware?), and when 1 finger is touching, the first 2 position reports must be discarded. This counting is reset whenever a different number of fingers is reported.h]hEF013 and EF019 have a special behaviour (due to a bug in the firmware?), and when 1 finger is touching, the first 2 position reports must be discarded. This counting is reset whenever a different number of fingers is reported.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM,hjthhubh)}(hbyte 0::h]hbyte 0:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM0hjthhubj)}(hXfirmware version 1.x: bit 7 6 5 4 3 2 1 0 D U p1 p2 1 p3 R L L, R = 1 when Left, Right mouse button pressed p1..p3 = byte 1..3 odd parity bit D, U = 1 when rocker switch pressed Up, Down firmware version 2.x: bit 7 6 5 4 3 2 1 0 n1 n0 p2 p1 1 p3 R L L, R = 1 when Left, Right mouse button pressed p1..p3 = byte 1..3 odd parity bit n1..n0 = number of fingers on touchpadh]hXfirmware version 1.x: bit 7 6 5 4 3 2 1 0 D U p1 p2 1 p3 R L L, R = 1 when Left, Right mouse button pressed p1..p3 = byte 1..3 odd parity bit D, U = 1 when rocker switch pressed Up, Down firmware version 2.x: bit 7 6 5 4 3 2 1 0 n1 n0 p2 p1 1 p3 R L L, R = 1 when Left, Right mouse button pressed p1..p3 = byte 1..3 odd parity bit n1..n0 = number of fingers on touchpad}hjsbah}(h]h ]h"]h$]h&]jjuh1jhhhM2hjthhubh)}(hbyte 1::h]hbyte 1:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMDhjthhubj)}(hX;firmware version 1.x: bit 7 6 5 4 3 2 1 0 f 0 th tw x9 x8 y9 y8 tw = 1 when two finger touch th = 1 when three finger touch f = 1 when finger touch firmware version 2.x: bit 7 6 5 4 3 2 1 0 . . . . x9 x8 y9 y8h]hX;firmware version 1.x: bit 7 6 5 4 3 2 1 0 f 0 th tw x9 x8 y9 y8 tw = 1 when two finger touch th = 1 when three finger touch f = 1 when finger touch firmware version 2.x: bit 7 6 5 4 3 2 1 0 . . . . x9 x8 y9 y8}hjsbah}(h]h ]h"]h$]h&]jjuh1jhhhMFhjthhubh)}(hbyte 2::h]hbyte 2:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMThjthhubj)}(hubit 7 6 5 4 3 2 1 0 x7 x6 x5 x4 x3 x2 x1 x0 x9..x0 = absolute x value (horizontal)h]hubit 7 6 5 4 3 2 1 0 x7 x6 x5 x4 x3 x2 x1 x0 x9..x0 = absolute x value (horizontal)}hjsbah}(h]h ]h"]h$]h&]jjuh1jhhhMVhjthhubh)}(hbyte 3::h]hbyte 3:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM[hjthhubj)}(hsbit 7 6 5 4 3 2 1 0 y7 y6 y5 y4 y3 y2 y1 y0 y9..y0 = absolute y value (vertical)h]hsbit 7 6 5 4 3 2 1 0 y7 y6 y5 y4 y3 y2 y1 y0 y9..y0 = absolute y value (vertical)}hjsbah}(h]h ]h"]h$]h&]jjuh1jhhhM]hjthhubeh}(h])native-absolute-mode-4-byte-packet-formatah ]h"])native absolute mode 4 byte packet formatah$]h&]uh1hhj7hhhhhM*ubeh}(h]hardware-version-1ah ]h"]hardware version 1ah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hHardware version 2h]hHardware version 2}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhMdubh)}(hhh](h)}(h Registersh]h Registers}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$hhhhhMhubh)}(hHBy echoing a hexadecimal value to a register it contents can be altered.h]hHBy echoing a hexadecimal value to a register it contents can be altered.}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMjhj$hhubh)}(h For example::h]h For example:}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMlhj$hhubj)}(hecho -n 0x56 > reg_10h]hecho -n 0x56 > reg_10}hjQsbah}(h]h ]h"]h$]h&]jjuh1jhhhMnhj$hhubj)}(hhh](j)}(hxreg_10:: bit 7 6 5 4 3 2 1 0 0 1 0 1 0 1 D 0 D: 1 = enable drag and drop h](h)}(hreg_10::h]hreg_10:}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMphjbubj)}(hjbit 7 6 5 4 3 2 1 0 0 1 0 1 0 1 D 0 D: 1 = enable drag and droph]hjbit 7 6 5 4 3 2 1 0 0 1 0 1 0 1 D 0 D: 1 = enable drag and drop}hjtsbah}(h]h ]h"]h$]h&]jjuh1jhhhMrhjbubeh}(h]h ]h"]h$]h&]uh1jhj_hhhhhNubj)}(hzreg_11:: bit 7 6 5 4 3 2 1 0 1 0 0 0 S 0 1 0 S: 1 = enable vertical scroll h](h)}(hreg_11::h]hreg_11:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMwhjubj)}(hlbit 7 6 5 4 3 2 1 0 1 0 0 0 S 0 1 0 S: 1 = enable vertical scrollh]hlbit 7 6 5 4 3 2 1 0 1 0 0 0 S 0 1 0 S: 1 = enable vertical scroll}hjsbah}(h]h ]h"]h$]h&]jjuh1jhhhMyhjubeh}(h]h ]h"]h$]h&]uh1jhj_hhhhhNubj)}(h reg_21:: unknown (0x00) h](h)}(hreg_21::h]hreg_21:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM~hjubj)}(hunknown (0x00)h]hunknown (0x00)}hjsbah}(h]h ]h"]h$]h&]jjuh1jhhhMhjubeh}(h]h ]h"]h$]h&]uh1jhj_hhhhhNubj)}(hreg_22:: drag and drop release time out (short: 0x70 ... long 0x7e; 0x7f = never i.e. tap again to release) h](h)}(hreg_22::h]hreg_22:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubj)}(h|drag and drop release time out (short: 0x70 ... long 0x7e; 0x7f = never i.e. tap again to release)h]h|drag and drop release time out (short: 0x70 ... long 0x7e; 0x7f = never i.e. tap again to release)}hjsbah}(h]h ]h"]h$]h&]jjuh1jhhhMhjubeh}(h]h ]h"]h$]h&]uh1jhj_hhhhhNubeh}(h]h ]h"]h$]h&]jjuh1jhhhMphj$hhubeh}(h]id1ah ]h"]h$]jah&]uh1hhjhhhhhMhjKubh)}(hhh](h)}(h)Native absolute mode 6 byte packet formath]h)Native absolute mode 6 byte packet format}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhMubh)}(hhh](h)}(h-Parity checking and packet re-synchronizationh]h-Parity checking and packet re-synchronization}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhMubh)}(hNThere is no parity checking, however some consistency checks can be performed.h]hNThere is no parity checking, however some consistency checks can be performed.}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjhhubh)}(hFor instance for EF113::h]hFor instance for EF113:}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjhhubj)}(hX_SA1= packet[0]; A1 = packet[1]; B1 = packet[2]; SB1= packet[3]; C1 = packet[4]; D1 = packet[5]; if( (((SA1 & 0x3C) != 0x3C) && ((SA1 & 0xC0) != 0x80)) || // check Byte 1 (((SA1 & 0x0C) != 0x0C) && ((SA1 & 0xC0) == 0x80)) || // check Byte 1 (one finger pressed) (((SA1 & 0xC0) != 0x80) && (( A1 & 0xF0) != 0x00)) || // check Byte 2 (((SB1 & 0x3E) != 0x38) && ((SA1 & 0xC0) != 0x80)) || // check Byte 4 (((SB1 & 0x0E) != 0x08) && ((SA1 & 0xC0) == 0x80)) || // check Byte 4 (one finger pressed) (((SA1 & 0xC0) != 0x80) && (( C1 & 0xF0) != 0x00)) ) // check Byte 5 // error detectedh]hX_SA1= packet[0]; A1 = packet[1]; B1 = packet[2]; SB1= packet[3]; C1 = packet[4]; D1 = packet[5]; if( (((SA1 & 0x3C) != 0x3C) && ((SA1 & 0xC0) != 0x80)) || // check Byte 1 (((SA1 & 0x0C) != 0x0C) && ((SA1 & 0xC0) == 0x80)) || // check Byte 1 (one finger pressed) (((SA1 & 0xC0) != 0x80) && (( A1 & 0xF0) != 0x00)) || // check Byte 2 (((SB1 & 0x3E) != 0x38) && ((SA1 & 0xC0) != 0x80)) || // check Byte 4 (((SB1 & 0x0E) != 0x08) && ((SA1 & 0xC0) == 0x80)) || // check Byte 4 (one finger pressed) (((SA1 & 0xC0) != 0x80) && (( C1 & 0xF0) != 0x00)) ) // check Byte 5 // error detected}hjEsbah}(h]h ]h"]h$]h&]jjuh1jhhhMhjhhubh)}(h hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj- hhubj)}(hbit 7 6 5 4 3 2 1 0 w3 w2 w1 w0 0 1 R L L, R = 1 when Left, Right mouse button pressed w3..w0 = finger width (spans how many trace lines)=h]hbit 7 6 5 4 3 2 1 0 w3 w2 w1 w0 0 1 R L L, R = 1 when Left, Right mouse button pressed w3..w0 = finger width (spans how many trace lines)}hjL sbah}(h]h ]h"]h$]h&]jjuh1jhhhMhj- hhubh)}(hbyte 1::h]hbyte 1:}(hjZ hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj- hhubj)}(hGbit 7 6 5 4 3 2 1 0 p7 p6 p5 p4 x11 x10 x9 x8h]hGbit 7 6 5 4 3 2 1 0 p7 p6 p5 p4 x11 x10 x9 x8}hjh sbah}(h]h ]h"]h$]h&]jjuh1jhhhMhj- hhubh)}(hbyte 2::h]hbyte 2:}(hjv hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj- hhubj)}(hubit 7 6 5 4 3 2 1 0 x7 x6 x5 x4 x3 x2 x1 x0 x11..x0 = absolute x value (horizontal)h]hubit 7 6 5 4 3 2 1 0 x7 x6 x5 x4 x3 x2 x1 x0 x11..x0 = absolute x value (horizontal)}hj sbah}(h]h ]h"]h$]h&]jjuh1jhhhMhj- hhubh)}(hbyte 3::h]hbyte 3:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj- hhubj)}(habit 7 6 5 4 3 2 1 0 id2 id1 id0 1 0 0 0 1 id2..id0 = finger idh]habit 7 6 5 4 3 2 1 0 id2 id1 id0 1 0 0 0 1 id2..id0 = finger id}hj sbah}(h]h ]h"]h$]h&]jjuh1jhhhMhj- hhubh)}(hbyte 4::h]hbyte 4:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj- hhubj)}(h_bit 7 6 5 4 3 2 1 0 p3 p1 p2 p0 y11 y10 y9 y8 p7..p0 = pressureh]h_bit 7 6 5 4 3 2 1 0 p3 p1 p2 p0 y11 y10 y9 y8 p7..p0 = pressure}hj sbah}(h]h ]h"]h$]h&]jjuh1jhhhMhj- hhubh)}(hbyte 5::h]hbyte 5:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj- hhubj)}(hsbit 7 6 5 4 3 2 1 0 y7 y6 y5 y4 y3 y2 y1 y0 y11..y0 = absolute y value (vertical)h]hsbit 7 6 5 4 3 2 1 0 y7 y6 y5 y4 y3 y2 y1 y0 y11..y0 = absolute y value (vertical)}hj sbah}(h]h ]h"]h$]h&]jjuh1jhhhMhj- hhubeh}(h] head-packetah ]h"] head packetah$]h&]uh1hhj# hhhhhMubh)}(hhh](h)}(h Motion packeth]h Motion packet}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhMubh)}(hbyte 0::h]hbyte 0:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj hhubj)}(hX bit 7 6 5 4 3 2 1 0 id2 id1 id0 w 0 1 R L L, R = 1 when Left, Right mouse button pressed id2..id0 = finger id w = 1 when delta overflows (> 127 or < -128), in this case firmware sends us (delta x / 5) and (delta y / 5)h]hX bit 7 6 5 4 3 2 1 0 id2 id1 id0 w 0 1 R L L, R = 1 when Left, Right mouse button pressed id2..id0 = finger id w = 1 when delta overflows (> 127 or < -128), in this case firmware sends us (delta x / 5) and (delta y / 5)}hj sbah}(h]h ]h"]h$]h&]jjuh1jhhhMhj hhubh)}(hbyte 1::h]hbyte 1:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj hhubj)}(hqbit 7 6 5 4 3 2 1 0 x7 x6 x5 x4 x3 x2 x1 x0 x7..x0 = delta x (two's complement)h]hqbit 7 6 5 4 3 2 1 0 x7 x6 x5 x4 x3 x2 x1 x0 x7..x0 = delta x (two's complement)}hj) sbah}(h]h ]h"]h$]h&]jjuh1jhhhMhj hhubh)}(hbyte 2::h]hbyte 2:}(hj7 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj hhubj)}(hqbit 7 6 5 4 3 2 1 0 y7 y6 y5 y4 y3 y2 y1 y0 y7..y0 = delta y (two's complement)h]hqbit 7 6 5 4 3 2 1 0 y7 y6 y5 y4 y3 y2 y1 y0 y7..y0 = delta y (two's complement)}hjE sbah}(h]h ]h"]h$]h&]jjuh1jhhhMhj hhubh)}(hbyte 3::h]hbyte 3:}(hjS hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj hhubj)}(habit 7 6 5 4 3 2 1 0 id2 id1 id0 1 0 0 1 0 id2..id0 = finger idh]habit 7 6 5 4 3 2 1 0 id2 id1 id0 1 0 0 1 0 id2..id0 = finger id}hja sbah}(h]h ]h"]h$]h&]jjuh1jhhhMhj hhubh)}(hbyte 4::h]hbyte 4:}(hjo hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj hhubj)}(hqbit 7 6 5 4 3 2 1 0 x7 x6 x5 x4 x3 x2 x1 x0 x7..x0 = delta x (two's complement)h]hqbit 7 6 5 4 3 2 1 0 x7 x6 x5 x4 x3 x2 x1 x0 x7..x0 = delta x (two's complement)}hj} sbah}(h]h ]h"]h$]h&]jjuh1jhhhMhj hhubh)}(hbyte 5::h]hbyte 5:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM hj hhubj)}(hbit 7 6 5 4 3 2 1 0 y7 y6 y5 y4 y3 y2 y1 y0 y7..y0 = delta y (two's complement) byte 0 ~ 2 for one finger byte 3 ~ 5 for anotherh]hbit 7 6 5 4 3 2 1 0 y7 y6 y5 y4 y3 y2 y1 y0 y7..y0 = delta y (two's complement) byte 0 ~ 2 for one finger byte 3 ~ 5 for another}hj sbah}(h]h ]h"]h$]h&]jjuh1jhhhMhj hhubeh}(h] motion-packetah ]h"] motion packetah$]h&]uh1hhj# hhhhhMubeh}(h]id7ah ]h"]h$])native absolute mode 6 byte packet formatah&]uh1hhj hhhhhM|jKubeh}(h]hardware-version-4ah ]h"]hardware version 4ah$]h&]uh1hhhhhhhhMoubh)}(hhh](h)}(h)Trackpoint (for Hardware version 3 and 4)h]h)Trackpoint (for Hardware version 3 and 4)}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhMubh)}(hhh](h)}(h Registersh]h Registers}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhMubh)}(h*No special registers have been identified.h]h*No special registers have been identified.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj hhubeh}(h]id8ah ]h"]h$] registersah&]uh1hhj hhhhhMjKubh)}(hhh](h)}(h)Native relative mode 6 byte packet formath]h)Native relative mode 6 byte packet format}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhM ubh)}(hhh](h)}(h Status Packeth]h Status Packet}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhM#ubh)}(hbyte 0::h]hbyte 0:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM%hjhhubj)}(hGbit 7 6 5 4 3 2 1 0 0 0 sx sy 0 M R Lh]hGbit 7 6 5 4 3 2 1 0 0 0 sx sy 0 M R L}hj'sbah}(h]h ]h"]h$]h&]jjuh1jhhhM'hjhhubh)}(hbyte 1::h]hbyte 1:}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM*hjhhubj)}(hGbit 7 6 5 4 3 2 1 0 ~sx 0 0 0 0 0 0 0h]hGbit 7 6 5 4 3 2 1 0 ~sx 0 0 0 0 0 0 0}hjCsbah}(h]h ]h"]h$]h&]jjuh1jhhhM,hjhhubh)}(hbyte 2::h]hbyte 2:}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM/hjhhubj)}(hGbit 7 6 5 4 3 2 1 0 ~sy 0 0 0 0 0 0 0h]hGbit 7 6 5 4 3 2 1 0 ~sy 0 0 0 0 0 0 0}hj_sbah}(h]h ]h"]h$]h&]jjuh1jhhhM1hjhhubh)}(hbyte 3::h]hbyte 3:}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM4hjhhubj)}(hGbit 7 6 5 4 3 2 1 0 0 0 ~sy ~sx 0 1 1 0h]hGbit 7 6 5 4 3 2 1 0 0 0 ~sy ~sx 0 1 1 0}hj{sbah}(h]h ]h"]h$]h&]jjuh1jhhhM6hjhhubh)}(hbyte 4::h]hbyte 4:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM9hjhhubj)}(hGbit 7 6 5 4 3 2 1 0 x7 x6 x5 x4 x3 x2 x1 x0h]hGbit 7 6 5 4 3 2 1 0 x7 x6 x5 x4 x3 x2 x1 x0}hjsbah}(h]h ]h"]h$]h&]jjuh1jhhhM;hjhhubh)}(hbyte 5::h]hbyte 5:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM>hjhhubj)}(hXbit 7 6 5 4 3 2 1 0 y7 y6 y5 y4 y3 y2 y1 y0 x and y are written in two's complement spread over 9 bits with sx/sy the relative top bit and x7..x0 and y7..y0 the lower bits. ~sx is the inverse of sx, ~sy is the inverse of sy. The sign of y is opposite to what the input driver expects for a relative movementh]hXbit 7 6 5 4 3 2 1 0 y7 y6 y5 y4 y3 y2 y1 y0 x and y are written in two's complement spread over 9 bits with sx/sy the relative top bit and x7..x0 and y7..y0 the lower bits. ~sx is the inverse of sx, ~sy is the inverse of sy. The sign of y is opposite to what the input driver expects for a relative movement}hjsbah}(h]h ]h"]h$]h&]jjuh1jhhhM@hjhhubeh}(h]id9ah ]h"]h$]j+ ah&]uh1hhj hhhhhM#jKubeh}(h])native-relative-mode-6-byte-packet-formatah ]h"])native relative mode 6 byte packet formatah$]h&]uh1hhj hhhhhM ubeh}(h]'trackpoint-for-hardware-version-3-and-4ah ]h"])trackpoint (for hardware version 3 and 4)ah$]h&]uh1hhhhhhhhMubeh}(h]elantech-touchpad-driverah ]h"]elantech touchpad driverah$]h&]uh1hhhhhhhhKubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(hN generatorN datestampN source_linkN source_urlN toc_backlinksentryfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerjerror_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourceh _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}refids}nameids}(jjjjjjj4j1jj  registersNjqjnjjj" j )native absolute mode 6 byte packet formatNjjone/three finger touchNtwo finger touchNj j j j status packetNj j j j jjjju nametypes}(jjjj4jjGjqjj" jHjjIjJj j jKj j jjuh}(jhjjjjj1jj j7jjHjnjjjtj jjj$j jjjj@jj jFj j% jx j6 j j~ j j j j j j j j j j# j' jl j j- j j jj j j jj jju footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}jK sRparse_messages](hsystem_message)}(hhh]h)}(h,Duplicate implicit target name: "registers".h]h0Duplicate implicit target name: “registers”.}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhjlubah}(h]h ]h"]h$]h&]jalevelKtypeINFOsourcehlineMhuh1jjhj$hhhhhMhubjk)}(hhh]h)}(h,Duplicate implicit target name: "registers".h]h0Duplicate implicit target name: “registers”.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]jx alevelKtypejsourcehlineMuh1jjhj6 hhhhhMubjk)}(hhh]h)}(hLDuplicate implicit target name: "native absolute mode 6 byte packet format".h]hPDuplicate implicit target name: “native absolute mode 6 byte packet format”.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]j alevelKtypejsourcehlineM$uh1jjhj~ hhhhhM$ubjk)}(hhh]h)}(h9Duplicate implicit target name: "one/three finger touch".h]h=Duplicate implicit target name: “one/three finger touch”.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]j alevelKtypejsourcehlineM;uh1jjhj hhhhhM;ubjk)}(hhh]h)}(h3Duplicate implicit target name: "two finger touch".h]h7Duplicate implicit target name: “two finger touch”.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]j alevelKtypejsourcehlineMguh1jjhj hhhhhMgubjk)}(hhh]h)}(h,Duplicate implicit target name: "registers".h]h0Duplicate implicit target name: “registers”.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]j alevelKtypejsourcehlineMruh1jjhj hhhhhMrubjk)}(hhh]h)}(hLDuplicate implicit target name: "native absolute mode 6 byte packet format".h]hPDuplicate implicit target name: “native absolute mode 6 byte packet format”.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]j alevelKtypejsourcehlineM|uh1jjhj# hhhhhM|ubjk)}(hhh]h)}(h,Duplicate implicit target name: "registers".h]h0Duplicate implicit target name: “registers”.}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*ubah}(h]h ]h"]h$]h&]j alevelKtypejsourcehlineMuh1jjhj hhhhhMubjk)}(hhh]h)}(h0Duplicate implicit target name: "status packet".h]h4Duplicate implicit target name: “status packet”.}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjEubah}(h]h ]h"]h$]h&]jalevelKtypejsourcehlineM#uh1jjhjhhhhhM#ubetransform_messages] transformerN include_log] decorationNhhub.