in src/main/c/Windows/SerialPort_Windows.c [798:861]
JNIEXPORT void JNICALL Java_com_fazecast_jSerialComm_SerialPort_retrievePortDetails(JNIEnv *env, jobject obj)
{
// Retrieve the serial port parameter fields
jstring portNameJString = (jstring)(*env)->GetObjectField(env, obj, comPortField);
if (checkJniError(env, __LINE__ - 1)) return;
const wchar_t *portName = (wchar_t*)(*env)->GetStringChars(env, portNameJString, NULL);
if (checkJniError(env, __LINE__ - 1)) return;
// Ensure that the serial port exists
char continueRetrieval = 1;
EnterCriticalSection(&criticalSection);
if (!portsEnumerated)
enumeratePorts(env);
serialPort *port = fetchPort(&serialPorts, portName);
if (!port)
continueRetrieval = 0;
// Fill in the Java-side port details
if (continueRetrieval)
{
(*env)->SetObjectField(env, obj, friendlyNameField, (*env)->NewString(env, (jchar*)port->friendlyName, wcslen(port->friendlyName)));
if (checkJniError(env, __LINE__ - 1)) continueRetrieval = 0;
}
if (continueRetrieval)
{
(*env)->SetObjectField(env, obj, portDescriptionField, (*env)->NewString(env, (jchar*)port->portDescription, wcslen(port->portDescription)));
if (checkJniError(env, __LINE__ - 1)) continueRetrieval = 0;
}
if (continueRetrieval)
{
(*env)->SetObjectField(env, obj, portLocationField, (*env)->NewString(env, (jchar*)port->portLocation, wcslen(port->portLocation)));
if (checkJniError(env, __LINE__ - 1)) continueRetrieval = 0;
}
if (continueRetrieval)
{
(*env)->SetObjectField(env, obj, serialNumberField, (*env)->NewString(env, (jchar*)port->serialNumber, wcslen(port->serialNumber)));
if (checkJniError(env, __LINE__ - 1)) continueRetrieval = 0;
}
if (continueRetrieval)
{
(*env)->SetObjectField(env, obj, manufacturerField, (*env)->NewString(env, (jchar*)port->manufacturer, wcslen(port->manufacturer)));
if (checkJniError(env, __LINE__ - 1)) continueRetrieval = 0;
}
if (continueRetrieval)
{
(*env)->SetObjectField(env, obj, deviceDriverField, (*env)->NewString(env, (jchar*)port->deviceDriver, wcslen(port->deviceDriver)));
if (checkJniError(env, __LINE__ - 1)) continueRetrieval = 0;
}
if (continueRetrieval)
{
(*env)->SetIntField(env, obj, vendorIdField, port->vendorID);
if (checkJniError(env, __LINE__ - 1)) continueRetrieval = 0;
}
if (continueRetrieval)
{
(*env)->SetIntField(env, obj, productIdField, port->productID);
if (checkJniError(env, __LINE__ - 1)) continueRetrieval = 0;
}
// Release all JNI structures
LeaveCriticalSection(&criticalSection);
(*env)->ReleaseStringChars(env, portNameJString, (const jchar*)portName);
checkJniError(env, __LINE__ - 1);
}