Author: hselasky
Date: Mon Oct  1 05:48:46 2012
New Revision: 241084
URL: http://svn.freebsd.org/changeset/base/241084

Log:
  MFC r240891:
  Improve moused when used with USB mouse devices.

Modified:
  stable/9/etc/devd.conf
  stable/9/usr.sbin/moused/moused.c
Directory Properties:
  stable/9/etc/   (props changed)
  stable/9/usr.sbin/   (props changed)
  stable/9/usr.sbin/moused/   (props changed)

Modified: stable/9/etc/devd.conf
==============================================================================
--- stable/9/etc/devd.conf      Mon Oct  1 05:43:24 2012        (r241083)
+++ stable/9/etc/devd.conf      Mon Oct  1 05:48:46 2012        (r241084)
@@ -114,14 +114,22 @@ detach 100 {
        action "/etc/rc.d/syscons setkeyboard /dev/kbd0";
 };
 
-attach 100 {
-       device-name "ums[0-9]+";
-       action "/etc/rc.d/moused quietstart $device-name";
+notify 100 {
+       match "system" "DEVFS";
+       match "subsystem" "CDEV";
+       match "type" "CREATE";
+       match "cdev" "ums[0-9]+";
+
+       action "/etc/rc.d/moused quietstart $cdev";
 };
 
-detach 100 {
-        device-name "ums[0-9]+";
-        action "/etc/rc.d/moused stop $device-name";
+notify 100 {
+       match "system" "DEVFS";
+       match "subsystem" "CDEV";
+       match "type" "DESTROY";
+       match "cdev" "ums[0-9]+";
+
+       action "/etc/rc.d/moused stop $cdev";
 };
 
 # Firmware download into the ActiveWire board. After the firmware download is

Modified: stable/9/usr.sbin/moused/moused.c
==============================================================================
--- stable/9/usr.sbin/moused/moused.c   Mon Oct  1 05:43:24 2012        
(r241083)
+++ stable/9/usr.sbin/moused/moused.c   Mon Oct  1 05:48:46 2012        
(r241084)
@@ -408,6 +408,7 @@ static struct rodentparam {
     int cfd;                   /* /dev/consolectl file descriptor */
     int mremsfd;               /* mouse remote server file descriptor */
     int mremcfd;               /* mouse remote client file descriptor */
+    int is_removable;          /* set if device is removable, like USB */
     long clickthreshold;       /* double click speed in msec */
     long button2timeout;       /* 3 button emulation timeout */
     mousehw_t hw;              /* mouse device hardware information */
@@ -434,6 +435,7 @@ static struct rodentparam {
     .cfd = -1,
     .mremsfd = -1,
     .mremcfd = -1,
+    .is_removable = 0,
     .clickthreshold = DFLT_CLICKTHRESHOLD,
     .button2timeout = DFLT_BUTTON2TIMEOUT,
     .accelx = 1.0,
@@ -570,7 +572,6 @@ main(int argc, char *argv[])
     int c;
     int        i;
     int        j;
-    static int retry;
 
     for (i = 0; i < MOUSE_MAXBUTTON; ++i)
        mstate[i] = &bstate[i];
@@ -876,10 +877,8 @@ main(int argc, char *argv[])
        usage();
     }
 
-    retry = 1;
-    if (strncmp(rodent.portname, "/dev/ums", 8) == 0) {
-       retry = 5;
-    }
+    if (strncmp(rodent.portname, "/dev/ums", 8) == 0)
+       rodent.is_removable = 1;
 
     for (;;) {
        if (setjmp(env) == 0) {
@@ -888,13 +887,8 @@ main(int argc, char *argv[])
            signal(SIGQUIT, cleanup);
            signal(SIGTERM, cleanup);
            signal(SIGUSR1, pause_mouse);
-           for (i = 0; i < retry; ++i) {
-               if (i > 0)
-                   sleep(2);
-               rodent.mfd = open(rodent.portname, O_RDWR | O_NONBLOCK);
-               if (rodent.mfd != -1 || errno != ENOENT)
-                   break;
-           }
+
+           rodent.mfd = open(rodent.portname, O_RDWR | O_NONBLOCK);
            if (rodent.mfd == -1)
                logerr(1, "unable to open %s", rodent.portname);
            if (r_identify() == MOUSE_PROTO_UNKNOWN) {
@@ -944,6 +938,8 @@ main(int argc, char *argv[])
        if (rodent.cfd != -1)
            close(rodent.cfd);
        rodent.mfd = rodent.cfd = -1;
+       if (rodent.is_removable)
+               exit(0);
     }
     /* NOT REACHED */
 
_______________________________________________
svn-src-stable-9@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-stable-9
To unsubscribe, send any mail to "svn-src-stable-9-unsubscr...@freebsd.org"

Reply via email to