text: /*
   *  LPCUSB, an USB device driver for LPC microcontrollers
   *  Copyright (C) 2006 Bertrik Sikken (bertrik@sikken.nl)
   *  Copyright (c) 2016 Intel Corporation
   *
   *  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. The name of the author may not be used to endorse or promote products
   *     derived from this software without specific prior written permission.
   *
   *  THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
   */
  
  /**
   * @file
   * @brief standard USB packet structures and defines
   *
   * This file contains structures and defines of the standard USB packets
   */
  
  #ifndef ZEPHYR_INCLUDE_USB_USBSTRUCT_H_
  #define ZEPHYR_INCLUDE_USB_USBSTRUCT_H_
  
  #define REQTYPE_GET_DIR(x)          (((x)>>7)&0x01)
  #define REQTYPE_GET_TYPE(x)         (((x)>>5)&0x03U)
  #define REQTYPE_GET_RECIP(x)        ((x)&0x1F)
  
  #define REQTYPE_DIR_TO_DEVICE       0
  #define REQTYPE_DIR_TO_HOST         1
  
  #define REQTYPE_TYPE_STANDARD       0
  #define REQTYPE_TYPE_CLASS          1
  #define REQTYPE_TYPE_VENDOR         2
  #define REQTYPE_TYPE_RESERVED       3
  
  #define REQTYPE_RECIP_DEVICE        0
  #define REQTYPE_RECIP_INTERFACE     1
  #define REQTYPE_RECIP_ENDPOINT      2
  #define REQTYPE_RECIP_OTHER         3
  
  /* standard requests */
  #define REQ_GET_STATUS              0x00
  #define REQ_CLEAR_FEATURE           0x01
  #define REQ_SET_FEATURE             0x03
  #define REQ_SET_ADDRESS             0x05
  #define REQ_GET_DESCRIPTOR          0x06
  #define REQ_SET_DESCRIPTOR          0x07
  #define REQ_GET_CONFIGURATION       0x08
  #define REQ_SET_CONFIGURATION       0x09
  #define REQ_GET_INTERFACE           0x0A
  #define REQ_SET_INTERFACE           0x0B
  #define REQ_SYNCH_FRAME             0x0C
  
  /* feature selectors */
  #define FEA_ENDPOINT_HALT           0x00
  #define FEA_REMOTE_WAKEUP           0x01
  #define FEA_TEST_MODE               0x02
  
  #define DEVICE_STATUS_SELF_POWERED  0x01
  #define DEVICE_STATUS_REMOTE_WAKEUP 0x02
  
  /*
   *  USB descriptors
   */
  
  /** USB descriptor header */
  struct usb_desc_header {
  	uint8_t bLength;               /**< descriptor length */
  	uint8_t bDescriptorType;       /**< descriptor type */
  };
  
  #define GET_DESC_TYPE(x)            (((x)>>8)&0xFFU)
  #define GET_DESC_INDEX(x)           ((x)&0xFFU)
  
  #endif /* ZEPHYR_INCLUDE_USB_USBSTRUCT_H_ */
  