[求助]ch375控制键盘问题

我用MSP430翻译了一下CH376的控制键盘鼠标的程序。 基本都可以,但是在

//如果该设备是复合设备,则需要配置另外一个接口设备 #if 1 if(Device_Atti.Device_compat == 1) { 。。。。。。

这段程序中总跑不出去 所以我把 #if 1 改成 #if 0 先不让他跑这段

结果监控的数据都对 start

wait usb device :

12 01 10 01 00 00 00 08 81 0A 01 01 10 01 01 02 00 01

09 02 3B 00 02 01 00 A0 32

09 02 3B 00 02 01 00 A0 32 09 04 00 00 01 03 01 01 00 09 21 10 01 21 01 22 41 00 07 05 81 03 08 00 0A 09 04 01 00 01 03 00 00 00 09 21 10 01 21 01 22 66 00 07 05 82 03 08 00 0A

cfg 14 set idle success

05 01 09 06 A1 01 05 set report success

28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28

只是后面的这个数据是28 说明USB没操作成功, 有啥解决途径和建议没?

自己顶一下,求解。。


那说明你获取键盘的数据有问题,建议你看下你获取的端点号是否正确。


start

wait usb device :

12 01 10 01 00 00 00 08 DA 09 0A 00 02 00 01 02 00 01

09 02 22 00 01 01 03 A0 32

09 02 22 00 01 01 03 A0 32 09 04 00 00 01 03 01 02 00 09 21 10 01 00 01 22 30 00 07 05 81 03 05 00 0A

cfg 14 set idle success

05 01 09 02 A1 01 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20

换了个鼠标,结果是这样的,

UINT8 get_int_in(UINT8 tog,UINT8 endp_int) { UINT8 s,t,j; tog = tog ? 0x80 : 0x00; issue_token(tog,( endp_int << 4 ) | DEF_USB_PID_IN); s = wait_interrupt( ); printfx(s);

s总为0x20,端点号一个为 07 05 81 03 08 00 0A 另一个为 07 05 81 03 05 00 0A 然后我就啥也不知道了。。。 没能力分出对错来哈。。


有没有相关的资料推荐一下子啦,让我也看个明白,谢谢啦。


USB协议第九章。


sorry 再小问一下,可能在那个步骤出问题了?读设备?读配置?还是设置?


今天调试的时候发现hid.h中 typedef struct _USB_HID_CLASS_DESCRIPTOR{ UINT8 bLength; UINT8 bDescriptorType; UINT8 bcdHID_L; UINT8 bcdHID_H; // UINT16 bcdHID; UINT8 bCountryCode; UINT8 bNumDescriptors; UINT8 bDescriptType; UINT8 wDescriptorLength_L; UINT8 wDescriptorLength_H; // UINT16 wDescriptorLength; }USB_HID_CLASS_DESCR,*PUSB_HID_CLASS_DESCR;

有两个 UINT16的类型,所以在强制转换时候,导致数据没对齐,我改成两个UINT8就好了,因为我用的是IAR编译器,不知道Uv2做的如此好,可以做到无缝对齐,

现在返回的结果一直是 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A


OK,现在终于全搞定了,

issue_token(tog,( endp_int << 4 ) | DEF_USB_PID_IN); s = wait_interrupt( ); printfx(s); if(s == USB_INT_SUCCESS)

去掉 printfx(s)这句就好了,但不知道为什么会这样,求解释一下

接下来就去搞键盘了


返回2A很正常。不按键的情况下就是返回2A,把printf去掉只是你看不到了而已,其实还是返回0X2A


只有登录才能回复,可以选择微信账号登录