mk123456 发表于 2024-8-30 15:23:22

USB键盘发回的LED有8个字节程序该如何处理

这个是原始的USB键盘的程序,是对的。可以驱动NUM灯,也只有一个字节,我现在通过驱动下发了8个字节的数据,但是始终有问题。
/*原来STC的例子
if (usb_bulk_intr_out(UsbBuffer, 1) == 1)
    {
      P4M0 &= ~0x01;
      P4M1 &= ~0x01;
      P6M0 &= ~0xe0;
      P6M1 &= ~0xe0;
      P40 = 0;   
      led = UsbBuffer;
      LED_NUM = !(led & 0x01);
      LED_CAPS = !(led & 0x02);
      LED_SCROLL = !(led & 0x04);
    }   
*/
下面是我改的,因为收不到数据,把i 通过LED灯显示出来了。

i = usb_bulk_intr_out(UsbBuffer, 1);

    Led= UsbBuffer;
    这里i只有1;而且第一个数据UsbBuffer也不对

请问 usb_bulk_intr_out(UsbBuffer, 1) 这个函数有说明吗,接受8个字节和1个自己都是一样的写法吗



hsrzq 发表于 2024-8-30 18:49:52

首先得改描述符,表明你能接收8个字节的数据才行……

mk123456 发表于 2024-8-31 11:36:47

请问描述符是哪一个?现在是PC发过来8个字节,STC单片机处理成一个个的字节接收了。

mk123456 发表于 2024-8-31 16:50:15

0x05,0x08,            //USAGE_PAGE(LEDs);
    0x19,0x01,            //USAGE_MINIMUM(1);
    0x29,0x03,            //USAGE_MAXIMUM(3);
    0x15,0x00,            //LOGICAL_MINIMUM(0);
    0x25,0x01,            //LOGICAL_MAXIMUM(1);
    0x75,0x01,            //REPORT_SIZE(1);
    0x95,0x03,            //REPORT_COUNT(3);
    0x91,0x02,            //OUTPUT(Data,Variable,Absolute);
   
    0x75,0x05,            //REPORT_SIZE(5);
    0x95,0x01,            //REPORT_COUNT(1);
    0x91,0x01,            //OUTPUT(Constant);
   
楼上的高人能不能帮我看看这个改如如何修改才能收到8个字节。我试过很多都不行

mk123456 发表于 2024-8-31 17:56:40

搞定了,不是改这里,需要改前面的配置
页: [1]
查看完整版本: USB键盘发回的LED有8个字节程序该如何处理