Subject: Re: kern/26117
To: Matthias Scheler <tron@zhadum.de>
From: Dieter <netbsd@sopwith.solgatos.com>
List: netbsd-bugs
Date: 09/08/2005 09:04:26
> Please use "diff -u" or "cvs diff -u" to generate diffs. It makes them
> better readable and keeps "patch" happy.

Here is the output from "rcsdiff -r1.1 -u sanei/sanei_usb.c":


--- sanei/sanei_usb.c	2004/06/16 18:44:05	1.1
+++ sanei/sanei_usb.c	2004/06/23 23:02:41
@@ -65,6 +65,12 @@
 #include "../include/sane/sanei_usb.h"
 #include "../include/sane/sanei_config.h"
 
+#ifdef __NetBSD__
+#include <dev/usb/usb.h>
+/* #include <dev/usb/usbhid.h>  */  /* got a redefine */
+#include <sys/ioctl.h>
+#endif
+
 typedef enum
 {
   sanei_usb_method_scanner_driver = 0,	/* kernel scanner driver 
@@ -194,8 +200,39 @@
 	DBG (3, "sanei_usb_get_vendor_product: ioctl (product) "
 	     "of device %d failed: %s\n", fd, strerror (errno));
     }
-#endif /* defined (__linux__) */
+  /* end of defined (__linux__) */
+#elif defined (__NetBSD__)
+  {
+#if 1  /* Needs ioctl added to NetBSD */
+
+    /* DBG output not showing up ? */
+
+    struct usb_device_info struct_usb_device_info;
+    if (ioctl (fd, USB_GET_DEVICEINFO, &struct_usb_device_info) == -1)
+      {
+	DBG (1, "kernel_get_vendor_product: ioctl (usb_deviceinfo, for vendor & product IDs) "
+	     "of device %d failed: %s\n", fd, strerror (errno));
+	perror("NetBSD uscanner ioctl(usb_deviceinfo) failed");
+      }
+    else
+      {
+	*vendorID  = (int) struct_usb_device_info.udi_vendorNo;
+	*productID = (int) struct_usb_device_info.udi_productNo;
+	DBG (2, "NetBSD uscanner ioctl says: vendorID = 0x%04x  productID = 0x%04x\n", *vendorID, *productID);
+	fprintf(stderr, "NetBSD uscanner ioctl says: vendorID = 0x%04x  productID = 0x%04x\n", *vendorID, *productID);
+      }
+#endif
+#ifdef HARD_CODE_NETBSD_EPSON_2400
+#warning temp hack for NetBSD to add vendorID productID Epson 2400
+    DBG (1, "NetBSD vendorID productID hardcoded hack\n");
+    *vendorID  = 0x04b8 ; /* Seiko Epson */
+    *productID = 0x011b ; /* Perfection 2400 scanner */
+#endif HARD_CODE_NETBSD_EPSON_2400
+  }
+#else
       /* put more os-dependant stuff ... */
+#warning "You need to add support for your OS"
+#endif 
 }
 
 void
@@ -955,7 +992,8 @@
 	print_buffer (data, len);
       return SANE_STATUS_GOOD;
 #else /* not __linux__ */
-      DBG (5, "sanei_usb_control_msg: not supported on this OS\n");
+#warning "sanei_usb_control_msg: not supported on this OS"
+      DBG (1, "sanei_usb_control_msg: not supported on this OS\n");
       return SANE_STATUS_UNSUPPORTED;
 #endif /* not __linux__ */
     }