Я работаю с устройством, и у него есть два интерфейса. Информацию о lsusb на устройстве USB можно найти по ссылке ниже.
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, я не могу этого сделать.
Спасибо! Любая полезная ссылка / информация приветствуется.
WinUsb_ControlTransfer()
Функция работает только для конечной точки по умолчанию ноль, которая всегда control
тип.
Конечные точки во всех других интерфейсах на вышеупомянутых lsusb
выход из bulk
тип. Это потребует использования WinUsb_ReadPipe()
или же WinUsb_WritePipe()
функции.
Других решений пока нет …