Sends various vendor specific control requests synchronously.
DWORD __cdecl main(int argc, char* argv[])
{
DWORD errorCode = ERROR_SUCCESS;
BOOL success;
UCHAR vendorBuffer[8 + 1];
return GetLastError();
if (!Usb.
Init(&usbHandle, deviceInfo))
{
errorCode = GetLastError();
printf("Open device failed. Win32Error=%u (0x%08X)\n", errorCode, errorCode);
goto Done;
}
printf("Device opened successfully!\n");
*((__int64*)&setupPacket) = 0;
setupPacket.
BmRequest.Dir = BMREQUEST_DIR_DEVICE_TO_HOST;
setupPacket.
Length =
sizeof(deviceDescriptor);
success = Usb.
ControlTransfer(usbHandle, *((
WINUSB_SETUP_PACKET*)&setupPacket), (PUCHAR)&deviceDescriptor,
sizeof(deviceDescriptor), NULL, NULL);
if (!success)
{
errorCode = GetLastError();
printf("Usb.ControlTransfer failed. Win32Error=%u (0x%08X)\n", errorCode, errorCode);
goto Done;
}
memset(vendorBuffer, 0, sizeof(vendorBuffer));
vendorBuffer[0] = 'A';
vendorBuffer[1] = 'B';
vendorBuffer[2] = 'C';
setupPacket.
BmRequest.Dir = BMREQUEST_DIR_HOST_TO_DEVICE;
setupPacket.
Request = BM_COMMAND_SET_VBUF;
setupPacket.
Length =
sizeof(vendorBuffer) - 1;
success = Usb.ControlTransfer(usbHandle, *((
WINUSB_SETUP_PACKET*)&setupPacket), vendorBuffer,
sizeof(vendorBuffer) - 1, NULL, NULL);
if (!success)
{
errorCode = GetLastError();
printf("Usb.ControlTransfer failed. Win32Error=%u (0x%08X)\n", errorCode, errorCode);
goto Done;
}
printf("vendorBuffer: %s=", vendorBuffer);
memset(vendorBuffer, 0, sizeof(vendorBuffer));
*((__int64*)&setupPacket) = 0;
setupPacket.
BmRequest.Dir = BMREQUEST_DIR_DEVICE_TO_HOST;
setupPacket.
Request = BM_COMMAND_GET_VBUF;
setupPacket.
Length =
sizeof(vendorBuffer) - 1;
success = Usb.ControlTransfer(usbHandle, *((
WINUSB_SETUP_PACKET*)&setupPacket), vendorBuffer,
sizeof(vendorBuffer) - 1, NULL, NULL);
if (!success)
{
errorCode = GetLastError();
printf("Usb.ControlTransfer failed. Win32Error=%u (0x%08X)\n", errorCode, errorCode);
goto Done;
}
printf("%s\n", vendorBuffer);
Done:
if (usbHandle) Usb.
Free(usbHandle);
return errorCode;
}