Lines Matching +full:1 +full:- +full:of +full:- +full:4
4 Copyright (C) 2007-2008 Arjan Opmeer <arjan@opmeer.net>
6 Extra information for hardware version 1 found and
15 1. Introduction
18 4. Hardware version 1
20 4.2 Native relative mode 4 byte packet format
21 4.3 Native absolute mode 4 byte packet format
25 5.2.1 Parity checking and packet re-synchronization
31 6.2.1 One/Three finger touch
33 7. Hardware version 4
36 7.2.1 Status packet
39 8. Trackpoint (for Hardware version 3 and 4)
42 8.2.1 Status Packet
49 Currently the Linux Elantech touchpad driver is aware of four different
50 hardware versions unimaginatively called version 1,version 2, version 3
51 and version 4. Version 1 is found in "older" laptops and uses 4 bytes per
53 per packet, and provides additional features such as position of two fingers,
54 and width of the touch. Hardware version 3 uses 6 bytes per packet (and
55 for 2 fingers the concatenation of two 6 bytes packets) and allows tracking
56 of up to 3 fingers. Hardware version 4 uses 6 bytes per packet, and can
58 4 allows tracking up to 5 fingers.
60 Some Hardware version 3 and version 4 also have a trackpoint which uses a
71 Additionally the operation of the touchpad can be altered by adjusting the
72 contents of some of its internal registers. These registers are represented
76 Currently only the registers for hardware version 1 are somewhat understood.
77 Hardware version 2 seems to use some of the same registers but it is not
81 On top of that, some register settings have effect only when the touchpad is
97 Turn different levels of debugging ON or OFF.
101 Currently a value of "1" will turn on some basic debugging and a value of
102 "2" will turn on packet debugging. For hardware version 1 the default is
103 OFF. For version 2 the default is "1".
107 generate quite a lot of data!
114 non-zero value will turn it ON. For hardware version 1 the default is ON.
117 Hardware version 1 provides basic data integrity verification by
118 calculating a parity bit for the last 3 bytes of each packet. The driver
128 Sets crc_enabled to 0/1. The name "crc_enabled" is the official name of
132 Depending on the state of crc_enabled, certain basic data integrity
133 verification is done by the driver on hardware version 3 and 4. The
135 The state of crc_enabled can be altered with this knob.
138 "0" or "1" to this file will set the state to "0" or "1".
143 To detect the hardware version, read the version number as param[0].param[1].param[2]::
145 4 bytes version: (after the arrow is the name given in the Dell-provided driver)
165 4 bytes/firmware 1. The versions < 02.08.00, with the exception of 02.00.30, as
166 4 bytes/firmware 2. Everything >= 02.08.00 can be considered as 6 bytes.
169 Hardware version 1
173 ---------
179 echo -n 0x16 > reg_10
183 bit 7 6 5 4 3 2 1 0
186 E: 1 = enable smart edges unconditionally
187 S: 1 = enable smart edges only when dragging
188 A: 1 = absolute mode (needs 4 byte packets, see reg_11)
189 L: 1 = enable drag lock (see reg_22)
190 D: 1 = disable dynamic resolution
191 T: 1 = disable tapping
192 C: 1 = enable corner tap
193 B: 1 = swap left and right button
197 bit 7 6 5 4 3 2 1 0
198 1 0 0 H V 1 F P
200 P: 1 = enable parity checking for relative mode
201 F: 1 = enable native 4 byte packet mode
202 V: 1 = enable vertical scroll area
203 H: 1 = enable horizontal scroll area
235 Native relative mode 4 byte packet format
236 -----------------------------------------
240 bit 7 6 5 4 3 2 1 0
241 c c p2 p1 1 M R L
243 L, R, M = 1 when Left, Right, Middle mouse button pressed
245 when parity checking is enabled (reg_11, P = 1):
246 p1..p2 = byte 1 and 2 odd parity bit
247 c = 1 when corner tap detected
249 byte 1::
251 bit 7 6 5 4 3 2 1 0
255 byte 1 = 0xf0 when corner tap detected
259 bit 7 6 5 4 3 2 1 0
266 parity checking enabled (reg_11, P = 1):
268 bit 7 6 5 4 3 2 1 0
276 ds0 = 1 when top right corner tapped
277 ds1 = 1 when bottom right corner tapped
278 ds2 = 1 when bottom left corner tapped
279 ds3 = 1 when top left corner tapped
280 n1..n0 = number of fingers on touchpad
282 firmware 1.x seem to map one, two and three finger taps
284 h = 1 when horizontal scroll action
285 w = 1 when wide finger touch?
289 bit 7 6 5 4 3 2 1 0
297 Native absolute mode 4 byte packet format
298 -----------------------------------------
301 when 1 finger is touching, the first 2 position reports must be discarded.
302 This counting is reset whenever a different number of fingers is reported.
306 firmware version 1.x:
308 bit 7 6 5 4 3 2 1 0
309 D U p1 p2 1 p3 R L
311 L, R = 1 when Left, Right mouse button pressed
312 p1..p3 = byte 1..3 odd parity bit
313 D, U = 1 when rocker switch pressed Up, Down
317 bit 7 6 5 4 3 2 1 0
318 n1 n0 p2 p1 1 p3 R L
320 L, R = 1 when Left, Right mouse button pressed
321 p1..p3 = byte 1..3 odd parity bit
322 n1..n0 = number of fingers on touchpad
324 byte 1::
326 firmware version 1.x:
328 bit 7 6 5 4 3 2 1 0
331 tw = 1 when two finger touch
332 th = 1 when three finger touch
333 f = 1 when finger touch
337 bit 7 6 5 4 3 2 1 0
342 bit 7 6 5 4 3 2 1 0
349 bit 7 6 5 4 3 2 1 0
360 ---------
366 echo -n 0x56 > reg_10
370 bit 7 6 5 4 3 2 1 0
371 0 1 0 1 0 1 D 0
373 D: 1 = enable drag and drop
377 bit 7 6 5 4 3 2 1 0
378 1 0 0 0 S 0 1 0
380 S: 1 = enable vertical scroll
393 -----------------------------------------
395 Parity checking and packet re-synchronization
403 A1 = packet[1];
406 C1 = packet[4];
408 if( (((SA1 & 0x3C) != 0x3C) && ((SA1 & 0xC0) != 0x80)) || // check Byte 1
409 … (((SA1 & 0x0C) != 0x0C) && ((SA1 & 0xC0) == 0x80)) || // check Byte 1 (one finger pressed)
411 (((SB1 & 0x3E) != 0x38) && ((SA1 & 0xC0) != 0x80)) || // check Byte 4
412 … (((SB1 & 0x0E) != 0x08) && ((SA1 & 0xC0) == 0x80)) || // check Byte 4 (one finger pressed)
430 bit 7 6 5 4 3 2 1 0
433 L, R = 1 when Left, Right mouse button pressed
434 n1..n0 = number of fingers on touchpad
436 byte 1::
438 bit 7 6 5 4 3 2 1 0
443 bit 7 6 5 4 3 2 1 0
450 bit 7 6 5 4 3 2 1 0
454 vf = a kind of flag ? (only on EF123, 0 when finger is over one
455 of the buttons, 1 otherwise)
456 w3..w0 = width of the finger touch (not EF113)
459 1 = Left
462 4 = Forward
467 byte 4::
469 bit 7 6 5 4 3 2 1 0
476 bit 7 6 5 4 3 2 1 0
485 Note that the two pairs of coordinates are not exactly the coordinates of the
486 two fingers, but only the pair of the lower-left and upper-right coordinates.
487 So the actual fingers might be situated on the other diagonal of the square
492 bit 7 6 5 4 3 2 1 0
495 L, R = 1 when Left, Right mouse button pressed
496 n1..n0 = number of fingers on touchpad
498 byte 1::
500 bit 7 6 5 4 3 2 1 0
503 ax8..ax0 = lower-left finger absolute x value
507 bit 7 6 5 4 3 2 1 0
510 ay8..ay0 = lower-left finger absolute y value
514 bit 7 6 5 4 3 2 1 0
517 byte 4::
519 bit 7 6 5 4 3 2 1 0
522 bx8..bx0 = upper-right finger absolute x value
526 bit 7 6 5 4 3 2 1 0
529 by8..by0 = upper-right finger absolute y value
535 ---------
539 bit 7 6 5 4 3 2 1 0
542 A: 1 = enable absolute tracking
543 T: 1 = enable two finger mode auto correct
544 F: 1 = disable ABS Position Filter
545 R: 1 = enable real hardware resolution
548 -----------------------------------------
550 1 and 3 finger touch shares the same 6-byte packet format, except that
551 3 finger touch only reports the position of the center of all three fingers.
553 Firmware would send 12 bytes of data for 2 finger touch.
557 when number of finger changes, F/W would send "debounce packet" to inform
562 byte 1: 0xff
565 byte 4: 0xff
568 When we encounter this kind of packet, we just ignore it.
575 bit 7 6 5 4 3 2 1 0
576 n1 n0 w3 w2 0 1 R L
578 L, R = 1 when Left, Right mouse button pressed
579 n1..n0 = number of fingers on touchpad
581 byte 1::
583 bit 7 6 5 4 3 2 1 0
588 bit 7 6 5 4 3 2 1 0
595 bit 7 6 5 4 3 2 1 0
596 0 0 w1 w0 0 0 1 0
598 w3..w0 = width of the finger touch
600 byte 4::
602 bit 7 6 5 4 3 2 1 0
609 bit 7 6 5 4 3 2 1 0
620 total of 12 bytes are sent.
622 Hardware version 4
626 ---------
630 bit 7 6 5 4 3 2 1 0
633 A: 1 = enable absolute tracking
636 -----------------------------------------
638 v4 hardware is a true multitouch touchpad, capable of tracking up to 5 fingers.
642 Whenever the numbers or identities of the fingers changes, the hardware sends a
644 head packets or motion packets. A head packet contains data of finger id, finger
650 the following packets would be motion packets, only sending delta of finger
661 bit 7 6 5 4 3 2 1 0
662 . . . . 0 1 R L
664 L, R = 1 when Left, Right mouse button pressed
666 byte 1::
668 bit 7 6 5 4 3 2 1 0
671 ft4 ft3 ft2 ft1 ft0 ftn = 1 when finger n is on touchpad
679 bit 7 6 5 4 3 2 1 0
680 . . . 1 0 0 0 0
684 byte 4::
686 bit 7 6 5 4 3 2 1 0
689 p = 1 for palm
700 bit 7 6 5 4 3 2 1 0
701 w3 w2 w1 w0 0 1 R L
703 L, R = 1 when Left, Right mouse button pressed
706 byte 1::
708 bit 7 6 5 4 3 2 1 0
713 bit 7 6 5 4 3 2 1 0
720 bit 7 6 5 4 3 2 1 0
721 id2 id1 id0 1 0 0 0 1
725 byte 4::
727 bit 7 6 5 4 3 2 1 0
734 bit 7 6 5 4 3 2 1 0
744 bit 7 6 5 4 3 2 1 0
745 id2 id1 id0 w 0 1 R L
747 L, R = 1 when Left, Right mouse button pressed
749 w = 1 when delta overflows (> 127 or < -128), in this case
752 byte 1::
754 bit 7 6 5 4 3 2 1 0
761 bit 7 6 5 4 3 2 1 0
768 bit 7 6 5 4 3 2 1 0
769 id2 id1 id0 1 0 0 1 0
773 byte 4::
775 bit 7 6 5 4 3 2 1 0
782 bit 7 6 5 4 3 2 1 0
791 Trackpoint (for Hardware version 3 and 4)
795 ---------
800 -----------------------------------------
807 bit 7 6 5 4 3 2 1 0
810 byte 1::
812 bit 7 6 5 4 3 2 1 0
817 bit 7 6 5 4 3 2 1 0
822 bit 7 6 5 4 3 2 1 0
823 0 0 ~sy ~sx 0 1 1 0
825 byte 4::
827 bit 7 6 5 4 3 2 1 0
832 bit 7 6 5 4 3 2 1 0
839 ~sx is the inverse of sx, ~sy is the inverse of sy.
840 The sign of y is opposite to what the input driver