uticom firmware

Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
From: Alexander Schrijver
Date: Thursday, December 16, 2010 - 2:56 pm

This diff makes the uticom(4) driver work on my machine with an Abbott USB
converter, which is used to connect to the Abbott Freestyle series glucose
meter.

This makes the firmware loading work again.

Index: usbdevs
===================================================================
RCS file: /home/cvsync/src/sys/dev/usb/usbdevs,v
retrieving revision 1.531
diff -u -r1.531 usbdevs
--- usbdevs	15 Dec 2010 16:49:03 -0000	1.531
+++ usbdevs	16 Dec 2010 21:38:55 -0000
@@ -548,6 +548,7 @@
 vendor ZTE		0x19d2	ZTE Inc.
 vendor QUANTA		0x1a32	Quanta
 vendor TERMINUS		0x1a40	Terminus Technology
+vendor ABBOTT		0x1a61	Abbott Labs
 vendor BAYER		0x1a79	Bayer Health Care
 vendor WCH2		0x1a86	QinHeng Electronics
 vendor MATRIXORB	0x1b3d	Matrix Orbital
@@ -635,6 +636,9 @@
 product 3COMUSR USR56K		0x3021	U.S.Robotics 56000
 
 product HUAWEI3COM WUB320G	0x0009	Aolynk WUB320g
+
+/* Abbott products */
+product ABBOTT STEREO_PLUG	0x3410	Stereo Plug Cable
 
 /* AboCom products */
 product ABOCOM XX1		0x110c	XX1
Index: usbdevs.h
===================================================================
RCS file: /home/cvsync/src/sys/dev/usb/usbdevs.h,v
retrieving revision 1.541
diff -u -r1.541 usbdevs.h
--- usbdevs.h	15 Dec 2010 16:51:39 -0000	1.541
+++ usbdevs.h	16 Dec 2010 21:38:55 -0000
@@ -1,4 +1,4 @@
-/*	$OpenBSD: usbdevs.h,v 1.541 2010/12/15 16:51:39 damien Exp $	*/
+/*	$OpenBSD$	*/
 
 /*
  * THIS FILE IS AUTOMATICALLY GENERATED.  DO NOT EDIT.
@@ -555,6 +555,7 @@
 #define	USB_VENDOR_ZTE	0x19d2		/* ZTE Inc. */
 #define	USB_VENDOR_QUANTA	0x1a32		/* Quanta */
 #define	USB_VENDOR_TERMINUS	0x1a40		/* Terminus Technology */
+#define	USB_VENDOR_ABBOTT	0x1a61		/* Abbott Labs */
 #define	USB_VENDOR_BAYER	0x1a79		/* Bayer Health Care */
 #define	USB_VENDOR_WCH2	0x1a86		/* QinHeng Electronics */
 #define	USB_VENDOR_MATRIXORB	0x1b3d		/* Matrix Orbital */
@@ -642,6 +643,9 @@
 #define	USB_PRODUCT_3COMUSR_USR56K	0x3021		/* U.S.Robotics 56000 */
 
 #define	USB_PRODUCT_HUAWEI3COM_WUB320G	0x0009		/* Aolynk WUB320g */
+
+/* Abbott products */
+#define	USB_PRODUCT_ABBOTT_STEREO_PLUG	0x3410		/* Stereo Plug Cable */
 
 /* AboCom products */
 #define	USB_PRODUCT_ABOCOM_XX1	0x110c		/* XX1 */
