From stephen@cauchy.math.missouri.edu  Sun Sep 24 10:11:51 2000
Return-Path: <stephen@cauchy.math.missouri.edu>
Received: from cauchy.math.missouri.edu (cauchy.math.missouri.edu [128.206.49.166])
	by hub.freebsd.org (Postfix) with ESMTP id 6098237B422
	for <FreeBSD-gnats-submit@freebsd.org>; Sun, 24 Sep 2000 10:11:50 -0700 (PDT)
Received: (from stephen@localhost)
	by cauchy.math.missouri.edu (8.11.0/8.9.1) id e8OHBnp07041;
	Sun, 24 Sep 2000 12:11:49 -0500 (CDT)
Message-Id: <200009241711.e8OHBnp07041@cauchy.math.missouri.edu>
Date: Sun, 24 Sep 2000 12:11:49 -0500 (CDT)
From: stephen@math.missouri.edu
Sender: stephen@cauchy.math.missouri.edu
Reply-To: stephen@math.missouri.edu
To: FreeBSD-gnats-submit@freebsd.org
Subject: Configure the synaptics touchpad.
X-Send-Pr-Version: 3.2

>Number:         21520
>Category:       ports
>Synopsis:       Configure the synaptics touchpad.
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-ports
>State:          closed
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          change-request
>Submitter-Id:   current-users
>Arrival-Date:   Sun Sep 24 10:20:01 PDT 2000
>Closed-Date:    Sun Feb 25 17:58:43 PST 2001
>Last-Modified:  Sun Feb 25 17:59:05 PST 2001
>Originator:     Stephen Montgomery-Smith
>Release:        FreeBSD 4.1-STABLE i386
>Organization:
University of Missouri
>Environment:

Using a synaptics touchpad on a laptop

>Description:

You may like to make various configurations to the touchpad, for
example, to disable the feature that tapping the touchpad is like
a mouse click.

>How-To-Repeat:


>Fix:

This port will not compile or work unless changes are made to the 
kernel - this is described at
http://www.freebsd.org/cgi/query-pr.cgi?pr=20352


