我正在尝试编写一些代码以在 Win32 中使用 LibUsbK 从等时管道中读取。我已成功将设备初始化为正确的状态以发送和接收同步数据,并且我可以在我的硬件 USB 分析器中看到通过 USB 发送的数据,但是即使分析器显示有数据,我收到的缓冲区也总是未填充在发送到 PC 的数据包中。
我是 LibUsbK 的新手并使用同步传输,虽然我对 USB 并不陌生,但我一直在努力解决这个问题。
我用来从设备读取的代码是这样的......
UsbK_SelectInterface(usbHandle,1,0);
UsbK_SetAltInterface(usbHandle,1,0,1);
IsoK_Init(&isoCtx, ISO_PACKETS_PER_XFER, 0);
IsoK_SetPackets(isoCtx, ISO_PACKET_SIZE); // Size of each individual packet
OvlK_Init(&ovlPool, usbHandle, 4, 0);
OvlK_ResetPipe(usbHandle, 0x83);
OclK_Acquire(&ovlkHandle, ovlPool);
UsbK_IsoReadPipe(usbHandle, 0x83, inBuffer, sizeof(inBuffer), ovlkHandle, isoCtx);
while(!finished)
{
if(OvlK_IsComplete(ovlkHandle)
{
fwrite(inBuffer, sizeof(inBuffer), 1, outFile);
memset(inBuffer,0xcc,sizeof(inBuffer));
OvlK_ReUse(ovlkHandle);
UsbK_IsoReadPipe(usbHandle, 0x83, inBuffer, sizeof(inBuffer), ovlkHandle, isoCtx);
{
}
如果我在 fwrite 行放置一个断点,那么 inBuffer 总是充满 0xCC - 即,没有被 iso 读取填充。
我检查了来自 UsbK/OvlK 函数调用的所有错误返回值,它们都是应有的。我已经检查过我的缓冲区足够大以接收数据。
我使用非常相似的代码写入端点 0x02 上的 ISO 输出管道,并且效果很好,上面的代码和我的写入代码之间的唯一区别是 fwrite/memset 命令被替换为对“fillbuffer”函数的调用在调用 UsbK_IsoWritePipe 函数之前填充我的 outBuffer。
我尝试查看可以在示例和在线中找到的任何示例,但很难理解/让它们与我的特定设备一起使用。
非常感谢任何建议或帮助。