Index: usbdevs_data.h
===================================================================
RCS file: /home/cvsync/src/sys/dev/usb/usbdevs_data.h,v
retrieving revision 1.535
diff -u -r1.535 usbdevs_data.h
--- usbdevs_data.h	15 Dec 2010 16:51:39 -0000	1.535
+++ usbdevs_data.h	16 Dec 2010 21:38:55 -0000
@@ -1,4 +1,4 @@
-/*	$OpenBSD: usbdevs_data.h,v 1.535 2010/12/15 16:51:39 damien Exp $	*/
+/*	$OpenBSD$	*/
 
 /*
  * THIS FILE IS AUTOMATICALLY GENERATED.  DO NOT EDIT.
@@ -118,6 +118,10 @@
 	    "Aolynk WUB320g",
 	},
 	{
+	    USB_VENDOR_ABBOTT, USB_PRODUCT_ABBOTT_STEREO_PLUG,
+	    "Stereo Plug Cable",
+	},
+	{
 	    USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_XX1,
 	    "XX1",
 	},
@@ -11716,6 +11720,10 @@
 	{
 	    USB_VENDOR_TERMINUS,
 	    "Terminus Technology",
+	},
+	{
+	    USB_VENDOR_ABBOTT,
+	    "Abbott Labs",
 	},
 	{
 	    USB_VENDOR_BAYER,
Index: uticom.c
===================================================================
RCS file: /home/cvsync/src/sys/dev/usb/uticom.c,v
retrieving revision 1.10
diff -u -r1.10 uticom.c
--- uticom.c	15 Dec 2010 16:22:16 -0000	1.10
+++ uticom.c	16 Dec 2010 21:38:55 -0000
@@ -119,7 +119,7 @@
 };
 
 struct	uticom_softc {
-	struct device		 sc_dev;		/* base device */
+	struct device		 sc_dev;	/* base device */
 	usbd_device_handle	 sc_udev;	/* device */
 	usbd_interface_handle	 sc_iface;	/* interface */
 
@@ -158,6 +158,8 @@
 static	int  uticom_open(void *, int);
 static	void uticom_close(void *, int);
 
+void uticom_attach_hook(void *arg);
+
 static int uticom_download_fw(struct uticom_softc *sc, int pipeno,
 	    usbd_device_handle dev);
 
@@ -191,7 +193,8 @@
 
 static const struct usb_devno uticom_devs[] = {
 	{ USB_VENDOR_TI, USB_PRODUCT_TI_TUSB3410 },
-	{ USB_VENDOR_STARTECH, USB_PRODUCT_STARTECH_ICUSB232X }
+	{ USB_VENDOR_STARTECH, USB_PRODUCT_STARTECH_ICUSB232X },
+	{ USB_VENDOR_ABBOTT, USB_PRODUCT_ABBOTT_STEREO_PLUG }
 };
 
 int
