?? descriptor.c
字號:
#include "mytype.h"
#include "descriptor.h"
#ifndef _swap_data_
#define _swap_data_
#define SWAP16(x) ((((uint16)(x))<<8)|(((uint16)(x))>>8)) //高低字節交換
#define LSB(x) ((uint8)(x)) //取一個整數的低字節
#define MSB(x) ((uint8)(((uint16)(x))>>8)) //取一個整數的高字節
#endif
code DEVICE_DESCRIPTOR_STRUCT device_descriptor = //設備描述符
{
sizeof(DEVICE_DESCRIPTOR_STRUCT), //設備描述符的字節數大小
USB_DEVICE_DESCRIPTOR, //設備描述符類型編號
SWAP16(0x0110), //USB版本號,USB1.1
0x00, //USB分配的設備類代碼
0x00, //USB分配的子類代碼
0x00, //USB分配的設備協議代碼
0x10, //端點0的最大包大小
SWAP16(0x0925), //廠商編號VID,這里只是作為測試用,請使用自己的VID
SWAP16(0x1299), //產品編號PID,這里只是作為測試用,請使用自己的PID
SWAP16(0x0001), //設備出廠編號
0x01, //設備廠商字符串的索引
0x02, //描述產品字符串的索引
0x03, //描述設備序列號字符串的索引
0x01 //可能的配置數量
};
code USB_DESCRIPTOR_STRUCT usb_descriptor =
//配置描述符
{
sizeof(CONFIGURATION_DESCRIPTOR_STRUCT), //配置描述符的字節數大小
USB_CONFIGURATION_DESCRIPTOR, //配置描述符類型編號
SWAP16(sizeof(USB_DESCRIPTOR_STRUCT)),
0x01, //只包含一個接口
0x01, //該配置的編號
0x00, //iConfiguration字段
0xA0, //采用總線供電,支持遠程喚醒
0xC8 //從總線獲取最大電流400mA
},
//接口描述符
{
sizeof(INTERFACE_DESCRIPTOR_STRUCT), //接口描述符的字節數大小
USB_INTERFACE_DESCRIPTOR, //接口描述符類型編號
0x00, //接口編號為0
0x00, //該接口描述符的編號
ENDPOINT_NUMBER, //非0端點數量為2,只使用端點主端點輸入和輸出
0x03, //人機接口設備(HID)類
0x00, //使用的子類
0x00, //使用的協議
0x00 //接口描述符字符串索引
},
//HID描述符
{
sizeof(HID_DESCRIPTOR_STRUCT), //HID描述符的字節數大小
USB_HID_DESCRIPTOR, //HID描述符類型編號
SWAP16(0x0101), //HID類協議版本號,為1.1
0x00, //固件的國家地區代號
NUM_SUB_DESCRIPTORS, //下級描述符的數量
{
{
USB_REPORT_DESCRIPTOR, //下級描述符為報告描述符
SWAP16(sizeof(HidUseReportDescriptor)) //下級描述符的長度
}
},
},
//端點描述符
{
//端點1輸出
{ //主端點輸入描述
sizeof(ENDPOINT_DESCRIPTOR_STRUCT), //端點描述符的字節數大小
USB_ENDPOINT_DESCRIPTOR, //端點描述符類型編號
POINT_1_OUT, //端點號,主輸入端點
USB_ENDPOINT_TYPE_INTERRUPT, //使用的傳輸類型:中斷傳輸
SWAP16(0x0010), //該端點支持的最大包尺寸,64字節
0x0A //中斷掃描時間:設置為10ms
},
//端點1輸入
{ //主端點輸出描述
sizeof(ENDPOINT_DESCRIPTOR_STRUCT), //端點描述符的字節數大小
USB_ENDPOINT_DESCRIPTOR, //端點描述符類型編號
POINT_1_IN, //端點號,主輸出端點
USB_ENDPOINT_TYPE_INTERRUPT, //使用的傳輸類型:中斷傳輸
SWAP16(0x0010), //該端點支持的最大包尺寸,64字節
0x0A //中斷掃描時間:設置為10ms
},
}
};
//字符串描述符所用的語言種類
code uint8 LANGUAGE_ID[4]={0x04,0x03,0x09,0x04};
//設備序列號
code uint8 device_serial_number[]=
{22,USB_STRING_DESCRIPTOR,'2',0,'0',0,'0',0,'7',0,'-',0,'0',0,'3',0,'-',0,'2',0,'4',0};
//生產廠商字符串
code uint8 ManufacturerString[80]=
{
30,
USB_STRING_DESCRIPTOR,
0xD9,0x8F, /*這*/
0x2F,0x66, /*是*/
0x00,0x4E, /*一*/
0x2A,0x4E, /*個*/
'H',0,
'I',0,
'D',0,
0x7B,0x7C, /*類*/
0xBE,0x8B, /*設*/
0x07,0x59, /*備*/
0x94,0x5E, /*應*/
0x28,0x75, /*用*/
0x03,0x83, /*范*/
0x8B,0x4F, /*例*/
};
//產品描述符字符串
code uint8 ProducterString[96]=
{
30,
USB_STRING_DESCRIPTOR,
0xD9,0x8F, /*這*/
0x2F,0x66, /*是*/
0x00,0x4E, /*一*/
0x2A,0x4E, /*個*/
'H',0,
'I',0,
'D',0,
0x7B,0x7C, /*類*/
0xBE,0x8B, /*設*/
0x07,0x59, /*備*/
0x94,0x5E, /*應*/
0x28,0x75, /*用*/
0x03,0x83, /*范*/
0x8B,0x4F, /*例*/
};
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -