/**
 * \file
 *
 * \brief USB protocol definitions.
 *
 * This file contains the USB definitions and data structures provided by the
 * USB 2.0 specification.
 *
 * Copyright (c) 2015-2018 Microchip Technology Inc. and its subsidiaries.
 *
 * \asf_license_start
 *
 * \page License
 *
 * Subject to your compliance with these terms, you may use Microchip
 * software and any derivatives exclusively with Microchip products.
 * It is your responsibility to comply with third party license terms applicable
 * to your use of third party software (including open source software) that
 * may accompany Microchip software.
 *
 * THIS SOFTWARE IS SUPPLIED BY MICROCHIP "AS IS". NO WARRANTIES,
 * WHETHER EXPRESS, IMPLIED OR STATUTORY, APPLY TO THIS SOFTWARE,
 * INCLUDING ANY IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY,
 * AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT WILL MICROCHIP BE
 * LIABLE FOR ANY INDIRECT, SPECIAL, PUNITIVE, INCIDENTAL OR CONSEQUENTIAL
 * LOSS, DAMAGE, COST OR EXPENSE OF ANY KIND WHATSOEVER RELATED TO THE
 * SOFTWARE, HOWEVER CAUSED, EVEN IF MICROCHIP HAS BEEN ADVISED OF THE
 * POSSIBILITY OR THE DAMAGES ARE FORESEEABLE.  TO THE FULLEST EXTENT
 * ALLOWED BY LAW, MICROCHIP'S TOTAL LIABILITY ON ALL CLAIMS IN ANY WAY
 * RELATED TO THIS SOFTWARE WILL NOT EXCEED THE AMOUNT OF FEES, IF ANY,
 * THAT YOU HAVE PAID DIRECTLY TO MICROCHIP FOR THIS SOFTWARE.
 *
 * \asf_license_stop
 */

#ifndef _USB_PROTOCOL_H_
#define _USB_PROTOCOL_H_

#include "usb_includes.h"

/**
 * \ingroup usb_group
 * \defgroup usb_protocol_group USB Protocol Definitions
 *
 * This module defines constants and data structures provided by the USB
 * 2.0 specification.
 *
 * @{
 */

