USB自定義HID設(shè)備實現(xiàn)-LPC1768
首先在之前鼠標(biāo)的基礎(chǔ)上修改設(shè)備描述符
#include "usbdesc.h"
//usb標(biāo)準(zhǔn)設(shè)備描述符
const U8 USB_DeviceDescriptor[]={
USB_DEVICE_DESC_SIZE, //bLength字段。設(shè)備描述符的長度為18(0x12)字節(jié)
USB_DEVICE_DESCRIPTOR_TYPE, //bDescriptorType字段。設(shè)備描述符的編號為0x01
WBVAL(0x0110), //bcdUSB字段。這里設(shè)置版本為USB1.1,即0x0110。
0x00, //bDeviceClass字段。我們不在設(shè)備描述符中定義設(shè)備類,
0x00, //bDeviceSubClass字段。bDeviceClass字段為0時,該字段也為0。
0x00, //bDeviceProtocol字段。bDeviceClass字段為0時,該字段也為0。
USB_MAX_PACKET0, //bMaxPacketSize0字段。端點0的最大包長度。
WBVAL(0x8888), //idVender字段。廠商ID號,我們這里取0x8888,僅供實驗用。
WBVAL(0x8877), //idProduct字段。產(chǎn)品ID號,由于是第一個實驗,我們這里取0x0001。。
WBVAL(0x0100), // 設(shè)備的版本
0x01, //iManufacturer字段。廠商字符串的索引值,為了方便記憶和管理
0x02, //iProduct字段。產(chǎn)品字符串的索引值。剛剛用了1,這里就取2吧。
0x03, //iSerialNumber字段。設(shè)備的序列號字符串索引值。
0x01 //bNumConfigurations字段。該設(shè)備所具有的配置數(shù)。
};
//USB報告描述符的定義
const u8 HID_ReportDescriptor[]=
{
0x06,0xA0,0xFF,//用法頁(FFA0h, vendor defined)
0x09,0x01,//用法(vendor defined)
0xA1,0x01,//集合(Application)
0x09,0x02,//用法(vendor defined)
0xA1,0x00,//集合(Physical)
0x06,0xA1,0xFF,//用法頁(vendor defined)
//輸入報告
0x09,0x03,//用法(vendor defined)
0x09,0x04,//用法(vendor defined)
0x15,0x80,//邏輯最小值(0x80 or -128)
0x25,0x7F,//邏輯最大值(0x7F or 127)
0x35,0x00,//物理最小值(0)
0x45,0xFF,//物理最大值(255)
0x75,0x08,//報告長度Report size (8位)
0x95,0x40,//報告數(shù)值(64 fields)
0x81,0x02,//輸入(data, variable, absolute)
//輸出報告
0x09,0x05,//用法(vendor defined)
0x09,0x06,//用法(vendor defined)
0x15,0x80,//邏輯最小值(0x80 or -128)
0x25,0x7F,//邏輯最大值(0x7F or 127)
0x35,0x00,//物理最小值(0)
0x45,0xFF,//物理最大值(255)
0x75,0x08,//報告長度(8位)
0x95,0x40,//報告數(shù)值(64 fields)
0x91,0x02,//輸出(data, variable, absolute)
0xC0,//集合結(jié)束(Physical)
0xC0//集合結(jié)束(Application)
};
//通過上面的報告描述符的定義,我們知道返回的輸入報告具有8字節(jié)。
//輸出報告也有64字節(jié)。至于這64字節(jié)的數(shù)據(jù)是干什么用的,就要由用戶
//自己來決定了。
///////////////////////////報告描述符完畢////////////////////////////
const U16 HID_ReportDescSize=sizeof(HID_ReportDescriptor);
//usb配置描述符
const U8 USB_ConfigDescriptor[]={
/***************配置描述符***********************/
USB_CONFIGUARTION_DESC_SIZE, //bLength字段。配置描述符的長度為9字節(jié)。
USB_CONFIGURATION_DESCRIPTOR_TYPE,//bDescriptorType字段。配置描述符編號為0x02。
//wTotalLength字段。配置描述符集合的總長度,
//包括配置描述符本身、接口描述符、類描述符、端點描述符等。
WBVAL(
USB_CONFIGUARTION_DESC_SIZE+ //配置描述符
USB_INTERFACE_DESC_SIZE+ //接口1描述符
9+ //hid描述符
USB_ENDPOINT_DESC_SIZE+ //端點描述符
USB_ENDPOINT_DESC_SIZE //端點描述符
),
0x01, //bNumInterfaces字段。該配置包含的接口數(shù),只有一個接口。
0x01, //bConfiguration字段。該配置的值為1。
0x00, //iConfigurationz字段,該配置的字符串索引。這里沒有,為0。
USB_CONFIG_BUS_POWERED, //bmAttributes字段,該設(shè)備的屬性
USB_CONFIG_POWER_MA(500), //bMaxPower字段,該設(shè)備需要的最大電流量
/*********************第一個接口描述符,hid設(shè)備**********************/
USB_INTERFACE_DESC_SIZE, //bLength字段。接口描述符的長度為9字節(jié)。
USB_INTERFACE_DESCRIPTOR_TYPE, //bDescriptorType字段。接口描述符的編號為0x04。
0x00, //bInterfaceNumber字段。該接口的編號,第一個接口,編號為0。
0x00, //bAlternateSetting字段。該接口的備用編號,為0。
0x02, //bNumEndpoints字段。非0端點的數(shù)目。該接口有2個批量端點
USB_DEVICE_CLASS_HUMAN_INTERFACE, //bInterfaceClass字段。該接口所使用的類。大容量存儲設(shè)備接口類的代碼為0x08。,
0x00, //bInterfaceSubClass字段。該接口所使用的子類。在HID1.1協(xié)議中,
//只規(guī)定了一種子類:支持BIOS引導(dǎo)啟動的子類。
//USB鍵盤、鼠標(biāo)屬于該子類,子