这是可以用的配置描述符及报告描述符 这个是鼠标键盘 复合的设备:
//配置描述符 如果有配置描述符长度改变,记得修改第2,3字节!!!!
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, /* 输入端点描述符 使用ep2的in端点,因为ep1的in端点大小只有8字节 */
0x07, 0x05, 0x01, 0x03, 0x10, 0x00, 0x04}; /* 输出端点描述符 使用ep1的out端点*/
//键盘报告描述符 如果报告描述符长度改变,记得修改HID描述符里的下级描述符长度字段!!!!
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, //定义一个5位的数组,用于存储5个LED的状态。
0x95, 0x05,
0x75, 0x01,
0x05, 0x08,//使用LED页面。
0x19, 0x01,//LED的代码范围是0x01到0x05。
0x29, 0x05,
0x91, 0x02,//这个数组是输出报告的一部分
0x95, 0x01,//定义一个3位的常量,用于填充输出报告的剩余部分。
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
};
然后这个是自己改的 只用端点二的单个鼠标设备的描述符 然后问题就是改成这个之后 端点二就收不到数据了
// 鼠标配置描述符 如果有配置描述符长度改变,记得修改第2,3字节!!!!
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}; /* 输入端点描述符 */
//鼠标报告描述符 如果报告描述符长度改变,记得修改HID描述符里的下级描述符长度字段!!!!
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
};