retitle 237984 Should be able to use /dev/misc/psaux tags patch thanks Hi,
So far I have not been succesful using tpconfig under 2.6 system. Since assertion error is sometimes needs to be skipped under debug and DEBUG LEVEL = 1 should be less noisy, I improved patch further. Since 0x03 for b2 value is true for 2.6 kernels with my synaptic equiped machine, I added it to synaptic.c while making it easy to remove if it is wrong. I also made all HEX output to use %#02x for consistency. (I still do not like mixed byte and char type in code but left them as is) Now i option and a A s options are documented too. Here we go.
diff -Nru tpconfig-3.1.3-orig/ALPS.c tpconfig-3.1.3/ALPS.c --- tpconfig-3.1.3-orig/ALPS.c 2005-04-10 01:06:03.000000000 +0200 +++ tpconfig-3.1.3/ALPS.c 2005-04-10 02:07:28.000000000 +0200 @@ -80,8 +80,8 @@ putbyte(fd,c); } c = 0xe9; -if(DEBUG_LEVEL) - printf("Writing [%x]\n",c); +if(DEBUG_LEVEL > DEBUG_LOW) + printf("Writing [%#02x]\n",c); num_written = ps2_write(fd,&c,1); if(num_written != 1) { @@ -97,10 +97,10 @@ /* resend enable command for xmission of external mouse data */ c = 0xf4; -if(DEBUG_LEVEL) +if(DEBUG_LEVEL > DEBUG_LOW) { printf("Resending Enable command\n"); - printf("Writing [%x]\n",c); + printf("Writing [%#02x]\n",c); } num_written = ps2_write(fd,&c,1); if(num_written != 1) @@ -108,12 +108,12 @@ fprintf(stderr,"Error writing byte\n"); return(0); } -if(DEBUG_LEVEL) +if(DEBUG_LEVEL > DEBUG_LOW) { - printf("Response 0 [%x]\n",status[0]); - printf("Response 1 [%x]\n",status[1]); - printf("Response 2 [%x]\n",status[2]); - printf("Response 3 [%x]\n",status[3]); + printf("Response 0 [%#02x]\n",status[0]); + printf("Response 1 [%#02x]\n",status[1]); + printf("Response 2 [%#02x]\n",status[2]); + printf("Response 3 [%#02x]\n",status[3]); } return(!ERROR); } /* ALPS_status */ @@ -124,7 +124,7 @@ int tap_on = TRUE; int error; -if(DEBUG_LEVEL) +if(DEBUG_LEVEL > DEBUG_LOW) printf("\n\nChecking Whether ALPS Tap status is enabled or disabled\n"); @@ -148,7 +148,7 @@ } -if(DEBUG_LEVEL) +if(DEBUG_LEVEL > DEBUG_LOW) { if(tap_on) printf("Done Checking Status of Tap Enabled/Disable, Tap is ON \n"); @@ -165,8 +165,8 @@ int num_written; c = 0xff; -if(DEBUG_LEVEL) - printf("\nWriting Reset [%x], Reading Nothing\n",(int)c); +if(DEBUG_LEVEL > DEBUG_LOW) + printf("\nWriting Reset [%#02x], Reading Nothing\n",(int)c); num_written = ps2_write(fd,&c,1); if(num_written != 1) { @@ -182,7 +182,7 @@ { /* ALPS_SP_tap */ byte c; int i; -if(DEBUG_LEVEL) +if(DEBUG_LEVEL > DEBUG_LOW) { if(enable) printf("\n\nEnabling SP tap\n"); @@ -203,7 +203,7 @@ c = 0x0a; putbyte(fd,c); -if(DEBUG_LEVEL) +if(DEBUG_LEVEL > DEBUG_LOW) printf("Done Enabling/Disabling SP tap\n"); return(!ERROR); } /* ALPS_SP_tap */ @@ -213,7 +213,7 @@ { /* ALPS_through_mode */ byte c; int i; -if(DEBUG_LEVEL) +if(DEBUG_LEVEL > DEBUG_LOW) { if(set) printf("\n\nEnabling ALPS_through_mode\n"); @@ -235,7 +235,7 @@ /* We may receive 3 more bytes, ignore them */ tcflush(fd,TCIOFLUSH); -if(DEBUG_LEVEL) +if(DEBUG_LEVEL > DEBUG_LOW) { if(set) printf("Done Enabling ALPS_through_mode\n\n\n"); @@ -255,7 +255,7 @@ int num_written; int error; -if(DEBUG_LEVEL) +if(DEBUG_LEVEL > DEBUG_LOW) { if(enable) printf("\n\nEnabling GP tap\n"); @@ -274,22 +274,22 @@ } c = 0xE9; -if(DEBUG_LEVEL) - printf("Writing Initial [%x]\n",(int)c); +if(DEBUG_LEVEL > DEBUG_LOW) + printf("Writing Initial [%#02x]\n",(int)c); num_written = ps2_write(fd,&c,1); num_read = ps2_read(fd,response,4); -if(DEBUG_LEVEL) +if(DEBUG_LEVEL > DEBUG_LOW) { printf("Just Read num = [%d] bytes",num_read); printf("\n"); } if((num_read != 4) || (response[0] != AUX_ACK)) { - printf("-----> Invalid response from Alps Glidepad/Glidepoint [%x] \n",(int)response[0]); + printf("-----> Invalid response from Alps Glidepad/Glidepoint [%#02x] \n",(int)response[0]); return(ERROR); } -if(DEBUG_LEVEL) - printf("Current Settings [%x] [%x] [%x]\n",response[1],response[2],response[3]); +if(DEBUG_LEVEL > DEBUG_LOW) + printf("Current Settings [%#02x] [%#02x] [%#02x]\n",response[1],response[2],response[3]); for(i = 0;i < 2;i++) { @@ -299,13 +299,13 @@ if(enable) { - if(DEBUG_LEVEL) + if(DEBUG_LEVEL > DEBUG_LOW) printf("Enabling Tap\n"); c = 0xF3; } else { - if(DEBUG_LEVEL) + if(DEBUG_LEVEL > DEBUG_LOW) printf("Disabling Tap\n"); c = 0xE8; } @@ -372,8 +372,8 @@ putbyte(fd,c); } c = 0xe9; -if(DEBUG_LEVEL) - printf("Writing Initial [%x] in is_ALPS\n",(int)c); +if(DEBUG_LEVEL > DEBUG_LOW) + printf("Writing Initial [%#02x] in is_ALPS\n",(int)c); num_written = ps2_write(fd,&c,1); if(num_written != 1) { @@ -388,7 +388,7 @@ } if(DEBUG_LEVEL) - printf("ALPS Configuration Info [%2x][%2x][%2x]\n",response[1],response[2],response[3]); + printf("ALPS Configuration Info [%#02x][%#02x][%#02x]\n",response[1],response[2],response[3]); return_value = 0; for(i = 0;i < NUM_SINGLES;i++) @@ -426,7 +426,7 @@ { if(!tap_on) { /* reset tap_on to off since we just had to do a reset */ - if(DEBUG_LEVEL) + if(DEBUG_LEVEL > DEBUG_LOW) printf("Turning ALPS Tap Back OFF\n"); if(touchpad_type == ALPS_STICKPOINTER_AND_GLIDEPOINT) { @@ -494,11 +494,11 @@ else { mode = optarg[0]-'0'; - if(DEBUG_LEVEL) + if(DEBUG_LEVEL > DEBUG_LOW) printf("User Asked to set Tap mode to [%d]\n",mode); if(mode > 0) { - if(DEBUG_LEVEL) + if(DEBUG_LEVEL > DEBUG_LOW) printf("Turning ALPS Tap ON\n"); if(touchpad_type == ALPS_STICKPOINTER_AND_GLIDEPOINT) { @@ -510,7 +510,7 @@ } else { /* disable tap mode */ - if(DEBUG_LEVEL) + if(DEBUG_LEVEL > DEBUG_LOW) printf("Turning ALPS Tap OFF\n"); if(touchpad_type == ALPS_STICKPOINTER_AND_GLIDEPOINT) { diff -Nru tpconfig-3.1.3-orig/debian/README.Debian tpconfig-3.1.3/debian/README.Debian --- tpconfig-3.1.3-orig/debian/README.Debian 2005-04-10 01:06:03.000000000 +0200 +++ tpconfig-3.1.3/debian/README.Debian 2005-04-08 02:30:18.000000000 +0200 @@ -7,14 +7,18 @@ debian installer RC3, March 2005). You should use a kernel newer than 2.6.11. There may still be more fixes even after this kernel version. -The device name /dev/psaux is hard coded to tpconfig currently. This -means tpconfig will not work under the deprecated devfs system in -which /dev/misc/psaux is used as the PS/2 mouse device name, or under -unusual udev setups in which devfs-like device names are used. -Classic device naming or normal udev naming should not cause any -problem. +If you want to use mouse device name other than /dev/psaux, you must give +its device name as the initial command line argument before normal options. +This should enable device names such /dev/misc/psaux etc. and hopefully +should support devices like USB touch pads. -USB touch pads aren't currently supported. + $ sudo tpconfig /dev/misc/psaux -i - Osamu Aoki <[EMAIL PROTECTED]> Wed, 30 Mar 2005 23:47:18 +0200 +If you face difficulty running tpconfig, please use tpconfig with its +initial arguments to be number 1 to 3 to get diagonostic info. + + $ sudo tpconfig 3 -i + + Osamu Aoki <[EMAIL PROTECTED]> Fri, 08 Apr 2005 02:27:19 +0200 Chris Hanson <[EMAIL PROTECTED]> Thu, 31 Mar 2005 15:14:52 -0500 + diff -Nru tpconfig-3.1.3-orig/debian/changelog tpconfig-3.1.3/debian/changelog --- tpconfig-3.1.3-orig/debian/changelog 2005-04-10 01:06:03.000000000 +0200 +++ tpconfig-3.1.3/debian/changelog 2005-04-08 02:15:17.000000000 +0200 @@ -1,3 +1,10 @@ +tpconfig (3.1.3-6.1) unstable; urgency=low + + * Make target device and debug mode configurable from command + line arguments. (closes: Bug#237984, #139640) + + -- Osamu Aoki <[EMAIL PROTECTED]> Fri, 8 Apr 2005 00:19:54 +0200 + tpconfig (3.1.3-6) unstable; urgency=low From Osamu Aoki <[EMAIL PROTECTED]>: diff -Nru tpconfig-3.1.3-orig/debian/tpconfig.1 tpconfig-3.1.3/debian/tpconfig.1 --- tpconfig-3.1.3-orig/debian/tpconfig.1 2005-04-10 01:06:03.000000000 +0200 +++ tpconfig-3.1.3/debian/tpconfig.1 2005-04-10 01:53:29.000000000 +0200 @@ -1,10 +1,10 @@ -.TH "tpconfig" "1" "3.1.2" "" "" +.TH "tpconfig" "1" "3.1.3" "" "" .SH "NAME" .LP tpconfig \- Configure touchpad devices .SH "SYNOPSIS" .LP -\fBtpconfig\fP [ \fIOPTIONS\fP ] +\fBtpconfig\fP [123saAi] [/dev/mouse] [ \fIOPTIONS\fP ] .br .br .SH "DESCRIPTION" @@ -15,6 +15,30 @@ .LP Options for all touchpads: .TP +\fB1\fP +Debug level 1 +.TP +\fB2\fP +Debug level 2 +.TP +\fB3\fP +Debug level 3 +.TP +\fBs\fP +Force device to be Synaptics Touchpad. +.TP +\fBa\fP +Force device to be ALPS GlidePad. +.TP +\fBA\fP +Force device to be ALPS Dual StickPoint/Glidepad. +.TP +\fBi\fP +Ignore assert result. +.TP +\fB/dev/mouse\fP +Force input mouse device to be /dev/mouse . [default=/dev/psaux] +.TP \fB--help\fP Display a help summary and exit. .TP diff -Nru tpconfig-3.1.3-orig/synaptics.c tpconfig-3.1.3/synaptics.c --- tpconfig-3.1.3-orig/synaptics.c 2005-04-10 01:06:03.000000000 +0200 +++ tpconfig-3.1.3/synaptics.c 2005-04-10 03:37:37.000000000 +0200 @@ -278,7 +278,7 @@ static void set_modes (int fd, unsigned int modes) { - if (DEBUG_LEVEL) + if (DEBUG_LEVEL > DEBUG_LOW) fprintf (stderr, "[set modes: %#02x]\n", modes); if (single_mode_byte) { @@ -314,7 +314,13 @@ { byte b1, b2, b3; status_rqst (fd, STP_QRY_IDENTIFY, &b1, &b2, &b3); +#if 1 + /* 2.6 kernel return 0x03 instead */ + if (!IGNORE_ASSERT) assert (b2 == 0x47 || b2 == 0x03); +#endif +#if 0 assert (b2 == 0x47); +#endif if (version_major) (*version_major) = (b3 & 0x0F); if (version_minor) (*version_minor) = b1; if (model_code) (*model_code) = ((b3 & 0xF0) >> 4); @@ -326,10 +332,16 @@ byte b1, b2, b3; byte b4, b5, b6; status_rqst (fd, STP_QRY_READ_MODES, &b1, &b2, &b3); +#if 1 + /* 2.6 kernel return 0x03 instead */ + if (!IGNORE_ASSERT) assert (b2 == 0x47 || b2 == 0x03); +#endif +#if 0 assert (b2 == 0x47); +#endif if (single_mode_byte) { - assert (b1 == 0x3B); + if (!IGNORE_ASSERT) assert (b1 == 0x3B); return b3; } else @@ -338,7 +350,13 @@ if (fw_version < QUAD_MODE_BYTE) { status_rqst (fd, STP_QRY_READ_CAPS, &b4, &b5, &b6); +#if 1 + /* 2.6 kernel return 0x03 instead */ + if (!IGNORE_ASSERT) assert (b5 == 0x47 || b5 == 0x03); +#endif +#if 0 assert (b5 == 0x47); +#endif return ((unsigned int) b1 << 24) | ((unsigned int) b3 << 16) | ((unsigned int) b4 << 8) | (unsigned int) b6; } @@ -351,7 +369,13 @@ { byte b1, b2, b3; status_rqst (fd, STP_QRY_READ_CAPS, &b1, &b2, &b3); +#if 1 + /* 2.6 kernel return 0x03 instead */ + if (!IGNORE_ASSERT) assert (b2 == 0x47 || b2 == 0x03); +#endif +#if 0 assert (b2 == 0x47); +#endif return ((unsigned int) b1 << 8) | (unsigned int) b3; } @@ -388,7 +412,7 @@ { byte b1, b2, b3; status_rqst (fd, STP_QRY_READ_RES, &b1, &b2, &b3); - assert ((b2 & 0x80) != 0); + if (!IGNORE_ASSERT) assert ((b2 & 0x80) != 0); (*xres) = b1; (*yres) = b3; } @@ -409,7 +433,14 @@ b3 = getbyte (fd); } #endif +#if 1 + /* 2.6 kernel return 0x03 instead */ + retval = (b2 == 0x47 || b2 == 0x03); +#endif +#if 0 retval = (b2 == 0x47); +#endif + retval = (b2 == 0x47 || b2 == 0x03); /* 2.6 kernel return 0x03 instead */ if (retval) { fw_version_major = (b3 & 0x0F); diff -Nru tpconfig-3.1.3-orig/tpconfig.c tpconfig-3.1.3/tpconfig.c --- tpconfig-3.1.3-orig/tpconfig.c 2005-04-10 01:06:03.000000000 +0200 +++ tpconfig-3.1.3/tpconfig.c 2005-04-10 01:55:54.000000000 +0200 @@ -9,8 +9,11 @@ /*$Log: tpconfig.c,v $ + *Revision 2.13.1 2005-04-08T00:21:38 CEST osamu + *Added DEBUG and device name + * *Revision 2.13 2002/02/22 20:33:11 bruce - *Aded for Mode 3 and Mode 4 options. + *Added for Mode 3 and Mode 4 options. * *Revision 2.12 2000/11/15 15:37:50 bruce *Added back in copyright call(). @@ -114,7 +117,11 @@ extern int is_ALPS(int fd); extern int is_Synaptics(int fd); +/* global flags */ int DEBUG_LEVEL; +int FORCE_DEVICE; +int IGNORE_ASSERT; +char mousedev[128] = "/dev/psaux"; int silent; float firmware_rev; char single_mode_byte; @@ -126,28 +133,32 @@ int status; if (*fd<0) { - *fd = open("/dev/psaux", O_RDWR|O_NDELAY); + if (DEBUG_LEVEL) printf ("Probing mouse port at '%s'\n", mousedev); + *fd = open(mousedev, O_RDWR|O_NDELAY); if (*fd < 0) - fatal("Could not open PS/2 Port [/dev/psaux]"); + fatal("Could not open PS/2 PortPort."); #ifdef __linux /* If AUX_GRAB kernel patch present, use it. */ + if (DEBUG_LEVEL) printf ("Grabing mouse port at '%s'\n", mousedev); while (ioctl (*fd, AUX_GRAB, 0) < 0) { if (errno == ENOTTY) break; if (errno != EAGAIN) { - perror ("/dev/psaux"); + perror (mousedev); fatal ("Unable to get exclusive access to PS/2 Port."); exit (1); } } #endif tcflush(*fd,TCIOFLUSH); + if (DEBUG_LEVEL) printf ("Trying Synaptics detection.\n"); if (!is_Synaptics(*fd)) { + if (DEBUG_LEVEL) printf ("Trying Alps detection.\n"); status = is_ALPS(*fd); - if(status == 0) + if(status == 0 && FORCE_DEVICE == 0) { fatal("\n\nNo Synaptics or ALPS touchpad device found\n\n"); exit(-1); @@ -158,6 +169,21 @@ printf ("Found ALPS GlidePad.\n"); else if (touchpad_type == ALPS_STICKPOINTER_AND_GLIDEPOINT) printf ("Found ALPS Dual StickPoint/Glidepad.\n"); + else if (FORCE_DEVICE == ALPS_GLIDEPAD) + { + touchpad_type = ALPS_GLIDEPAD; /*fake value*/ + printf ("Force device to be ALPS GlidePad.\n"); + } + else if (FORCE_DEVICE == ALPS_STICKPOINTER_AND_GLIDEPOINT) + { + touchpad_type = ALPS_STICKPOINTER_AND_GLIDEPOINT; /*fake value*/ + printf ("Force device to be ALPS Dual StickPoint/Glidepad.\n"); + } + else if (FORCE_DEVICE == SYNAPTICS_TOUCHPAD) + { + touchpad_type = SYNAPTICS_TOUCHPAD; /*fake value*/ + printf ("Force device to be Synaptics Touchpad.\n"); + } else { fprintf (stderr, "Undefined touchpad found[%d]\n", touchpad_type); @@ -181,6 +207,7 @@ int fd = -1; int c = 0; int option_index = 0; +int i; silent = 0; firmware_rev = 0.0; @@ -190,6 +217,8 @@ #ifdef DEBUG DEBUG_LEVEL = DEBUG_LOW; #endif +FORCE_DEVICE = FALSE; +IGNORE_ASSERT = FALSE; if ((argc == 2) && (((strcmp ((argv[1]), "--version")) == 0) @@ -208,6 +237,29 @@ return (0); } +while (argc > 0) + { + if (argv[1][0] == '1') DEBUG_LEVEL = 1; + else if (argv[1][0] == '2') DEBUG_LEVEL = 2; + else if (argv[1][0] == '3') DEBUG_LEVEL = 3; + else if (strncmp (argv[1], "/dev/", 5) == 0) strncpy (mousedev, argv[1], 127); + /* Following will be undocumented options for Debug */ + else if (argv[1][0] == '0') DEBUG_LEVEL = 0; + else if (argv[1][0] == 's') FORCE_DEVICE = SYNAPTICS_TOUCHPAD; + else if (argv[1][0] == 'a') FORCE_DEVICE = ALPS_GLIDEPAD; + else if (argv[1][0] == 'A') FORCE_DEVICE = ALPS_STICKPOINTER_AND_GLIDEPOINT; + else if (argv[1][0] == 'z') FORCE_DEVICE = FALSE; + else if (argv[1][0] == 'i') IGNORE_ASSERT = TRUE; + else break; /* - found, exit while-loop */ + /* shift */ + if (DEBUG_LEVEL) printf ("DEBUG: %i, mousedev='%s'\n", DEBUG_LEVEL, mousedev); + argc--; + for (i=1; i<argc; i++) + { + argv[i]=argv[i+1]; + } + } + /* Open file descriptor and determine if we are connected to a touchpad */ init_fd(&fd); diff -Nru tpconfig-3.1.3-orig/tpconfig.h tpconfig-3.1.3/tpconfig.h --- tpconfig-3.1.3-orig/tpconfig.h 2000-12-01 16:29:47.000000000 +0100 +++ tpconfig-3.1.3/tpconfig.h 2005-04-10 01:57:18.000000000 +0200 @@ -73,6 +73,7 @@ typedef unsigned char byte; extern int DEBUG_LEVEL; +extern int IGNORE_ASSERT; extern int silent; extern float firmware_rev; extern char single_mode_byte; diff -Nru tpconfig-3.1.3-orig/utils.c tpconfig-3.1.3/utils.c --- tpconfig-3.1.3-orig/utils.c 2005-04-10 01:06:03.000000000 +0200 +++ tpconfig-3.1.3/utils.c 2005-04-10 01:42:11.000000000 +0200 @@ -98,7 +98,7 @@ { fprintf (stderr, "PS2_write:"); for (i = 0; i < num_bytes; i++) - fprintf (stderr, " %#2x", *(buffer + i)); + fprintf (stderr, " %#02x", *(buffer + i)); fprintf (stderr, "\n"); } @@ -218,6 +218,6 @@ fprintf (stderr, "Read %#02x, expected %#02x in %s.\n", b, expected, what); #if 0 /* Upstream recommends commenting this out for 2.6 kernels. */ - assert (b == expected); + if (!IGNORE_ASSERT) assert (&& b == expected); #endif }