hsrzq 发表于 2023-6-6 20:43:35

对《STC8H-USB在线升级》ISP源码中HID描述符的疑问

https://www.stcai.com/Customer/FileDownloadVerifyPass?fileid=606705&type=img
char code HIDREPORTDESC =
{
    0x05,0x0c,            //USAGE_PAGE(Consumer);
    0x09,0x01,            //USAGE(Consumer Control);
    0xa1,0x01,            //COLLECTION(Application);
    0x15,0x00,            //LOGICAL_MINIMUM(0);
    0x25,0xff,            //LOGICAL_MAXIMUM(255);
    0x75,0x08,            //REPORT_SIZE(8);
    0x95,0x40,            //REPORT_COUNT(64);
    0x09,0x01,            //USAGE(Consumer Control);
    0xb1,0x02,            //FEATURE(Data,Variable);
    0x09,0x01,            //USAGE(Consumer Control);
    0x81,0x02,            //INPUT(Data,Variable);
    0x09,0x01,            //USAGE(Consumer Control);
    0x91,0x02,            //OUTPUT(Data,Variable);
    0xc0,                   //END_COLLECTION;
};
对于0x81,0x02 // INPUT(Data,Variable);和0x91,0x02 // OUTPUT(Data,Variable); 的取值有点疑问,我查了资料Variable应该是固定长度的,但实际通信中USB数据的长度应该是不固定的,因此应该是Array才对啊,即这两项应该是0x81,0x00和0x91,0x00。
请大神帮忙看看,是我对Variable/Array理解有误,还是上位机程序里面做了填充?谢谢!

zhp 发表于 2023-6-7 09:16:47

首先,这个Demo的的每个数据包的大小是固定为64字节
如果你认真看代码就会发现,发送数据时如果每包数据量不足64字节,也会进行数据填充
其次、Report中用Varibable还是Array取决于上位机对数据的处理方式
我们这个Demo是通用HID,目的仅仅只是上位机和下位机相互进行数据传输,
无论是Varibable还是Array,只要能实现数据传输就达到目的了

hsrzq 发表于 2023-6-7 10:00:28

zhp 发表于 2023-6-7 09:16
首先,这个Demo的的每个数据包的大小是固定为64字节
如果你认真看代码就会发现,发送数据时如果每包数据量 ...

嗯,看到usb_IN()方法中固定写死了64了。
之前就觉得用Variable应该有填充,只是不是太十分确定,同时为了印证我的理解,所以就提了这个问题。

再次感谢大神的回答~~~
页: [1]
查看完整版本: 对《STC8H-USB在线升级》ISP源码中HID描述符的疑问