- we don't implement USB_DISCOVER, don't try to use it
- don't assume that usb_descriptor_t has a field bDescriptorSubtype, this field is class specific and shouldn't be there - make fetch of hub descriptors in usbctl work (by setting the correct request value) - before reading a string descriptor, read the language table and use a correct language code if possible - install usbgen(8) manual, regen plist, bump mostly from pkgsrc, http://cvsweb.netbsd.org/bsdweb.cgi/pkgsrc/sysutils/usbutil/patches/patch-ab
This commit is contained in:
parent
4f55154609
commit
6ce4c007b6
@ -1,8 +1,9 @@
|
||||
# $OpenBSD: Makefile,v 1.15 2007/09/15 21:14:03 merdely Exp $
|
||||
# $OpenBSD: Makefile,v 1.16 2009/01/14 00:58:39 sthen Exp $
|
||||
|
||||
COMMENT= USB developer utilities
|
||||
|
||||
DISTNAME= usbutil-0.5
|
||||
PKGNAME= ${DISTNAME}p0
|
||||
CATEGORIES= sysutils
|
||||
|
||||
MASTER_SITES= ftp://ftp.augustsson.net/pub/netbsd/
|
||||
@ -15,4 +16,9 @@ WANTLIB= c
|
||||
|
||||
NO_REGRESS= Yes
|
||||
|
||||
INSTALL_TARGET= man install
|
||||
|
||||
post-install:
|
||||
${INSTALL_MAN} ${WRKSRC}/usbgen.0 ${PREFIX}/man/cat8
|
||||
|
||||
.include <bsd.port.mk>
|
||||
|
101
sysutils/usbutil/patches/patch-usbctl_c
Normal file
101
sysutils/usbutil/patches/patch-usbctl_c
Normal file
@ -0,0 +1,101 @@
|
||||
$OpenBSD: patch-usbctl_c,v 1.3 2009/01/14 00:58:39 sthen Exp $
|
||||
--- usbctl.c.orig Mon Feb 25 00:50:55 2002
|
||||
+++ usbctl.c Mon Dec 15 17:43:07 2008
|
||||
@@ -62,6 +62,7 @@
|
||||
#endif
|
||||
|
||||
#define NSTRINGS
|
||||
+#define STRINGLANG
|
||||
|
||||
int num = 0;
|
||||
|
||||
@@ -80,17 +81,43 @@ getstring(int si, char *s)
|
||||
int r, i, n;
|
||||
u_int16_t c;
|
||||
usb_string_descriptor_t us;
|
||||
+ int lang = 0;
|
||||
|
||||
if (si == 0 || num) {
|
||||
*s = 0;
|
||||
return;
|
||||
}
|
||||
+
|
||||
+#ifdef STRINGLANG
|
||||
req.ucr_addr = usbaddr;
|
||||
req.ucr_request.bmRequestType = UT_READ_DEVICE;
|
||||
req.ucr_request.bRequest = UR_GET_DESCRIPTOR;
|
||||
req.ucr_data = &us;
|
||||
- USETW2(req.ucr_request.wValue, UDESC_STRING, si);
|
||||
+ USETW2(req.ucr_request.wValue, UDESC_STRING, 0);
|
||||
USETW(req.ucr_request.wIndex, 0);
|
||||
+ USETW(req.ucr_request.wLength, sizeof(usb_string_descriptor_t));
|
||||
+ req.ucr_flags = USBD_SHORT_XFER_OK;
|
||||
+ r = ioctl(usbf, USB_REQUEST, &req);
|
||||
+ if (r < 0) {
|
||||
+ fprintf(stderr, "get lang tbl failed (error=%d)\n", errno);
|
||||
+ *s = 0;
|
||||
+ return;
|
||||
+ }
|
||||
+ if (req.ucr_actlen > 0 && us.bLength >= 4) {
|
||||
+ lang = UGETW(us.bString[0]);
|
||||
+#if 0
|
||||
+ printf("getstring: %d langs, using %d\n",
|
||||
+ (us.bLength - 2) / 2, lang);
|
||||
+#endif
|
||||
+ }
|
||||
+#endif
|
||||
+
|
||||
+ req.ucr_addr = usbaddr;
|
||||
+ req.ucr_request.bmRequestType = UT_READ_DEVICE;
|
||||
+ req.ucr_request.bRequest = UR_GET_DESCRIPTOR;
|
||||
+ req.ucr_data = &us;
|
||||
+ USETW2(req.ucr_request.wValue, UDESC_STRING, si);
|
||||
+ USETW(req.ucr_request.wIndex, lang);
|
||||
#ifdef NSTRINGS
|
||||
USETW(req.ucr_request.wLength, sizeof(usb_string_descriptor_t));
|
||||
req.ucr_flags = USBD_SHORT_XFER_OK;
|
||||
@@ -384,7 +411,7 @@ struct usb_cdc_union_descriptor {
|
||||
};
|
||||
|
||||
void
|
||||
-prcdcd(usb_descriptor_t *ud)
|
||||
+prcdcd(struct usb_cdc_header_descriptor *ud)
|
||||
{
|
||||
if (ud->bDescriptorType != UDESC_CS_INTERFACE)
|
||||
printf("prcdcd: strange bDescriptorType=%d\n",
|
||||
@@ -630,7 +657,7 @@ gethubdesc(int f, usb_hub_descriptor_t *d, int addr)
|
||||
req.ucr_addr = addr;
|
||||
req.ucr_request.bmRequestType = UT_READ_CLASS_DEVICE;
|
||||
req.ucr_request.bRequest = UR_GET_DESCRIPTOR;
|
||||
- USETW(req.ucr_request.wValue, 0);
|
||||
+ USETW2(req.ucr_request.wValue, UDESC_HUB, 0);
|
||||
USETW(req.ucr_request.wIndex, 0);
|
||||
USETW(req.ucr_request.wLength, USB_HUB_DESCRIPTOR_SIZE);
|
||||
req.ucr_data = d;
|
||||
@@ -1243,8 +1270,8 @@ prdesc(void *p, int *class, int *subclass, int *iface,
|
||||
default:
|
||||
def:
|
||||
printf("Unknown descriptor (class %d/%d):\n", *class, *subclass);
|
||||
- printf("bLength=%d bDescriptorType=%d bDescriptorSubtype=%d ...\n", d->bLength,
|
||||
- d->bDescriptorType, d->bDescriptorSubtype
|
||||
+ printf("bLength=%d bDescriptorType=%d ...\n", d->bLength,
|
||||
+ d->bDescriptorType
|
||||
);
|
||||
break;
|
||||
}
|
||||
@@ -1321,6 +1348,7 @@ main(int argc, char **argv)
|
||||
|
||||
if (!doaddr)
|
||||
prunits(f);
|
||||
+#ifndef __OpenBSD__
|
||||
if (!nodisc) {
|
||||
r = ioctl(f, USB_DISCOVER);
|
||||
if (r < 0)
|
||||
@@ -1329,6 +1357,7 @@ main(int argc, char **argv)
|
||||
if (disconly)
|
||||
exit(0);
|
||||
}
|
||||
+#endif
|
||||
|
||||
for(addr = 0; addr < USB_MAX_DEVICES; addr++) {
|
||||
if (doaddr != -1 && addr != doaddr)
|
@ -1,5 +1,6 @@
|
||||
@comment $OpenBSD: PLIST,v 1.2 2000/06/20 19:32:44 jakob Exp $
|
||||
sbin/usbctl
|
||||
sbin/usbdebug
|
||||
sbin/usbgen
|
||||
sbin/usbstats
|
||||
@comment $OpenBSD: PLIST,v 1.3 2009/01/14 00:58:39 sthen Exp $
|
||||
@man man/cat8/usbgen.0
|
||||
@bin sbin/usbctl
|
||||
@bin sbin/usbdebug
|
||||
@bin sbin/usbgen
|
||||
@bin sbin/usbstats
|
||||
|
Loading…
x
Reference in New Issue
Block a user