对《STC8H-USB在线升级》ISP源码中HID描述符的疑问
https://www.stcai.com/Customer/FileDownloadVerifyPass?fileid=606705&type=imgchar 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理解有误,还是上位机程序里面做了填充?谢谢! 首先,这个Demo的的每个数据包的大小是固定为64字节
如果你认真看代码就会发现,发送数据时如果每包数据量不足64字节,也会进行数据填充
其次、Report中用Varibable还是Array取决于上位机对数据的处理方式
我们这个Demo是通用HID,目的仅仅只是上位机和下位机相互进行数据传输,
无论是Varibable还是Array,只要能实现数据传输就达到目的了
zhp 发表于 2023-6-7 09:16
首先,这个Demo的的每个数据包的大小是固定为64字节
如果你认真看代码就会发现,发送数据时如果每包数据量 ...
嗯,看到usb_IN()方法中固定写死了64了。
之前就觉得用Variable应该有填充,只是不是太十分确定,同时为了印证我的理解,所以就提了这个问题。
再次感谢大神的回答~~~
页:
[1]