root/usr/src/uts/common/sys/usb/clients/hidparser/hid_parser_driver.h
/*
 * CDDL HEADER START
 *
 * The contents of this file are subject to the terms of the
 * Common Development and Distribution License (the "License").
 * You may not use this file except in compliance with the License.
 *
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
 * or http://www.opensolaris.org/os/licensing.
 * See the License for the specific language governing permissions
 * and limitations under the License.
 *
 * When distributing Covered Code, include this CDDL HEADER in each
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
 * If applicable, add the following below this CDDL HEADER, with the
 * fields enclosed by brackets "[]" replaced with your own identifying
 * information: Portions Copyright [yyyy] [name of copyright owner]
 *
 * CDDL HEADER END
 */
/*
 * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
 * Use is subject to license terms.
 */

#ifndef _SYS_USB_HID_PARSER_DRIVER_H
#define _SYS_USB_HID_PARSER_DRIVER_H


#ifdef __cplusplus
extern "C" {
#endif


/*
 *
 * This header file lists hidparser interfaces that are accessible only by
 * the hid driver.
 */


/*
 * hidparser_parse_report_descriptor():
 *      Parse a report descriptor according to the rules in the HID 1.0 spec.
 *      Return a pointer to a hidparser_handle_t which will be used for
 *      later queries to the parser.
 *
 * Arguments:
 *      report_descriptor:
 *              report_descriptor obtained from the HID device
 *      size:
 *              size of the report descriptor
 *      hid_descriptor:
 *              pointer to the hid descriptor
 *      parse_handle:
 *              pointer to a hidparser_handle_t
 *
 * Return values:
 *      HID_PARSER_SUCCESS - no errors
 *      HID_PARSER_ERROR   - parsing the report descriptor failed
 *
 */
int hidparser_parse_report_descriptor(uchar_t *report_descriptor,
                                size_t size,
                                usb_hid_descr_t *hid_descriptor,
                                hidparser_handle_t *parse_handle);



/*
 * hidparser_free_report_descriptor_handle():
 *      Free the report descriptor handle
 *
 * Arguments:
 *      parse_handle:
 *              handle to be freed
 *
 * Return values:
 *      HID_PARSER_SUCCESS - no errors
 *      HID_PARSER_FAILURE - unspecified error when freeing descriptor
 */
int hidparser_free_report_descriptor_handle(hidparser_handle_t parse_handle);


/*
 * hidparser_get_top_level_collection_usage():
 *      Obtain the usage of the top level collection.  A streams module
 *      will be pushed on top of the hid driver based on the usage.
 *
 * Arguments:
 *      parse_handle:  parser handle
 *      usage_page:    filled in with the usage page upon return
 *      usage:         filled in with the usage upon return
 *
 * Return values:
 *      HID_PARSER_SUCCESS - no errors
 *      HID_PARSER_FAILURE - unspecified error
 *
 */
int hidparser_get_top_level_collection_usage(hidparser_handle_t parse_handle,
                                        uint_t *usage_page,
                                        uint_t *usage);

/*
 * hidparser_lookup_usage_collection:
 *      Look up the collection specified by the usage page and usage id.
 *
 * Arguments:
 *      parse_handle:  parser handle
 *      lusage_page:   specified usage page
 *      lusage_id:     specified usage
 *
 * Return values:
 *      HID_PARSER_SUCCESS - found the specified collection
 *      HID_PARSER_FAILURE - error or not found
 */
int
hidparser_lookup_usage_collection(hidparser_handle_t parse_handle,
                                        uint_t lusage_page,
                                        uint_t lusage_id);


#ifdef __cplusplus
}
#endif

#endif  /* _SYS_USB_HID_PARSER_DRIVER_H */