#ifdef __cplusplus
extern "C" {
#endif

#ifdef __CC_ARM
#pragma anon_unions
#endif

/*! Value for field bcdUSB */
#define USB_V2_0 (0x0200) /*!< USB Specification version 2.00 */
#define USB_V2_1 (0x0201) /*!< USB Specification version 2.01 (support BOS) */

/*! \name Generic definitions (Class, subclass and protocol)
 */
/*! @{ */
#define USB_CLASS_NO (0x00)
#define USB_SUBCLASS_NO (0x00)
#define USB_PROTOCOL_NO (0x00)
/*! @} */

/*! \name IAD (Interface Association Descriptor) constants */
/*! @{ */
#define USB_CLASS_IAD (0xEF)
#define USB_SUBCLASS_IAD (0x02)
#define USB_PROTOCOL_IAD (0x01)
/*! @} */

/**
 * \brief USB request data transfer direction (bmRequestType)
 */
#define USB_REQT_DIR_OUT (0 << 7)  /*!< Host to device */
#define USB_REQT_DIR_H2D (0 << 7)  /*!< Host to device */
#define USB_REQT_DIR_IN (1 << 7)   /*!< Device to host */
#define USB_REQT_DIR_D2H (1 << 7)  /*!< Device to host */
#define USB_REQT_DIR_MASK (1 << 7) /*!< Mask */

/**
 * \brief USB request types (bmRequestType)
 */
#define USB_REQT_TYPE_STANDARD (0 << 5) /*!< Standard request */
#define USB_REQT_TYPE_CLASS (1 << 5)    /*!< Class-specific request */
#define USB_REQT_TYPE_VENDOR (2 << 5)   /*!< Vendor-specific request */
#define USB_REQT_TYPE_MASK (3 << 5)     /*!< Mask */

/**
 * \brief USB recipient codes (bmRequestType)
 */
#define USB_REQT_RECIP_DEVICE (0 << 0)    /*!< Recipient device */
#define USB_REQT_RECIP_INTERFACE (1 << 0) /*!< Recipient interface */
#define USB_REQT_RECIP_ENDPOINT (2 << 0)  /*!< Recipient endpoint */
#define USB_REQT_RECIP_OTHER (3 << 0)     /*!< Recipient other */
#define USB_REQT_RECIP_MASK (0x1F)        /*!< Mask */

/**
 * \brief Standard USB control transfer stages.
 */
enum usb_ctrl_stage { USB_SETUP_STAGE = 0, USB_DATA_STAGE = 1, USB_STATUS_STAGE = 2 };

/**
 * \brief Standard USB requests (bRequest)
 */
enum usb_req_code {
	USB_REQ_GET_STATUS    = 0,
	USB_REQ_CLEAR_FTR     = 1,
	USB_REQ_SET_FTR       = 3,
	USB_REQ_SET_ADDRESS   = 5,
	USB_REQ_GET_DESC      = 6,
	USB_REQ_SET_DESC      = 7,
	USB_REQ_GET_CONFIG    = 8,
	USB_REQ_SET_CONFIG    = 9,
	USB_REQ_GET_INTERFACE = 10,
	USB_REQ_SET_INTERFACE = 11,
	USB_REQ_SYNCH_FRAME   = 12,
	USB_REQ_SET_SEL       = 48,
	USB_REQ_ISOCH_DELAY   = 49
};

/**
 * \brief Standard USB device status flags
 *
 */
enum usb_dev_status {
	USB_DEV_STAT_BUS_POWERED  = 0,
	USB_DEV_STAT_SELF_POWERED = 1,
	USB_DEV_STAT_REMOTEWAKEUP = 2,
	USB_DEV_STAT_U1_ENABLE    = 4,
	USB_DEV_STAT_U2_ENABLE    = 8,
	USB_DEV_STAT_LTM_ENABLE   = 16
};

/**
 * \brief Standard USB Interface status flags
 *
 */
enum usb_interface_status {
	USB_IFACE_STAT_RESERVED       = 0,
	USB_IFACE_STAT_REMOTEWAKE_CAP = 1,
	USB_IFACE_STAT_REMOTEWAKE     = 2
};

/**
 * \brief Standard USB endpoint status flags
 *
 */
enum usb_endpoint_status { USB_EP_STAT_HALT = 1 };

/**
 * \brief Standard USB device feature flags
 *
 * \note valid for SetFeature request.
 */
enum usb_device_feature {
	USB_DEV_FTR_REMOTE_WAKEUP    = 1, /*!< Remote wakeup enabled */
	USB_DEV_FTR_TEST_MODE        = 2, /*!< USB test mode */
	USB_DEV_FTR_OTG_B_HNP_ENABLE = 3,
	USB_DEV_FTR_OTG_A_HNP_SP     = 4,
	USB_DEV_FTR_OTG_A_ALT_HNP_SP = 5,
	USB_DEV_FTR_U1_ENABLE        = 48,
	USB_DEV_FTR_U2_ENABLE        = 49,
	USB_DEV_FTR_LTM_ENABLE       = 50
};

/**
 * \brief Test Mode possible on HS USB device
 *
 * \note valid for USB_DEV_FTR_TEST_MODE request.
 */
enum usb_device_hs_test_mode {
	USB_DEV_TEST_MODE_J            = 1,
	USB_DEV_TEST_MODE_K            = 2,
	USB_DEV_TEST_MODE_SE0_NAK      = 3,
	USB_DEV_TEST_MODE_PACKET       = 4,
	USB_DEV_TEST_MODE_FORCE_ENABLE = 5
};

/**
 * \brief Standard Feature Selectors for Interface
 */
enum usb_iface_feature { USB_IFACE_FTR_FUNC_SUSP = 0 };

/**
 * \brief Standard USB endpoint feature/status flags
 */
enum usb_endpoint_feature { USB_EP_FTR_HALT = 0 };

/**
 * \brief Standard USB Test Mode Selectors
 */
enum usb_test_mode_selector {
	USB_TEST_J            = 0x01,
	USB_TEST_K            = 0x02,
	USB_TEST_SE0_NAK      = 0x03,
	USB_TEST_PACKET       = 0x04,
	USB_TEST_FORCE_ENABLE = 0x05
};

/**
 * \brief Standard USB descriptor types
 */
enum usb_descriptor_type {
	USB_DT_DEVICE             = 1,
	USB_DT_CONFIG             = 2,
	USB_DT_STRING             = 3,
	USB_DT_INTERFACE          = 4,
	USB_DT_ENDPOINT           = 5,
	USB_DT_DEVICE_QUALIFIER   = 6,
	USB_DT_OTHER_SPEED_CONFIG = 7,
	USB_DT_INTERFACE_POWER    = 8,
	USB_DT_OTG                = 9,
	USB_DT_DEBUG              = 10,
	USB_DT_IAD                = 11,
	USB_DT_BOS                = 15,
	USB_DT_DEV_CAP            = 16,
	USB_DT_SS_EP_COMPANION    = 48
};

/**
 * \brief Capability types
 */
enum usb_capability_type {
	USB_CAPT_WIRELESS     = 1,
	USB_CAPT_2_0_EXT      = 2,
	USB_CAPT_SUPER_SPEED  = 3,
	USB_CAPT_CONTAINER_ID = 4
};

/**
 * \brief USB 2.0 Extension attributes
 */
enum usb_2_0_ext_attr { USB_2_0_EXT_LPM_SP = 1 };

/**
 * \brief USB SuperSpeed Capability attributes
 */
enum usb_ss_cap_attr { USB_SS_LTM_SP };

/**
 * \brief USB Speed Supports
 */
enum usb_speed_sp {
	USB_SPEED_LOW_SP   = 1,
	USB_SPEED_LS_SP    = 1,
	USB_SPEED_FULL_SP  = 2,
	USB_SPEED_FS_SP    = 2,
	USB_SPEED_HIGH_SP  = 4,
	USB_SPEED_HS_SP    = 4,
	USB_SPEED_SUPER_SP = 8,
	USB_SPEED_SS_SP    = 8
};

/**
 * \brief Standard USB endpoint transfer types
 */
enum usb_ep_type {
	USB_EP_TYPE_CONTROL     = 0x00,
	USB_EP_TYPE_ISOCHRONOUS = 0x01,
	USB_EP_TYPE_BULK        = 0x02,
	USB_EP_TYPE_INTERRUPT   = 0x03,
	USB_EP_TYPE_MASK        = 0x03u
};

/**
 * \brief USB endpoint interrupt types
 */
enum usb_ep_int_type { USB_EP_INT_T_PERIODIC = 0x00u, USB_EP_INT_T_NOTIFICATION = 0x01u, USB_EP_INT_T_MASK = 0x03u };

/**
 * \brief Standard USB endpoint synchronization types
 */
enum usb_ep_sync_type {
	USB_EP_SYNC_T_NO       = 0x00u,
	USB_EP_SYNC_T_ASYNC    = 0x02u,
	USB_EP_SYNC_T_ADAPTIVE = 0x02u,
	USB_EP_SYNC_T_SYNC     = 0x03u,
	USB_EP_SYNC_T_MASK     = 0x03u
};

/**
 * \brief Standard USB endpoint usage types
 */
enum usb_ep_usage_type {
	USB_EP_USAGE_T_DATA          = 0x00u,
	USB_EP_USAGE_T_FEEDBACK      = 0x01u,
	USB_EP_USAGE_T_FEEDBACK_DATA = 0x02u,
	USB_EP_USAGE_T_MASK          = 0x03u
};

/**
 * \brief Standard USB language IDs for string descriptors
 */
enum usb_langid {
	USB_LANGID_EN_US = 0x0409 /*!< English (United States) */
};

/**
 * \brief Mask selecting the index part of an endpoint address
 */
#define USB_EP_ADDR_MASK 0x0f
/**
 * \brief Endpoint transfer direction is IN
 */
#define USB_EP_DIR_IN 0x80
/**
 * \brief Endpoint transfer direction is OUT
 */
#define USB_EP_DIR_OUT 0x00

/**
 * \brief Maximum length in bytes of a USB descriptor
 *
 * The maximum length of a USB descriptor is limited by the 8-bit
 * bLength field.
 */
#define USB_DESC_LEN_MAX 255

/*
 * 2-byte alignment requested for all USB structures.
 */
COMPILER_PACK_SET(1)

/**
 * \brief A USB Device SETUP request
 *
 * The data payload of SETUP packets always follows this structure.
 */
typedef struct usb_req {
	uint8_t bmRequestType;
	uint8_t bRequest;
	union {
		le16_t wValue;
		struct {
			uint8_t l;
			uint8_t h;
		} wValueBytes;
	};
	union {
		le16_t wIndex;
		struct {
			uint8_t l;
			uint8_t h;
		} wIndexBytes;
	};
	union {
		le16_t wLength;
		struct {
			uint8_t l;
			uint8_t h;
		} wLengthBytes;
	};
} usb_req_t;

/**
 * \brief Standard USB device descriptor structure
 */
typedef struct usb_dev_desc {
	uint8_t bLength;
	uint8_t bDescriptorType;
	le16_t  bcdUSB;
	uint8_t bDeviceClass;
	uint8_t bDeviceSubClass;
	uint8_t bDeviceProtocol;
	uint8_t bMaxPacketSize0;
	le16_t  idVendor;
	le16_t  idProduct;
	le16_t  bcdDevice;
	uint8_t iManufacturer;
	uint8_t iProduct;
	uint8_t iSerialNumber;
	uint8_t bNumConfigurations;
} usb_dev_desc_t;

/**
 * \brief Binary device Object Store (BOS) descriptor structure
 */
typedef struct usb_bos_desc {
	uint8_t bLength;
	uint8_t bDescriptorType;
	le16_t  wTotalLength;
	uint8_t bNumDeviceCaps;
} usb_bos_desc_t;

/**
 * \brief Device Capability Descriptor structure
 */
typedef struct usb_cap_desc {
	uint8_t bLength;
	uint8_t bDescriptorType;
	uint8_t bDevCapabilityType;
	uint8_t Vars[1];
} usb_cap_desc_t;

/**
 * \brief USB 2.0 Extension Descriptor structure
 */
typedef struct usb_2_0_ext {
	uint8_t  bLength;
	uint8_t  bDescriptorType;
	uint8_t  bDevCapabilityType;
	uint32_t bmAttributes;
} usb_2_0_ext_t;

/**
 * \brief LPM Device Capabilities descriptor structure
 */
typedef struct usb_2_0_ext usb_lpm_cap_desc_t;

/**
 * \brief SuperSpeed USB Device Capability structure
 */
typedef struct usb_ss_cap_desc {
	uint8_t bLength;
	uint8_t bDescriptorType;
	uint8_t bDevCapabilityType;
	uint8_t bmAttributes;
	le16_t  wSpeedsSupported;
	uint8_t bFunctionalitySupport;
	uint8_t bU1DevExitLat;
	uint8_t bU2DevExitLat;
} usb_ss_cap_desc_t;

/**
 * \brief USB Container ID Descriptor structure
 */
typedef struct usb_container_id_desc {
	uint8_t bLength;
	uint8_t bDescriptorType;
	uint8_t bDevCapabilityType;
	uint8_t bReserved;
	uint8_t ContainerID[16];
} usb_container_id_desc_t;

/**
 * \brief Standard USB device qualifier descriptor structure
 *
 * This descriptor contains information about the device when running at
 * the "other" speed (i.e. if the device is currently operating at high
 * speed, this descriptor can be used to determine what would change if
 * the device was operating at full speed.)
 */
typedef struct usb_dev_qual_desc {
	uint8_t bLength;
	uint8_t bDescriptorType;
	le16_t  bcdUSB;
	uint8_t bDeviceClass;
	uint8_t bDeviceSubClass;
	uint8_t bDeviceProtocol;
	uint8_t bMaxPacketSize0;
	uint8_t bNumConfigurations;
	uint8_t bReserved;
} usb_dev_qual_desc_t;

/**
 * \brief Standard USB configuration descriptor structure
 */
typedef struct usb_config_desc {
	uint8_t bLength;
	uint8_t bDescriptorType;
	le16_t  wTotalLength;
	uint8_t bNumInterfaces;
	uint8_t bConfigurationValue;
	uint8_t iConfiguration;
	uint8_t bmAttributes;
	uint8_t bMaxPower;
} usb_config_desc_t;

#define USB_CONFIG_ATTR_MUST_SET (1 << 7)      /*!< Must always be set */
#define USB_CONFIG_ATTR_BUS_POWERED (0 << 6)   /*!< Bus-powered */
#define USB_CONFIG_ATTR_SELF_POWERED (1 << 6)  /*!< Self-powered */
#define USB_CONFIG_ATTR_REMOTE_WAKEUP (1 << 5) /*!< remote wakeup supported */

#define USB_CONFIG_MAX_POWER(ma) (((ma) + 1) / 2) /*!< Max power in mA */

/**
 * \brief Standard USB association descriptor structure
 */
typedef struct usb_iad_desc {
	uint8_t bLength;           /*!< Size of this descriptor in bytes */
	uint8_t bDescriptorType;   /*!< Interface descriptor type */
	uint8_t bFirstInterface;   /*!< Number of interface */
	uint8_t bInterfaceCount;   /*!< value to select alternate setting */
	uint8_t bFunctionClass;    /*!< Class code assigned by the USB */
	uint8_t bFunctionSubClass; /*!< Sub-class code assigned by the USB */
	uint8_t bFunctionProtocol; /*!< Protocol code assigned by the USB */
	uint8_t iFunction;         /*!< Index of string descriptor */
} usb_iad_desc_t;

/**
 * \brief Standard USB interface descriptor structure
 */
typedef struct usb_iface_desc {
	uint8_t bLength;
	uint8_t bDescriptorType;
	uint8_t bInterfaceNumber;
	uint8_t bAlternateSetting;
	uint8_t bNumEndpoints;
	uint8_t bInterfaceClass;
	uint8_t bInterfaceSubClass;
	uint8_t bInterfaceProtocol;
	uint8_t iInterface;
} usb_iface_desc_t;

/**
 * \brief Standard USB endpoint descriptor structure
 */
typedef struct usb_ep_desc {
	uint8_t bLength;
	uint8_t bDescriptorType;
	uint8_t bEndpointAddress;
	uint8_t bmAttributes;
	le16_t  wMaxPacketSize;
	uint8_t bInterval;
} usb_ep_desc_t;

/**
 * \brief SuperSpeed Endpoint Companion descriptor structure
 */
typedef struct usb_ss_ep_comp_desc {
	uint8_t bLength;
	uint8_t bDescriptorType;
	uint8_t bMaxBurst;
	uint8_t bmAttributes;
	le16_t  wBytesPerInterval;
} usb_ss_ep_comp_desc_t;

/**
 * \brief LPM Token bmAttributes structure
 */
typedef struct usb_lpm_attributes {
	uint8_t bLinkState : 4;
	uint8_t HIRD : 4;
	uint8_t bRemoteWake : 1;
	uint8_t Reserved : 2;
} usb_lpm_attributes_t;

/**
 * \brief A standard USB string descriptor structure
 */
typedef struct usb_str_desc {
	uint8_t bLength;
	uint8_t bDescriptorType;
} usb_str_desc_t;

typedef struct usb_str_langid_desc {
	usb_str_desc_t desc;
	le16_t         string[1];
} usb_str_langid_desc_t;

COMPILER_PACK_RESET()

/** \name Macros to build USB standard descriptors */
/*@{*/

/** Build bytes for USB device descriptor. */
#define USB_DEV_DESC_BYTES(bcdUSB,                                                                                     \
                           bDeviceClass,                                                                               \
                           bDeviceSubClass,                                                                            \
                           bDeviceProtocol,                                                                            \
                           bMaxPacketSize0,                                                                            \
                           idVendor,                                                                                   \
                           idProduct,                                                                                  \
                           bcdDevice,                                                                                  \
                           iManufacturer,                                                                              \
                           iProduct,                                                                                   \
                           iSerialNumber,                                                                              \
                           bNumConfigurations)                                                                         \
	18,       /* bLength */                                                                                            \
	    0x01, /* bDescriptorType: DEVICE */                                                                            \
	    LE_BYTE0(bcdUSB), LE_BYTE1(bcdUSB), bDeviceClass, bDeviceSubClass, bDeviceProtocol, bMaxPacketSize0,           \
	    LE_BYTE0(idVendor), LE_BYTE1(idVendor), LE_BYTE0(idProduct), LE_BYTE1(idProduct), LE_BYTE0(bcdDevice),         \
	    LE_BYTE1(bcdDevice), iManufacturer, iProduct, iSerialNumber, bNumConfigurations

