/*
 * Copyright 2007 Haiku, Inc. All rights reserved.
 * Distributed under the terms of the MIT License.
 *
 * Authors:
 *		Niels Sascha Reedijk, niels.reedijk@gmail.com
 *
 * Corresponds to:
 *		headers/os/drivers/USB_spec.h rev 19915
 */


/*!
	\file USB_spec.h
	\ingroup drivers
	\ingroup libbe
	\brief General definitions as defined by the USB standard.
*/


/*!
	\name Request Types: targets and direction

	These request types can be used in the usb_module_info::send_request()
	and usb_module_info::queue_request() methods. They specifiy both the type
	of interface and the direction of the transfer.

	These are usually combined with a category (found on this page).
*/


//! @{


/*! 
	\def USB_REQTYPE_DEVICE_IN
	\brief Device. In.
*/


/*!
	\def USB_REQTYPE_DEVICE_OUT
	\brief Device. Out.
*/


/*!
	\def USB_REQTYPE_INTERFACE_IN
	\brief Interface. In.
*/


/*!
	\def USB_REQTYPE_INTERFACE_OUT
	\brief Interface. Out.
*/


/*!
	\def USB_REQTYPE_ENDPOINT_IN
	\brief Endpoint. In.
*/


/*!
	\def USB_REQTYPE_ENDPOINT_OUT
	\brief Endpoint. Out.
*/


/*!
	\def USB_REQTYPE_OTHER_OUT 
	\brief Other. Out.
*/


/*!
	\def USB_REQTYPE_OTHER_IN
	\brief Other. In.
*/


//! @}


/*!
	\name Request Types: categories

	These request types can be used in the usb_module_info::send_request()
	and usb_module_info::queue_request() methods. They specifiy the category
	of the transfer.

	These are usually combined with a target and direction (found on this page).
*/


//! @{


/*!
	\def USB_REQTYPE_STANDARD
	\brief Request that adheres to the USB specifications.
*/


/*!
	\def USB_REQTYPE_CLASS
	\brief Request that adheres to the specifications of the class.
*/


/*!
	\def USB_REQTYPE_VENDOR
	\brief Request that is defined by the specifications of the vendor.
*/


/*!
	\def USB_REQTYPE_RESERVED
	\brief Reserved for special implementations.
*/


/*!
	\def USB_REQTYPE_MASK
	\brief Constant that can be used as mask over the requesttype field.
*/


//! @}


/*!
	\name Standard Request Values

	These request values are defined by the USB standard. You can use these
	constants in both the usb_module_info::send_request() and
	usb_module_info::queue_request() methods.

	\warning The stack handles most of these standard requests for you. Use the
	supplied convenience functions the the usb_module_info interface rather than
	doing the requests yourself. Some of these request may actually interfere
	with the inner workings of the USB stack!
*/


//! @{


/*!
	\def USB_REQUEST_GET_STATUS
	\brief Get the status of a device.
*/


/*!
	\def USB_REQUEST_CLEAR_FEATURE 
	\brief Clear a feature.
*/


/*!
	\def USB_REQUEST_SET_FEATURE 
	\brief Set a feature.
*/


/*!
	\def USB_REQUEST_SET_ADDRESS
	\brief Set the device address.
*/


/*!
	\def USB_REQUEST_GET_DESCRIPTOR 
	\brief Get a descriptor.
*/


/*!
	\def USB_REQUEST_SET_DESCRIPTOR 
	\brief Update a descriptor to a supplied one.
*/


/*!
	\def USB_REQUEST_GET_CONFIGURATION
	\brief Get a configuration.
*/


/*!
	\def USB_REQUEST_SET_CONFIGURATION 
	\brief Set the configuration.
*/


/*!
	\def USB_REQUEST_GET_INTERFACE
	\brief Request an interface descriptor.
*/


/*!
	\def USB_REQUEST_SET_INTERFACE
	\brief Set a specific interface.
*/


/*!
	\def USB_REQUEST_SYNCH_FRAME
	\brief Synchronize a frame.
*/


//! @}


/*!
	\name Descriptor Constants

	These constants refer to a specific descriptor. They can be used when
	building a standard USB request for a descriptor, or in the
	usb_module_info::get_descriptor() method.
*/


//! @{


/*!
	\def USB_DESCRIPTOR_DEVICE
	\brief Constant for the device descriptor.
*/


/*!
	\def USB_DESCRIPTOR_CONFIGURATION
	\brief Constant for a configuration descriptor.
*/


/*!
	\def USB_DESCRIPTOR_STRING
	\brief Constant for a string descriptor.
*/


/*!
	\def USB_DESCRIPTOR_INTERFACE
	\brief Constant for an interface descriptor.
*/


/*!
	\def USB_DESCRIPTOR_ENDPOINT
	\brief Constant for an endpoint descriptor.
*/


//! @}


/*!
	\name Feature Requests

	These constants refer to standard feature requests. You can use these
	using the convenient usb_module_info::set_feature() and 
	usb_module_info::clear_feature() methods.
*/


//! @{


/*!
	\def USB_FEATURE_DEVICE_REMOTE_WAKEUP
	\brief Request a device to wakeup from remote calls.
*/


/*!
	\def USB_FEATURE_ENDPOINT_HALT
	\brief Request for a specific endpoint to halt.
*/


//! @}


/*!
	\name Endpoint Attributes

	These constants refer to values in the usb_endpoint_descriptor::attributes
	field.
*/


//! @{


/*!
	\def USB_ENDPOINT_ATTR_CONTROL
	\brief Endpoint facilitates control transfers.
*/


/*!
	\def USB_ENDPOINT_ATTR_ISOCHRONOUS
	\brief Endpoint facilitates isochronous transfers.
*/


/*!
	\def USB_ENDPOINT_ATTR_BULK
	\brief Endpoint facilitates bulk transfers.
*/


/*!
	\def USB_ENDPOINT_ATTR_INTERRUPT
	\brief Endpoint facilitates interrupt transfers.
*/


/*!
	\def USB_ENDPOINT_ATTR_MASK
	\brief Constant to mask out transfer types.
*/


//! @}


/*!
	\name Endpoint Address

	These constants refer to the direction that is embedded in the
	usb_endpoint_descriptor::address field.
*/


//! @{


/*!
	\def USB_ENDPOINT_ADDR_DIR_IN
	\brief The endpoint provides data for the driver.
*/


/*!
	\def USB_ENDPOINT_ADDR_DIR_OUT	
	\brief The endpoint accepts data from the host.
*/


//! @}
