📄 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 HID generic Identifers.
//!
//! This file contains the usb parameters that uniquely identify the
//! application through descriptor tables.
//!
//! @version 1.2 at90usb128-demo-hidgen-std-2_0_0 $Id: usb_descriptors.h,v 1.2 2007/01/26 16:20:13 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 0 // each configuration has its own 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 0x2013
#define RELEASE_NUMBER 0x1000
#define MAN_INDEX 0x01
#define PROD_INDEX 0x02
#define SN_INDEX 0x03
#define NB_CONFIGURATION 1
// HID generic CONFIGURATION
#define NB_INTERFACE 1
#define CONF_NB 1
#define CONF_INDEX 0
#define CONF_ATTRIBUTES USB_CONFIG_BUSPOWERED
#define MAX_POWER 50 // 100 mA
// USB Interface descriptor
#define INTERFACE_NB 0
#define ALTERNATE 0
#define NB_ENDPOINT 2
#define INTERFACE_CLASS 0x03 // HID Class
#define INTERFACE_SUB_CLASS 0x00
#define INTERFACE_PROTOCOL 0x00
#define INTERFACE_INDEX 0
// USB Endpoint 1 descriptor FS
#define ENDPOINT_NB_1 (EP_HID_IN | 0x80)
#define EP_ATTRIBUTES_1 0x03 // BULK = 0x02, INTERUPT = 0x03
#define EP_IN_LENGTH 8
#define EP_SIZE_1 EP_IN_LENGTH
#define EP_INTERVAL_1 20 //interrupt pooling from host
// USB Endpoint 1 descriptor FS
#define ENDPOINT_NB_2 (EP_HID_OUT)
#define EP_ATTRIBUTES_2 0x03 // BULK = 0x02, INTERUPT = 0x03
#define EP_OUT_LENGTH 8
#define EP_SIZE_2 EP_OUT_LENGTH
#define EP_INTERVAL_2 20 //interrupt pooling from host
#define SIZE_OF_REPORT 0x35
#define LENGTH_OF_REPORT_IN 0x08
#define LENGTH_OF_REPORT_OUT 0x08
#define DEVICE_STATUS 0x00 // TBD
#define INTERFACE_STATUS 0x00 // TBD
#define LANG_ID 0x00
/* HID specific */
#define HID 0x21
#define REPORT 0x22
#define SET_REPORT 0x02
#define SET_HID_REPORT 0x03
#define HID_DESCRIPTOR 0x21
#define HID_BDC 0x1001
#define HID_COUNTRY_CODE 0x00
#define HID_CLASS_DESC_NB 0x01
#define HID_DESCRIPTOR_TYPE 0x22
#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('H') \
,Usb_unicode('I') \
,Usb_unicode('D') \
,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 H I D D E S C R I P T O R __________________________________*/
typedef struct {
U8 bLength; /* Size of this descriptor in bytes */
U8 bDescriptorType; /* HID descriptor type */
U16 bscHID; /* Binay Coded Decimal Spec. release */
U8 bCountryCode; /* Hardware target country */
U8 bNumDescriptors; /* Number of HID class descriptors to follow */
U8 bRDescriptorType; /* Report descriptor type */
U16 wDescriptorLength; /* Total length of Report descriptor */
} S_usb_hid_descriptor;
typedef struct
{
S_usb_configuration_descriptor cfg;
S_usb_interface_descriptor ifc;
S_usb_hid_descriptor hid;
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 + -