WINUSB_ControlTransfer может использоваться только на одном из двух интерфейсов, доступных на устройстве, но не на другом

Я работаю с устройством, и у него есть два интерфейса. Информацию о 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, я не могу этого сделать.

Спасибо! Любая полезная ссылка / информация приветствуется.

0

Решение

WinUsb_ControlTransfer() Функция работает только для конечной точки по умолчанию ноль, которая всегда control тип.

Конечные точки во всех других интерфейсах на вышеупомянутых lsusb выход из bulk тип. Это потребует использования WinUsb_ReadPipe() или же WinUsb_WritePipe() функции.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]