实际是这样的,在device的报告描述符中,可以有多个报告描述符,所描述的报告长度可以各不相同,host取到描述符后,会找出最长的那个报告,每次以这个长度来读报告,如果device发出的报告,正好是最长的那个,就按实际长度发,超过了 packet size 就分多次发,如果报告的长度不是最长的,并且其长度正好是 packet size 的整数倍,那么当发完数据后,需要发出一个0长度的 packet,作用是让 host 知道数据结束(术语叫 zlp:zero length packet),如果长度不是整数倍,则发完就行了。
当只有一个报告描述符时,device 就只发出报告数据本身,而有多个报告时,每次transfer,只能发出一个报告,并且在报告数据之前,要加一个字节,表示报告ID。
|