summaryrefslogtreecommitdiff
path: root/sys/dev/usb/uhidev.h
diff options
context:
space:
mode:
authorNathan Binkert <nate@cvs.openbsd.org>2002-05-09 15:06:30 +0000
committerNathan Binkert <nate@cvs.openbsd.org>2002-05-09 15:06:30 +0000
commit23dcee9d39acf0acbda3ed2e33b4038f9d5e8132 (patch)
treec27e422c42192be2a5812b0859e70bb3754bd8b5 /sys/dev/usb/uhidev.h
parent02a2153e2ea77635df4c6b97678b0749f66bee42 (diff)
Sync hid stuff including ukbd, ums, and uhid with NetBSD
This adds a uhidev device which can be thought of as something like a uhid bus. It allows more than one ukbd, ums, or uhid to attach to the same device instance. This functionality is found on many of the newer keyboards that have extra buttons. (The extra buttons show up as uhid device(s)). Tested by me on i386, dale on macppc, and jason on sparc64
Diffstat (limited to 'sys/dev/usb/uhidev.h')
-rw-r--r--sys/dev/usb/uhidev.h91
1 files changed, 91 insertions, 0 deletions
diff --git a/sys/dev/usb/uhidev.h b/sys/dev/usb/uhidev.h
new file mode 100644
index 00000000000..360eae75784
--- /dev/null
+++ b/sys/dev/usb/uhidev.h
@@ -0,0 +1,91 @@
+/* $OpenBSD: uhidev.h,v 1.3 2002/05/09 15:06:29 nate Exp $ */
+/* $NetBSD: uhidev.h,v 1.2 2001/12/29 18:56:52 augustss Exp $ */
+
+/*
+ * Copyright (c) 2001 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Lennart Augustsson (lennart@augustsson.net) at
+ * Carlstedt Research & Technology.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the NetBSD
+ * Foundation, Inc. and its contributors.
+ * 4. Neither the name of The NetBSD Foundation nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#if defined(__NetBSD__)
+#include "locators.h"
+#endif
+
+#define uhidevcf_reportid cf_loc[UHIDBUSCF_REPORTID]
+#define UHIDEV_UNK_REPORTID UHIDBUSCF_REPORTID_DEFAULT
+
+struct uhidev_softc {
+ USBBASEDEVICE sc_dev; /* base device */
+ usbd_device_handle sc_udev;
+ usbd_interface_handle sc_iface; /* interface */
+ usbd_pipe_handle sc_intrpipe; /* interrupt pipe */
+ int sc_ep_addr;
+
+ u_char *sc_ibuf;
+ u_int sc_isize;
+
+ void *sc_repdesc;
+ int sc_repdesc_size;
+
+ u_int sc_nrepid;
+ struct uhidev **sc_subdevs;
+
+ int sc_refcnt;
+ u_char sc_dying;
+};
+
+struct uhidev {
+ USBBASEDEVICE sc_dev; /* base device */
+ struct uhidev_softc *sc_parent;
+ uByte sc_report_id;
+ u_int8_t sc_state;
+ int sc_in_rep_size;
+#define UHIDEV_OPEN 0x01 /* device is open */
+ void (*sc_intr)(struct uhidev *, void *, u_int);
+};
+
+struct uhidev_attach_arg {
+ struct usb_attach_arg *uaa;
+ struct uhidev_softc *parent;
+ int reportid;
+ int reportsize;
+ int matchlvl;
+};
+
+void uhidev_get_report_desc(struct uhidev_softc *, void **, int *);
+int uhidev_open(struct uhidev *);
+void uhidev_close(struct uhidev *);
+usbd_status uhidev_set_report(struct uhidev *scd, int type, void *data,int len);
+void uhidev_set_report_async(struct uhidev *scd, int type, void *data, int len);
+usbd_status uhidev_get_report(struct uhidev *scd, int type, void *data,int len);