Message ID | 20120706051141.GA2937@thinkpad-t410 (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Sat, Jul 07, 2012 at 01:35:19PM +0800, littlebat wrote: > Briefly, "proto_version" V4 with "command_mode_resp" 0x00, 0x01, 0x73, > 0x0d and V3 with 0x0d, 0x73, show the almost same symptoms: > 1, dmesg output: > [ 19.105550] psmouse serio4: alps: E6 report: 00 00 64 > [ 19.130028] psmouse serio4: alps: E7 report: 73 03 50 > [ 19.149304] psmouse serio4: alps: unknown response while entering > command mode: 73 01 0d > mode Okay, I don't suspect the v3/v4 protocol support is likely to work then. > And, V2 or V1 with 0x8a or 0x00, show the almost same symptoms below: > 1, dmesg output: > [ 19.935069] psmouse serio4: alps: E6 report: 00 00 64 > [ 19.960457] psmouse serio4: alps: E7 report: 73 03 50 > [ 20.000732] psmouse serio4: alps: Status: 10 00 0a ... > 4, There is touchpad tab in gnome mouse setting dialog, but the > functions of "edge scrolling" and "disable touchpad when typing" still > can't work even if I can setup them in touchpad tab in gnome mouse > setting dialog. The alps driver will detect and handle raw PS/2 mouse data, so what it sounds like to me is that the alps driver manages to attach to your device but doesn't get it sending absolute data packets. As a result the driver is only passing relative motion data instead of absolute position data, which means the touchpad is usable but still can't support any touchpad features like edge scrolling. So it sounds like we don't know how to talk to your touchpad, and there's no trivial way to add support for it to the driver. There's not really anything more I can do to help since I don't have access to the hardware. Seth -- To unsubscribe from this list: send the line "unsubscribe linux-input" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Mon, 9 Jul 2012 09:45:08 -0500 Seth Forshee <seth.forshee@canonical.com> wrote: > So it sounds like we don't know how to talk to your touchpad, and > there's no trivial way to add support for it to the driver. There's > not really anything more I can do to help since I don't have access to > the hardware. Thanks. Three things: 1, Can you provide a simple tutorial (or web page address) of how to reverse-engineer a Linux ALPS driver if possible? I have very basic programming knowledge(shell script, read basic C code except hardware driver). Maybe, I can provide more detail hardware information about this ALPS touchpad in this way? 2, Is there a tool, it can show the message when I operate on touchpad edge scrolling? So, according to the output, it is able to get a dirty solution about edge scrolling function of Lenovo G360 touchpad. The funciton of "disable touchpad when typing" has a solution using python script I have mentioned in the previous posts. 3, If you are interest in this and have time and it is helpful, I can provide a root password for this laptop to you and run ssh service for you all the time. Then you can operate this laptop via ssh connection in this way. You can do anything on this machine even format the disk :-) -- To unsubscribe from this list: send the line "unsubscribe linux-input" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Tue, Jul 10, 2012 at 12:16:27PM +0800, littlebat wrote: > 1, Can you provide a simple tutorial (or web page address) of how to > reverse-engineer a Linux ALPS driver if possible? I have very basic > programming knowledge(shell script, read basic C code except hardware > driver). Maybe, I can provide more detail hardware information about > this ALPS touchpad in this way? I did a write-up a while back about how I did it. http://swapspace.forshee.me/2011/11/touchpad-protocol-reverse-engineering.html > 2, Is there a tool, it can show the message when I operate on touchpad > edge scrolling? So, according to the output, it is able to get a dirty > solution about edge scrolling function of Lenovo G360 touchpad. > The funciton of "disable touchpad when typing" has a solution using > python script I have mentioned in the previous posts. I'm sorry, I can't quite tell what you're asking. If you're asking for a way to enable edge scrolling without having a functioning touchpad driver, I don't know of any. I doubt it's even possible to detect that you're near the edge of the touchpad with only relative motion events. > 3, If you are interest in this and have time and it is helpful, I can > provide a root password for this laptop to you and run ssh service for > you all the time. Then you can operate this laptop via ssh connection > in this way. You can do anything on this machine even format the > disk :-) I'm afraid it's just not practical to do this remotely. Being able to physically interact with the touchpad is pretty crucial. Seth -- To unsubscribe from this list: send the line "unsubscribe linux-input" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Hi Seth, On Tue, Jul 10, 2012 at 6:57 AM, Seth Forshee <seth.forshee@canonical.com> wrote: > On Tue, Jul 10, 2012 at 12:16:27PM +0800, littlebat wrote: >> 3, If you are interest in this and have time and it is helpful, I can >> provide a root password for this laptop to you and run ssh service for >> you all the time. Then you can operate this laptop via ssh connection >> in this way. You can do anything on this machine even format the >> disk :-) > > I'm afraid it's just not practical to do this remotely. Being able to > physically interact with the touchpad is pretty crucial. How long do you think you will need to reverse engineer the protocol if you would have the hardware? Depending on how long you think you might need, and how much it would cost me to ship my laptop to you (where are you located?), would it help if I simply ship my laptop to you? I can't do that right now, but might be able to do that in a few months. Regards, Rik -- To unsubscribe from this list: send the line "unsubscribe linux-input" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Mon, 9 Jul 2012 23:57:14 -0500 Seth Forshee <seth.forshee@canonical.com> wrote: > I did a write-up a while back about how I did it. > http://swapspace.forshee.me/2011/11/touchpad-protocol-reverse-engineering.html Hi, I have done some testing on my Lenovo G360 Laptop according to the instruction above, but it seems can't work as the instruction says. Here is my steps: 1, Install Ubuntu 11.10 for i386 on laptop. 2, sudo apt-get update 3, sudo apt-get build-dep virtualbox 4, sudo apt-get source virtualbox (download virtualbox_4.1.2-dfsg-1ubuntu1 source into home folder) 5, Applied the virtualbox patch "vbox-psmouse-serio-passthrough.patch" downloaded from instruction page 6, sudo apt-get -b source virtualbox (this will compile patched source and generate several deb virtualbox packages into home folder) 7, sudo dpkg -i virtualbox_4.1.2-dfsg-1ubuntu1_i386.deb virtualbox-dbg_4.1.2-dfsg-1ubuntu1_i386.deb virtualbox-dkms_4.1.2-dfsg-1ubuntu1_all.deb virtualbox-fuse_4.1.2-dfsg-1ubuntu1_i386.deb virtualbox-qt_4.1.2-dfsg-1ubuntu1_i386.deb (install generated virtualbox packages) 8, Installed Windows 7 (or Windows xp SP2, has the almost same testing result) into VirtualBox virtual machine. 9, Installed Touchpad driver in Windows 7 in VirtualBox virtual machine. But, the touchpad still act as a normal ps/2 mouse in Windows in virtual machine, it misses edge scrolling function although has installed windows touchpad driver successfully. 10, Do the test: y@y-PC:~$ sudo ./psmouse-reverse/mouse-to-serio.sh 1 y@y-PC:~$ sudo chmod 666 /dev/serio_raw0 y@y-PC:~$ ls -la /dev/serio* crw-rw-rw- 1 root root 10, 55 2012-07-14 07:40 /dev/serio_raw0 y@y-PC:~ $ export PSMOUSE_SERIO_DEV_PATH="/dev/serio_raw0" y@y-PC:~$ export PSMOUSE_SERIO_LOG_PATH="/home/y/psmouse-reverse/reverse.log" y@y-PC:~$ virtualbox --startvm w7 ("w7" is my VirtualBox virtual machine Windows 7 guest OS name) In the Windows 7 guest OS, the touchpad "Lenovo pointing device" disappeared from the hardwares list. And, the log file in Ubuntu 11.10 has the content below: y@y-PC:~$ cat ./psmouse-reverse/reverse.log S ff R fe S ff R fe S ff R fe S ed R fe Then, restart Windows 7 guest OS without the environment variables "PSMOUSE_SERIO_DEV_PATH", "PSMOUSE_SERIO_LOG_PATH", the touchpad "Lenovo pointing device" appeared in the Windows 7 guest OS hardwares list. I replaced touchpad "Lenovo pointing device" driver with normal "Microsoft PS/2 Mouse" driver. Restart Windows 7 guest OS, I can see "Microsoft PS/2 Mouse" in the hardwares list. Then, empty the log file "./psmouse-reverse/reverse.log", set "PSMOUSE_SERIO_DEV_PATH", "PSMOUSE_SERIO_LOG_PATH" environment variables and restart Windows 7 guest OS. In the Windows 7 guest OS, "Microsoft PS/2 Mouse" disappeared from the hardwares list. And, the log file in Ubuntu 11.10 has the content below: y@y-PC:~$ cat ./psmouse-reverse/reverse.log S ff R fe S ff R fe S ff R fe S ed R fe Note, the content of the log file is same as when enable "Lenovo pointing device" touchpad driver. And, when enable environment variables, under VirtualBox Windows 7 guest OS, although the device "Lenovo pointing device" or "Microsoft PS/2 Mouse" disappeared from the hardwares list, the touchpad can still work as a normal PS/2 mouse in the Windows 7. But, when I operate touchpad under Windows 7 guest OS, there isn't any other bit wrote into the log file "./psmouse-reverse/reverse.log". Only when start virtualbox machine Windows guest OS, the log file will be written the same eight lines as above. I have alse tested "qemu-kvm_0.14.1+noroms-0ubuntu6" with Windows XP SP2 guest OS installed, the result is same except two points: 1, When I start guest OS without environment variables, the terminal output as below: y@y-PC:~$ qemu -m 1024 ./QEMU/wxp.img open /dev/kvm: No such file or directory Could not initialize KVM, will disable KVM support qemu: ps2 mouse init qemu: serio_pt_init qemu: No serio device specified in environment qemu: pci_add_option_rom: failed to find romfile "pxe-rtl8139.bin" And, when start it with environment variables set, the terminal output as below: y@y-PC:~$ qemu -m 1024 ./QEMU/wxp.img open /dev/kvm: No such file or directory Could not initialize KVM, will disable KVM support qemu: ps2 mouse init qemu: serio_pt_init qemu: pci_add_option_rom: failed to find romfile "pxe-rtl8139.bin" 2, When start qemu windows xp sp2 guest OS with environment variables set, unlike in the virtualbox Windows guest OS, the touchpad and USB mouse can't work in the qemu windows xp sp2 guest OS, the cursor can't move. Briefly, it seems the instruction at "http://swapspace.forshee.me/2011/11/touchpad-protocol-reverse-engineering.html" can't work on my Lenovo G360, is there any thing wrong with me? Thanks. -- To unsubscribe from this list: send the line "unsubscribe linux-input" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Sun, Jul 15, 2012 at 10:15:57AM +0800, littlebat wrote: > In the Windows 7 guest OS, the touchpad "Lenovo pointing device" > disappeared from the hardwares list. And, the log file in Ubuntu 11.10 > has the content below: > y@y-PC:~$ cat ./psmouse-reverse/reverse.log > S ff > R fe > S ff > R fe > S ff > R fe > S ed > R fe From the outset this doesn't look right. When reset is sent (0xff) the touchpad should respond with and acknowledge (0xfa) and a couple more bytes. Something obviously isn't working right, but I'm not sure what. The only suggestion I have is to start debugging and try to see what's going wrong. Is the data from the guest OS getting to the hardware okay, and vice versa? Are you sure you've got the correct device? Seth -- To unsubscribe from this list: send the line "unsubscribe linux-input" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/input/mouse/alps.c b/drivers/input/mouse/alps.c index 4c6a72d..979339c 100644 --- a/drivers/input/mouse/alps.c +++ b/drivers/input/mouse/alps.c @@ -15,6 +15,8 @@ * the Free Software Foundation. */ +#define DEBUG + #include <linux/slab.h> #include <linux/input.h> #include <linux/input/mt.h> @@ -112,6 +114,7 @@ static const struct alps_model_info alps_model_data[] = { { { 0x73, 0x02, 0x64 }, 0x9b, ALPS_PROTO_V3, 0x8f, 0x8f, ALPS_DUALPOINT }, { { 0x73, 0x02, 0x64 }, 0x9d, ALPS_PROTO_V3, 0x8f, 0x8f, ALPS_DUALPOINT }, { { 0x73, 0x02, 0x64 }, 0x8a, ALPS_PROTO_V4, 0x8f, 0x8f, 0 }, + { { 0x73, 0x03, 0x50 }, 0x8a, ALPS_PROTO_V4, 0x8f, 0x8f, 0 }, }; /*