#define USB_DEV_QUAL_DESC_BYTES(                                                                                       \
    bcdUSB, bDeviceClass, bDeviceSubClass, bDeviceProtocol, bMaxPacketSize0, bNumConfigurations)                       \
	10,                          /* bLength */                                                                         \
	    USB_DT_DEVICE_QUALIFIER, /* bDescriptorType: DEVICE_QUALIFIER */                                               \
	    LE_BYTE0(bcdUSB), LE_BYTE1(bcdUSB), bDeviceClass, bDeviceSubClass, bDeviceProtocol, bMaxPacketSize0,           \
	    bNumConfigurations, 0

#define USB_DEV_DESC_LEN 18

/** Build bytes for USB configuration descriptor. */
#define USB_CONFIG_DESC_BYTES(                                                                                         \
    wTotalLength, bNumInterfaces, bConfigurationValue, iConfiguration, bmAttributes, bMaxPower)                        \
	9,        /* bLength */                                                                                            \
	    0x02, /* bDescriptorType: CONFIGURATION */                                                                     \
	    LE_BYTE0(wTotalLength), LE_BYTE1(wTotalLength), bNumInterfaces, bConfigurationValue, iConfiguration,           \
	    bmAttributes, bMaxPower

#define USB_OTH_SPD_CFG_DESC_BYTES(                                                                                    \
    wTotalLength, bNumInterfaces, bConfigurationValue, iConfiguration, bmAttributes, bMaxPower)                        \
	9,                             /* bLength */                                                                       \
	    USB_DT_OTHER_SPEED_CONFIG, /* bDescriptorType: OTH_SPD_CONFIGURATION */                                        \
	    LE_BYTE0(wTotalLength), LE_BYTE1(wTotalLength), bNumInterfaces, bConfigurationValue, iConfiguration,           \
	    bmAttributes, bMaxPower

