?? usb.h
字號:
/******************************************************************
本程序只供學習使用,未經作者許可,不得用于其它任何用途
我的郵箱:computer-lov@tom.com
歡迎訪問我的blog: http://computer00.21ic.org
USB.H file
作者:Computer-lov
建立日期: 2007.03.20
修改日期: 2007.03.22
版本:V1.1
版權所有,盜版必究。
Copyright(C) Computer-lov 2007-2017
All rights reserved
*******************************************************************/
#ifndef __USB_H__
#define __USB_H__
#include "my_type.h"
// 定義標準的描述符類型,也就是USB分配的各種描述符的編號,即bDescriptorType 字段的值
#define DEVICE_DESCRIPTOR 0x01 //設備描述符
#define CONFIGURATION_DESCRIPTOR 0x02 //配置描述符
#define STRING_DESCRIPTOR 0x03 //字符串描述符
#define INTERFACE_DESCRIPTOR 0x04 //接口描述符
#define ENDPOINT_DESCRIPTOR 0x05 //端點描述符
#define HID_DESCRIPTOR 0x21 //HID描述符
#define REPORT_DESCRIPTOR 0x22 //報告描述符
#define PHYSICAL_DESCRIPTOR 0x23 //物理描述符
//定義標準的USB請求命令,即USB分配的各種請求的編號,即bRequest字段的值
#define GET_STATUS 0x00 //獲取狀態請求
#define CLEAR_FEATURE 0x01 //清除特性請求
#define SET_FEATURE 0x03 //設置特性請求
#define SET_ADDRESS 0x05 //設置地址請求
#define GET_DESCRIPTOR 0x06 //獲取描述符請求
#define SET_DESCRIPTOR 0x07 //設置描述符請求
#define GET_CONFIGURATION 0x08 //獲取配置請求
#define SET_CONFIGURATION 0x09 //設置配置請求
#define GET_INTERFACE 0x0A //獲取接口請求
#define SET_INTERFACE 0x0B //設置接口請求
#define SYNCH_FRAME 0x0C //同步幀請求
//定義USB HID特定命令請求
#define GET_REPORT 0x01 //獲取報告
#define GET_IDLE 0x02 //獲取空閑狀態
#define GET_PROTOCOL 0x03 //獲取協議
#define SET_REPORT 0x09 //設置報告
#define SET_IDLE 0x0A //設置空閑
#define SET_PROTOCOL 0x0B //設置協議
//定義特性選擇器
#define ENDPOINT_HALT 0x00 //端點的禁止特性
#define DEVICE_REMOTE_WAKEUP 0x01 //設備的遠程喚醒特性
//使用的端點數
//#define Number_Endpoint 0x05 //端點數量為5
//定義的端點類型
#define ENDPOINT_TYPE_CONTROL 0x00 //控制傳輸
#define ENDPOINT_TYPE_ISOCHRONOUS 0x01 //同步傳輸
#define ENDPOINT_TYPE_BULK 0x02 //批量傳輸
#define ENDPOINT_TYPE_INTERRUPT 0x03 //中斷傳輸
//定義標準的設備描述符結構
typedef struct _DEVICE_DCESCRIPTOR_STRUCT
{
uint8 blength; //設備描述符的字節數大小
uint8 bDescriptorType; //設備描述符類型編號
uint16 bcdUSB; //USB版本號
uint8 bDeviceClass; //USB分配的設備類代碼
uint8 bDeviceSubClass; //USB分配的子類代碼
uint8 bDeviceProtocol; //USB分配的設備協議代碼
uint8 bMaxPacketSize0; //端點0的最大包大小
uint16 idVendor; //廠商編號
uint16 idProduct; //產品編號
uint16 bcdDevice; //設備出廠編號
uint8 iManufacturer; //設備廠商字符串的索引
uint8 iProduct; //描述產品字符串的索引
uint8 iSerialNumber; //描述設備序列號字符串的索引
uint8 bNumConfigurations; //可能的配置數量
}
DEVICE_DESCRIPTOR_STRUCT, * pDEVICE_DESCRIPTOR_STRUCT;
//定義標準的配置描述符結構
typedef struct _CONFIGURATION_DESCRIPTOR_STRUCT
{
uint8 bLength; //配置描述符的字節數大小
uint8 bDescriptorType; //配置描述符類型編號
uint16 wTotalLength; //此配置返回的所有數據大小
uint8 bNumInterfaces; //此配置所支持的接口數量
uint8 bConfigurationValue; //Set_Configuration命令所需要的參數值
uint8 iConfiguration; //描述該配置的字符串的索引值
uint8 bmAttributes; //供電模式的選擇
uint8 MaxPower; //設備從總線提取的最大電流
}
CONFIGURATION_DESCRIPTOR_STRUCT, * pCONFIGURATION_DESCRIPTOR_STRUCT;
//定義標準的接口描述符結構
typedef struct _INTERFACE_DESCRIPTOR_STRUCT
{
uint8 bLength; //接口描述符的字節數大小
uint8 bDescriptorType; //接口描述符的類型編號
uint8 bInterfaceNumber; //該接口的編號
uint8 bAlternateSetting; //備用的接口描述符編號
uint8 bNumEndpoints; //該接口使用的端點數,不包括端點0
uint8 bInterfaceClass; //接口類型
uint8 bInterfaceSubClass; //接口子類型
uint8 bInterfaceProtocol; //接口遵循的協議
uint8 iInterface; //描述該接口的字符串索引值
}
INTERFACE_DESCRIPTOR_STRUCT, * pINTERFACE_DESCRIPTOR_STRUCT;
//定義標準的端點描述符結構
typedef struct _ENDPOINT_DESCRIPTOR_STRUCT
{
uint8 bLength; //端點描述符字節數大小
uint8 bDescriptorType; //端點描述符類型編號
uint8 bEndpointAddress; //端點地址及輸入輸出屬性
uint8 bmAttributes; //端點的傳輸類型屬性
uint16 wMaxPacketSize; //端點收、發的最大包大小
uint8 bInterval; //主機查詢端點的時間間隔
}
ENDPOINT_DESCRIPTOR_STRUCT, * pENDPOINT_DESCRIPTOR_STRUCT;
//HID描述符中的下級描述符號
typedef struct _HID_SUB_DESCRIPTOR_STRUCT
{
uint8 bDescriptorType; //下級描述符的類型編號
uint16 wDescriptorLength; //下級描述符的長度
}
HID_SUB_DESCRIPTOR_STRUCT,*pHID_SUB_DESCRIPTOR_STRUCT;
#define NUM_SUB_DESCRIPTORS 1
//定義HID描述符結構
typedef struct _HID_DESCRIPTOR_STRUCT
{
uint8 bLength;
uint8 bDescriptorType;
uint16 bcdHID;
uint8 bCountryCode;
uint8 bNumDescriptors;
HID_SUB_DESCRIPTOR_STRUCT HidSubDescriptors[NUM_SUB_DESCRIPTORS];
}
HID_DESCRIPTOR_STRUCT,*pHID_DESCRIPTOR_STRUCT;
//一個字符串描述符結構
typedef struct _STRING_DESCRIPTOR_STRUCT
{
uint8 bLength; //字符串描述符的字節數大小
uint8 bDescriptorType; //字符串描述符類型編號
uint8 SomeDesriptor[36]; //UNICODE編碼的字符串
}
STRING_DESCRIPTOR_STRUCT, * pSTRING_DESCRIPTOR_STRUCT;
//標準設備請求命令結構
typedef struct _REQUESTCMD
{
uint8 bmRequestType; //請求命令類型
uint8 bRequest; //請求命令代碼
uint16 wValue; //命令信息
uint16 wIndex; //索引信息
uint16 wLength; //傳輸數據大小
}
REQUESTCMD, * pREQUESTCMD;
//setup_packet緩沖區
#define MAX_CONTROL_DATA_SIZE 16
typedef struct _control_data_buff
{
REQUESTCMD DeviceRequest; //USB設備請求
uint16 wLength;
uint16 wCount;
uint8 * pData;
uint8 dataBuffer[MAX_CONTROL_DATA_SIZE];
}CONTROL_DATA_BUFF;
#endif
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -