€•Œsphinx.addnodes”Œdocument”“”)�”}”(Œ rawsource”Œ”Œchildren”]”(Œ translations”Œ LanguagesNode”“”)�”}”(hhh]”(hŒ pending_xref”“”)�”}”(hhh]”Œdocutils.nodes”ŒText”“”ŒChinese (Simplified)”…”�”}”Œparent”hsbaŒ attributes”}”(Œids”]”Œclasses”]”Œnames”]”Œdupnames”]”Œbackrefs”]”Œ refdomain”Œstd”Œreftype”Œdoc”Œ reftarget”Œ*/translations/zh_CN/input/devices/elantech”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)�”}”(hhh]”hŒChinese (Traditional)”…”�”}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ*/translations/zh_TW/input/devices/elantech”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒItalian”…”�”}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ*/translations/it_IT/input/devices/elantech”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒJapanese”…”�”}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ*/translations/ja_JP/input/devices/elantech”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒKorean”…”�”}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ*/translations/ko_KR/input/devices/elantech”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒPortuguese (Brazilian)”…”�”}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ*/translations/pt_BR/input/devices/elantech”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒSpanish”…”�”}”hh–sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ*/translations/sp_SP/input/devices/elantech”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒsection”“”)�”}”(hhh]”(hŒtitle”“”)�”}”(hŒElantech Touchpad Driver”h]”hŒElantech Touchpad Driver”…”�”}”(hh¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhh·h²hh³ŒD/var/lib/git/docbuild/linux/Documentation/input/devices/elantech.rst”h´KubhŒ 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”“”)�”}”(hŒ7Copyright (C) 2007-2008 Arjan Opmeer ”h]”(hŒ&Copyright (C) 2007-2008 Arjan Opmeer <”…”�”}”(hhÓh²hh³Nh´NubhŒ reference”“”)�”}”(hŒarjan@opmeer.net”h]”hŒarjan@opmeer.net”…”�”}”(hhÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”Œmailto:arjan@opmeer.net”uh1hÛhhÓubhŒ>”…”�”}”(hhÓh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÑh³hÊh´KhhÍubhÒ)�”}”(hŒLExtra information for hardware version 1 found and provided by Steve Havelka”h]”hŒLExtra information for hardware version 1 found and provided by Steve Havelka”…”�”}”(hh÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÑh³hÊh´KhhÍubhÒ)�”}”(hŒ•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Œ•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”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÑh³hÊh´K hhÍubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khh·h²hubhŒcomment”“”)�”}”(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”h]”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:space”Œpreserve”uh1jhh·h²hh³hÊh´K-ubh¶)�”}”(hhh]”(h»)�”}”(hŒ Introduction”h]”hŒ Introduction”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj+h²hh³hÊh´K/ubhÒ)�”}”(hX¿Currently 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]”hXÃCurrently 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<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÑh³hÊh´K1hj+h²hubhÒ)�”}”(hŒ€Some Hardware version 3 and version 4 also have a trackpoint which uses a separate packet format. It is also 6 bytes per packet.”h]”hŒ€Some Hardware version 3 and version 4 also have a trackpoint which uses a separate packet format. It is also 6 bytes per packet.”…”�”}”(hjJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÑh³hÊh´K EF013 02.06.00 => EF019”h]”hŒt4 bytes version: (after the arrow is the name given in the Dell-provided driver) 02.00.22 => EF013 02.06.00 => EF019”…”�”}”hjýsbah}”(h]”h ]”h"]”h$]”h&]”j)j*uh1jûh³hÊh´K‘hjÜh²hubhÒ)�”}”(hŒiIn 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]”hŒhIn 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:”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÑh³hÊh´K•hjÜh²hubjü)�”}”(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”h]”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&]”j)j*uh1jûh³hÊh´K˜hjÜh²hubhÒ)�”}”(hŒÖIn 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]”hŒÖIn 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.”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÑh³hÊh´K hjÜh²hubhÒ)�”}”(hŒÛProbably 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]”hŒÛProbably 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.”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÑh³hÊh´K¤hjÜh²hubeh}”(h]”Œ!differentiating-hardware-versions”ah ]”h"]”Œ!differentiating hardware versions”ah$]”h&]”uh1hµhh·h²hh³hÊh´K�ubh¶)�”}”(hhh]”(h»)�”}”(hŒHardware version 1”h]”hŒHardware version 1”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjKh²hh³hÊh´Kªubh¶)�”}”(hhh]”(h»)�”}”(hŒ Registers”h]”hŒ Registers”…”�”}”(hj_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj\h²hh³hÊh´K­ubhÒ)�”}”(hŒHBy echoing a hexadecimal value to a register it contents can be altered.”h]”hŒHBy echoing a hexadecimal value to a register it contents can be altered.”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÑh³hÊh´K¯hj\h²hubhÒ)�”}”(hŒ For example::”h]”hŒ For example:”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÑh³hÊh´K±hj\h²hubjü)�”}”(hŒecho -n 0x16 > reg_10”h]”hŒecho -n 0x16 > reg_10”…”�”}”hj‰sbah}”(h]”h ]”h"]”h$]”h&]”j)j*uh1jûh³hÊh´K³hj\h²hubjÆ)�”}”(hhh]”(jË)�”}”(hXµreg_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Ò)�”}”(hŒreg_10::”h]”hŒreg_10:”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÑh³hÊh´Kµhjšubjü)�”}”(hX 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]”hX 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”…”�”}”hj¬sbah}”(h]”h ]”h"]”h$]”h&]”j)j*uh1jûh³hÊh´K·hjšubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÊhj—h²hh³hÊh´NubjË)�”}”(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Ò)�”}”(hŒreg_11::”h]”hŒreg_11:”…”�”}”(hjÄh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÑh³hÊh´KÃhjÀubjü)�”}”(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”h]”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”…”�”}”hjÒsbah}”(h]”h ]”h"]”h$]”h&]”j)j*uh1jûh³hÊh´KÅhjÀubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÊhj—h²hh³hÊh´NubjË)�”}”(hŒ®_20:: single finger width? ”h]”(hÒ)�”}”(hŒreg_20::”h]”hŒreg_20:”…”�”}”(hjêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÑh³hÊh´KÍhjæubjü)�”}”(hŒsingle finger width?”h]”hŒsingle finger width?”…”�”}”hjøsbah}”(h]”h ]”h"]”h$]”h&]”j)j*uh1jûh³hÊh´KÏhjæubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÊhj—h²hh³hÊh´NubjË)�”}”(hŒ@reg_21:: scroll area width (small: 0x40 ... wide: 0xff) ”h]”(hÒ)�”}”(hŒreg_21::”h]”hŒreg_21:”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÑh³hÊh´KÑhj ubjü)�”}”(hŒ.scroll area width (small: 0x40 ... wide: 0xff)”h]”hŒ.scroll area width (small: 0x40 ... wide: 0xff)”…”�”}”hjsbah}”(h]”h ]”h"]”h$]”h&]”j)j*uh1jûh³hÊh´KÓhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÊhj—h²hh³hÊh´NubjË)�”}”(hŒyreg_22:: drag lock time out (short: 0x14 ... long: 0xfe; 0xff = tap again to release) ”h]”(hÒ)�”}”(hŒreg_22::”h]”hŒreg_22:”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÑh³hÊh´KÕhj2ubjü)�”}”(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)”…”�”}”hjDsbah}”(h]”h ]”h"]”h$]”h&]”j)j*uh1jûh³hÊh´K×hj2ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÊhj—h²hh³hÊh´NubjË)�”}”(hŒ#reg_23:: tap make timeout? ”h]”(hÒ)�”}”(hŒreg_23::”h]”hŒreg_23:”…”�”}”(hj\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÑh³hÊh´KÚhjXubjü)�”}”(hŒtap make timeout?”h]”hŒtap make timeout?”…”�”}”hjjsbah}”(h]”h ]”h"]”h$]”h&]”j)j*uh1jûh³hÊh´KÜhjXubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÊhj—h²hh³hÊh´NubjË)�”}”(hŒ®_24:: tap release timeout? ”h]”(hÒ)�”}”(hŒreg_24::”h]”hŒreg_24:”…”�”}”(hj‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÑh³hÊh´KÞhj~ubjü)�”}”(hŒtap release timeout?”h]”hŒtap release timeout?”…”�”}”hj�sbah}”(h]”h ]”h"]”h$]”h&]”j)j*uh1jûh³hÊh´Kàhj~ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÊhj—h²hh³hÊh´NubjË)�”}”(hŒSreg_25:: smart edge cursor speed (0x02 = slow, 0x03 = medium, 0x04 = fast) ”h]”(hÒ)�”}”(hŒreg_25::”h]”hŒreg_25:”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÑh³hÊh´Kâhj¤ubjü)�”}”(hŒAsmart edge cursor speed (0x02 = slow, 0x03 = medium, 0x04 = fast)”h]”hŒAsmart edge cursor speed (0x02 = slow, 0x03 = medium, 0x04 = fast)”…”�”}”hj¶sbah}”(h]”h ]”h"]”h$]”h&]”j)j*uh1jûh³hÊh´Kähj¤ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÊhj—h²hh³hÊh´NubjË)�”}”(hŒ4reg_26:: smart edge activation area width? ”h]”(hÒ)�”}”(hŒreg_26::”h]”hŒreg_26:”…”�”}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÑh³hÊh´KæhjÊubjü)�”}”(hŒ!smart edge activation area width?”h]”hŒ!smart edge activation area width?”…”�”}”hjÜsbah}”(h]”h ]”h"]”h$]”h&]”j)j*uh1jûh³hÊh´KèhjÊubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÊhj—h²hh³hÊh´Nubeh}”(h]”h ]”h"]”h$]”h&]”jÒjÓuh1jÅh³hÊh´Kµhj\h²hubeh}”(h]”Œ registers”ah ]”h"]”h$]”Œ registers”ah&]”uh1hµhjKh²hh³hÊh´K­Œ referenced”Kubh¶)�”}”(hhh]”(h»)�”}”(hŒ)Native relative mode 4 byte packet format”h]”hŒ)Native relative mode 4 byte packet format”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjÿh²hh³hÊh´KìubhÒ)�”}”(hŒbyte 0::”h]”hŒbyte 0:”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÑh³hÊh´Kîhjÿh²hubjü)�”}”(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”h]”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”…”�”}”hjsbah}”(h]”h ]”h"]”h$]”h&]”j)j*uh1jûh³hÊh´Kðhjÿh²hubhÒ)�”}”(hŒbyte 1::”h]”hŒbyte 1:”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÑh³hÊh´Kùhjÿh²hubjü)�”}”(hŒ·bit 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”h]”hŒ·bit 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&]”j)j*uh1jûh³hÊh´Kûhjÿh²hubhÒ)�”}”(hŒbyte 2::”h]”hŒbyte 2:”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÑh³hÊh´Mhjÿh²hubjü)�”}”(hŒŠbit 7 6 5 4 3 2 1 0 dy7 dy6 dy5 dy4 dy3 dy2 dy1 dy0 dy7..dy0 = y movement; positive = up, negative = down”h]”hŒŠbit 7 6 5 4 3 2 1 0 dy7 dy6 dy5 dy4 dy3 dy2 dy1 dy0 dy7..dy0 = y movement; positive = up, negative = down”…”�”}”hjVsbah}”(h]”h ]”h"]”h$]”h&]”j)j*uh1jûh³hÊh´Mhjÿh²hubhÒ)�”}”(hŒbyte 3::”h]”hŒbyte 3:”…”�”}”(hjdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÑh³hÊh´Mhjÿh²hubjü)�”}”(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”h]”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”…”�”}”hjrsbah}”(h]”h ]”h"]”h$]”h&]”j)j*uh1jûh³hÊh´M hjÿh²hubeh}”(h]”Œ)native-relative-mode-4-byte-packet-format”ah ]”h"]”Œ)native relative mode 4 byte packet format”ah$]”h&]”uh1hµhjKh²hh³hÊh´Kìubh¶)�”}”(hhh]”(h»)�”}”(hŒ)Native absolute mode 4 byte packet format”h]”hŒ)Native absolute mode 4 byte packet format”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjˆh²hh³hÊh´M*ubhÒ)�”}”(hŒãEF013 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]”hŒãEF013 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.”…”�”}”(hj™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÑh³hÊh´M,hjˆh²hubhÒ)�”}”(hŒbyte 0::”h]”hŒbyte 0:”…”�”}”(hj§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÑh³hÊh´M0hjˆh²hubjü)�”}”(hXøfirmware 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”h]”hXøfirmware 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”…”�”}”hjµsbah}”(h]”h ]”h"]”h$]”h&]”j)j*uh1jûh³hÊh´M2hjˆh²hubhÒ)�”}”(hŒbyte 1::”h]”hŒbyte 1:”…”�”}”(hjÃh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÑh³hÊh´MDhjˆh²hubjü)�”}”(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”h]”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”…”�”}”hjÑsbah}”(h]”h ]”h"]”h$]”h&]”j)j*uh1jûh³hÊh´MFhjˆh²hubhÒ)�”}”(hŒbyte 2::”h]”hŒbyte 2:”…”�”}”(hjßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÑh³hÊh´MThjˆh²hubjü)�”}”(hŒubit 7 6 5 4 3 2 1 0 x7 x6 x5 x4 x3 x2 x1 x0 x9..x0 = absolute x value (horizontal)”h]”hŒubit 7 6 5 4 3 2 1 0 x7 x6 x5 x4 x3 x2 x1 x0 x9..x0 = absolute x value (horizontal)”…”�”}”hjísbah}”(h]”h ]”h"]”h$]”h&]”j)j*uh1jûh³hÊh´MVhjˆh²hubhÒ)�”}”(hŒbyte 3::”h]”hŒbyte 3:”…”�”}”(hjûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÑh³hÊh´M[hjˆh²hubjü)�”}”(hŒsbit 7 6 5 4 3 2 1 0 y7 y6 y5 y4 y3 y2 y1 y0 y9..y0 = absolute y value (vertical)”h]”hŒsbit 7 6 5 4 3 2 1 0 y7 y6 y5 y4 y3 y2 y1 y0 y9..y0 = absolute y value (vertical)”…”�”}”hj sbah}”(h]”h ]”h"]”h$]”h&]”j)j*uh1jûh³hÊh´M]hjˆh²hubeh}”(h]”Œ)native-absolute-mode-4-byte-packet-format”ah ]”h"]”Œ)native absolute mode 4 byte packet format”ah$]”h&]”uh1hµhjKh²hh³hÊh´M*ubeh}”(h]”Œhardware-version-1”ah ]”h"]”Œhardware version 1”ah$]”h&]”uh1hµhh·h²hh³hÊh´Kªubh¶)�”}”(hhh]”(h»)�”}”(hŒHardware version 2”h]”hŒHardware version 2”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj'h²hh³hÊh´Mdubh¶)�”}”(hhh]”(h»)�”}”(hŒ Registers”h]”hŒ Registers”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj8h²hh³hÊh´MhubhÒ)�”}”(hŒHBy echoing a hexadecimal value to a register it contents can be altered.”h]”hŒHBy echoing a hexadecimal value to a register it contents can be altered.”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÑh³hÊh´Mjhj8h²hubhÒ)�”}”(hŒ For example::”h]”hŒ For example:”…”�”}”(hjWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÑh³hÊh´Mlhj8h²hubjü)�”}”(hŒecho -n 0x56 > reg_10”h]”hŒecho -n 0x56 > reg_10”…”�”}”hjesbah}”(h]”h ]”h"]”h$]”h&]”j)j*uh1jûh³hÊh´Mnhj8h²hubjÆ)�”}”(hhh]”(jË)�”}”(hŒxreg_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Ò)�”}”(hŒreg_10::”h]”hŒreg_10:”…”�”}”(hjzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÑh³hÊh´Mphjvubjü)�”}”(hŒjbit 7 6 5 4 3 2 1 0 0 1 0 1 0 1 D 0 D: 1 = enable drag and drop”h]”hŒjbit 7 6 5 4 3 2 1 0 0 1 0 1 0 1 D 0 D: 1 = enable drag and drop”…”�”}”hjˆsbah}”(h]”h ]”h"]”h$]”h&]”j)j*uh1jûh³hÊh´Mrhjvubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÊhjsh²hh³hÊh´NubjË)�”}”(hŒzreg_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Ò)�”}”(hŒreg_11::”h]”hŒreg_11:”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÑh³hÊh´Mwhjœubjü)�”}”(hŒlbit 7 6 5 4 3 2 1 0 1 0 0 0 S 0 1 0 S: 1 = enable vertical scroll”h]”hŒlbit 7 6 5 4 3 2 1 0 1 0 0 0 S 0 1 0 S: 1 = enable vertical scroll”…”�”}”hj®sbah}”(h]”h ]”h"]”h$]”h&]”j)j*uh1jûh³hÊh´Myhjœubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÊhjsh²hh³hÊh´NubjË)�”}”(hŒ reg_21:: unknown (0x00) ”h]”(hÒ)�”}”(hŒreg_21::”h]”hŒreg_21:”…”�”}”(hjÆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÑh³hÊh´M~hjÂubjü)�”}”(hŒunknown (0x00)”h]”hŒunknown (0x00)”…”�”}”hjÔsbah}”(h]”h ]”h"]”h$]”h&]”j)j*uh1jûh³hÊh´M€hjÂubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÊhjsh²hh³hÊh´NubjË)�”}”(hŒ–reg_22:: drag and drop release time out (short: 0x70 ... long 0x7e; 0x7f = never i.e. tap again to release) ”h]”(hÒ)�”}”(hŒreg_22::”h]”hŒreg_22:”…”�”}”(hjìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÑh³hÊh´M‚hjèubjü)�”}”(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)”…”�”}”hjúsbah}”(h]”h ]”h"]”h$]”h&]”j)j*uh1jûh³hÊh´M„hjèubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÊhjsh²hh³hÊh´Nubeh}”(h]”h ]”h"]”h$]”h&]”jÒjÓuh1jÅh³hÊh´Mphj8h²hubeh}”(h]”Œid1”ah ]”h"]”h$]”jüah&]”uh1hµhj'h²hh³hÊh´MhjþKubh¶)�”}”(hhh]”(h»)�”}”(hŒ)Native absolute mode 6 byte packet format”h]”hŒ)Native absolute mode 6 byte packet format”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjh²hh³hÊh´M‰ubh¶)�”}”(hhh]”(h»)�”}”(hŒ-Parity checking and packet re-synchronization”h]”hŒ-Parity checking and packet re-synchronization”…”�”}”(hj/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj,h²hh³hÊh´MŒubhÒ)�”}”(hŒNThere is no parity checking, however some consistency checks can be performed.”h]”hŒNThere is no parity checking, however some consistency checks can be performed.”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÑh³hÊh´MŽhj,h²hubhÒ)�”}”(hŒFor instance for EF113::”h]”hŒFor instance for EF113:”…”�”}”(hjKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÑh³hÊh´M�hj,h²hubjü)�”}”(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”h]”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”…”�”}”hjYsbah}”(h]”h ]”h"]”h$]”h&]”j)j*uh1jûh³hÊh´M’hj,h²hubhÒ)�”}”(hŒjA h²hh³hÊh´M¸ubhÒ)�”}”(hŒbyte 0::”h]”hŒbyte 0:”…”�”}”(hjR h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÑh³hÊh´MºhjA h²hubjü)�”}”(hŒ´bit 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]”hŒ´bit 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)”…”�”}”hj` sbah}”(h]”h ]”h"]”h$]”h&]”j)j*uh1jûh³hÊh´M¼hjA h²hubhÒ)�”}”(hŒbyte 1::”h]”hŒbyte 1:”…”�”}”(hjn h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÑh³hÊh´MÂhjA h²hubjü)�”}”(hŒGbit 7 6 5 4 3 2 1 0 p7 p6 p5 p4 x11 x10 x9 x8”h]”hŒGbit 7 6 5 4 3 2 1 0 p7 p6 p5 p4 x11 x10 x9 x8”…”�”}”hj| sbah}”(h]”h ]”h"]”h$]”h&]”j)j*uh1jûh³hÊh´MÄhjA h²hubhÒ)�”}”(hŒbyte 2::”h]”hŒbyte 2:”…”�”}”(hjŠ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÑh³hÊh´MÇhjA h²hubjü)�”}”(hŒubit 7 6 5 4 3 2 1 0 x7 x6 x5 x4 x3 x2 x1 x0 x11..x0 = absolute x value (horizontal)”h]”hŒubit 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&]”j)j*uh1jûh³hÊh´MÉhjA h²hubhÒ)�”}”(hŒbyte 3::”h]”hŒbyte 3:”…”�”}”(hj¦ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÑh³hÊh´MÎhjA h²hubjü)�”}”(hŒabit 7 6 5 4 3 2 1 0 id2 id1 id0 1 0 0 0 1 id2..id0 = finger id”h]”hŒabit 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&]”j)j*uh1jûh³hÊh´MÐhjA h²hubhÒ)�”}”(hŒbyte 4::”h]”hŒbyte 4:”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÑh³hÊh´MÕhjA h²hubjü)�”}”(hŒ_bit 7 6 5 4 3 2 1 0 p3 p1 p2 p0 y11 y10 y9 y8 p7..p0 = pressure”h]”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&]”j)j*uh1jûh³hÊh´M×hjA h²hubhÒ)�”}”(hŒbyte 5::”h]”hŒbyte 5:”…”�”}”(hjÞ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÑh³hÊh´MÜhjA h²hubjü)�”}”(hŒsbit 7 6 5 4 3 2 1 0 y7 y6 y5 y4 y3 y2 y1 y0 y11..y0 = absolute y value (vertical)”h]”hŒsbit 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&]”j)j*uh1jûh³hÊh´MÞhjA h²hubeh}”(h]”Œ head-packet”ah ]”h"]”Œ head packet”ah$]”h&]”uh1hµhj7 h²hh³hÊh´M¸ubh¶)�”}”(hhh]”(h»)�”}”(hŒ Motion packet”h]”hŒ Motion packet”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj h²hh³hÊh´MäubhÒ)�”}”(hŒbyte 0::”h]”hŒbyte 0:”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÑh³hÊh´Mæhj h²hubjü)�”}”(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&]”j)j*uh1jûh³hÊh´Mèhj h²hubhÒ)�”}”(hŒbyte 1::”h]”hŒbyte 1:”…”�”}”(hj/ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÑh³hÊh´Mðhj h²hubjü)�”}”(hŒqbit 7 6 5 4 3 2 1 0 x7 x6 x5 x4 x3 x2 x1 x0 x7..x0 = delta x (two's complement)”h]”hŒqbit 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&]”j)j*uh1jûh³hÊh´Mòhj h²hubhÒ)�”}”(hŒbyte 2::”h]”hŒbyte 2:”…”�”}”(hjK h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÑh³hÊh´M÷hj h²hubjü)�”}”(hŒqbit 7 6 5 4 3 2 1 0 y7 y6 y5 y4 y3 y2 y1 y0 y7..y0 = delta y (two's complement)”h]”hŒqbit 7 6 5 4 3 2 1 0 y7 y6 y5 y4 y3 y2 y1 y0 y7..y0 = delta y (two's complement)”…”�”}”hjY sbah}”(h]”h ]”h"]”h$]”h&]”j)j*uh1jûh³hÊh´Mùhj h²hubhÒ)�”}”(hŒbyte 3::”h]”hŒbyte 3:”…”�”}”(hjg h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÑh³hÊh´Mþhj h²hubjü)�”}”(hŒabit 7 6 5 4 3 2 1 0 id2 id1 id0 1 0 0 1 0 id2..id0 = finger id”h]”hŒabit 7 6 5 4 3 2 1 0 id2 id1 id0 1 0 0 1 0 id2..id0 = finger id”…”�”}”hju sbah}”(h]”h ]”h"]”h$]”h&]”j)j*uh1jûh³hÊh´Mhj h²hubhÒ)�”}”(hŒbyte 4::”h]”hŒbyte 4:”…”�”}”(hjƒ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÑh³hÊh´Mhj h²hubjü)�”}”(hŒqbit 7 6 5 4 3 2 1 0 x7 x6 x5 x4 x3 x2 x1 x0 x7..x0 = delta x (two's complement)”h]”hŒqbit 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&]”j)j*uh1jûh³hÊh´Mhj h²hubhÒ)�”}”(hŒbyte 5::”h]”hŒbyte 5:”…”�”}”(hjŸ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÑh³hÊh´M hj h²hubjü)�”}”(hŒ­bit 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”h]”hŒ­bit 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&]”j)j*uh1jûh³hÊh´Mhj h²hubeh}”(h]”Œ motion-packet”ah ]”h"]”Œ motion packet”ah$]”h&]”uh1hµhj7 h²hh³hÊh´Mäubeh}”(h]”Œid7”ah ]”h"]”h$]”Œ)native absolute mode 6 byte packet format”ah&]”uh1hµhjÞ h²hh³hÊh´M|jþKubeh}”(h]”Œhardware-version-4”ah ]”h"]”Œhardware version 4”ah$]”h&]”uh1hµhh·h²hh³hÊh´Moubh¶)�”}”(hhh]”(h»)�”}”(hŒ)Trackpoint (for Hardware version 3 and 4)”h]”hŒ)Trackpoint (for Hardware version 3 and 4)”…”�”}”(hjÖ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjÓ h²hh³hÊh´Mubh¶)�”}”(hhh]”(h»)�”}”(hŒ Registers”h]”hŒ Registers”…”�”}”(hjç h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjä h²hh³hÊh´MubhÒ)�”}”(hŒ*No special registers have been identified.”h]”hŒ*No special registers have been identified.”…”�”}”(hjõ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÑh³hÊh´Mhjä h²hubeh}”(h]”Œid8”ah ]”h"]”h$]”Œ registers”ah&]”uh1hµhjÓ h²hh³hÊh´MjþKubh¶)�”}”(hhh]”(h»)�”}”(hŒ)Native relative mode 6 byte packet format”h]”hŒ)Native relative mode 6 byte packet format”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj h²hh³hÊh´M ubh¶)�”}”(hhh]”(h»)�”}”(hŒ Status Packet”h]”hŒ Status Packet”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjh²hh³hÊh´M#ubhÒ)�”}”(hŒbyte 0::”h]”hŒbyte 0:”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÑh³hÊh´M%hjh²hubjü)�”}”(hŒGbit 7 6 5 4 3 2 1 0 0 0 sx sy 0 M R L”h]”hŒGbit 7 6 5 4 3 2 1 0 0 0 sx sy 0 M R L”…”�”}”hj;sbah}”(h]”h ]”h"]”h$]”h&]”j)j*uh1jûh³hÊh´M'hjh²hubhÒ)�”}”(hŒbyte 1::”h]”hŒbyte 1:”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÑh³hÊh´M*hjh²hubjü)�”}”(hŒGbit 7 6 5 4 3 2 1 0 ~sx 0 0 0 0 0 0 0”h]”hŒGbit 7 6 5 4 3 2 1 0 ~sx 0 0 0 0 0 0 0”…”�”}”hjWsbah}”(h]”h ]”h"]”h$]”h&]”j)j*uh1jûh³hÊh´M,hjh²hubhÒ)�”}”(hŒbyte 2::”h]”hŒbyte 2:”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÑh³hÊh´M/hjh²hubjü)�”}”(hŒGbit 7 6 5 4 3 2 1 0 ~sy 0 0 0 0 0 0 0”h]”hŒGbit 7 6 5 4 3 2 1 0 ~sy 0 0 0 0 0 0 0”…”�”}”hjssbah}”(h]”h ]”h"]”h$]”h&]”j)j*uh1jûh³hÊh´M1hjh²hubhÒ)�”}”(hŒbyte 3::”h]”hŒbyte 3:”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÑh³hÊh´M4hjh²hubjü)�”}”(hŒGbit 7 6 5 4 3 2 1 0 0 0 ~sy ~sx 0 1 1 0”h]”hŒGbit 7 6 5 4 3 2 1 0 0 0 ~sy ~sx 0 1 1 0”…”�”}”hj�sbah}”(h]”h ]”h"]”h$]”h&]”j)j*uh1jûh³hÊh´M6hjh²hubhÒ)�”}”(hŒbyte 4::”h]”hŒbyte 4:”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÑh³hÊh´M9hjh²hubjü)�”}”(hŒGbit 7 6 5 4 3 2 1 0 x7 x6 x5 x4 x3 x2 x1 x0”h]”hŒGbit 7 6 5 4 3 2 1 0 x7 x6 x5 x4 x3 x2 x1 x0”…”�”}”hj«sbah}”(h]”h ]”h"]”h$]”h&]”j)j*uh1jûh³hÊh´M;hjh²hubhÒ)�”}”(hŒbyte 5::”h]”hŒbyte 5:”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÑh³hÊh´M>hjh²hubjü)�”}”(hX�bit 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”h]”hX�bit 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”…”�”}”hjÇsbah}”(h]”h ]”h"]”h$]”h&]”j)j*uh1jûh³hÊh´M@hjh²hubeh}”(h]”Œid9”ah ]”h"]”h$]”j? ah&]”uh1hµhj h²hh³hÊh´M#jþKubeh}”(h]”Œ)native-relative-mode-6-byte-packet-format”ah ]”h"]”Œ)native relative mode 6 byte packet format”ah$]”h&]”uh1hµhjÓ h²hh³hÊh´M ubeh}”(h]”Œ'trackpoint-for-hardware-version-3-and-4”ah ]”h"]”Œ)trackpoint (for hardware version 3 and 4)”ah$]”h&]”uh1hµhh·h²hh³hÊh´Mubeh}”(h]”Œelantech-touchpad-driver”ah ]”h"]”Œelantech touchpad driver”ah$]”h&]”uh1hµhhh²hh³hÊh´Kubeh}”(h]”h ]”h"]”h$]”h&]”Œsource”hÊuh1hŒcurrent_source”NŒ current_line”NŒsettings”Œdocutils.frontend”ŒValues”“”)�”}”(hºNŒ generator”NŒ datestamp”NŒ source_link”NŒ source_url”NŒ toc_backlinks”Œentry”Œfootnote_backlinks”KŒ sectnum_xform”KŒstrip_comments”NŒstrip_elements_with_classes”NŒ strip_classes”NŒ report_level”KŒ halt_level”KŒexit_status_level”KŒdebug”NŒwarning_stream”NŒ traceback”ˆŒinput_encoding”Œ utf-8-sig”Œinput_encoding_error_handler”Œstrict”Œoutput_encoding”Œutf-8”Œoutput_encoding_error_handler”jŒerror_encoding”Œutf-8”Œerror_encoding_error_handler”Œbackslashreplace”Œ language_code”Œen”Œrecord_dependencies”NŒconfig”NŒ id_prefix”hŒauto_id_prefix”Œid”Œ dump_settings”NŒdump_internals”NŒdump_transforms”NŒdump_pseudo_xml”NŒexpose_internals”NŒstrict_visitor”NŒ_disable_config”NŒ_source”hÊŒ _destination”NŒ _config_files”]”Œ7/var/lib/git/docbuild/linux/Documentation/docutils.conf”aŒfile_insertion_enabled”ˆŒ raw_enabled”KŒline_length_limit”M'Œpep_references”NŒ pep_base_url”Œhttps://peps.python.org/”Œpep_file_url_template”Œpep-%04d”Œrfc_references”NŒ rfc_base_url”Œ&https://datatracker.ietf.org/doc/html/”Œ tab_width”KŒtrim_footnote_reference_space”‰Œsyntax_highlight”Œlong”Œ smart_quotes”ˆŒsmartquotes_locales”]”Œcharacter_level_inline_markup”‰Œdoctitle_xform”‰Œ docinfo_xform”KŒsectsubtitle_xform”‰Œ image_loading”Œlink”Œembed_stylesheet”‰Œcloak_email_addresses”ˆŒsection_self_link”‰Œenv”NubŒreporter”NŒindirect_targets”]”Œsubstitution_defs”}”Œsubstitution_names”}”Œrefnames”}”Œrefids”}”Œnameids”}”(jñjîj£j jÙjÖjHjEj$j!Œ registers”Nj…j‚jjj6 j3 Œ)native absolute mode 6 byte packet format”Nj–j“Œone/three finger touch”NŒtwo finger touch”NjÛ jØ jÐ jÍ Œ status packet”Njÿ jü jÀ j½ jéjæjájÞuŒ nametypes”}”(jñ‰j£‰jÙ‰jH‰j$‰j[‰j…‰j‰j6 ‰j\‰j–‰j]‰j^‰jÛ ‰jÐ ‰j_‰jÿ ‰jÀ ‰jé‰já‰uh}”(jîh·j j+jÖj¦jEjÜj!jKjøj\j‚jÿjjˆj3 j'jj8j+ jj“j,jTj™j# jZjØ j9 jŒ jJ jÑ j’ j¤ jé jÊ j© jÍ jÞ j1 jï jÅ j7 j; j€ jü jA j½ j jæjÓ jjä jÞj j×juŒ footnote_refs”}”Œ citation_refs”}”Œ autofootnotes”]”Œautofootnote_refs”]”Œsymbol_footnotes”]”Œsymbol_footnote_refs”]”Œ footnotes”]”Œ citations”]”Œautofootnote_start”KŒsymbol_footnote_start”KŒ id_counter”Œ collections”ŒCounter”“”}”j%K s…”R”Œparse_messages”]”(hŒsystem_message”“”)�”}”(hhh]”hÒ)�”}”(hŒ,Duplicate implicit target name: "registers".”h]”hŒ0Duplicate implicit target name: “registersâ€�.”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÑhj€ubah}”(h]”h ]”h"]”h$]”h&]”jaŒlevel”KŒtype”ŒINFO”Œsource”hÊŒline”Mhuh1j~hj8h²hh³hÊh´Mhubj)�”}”(hhh]”hÒ)�”}”(hŒ,Duplicate implicit target name: "registers".”h]”hŒ0Duplicate implicit target name: “registersâ€�.”…”�”}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÑhjœubah}”(h]”h ]”h"]”h$]”h&]”jŒ aŒlevel”KŒtype”j™Œsource”hÊŒline”Muh1j~hjJ h²hh³hÊh´Mubj)�”}”(hhh]”hÒ)�”}”(hŒLDuplicate implicit target name: "native absolute mode 6 byte packet format".”h]”hŒPDuplicate implicit target name: “native absolute mode 6 byte packet formatâ€�.”…”�”}”(hjºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÑhj·ubah}”(h]”h ]”h"]”h$]”h&]”jÑ aŒlevel”KŒtype”j™Œsource”hÊŒline”M$uh1j~hj’ h²hh³hÊh´M$ubj)�”}”(hhh]”hÒ)�”}”(hŒ9Duplicate implicit target name: "one/three finger touch".”h]”hŒ=Duplicate implicit target name: “one/three finger touchâ€�.”…”�”}”(hjÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÑhjÒubah}”(h]”h ]”h"]”h$]”h&]”j¤ aŒlevel”KŒtype”j™Œsource”hÊŒline”M;uh1j~hjé h²hh³hÊh´M;ubj)�”}”(hhh]”hÒ)�”}”(hŒ3Duplicate implicit target name: "two finger touch".”h]”hŒ7Duplicate implicit target name: “two finger touchâ€�.”…”�”}”(hjðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÑhjíubah}”(h]”h ]”h"]”h$]”h&]”jÊ aŒlevel”KŒtype”j™Œsource”hÊŒline”Mguh1j~hj© h²hh³hÊh´Mgubj)�”}”(hhh]”hÒ)�”}”(hŒ,Duplicate implicit target name: "registers".”h]”hŒ0Duplicate implicit target name: “registersâ€�.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÑhjubah}”(h]”h ]”h"]”h$]”h&]”j1 aŒlevel”KŒtype”j™Œsource”hÊŒline”Mruh1j~hjï h²hh³hÊh´Mrubj)�”}”(hhh]”hÒ)�”}”(hŒLDuplicate implicit target name: "native absolute mode 6 byte packet format".”h]”hŒPDuplicate implicit target name: “native absolute mode 6 byte packet formatâ€�.”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÑhj#ubah}”(h]”h ]”h"]”h$]”h&]”jÅ aŒlevel”KŒtype”j™Œsource”hÊŒline”M|uh1j~hj7 h²hh³hÊh´M|ubj)�”}”(hhh]”hÒ)�”}”(hŒ,Duplicate implicit target name: "registers".”h]”hŒ0Duplicate implicit target name: “registersâ€�.”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÑhj>ubah}”(h]”h ]”h"]”h$]”h&]”jaŒlevel”KŒtype”j™Œsource”hÊŒline”Muh1j~hjä h²hh³hÊh´Mubj)�”}”(hhh]”hÒ)�”}”(hŒ0Duplicate implicit target name: "status packet".”h]”hŒ4Duplicate implicit target name: “status packetâ€�.”…”�”}”(hj\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÑhjYubah}”(h]”h ]”h"]”h$]”h&]”j×aŒlevel”KŒtype”j™Œsource”hÊŒline”M#uh1j~hjh²hh³hÊh´M#ubeŒtransform_messages”]”Œ transformer”NŒ include_log”]”Œ decoration”Nh²hub.