#define USB_CONFIG_DESC_LEN 9

/** Build bytes for USB IAD descriptor. */
#define USB_IAD_DESC_BYTES(                                                                                            \
    bFirstInterface, bInterfaceCount, bFunctionClass, bFunctionSubClass, bFunctionProtocol, iFunction)                 \
	8,              /* bLength */                                                                                      \
	    USB_DT_IAD, /* bDescriptorType */                                                                              \
	    bFirstInterface, bInterfaceCount, bFunctionClass, bFunctionSubClass, bFunctionProtocol, iFunction

#define USB_IAD_DESC_LEN 8

/** Build bytes for USB interface descriptor. */
#define USB_IFACE_DESC_BYTES(bInterfaceNumber,                                                                         \
                             bAlternateSetting,                                                                        \
                             bNumEndpoints,                                                                            \
                             bInterfaceClass,                                                                          \
                             bInterfaceSubClass,                                                                       \
                             bInterfaceProtocol,                                                                       \
                             iInterface)                                                                               \
	9,        /* bLength */                                                                                            \
	    0x04, /* bDescriptorType: INTERFACE */                                                                         \
	    bInterfaceNumber, bAlternateSetting, bNumEndpoints, bInterfaceClass, bInterfaceSubClass, bInterfaceProtocol,   \
	    iInterface

