#include "vioser.h" #include #include "tchar.h" void ShowUsage() { printf("\n"); printf("USAGE:\n"); printf("blnsvr -r\tRead Test\n"); printf("blnsvr -w\tWrite Test\n"); printf("blnsvr -i\tPort Status\n"); printf("blnsvr -n\tPort Notification Test\n"); printf("\n"); } VOID ReadTest(UINT id) { PVOID port = OpenPortById(0); if (port) { ULONG test_size = 1024 * 1024 * 2; PBYTE data = (PBYTE) new BYTE[test_size]; memset(data, '\0', test_size); if (!ReadPort(port, data, &test_size)) { printf("ReadTest Error.\n"); } else if (test_size == 0) { printf("No data!\n"); } else { printf("%s\n", data); } ClosePort(port); delete[] data; return; } printf("ReadTest Error. Invalid port index.\n"); } VOID InfoTest() { UINT nr = NumPorts(); for (UINT i = 0; i < nr; i++) { PVOID port = OpenPortById(i); if (port) { printf("Port index %d.\n", i); printf("\tSymbolic name %ws\n", PortSymbolicName(i)); ClosePort(port); } } } VOID WriteTest(UINT id) { PVOID port = OpenPortById(0); if (port) { ULONG test_size = 1024 * 1024 * 2; PBYTE data = (PBYTE) new BYTE[test_size]; memset(data, '0', test_size); if (!WritePort(port, data, test_size)) { printf("WriteTest Error.\n"); } ClosePort(port); delete[] data; return; } printf("WriteTest Error. Invalid port index.\n"); } BOOL NotificationTestFunction(PVOID ptr) { printf("NotificationTestFunction.\n"); return TRUE; } VOID NotificationTest(UINT id) { PVOID port = OpenPortById(id); if (port) { int test_data = 5; RegisterNotification(port, NotificationTestFunction, (PVOID)&test_data); // clang-format off while (getchar() != 'q'); // clang-format on ClosePort(port); return; } printf("NotificationTest Error. Invalid port index.\n"); } ULONG _cdecl wmain(__in ULONG argc, __in_ecount(Argc) PWCHAR argv[]) { VIOSStartup(); UINT ports = NumPorts(); if (argc == 2 && ports > 0) { if (_tcsicmp(L"-r", argv[1]) == 0) { ReadTest(0); } else if (_tcsicmp(L"-w", argv[1]) == 0) { WriteTest(0); } else if (_tcsicmp(L"-i", argv[1]) == 0) { InfoTest(); } else if (_tcsicmp(L"-n", argv[1]) == 0) { NotificationTest(0); } else if (_tcsicmp(L"help", argv[1]) == 0) { ShowUsage(); } else { ShowUsage(); } } else { printf("we have %d port(s) in the system.\n", ports); } VIOSCleanup(); return 0; }