/*
 *  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 _USBSTRUCT_H_
#define _USBSTRUCT_H_

#define REQTYPE_GET_DIR(x)          (((x)>>7)&0x01)
#define REQTYPE_GET_TYPE(x)         (((x)>>5)&0x03)
#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

/* class requests HID */
#define HID_GET_REPORT              0x01
#define HID_GET_IDLE                0x02
#define HID_GET_PROTOCOL            0x03
#define HID_SET_REPORT              0x09
#define HID_SET_IDLE                0x0A
#define HID_SET_PROTOCOL            0x0B

/* feature selectors */
#define FEA_ENDPOINT_HALT           0x00
#define FEA_REMOTE_WAKEUP           0x01
#define FEA_TEST_MODE               0x02

/*
 *  USB descriptors
 */

/** USB descriptor header */
struct usb_desc_header {
	u8_t bLength;               /**< descriptor length */
	u8_t bDescriptorType;       /**< descriptor type */
};

#define DESC_DEVICE                 1
#define DESC_CONFIGURATION          2
#define DESC_STRING                 3
#define DESC_INTERFACE              4
#define DESC_ENDPOINT               5
#define DESC_DEVICE_QUALIFIER       6
#define DESC_OTHER_SPEED            7
#define DESC_INTERFACE_POWER        8

#define CS_INTERFACE                0x24
#define CS_ENDPOINT                 0x25

#define DESC_HID_HID                0x21
#define DESC_HID_REPORT             0x22
#define DESC_HID_PHYSICAL           0x23

#define GET_DESC_TYPE(x)            (((x)>>8)&0xFF)
#define GET_DESC_INDEX(x)           ((x)&0xFF)

#endif /* _USBSTRUCT_H_ */
