這是可以用的配置描述符及報(bào)告描述符 這個(gè)是鼠標(biāo)鍵盤(pán) 復(fù)合的設(shè)備:
//配置描述符 ? ?如果有配置描述符長(zhǎng)度改變,記得修改第2,3字節(jié)!!??! ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
const ? uint8_t MyCfgDescr[9 + 9 + 9 + 7 + 7] = { 0x09, 0x02, 0x29, 0x00, 0x01, 0x01, 0x00, 0x80, 0x32, ?/* 配置描述符 */
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?0x09, 0x04, 0x00, 0x00, 0x02, 0x03, 0x01, 0x01, 0x00, ?/* 接口描述符 */
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?0x09, 0x21, 0x10, 0x01, 0x21, 0x01, 0x22, 0x75, 0x00, ?/* HID描述符 ?*/
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?0x07, 0x05, 0x82, 0x03, 0x10, 0x00, 0x04, ? ? ? ? ? ? ?/* 輸入端點(diǎn)描述符 使用ep2的in端點(diǎn),因?yàn)閑p1的in端點(diǎn)大小只有8字節(jié) */
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?0x07, 0x05, 0x01, 0x03, 0x10, 0x00, 0x04}; ? ? ? ? ? ? /* 輸出端點(diǎn)描述符 使用ep1的out端點(diǎn)*/
//鍵盤(pán)報(bào)告描述符 ? ?如果報(bào)告描述符長(zhǎng)度改變,記得修改HID描述符里的下級(jí)描述符長(zhǎng)度字段?。。?!
uint8_t ReportDescr[] = ? ?{
? ? 0x05, 0x01,
? ? 0x09, 0x06,
? ? 0xa1, 0x01,
? ? 0x85, 0x01,
? ? 0x05, 0x07,
? ? 0x19, 0xe0,
? ? 0x29, 0xe7,
? ? 0x15, 0x00,
? ? 0x25, 0x01,
? ? 0x95, 0x08,
? ? 0x75, 0x01,
? ? 0x81, 0x02,
? ? 0x95, 0x01,
? ? 0x75, 0x08,
? ? 0x81, 0x03,
? ? 0x95, 0x06,
? ? 0x75, 0x08,
? ? 0x15, 0x00,
? ? 0x25, 0xff,
? ? 0x05, 0x07,
? ? 0x19, 0x00,
? ? 0x29, 0x65,
? ? 0x81, 0x00,
? ? 0x25, 0x01, //定義一個(gè)5位的數(shù)組,用于存儲(chǔ)5個(gè)LED的狀態(tài)。
? ? 0x95, 0x05,
? ? 0x75, 0x01,
? ? 0x05, 0x08,//使用LED頁(yè)面。
? ? 0x19, 0x01,//LED的代碼范圍是0x01到0x05。
? ? 0x29, 0x05,
? ? 0x91, 0x02,//這個(gè)數(shù)組是輸出報(bào)告的一部分
? ? 0x95, 0x01,//定義一個(gè)3位的常量,用于填充輸出報(bào)告的剩余部分。
? ? 0x75, 0x03,
? ? 0x91, 0x03,
? ?
? ? 0xc0,
? ? 0x05, 0x01, ? ? ? ?// Usage Page (Generic Desktop Ctrls)
? ? 0x09, 0x02, ? ? ? ?// Usage (Mouse)
? ? 0xA1, 0x01, ? ? ? ?// Collection (Application)
? ? 0x85, 0x02, ? ? ? ?// ? Report ID (66)
? ? 0x09, 0x01, ? ? ? ?// ? Usage (Pointer)
? ? 0xA1, 0x00, ? ? ? ?// ? Collection (Physical)
? ? 0x05, 0x09, ? ? ? ?// ? ? Usage Page (Button)
? ? 0x19, 0x01, ? ? ? ?// ? ? Usage Minimum (0x01)
? ? 0x29, 0x08, ? ? ? ?// ? ? Usage Maximum (0x08)
? ? 0x15, 0x00, ? ? ? ?// ? ? Logical Minimum (0)
? ? 0x25, 0x01, ? ? ? ?// ? ? Logical Maximum (1)
? ? 0x95, 0x08, ? ? ? ?// ? ? Report Count (8)
? ? 0x75, 0x01, ? ? ? ?// ? ? Report Size (1)
? ? 0x81, 0x02, ? ? ? ?// ? ? Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
? ? 0x05, 0x01, ? ? ? ?// ? ? Usage Page (Generic Desktop Ctrls)
? ? 0x16, 0x01, 0x80, ?// ? ? Logical Minimum (-32767)
? ? 0x26, 0xFF, 0x7F, ?// ? ? Logical Maximum (32767)
? ? 0x09, 0x30, ? ? ? ?// ? ? Usage (X)
? ? 0x09, 0x31, ? ? ? ?// ? ? Usage (Y)
? ? 0x09, 0x38, ? ? ? ?// ? ? Usage (Wheel)
? ? 0x75, 0x10, ? ? ? ?// ? ? Report Size (16)
? ? 0x95, 0x03, ? ? ? ?// ? ? Report Count (3)
? ? 0x81, 0x06, ? ? ? ?// ? ? Input (Data,Var,Rel,No Wrap,Linear,Preferred State,No Null Position)
? ? 0xC0, ? ? ? ? ? ? ?// ? End Collection
? ? 0xC0, ? ? ? ? ? ? ?// End Collection
};
然后這個(gè)是自己改的 只用端點(diǎn)二的單個(gè)鼠標(biāo)設(shè)備的描述符 然后問(wèn)題就是改成這個(gè)之后 端點(diǎn)二就收不到數(shù)據(jù)了
// 鼠標(biāo)配置描述符 ? ? ? ?如果有配置描述符長(zhǎng)度改變,記得修改第2,3字節(jié)?。。。??
const ? uint8_t MyCfgDescr[9 + 9 + 9 + 7] = { 0x09, 0x02, 0x22, 0x00, 0x01, 0x01, 0x00, 0x80, 0x32, ?/* 配置描述符 */
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?0x09, 0x04, 0x00, 0x00, 0x01, 0x03, 0x01, 0x02, 0x00, ?/* 接口描述符 */
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?0x09, 0x21, 0x10, 0x01, 0x21, 0x01, 0x22, 0x32, 0x00, ?/* HID描述符 ?*/
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?0x07, 0x05, 0x82, 0x03, 0x10, 0x00, 0x04}; ? ? ? ? ? ? /* 輸入端點(diǎn)描述符 */
//鼠標(biāo)報(bào)告描述符 ? ?如果報(bào)告描述符長(zhǎng)度改變,記得修改HID描述符里的下級(jí)描述符長(zhǎng)度字段?。。?!
uint8_t ReportDescr[] = ? ?{ ? ? ? ? ? ? ? ?
0x05, 0x01, ? ? ? ?// Usage Page (Generic Desktop Ctrls)
0x09, 0x02, ? ? ? ?// Usage (Mouse)
0xA1, 0x01, ? ? ? ?// Collection (Application)
#if 1
0x85, 0x02, ? ? ? ?// ? Report ID (66)
#endif
0x09, 0x01, ? ? ? ?// ? Usage (Pointer)
0xA1, 0x00, ? ? ? ?// ? Collection (Physical)
0x05, 0x09, ? ? ? ?// ? ? Usage Page (Button)
0x19, 0x01, ? ? ? ?// ? ? Usage Minimum (0x01)
0x29, 0x08, ? ? ? ?// ? ? Usage Maximum (0x08)
0x15, 0x00, ? ? ? ?// ? ? Logical Minimum (0)
0x25, 0x01, ? ? ? ?// ? ? Logical Maximum (1)
0x95, 0x08, ? ? ? ?// ? ? Report Count (8)
0x75, 0x01, ? ? ? ?// ? ? Report Size (1)
0x81, 0x02, ? ? ? ?// ? ? Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
0x05, 0x01, ? ? ? ?// ? ? Usage Page (Generic Desktop Ctrls)
0x16, 0x01, 0x80, ?// ? ? Logical Minimum (-32767)
0x26, 0xFF, 0x7F, ?// ? ? Logical Maximum (32767)
0x09, 0x30, ? ? ? ?// ? ? Usage (X)
0x09, 0x31, ? ? ? ?// ? ? Usage (Y)
0x09, 0x38, ? ? ? ?// ? ? Usage (Wheel)
0x75, 0x10, ? ? ? ?// ? ? Report Size (16)
0x95, 0x03, ? ? ? ?// ? ? Report Count (3)
0x81, 0x06, ? ? ? ?// ? ? Input (Data,Var,Rel,No Wrap,Linear,Preferred State,No Null Position)
0xC0, ? ? ? ? ? ? ?// ? End Collection
0xC0, ? ? ? ? ? ? ?// End Collection
};