#define USB_IFACE_DESC_LEN 9

/** Build bytes for USB endpoint descriptor. */
#define USB_ENDP_DESC_BYTES(bEndpointAddress, bmAttributes, wMaxPacketSize, bInterval)                                 \
	7,        /* bLength */                                                                                            \
	    0x05, /* bDescriptorType: ENDPOINT */                                                                          \
	    bEndpointAddress, bmAttributes, LE_BYTE0(wMaxPacketSize), LE_BYTE1(wMaxPacketSize), bInterval

#define USB_ENDP_DESC_LEN 7

/*@}*/

/** \brief Get a word (calculate by little endian 16-bit data)
 *  \param[in] ptr Byte pointer to the address to get data
 *  \return a 16-bit word
 */
static inline uint16_t usb_get_u16(const uint8_t *ptr)
{
	return (ptr[0] + (ptr[1] << 8));
}

/** \brief Get a double word (calculate by little endian 32-bit data)
 *  \param[in] ptr Byte pointer to the address to get data
 *  \return a 32-bit word
 */
static inline uint32_t usb_get_u32(const uint8_t *ptr)
{
	return (ptr[0] + (ptr[1] << 8) + (ptr[2] << 16) + (ptr[3] << 24));
}

/** \brief Get descriptor length
 *  \param[in] desc Byte pointer to the descriptor start address
 *  \return descriptor length
 */
