145 lines
4.2 KiB
C
145 lines
4.2 KiB
C
/***************************************************************************
|
|
*
|
|
* Copyright 2015-2019 BES.
|
|
* All rights reserved. All unpublished rights reserved.
|
|
*
|
|
* No part of this work may be used or reproduced in any form or by any
|
|
* means, or stored in a database or retrieval system, without prior written
|
|
* permission of BES.
|
|
*
|
|
* Use of this work is governed by a license granted by BES.
|
|
* This work contains confidential and proprietary information of
|
|
* BES. which is protected by copyright, trade secret,
|
|
* trademark and other intellectual property rights.
|
|
*
|
|
****************************************************************************/
|
|
#ifndef __USB_DESCRIPTOR_H__
|
|
#define __USB_DESCRIPTOR_H__
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/* Standard requests */
|
|
#define GET_STATUS (0)
|
|
#define CLEAR_FEATURE (1)
|
|
#define SET_FEATURE (3)
|
|
#define SET_ADDRESS (5)
|
|
#define GET_DESCRIPTOR (6)
|
|
#define SET_DESCRIPTOR (7)
|
|
#define GET_CONFIGURATION (8)
|
|
#define SET_CONFIGURATION (9)
|
|
#define GET_INTERFACE (10)
|
|
#define SET_INTERFACE (11)
|
|
|
|
/* bmRequestType.direction */
|
|
#define HOST_TO_DEVICE (0)
|
|
#define DEVICE_TO_HOST (1)
|
|
|
|
/* bmRequestType.type*/
|
|
#define STANDARD_TYPE (0)
|
|
#define CLASS_TYPE (1)
|
|
#define VENDOR_TYPE (2)
|
|
#define RESERVED_TYPE (3)
|
|
|
|
/* bmRequestType.recipient */
|
|
#define DEVICE_RECIPIENT (0)
|
|
#define INTERFACE_RECIPIENT (1)
|
|
#define ENDPOINT_RECIPIENT (2)
|
|
#define OTHER_RECIPIENT (3)
|
|
|
|
/* Descriptors */
|
|
#define DESCRIPTOR_TYPE(wValue) (wValue >> 8)
|
|
#define DESCRIPTOR_INDEX(wValue) (wValue & 0xff)
|
|
|
|
/* Device status */
|
|
#define DEVICE_STATUS_SELF_POWERED (1U<<0)
|
|
#define DEVICE_STATUS_REMOTE_WAKEUP (1U<<1)
|
|
|
|
/* Endpoint status */
|
|
#define ENDPOINT_STATUS_HALT (1U<<0)
|
|
|
|
/* Standard feature selectors */
|
|
#define DEVICE_REMOTE_WAKEUP (1)
|
|
#define ENDPOINT_HALT (0)
|
|
#define TEST_MODE (2)
|
|
|
|
/* Test mode selectors */
|
|
#define TEST_MODE_TEST_J (1)
|
|
#define TEST_MODE_TEST_K (2)
|
|
#define TEST_MODE_TEST_SE0_NAK (3)
|
|
#define TEST_MODE_TEST_PACKET (4)
|
|
#define TEST_MODE_FORCE_ENABLE (5)
|
|
|
|
/* Standard descriptor types */
|
|
#define DEVICE_DESCRIPTOR (1)
|
|
#define CONFIGURATION_DESCRIPTOR (2)
|
|
#define STRING_DESCRIPTOR (3)
|
|
#define INTERFACE_DESCRIPTOR (4)
|
|
#define ENDPOINT_DESCRIPTOR (5)
|
|
#define QUALIFIER_DESCRIPTOR (6)
|
|
#define BOS_DESCRIPTOR (0xF)
|
|
|
|
/* Standard descriptor lengths */
|
|
#define DEVICE_DESCRIPTOR_LENGTH (0x12)
|
|
#define CONFIGURATION_DESCRIPTOR_LENGTH (0x09)
|
|
#define INTERFACE_DESCRIPTOR_LENGTH (0x09)
|
|
#define ENDPOINT_DESCRIPTOR_LENGTH (0x07)
|
|
#define QUALIFIER_DESCRIPTOR_LENGTH (0x0A)
|
|
#define BOS_DESCRIPTOR_LENGTH (0x05)
|
|
|
|
/*string offset*/
|
|
#define STRING_OFFSET_LANGID (0)
|
|
#define STRING_OFFSET_IMANUFACTURER (1)
|
|
#define STRING_OFFSET_IPRODUCT (2)
|
|
#define STRING_OFFSET_ISERIAL (3)
|
|
#define STRING_OFFSET_ICONFIGURATION (4)
|
|
#define STRING_OFFSET_IINTERFACE (5)
|
|
|
|
/* USB Specification Release Number */
|
|
#define USB_VERSION_2_0 (0x0200)
|
|
#define USB_VERSION_1_1 (0x0101)
|
|
|
|
/* Least/Most significant byte of short integer */
|
|
#define LSB(n) ((n)&0xff)
|
|
#define MSB(n) (((n)&0xff00)>>8)
|
|
|
|
#define LSB0(n) ((n) & 0xFF)
|
|
#define LSB1(n) (((n) >> 8) & 0xFF)
|
|
#define LSB2(n) (((n) >> 16) & 0xFF)
|
|
#define LSB3(n) (((n) >> 24) & 0xFF)
|
|
|
|
/* Convert physical endpoint number to descriptor endpoint number */
|
|
#define PHY_TO_DESC(endpoint, dir) (((endpoint) & 0xF) | ((dir == EP_OUT) ? 0 : 0x80))
|
|
|
|
/* bmAttributes in configuration descriptor */
|
|
/* C_RESERVED must always be set */
|
|
#define C_RESERVED (1U<<7)
|
|
#define C_SELF_POWERED (1U<<6)
|
|
#define C_REMOTE_WAKEUP (1U<<5)
|
|
|
|
/* bMaxPower in configuration descriptor */
|
|
#define C_POWER(mA) ((mA)/2)
|
|
|
|
/* bmAttributes in endpoint descriptor */
|
|
#define E_CONTROL (0x00)
|
|
#define E_ISOCHRONOUS (0x01)
|
|
#define E_BULK (0x02)
|
|
#define E_INTERRUPT (0x03)
|
|
|
|
/* For isochronous endpoints only: */
|
|
#define E_NO_SYNCHRONIZATION (0x00)
|
|
#define E_ASYNCHRONOUS (0x04)
|
|
#define E_ADAPTIVE (0x08)
|
|
#define E_SYNCHRONOUS (0x0C)
|
|
#define E_DATA (0x00)
|
|
#define E_FEEDBACK (0x10)
|
|
#define E_IMPLICIT_FEEDBACK (0x20)
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif
|
|
|