haskell USB/IP:ISO数据包描述符的大小是多少?

2izufjch  于 9个月前  发布在  其他
关注(0)|答案(1)|浏览(59)

我正在尝试在Haskell中编写一个虚拟USB设备。因此,对于https://docs.kernel.org/usb/usbip_protocol.html来说,这看起来像是协议的规范。
我已经编写了足够多的代码来解码发送到服务器的所有数据包(并且不再是),并且编写了足够多的代码来编写发送到客户端的所有数据包(并且不再是),至少按照之前引用的规范。除了iso_packet_descriptor,其大小看起来从未被指定,并且看起来不像是用于其派生的指令。
那么,我应该期待什么尺寸?,如果它是所有其余大小的包,我应该如何实现它?

bfnvny8b

bfnvny8b1#

对于非ISO端点,字段大小始终为零。对于ISO端点,该字段将包含一个ISO描述符数组,每个16字节长,数据包中的描述符数量由数据包的number_of_packets字段给出。
需要注意的是,尽管文档 * 说 * 对于非ISO端点,number_of_packets应该设置为0xFFFFFFFF,但Linux USB/IP实现并没有这样做。非ISO终结点的此值由发送方设置为0x 0000000,接收方将忽略该值。
尽管如此,您应该能够通过检查number_of_packets安全地计算字段大小。如果是0xFFFFFFFF0,则字段长度为零。否则,它是number_of_packets * 16
请注意,如果您正在为不支持ISO传输的虚拟设备编写代码,则该字段的长度将始终为零,您无需为此担心。

相关问题