static inline uint8_t usb_desc_len(const uint8_t *desc)
{
	return desc[0];
}

/** \brief Get descriptor type
 *  \param[in] desc Byte pointer to the descriptor start address
 *  \return descriptor type
 */
static inline uint8_t usb_desc_type(const uint8_t *desc)
{
	return desc[1];
}

/** \brief Get next USB descriptor
 *  \param[in] desc Byte pointer to the descriptor start address
 *  \return Byte pointer to the next descriptor
 */
static inline uint8_t *usb_desc_next(uint8_t *desc)
{
	return (desc + usb_desc_len(desc));
}

/** \brief Get idVendor of USB Device Descriptor
 *  \param[in] dev_desc Byte pointer to the descriptor start address
 *  \return 16-bit idVendor value
 */
static inline uint16_t usb_dev_desc_vid(const uint8_t *dev_desc)
{
	return usb_get_u16(dev_desc + 8);
}

/** \brief Get idProduct of USB Device Descriptor
 *  \param[in] dev_desc Byte pointer to the descriptor start address
 *  \return 16-bit idProduct value
 */
static inline uint16_t usb_dev_desc_pid(const uint8_t *dev_desc)
{
	return usb_get_u16(dev_desc + 10);
}

/** \brief Get wTotalLength of USB Configuration Descriptor
 *  \param[in] cfg_desc Byte pointer to the descriptor start address
 *  \return 16-bit total length of configuration list
 */