@@ -209,26 +212,37 @@
 void
 uticom_attach(struct device *parent, struct device *self, void *aux)
 {
-	struct uticom_softc *sc = (struct uticom_softc *)self;
-	struct usb_attach_arg *uaa = aux;
-	usbd_device_handle dev = uaa->device;
-	usb_config_descriptor_t *cdesc;
-	usb_interface_descriptor_t *id;
-	usb_endpoint_descriptor_t *ed;
-	usbd_status err;
-	int status, i;
-	usb_device_descriptor_t *dd;
-	struct ucom_attach_args uca;
+	struct uticom_softc	*sc = (struct uticom_softc *)self;
+	struct usb_attach_arg	*uaa = aux;
+	usbd_device_handle	 dev = uaa->device;
 
 	sc->sc_udev = dev;
 	sc->sc_iface = uaa->iface;
 
+	if (rootvp == NULL)
+		mountroothook_establish(uticom_attach_hook, sc);
+	else
+		uticom_attach_hook(sc);
+}
+
+void
+uticom_attach_hook(void *arg)
+{
+	struct uticom_softc		*sc = arg;
+	usb_config_descriptor_t		*cdesc;
+	usb_interface_descriptor_t	*id;
+	usb_endpoint_descriptor_t	*ed;
+	usbd_status			 err;
+	int				 status, i;
+	usb_device_descriptor_t		*dd;
+	struct ucom_attach_args		 uca;
+
 	/* Initialize endpoints. */
 	uca.bulkin = uca.bulkout = -1;
 	sc->sc_intr_number = -1;
 	sc->sc_intr_pipe = NULL;
 
-	dd = usbd_get_device_descriptor(dev);
+	dd = usbd_get_device_descriptor(sc->sc_udev);
 	DPRINTF(("%s: uticom_attach: num of configurations %d\n",
 	    sc->sc_dev.dv_xname, dd->bNumConfigurations));
 
@@ -241,7 +255,7 @@
 	DPRINTF(("%s: uticom_attach: starting loading firmware\n",
 	    sc->sc_dev.dv_xname));
 
-	err = usbd_set_config_index(dev, UTICOM_CONFIG_INDEX, 1);
+	err = usbd_set_config_index(sc->sc_udev, UTICOM_CONFIG_INDEX, 1);
 	if (err) {
 		printf("%s: failed to set configuration: %s\n",
 		    sc->sc_dev.dv_xname, usbd_errstr(err));
@@ -259,7 +273,7 @@
 		return;
 	}
 
-	err = usbd_device2interface_handle(dev, UTICOM_IFACE_INDEX,
+	err = usbd_device2interface_handle(sc->sc_udev, UTICOM_IFACE_INDEX,
 	    &sc->sc_iface);
 	if (err) {
 		printf("%s: failed to get interface: %s\n",
@@ -296,7 +310,7 @@
 		}
 	}
 
-	status = uticom_download_fw(sc, uca.bulkout, dev);
+	status = uticom_download_fw(sc, uca.bulkout, sc->sc_udev);
 
 	if (status) {
 		printf("%s: firmware download failed\n",
@@ -308,7 +322,7 @@
 		    sc->sc_dev.dv_xname));
 	}
 
-	status = usbd_reload_device_desc(dev);
+	status = usbd_reload_device_desc(sc->sc_udev);
 	if (status) {
 		printf("%s: error reloading device descriptor\n",
 		    sc->sc_dev.dv_xname);
@@ -317,11 +331,11 @@
 	}
 
 fwload_done:
-	dd = usbd_get_device_descriptor(dev);
+	dd = usbd_get_device_descriptor(sc->sc_udev);
 	DPRINTF(("%s: uticom_attach: num of configurations %d\n",
 	    sc->sc_dev.dv_xname, dd->bNumConfigurations));
 
-	err = usbd_set_config_index(dev, UTICOM_ACTIVE_INDEX, 1);
+	err = usbd_set_config_index(sc->sc_udev, UTICOM_ACTIVE_INDEX, 1);
 	if (err) {
 		printf("%s: failed to set configuration: %s\n",
 		    sc->sc_dev.dv_xname, usbd_errstr(err));
@@ -339,7 +353,7 @@
 	}
 
 	/* Get the interface (XXX: multiport chips are not supported yet). */
-	err = usbd_device2interface_handle(dev, UTICOM_IFACE_INDEX,
+	err = usbd_device2interface_handle(sc->sc_udev, UTICOM_IFACE_INDEX,
 	    &sc->sc_iface);
 	if (err) {
 		printf("failed to get interface: %s\n",
@@ -365,6 +379,7 @@
 		    UE_GET_XFERTYPE(ed->bmAttributes) == UE_INTERRUPT) {
 			sc->sc_intr_number = ed->bEndpointAddress;
 			sc->sc_isize = UGETW(ed->wMaxPacketSize);
+
 		}
 	}
 
@@ -420,7 +435,7 @@
 	uca.ibufsize = UTICOM_IBUFSZ;
 	uca.obufsize = UTICOM_OBUFSZ;
 	uca.ibufsizepad = UTICOM_IBUFSZ;
-	uca.device = dev;
+	uca.device = sc->sc_udev;
 	uca.iface = sc->sc_iface;
 	uca.opkthdrlen = 0;
 	uca.methods = &uticom_methods;
@@ -439,7 +454,7 @@
 	    sc->sc_dev.dv_xname, uca.bulkin,
 	    uca.bulkout, sc->sc_intr_number));
 
-	sc->sc_subdev = config_found_sm(self, &uca, ucomprint, ucomsubmatch);
+	sc->sc_subdev = config_found_sm((struct device *)sc, &uca, ucomprint, ucomsubmatch);
 }
 
 int
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
uticom firmware, Alexander Schrijver, (Thu Dec 16, 2:56 pm)