0

我正在使用该设备,它有两个接口。USB 设备上的 lsusb 信息可以在下面的链接中找到。 https://github.com/zougloub/libseek

摄像头有两个接口,第一个是iAP接口,第二个是com.thermal.pit206接口。我基于 iAP 接口编写了我的应用程序,因为。我之所以选择 iAP 接口是因为其他人都在 GitHub 上这样做,所以我就照做了。

我可以将 Winusb_ControlTrasnfer 函数与 iAP 接口一起使用。我可以初始化 WinUSB 句柄并使用它来发送和获取命令以及读取管道。

但是,当我使用 com.thermal.pit206 接口时,我仍然可以初始化 WinUSB 句柄,但我无法发送或获取命令。

void CommandTransfer(WINUSB_INTERFACE_HANDLE winIHandle, UCHAR requestTypeI, UCHAR requestI, USHORT valueI, USHORT indexI, USHORT lengthI, PUCHAR dataIn)
{
    WINUSB_SETUP_PACKET packet;
    ZeroMemory(&packet, sizeof(WINUSB_SETUP_PACKET));
    packet.RequestType = requestTypeI;
    packet.Request = requestI;
    packet.Value = valueI;
    packet.Index = indexI;
    packet.Length = lengthI;

    ULONG dataLength = 0;

    if (!WinUsb_ControlTransfer(winIHandle, packet, dataIn, lengthI, &dataLength, NULL))
    {
        printf("ERROR: WinUsb_ControlTransfer, Windows Error Code - %d \n", GetLastError());
    }
} 

在上面你可以看到我用来向设备发送命令的代码副本。

我很困惑为什么我可以在使用 iAP 接口时向设备发送命令,但是当我使用 com.thermal.pir206 接口时,我无法这样做。

谢谢!任何有用的链接/信息表示赞赏。

4

1 回答 1

0

WinUsb_ControlTransfer()函数仅适用于默认端点零,它始终是control类型。

上述lsusb输出中所有其他接口中的端点都是bulk类型。这些将需要使用WinUsb_ReadPipe()WinUsb_WritePipe()函数。

于 2018-08-24T15:43:22.350 回答