usbhid.h revision 67217
165116Sn_hibma/*	$NetBSD: usb.h,v 1.8 2000/08/13 22:22:02 augustss Exp $	*/
261560Sn_hibma
361560Sn_hibma/*
461560Sn_hibma * Copyright (c) 1999 Lennart Augustsson <augustss@netbsd.org>
561560Sn_hibma * All rights reserved.
661560Sn_hibma *
761560Sn_hibma * Redistribution and use in source and binary forms, with or without
861560Sn_hibma * modification, are permitted provided that the following conditions
961560Sn_hibma * are met:
1061560Sn_hibma * 1. Redistributions of source code must retain the above copyright
1161560Sn_hibma *    notice, this list of conditions and the following disclaimer.
1261560Sn_hibma * 2. Redistributions in binary form must reproduce the above copyright
1361560Sn_hibma *    notice, this list of conditions and the following disclaimer in the
1461560Sn_hibma *    documentation and/or other materials provided with the distribution.
1561560Sn_hibma *
1661560Sn_hibma * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
1761560Sn_hibma * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
1861560Sn_hibma * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
1961560Sn_hibma * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
2061560Sn_hibma * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
2161560Sn_hibma * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
2261560Sn_hibma * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
2361560Sn_hibma * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
2461560Sn_hibma * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
2561560Sn_hibma * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
2661560Sn_hibma * SUCH DAMAGE.
2761560Sn_hibma *
2861560Sn_hibma * $FreeBSD: head/lib/libusbhid/usbhid.h 67217 2000-10-16 18:13:59Z n_hibma $
2961560Sn_hibma *
3061560Sn_hibma */
3161560Sn_hibma
3261560Sn_hibmatypedef struct report_desc *report_desc_t;
3361560Sn_hibma
3461560Sn_hibmatypedef struct hid_data *hid_data_t;
3561560Sn_hibma
3661560Sn_hibmatypedef enum hid_kind {
3761560Sn_hibma	hid_input, hid_output, hid_feature, hid_collection, hid_endcollection
3867217Sn_hibma} hid_kind_t;
3961560Sn_hibma
4061560Sn_hibmatypedef struct hid_item {
4161560Sn_hibma	/* Global */
4261560Sn_hibma	int _usage_page;
4361560Sn_hibma	int logical_minimum;
4461560Sn_hibma	int logical_maximum;
4561560Sn_hibma	int physical_minimum;
4661560Sn_hibma	int physical_maximum;
4761560Sn_hibma	int unit_exponent;
4861560Sn_hibma	int unit;
4961560Sn_hibma	int report_size;
5061560Sn_hibma	int report_ID;
5161560Sn_hibma#define NO_REPORT_ID 0
5261560Sn_hibma	int report_count;
5361560Sn_hibma	/* Local */
5461560Sn_hibma	unsigned int usage;
5561560Sn_hibma	int usage_minimum;
5661560Sn_hibma	int usage_maximum;
5761560Sn_hibma	int designator_index;
5861560Sn_hibma	int designator_minimum;
5961560Sn_hibma	int designator_maximum;
6061560Sn_hibma	int string_index;
6161560Sn_hibma	int string_minimum;
6261560Sn_hibma	int string_maximum;
6361560Sn_hibma	int set_delimiter;
6461560Sn_hibma	/* Misc */
6561560Sn_hibma	int collection;
6661560Sn_hibma	int collevel;
6761560Sn_hibma	enum hid_kind kind;
6861560Sn_hibma	unsigned int flags;
6961560Sn_hibma	/* Absolute data position (bits) */
7061560Sn_hibma	unsigned int pos;
7161560Sn_hibma	/* */
7261560Sn_hibma	struct hid_item *next;
7361560Sn_hibma} hid_item_t;
7461560Sn_hibma
7565116Sn_hibma#define HID_PAGE(u) (((u) >> 16) & 0xffff)
7661560Sn_hibma#define HID_USAGE(u) ((u) & 0xffff)
7761560Sn_hibma
7861560Sn_hibma/* Obtaining a report descriptor, descr.c: */
7961560Sn_hibmareport_desc_t hid_get_report_desc __P((int file));
8067217Sn_hibmareport_desc_t hid_use_report_desc __P((unsigned char *data, unsigned int size));
8161560Sn_hibmavoid hid_dispose_report_desc __P((report_desc_t));
8261560Sn_hibma
8361560Sn_hibma/* Parsing of a HID report descriptor, parse.c: */
8461560Sn_hibmahid_data_t hid_start_parse __P((report_desc_t d, int kindset));
8561560Sn_hibmavoid hid_end_parse __P((hid_data_t s));
8661560Sn_hibmaint hid_get_item __P((hid_data_t s, hid_item_t *h));
8767217Sn_hibmaint hid_report_size __P((report_desc_t d, unsigned int id, enum hid_kind k));
8861560Sn_hibmaint hid_locate __P((report_desc_t d, unsigned int usage, enum hid_kind k, hid_item_t *h));
8961560Sn_hibma
9061560Sn_hibma/* Conversion to/from usage names, usage.c: */
9161560Sn_hibmaconst char *hid_usage_page __P((int i));
9261560Sn_hibmaconst char *hid_usage_in_page __P((unsigned int u));
9361560Sn_hibmavoid hid_init __P((const char *file));
9461560Sn_hibma
9561560Sn_hibma/* Extracting/insertion of data, data.c: */
9661560Sn_hibmaint hid_get_data __P((const void *p, const hid_item_t *h));
9761560Sn_hibmavoid hid_set_data __P((void *p, const hid_item_t *h, int data));
98