#include "examples.h"
#define EP_ADDRESS 0x81
#define SYNC_TRANSFER_COUNT 3
KUSB_DRIVER_API Usb;
DWORD __cdecl main(int argc, char* argv[])
{
DWORD errorCode = ERROR_SUCCESS;
BOOL success;
KLST_HANDLE deviceList = NULL;
KLST_DEVINFO_HANDLE deviceInfo = NULL;
KUSB_HANDLE usbHandle = NULL;
UCHAR myBuffer[4096];
BM_TEST_TYPE testType = USB_ENDPOINT_DIRECTION_IN(EP_ADDRESS) ? BM_TEST_TYPE_READ : BM_TEST_TYPE_WRITE;
ULONG totalLength = 0;
ULONG transferredLength;
ULONG transferIndex;
if (!Examples_GetTestDevice(&deviceList, &deviceInfo, argc, argv))
return GetLastError();
LibK_LoadDriverAPI(&Usb, deviceInfo->DriverID);
if (!Usb.Init(&usbHandle, deviceInfo))
{
errorCode = GetLastError();
printf("Init device failed. ErrorCode: %08Xh\n", errorCode);
goto Done;
}
printf("Device opened successfully!\n");
success = Bench_Configure(usbHandle, BM_COMMAND_SET_TEST, 0, &Usb, &testType);
if (!success) printf("Bench_Configure failed.\n");
transferIndex = (DWORD) - 1;
while (++transferIndex < SYNC_TRANSFER_COUNT)
{
if (USB_ENDPOINT_DIRECTION_IN(EP_ADDRESS))
success = Usb.ReadPipe(usbHandle, EP_ADDRESS, myBuffer, sizeof(myBuffer), &transferredLength, NULL);
else
success = Usb.WritePipe(usbHandle, EP_ADDRESS, myBuffer, sizeof(myBuffer), &transferredLength, NULL);
if (!success)
{
errorCode = GetLastError();
break;
}
totalLength += transferredLength;
printf("Transfer #%u completed with %u bytes.\n", transferIndex, transferredLength);
}
printf("Transferred %u bytes in %u transfers. errorCode=%08Xh\n", totalLength, transferIndex, errorCode);
Done:
if (usbHandle) Usb.Free(usbHandle);
LstK_Free(deviceList);
return errorCode;
}