📄 usb_descriptors.h
字号:
//! @file usb_descriptors.h,v
//!
//! Copyright (c) 2004 Atmel.
//!
//! Use of this program is subject to Atmel's End User License Agreement.
//! Please read file license.txt for copyright notice.
//!
//! @brief CDC USB Identifers.
//!
//! This file contains the usb parameters that uniquely identify the
//! CDC application through descriptor tables.
//!
//! @version 1.4 at90usb128-demo-cdc-1_0_3 $Id: usb_descriptors.h,v 1.4 2006/03/14 18:01:47 rletendu Exp $
//!
//! @todo
//! @bug
#ifndef _USB_USERCONFIG_H_
#define _USB_USERCONFIG_H_
//_____ I N C L U D E S ____________________________________________________
#include "config.h"
#include "modules/usb/device_chap9/usb_standard_request.h"
#include "conf_usb.h"
//_____ M A C R O S ________________________________________________________
#define Usb_get_dev_desc_pointer() (&(usb_dev_desc.bLength))
#define Usb_get_dev_desc_length() (sizeof (usb_dev_desc))
#define Usb_get_conf_desc_pointer() (&(usb_conf_desc.cfg.bLength))
#define Usb_get_conf_desc_length() (sizeof (usb_conf_desc))
//_____ U S B D E F I N E _______________________________________________
// USB Device descriptor
#define USB_SPECIFICATION 0x0200
#define DEVICE_CLASS 0x02 // CDC class
#define DEVICE_SUB_CLASS 0 // each configuration has its own sub-class
#define DEVICE_PROTOCOL 0 // each configuration has its own protocol
#define EP_CONTROL_LENGTH 64
#define VENDOR_ID 0x03EB // Atmel vendor ID = 03EBh
#define PRODUCT_ID 0x2018
#define RELEASE_NUMBER 0x1000
#define MAN_INDEX 0x00
#define PROD_INDEX 0x00
#define SN_INDEX 0x00
#define NB_CONFIGURATION 1
// CDC CONFIGURATION
#define NB_INTERFACE 2
#define CONF_NB 1
#define CONF_INDEX 0
#define CONF_ATTRIBUTES USB_CONFIG_BUSPOWERED
#define MAX_POWER 50 // 100 mA
// Interface 0 descriptor
#define INTERFACE0_NB 0
#define ALTERNATE0 0
#define NB_ENDPOINT0 1
#define INTERFACE0_CLASS 0x02 // CDC ACM Com
#define INTERFACE0_SUB_CLASS 0x02
#define INTERFACE0_PROTOCOL 0x01
#define INTERFACE0_INDEX 0
// Interface 1 descriptor
#define INTERFACE1_NB 1
#define ALTERNATE1 0
#define NB_ENDPOINT1 2
#define INTERFACE1_CLASS 0x0A // CDC ACM Data
#define INTERFACE1_SUB_CLASS 0
#define INTERFACE1_PROTOCOL 0
#define INTERFACE1_INDEX 0
// USB Endpoint 3 descriptor
// Interrupt IN
#define TX_EP_SIZE 0x20
#define ENDPOINT_NB_3 0x80 | INT_EP
#define EP_ATTRIBUTES_3 0x03 // BULK = 0x02, INTERUPT = 0x03
#define EP_SIZE_3 TX_EP_SIZE
#define EP_INTERVAL_3 0xFF //ms interrupt pooling from host
// USB Endpoint 1 descriptor
// Bulk IN
#define ENDPOINT_NB_1 0x80 | TX_EP
#define EP_ATTRIBUTES_1 0x02 // BULK = 0x02, INTERUPT = 0x03
#define EP_SIZE_1 0x20
#define EP_INTERVAL_1 0x00
// USB Endpoint 2 descriptor
//Bulk OUT RX endpoint
#define ENDPOINT_NB_2 RX_EP
#define EP_ATTRIBUTES_2 0x02 // BULK = 0x02, INTERUPT = 0x03
#define EP_SIZE_2 0x20
#define EP_INTERVAL_2 0x00
#define DEVICE_STATUS 0x00 // TBD
#define INTERFACE_STATUS 0x00 // TBD
#define LANG_ID 0x00
#define USB_MN_LENGTH 5
#define USB_MANUFACTURER_NAME \
{ Usb_unicode('A') \
, Usb_unicode('T') \
, Usb_unicode('M') \
, Usb_unicode('E') \
, Usb_unicode('L') \
}
#define USB_PN_LENGTH 16
#define USB_PRODUCT_NAME \
{ Usb_unicode('A') \
,Usb_unicode('V') \
,Usb_unicode('R') \
,Usb_unicode(' ') \
,Usb_unicode('U') \
,Usb_unicode('S') \
,Usb_unicode('B') \
,Usb_unicode(' ') \
,Usb_unicode('C') \
,Usb_unicode('D') \
,Usb_unicode('C') \
,Usb_unicode(' ') \
,Usb_unicode('D') \
,Usb_unicode('E') \
,Usb_unicode('M') \
,Usb_unicode('O') \
}
#define USB_SN_LENGTH 0x05
#define USB_SERIAL_NUMBER \
{Usb_unicode('1') \
,Usb_unicode('.') \
,Usb_unicode('0') \
,Usb_unicode('.') \
,Usb_unicode('0') \
}
#define LANGUAGE_ID 0x0409
//! Usb Request
typedef struct
{
U8 bmRequestType; //!< Characteristics of the request
U8 bRequest; //!< Specific request
U16 wValue; //!< field that varies according to request
U16 wIndex; //!< field that varies according to request
U16 wLength; //!< Number of bytes to transfer if Data
} S_UsbRequest;
//! Usb Device Descriptor
typedef struct {
U8 bLength; //!< Size of this descriptor in bytes
U8 bDescriptorType; //!< DEVICE descriptor type
U16 bscUSB; //!< Binay Coded Decimal Spec. release
U8 bDeviceClass; //!< Class code assigned by the USB
U8 bDeviceSubClass; //!< Sub-class code assigned by the USB
U8 bDeviceProtocol; //!< Protocol code assigned by the USB
U8 bMaxPacketSize0; //!< Max packet size for EP0
U16 idVendor; //!< Vendor ID. ATMEL = 0x03EB
U16 idProduct; //!< Product ID assigned by the manufacturer
U16 bcdDevice; //!< Device release number
U8 iManufacturer; //!< Index of manu. string descriptor
U8 iProduct; //!< Index of prod. string descriptor
U8 iSerialNumber; //!< Index of S.N. string descriptor
U8 bNumConfigurations; //!< Number of possible configurations
} S_usb_device_descriptor;
//! Usb Configuration Descriptor
typedef struct {
U8 bLength; //!< size of this descriptor in bytes
U8 bDescriptorType; //!< CONFIGURATION descriptor type
U16 wTotalLength; //!< total length of data returned
U8 bNumInterfaces; //!< number of interfaces for this conf.
U8 bConfigurationValue; //!< value for SetConfiguration resquest
U8 iConfiguration; //!< index of string descriptor
U8 bmAttibutes; //!< Configuration characteristics
U8 MaxPower; //!< maximum power consumption
} S_usb_configuration_descriptor;
//! Usb Interface Descriptor
typedef struct {
U8 bLength; //!< size of this descriptor in bytes
U8 bDescriptorType; //!< INTERFACE descriptor type
U8 bInterfaceNumber; //!< Number of interface
U8 bAlternateSetting; //!< value to select alternate setting
U8 bNumEndpoints; //!< Number of EP except EP 0
U8 bInterfaceClass; //!< Class code assigned by the USB
U8 bInterfaceSubClass; //!< Sub-class code assigned by the USB
U8 bInterfaceProtocol; //!< Protocol code assigned by the USB
U8 iInterface; //!< Index of string descriptor
} S_usb_interface_descriptor;
//! Usb Endpoint Descriptor
typedef struct {
U8 bLength; //!< Size of this descriptor in bytes
U8 bDescriptorType; //!< ENDPOINT descriptor type
U8 bEndpointAddress; //!< Address of the endpoint
U8 bmAttributes; //!< Endpoint's attributes
U16 wMaxPacketSize; //!< Maximum packet size for this EP
U8 bInterval; //!< Interval for polling EP in ms
} S_usb_endpoint_descriptor;
//! Usb Device Qualifier Descriptor
typedef struct {
U8 bLength; //!< Size of this descriptor in bytes
U8 bDescriptorType; //!< Device Qualifier descriptor type
U16 bscUSB; //!< Binay Coded Decimal Spec. release
U8 bDeviceClass; //!< Class code assigned by the USB
U8 bDeviceSubClass; //!< Sub-class code assigned by the USB
U8 bDeviceProtocol; //!< Protocol code assigned by the USB
U8 bMaxPacketSize0; //!< Max packet size for EP0
U8 bNumConfigurations; //!< Number of possible configurations
U8 bReserved; //!< Reserved for future use, must be zero
} S_usb_device_qualifier_descriptor;
//! Usb Language Descriptor
typedef struct {
U8 bLength; //!< size of this descriptor in bytes
U8 bDescriptorType; //!< STRING descriptor type
U16 wlangid; //!< language id
} S_usb_language_id;
//_____ U S B M A N U F A C T U R E R D E S C R I P T O R _______________
//struct usb_st_manufacturer
typedef struct {
U8 bLength; // size of this descriptor in bytes
U8 bDescriptorType; // STRING descriptor type
U16 wstring[USB_MN_LENGTH];// unicode characters
} S_usb_manufacturer_string_descriptor;
//_____ U S B P R O D U C T D E S C R I P T O R _________________________
//struct usb_st_product
typedef struct {
U8 bLength; // size of this descriptor in bytes
U8 bDescriptorType; // STRING descriptor type
U16 wstring[USB_PN_LENGTH];// unicode characters
} S_usb_product_string_descriptor;
//_____ U S B S E R I A L N U M B E R D E S C R I P T O R _____________
//struct usb_st_serial_number
typedef struct {
U8 bLength; // size of this descriptor in bytes
U8 bDescriptorType; // STRING descriptor type
U16 wstring[USB_SN_LENGTH];// unicode characters
} S_usb_serial_number;
/*_____ U S B C D C D E S C R I P T O R __________________________________*/
typedef struct
{
S_usb_configuration_descriptor cfg;
S_usb_interface_descriptor ifc0;
U8 CS_INTERFACE[19];
S_usb_endpoint_descriptor ep3;
S_usb_interface_descriptor ifc1;
S_usb_endpoint_descriptor ep1;
S_usb_endpoint_descriptor ep2;
} S_usb_user_configuration_descriptor;
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -