diff options
| author | karlf <[email protected]> | 2016-08-11 13:28:13 -0700 |
|---|---|---|
| committer | karlf <[email protected]> | 2016-08-11 13:28:13 -0700 |
| commit | 96eb96dfb613e4c745db6bd1f53a92fe7e2290fc (patch) | |
| tree | ad5f3ede5cbcd6b598677ce41bcf8318471bdd92 /general/PLX9x5x/test/plx.cpp | |
| parent | 687b274aa38fd05c8c26e3068932121876d7f745 (diff) | |
Updated for "Windows 10 Anniversary Update" (Version 1607)
Diffstat (limited to 'general/PLX9x5x/test/plx.cpp')
| -rw-r--r-- | general/PLX9x5x/test/plx.cpp | 113 |
1 files changed, 89 insertions, 24 deletions
diff --git a/general/PLX9x5x/test/plx.cpp b/general/PLX9x5x/test/plx.cpp index c5bae510..fb6681ea 100644 --- a/general/PLX9x5x/test/plx.cpp +++ b/general/PLX9x5x/test/plx.cpp @@ -332,47 +332,54 @@ void PLX::Menu() { int menu = -1; + const char* menuItems[MENU_MAX]; + BOOL status, toggle; - while(menu != 0 && pDeviceInterfaceDetail) { - printf("\n" - " 1- Read from device\n" - " 2- Write from device\n" - " 3- Read/Write from device\n" - " 4- Read/Write Thread Test\n" - " 5- Select new device\n" - " 6- Change Buffer Size\n" - " 7- Compare Read/Write Buffers\n" - " 8- Display Read/Write Buffers\n" - " 9- Change Thread Lifetime\n" - "10- Command Line Options\n" - " 0- Quit\n"); + menuItems[MENU_TEST] = "Quit"; + menuItems[READ_TEST] = "Read from device"; + menuItems[WRITE_TEST] = "Write to device"; + menuItems[READ_WRITE_TEST] = "Read/Write from device"; + menuItems[THREAD_TEST] = "Read/Write Thread Test"; + menuItems[DEVICE_PATH] = "Select new device"; + menuItems[SET_SIZE] = "Change Buffer Size"; + menuItems[COMPARE_BUFFERS] = "Compare Read/Write Buffers"; + menuItems[DISPLAY_BUFFERS] = "Display Read/Write Buffers"; + menuItems[THREAD_TIME] = "Change Thread Lifetime"; + menuItems[SINGLE_TRANSFER_TOGGLE] = "Toggle single transfer requirement"; + menuItems[COMMAND_LINE] = "Command Line Options"; - if (scanf_s("%d", &menu) == 0) { + while(menu != MENU_TEST && pDeviceInterfaceDetail) { + for (int i = MENU_TEST + 1; i < MENU_MAX; i++) { + printf("\n%2x - %s", i, menuItems[i]); + } + printf("\n%2x - %s\n", MENU_TEST, menuItems[MENU_TEST]); + + if (scanf_s("%x", &menu) == 0) { break; } switch(menu) { - case READ_TEST: // 1 + case READ_TEST: ReadTest(); break; - case WRITE_TEST: // 2 + case WRITE_TEST: WriteTest(); break; - case READ_WRITE_TEST: // 3 + case READ_WRITE_TEST: ReadWriteTest(); break; - case THREAD_TEST: // 4 + case THREAD_TEST: ThreadedReadWriteTest(); break; - case DEVICE_PATH: // 5 + case DEVICE_PATH: GetDevicePath(); break; - case SET_SIZE: // 6 + case SET_SIZE: ULONG size; printf("\nEnter new buffer size: "); if (scanf_s("%u", &size) != 0) { @@ -380,22 +387,34 @@ PLX::Menu() } break; - case COMPARE_BUFFERS: // 7 + case COMPARE_BUFFERS: CompareReadWriteBuffers(); break; - case DISPLAY_BUFFERS: // 8 + case DISPLAY_BUFFERS: DisplayReadWriteBuffers(); break; - case THREAD_TIME: // 9 + case THREAD_TIME: printf("\nEnter new Thread Lifetime (ms): "); if (scanf_s("%u", &ThreadTimer) == 0) { break; } break; - case COMMAND_LINE: // 10 + case SINGLE_TRANSFER_TOGGLE: + status = SendSingleTransferIoctl(&toggle); + if (status) { + printf("Single transfer requirement is %s\n", + toggle ? "on" : "off"); + } + else { + printf("Could not toggle the single transfer " + "requirement\n"); + } + break; + + case COMMAND_LINE: printf("Command Line Options\n" " Set Read Buffer Size: '/rb=xx'\n" " Set Write Buffer Size: '/wb=xx'\n" @@ -549,6 +568,13 @@ PLX::ThreadedReadWriteTest() printf("WaitForMultipleObjects[%d] error %u\n", i, error); } } + + if (!error) { + // + // Reset the TimeUp flag + // + g_TimeUp = 0; + } } if (Contexts) { @@ -779,6 +805,44 @@ PLX::SetBufferSizes(ULONG size) } BOOL +PLX::SendSingleTransferIoctl(BOOL* Toggle) +{ + BOOL status = TRUE; + UCHAR outBuffer = 0; + DWORD bytesReceived = 0; + + if (hDevice == INVALID_HANDLE_VALUE) { + status = GetDeviceHandle(); + if (status == FALSE) { + goto Done; + } + } + + status = DeviceIoControl(hDevice, + IOCTL_PLX9X5X_TOGGLE_SINGLE_TRANSFER, + NULL, + 0, + &outBuffer, + sizeof(outBuffer), + &bytesReceived, + NULL); + if (status == FALSE || bytesReceived != sizeof(outBuffer)) { + printf("DeviceIoControl failed 0x%x\n", GetLastError()); + goto Done; + } + + *Toggle = outBuffer; + +Done: + if (hDevice != INVALID_HANDLE_VALUE) { + CloseHandle(hDevice); + hDevice = INVALID_HANDLE_VALUE; + } + + return status; +} + +BOOL PLX::GetDevicePath() { SP_DEVICE_INTERFACE_DATA DeviceInterfaceData; @@ -1102,3 +1166,4 @@ PLX::SetThreadLifeTime(ULONG time) ThreadTimer = time; } + |
