From 2ce74d0e71ff697ba797c9829369c79338f5fea5 Mon Sep 17 00:00:00 2001 From: Will Hedgecock Date: Thu, 16 Dec 2021 13:04:29 -0600 Subject: [PATCH] Add Windows ability to retrieve physical port location --- src/main/c/Windows/SerialPort_Windows.c | 112 ++++++++++++++---- src/main/c/Windows/WindowsHelperFunctions.c | 7 +- src/main/c/Windows/WindowsHelperFunctions.h | 7 +- .../resources/Windows/aarch64/jSerialComm.dll | Bin 78336 -> 79872 bytes .../resources/Windows/armv7/jSerialComm.dll | Bin 66048 -> 67072 bytes .../resources/Windows/x86/jSerialComm.dll | Bin 79872 -> 80384 bytes .../resources/Windows/x86_64/jSerialComm.dll | Bin 83456 -> 84992 bytes 7 files changed, 96 insertions(+), 30 deletions(-) diff --git a/src/main/c/Windows/SerialPort_Windows.c b/src/main/c/Windows/SerialPort_Windows.c index 598f606..a6a04ec 100644 --- a/src/main/c/Windows/SerialPort_Windows.c +++ b/src/main/c/Windows/SerialPort_Windows.c @@ -2,7 +2,7 @@ * SerialPort_Windows.c * * Created on: Feb 25, 2012 - * Last Updated on: Dec 07, 2021 + * Last Updated on: Dec 16, 2021 * Author: Will Hedgecock * * Copyright (C) 2012-2021 Fazecast, Inc. @@ -50,6 +50,7 @@ jfieldID disableConfigField; jfieldID isDtrEnabledField; jfieldID isRtsEnabledField; jfieldID autoFlushIOBuffersField; +jfieldID portLocationField; jfieldID baudRateField; jfieldID dataBitsField; jfieldID stopBitsField; @@ -76,7 +77,7 @@ typedef int (__stdcall *FT_OpenFunction)(int, FT_HANDLE*); typedef int (__stdcall *FT_CloseFunction)(FT_HANDLE); // List of available serial ports -serialPortVector serialPorts = { NULL, 0 }; +serialPortVector serialPorts = { NULL, 0, 0 }; JNIEXPORT jobjectArray JNICALL Java_com_fazecast_jSerialComm_SerialPort_getCommPorts(JNIEnv *env, jclass serialComm) { @@ -86,6 +87,10 @@ JNIEXPORT jobjectArray JNICALL Java_com_fazecast_jSerialComm_SerialPort_getCommP DWORD maxValueLength, maxComPortLength, valueLength, comPortLength, keyType; DWORD subKeyLength1, subKeyLength2, subKeyLength3, friendlyNameLength; + // Reset the enumerated flag on all non-open serial ports + for (int i = 0; i < serialPorts.length; ++i) + serialPorts.ports[i]->enumerated = (serialPorts.ports[i]->handle != INVALID_HANDLE_VALUE); + // Enumerate serial ports on machine if ((RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"HARDWARE\\DEVICEMAP\\SERIALCOMM", 0, KEY_QUERY_VALUE, &keyHandle1) == ERROR_SUCCESS) && (RegQueryInfoKeyW(keyHandle1, NULL, NULL, NULL, NULL, NULL, NULL, &numValues, &maxValueLength, &maxComPortLength, NULL, NULL) == ERROR_SUCCESS)) @@ -115,7 +120,7 @@ JNIEXPORT jobjectArray JNICALL Java_com_fazecast_jSerialComm_SerialPort_getCommP if (port) port->enumerated = 1; else - pushBack(&serialPorts, comPortString, descriptionString, descriptionString); + pushBack(&serialPorts, comPortString, descriptionString, descriptionString, L"0-0"); } } @@ -168,6 +173,7 @@ JNIEXPORT jobjectArray JNICALL Java_com_fazecast_jSerialComm_SerialPort_getCommP // Allocate memory friendlyNameLength = valueLength + 1; WCHAR *friendlyName = (WCHAR*)malloc(friendlyNameLength*sizeof(WCHAR)); + WCHAR *locationInfo = (WCHAR*)malloc(friendlyNameLength*sizeof(WCHAR)); if ((RegOpenKeyExW(keyHandle4, L"Device Parameters", 0, KEY_QUERY_VALUE, &keyHandle5) == ERROR_SUCCESS) && (RegQueryInfoKeyW(keyHandle5, NULL, NULL, NULL, NULL, NULL, NULL, &numValues, NULL, &valueLength, NULL, NULL) == ERROR_SUCCESS)) @@ -178,12 +184,33 @@ JNIEXPORT jobjectArray JNICALL Java_com_fazecast_jSerialComm_SerialPort_getCommP // Attempt to get COM value and friendly port name if ((RegQueryValueExW(keyHandle5, L"PortName", NULL, &keyType, (BYTE*)comPort, &comPortLength) == ERROR_SUCCESS) && (keyType == REG_SZ) && - (RegQueryValueExW(keyHandle4, L"FriendlyName", NULL, &keyType, (BYTE*)friendlyName, &friendlyNameLength) == ERROR_SUCCESS) && (keyType == REG_SZ)) + (RegQueryValueExW(keyHandle4, L"FriendlyName", NULL, &keyType, (BYTE*)friendlyName, &friendlyNameLength) == ERROR_SUCCESS) && (keyType == REG_SZ) && + (RegQueryValueExW(keyHandle4, L"LocationInformation", NULL, &keyType, (BYTE*)locationInfo, &friendlyNameLength) == ERROR_SUCCESS) && (keyType == REG_SZ)) { // Set port name and description wchar_t* comPortString = (comPort[0] == L'\\') ? (wcsrchr(comPort, L'\\') + 1) : comPort; wchar_t* descriptionString = friendlyName; + // Parse the port location + int hub = 0, port = 0, bufferLength = 128; + wchar_t *portLocation = (wchar_t*)malloc(bufferLength*sizeof(wchar_t)); + if (wcsstr(locationInfo, L"Port_#") && wcsstr(locationInfo, L"Hub_#")) + { + wchar_t *hubString = wcsrchr(locationInfo, L'#') + 1; + hub = _wtoi(hubString); + wchar_t *portString = wcschr(locationInfo, L'#') + 1; + if (portString) + { + hubString = wcschr(portString, L'.'); + if (hubString) + *hubString = L'\0'; + } + port = _wtoi(portString); + _snwprintf(portLocation, bufferLength, L"1-%d.%d", hub, port); + } + else + wcscpy(portLocation, L"0-0"); + // Update friendly name if COM port is actually connected and present in the port list for (int i = 0; i < serialPorts.length; ++i) if (wcscmp(serialPorts.ports[i]->portPath, comPortString) == 0) @@ -194,8 +221,17 @@ JNIEXPORT jobjectArray JNICALL Java_com_fazecast_jSerialComm_SerialPort_getCommP serialPorts.ports[i]->friendlyName = newMemory; wcscpy(serialPorts.ports[i]->friendlyName, descriptionString); } + newMemory = (wchar_t*)realloc(serialPorts.ports[i]->portLocation, (wcslen(portLocation)+1)*sizeof(wchar_t)); + if (newMemory) + { + serialPorts.ports[i]->portLocation = newMemory; + wcscpy(serialPorts.ports[i]->portLocation, portLocation); + } break; } + + // Clean up memory + free(portLocation); } // Clean up memory @@ -204,6 +240,7 @@ JNIEXPORT jobjectArray JNICALL Java_com_fazecast_jSerialComm_SerialPort_getCommP // Clean up memory and close registry key RegCloseKey(keyHandle5); + free(locationInfo); free(friendlyName); } @@ -290,7 +327,7 @@ JNIEXPORT jobjectArray JNICALL Java_com_fazecast_jSerialComm_SerialPort_getCommP FT_OpenFunction FT_Open = (FT_OpenFunction)GetProcAddress(ftdiLibInstance, "FT_Open"); FT_CloseFunction FT_Close = (FT_CloseFunction)GetProcAddress(ftdiLibInstance, "FT_Close"); FT_SetLatencyTimerFunction FT_SetLatencyTimer = (FT_SetLatencyTimerFunction)GetProcAddress(ftdiLibInstance, "FT_SetLatencyTimer"); - if ((FT_CreateDeviceInfoList != NULL) && (FT_GetDeviceInfoList != NULL) && (FT_GetComPortNumber != NULL) && (FT_Open != NULL) && (FT_Close != NULL)) + if (FT_CreateDeviceInfoList && FT_GetDeviceInfoList && FT_GetComPortNumber && FT_Open && FT_Close && FT_SetLatencyTimer) { DWORD numDevs; if ((FT_CreateDeviceInfoList(&numDevs) == FT_OK) && (numDevs > 0)) @@ -301,29 +338,44 @@ JNIEXPORT jobjectArray JNICALL Java_com_fazecast_jSerialComm_SerialPort_getCommP wchar_t comPortString[128]; for (int i = 0; i < numDevs; ++i) { - LONG comPortNumber = 0; - if ((FT_Open(i, &devInfo[i].ftHandle) == FT_OK) && (FT_GetComPortNumber(devInfo[i].ftHandle, &comPortNumber) == FT_OK)) - { - if (FT_SetLatencyTimer != NULL) - { - // Reduce latency timer - FT_SetLatencyTimer(devInfo[i].ftHandle, 2); // Minimum value is 2. Ignore errors - } - // Update port description if COM port is actually connected and present in the port list - FT_Close(devInfo[i].ftHandle); - swprintf(comPortString, sizeof(comPortString) / sizeof(wchar_t), L"COM%ld", comPortNumber); + // Determine if the port is currently enumerated and already open + char isOpen = (devInfo[i].Flags & FT_FLAGS_OPENED) ? 1 : 0; + if (!isOpen) for (int j = 0; j < serialPorts.length; ++j) - if (wcscmp(serialPorts.ports[j]->portPath, comPortString) == 0) + if ((memcmp(serialPorts.ports[j]->serialNumber, devInfo[i].SerialNumber, sizeof(serialPorts.ports[j]->serialNumber)) == 0) && (serialPorts.ports[j]->handle != INVALID_HANDLE_VALUE)) { - size_t descLength = 8+strlen(devInfo[i].Description); - wchar_t *newMemory = (wchar_t*)realloc(serialPorts.ports[j]->portDescription, descLength*sizeof(wchar_t)); - if (newMemory) - { - serialPorts.ports[j]->portDescription = newMemory; - MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, devInfo[i].Description, -1, serialPorts.ports[j]->portDescription, descLength); - } + serialPorts.ports[j]->enumerated = 1; + isOpen = 1; break; } + + // Update the port description and latency if not already open + if (!isOpen) + { + LONG comPortNumber = 0; + if ((FT_Open(i, &devInfo[i].ftHandle) == FT_OK) && (FT_GetComPortNumber(devInfo[i].ftHandle, &comPortNumber) == FT_OK)) + { + // Reduce latency timer to minimum value of 2 + FT_SetLatencyTimer(devInfo[i].ftHandle, 2); + + // Update port description if COM port is actually connected and present in the port list + FT_Close(devInfo[i].ftHandle); + swprintf(comPortString, sizeof(comPortString) / sizeof(wchar_t), L"COM%ld", comPortNumber); + for (int j = 0; j < serialPorts.length; ++j) + if (wcscmp(serialPorts.ports[j]->portPath, comPortString) == 0) + { + serialPorts.ports[j]->enumerated = 1; + size_t descLength = 8+strlen(devInfo[i].Description); + wchar_t *newMemory = (wchar_t*)realloc(serialPorts.ports[j]->portDescription, descLength*sizeof(wchar_t)); + if (newMemory) + { + serialPorts.ports[j]->portDescription = newMemory; + MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, devInfo[i].Description, -1, serialPorts.ports[j]->portDescription, descLength); + } + memcpy(serialPorts.ports[j]->serialNumber, devInfo[i].SerialNumber, sizeof(serialPorts.ports[j]->serialNumber)); + break; + } + } } } } @@ -333,6 +385,14 @@ JNIEXPORT jobjectArray JNICALL Java_com_fazecast_jSerialComm_SerialPort_getCommP FreeLibrary(ftdiLibInstance); } + // Remove all non-enumerated ports from the serial port listing + for (int i = 0; i < serialPorts.length; ++i) + if (!serialPorts.ports[i]->enumerated) + { + removePort(&serialPorts, serialPorts.ports[i]); + i--; + } + // Get relevant SerialComm methods and fill in com port array wchar_t systemPortName[128]; jobjectArray arrayObject = (*env)->NewObjectArray(env, serialPorts.length, serialCommClass, 0); @@ -345,6 +405,7 @@ JNIEXPORT jobjectArray JNICALL Java_com_fazecast_jSerialComm_SerialPort_getCommP (*env)->SetObjectField(env, serialCommObject, comPortField, (*env)->NewString(env, (jchar*)systemPortName, wcslen(systemPortName))); (*env)->SetObjectField(env, serialCommObject, friendlyNameField, (*env)->NewString(env, (jchar*)serialPorts.ports[i]->friendlyName, wcslen(serialPorts.ports[i]->friendlyName))); (*env)->SetObjectField(env, serialCommObject, portDescriptionField, (*env)->NewString(env, (jchar*)serialPorts.ports[i]->portDescription, wcslen(serialPorts.ports[i]->portDescription))); + (*env)->SetObjectField(env, serialCommObject, portLocationField, (*env)->NewString(env, (jchar*)serialPorts.ports[i]->portLocation, wcslen(serialPorts.ports[i]->portLocation))); // Add new SerialComm object to array (*env)->SetObjectArrayElement(env, arrayObject, i, serialCommObject); @@ -363,6 +424,7 @@ JNIEXPORT void JNICALL Java_com_fazecast_jSerialComm_SerialPort_initializeLibrar comPortField = (*env)->GetFieldID(env, serialCommClass, "comPort", "Ljava/lang/String;"); friendlyNameField = (*env)->GetFieldID(env, serialCommClass, "friendlyName", "Ljava/lang/String;"); portDescriptionField = (*env)->GetFieldID(env, serialCommClass, "portDescription", "Ljava/lang/String;"); + portLocationField = (*env)->GetFieldID(env, serialCommClass, "portLocation", "Ljava/lang/String;"); eventListenerRunningField = (*env)->GetFieldID(env, serialCommClass, "eventListenerRunning", "Z"); disableConfigField = (*env)->GetFieldID(env, serialCommClass, "disableConfig", "Z"); isDtrEnabledField = (*env)->GetFieldID(env, serialCommClass, "isDtrEnabled", "Z"); @@ -405,7 +467,7 @@ JNIEXPORT jlong JNICALL Java_com_fazecast_jSerialComm_SerialPort_openPortNative( if (!port) { // Create port representation and add to serial port listing - port = pushBack(&serialPorts, portName, L"User-Specified Port", L"User-Specified Port"); + port = pushBack(&serialPorts, portName, L"User-Specified Port", L"User-Specified Port", L"0-0"); } if (!port || (port->handle != INVALID_HANDLE_VALUE)) { diff --git a/src/main/c/Windows/WindowsHelperFunctions.c b/src/main/c/Windows/WindowsHelperFunctions.c index 5048a9e..00dec3c 100644 --- a/src/main/c/Windows/WindowsHelperFunctions.c +++ b/src/main/c/Windows/WindowsHelperFunctions.c @@ -2,7 +2,7 @@ * WindowsHelperFunctions.c * * Created on: May 05, 2015 - * Last Updated on: Nov 14, 2021 + * Last Updated on: Dec 16, 2021 * Author: Will Hedgecock * * Copyright (C) 2012-2021 Fazecast, Inc. @@ -29,7 +29,7 @@ #include "WindowsHelperFunctions.h" // Common storage functionality -serialPort* pushBack(serialPortVector* vector, const wchar_t* key, const wchar_t* friendlyName, const wchar_t* description) +serialPort* pushBack(serialPortVector* vector, const wchar_t* key, const wchar_t* friendlyName, const wchar_t* description, const wchar_t* location) { // Allocate memory for the new SerialPort storage structure if (vector->capacity == vector->length) @@ -54,11 +54,13 @@ serialPort* pushBack(serialPortVector* vector, const wchar_t* key, const wchar_t port->handle = (void*)-1; port->enumerated = 1; port->portPath = (wchar_t*)malloc((wcslen(key)+1)*sizeof(wchar_t)); + port->portLocation = (wchar_t*)malloc((wcslen(location)+1)*sizeof(wchar_t)); port->friendlyName = (wchar_t*)malloc((wcslen(friendlyName)+1)*sizeof(wchar_t)); port->portDescription = (wchar_t*)malloc((wcslen(description)+1)*sizeof(wchar_t)); // Store port strings wcscpy(port->portPath, key); + wcscpy(port->portLocation, location); wcscpy(port->friendlyName, friendlyName); wcscpy(port->portDescription, description); @@ -78,6 +80,7 @@ void removePort(serialPortVector* vector, serialPort* port) { // Clean up memory associated with the port free(port->portPath); + free(port->portLocation); free(port->friendlyName); free(port->portDescription); if (port->readBuffer) diff --git a/src/main/c/Windows/WindowsHelperFunctions.h b/src/main/c/Windows/WindowsHelperFunctions.h index 3e9b5c3..f50edff 100644 --- a/src/main/c/Windows/WindowsHelperFunctions.h +++ b/src/main/c/Windows/WindowsHelperFunctions.h @@ -2,7 +2,7 @@ * WindowsHelperFunctions.h * * Created on: May 05, 2015 - * Last Updated on: Nov 14, 2021 + * Last Updated on: Dec 16, 2021 * Author: Will Hedgecock * * Copyright (C) 2012-2021 Fazecast, Inc. @@ -34,9 +34,10 @@ typedef struct serialPort { void *handle; char *readBuffer; - wchar_t *portPath, *friendlyName, *portDescription; + wchar_t *portPath, *friendlyName, *portDescription, *portLocation; int errorLineNumber, errorNumber, readBufferLength; volatile char enumerated, eventListenerRunning; + char serialNumber[16]; } serialPort; // Common storage functionality @@ -45,7 +46,7 @@ typedef struct serialPortVector serialPort **ports; int length, capacity; } serialPortVector; -serialPort* pushBack(serialPortVector* vector, const wchar_t* key, const wchar_t* friendlyName, const wchar_t* description); +serialPort* pushBack(serialPortVector* vector, const wchar_t* key, const wchar_t* friendlyName, const wchar_t* description, const wchar_t* location); serialPort* fetchPort(serialPortVector* vector, const wchar_t* key); void removePort(serialPortVector* vector, serialPort* port); diff --git a/src/main/resources/Windows/aarch64/jSerialComm.dll b/src/main/resources/Windows/aarch64/jSerialComm.dll index 495f9090113552023b4b34fa288050138c25289c..6816c21979ffff3e907329c81081bb9aa2555ce6 100644 GIT binary patch delta 13263 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 delta 12230 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 Rd+OHWttET9XVYW!e*mI$Qvm<~ diff --git a/src/main/resources/Windows/armv7/jSerialComm.dll b/src/main/resources/Windows/armv7/jSerialComm.dll index 0bbdda639f12aee2f3387c0b10da474781d810a5..0a7a24a7c3af71ec47c9c09800be52958c123786 100644 GIT binary patch delta 11834 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 delta 10795 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 diff --git a/src/main/resources/Windows/x86/jSerialComm.dll b/src/main/resources/Windows/x86/jSerialComm.dll index ea446b657d5c5e5cf955d4d694887251a066dee1..07f9f8f8833265454a7070fa402c3543c567a551 100644 GIT binary patch delta 12440 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