目的: 用CH372的端点1实现HID键盘功能,用端点2实现浦东数据交互,即插入PC的USB口后可以看到两个设备。 实现: 修改后的设备描述符和配置描述符如下: u8 code DevDes[] = {//设备描述符 0x12, //描述符大小 0x01, //常数DEVICE 0x10, //USB规范版本信息 0x01, 0x00, //类别码, 0x00, //子类别码 0x00, //协议码 0x08, //端点0的最大信息包大小 0x04, //厂商ID--- 0x05, 0x06, //产品ID 0x07, //0x48, //厂商ID---WCH //0x43, //0x37, //产品ID //0x55, //0x3c, //厂商ID---HID //0x41, //0x03, //产品ID //0x20, 0x00, //设备版本信息 0x00, 0x00, //索引值 0x00, 0x00, 0x01 //可能配置的数目 }; u8 code ConDes[] = {//配置描述符 0x09, 0x02, 0x39, 0x00, 0x02, 0x01, 0x00, 0x80, 0x90, /*Interface0*/ 0x09, 0x04, 0x00, 0x00, 0x01, 0x03, 0x01, 0x01, 0x00, 0x09, 0x21, 0x10, 0x01, 0x00, 0x01, 0x22, 0x41, 0x00, 0x07, 0x05, 0x81, 0x03, 0x08, 0x00, 0x18, /*Interface1*/ 0x09, 0x04, 0x01, 0x00, 0x02, 0xff, 0x80, 0x37, 0x00, 0x07, //述符大小 0x05, //常数ENDPOINT 0x82, //端点数目及方向 0x02, //支持的传输类型 0x40, //支持的最大信息包大小 0x00, 0x00, // 0x07, 0x05, 0x02, 0x02, 0x40, 0x00, 0x00 }; //配置描述符

症状: 使用此描述符后,PC提示安装驱动, 如取消则能在PC设备管理器内看到HID键盘和一个未识别的USB设备,如安装WCH提供的372驱动,则HID键盘消失,且CH372设备显示问题中。 如将PID和VID修改成0x4348,0x5537则看不到HID键盘。 如将PID和VID修改成0x413C,0x2003则看不到CH372设备。

问题0: 有无组合类设备的类代码?是否在设备描述符中以0表示类代码即可?

问题1: PC机是否通过解析设备描述符中PID和VID来加载当前刚插入的USB设备驱动? 如在已安装的驱动中未找到相应的PID和VID则提示安装新驱动?

问题2: 如何修改PID和VID能同时看到这两个设备? 想象中,感觉WCH提供的驱动(CH372DRV.EXE)覆盖了端点1欲实现的HID功能, 如何才能使安装的驱动只对类设备号为0xff的接口起作用? 或者如何通过修改驱动来实现这个HID+厂商自定义的组合设备功能。

请高人做答,谢谢先!