static inline uint16_t usb_cfg_desc_total_len(const uint8_t *cfg_desc)
{
	return usb_get_u16(cfg_desc + 2);
}

/** \brief Get Next USB Descriptor After the Configuration Descriptors list
 *  \param[in] cfg_desc Byte pointer to the descriptor start address
 *  \return Byte pointer to descriptor after configuration end
 */
static inline uint8_t *usb_cfg_desc_next(uint8_t *cfg_desc)
{
	return (cfg_desc + usb_cfg_desc_total_len(cfg_desc));
}

/** \brief Find specific USB Descriptor by its type
 *  \param[in] desc Byte pointer to the descriptor start address
 *  \param[in] eof  Byte pointer to the descriptor end address
 *  \param[in] type The descriptor type expected
 *  \return Pointer to the descriptor
 *  \retval NULL if not found
 */
uint8_t *usb_find_desc(uint8_t *desc, uint8_t *eof, uint8_t type);

/** Get interface descriptor next to the specified one (by interface number)
 *  \param[in] desc Byte pointer to the descriptor start address
 *  \param[in] eof  Byte pointer to the descriptor end address
 *  \param[in] iface_n The interface number to check
 *  \return Pointer to the descriptor
 *  \retval >= eof if not found
 */
uint8_t *usb_find_iface_after(uint8_t *desc, uint8_t *eof, uint8_t iface_n);

/** Find endpoint descriptor, breaks if interface descriptor detected
 *  \param[in] desc Byte pointer to the descriptor start address
 *  \param[in] eof  Byte pointer to the descriptor end address
 *  \return Pointer to the descriptor
 *  \retval NULL if not found
 */
uint8_t *usb_find_ep_desc(uint8_t *desc, uint8_t *eof);

/** Find configuration descriptor by its configuration number
 *  \param[in] desc Byte pointer to the descriptor start address
 *  \param[in] eof  Byte pointer to the descriptor end address
 *  \param[in] cfg_value The configure value expected
 *  \return Pointer to the descriptor
 *  \retval NULL if not found
 */
uint8_t *usb_find_cfg_desc(uint8_t *desc, uint8_t *eof, uint8_t cfg_value);

/** Find other speed configuration descriptor by its configuration number
 *  \param[in] desc Byte pointer to the descriptor start address
 *  \param[in] eof  Byte pointer to the descriptor end address
 *  \param[in] cfg_value The configure value expected
 *  \return Pointer to the descriptor
 *  \retval NULL if not found
 */
uint8_t *usb_find_othspdcfg_desc(uint8_t *desc, uint8_t *eof, uint8_t cfg_value);

/** Find string descriptor by its index
 *  \param[in] desc Byte pointer to the descriptor start address
 *  \param[in] eof  Byte pointer to the descriptor end address
 *  \param[in] str_index The string index expected
 *  \return Pointer to the descriptor
 *  \retval NULL if not found
 */
uint8_t *usb_find_str_desc(uint8_t *desc, uint8_t *eof, uint8_t str_index);

#ifdef __cplusplus
}
#endif

/*! @} */

#endif /* _USB_PROTOCOL_H_ */