# This is a shell archive.  Save it in a file, remove anything before
# this line, and then unpack it by entering "sh file".  Note, it may
# create directories; files and directories will be owned by you and
# have default permissions.
#
# This archive contains:
#
#	synaptics
#	synaptics/files
#	synaptics/files/remouse
#	synaptics/files/remouse.sh-sample
#	synaptics/files/md5
#	synaptics/patches
#	synaptics/patches/patch-aa
#	synaptics/pkg
#	synaptics/pkg/COMMENT
#	synaptics/pkg/DESCR
#	synaptics/pkg/PLIST
#	synaptics/Makefile
#
echo c - synaptics
mkdir -p synaptics > /dev/null 2>&1
echo c - synaptics/files
mkdir -p synaptics/files > /dev/null 2>&1
echo x - synaptics/files/remouse
sed 's/^X//' >synaptics/files/remouse << 'END-of-synaptics/files/remouse'
X#!/bin/sh
X
X# Suck in the configuration variables.
Xif [ -r /etc/defaults/rc.conf ]; then
X	. /etc/defaults/rc.conf
X	source_rc_confs
Xelif [ -r /etc/rc.conf ]; then
X	. /etc/rc.conf
Xfi
X
Xif [ -f /var/run/moused.pid ]; then
X	kill `cat /var/run/moused.pid`
X	rm -f /var/run/moused.pid
Xfi
X
X/usr/local/bin/tpconfig $@
X
Xcase ${moused_enable} in
X[Yy][Ee][Ss])
X	/usr/sbin/moused -p ${moused_port} -t ${moused_type} ${moused_flags}
X	;;
Xesac
END-of-synaptics/files/remouse
echo x - synaptics/files/remouse.sh-sample
sed 's/^X//' >synaptics/files/remouse.sh-sample << 'END-of-synaptics/files/remouse.sh-sample'
X#!/bin/sh
Xcase "$1" in
X	start)
X		/usr/local/bin/remouse -t0
X		echo -n ' remouse'
X		;;
X	stop)
X		;;
X	restart)
X		/usr/local/bin/remouse -t0
X		echo -n ' remouse'
X		;;
X	-h)
X		echo "Usage: `basename $0` { start | stop | restart }"
X		;;
X	*)
X		/usr/local/bin/remouse -t0
X		echo -n ' remouse'
X		;;
Xesac
END-of-synaptics/files/remouse.sh-sample
echo x - synaptics/files/md5
sed 's/^X//' >synaptics/files/md5 << 'END-of-synaptics/files/md5'
XMD5 (synaptics-2.2.tar.gz) = 9cd5348a797081c2abead26a02f7365e
END-of-synaptics/files/md5
echo c - synaptics/patches
mkdir -p synaptics/patches > /dev/null 2>&1
echo x - synaptics/patches/patch-aa
sed 's/^X//' >synaptics/patches/patch-aa << 'END-of-synaptics/patches/patch-aa'
X--- ../synaptics-2.2/tpconfig.c	Tue Feb 16 13:09:43 1999
X+++ tpconfig.c	Tue Aug 15 00:34:09 2000
X@@ -55,11 +55,14 @@
X #include <fcntl.h>
X #include <stdio.h>
X #include <unistd.h>
X-#include <assert.h>
X #include <sys/ioctl.h>
X #include <sys/time.h>
X #include <sys/timeb.h>
X 
X+#include <machine/mouse.h>
X+
X+#define exit_if_false(e) if (!(e)){printf("failed for %s\n",#e);exit(1);}
X+
X 
X #define fatal(string) \
X { fprintf(stderr, "fatal: " string); exit(1); } 
X@@ -67,10 +70,6 @@
X /* Prototypes for PS/2 utility functions */
X typedef unsigned char byte;
X 
X-/* write a byte to the ps/2 port, handling ACK */
X-void putbyte(int fd, byte b);
X-/* read a byte from the ps/2 port */
X-byte getbyte(int fd);
X /* use the Synaptics extended ps/2 syntax to write a special command byte */
X void send_cmd(int fd, byte cmd);
X /* write 'cmd' to mode byte 1 */
X@@ -107,54 +106,13 @@
X void set_firmware_options(int fd, FILE *info);
X 
X 
X-int tp_read(fd,buffer,num_bytes)
X-  int fd;
X-  char *buffer;
X-  int num_bytes;
X-{ /* tp_read */
X-#define TRUE 1
X-#define FALSE 0
X-#define TIMEOUT 3 /* wait for up to 3 seconds for a reply*/
X-int bytes_read;
X-struct timeb start;
X-struct timeb now;
X-int at;
X-int left;
X- 
X-#ifdef DEBUG
X-printf("Trying to read [%d] bytes \n",num_bytes);
X-#endif
X-/* Use the temporary buffer to store the data as it arrives */
X-ftime(&start);
X-at = 0;
X-left = num_bytes;
X-do
X-  {
X-  bytes_read = read(fd,(buffer + at),left);
X-  if(bytes_read > 0)
X-    {
X-    left = left - bytes_read;
X-    at = at + bytes_read;
X-    }
X-  ftime(&now);
X-  if((((now.time * 1000.0 + now.millitm) -
X-     (start.time * 1000.0 + start.millitm)) / 1000.0) > TIMEOUT)
X-    {
X-    printf("\n\nTimed Out waiting to read from Touchpad\n\n");
X-    exit(-1);
X-    }
X-  }
X-while(left > 0);
X- 
X-return(at);
X-} /* tp_read */
X- 
X 
X /* initialize file description if hasn't already been done. */
X void init_fd(int *fd) {
X+
X   if (*fd<0) {
X-    *fd = open("/dev/psaux", O_RDWR|O_NDELAY);	
X-    if (*fd<0) fatal("Could not open /dev/psaux");	
X+    *fd = open("/dev/psm0", O_RDWR|O_NDELAY);	
X+    if (*fd<0) fatal("Could not open /dev/psm2");	
X     if (!is_touchpad(*fd)) 
X       fatal("\n\nNo Synaptics touchpad device was found.\n\n");
X   }
X@@ -167,21 +125,19 @@
X byte b=0xff;
X byte ack;
X byte null;
X+struct mousedata data;
X fprintf(stderr,"Performing a Software Reset on TouchPad\n");
X #ifdef DEBUG
X printf("Writing [0x%x] in reset_touchpad\n",b);
X #endif
X-write(fd, &b, 1);
X-tp_read(fd, &ack, 1);
X-#ifdef DEBUG
X-printf("Read [0x%x] in reset_touchpad ACK? (0xfa)\n",ack);
X-#endif
X-assert(ack==0xFA);
X-tp_read(fd, &null, 1);
X+data.len=1;
X+data.buf[0]=b;
X+exit_if_false(ioctl(fd,MOUSE_SENDREADCMD,&data)!=-1);
X #ifdef DEBUG
X-printf("Read [0x%x] in reset_touchpad NULL? (0x0)\n",null);
X+printf("Read [0x%x] in reset_touchpad NULL? (0x0)\n",data.buf[0]);
X #endif
X-assert(null==0x00);
X+printf("data.len = %d\n",data.len);
X+exit_if_false(data.len==1 && data.buf[0]==0x00);
X fprintf(stderr,"Software Reset of TouchPad DONE!\n\n");
X } /* reset_touchpad */
X 
X@@ -324,7 +280,7 @@
X                         else if((((mode1>>2)&1)==0) && (((cc>>2)&1)!=0))
X                           fprintf(stderr,"Tap-to-drag NOT Correctly Set\n");
X                         else if((((mode1>>2)&1)==1) && (((cc>>2)&1)==1))
X-                          fprintf(stderr,"No tap gestures CORECTLY Set\n");
X+                          fprintf(stderr,"No tap gestures CORRECTLY Set\n");
X                         else if((((mode1>>2)&1)==1) && (((cc>>2)&1)!=1))
X                           fprintf(stderr,"No tap gestures NOT Correctly Set\n");
X                         }
X@@ -621,74 +577,66 @@
X /*   PS/2 Utility functions.                                              */
X /*------------------------------------------------------------------------*/
X 
X-/* write a byte to the ps/2 port, handling ACK */
X-void putbyte(int fd, byte b) {
X-  byte ack;
X-  int waiting = 0;
X-  int ireturn = 0;
X-#ifdef DEBUG
X-  printf("Writing [0x%x] in putbyte\n",b);
X-#endif
X-  write(fd, &b, 1);
X-/*
X-  ireturn = ioctl(fd,FIONREAD,&waiting);
X-  if(waiting < 1)
X-    {
X-    printf("Timed Out waiting for Acknowledgement from Touchpad\n");
X-    }
X-*/
X-  tp_read(fd, &ack, 1);
X-#ifdef DEBUG
X-  printf("Read [0x%x] in putbyte\n",ack);
X-#endif
X-  assert(ack==0xFA);
X+void clear_data(struct mousedata *data)
X+{
X+  data->len = 0;
X }
X-/* read a byte from the ps/2 port */
X-byte getbyte(int fd) {
X-  byte b;
X-  tp_read(fd, &b, 1);
X-#ifdef DEBUG
X-  printf("Read [0x%x] in getbyte\n",b);
X-#endif
X-  return b;
X+
X+void append_data(struct mousedata *data, byte b)
X+{
X+  data->buf[data->len] = b;
X+  data->len++;
X }
X-/* use the Synaptics extended ps/2 syntax to write a special command byte */
X-void send_cmd(int fd, byte cmd) {
X+
X+void append_data_cmd(struct mousedata *data,byte cmd)
X+{
X   int i;
X   /* initialize with 'inert' command */
X-  putbyte(fd, 0xE6);
X+  append_data(data, 0xE6);
X   for (i=0; i<4; i++) {
X-    putbyte(fd, 0xE8);
X-    putbyte(fd, (cmd>>6)&0x3);
X+    append_data(data, 0xE8);
X+    append_data(data, (cmd>>6)&0x3);
X     cmd<<=2;
X   }
X }
X+
X+
X /* write 'cmd' to mode byte 1 */
X void set_mode1(int fd, byte cmd) 
X   {
X+  struct mousedata data;
X+
X   if(single_mode_byte)
X     set_mode2(fd,cmd);
X   else
X     {
X-    send_cmd(fd, cmd);
X-    putbyte(fd, 0xF3);
X-    putbyte(fd, 0x0A);
X+    clear_data(&data);
X+    append_data_cmd(&data,cmd);
X+    append_data(&data, 0xF3);
X+    append_data(&data, 0x0A);
X+    exit_if_false(ioctl(fd,MOUSE_SENDREADCMD,&data)!=-1);
X     }
X   }
X /* write 'cmd' to mode byte 2 */
X void set_mode2(int fd, byte cmd) {
X-  send_cmd(fd, cmd);
X-  putbyte(fd, 0xF3);
X-  putbyte(fd, 0x14);
X+  struct mousedata data;
X+  clear_data(&data);
X+  append_data_cmd(&data,cmd);
X+  append_data(&data, 0xF3);
X+  append_data(&data, 0x14);
X+  exit_if_false(ioctl(fd,MOUSE_SENDREADCMD,&data)!=-1);
X }
X /* read three byte status ('a','b','c') corresponding to register 'cmd' */
X void status_rqst(int fd, byte cmd, byte *byte1, byte *byte2, byte *byte3) {
X-  byte chk;
X-  send_cmd(fd, cmd);
X-  putbyte(fd, 0xE9);
X-  *byte1=getbyte(fd);
X-  *byte2=getbyte(fd);
X-  *byte3=getbyte(fd);
X+  struct mousedata data;
X+  clear_data(&data);
X+  append_data_cmd(&data,cmd);
X+  append_data(&data, 0xE9);
X+  exit_if_false(ioctl(fd,MOUSE_SENDREADCMD,&data)!=-1);
X+  exit_if_false(data.len==3);
X+  *byte1=data.buf[0];
X+  *byte2=data.buf[1];
X+  *byte3=data.buf[2];
X }
X byte get_mode1(int fd) {
X   byte a,b,c;
X@@ -717,10 +665,5 @@
X #ifdef DEBUG
X   printf("In is_touchpad, a,b,c [%x,  %x  %x]\n",a,b,c);
X #endif
X-  while(a == ACK)
X-    { /* 2.2.x kernel fix an extra ack preceeded the status */
X-    a=b;b=c;
X-    c = getbyte(fd);
X-    }
X   return (b==0x47);
X }
END-of-synaptics/patches/patch-aa
echo c - synaptics/pkg
mkdir -p synaptics/pkg > /dev/null 2>&1
echo x - synaptics/pkg/COMMENT
sed 's/^X//' >synaptics/pkg/COMMENT << 'END-of-synaptics/pkg/COMMENT'
XConfigure the synaptics touchpad
END-of-synaptics/pkg/COMMENT
echo x - synaptics/pkg/DESCR
sed 's/^X//' >synaptics/pkg/DESCR << 'END-of-synaptics/pkg/DESCR'
XThis program allows the user to configure a synaptics touchpad -
Xa pointing device used on many laptops.
X
XThe basic program is called tpconfig.  Type tpconfig to see
Xall of its options.  It will not work if any other program
Xis using the mouse (for example moused or X windows).  Also,
Xyou should not touch the touchpad while this program is running.
X
XI have also included a program remouse.  This first kills the
Xmoused daemon, then runs tpconfig with whatever options you have
Xset, and then restarts the moused daemon.
X
XAlso included is a file /usr/local/etc/rc.d/remouse.sh-sample.  You
Xcan make whatever changes you like, and then rename it to
Xremouse.sh, and then remouse will be called upon boot up.
X
XIMPORTANT: this port will not compile or work unless some changes
Xare made to the kernel.  You can find the required changes at
Xhttp://www.freebsd.org/cgi/query-pr.cgi?pr=20352
X
XWWW: http://www.compass.com/synaptics/
X
XStephen Montgomery-Smith
Xstephen@math.missouri.edu
END-of-synaptics/pkg/DESCR
echo x - synaptics/pkg/PLIST
sed 's/^X//' >synaptics/pkg/PLIST << 'END-of-synaptics/pkg/PLIST'
Xbin/tpconfig
Xbin/remouse
Xetc/rc.d/remouse.sh-sample
END-of-synaptics/pkg/PLIST
echo x - synaptics/Makefile
sed 's/^X//' >synaptics/Makefile << 'END-of-synaptics/Makefile'
X# New ports collection makefile for:	synaptics
X# Date created:		September 24 2000
X# Whom:			Stephen Montgomery-Smith <stephen@math.missouri.edu>
X#
X# $FreeBSD:
X#
X
XPORTNAME=		synaptics
XPORTVERSION=		2.2
XCATEGORIES=		sysutils
XMASTER_SITES=		http://www.compass.com/synaptics/
X
XMAINTAINER=		stephen@math.missouri.edu
X
XLIB_DEPENDS=		gnugetopt:${PORTSDIR}/devel/libgnugetopt:install
X
XGNU_CONFIGURE=		yes
XCONFIGURE_ENV+=		CFLAGS="${CFLAGS} -I${PREFIX}/include" \
X			LDFLAGS=-L${PREFIX}/lib \
X			LIBS=-lgnugetopt
X
Xpre-patch:
X	${CHMOD} +w ${WRKSRC}/tpconfig.c
X
Xpost-install:
X	strip ${PREFIX}/bin/tpconfig
X	${INSTALL_SCRIPT} ${FILESDIR}/remouse.sh-sample ${PREFIX}/etc/rc.d
X	${INSTALL_SCRIPT} ${FILESDIR}/remouse ${PREFIX}/bin
X
X.include <bsd.port.mk>
END-of-synaptics/Makefile
exit



>Release-Note:
>Audit-Trail:

From: Stephen Montgomery-Smith <stephen@math.missouri.edu>
To: freebsd-gnats-submit@FreeBSD.org, stephen@math.missouri.edu
Cc:  
Subject: Re: ports/21520: Configure the synaptics touchpad.
Date: Fri, 12 Jan 2001 11:45:07 -0600

 I see that this software I ported from http://www.compass.com/synaptics/
 has been updated, so I am going to work on updating this port -
 and probably be changing its name to tpconfig as well.  So if
 by some small chance someone is working on committing this, please
 wait a day or so.  (Anyway this port is in the old layout.)
 
 -- 
 
 Stephen Montgomery-Smith              stephen@math.missouri.edu
 307 Math Science Building             stephen@showme.missouri.edu
 Department of Mathematics             stephen@missouri.edu
 University of Missouri-Columbia
 Columbia, MO 65211
 USA
 
 Phone (573) 882 4540
 Fax   (573) 882 1869
 
 http://www.math.missouri.edu/~stephen
 

From: Stephen Montgomery-Smith <stephen@math.missouri.edu>
To: freebsd-gnats-submit@FreeBSD.org, stephen@math.missouri.edu
Cc:  
Subject: Re: ports/21520: Configure the synaptics touchpad.
Date: Fri, 12 Jan 2001 21:42:49 -0600

 Now I completely redid this PR, and have submitted as
 
 http://www.freebsd.org/cgi/query-pr.cgi?pr=24299
 
 I hope someone commits this soon.
 
 -- 
 Stephen Montgomery-Smith
 stephen@math.missouri.edu
 http://www.math.missouri.edu/~stephen
 
State-Changed-From-To: open->closed 
State-Changed-By: steve 
State-Changed-When: Sun Feb 25 17:58:43 PST 2001 
State-Changed-Why:  
Superceded by ports/24299. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=21520 
>Unformatted:
 Stephen Montgomery-Smith
