Support Graphire 4x5. From Dave Huang in kern/23965.
This commit is contained in:
parent
0daa8ba196
commit
956a88bd1e
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: ugraphire_rdesc.h,v 1.1 2000/12/29 01:47:49 augustss Exp $ */
|
||||
/* $NetBSD: ugraphire_rdesc.h,v 1.2 2004/01/04 01:29:11 augustss Exp $ */
|
||||
/*
|
||||
* Copyright (c) 2000 Nick Hibma <n_hibma@freebsd.org>
|
||||
* All rights reserved.
|
||||
|
@ -89,3 +89,87 @@ static uByte uhid_graphire_report_descr[] = {
|
|||
0xb1, 0x02, /* FEATURE (Data,Var,Abs) */
|
||||
0xc0, /* END_COLLECTION */
|
||||
};
|
||||
|
||||
static uByte uhid_graphire3_4x5_report_descr[] = {
|
||||
0x05, 0x01, /* USAGE_PAGE (Generic Desktop) */
|
||||
0x09, 0x02, /* USAGE (Mouse) */
|
||||
0xa1, 0x01, /* COLLECTION (Application) */
|
||||
0x85, 0x01, /* REPORT_ID (1) */
|
||||
0x09, 0x01, /* USAGE (Pointer) */
|
||||
0xa1, 0x00, /* COLLECTION (Physical) */
|
||||
0x05, 0x09, /* USAGE_PAGE (Button) */
|
||||
0x19, 0x01, /* USAGE_MINIMUM (Button 1) */
|
||||
0x29, 0x03, /* USAGE_MAXIMUM (Button 3) */
|
||||
0x15, 0x00, /* LOGICAL_MINIMUM (0) */
|
||||
0x25, 0x01, /* LOGICAL_MAXIMUM (1) */
|
||||
0x95, 0x03, /* REPORT_COUNT (3) */
|
||||
0x75, 0x01, /* REPORT_SIZE (1) */
|
||||
0x81, 0x02, /* INPUT (Data,Var,Abs) */
|
||||
0x95, 0x01, /* REPORT_COUNT (1) */
|
||||
0x75, 0x05, /* REPORT_SIZE (5) */
|
||||
0x81, 0x01, /* INPUT (Cnst,Ary,Abs) */
|
||||
0x05, 0x01, /* USAGE_PAGE (Generic Desktop) */
|
||||
0x09, 0x30, /* USAGE (X) */
|
||||
0x09, 0x31, /* USAGE (Y) */
|
||||
0x09, 0x38, /* USAGE (Wheel) */
|
||||
0x15, 0x81, /* LOGICAL_MINIMUM (-127) */
|
||||
0x25, 0x7f, /* LOGICAL_MAXIMUM (127) */
|
||||
0x75, 0x08, /* REPORT_SIZE (8) */
|
||||
0x95, 0x03, /* REPORT_COUNT (3) */
|
||||
0x81, 0x06, /* INPUT (Data,Var,Rel) */
|
||||
0xc0, /* END_COLLECTION */
|
||||
0xc0, /* END_COLLECTION */
|
||||
0x05, 0x0d, /* USAGE_PAGE (Digitizers) */
|
||||
0x09, 0x01, /* USAGE (Pointer) */
|
||||
0xa1, 0x01, /* COLLECTION (Applicaption) */
|
||||
0x85, 0x02, /* REPORT_ID (2) */
|
||||
0x05, 0x0d, /* USAGE_PAGE (Digitizers) */
|
||||
0x09, 0x01, /* USAGE (Digitizer) */
|
||||
0xa1, 0x00, /* COLLECTION (Physical) */
|
||||
0x09, 0x33, /* USAGE (Touch) */
|
||||
0x09, 0x44, /* USAGE (Barrel Switch) */
|
||||
0x09, 0x44, /* USAGE (Barrel Switch) */
|
||||
0x15, 0x00, /* LOGICAL_MINIMUM (0) */
|
||||
0x25, 0x01, /* LOGICAL_MAXIMUM (1) */
|
||||
0x75, 0x01, /* REPORT_SIZE (1) */
|
||||
0x95, 0x03, /* REPORT_COUNT (3) */
|
||||
0x81, 0x02, /* INPUT (Data,Var,Abs) */
|
||||
0x75, 0x01, /* REPORT_SIZE (1) */
|
||||
0x95, 0x02, /* REPORT_COUNT (2) */
|
||||
0x81, 0x01, /* INPUT (Cnst,Ary,Abs) */
|
||||
0x09, 0x3c, /* USAGE (Invert) */
|
||||
0x09, 0x38, /* USAGE (Transducer Index) */
|
||||
0x09, 0x32, /* USAGE (In Range) */
|
||||
0x75, 0x01, /* REPORT_SIZE (1) */
|
||||
0x95, 0x03, /* REPORT_COUNT (3) */
|
||||
0x81, 0x02, /* INPUT (Data,Var,Abs) */
|
||||
0x05, 0x01, /* USAGE_PAGE (Generic Desktop) */
|
||||
0x09, 0x30, /* USAGE (X) */
|
||||
0x15, 0x00, /* LOGICAL_MINIMUM (0) */
|
||||
0x26, 0xde, 0x27, /* LOGICAL_MAXIMUM (10206) */
|
||||
0x75, 0x10, /* REPORT_SIZE (16) */
|
||||
0x95, 0x01, /* REPORT_COUNT (1) */
|
||||
0x81, 0x02, /* INPUT (Data,Var,Abs) */
|
||||
0x09, 0x31, /* USAGE (Y) */
|
||||
0x26, 0xfe, 0x1c, /* LOGICAL_MAXIMUM (7422) */
|
||||
0x75, 0x10, /* REPORT_SIZE (16) */
|
||||
0x95, 0x01, /* REPORT_COUNT (1) */
|
||||
0x81, 0x02, /* INPUT (Data,Var,Abs) */
|
||||
0x05, 0x0d, /* USAGE_PAGE (Digitizers) */
|
||||
0x09, 0x30, /* USAGE (Tip Pressure) */
|
||||
0x26, 0xff, 0x01, /* LOGICAL_MAXIMUM (511) */
|
||||
0x75, 0x10, /* REPORT_SIZE (16) */
|
||||
0x95, 0x01, /* REPORT_COUNT (1) */
|
||||
0x81, 0x02, /* INPUT (Data,Var,Abs) */
|
||||
0xc0, /* END_COLLECTION */
|
||||
0x05, 0x0d, /* USAGE_PAGE (Digitizers) */
|
||||
0x09, 0x00, /* USAGE (Undefined) */
|
||||
0x85, 0x02, /* REPORT_ID (2) */
|
||||
0x95, 0x01, /* REPORT_COUNT (1) */
|
||||
0xb1, 0x02, /* FEATURE (Data,Var,Abs) */
|
||||
0x09, 0x00, /* USAGE (Undefined) */
|
||||
0x85, 0x03, /* REPORT_ID (3) */
|
||||
0x95, 0x01, /* REPORT_COUNT (1) */
|
||||
0xb1, 0x02, /* FEATURE (Data,Var,Abs) */
|
||||
0xc0 /* END_COLLECTION */
|
||||
};
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: uhidev.c,v 1.16 2003/10/25 18:28:31 christos Exp $ */
|
||||
/* $NetBSD: uhidev.c,v 1.17 2004/01/04 01:29:11 augustss Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2001 The NetBSD Foundation, Inc.
|
||||
|
@ -42,7 +42,7 @@
|
|||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: uhidev.c,v 1.16 2003/10/25 18:28:31 christos Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: uhidev.c,v 1.17 2004/01/04 01:29:11 augustss Exp $");
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
|
@ -109,7 +109,7 @@ USB_ATTACH(uhidev)
|
|||
struct uhidev *dev;
|
||||
int size, nrepid, repid, repsz;
|
||||
int repsizes[256];
|
||||
void *desc;
|
||||
void *desc, *descptr = NULL;
|
||||
usbd_status err;
|
||||
char devinfo[1024];
|
||||
|
||||
|
@ -157,21 +157,45 @@ USB_ATTACH(uhidev)
|
|||
sc->sc_ep_addr = ed->bEndpointAddress;
|
||||
|
||||
/* XXX need to extend this */
|
||||
if (uaa->vendor == USB_VENDOR_WACOM &&
|
||||
uaa->product == USB_PRODUCT_WACOM_GRAPHIRE /* &&
|
||||
if (uaa->vendor == USB_VENDOR_WACOM /* &&
|
||||
uaa->revision == 0x???? */) { /* XXX should use revision */
|
||||
char reportbuf[] = {2, 2, 2};
|
||||
|
||||
/* The report descriptor for the Wacom Graphire is broken. */
|
||||
size = sizeof uhid_graphire_report_descr;
|
||||
switch (uaa->product) {
|
||||
case USB_PRODUCT_WACOM_GRAPHIRE:
|
||||
size = sizeof uhid_graphire_report_descr;
|
||||
descptr = uhid_graphire_report_descr;
|
||||
break;
|
||||
|
||||
case USB_PRODUCT_WACOM_GRAPHIRE3_4X5: /* The 6x8 too? */
|
||||
/*
|
||||
* The Graphire3 needs 0x0202 to be written to
|
||||
* feature report ID 2 before it'll start
|
||||
* returning digitizer data.
|
||||
*/
|
||||
usbd_set_report(uaa->iface, UHID_FEATURE_REPORT, 2,
|
||||
&reportbuf, sizeof(reportbuf));
|
||||
|
||||
size = sizeof uhid_graphire3_4x5_report_descr;
|
||||
descptr = uhid_graphire3_4x5_report_descr;
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (descptr) {
|
||||
desc = malloc(size, M_USBDEV, M_NOWAIT);
|
||||
if (desc == NULL)
|
||||
err = USBD_NOMEM;
|
||||
else {
|
||||
err = USBD_NORMAL_COMPLETION;
|
||||
memcpy(desc, uhid_graphire_report_descr, size);
|
||||
memcpy(desc, descptr, size);
|
||||
}
|
||||
} else {
|
||||
desc = NULL;
|
||||
err = usbd_read_report_desc(uaa->iface, &desc, &size, M_USBDEV);
|
||||
err = usbd_read_report_desc(uaa->iface, &desc, &size,
|
||||
M_USBDEV);
|
||||
}
|
||||
if (err) {
|
||||
printf("%s: no report descriptor\n", USBDEVNAME(sc->sc_dev));
|
||||
|
|
Loading…
Reference in New Issue