]> git.ipfire.org Git - people/teissler/ipfire-2.x.git/blobdiff - src/hwinfo/src/hd/mouse.c
Hwinfo-Hardwareerkennung entfernt.
[people/teissler/ipfire-2.x.git] / src / hwinfo / src / hd / mouse.c
diff --git a/src/hwinfo/src/hd/mouse.c b/src/hwinfo/src/hd/mouse.c
deleted file mode 100644 (file)
index 83a576b..0000000
+++ /dev/null
@@ -1,785 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <errno.h>
-#include <termios.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-#include <sys/time.h>
-#include <sys/ioctl.h>
-
-#include "hd.h"
-#include "hd_int.h"
-#include "mouse.h"
-
-/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- * mouse info
- *
- * TODO: reset serial lines to old values (cf. modem.c)
- *
- * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- */
-
-#ifndef LIBHD_TINY
-
-#if 0
-static unsigned read_data(hd_data_t *hd_data, int fd, unsigned char *buf, unsigned buf_size);
-static void get_ps2_mouse(hd_data_t *hd_data);
-static void test_ps2_open(void *arg);
-#endif
-
-static void get_serial_mouse(hd_data_t* hd_data);
-static void add_serial_mouse(hd_data_t* hd_data);
-static int _setspeed(int fd, int old, int new, int needtowrite, unsigned short flags);
-static void setspeed(int fd, int new, int needtowrite, unsigned short flags);
-static unsigned chk4id(ser_device_t *mi);
-static ser_device_t *add_ser_mouse_entry(ser_device_t **sm, ser_device_t *new_sm);
-static void dump_ser_mouse_data(hd_data_t *hd_data);
-#if 0
-static void get_sunmouse(hd_data_t *hd_data);
-#endif
-
-void hd_scan_mouse(hd_data_t *hd_data)
-{
-  ser_device_t *sm, *sm_next;
-
-  if(!hd_probe_feature(hd_data, pr_mouse)) return;
-
-  hd_data->module = mod_mouse;
-
-  /* some clean-up */
-  remove_hd_entries(hd_data);
-  hd_data->ser_mouse = NULL;
-
-#if 0
-  PROGRESS(1, 0, "ps/2");
-
-  get_ps2_mouse(hd_data);
-#endif
-
-  PROGRESS(2, 0, "serial");
-
-  hd_fork(hd_data, 20, 20);
-
-  if(hd_data->flags.forked) {
-    get_serial_mouse(hd_data);
-    hd_move_to_shm(hd_data);
-    if((hd_data->debug & HD_DEB_MOUSE)) dump_ser_mouse_data(hd_data);
-  }
-  else {
-    /* take data from shm */
-    hd_data->ser_mouse = ((hd_data_t *) (hd_data->shm.data))->ser_mouse;
-    if((hd_data->debug & HD_DEB_MOUSE)) dump_ser_mouse_data(hd_data);
-  }
-
-  hd_fork_done(hd_data);
-
-  add_serial_mouse(hd_data);
-
-  hd_shm_clean(hd_data);
-
-  for(sm = hd_data->ser_mouse; sm; sm = sm_next) {
-    sm_next = sm->next;
-
-    free_mem(sm->dev_name);
-    free_mem(sm);
-  }
-  hd_data->ser_mouse = NULL;
-
-#if 0
-  PROGRESS(3, 0, "sunmouse");
-
-  get_sunmouse(hd_data);
-#endif
-}
-
-
-#if 0
-unsigned read_data(hd_data_t *hd_data, int fd, unsigned char *buf, unsigned buf_size)
-{
-  int k, len = 0;
-  unsigned char *bp;
-
-  while(
-    (unsigned) len < buf_size &&
-    (k = read(fd, buf + len, buf_size - len)) >= 0
-  ) len += k;
-
-  bp = buf;
-  if(len && (*bp == 0xfe || *bp == 0xfa)) { bp++; len--; }
-
-  for(k = 0; k < len; k++) buf[k] = bp[k];
-
-  if((hd_data->debug & HD_DEB_MOUSE)) {
-    ADD2LOG("ps/2[%d]: ", len);
-    hexdump(&hd_data->log, 1, len, buf);
-    ADD2LOG("\n");
-  }
-
-  return len;
-}
-
-
-/*
- * How it works:
- *
- * 1. There must exist a PS/2 controller entry (-> there is a PS/2 port).
- * 2. If there are PS/2 mouse irq events, assume a PS/2 mouse is attached.
- * 3. Otherwise:
- *      - open /dev/psaux
- *      - write the "get mouse info" command (0xe9)
- *      - read back the response, which should be either 0xfe "resend data"
- *        or, e.g. (0xfa) 0x20 0x02 0x3c (0xfa = "ACK" (should be swallowed
- *        by the psaux driver, but isn't), the rest are settings)
- *      - ignore the first byte if it is 0xfa or 0xfe
- *      - if there are at least 2 bytes left, assume a mouse is attached.
- *
- * Note1: we could use the command 0xfe "get mouse ID" instead. But that turned
- *        out to be less reliable, as this command returns only one byte, which
- *        is even 0.
- * Note2: step 2 is mainly relevant if the mouse is already in use. In that
- *        case we would have problems reading back the respose of our command.
- *        (Typically the mouse driver will get it (and choke on it).)
- */
-
-static void get_ps2_mouse(hd_data_t *hd_data)
-{
-  hd_t *hd, *hd1;
-  hd_res_t *res;
-  int fd;
-  fd_set set;
-  struct timeval tv;
-  unsigned char cmd_mouse_info = 0xe9; /* read mouse info (3 bytes) */
-  unsigned char cmd_mouse_id = 0xf2;   /* read mouse id (1 byte) */
-  unsigned char buf[100];
-  unsigned mouse_id = -1;
-  static unsigned char intelli_init[] = { 0xf3, 200, 0xf3, 100, 0xf3, 80 };
-  int buf_len = 0;
-#ifdef __PPC__
-  int always_ps2_mouse = 0;
-#endif
-
-  for(hd1 = hd_data->hd; hd1; hd1 = hd1->next) {
-    /* look for a PS/2 controller entry... */
-    if(hd1->base_class.id == bc_ps2) {
-      /* ...and see if there were irq events... */
-      for(res = hd1->res; res; res = res->next) {
-        if(res->irq.type == res_irq && res->irq.triggered) break;
-      }
-
-#ifdef __PPC__
-      /*
-       * On PReP & CHRP, assume a PS/2 mouse to be attached.
-       * There seems to be no way to actually *detect* it.
-       */
-      if(!res) {
-        hd_t *hd;
-        sys_info_t *st;
-
-        if((hd = hd_list(hd_data, hw_sys, 0, NULL))) {
-          if(
-            hd->detail &&
-            hd->detail->type == hd_detail_sys &&
-            (st = hd->detail->sys.data) &&
-            (
-              !strcmp(st->system_type, "PReP") ||
-              strstr(st->system_type, "CHRP") == st->system_type       /* CHRP && CHRP64 */
-            )
-          ) {
-            always_ps2_mouse = 1;
-          }
-        }
-      }
-#endif
-
-      PROGRESS(1, 1, "ps/2");
-
-      /* open the mouse device... */
-      if(hd_timeout(test_ps2_open, NULL, 2) > 0) {
-        ADD2LOG("ps/2: open(%s) timed out\n", DEV_PSAUX);
-        fd = -2;
-      }
-      else {
-        fd = open(DEV_PSAUX, O_RDWR | O_NONBLOCK);
-      }
-
-      PROGRESS(1, 2, "ps/2");
-
-      if(fd >= 0) {
-        /* ...write the id command... */
-
-        PROGRESS(1, 3, "ps/2");
-
-        write(fd, intelli_init, sizeof intelli_init);
-        usleep(25000);
-        read_data(hd_data, fd, buf, sizeof buf);
-
-        if(write(fd, &cmd_mouse_id, 1) == 1) {
-
-          PROGRESS(1, 4, "ps/2");
-          usleep(50000);        /* ...give it a chance to react... */
-
-          /* ...read the response... */
-          buf_len = read_data(hd_data, fd, buf, sizeof buf);
-
-          if(buf_len >= 1) mouse_id = buf[buf_len - 1];
-
-          // if we didn't get any response, try this
-          if(buf_len == 0 || (hd_data->debug & HD_DEB_MOUSE)) {
-            PROGRESS(1, 5, "ps/2");
-            if(write(fd, &cmd_mouse_info, 1) == 1) {
-              usleep(50000);
-              buf_len = read_data(hd_data, fd, buf, sizeof buf);
-              /*
-               * Assume a mouse to be attached if at least 2 bytes are
-               * returned.
-               */
-              if(mouse_id == -1u && buf_len >= 2) mouse_id = 0;
-            }
-          }
-
-          PROGRESS(1, 6, "ps/2");
-        }
-        close(fd);
-
-        PROGRESS(1, 7, "ps/2");
-
-        /*
-         * The following code is apparently necessary on some board/mouse
-         * combinations. Otherwise the PS/2 mouse won't work.
-         */
-        if((fd = open(DEV_PSAUX, O_RDONLY | O_NONBLOCK)) >= 0) {
-          PROGRESS(1, 8, "ps/2");
-
-          FD_ZERO(&set);
-          FD_SET(fd, &set);
-          tv.tv_sec = 0; tv.tv_usec = 1;
-          if(select(fd + 1, &set, NULL, NULL, &tv) == 1) {
-            PROGRESS(1, 9, "ps/2");
-
-            read(fd, buf, sizeof buf);
-
-            PROGRESS(1, 10, "ps/2");
-          }
-          PROGRESS(1, 11, "ps/2");
-
-          close(fd);
-
-          PROGRESS(1, 12, "ps/2");
-        }
-      }
-      else {
-        ADD2LOG("open(" DEV_PSAUX "): %s\n", fd == -1 ? strerror(errno) : "timeout");
-      }
-
-      if(mouse_id == -1u) {
-
-        /*
-         * Assume a PS/2 mouse is attached if the ps/2 controller has
-         * genetrated some events.
-         */
-
-        if(
-          res
-#ifdef __PPC__
-          || always_ps2_mouse
-#endif
-        ) {
-          PROGRESS(1, 13, "ps/2");
-          mouse_id = 0;
-        }
-      }
-
-      if(mouse_id != -1u) {
-        PROGRESS(1, 14, "ps/2");
-
-        hd = add_hd_entry(hd_data, __LINE__, 0);
-        hd->base_class.id = bc_mouse;
-        hd->sub_class.id = sc_mou_ps2;
-        hd->bus.id = bus_ps2;
-        hd->unix_dev_name = new_str(DEV_MICE);
-        hd->attached_to = hd1->idx;
-
-        hd->vendor.id = MAKE_ID(TAG_SPECIAL, 0x0200);
-        switch(mouse_id) {
-          case 3:              /* 3 buttons + wheel */
-            hd->device.id = MAKE_ID(TAG_SPECIAL, 0x0004);
-            break;
-
-          case 4:              /* 5 buttons + wheel */
-            hd->device.id = MAKE_ID(TAG_SPECIAL, 0x0005);
-            break;
-
-          default:     /* 0 */
-            hd->device.id = MAKE_ID(TAG_SPECIAL, 0x0002);
-        }
-      }
-
-      /* there can only be one... */
-      break;
-    }
-  }
-}
-
-void test_ps2_open(void *arg)
-{
-  open(DEV_PSAUX, O_RDWR | O_NONBLOCK);
-}
-#endif
-
-#if 0
-static void get_sunmouse(hd_data_t *hd_data)
-{
-  hd_t *hd;
-  int fd;
-  int found;
-
-  found = 0;
-
-  /* Only search for Sun mouse if we have a Sun keyboard */
-  for(hd = hd_data->hd; hd; hd = hd->next)
-    {
-      if(hd->base_class.id == bc_keyboard &&
-        hd->sub_class.id == sc_keyboard_kbd &&
-        ID_TAG(hd->vendor.id) == TAG_SPECIAL && ID_VALUE(hd->vendor.id) == 0x0202)
-       found = 1;
-    }
-
-  if (found)
-    {
-      if ((fd = open(DEV_SUNMOUSE, O_RDONLY)) != -1)
-       {
-         /* FIXME: Should probably talk to the mouse to see
-            if the connector is not empty. */
-         close (fd);
-
-         PROGRESS(1, 1, "Sun Mouse");
-
-         hd = add_hd_entry (hd_data, __LINE__, 0);
-         hd->base_class.id = bc_mouse;
-         hd->sub_class.id = sc_mou_sun;
-         hd->bus.id = bus_serial;
-         hd->unix_dev_name = new_str(DEV_SUNMOUSE);
-
-         hd->vendor.id = MAKE_ID(TAG_SPECIAL, 0x0202);
-         hd->device.id = MAKE_ID(TAG_SPECIAL, 0x0000);
-       }
-    }
-}
-#endif
-
-/*
- * Gather serial mouse data and put it into hd_data->ser_mouse.
- */
-void get_serial_mouse(hd_data_t *hd_data)
-{
-  hd_t *hd;
-  int j, fd, fd_max = 0, sel, max_len;
-  unsigned modem_info;
-  fd_set set, set0;
-  struct timeval to;
-  ser_device_t *sm;
-  struct termios tio;
-
-  FD_ZERO(&set);
-
-  for(hd = hd_data->hd; hd; hd = hd->next) {
-    if(
-      hd->base_class.id == bc_comm &&
-      hd->sub_class.id == sc_com_ser &&
-      hd->unix_dev_name &&
-      !hd->tag.ser_skip &&
-      !has_something_attached(hd_data, hd)
-    ) {
-      if((fd = open(hd->unix_dev_name, O_RDWR | O_NONBLOCK)) >= 0) {
-        if(tcgetattr(fd, &tio)) continue;
-        sm = add_ser_mouse_entry(&hd_data->ser_mouse, new_mem(sizeof *sm));
-        sm->dev_name = new_str(hd->unix_dev_name);
-        sm->fd = fd;
-        sm->tio = tio;
-        sm->hd_idx = hd->idx;
-        if(fd > fd_max) fd_max = fd;
-        FD_SET(fd, &set);
-
-        /*
-         * PnP COM spec black magic...
-         */
-        setspeed(fd, 1200, 1, CS7);
-        modem_info = TIOCM_DTR | TIOCM_RTS;
-        ioctl(fd, TIOCMBIC, &modem_info);
-      }
-    }
-  }
-
-  if(!hd_data->ser_mouse) return;
-
-  /*
-   * 200 ms seems to be too fast for some mice...
-   */
-  usleep(300000);              /* PnP protocol */
-
-  for(sm = hd_data->ser_mouse; sm; sm = sm->next) {
-    modem_info = TIOCM_DTR | TIOCM_RTS;
-    ioctl(sm->fd, TIOCMBIS, &modem_info);
-  }
-
-  /* smaller buffer size, otherwise we might wait really long... */
-  max_len = sizeof sm->buf < 128 ? sizeof sm->buf : 128;
-
-  to.tv_sec = 0; to.tv_usec = 300000;
-
-  set0 = set;
-  for(;;) {
-   to.tv_sec = 0; to.tv_usec = 300000;
-    set = set0;
-    if((sel = select(fd_max + 1, &set, NULL, NULL, &to)) > 0) {
-      for(sm = hd_data->ser_mouse; sm; sm = sm->next) {
-        if(FD_ISSET(sm->fd, &set)) {
-          if((j = read(sm->fd, sm->buf + sm->buf_len, max_len - sm->buf_len)) > 0)
-            sm->buf_len += j;
-          if(j <= 0) FD_CLR(sm->fd, &set0);    // #####
-        }
-      }
-    }
-    else {
-      break;
-    }
-  }
-
-  for(sm = hd_data->ser_mouse; sm; sm = sm->next) {
-    chk4id(sm);
-    /* reset serial lines */
-    tcflush(sm->fd, TCIOFLUSH);
-    tcsetattr(sm->fd, TCSAFLUSH, &sm->tio);
-    close(sm->fd);
-  }
-}
-
-
-/*
- * Go through serial mouse data and add hd entries.
- */
-void add_serial_mouse(hd_data_t *hd_data)
-{
-  hd_t *hd;
-  char buf[4];
-  ser_device_t *sm;
-
-  for(sm = hd_data->ser_mouse; sm; sm = sm->next) {
-    if(sm->is_mouse) {
-      hd = add_hd_entry(hd_data, __LINE__, 0);
-      hd->base_class.id = bc_mouse;
-      hd->sub_class.id = sc_mou_ser;
-      hd->bus.id = bus_serial;
-      hd->unix_dev_name = new_str(sm->dev_name);
-      hd->attached_to = sm->hd_idx;
-      if(*sm->pnp_id) {
-        strncpy(buf, sm->pnp_id, 3);
-        buf[3] = 0;
-        hd->vendor.id = name2eisa_id(buf);
-        if(!hd->vendor.id) {   /* in case it's a really strange one... */
-          hd->vendor.name = new_str(buf);
-        }
-        hd->device.id = MAKE_ID(TAG_EISA, strtol(sm->pnp_id + 3, NULL, 16));
-
-        hd->serial = new_str(sm->serial);
-        if(sm->user_name) hd->device.name = new_str(sm->user_name);
-        if(sm->vend) {
-          free_mem(hd->vendor.name);
-          hd->vendor.name = new_str(sm->vend);
-        }
-
-        if(sm->dev_id && strlen(sm->dev_id) >= 7) {
-          char buf[5], *s;
-          unsigned u1, u2;
-
-          u1 = name2eisa_id(sm->dev_id);
-          if(u1) {
-            strncpy(buf, sm->dev_id + 3, 4);
-            buf[4] = 0;
-            u2 = strtol(sm->dev_id + 3, &s, 16);
-            if(!*s) {
-              hd->compat_vendor.id = u1;
-              hd->compat_device.id = MAKE_ID(TAG_EISA, u2);
-            }
-          }
-        }
-      }
-      else {
-        hd->vendor.id = MAKE_ID(TAG_SPECIAL, 0x0200);
-        hd->device.id = MAKE_ID(TAG_SPECIAL, 0x0003);
-      }
-    }
-  }
-}
-
-
-/*
- * Baud setting magic taken from gpm.
- */
-
-int _setspeed(int fd, int old, int new, int needtowrite, unsigned short flags)
-{
-  struct termios tty;
-  char *c;
-  int err = 0;
-
-  flags |= CREAD | CLOCAL | HUPCL;
-
-  if(tcgetattr(fd, &tty)) return errno;
-
-  tty.c_iflag = IGNBRK | IGNPAR;
-  tty.c_oflag = 0;
-  tty.c_lflag = 0;
-  tty.c_line = 0;
-  tty.c_cc[VTIME] = 0;
-  tty.c_cc[VMIN] = 1;
-
-  switch (old)
-    {
-    case 9600:  tty.c_cflag = flags | B9600; break;
-    case 4800:  tty.c_cflag = flags | B4800; break;
-    case 2400:  tty.c_cflag = flags | B2400; break;
-    case 1200:
-    default:    tty.c_cflag = flags | B1200; break;
-    }
-
-  if(tcsetattr(fd, TCSAFLUSH, &tty)) return errno;
-
-  switch (new)
-    {
-    case 9600:  c = "*q";  tty.c_cflag = flags | B9600; break;
-    case 4800:  c = "*p";  tty.c_cflag = flags | B4800; break;
-    case 2400:  c = "*o";  tty.c_cflag = flags | B2400; break;
-    case 1200:
-    default:    c = "*n";  tty.c_cflag = flags | B1200; break;
-    }
-
-  if(needtowrite) {
-    err = 2 - write(fd, c, 2);
-  }
-
-  usleep(100000);
-
-  if(tcsetattr(fd, TCSAFLUSH, &tty)) return errno;
-
-  return err;
-}
-
-
-void setspeed(int fd, int new, int needtowrite, unsigned short flags)
-{
-  int i, err;
-
-  for(i = 9600; i >= 1200; i >>= 1) {
-    err = _setspeed(fd, i, new, needtowrite, flags);
-#if 0
-    if(err) {
-      fprintf(stderr, "%d, %d ", i, err);
-      perror("");
-    }
-#endif
-  }
-}
-
-
-#if 0
-/*
- * Check for a PnP info field starting at ofs;
- * returns either the length of the field or 0 if none was found.
- *
- * the minfo_t struct is updated with the PnP data
- */
-int is_pnpinfo(ser_device_t *mi, int ofs)
-{
-  int i;
-  unsigned char *s = mi->buf + ofs;
-  int len = mi->buf_len - ofs;
-
-  if(len <= 0) return 0;
-
-  switch(*s) {
-    case 0x08:
-      mi->bits = 6; break;
-    case 0x28:
-      mi->bits = 7; break;
-    default:
-      return 0;
-  }
-
-  if(len < 11) return 0;
-
-  /* six bit values */
-  if((s[1] & ~0x3f) || (s[2] & ~0x3f)) return 0;
-  mi->pnp_rev = (s[1] << 6) + s[2];
-
-  /* the eisa id */
-  for(i = 0; i < 7; i++) {
-    mi->pnp_id[i] = s[i + 3];
-    if(mi->bits == 6) mi->pnp_id[i] += 0x20;
-  }
-  mi->pnp_id[7] = 0;
-
-  /* now check the id */
-  for(i = 0; i < 3; i++) {
-    if(
-      (mi->pnp_id[i] < 'A' || mi->pnp_id[i] > 'Z') &&
-      mi->pnp_id[i] != '_'
-    ) return 0;
-  }
-
-  for(i = 3; i < 7; i++) {
-    if(
-      (mi->pnp_id[i] < '0' || mi->pnp_id[i] > '9') &&
-      (mi->pnp_id[i] < 'A' || mi->pnp_id[i] > 'F')
-    ) return 0;
-  }
-
-  if(
-    (mi->bits == 6 && s[10] == 0x09) ||
-    (mi->bits == 7 && s[10] == 0x29)
-  ) {
-    return 11;
-  }
-
-  if(
-    (mi->bits != 6 || s[10] != 0x3c) &&
-    (mi->bits != 7 || s[10] != 0x5c)
-  ) {
-    return 0;
-  }
-
-  /* skip extended info */
-  for(i = 11; i < len; i++) {
-    if(
-      (mi->bits == 6 && s[i] == 0x09) ||
-      (mi->bits == 7 && s[i] == 0x29)
-    ) {
-      return i + 1;
-    }
-  }
-
-  /*
-   * some mice have problems providing the extended info -> return ok in
-   * these cases too
-   */
-  if(
-    (mi->bits == 6 && s[10] == 0x3c) ||
-    (mi->bits == 7 && s[10] == 0x5c)
-  ) {
-    return 11;
-  }
-
-  /* no end token... */
-
-  return 0;
-}
-#endif
-
-unsigned chk4id(ser_device_t *mi)
-{
-  int i;
-
-#if 0
-  unsigned char fake[] =
-  {
-    // fake pnp data
-  };
-
-  mi->buf_len = sizeof fake;
-  memcpy(mi->buf, fake, mi->buf_len);
-  // for(i = 0; i < mi->buf_len; i++) mi->buf[i] += ' ';
-#endif
-
-  if(!mi->buf_len) return 0;
-
-  for(i = 0; i < mi->buf_len; i++) {
-    if((mi->pnp = is_pnpinfo(mi, i))) break;
-  }
-  if(i == mi->buf_len) {
-    /* non PnP, but MS compatible */
-    if(*mi->buf == 'M')
-      mi->non_pnp = mi->buf_len - 1;
-    else
-      return 0;
-  }
-
-  mi->garbage = i;
-
-  for(i = 0; i < mi->garbage; i++) {
-    if(mi->buf[i] == 'M') {
-      mi->non_pnp = mi->garbage - i;
-      mi->garbage = i;
-      break;
-    }
-  }
-
-  if(mi->non_pnp || mi->bits == 6) mi->is_mouse = 1;
-
-  return mi->is_mouse;
-}
-
-ser_device_t *add_ser_mouse_entry(ser_device_t **sm, ser_device_t *new_sm)
-{
-  while(*sm) sm = &(*sm)->next;
-  return *sm = new_sm;
-}
-
-
-void dump_ser_mouse_data(hd_data_t *hd_data)
-{
-  int j;
-  ser_device_t *sm;
-
-  if(!(sm = hd_data->ser_mouse)) return;
-
-  ADD2LOG("----- serial mice -----\n");
-
-  for(; sm; sm = sm->next) {
-    ADD2LOG("%s\n", sm->dev_name);
-    if(sm->serial) ADD2LOG("serial: \"%s\"\n", sm->serial);
-    if(sm->class_name) ADD2LOG("class_name: \"%s\"\n", sm->class_name);
-    if(sm->dev_id) ADD2LOG("dev_id: \"%s\"\n", sm->dev_id);
-    if(sm->user_name) ADD2LOG("user_name: \"%s\"\n", sm->user_name);
-
-    if(sm->garbage) {
-      ADD2LOG("  garbage[%u]: ", sm->garbage);
-      hexdump(&hd_data->log, 1, sm->garbage, sm->buf);
-      ADD2LOG("\n");
-    }
-
-    if(sm->non_pnp) {
-      ADD2LOG("  non-pnp[%u]: ", sm->non_pnp);
-      hexdump(&hd_data->log, 1, sm->non_pnp, sm->buf + sm->garbage);
-      ADD2LOG("\n");
-    }
-
-    if(sm->pnp) {
-      ADD2LOG("  pnp[%u]: ", sm->pnp);
-      hexdump(&hd_data->log, 1, sm->pnp, sm->buf + sm->garbage + sm->non_pnp);
-      ADD2LOG("\n");
-    }
-
-    if((j = sm->buf_len - (sm->garbage + sm->non_pnp + sm->pnp))) {
-      ADD2LOG("  moves[%u]: ", j);
-      hexdump(&hd_data->log, 1, j, sm->buf + sm->garbage + sm->non_pnp + sm->pnp);
-      ADD2LOG("\n");
-    }
-
-    if(sm->is_mouse) ADD2LOG("  is mouse\n");
-
-    if(sm->pnp) {
-      ADD2LOG("  bits: %u\n", sm->bits);
-      ADD2LOG("  PnP Rev: %u.%02u\n", sm->pnp_rev / 100, sm->pnp_rev % 100);
-      ADD2LOG("  PnP ID: \"%s\"\n", sm->pnp_id);
-    }
-
-    if(sm->next) ADD2LOG("\n");
-  }
-
-  ADD2LOG("----- serial mice end -----\n");
-}
-
-#endif         /* !defined(LIBHD_TINY) */