From b4d38983555ea498271faf7a4c262ca4cb2ddf4b Mon Sep 17 00:00:00 2001 From: hedgecrw85 Date: Tue, 13 Nov 2018 10:08:19 -0600 Subject: [PATCH] Consolidate all Posix-based OSs into one platform --- src/main/c/Android/jni/SerialPort_Android.c | 8 +- src/main/c/Linux/Makefile | 168 ----- src/main/c/Linux/SerialPort_Linux.c | 655 ------------------ src/main/c/OSX/Makefile | 79 --- src/main/c/OSX/OSXHelperFunctions.c | 72 -- src/main/c/OSX/OSXHelperFunctions.h | 33 - src/main/c/Posix/Makefile | 265 +++++++ .../PosixHelperFunctions.c} | 309 +++++++-- .../PosixHelperFunctions.h} | 43 +- .../SerialPort_Posix.c} | 187 ++++- .../c/{Linux => Posix}/jSerialComm32.config | 0 .../c/{Linux => Posix}/jSerialComm32HF.config | 0 .../c/{Linux => Posix}/jSerialComm64.config | 0 .../resources/Linux/armv5/libjSerialComm.so | Bin 40528 -> 26136 bytes .../Linux/armv6-hf/libjSerialComm.so | Bin 33572 -> 22044 bytes .../resources/Linux/armv6/libjSerialComm.so | Bin 40528 -> 26136 bytes .../Linux/armv7-hf/libjSerialComm.so | Bin 33572 -> 22044 bytes .../resources/Linux/armv7/libjSerialComm.so | Bin 36212 -> 22040 bytes .../Linux/armv8_32/libjSerialComm.so | Bin 34940 -> 22044 bytes .../Linux/armv8_64/libjSerialComm.so | Bin 37720 -> 26824 bytes .../resources/Linux/x86/libjSerialComm.so | Bin 27428 -> 21992 bytes .../resources/Linux/x86_64/libjSerialComm.so | Bin 33472 -> 26920 bytes .../OSX/x86_64/libjSerialComm.jnilib | Bin 26524 -> 22440 bytes .../Solaris/sparcv8plus_32/libjSerialComm.so | Bin 0 -> 18384 bytes .../Solaris/sparcv9_64/libjSerialComm.so | Bin 0 -> 20432 bytes .../resources/Solaris/x86/libjSerialComm.so | Bin 0 -> 15584 bytes .../Solaris/x86_64/libjSerialComm.so | Bin 0 -> 19312 bytes 27 files changed, 713 insertions(+), 1106 deletions(-) delete mode 100644 src/main/c/Linux/Makefile delete mode 100644 src/main/c/Linux/SerialPort_Linux.c delete mode 100644 src/main/c/OSX/Makefile delete mode 100644 src/main/c/OSX/OSXHelperFunctions.c delete mode 100644 src/main/c/OSX/OSXHelperFunctions.h create mode 100644 src/main/c/Posix/Makefile rename src/main/c/{Linux/LinuxHelperFunctions.c => Posix/PosixHelperFunctions.c} (76%) rename src/main/c/{Linux/LinuxHelperFunctions.h => Posix/PosixHelperFunctions.h} (64%) rename src/main/c/{OSX/SerialPort_OSX.c => Posix/SerialPort_Posix.c} (82%) rename src/main/c/{Linux => Posix}/jSerialComm32.config (100%) rename src/main/c/{Linux => Posix}/jSerialComm32HF.config (100%) rename src/main/c/{Linux => Posix}/jSerialComm64.config (100%) create mode 100644 src/main/resources/Solaris/sparcv8plus_32/libjSerialComm.so create mode 100644 src/main/resources/Solaris/sparcv9_64/libjSerialComm.so create mode 100644 src/main/resources/Solaris/x86/libjSerialComm.so create mode 100644 src/main/resources/Solaris/x86_64/libjSerialComm.so diff --git a/src/main/c/Android/jni/SerialPort_Android.c b/src/main/c/Android/jni/SerialPort_Android.c index 476fedd..30faff5 100644 --- a/src/main/c/Android/jni/SerialPort_Android.c +++ b/src/main/c/Android/jni/SerialPort_Android.c @@ -597,7 +597,7 @@ JNIEXPORT jboolean JNICALL Java_com_fazecast_jSerialComm_SerialPort_presetRTS(JN // Send a system command to preset the RTS mode of the serial port char commandString[64]; - sprintf(commandString, "stty -f %s hupcl", portName); + sprintf(commandString, "stty -F %s hupcl", portName); int result = system(commandString); (*env)->ReleaseStringUTFChars(env, portNameJString, portName); @@ -611,7 +611,7 @@ JNIEXPORT jboolean JNICALL Java_com_fazecast_jSerialComm_SerialPort_preclearRTS( // Send a system command to preset the RTS mode of the serial port char commandString[64]; - sprintf(commandString, "stty -f %s -hupcl", portName); + sprintf(commandString, "stty -F %s -hupcl", portName); int result = system(commandString); (*env)->ReleaseStringUTFChars(env, portNameJString, portName); @@ -641,7 +641,7 @@ JNIEXPORT jboolean JNICALL Java_com_fazecast_jSerialComm_SerialPort_presetDTR(JN // Send a system command to preset the DTR mode of the serial port char commandString[64]; - sprintf(commandString, "stty -f %s hupcl", portName); + sprintf(commandString, "stty -F %s hupcl", portName); int result = system(commandString); (*env)->ReleaseStringUTFChars(env, portNameJString, portName); @@ -655,7 +655,7 @@ JNIEXPORT jboolean JNICALL Java_com_fazecast_jSerialComm_SerialPort_preclearDTR( // Send a system command to preset the DTR mode of the serial port char commandString[64]; - sprintf(commandString, "stty -f %s -hupcl", portName); + sprintf(commandString, "stty -F %s -hupcl", portName); int result = system(commandString); (*env)->ReleaseStringUTFChars(env, portNameJString, portName); diff --git a/src/main/c/Linux/Makefile b/src/main/c/Linux/Makefile deleted file mode 100644 index fe091d3..0000000 --- a/src/main/c/Linux/Makefile +++ /dev/null @@ -1,168 +0,0 @@ -# Linux specific library variables -COMPILE := gcc -COMPILE_ARM32 := arm32-unknown-linux-gnueabi-gcc -COMPILE_ARM32HF := arm32hf-unknown-linux-gnueabi-gcc -COMPILE_ARM64 := aarch64-unknown-linux-gnueabi-gcc -LINK := gcc -LINK_ARM32 := arm32-unknown-linux-gnueabi-gcc -LINK_ARM32HF := arm32hf-unknown-linux-gnueabi-gcc -LINK_ARM64 := aarch64-unknown-linux-gnueabi-gcc -CFLAGS := -fPIC -static-libgcc -Os -flto -fuse-linker-plugin -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0 -LDFLAGS := -shared -static-libgcc -flto -fuse-linker-plugin -Os -INCLUDES := -I"$(JDK_HOME)/include" -I"$(JDK_HOME)/include/linux" -LIBRARIES := -DELETE := @rm -MKDIR := @mkdir -COPY := @cp -MOVE := @mv -PRINT := @echo -FULL_CLASS := com.fazecast.jSerialComm.SerialPort -JAVAC := "$(JDK_HOME)/bin/javac" -JAVAH := "$(JDK_HOME)/bin/javah" -jni -JFLAGS := -source 1.6 -target 1.6 -Xlint:-options -LIBRARY_NAME := libjSerialComm.so -JAVA_SOURCE_DIR = ../../../../src/main/java/com/fazecast/jSerialComm -RESOURCE_DIR = ../../../../src/main/resources/Linux -BUILD_DIR = ../../../../bin/Linux -JAVA_CLASS_DIR = $(BUILD_DIR)/../com/fazecast/jSerialComm -OBJECTSx86 = $(BUILD_DIR)/x86/SerialPort_Linux.o $(BUILD_DIR)/x86/LinuxHelperFunctions.o -OBJECTSx86_64 = $(BUILD_DIR)/x86_64/SerialPort_Linux.o $(BUILD_DIR)/x86_64/LinuxHelperFunctions.o -OBJECTSarmv5 = $(BUILD_DIR)/armv5/SerialPort_Linux.o $(BUILD_DIR)/armv5/LinuxHelperFunctions.o -OBJECTSarmv6 = $(BUILD_DIR)/armv6/SerialPort_Linux.o $(BUILD_DIR)/armv6/LinuxHelperFunctions.o -OBJECTSarmv6-hf = $(BUILD_DIR)/armv6-hf/SerialPort_Linux.o $(BUILD_DIR)/armv6-hf/LinuxHelperFunctions.o -OBJECTSarmv7 = $(BUILD_DIR)/armv7/SerialPort_Linux.o $(BUILD_DIR)/armv7/LinuxHelperFunctions.o -OBJECTSarmv7-hf = $(BUILD_DIR)/armv7-hf/SerialPort_Linux.o $(BUILD_DIR)/armv7-hf/LinuxHelperFunctions.o -OBJECTSarmv8_32 = $(BUILD_DIR)/armv8_32/SerialPort_Linux.o $(BUILD_DIR)/armv8_32/LinuxHelperFunctions.o -OBJECTSarmv8_64 = $(BUILD_DIR)/armv8_64/SerialPort_Linux.o $(BUILD_DIR)/armv8_64/LinuxHelperFunctions.o -FLAGSarmv5 = -marm -mthumb-interwork -march=armv5 -mfloat-abi=soft -FLAGSarmv6 = -marm -mthumb-interwork -march=armv6 -mfloat-abi=soft -FLAGSarmv6hf = -marm -mthumb-interwork -march=armv6 -mfloat-abi=hard -FLAGSarmv7 = -mthumb -mthumb-interwork -march=armv7 -mfloat-abi=soft -FLAGSarmv7hf = -mthumb -mthumb-interwork -march=armv7 -mfloat-abi=hard -FLAGSarmv8_32 = -mthumb -mthumb-interwork -march=armv8-a -FLAGSarmv8_64 = -march=armv8-a -JNI_HEADER = ../com_fazecast_jSerialComm_SerialPort.h -JAVA_CLASS = $(JAVA_CLASS_DIR)/SerialPort.class - -# Define phony and suffix rules -.PHONY: all checkdirs linux32 linux64 arm armv5 armv6 armv6-hf armv7 armv7-hf armv8_32 armv8_64 -.SUFFIXES: -.SUFFIXES: .cpp .c .o .class .java .h - -# Default build target builds both 32 and 64 bit libraries -all : linux32 linux64 - $(DELETE) -rf `readlink -f $(BUILD_DIR)/..` - $(DELETE) -rf ../*.h - -# Builds 32-bit Linux libraries -linux32 : ARCH = -m32 -linux32 : checkdirs $(BUILD_DIR)/x86/$(LIBRARY_NAME) - $(DELETE) -rf $(BUILD_DIR)/x86/*.o - $(COPY) $(BUILD_DIR)/x86/*.* $(RESOURCE_DIR)/x86/ - -# Builds 64-bit Linux libraries -linux64 : ARCH = -m64 -linux64 : checkdirs $(BUILD_DIR)/x86_64/$(LIBRARY_NAME) - $(DELETE) -rf $(BUILD_DIR)/x86_64/*.o - $(COPY) $(BUILD_DIR)/x86_64/*.* $(RESOURCE_DIR)/x86_64/ - -# Build all ARM libraries -arm : armv5 armv6 armv6-hf armv7 armv7-hf armv8_32 armv8_64 - $(DELETE) -rf `readlink -f $(BUILD_DIR)/..` - $(DELETE) -rf ../*.h -armv5 : checkdirs $(BUILD_DIR)/armv5/$(LIBRARY_NAME) - $(DELETE) -rf $(BUILD_DIR)/armv5/*.o - $(COPY) $(BUILD_DIR)/armv5/*.* $(RESOURCE_DIR)/armv5/ -armv6 : checkdirs $(BUILD_DIR)/armv6/$(LIBRARY_NAME) - $(DELETE) -rf $(BUILD_DIR)/armv6/*.o - $(COPY) $(BUILD_DIR)/armv6/*.* $(RESOURCE_DIR)/armv6/ -armv6-hf : checkdirs $(BUILD_DIR)/armv6-hf/$(LIBRARY_NAME) - $(DELETE) -rf $(BUILD_DIR)/armv6-hf/*.o - $(COPY) $(BUILD_DIR)/armv6-hf/*.* $(RESOURCE_DIR)/armv6-hf/ -armv7 : checkdirs $(BUILD_DIR)/armv7/$(LIBRARY_NAME) - $(DELETE) -rf $(BUILD_DIR)/armv7/*.o - $(COPY) $(BUILD_DIR)/armv7/*.* $(RESOURCE_DIR)/armv7/ -armv7-hf : checkdirs $(BUILD_DIR)/armv7-hf/$(LIBRARY_NAME) - $(DELETE) -rf $(BUILD_DIR)/armv7-hf/*.o - $(COPY) $(BUILD_DIR)/armv7-hf/*.* $(RESOURCE_DIR)/armv7-hf/ -armv8_32 : checkdirs $(BUILD_DIR)/armv8_32/$(LIBRARY_NAME) - $(DELETE) -rf $(BUILD_DIR)/armv8_32/*.o - $(COPY) $(BUILD_DIR)/armv8_32/*.* $(RESOURCE_DIR)/armv8_32/ -armv8_64 : checkdirs $(BUILD_DIR)/armv8_64/$(LIBRARY_NAME) - $(DELETE) -rf $(BUILD_DIR)/armv8_64/*.o - $(COPY) $(BUILD_DIR)/armv8_64/*.* $(RESOURCE_DIR)/armv8_64/ - -# Rule to create build directories -checkdirs : $(BUILD_DIR)/x86 $(BUILD_DIR)/x86_64 $(BUILD_DIR)/armv5 $(BUILD_DIR)/armv6 $(BUILD_DIR)/armv6-hf $(BUILD_DIR)/armv7 $(BUILD_DIR)/armv7-hf $(BUILD_DIR)/armv8_32 $(BUILD_DIR)/armv8_64 $(JAVA_CLASS_DIR) -$(BUILD_DIR)/x86 : - $(MKDIR) -p $@ -$(BUILD_DIR)/x86_64 : - $(MKDIR) -p $@ -$(BUILD_DIR)/armv5 : - $(MKDIR) -p $@ -$(BUILD_DIR)/armv6 : - $(MKDIR) -p $@ -$(BUILD_DIR)/armv6-hf : - $(MKDIR) -p $@ -$(BUILD_DIR)/armv7 : - $(MKDIR) -p $@ -$(BUILD_DIR)/armv7-hf : - $(MKDIR) -p $@ -$(BUILD_DIR)/armv8_32 : - $(MKDIR) -p $@ -$(BUILD_DIR)/armv8_64 : - $(MKDIR) -p $@ -$(JAVA_CLASS_DIR) : - $(MKDIR) -p $@ - -# Rule to build 32-bit library -$(BUILD_DIR)/x86/$(LIBRARY_NAME) : $(JNI_HEADER) $(OBJECTSx86) - $(LINK) $(LDFLAGS) $(ARCH) -o $@ $(OBJECTSx86) $(LIBRARIES) - -# Rule to build 64-bit library -$(BUILD_DIR)/x86_64/$(LIBRARY_NAME) : $(JNI_HEADER) $(OBJECTSx86_64) - $(LINK) $(LDFLAGS) $(ARCH) -o $@ $(OBJECTSx86_64) $(LIBRARIES) - -# Rule to build ARM libraries -$(BUILD_DIR)/armv5/$(LIBRARY_NAME) : $(JNI_HEADER) $(OBJECTSarmv5) - $(LINK_ARM32) $(LDFLAGS) $(FLAGSarmv5) -o $@ $(OBJECTSarmv5) $(LIBRARIES) -$(BUILD_DIR)/armv6/$(LIBRARY_NAME) : $(JNI_HEADER) $(OBJECTSarmv6) - $(LINK_ARM32) $(LDFLAGS) $(FLAGSarmv6) -o $@ $(OBJECTSarmv6) $(LIBRARIES) -$(BUILD_DIR)/armv6-hf/$(LIBRARY_NAME) : $(JNI_HEADER) $(OBJECTSarmv6-hf) - $(LINK_ARM32HF) $(LDFLAGS) $(FLAGSarmv6-hf) -o $@ $(OBJECTSarmv6-hf) $(LIBRARIES) -$(BUILD_DIR)/armv7/$(LIBRARY_NAME) : $(JNI_HEADER) $(OBJECTSarmv7) - $(LINK_ARM32) $(LDFLAGS) $(FLAGSarmv7) -o $@ $(OBJECTSarmv7) $(LIBRARIES) -$(BUILD_DIR)/armv7-hf/$(LIBRARY_NAME) : $(JNI_HEADER) $(OBJECTSarmv7-hf) - $(LINK_ARM32HF) $(LDFLAGS) $(FLAGSarmv7-hf) -o $@ $(OBJECTSarmv7-hf) $(LIBRARIES) -$(BUILD_DIR)/armv8_32/$(LIBRARY_NAME) : $(JNI_HEADER) $(OBJECTSarmv8_32) - $(LINK_ARM32) $(LDFLAGS) $(FLAGSarmv8_32) -o $@ $(OBJECTSarmv8_32) $(LIBRARIES) -$(BUILD_DIR)/armv8_64/$(LIBRARY_NAME) : $(JNI_HEADER) $(OBJECTSarmv8_64) - $(LINK_ARM64) $(LDFLAGS) $(FLAGSarmv8_64) -o $@ $(OBJECTSarmv8_64) $(LIBRARIES) - -# Suffix rules to get from *.c -> *.o -$(BUILD_DIR)/x86/%.o : %.c - $(COMPILE) $(INCLUDES) $(CFLAGS) $(ARCH) -c $< -o $@ -$(BUILD_DIR)/x86_64/%.o : %.c - $(COMPILE) $(INCLUDES) $(CFLAGS) $(ARCH) -c $< -o $@ -$(BUILD_DIR)/armv5/%.o : %.c - $(COMPILE_ARM32) $(INCLUDES) $(CFLAGS) $(FLAGSarmv5) -c $< -o $@ -$(BUILD_DIR)/armv6/%.o : %.c - $(COMPILE_ARM32) $(INCLUDES) $(CFLAGS) $(FLAGSarmv6) -c $< -o $@ -$(BUILD_DIR)/armv6-hf/%.o : %.c - $(COMPILE_ARM32HF) $(INCLUDES) $(CFLAGS) $(FLAGSarmv6-hf) -c $< -o $@ -$(BUILD_DIR)/armv7/%.o : %.c - $(COMPILE_ARM32) $(INCLUDES) $(CFLAGS) $(FLAGSarmv7) -c $< -o $@ -$(BUILD_DIR)/armv7-hf/%.o : %.c - $(COMPILE_ARM32HF) $(INCLUDES) $(CFLAGS) $(FLAGSarmv7-hf) -c $< -o $@ -$(BUILD_DIR)/armv8_32/%.o : %.c - $(COMPILE_ARM32) $(INCLUDES) $(CFLAGS) $(FLAGSarmv8_32) -c $< -o $@ -$(BUILD_DIR)/armv8_64/%.o : %.c - $(COMPILE_ARM64) $(INCLUDES) $(CFLAGS) $(FLAGSarmv8_64) -c $< -o $@ - -# Rule to build JNI header file -$(JNI_HEADER) : $(JAVA_CLASS) - $(JAVAH) -d .. -classpath $(JAVA_CLASS_DIR)/../../.. $(FULL_CLASS) - -# Suffix rule to get from *.java -> *.class -$(JAVA_CLASS) : - $(JAVAC) $(JFLAGS) -d $(JAVA_CLASS_DIR)/../../.. -cp $(JAVA_SOURCE_DIR)/../../.. $(JAVA_SOURCE_DIR)/$(basename $(notdir $@)).java diff --git a/src/main/c/Linux/SerialPort_Linux.c b/src/main/c/Linux/SerialPort_Linux.c deleted file mode 100644 index 6ff07c8..0000000 --- a/src/main/c/Linux/SerialPort_Linux.c +++ /dev/null @@ -1,655 +0,0 @@ -/* - * SerialPort_Linux.c - * - * Created on: Feb 25, 2012 - * Last Updated on: Nov 07, 2018 - * Author: Will Hedgecock - * - * Copyright (C) 2012-2018 Fazecast, Inc. - * - * This file is part of jSerialComm. - * - * jSerialComm is free software: you can redistribute it and/or modify - * it under the terms of either the Apache Software License, version 2, or - * the GNU Lesser General Public License as published by the Free Software - * Foundation, version 3 or above. - * - * jSerialComm is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * - * You should have received a copy of both the GNU Lesser General Public - * License and the Apache Software License along with jSerialComm. If not, - * see and . - */ - -#ifdef __linux__ -#ifndef CMSPAR -#define CMSPAR 010000000000 -#endif -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "../com_fazecast_jSerialComm_SerialPort.h" -#include "LinuxHelperFunctions.h" - -// Cached class, method, and field IDs -jclass serialCommClass; -jmethodID serialCommConstructor; -jfieldID serialPortFdField; -jfieldID comPortField; -jfieldID friendlyNameField; -jfieldID portDescriptionField; -jfieldID isOpenedField; -jfieldID disableConfigField; -jfieldID isDtrEnabledField; -jfieldID isRtsEnabledField; -jfieldID baudRateField; -jfieldID dataBitsField; -jfieldID stopBitsField; -jfieldID parityField; -jfieldID flowControlField; -jfieldID sendDeviceQueueSizeField; -jfieldID receiveDeviceQueueSizeField; -jfieldID timeoutModeField; -jfieldID readTimeoutField; -jfieldID writeTimeoutField; -jfieldID eventFlagsField; - -JNIEXPORT jobjectArray JNICALL Java_com_fazecast_jSerialComm_SerialPort_getCommPorts(JNIEnv *env, jclass serialComm) -{ - // Enumerate serial ports on machine - charTupleVector serialPorts = { (char**)malloc(1), (char**)malloc(1), (char**)malloc(1), 0 }; - recursiveSearchForComPorts(&serialPorts, "/sys/devices/"); - lastDitchSearchForComPorts(&serialPorts); - jobjectArray arrayObject = (*env)->NewObjectArray(env, serialPorts.length, serialCommClass, 0); - int i; - for (i = 0; i < serialPorts.length; ++i) - { - // Create new SerialComm object containing the enumerated values - jobject serialCommObject = (*env)->NewObject(env, serialCommClass, serialCommConstructor); - (*env)->SetObjectField(env, serialCommObject, portDescriptionField, (*env)->NewStringUTF(env, serialPorts.third[i])); - (*env)->SetObjectField(env, serialCommObject, friendlyNameField, (*env)->NewStringUTF(env, serialPorts.second[i])); - (*env)->SetObjectField(env, serialCommObject, comPortField, (*env)->NewStringUTF(env, serialPorts.first[i])); - free(serialPorts.first[i]); - free(serialPorts.second[i]); - free(serialPorts.third[i]); - - // Add new SerialComm object to array - (*env)->SetObjectArrayElement(env, arrayObject, i, serialCommObject); - } - free(serialPorts.first); - free(serialPorts.second); - free(serialPorts.third); - - return arrayObject; -} - -JNIEXPORT void JNICALL Java_com_fazecast_jSerialComm_SerialPort_initializeLibrary(JNIEnv *env, jclass serialComm) -{ - // Cache class and method ID as global references - serialCommClass = (jclass)(*env)->NewGlobalRef(env, serialComm); - serialCommConstructor = (*env)->GetMethodID(env, serialCommClass, "", "()V"); - - // Cache - serialPortFdField = (*env)->GetFieldID(env, serialCommClass, "portHandle", "J"); - 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;"); - isOpenedField = (*env)->GetFieldID(env, serialCommClass, "isOpened", "Z"); - disableConfigField = (*env)->GetFieldID(env, serialCommClass, "disableConfig", "Z"); - isDtrEnabledField = (*env)->GetFieldID(env, serialCommClass, "isDtrEnabled", "Z"); - isRtsEnabledField = (*env)->GetFieldID(env, serialCommClass, "isRtsEnabled", "Z"); - baudRateField = (*env)->GetFieldID(env, serialCommClass, "baudRate", "I"); - dataBitsField = (*env)->GetFieldID(env, serialCommClass, "dataBits", "I"); - stopBitsField = (*env)->GetFieldID(env, serialCommClass, "stopBits", "I"); - parityField = (*env)->GetFieldID(env, serialCommClass, "parity", "I"); - flowControlField = (*env)->GetFieldID(env, serialCommClass, "flowControl", "I"); - sendDeviceQueueSizeField = (*env)->GetFieldID(env, serialCommClass, "sendDeviceQueueSize", "I"); - receiveDeviceQueueSizeField = (*env)->GetFieldID(env, serialCommClass, "receiveDeviceQueueSize", "I"); - timeoutModeField = (*env)->GetFieldID(env, serialCommClass, "timeoutMode", "I"); - readTimeoutField = (*env)->GetFieldID(env, serialCommClass, "readTimeout", "I"); - writeTimeoutField = (*env)->GetFieldID(env, serialCommClass, "writeTimeout", "I"); - eventFlagsField = (*env)->GetFieldID(env, serialCommClass, "eventFlags", "I"); -} - -JNIEXPORT void JNICALL Java_com_fazecast_jSerialComm_SerialPort_uninitializeLibrary(JNIEnv *env, jclass serialComm) -{ - // Delete the cache global reference - (*env)->DeleteGlobalRef(env, serialCommClass); -} - -JNIEXPORT jlong JNICALL Java_com_fazecast_jSerialComm_SerialPort_openPortNative(JNIEnv *env, jobject obj) -{ - jstring portNameJString = (jstring)(*env)->GetObjectField(env, obj, comPortField); - const char *portName = (*env)->GetStringUTFChars(env, portNameJString, NULL); - unsigned char isDtrEnabled = (*env)->GetBooleanField(env, obj, isDtrEnabledField); - unsigned char isRtsEnabled = (*env)->GetBooleanField(env, obj, isRtsEnabledField); - - // Try to open existing serial port with read/write access - int serialPortFD = -1; - if ((serialPortFD = open(portName, O_RDWR | O_NOCTTY | O_NONBLOCK)) > 0) - { - // Clear any serial port flags and set up raw, non-canonical port parameters - struct termios options = { 0 }; - fcntl(serialPortFD, F_SETFL, 0); - tcgetattr(serialPortFD, &options); - cfmakeraw(&options); - if (!isDtrEnabled || !isRtsEnabled) - options.c_cflag &= ~HUPCL; - options.c_iflag |= BRKINT; - tcsetattr(serialPortFD, TCSANOW, &options); - - // Configure the port parameters and timeouts - if (Java_com_fazecast_jSerialComm_SerialPort_configPort(env, obj, serialPortFD)) - (*env)->SetBooleanField(env, obj, isOpenedField, JNI_TRUE); - else - { - // Close the port if there was a problem setting the parameters - ioctl(serialPortFD, TIOCNXCL); - tcdrain(serialPortFD); - while ((close(serialPortFD) == -1) && (errno != EBADF)); - serialPortFD = -1; - (*env)->SetBooleanField(env, obj, isOpenedField, JNI_FALSE); - } - } - - (*env)->ReleaseStringUTFChars(env, portNameJString, portName); - return serialPortFD; -} - -JNIEXPORT jboolean JNICALL Java_com_fazecast_jSerialComm_SerialPort_configPort(JNIEnv *env, jobject obj, jlong serialPortFD) -{ - if (serialPortFD <= 0) - return JNI_FALSE; - struct serial_struct serInfo; - struct termios options = { 0 }; - - // Get port parameters from Java class - int baudRate = (*env)->GetIntField(env, obj, baudRateField); - int byteSizeInt = (*env)->GetIntField(env, obj, dataBitsField); - int stopBitsInt = (*env)->GetIntField(env, obj, stopBitsField); - int parityInt = (*env)->GetIntField(env, obj, parityField); - int flowControl = (*env)->GetIntField(env, obj, flowControlField); - int sendDeviceQueueSize = (*env)->GetIntField(env, obj, sendDeviceQueueSizeField); - int receiveDeviceQueueSize = (*env)->GetIntField(env, obj, receiveDeviceQueueSizeField); - unsigned char configDisabled = (*env)->GetBooleanField(env, obj, disableConfigField); - unsigned char isDtrEnabled = (*env)->GetBooleanField(env, obj, isDtrEnabledField); - unsigned char isRtsEnabled = (*env)->GetBooleanField(env, obj, isRtsEnabledField); - tcflag_t byteSize = (byteSizeInt == 5) ? CS5 : (byteSizeInt == 6) ? CS6 : (byteSizeInt == 7) ? CS7 : CS8; - tcflag_t stopBits = ((stopBitsInt == com_fazecast_jSerialComm_SerialPort_ONE_STOP_BIT) || (stopBitsInt == com_fazecast_jSerialComm_SerialPort_ONE_POINT_FIVE_STOP_BITS)) ? 0 : CSTOPB; - tcflag_t parity = (parityInt == com_fazecast_jSerialComm_SerialPort_NO_PARITY) ? 0 : (parityInt == com_fazecast_jSerialComm_SerialPort_ODD_PARITY) ? (PARENB | PARODD) : (parityInt == com_fazecast_jSerialComm_SerialPort_EVEN_PARITY) ? PARENB : (parityInt == com_fazecast_jSerialComm_SerialPort_MARK_PARITY) ? (PARENB | CMSPAR | PARODD) : (PARENB | CMSPAR); - tcflag_t CTSRTSEnabled = (((flowControl & com_fazecast_jSerialComm_SerialPort_FLOW_CONTROL_CTS_ENABLED) > 0) || - ((flowControl & com_fazecast_jSerialComm_SerialPort_FLOW_CONTROL_RTS_ENABLED) > 0)) ? CRTSCTS : 0; - tcflag_t XonXoffInEnabled = ((flowControl & com_fazecast_jSerialComm_SerialPort_FLOW_CONTROL_XONXOFF_IN_ENABLED) > 0) ? IXOFF : 0; - tcflag_t XonXoffOutEnabled = ((flowControl & com_fazecast_jSerialComm_SerialPort_FLOW_CONTROL_XONXOFF_OUT_ENABLED) > 0) ? IXON : 0; - - // Set updated port parameters - tcgetattr(serialPortFD, &options); - options.c_cflag = (byteSize | stopBits | parity | CLOCAL | CREAD | CTSRTSEnabled); - if (parityInt == com_fazecast_jSerialComm_SerialPort_SPACE_PARITY) - options.c_cflag &= ~PARODD; - if (!isDtrEnabled || !isRtsEnabled) - options.c_cflag &= ~HUPCL; - options.c_iflag &= ~(INPCK | IGNPAR | PARMRK | ISTRIP); - if (byteSizeInt < 8) - options.c_iflag |= ISTRIP; - if (parityInt != 0) - options.c_iflag |= (INPCK | IGNPAR); - options.c_iflag |= (XonXoffInEnabled | XonXoffOutEnabled); - - // Set baud rate - unsigned int baudRateCode = getBaudRateCode(baudRate); - if (baudRateCode != 0) - { - cfsetispeed(&options, baudRateCode); - cfsetospeed(&options, baudRateCode); - } - - // Apply changes and block non-root users from opening this port - int retVal = configDisabled ? 0 : tcsetattr(serialPortFD, TCSANOW, &options); - ioctl(serialPortFD, TIOCEXCL); - - // Attempt to set the transmit buffer size and any necessary custom baud rates - ioctl(serialPortFD, TIOCGSERIAL, &serInfo); - serInfo.xmit_fifo_size = sendDeviceQueueSize; - ioctl(serialPortFD, TIOCSSERIAL, &serInfo); - if (baudRateCode == 0) - setBaudRate(serialPortFD, baudRate); - return ((retVal == 0) && Java_com_fazecast_jSerialComm_SerialPort_configEventFlags(env, obj, serialPortFD) ? JNI_TRUE : JNI_FALSE); -} - -JNIEXPORT jboolean JNICALL Java_com_fazecast_jSerialComm_SerialPort_configTimeouts(JNIEnv *env, jobject obj, jlong serialPortFD) -{ - // Get port timeouts from Java class - if (serialPortFD <= 0) - return JNI_FALSE; - int baudRate = (*env)->GetIntField(env, obj, baudRateField); - unsigned int baudRateCode = getBaudRateCode(baudRate); - int timeoutMode = (*env)->GetIntField(env, obj, timeoutModeField); - int readTimeout = (*env)->GetIntField(env, obj, readTimeoutField); - - // Retrieve existing port configuration - struct termios options = { 0 }; - tcgetattr(serialPortFD, &options); - int flags = fcntl(serialPortFD, F_GETFL); - if (flags == -1) - return JNI_FALSE; - - // Set updated port timeouts - if (((timeoutMode & com_fazecast_jSerialComm_SerialPort_TIMEOUT_READ_SEMI_BLOCKING) > 0) && (readTimeout > 0)) // Read Semi-blocking with timeout - { - flags &= ~O_NONBLOCK; - options.c_cc[VMIN] = 0; - options.c_cc[VTIME] = readTimeout / 100; - } - else if ((timeoutMode & com_fazecast_jSerialComm_SerialPort_TIMEOUT_READ_SEMI_BLOCKING) > 0) // Read Semi-blocking without timeout - { - flags &= ~O_NONBLOCK; - options.c_cc[VMIN] = 1; - options.c_cc[VTIME] = 0; - } - else if (((timeoutMode & com_fazecast_jSerialComm_SerialPort_TIMEOUT_READ_BLOCKING) > 0) && (readTimeout > 0)) // Read Blocking with timeout - { - flags &= ~O_NONBLOCK; - options.c_cc[VMIN] = 0; - options.c_cc[VTIME] = readTimeout / 100; - } - else if ((timeoutMode & com_fazecast_jSerialComm_SerialPort_TIMEOUT_READ_BLOCKING) > 0) // Read Blocking without timeout - { - flags &= ~O_NONBLOCK; - options.c_cc[VMIN] = 1; - options.c_cc[VTIME] = 0; - } - else if ((timeoutMode & com_fazecast_jSerialComm_SerialPort_TIMEOUT_SCANNER) > 0) // Scanner Mode - { - flags &= ~O_NONBLOCK; - options.c_cc[VMIN] = 1; - options.c_cc[VTIME] = 1; - } - else // Non-blocking - { - flags |= O_NONBLOCK; - options.c_cc[VMIN] = 0; - options.c_cc[VTIME] = 0; - } - - // Apply changes - int retVal = fcntl(serialPortFD, F_SETFL, flags); - if (retVal != -1) - retVal = tcsetattr(serialPortFD, TCSANOW, &options); - if (baudRateCode == 0) // Set custom baud rate - setBaudRate(serialPortFD, baudRate); - return ((retVal == 0) ? JNI_TRUE : JNI_FALSE); -} - -JNIEXPORT jboolean JNICALL Java_com_fazecast_jSerialComm_SerialPort_configEventFlags(JNIEnv *env, jobject obj, jlong serialPortFD) -{ - if (serialPortFD <= 0) - return JNI_FALSE; - - // Get event flags from Java class - int baudRate = (*env)->GetIntField(env, obj, baudRateField); - unsigned int baudRateCode = getBaudRateCode(baudRate); - int eventsToMonitor = (*env)->GetIntField(env, obj, eventFlagsField); - - // Change read timeouts if we are monitoring data received - jboolean retVal; - if ((eventsToMonitor & com_fazecast_jSerialComm_SerialPort_LISTENING_EVENT_DATA_RECEIVED) > 0) - { - struct termios options = { 0 }; - tcgetattr(serialPortFD, &options); - int flags = fcntl(serialPortFD, F_GETFL); - if (flags == -1) - return JNI_FALSE; - flags &= ~O_NONBLOCK; - options.c_cc[VMIN] = 0; - options.c_cc[VTIME] = 10; - retVal = ((fcntl(serialPortFD, F_SETFL, flags) == -1) || (tcsetattr(serialPortFD, TCSANOW, &options) == -1)) ? - JNI_FALSE : JNI_TRUE; - if (baudRateCode == 0) // Set custom baud rate - setBaudRate(serialPortFD, baudRate); - } - else - retVal = Java_com_fazecast_jSerialComm_SerialPort_configTimeouts(env, obj, serialPortFD); - - // Apply changes - return retVal; -} - -JNIEXPORT jint JNICALL Java_com_fazecast_jSerialComm_SerialPort_waitForEvent(JNIEnv *env, jobject obj, jlong serialPortFD) -{ - if (serialPortFD <= 0) - return 0; - - // Initialize the waiting set - fd_set waitingSet; - FD_ZERO(&waitingSet); - FD_SET(serialPortFD, &waitingSet); - - // Wait for a serial port event - int retVal; - do - { - struct timeval timeout = { 1, 0 }; - retVal = select(serialPortFD + 1, &waitingSet, NULL, NULL, &timeout); - } while ((retVal < 0) && ((errno == EINTR) || (errno == EAGAIN))); - if (retVal <= 0) - return 0; - return (FD_ISSET(serialPortFD, &waitingSet)) ? com_fazecast_jSerialComm_SerialPort_LISTENING_EVENT_DATA_AVAILABLE : 0; -} - -JNIEXPORT jboolean JNICALL Java_com_fazecast_jSerialComm_SerialPort_closePortNative(JNIEnv *env, jobject obj, jlong serialPortFD) -{ - // Ensure that the port is open - if (serialPortFD <= 0) - return JNI_TRUE; - - // Allow others to open the port - ioctl(serialPortFD, TIOCNXCL); - tcdrain(serialPortFD); - (*env)->SetBooleanField(env, obj, isOpenedField, JNI_FALSE); - - // Force the port to enter non-blocking mode to ensure that any current reads return - struct termios options; - tcgetattr(serialPortFD, &options); - int flags = fcntl(serialPortFD, F_GETFL); - flags |= O_NONBLOCK; - options.c_cc[VMIN] = 0; - options.c_cc[VTIME] = 0; - int retVal = fcntl(serialPortFD, F_SETFL, flags); - tcsetattr(serialPortFD, TCSANOW, &options); - - // Close the port - while ((close(serialPortFD) == -1) && (errno != EBADF)); - (*env)->SetLongField(env, obj, serialPortFdField, -1l); - return JNI_TRUE; -} - -JNIEXPORT jint JNICALL Java_com_fazecast_jSerialComm_SerialPort_bytesAvailable(JNIEnv *env, jobject obj, jlong serialPortFD) -{ - int numBytesAvailable = -1; - if (serialPortFD > 0) - ioctl(serialPortFD, FIONREAD, &numBytesAvailable); - - return numBytesAvailable; -} - -JNIEXPORT jint JNICALL Java_com_fazecast_jSerialComm_SerialPort_bytesAwaitingWrite(JNIEnv *env, jobject obj, jlong serialPortFD) -{ - int numBytesToWrite = -1; - if (serialPortFD > 0) - ioctl(serialPortFD, TIOCOUTQ, &numBytesToWrite); - - return numBytesToWrite; -} - -JNIEXPORT jint JNICALL Java_com_fazecast_jSerialComm_SerialPort_readBytes(JNIEnv *env, jobject obj, jlong serialPortFD, jbyteArray buffer, jlong bytesToRead, jlong offset) -{ - // Get port handle and read timeout from Java class - if (serialPortFD <= 0) - return -1; - int timeoutMode = (*env)->GetIntField(env, obj, timeoutModeField); - int readTimeout = (*env)->GetIntField(env, obj, readTimeoutField); - int numBytesRead, numBytesReadTotal = 0, bytesRemaining = bytesToRead; - char* readBuffer = (char*)malloc(bytesToRead); - - // Infinite blocking mode specified, don't return until we have completely finished the read - if (((timeoutMode & com_fazecast_jSerialComm_SerialPort_TIMEOUT_READ_BLOCKING) > 0) && (readTimeout == 0)) - { - // While there are more bytes we are supposed to read - while (bytesRemaining > 0) - { - do { numBytesRead = read(serialPortFD, readBuffer+numBytesReadTotal, bytesRemaining); } while ((numBytesRead < 0) && (errno == EINTR)); - if (numBytesRead == -1) - { - // Problem reading, allow others to open the port and close it ourselves - ioctl(serialPortFD, TIOCNXCL); - tcdrain(serialPortFD); - while ((close(serialPortFD) == -1) && (errno != EBADF)); - serialPortFD = -1; - (*env)->SetLongField(env, obj, serialPortFdField, -1l); - (*env)->SetBooleanField(env, obj, isOpenedField, JNI_FALSE); - break; - } - - // Fix index variables - numBytesReadTotal += numBytesRead; - bytesRemaining -= numBytesRead; - } - } - else if ((timeoutMode & com_fazecast_jSerialComm_SerialPort_TIMEOUT_READ_BLOCKING) > 0) // Blocking mode, but not indefinitely - { - // Get current system time - struct timeval expireTime = { 0 }, currTime = { 0 }; - gettimeofday(&expireTime, NULL); - expireTime.tv_usec += (readTimeout * 1000); - if (expireTime.tv_usec > 1000000) - { - expireTime.tv_sec += (expireTime.tv_usec * 0.000001); - expireTime.tv_usec = (expireTime.tv_usec % 1000000); - } - - // While there are more bytes we are supposed to read and the timeout has not elapsed - do - { - do { numBytesRead = read(serialPortFD, readBuffer+numBytesReadTotal, bytesRemaining); } while ((numBytesRead < 0) && (errno == EINTR)); - if (numBytesRead == -1) - { - // Problem reading, allow others to open the port and close it ourselves - ioctl(serialPortFD, TIOCNXCL); - tcdrain(serialPortFD); - while ((close(serialPortFD) == -1) && (errno != EBADF)); - serialPortFD = -1; - (*env)->SetLongField(env, obj, serialPortFdField, -1l); - (*env)->SetBooleanField(env, obj, isOpenedField, JNI_FALSE); - break; - } - - // Fix index variables - numBytesReadTotal += numBytesRead; - bytesRemaining -= numBytesRead; - - // Get current system time - gettimeofday(&currTime, NULL); - } while ((bytesRemaining > 0) && ((expireTime.tv_sec > currTime.tv_sec) || - ((expireTime.tv_sec == currTime.tv_sec) && (expireTime.tv_usec > currTime.tv_usec)))); - } - else // Semi- or non-blocking specified - { - // Read from port - do { numBytesRead = read(serialPortFD, readBuffer, bytesToRead); } while ((numBytesRead < 0) && (errno == EINTR)); - if (numBytesRead == -1) - { - // Problem reading, allow others to open the port and close it ourselves - ioctl(serialPortFD, TIOCNXCL); - tcdrain(serialPortFD); - while ((close(serialPortFD) == -1) && (errno != EBADF)); - serialPortFD = -1; - (*env)->SetLongField(env, obj, serialPortFdField, -1l); - (*env)->SetBooleanField(env, obj, isOpenedField, JNI_FALSE); - } - else - numBytesReadTotal = numBytesRead; - } - - // Return number of bytes read if successful - (*env)->SetByteArrayRegion(env, buffer, offset, numBytesReadTotal, (jbyte*)readBuffer); - free(readBuffer); - return (numBytesRead == -1) || !((*env)->GetBooleanField(env, obj, isOpenedField)) ? -1 : numBytesReadTotal; -} - -JNIEXPORT jint JNICALL Java_com_fazecast_jSerialComm_SerialPort_writeBytes(JNIEnv *env, jobject obj, jlong serialPortFD, jbyteArray buffer, jlong bytesToWrite, jlong offset) -{ - if (serialPortFD <= 0) - return -1; - int timeoutMode = (*env)->GetIntField(env, obj, timeoutModeField); - jbyte *writeBuffer = (*env)->GetByteArrayElements(env, buffer, 0); - int numBytesWritten, result = 0; - - // Set the DTR line to high if using RS-422 - //ioctl(serialPortFD, TIOCMGET, &result); - //result |= TIOCM_DTR; - //ioctl(serialPortFD, TIOCMSET, &result); - - // Write to port - do { numBytesWritten = write(serialPortFD, writeBuffer+offset, bytesToWrite); } while ((numBytesWritten < 0) && (errno == EINTR)); - if (numBytesWritten == -1) - { - // Problem writing, allow others to open the port and close it ourselves - ioctl(serialPortFD, TIOCNXCL); - tcdrain(serialPortFD); - while ((close(serialPortFD) == -1) && (errno != EBADF)); - serialPortFD = -1; - (*env)->SetLongField(env, obj, serialPortFdField, -1l); - (*env)->SetBooleanField(env, obj, isOpenedField, JNI_FALSE); - } - - // Wait until all bytes were written in write-blocking mode - if ((timeoutMode & com_fazecast_jSerialComm_SerialPort_TIMEOUT_WRITE_BLOCKING) > 0) - tcdrain(serialPortFD); - - // Clear the DTR line if using RS-422 -//#ifdef TIOCSERGETLSR - //do - //{ - //result = ioctl(serialPortFD, TIOCSERGETLSR); - //if (result != TIOCSER_TEMT) - //usleep(100); - //} while (result != TIOCSER_TEMT); -//#endif - //ioctl(serialPortFD, TIOCMGET, &result); - //result &= ~TIOCM_DTR; - //ioctl(serialPortFD, TIOCMSET, &result); - //do { result = tcflush(serialPortFD, TCIFLUSH); } while ((result < 0) && (errno == EINTR)); - - // Return number of bytes written if successful - (*env)->ReleaseByteArrayElements(env, buffer, writeBuffer, JNI_ABORT); - return numBytesWritten; -} - -JNIEXPORT jboolean JNICALL Java_com_fazecast_jSerialComm_SerialPort_setBreak(JNIEnv *env, jobject obj, jlong serialPortFD) -{ - if (serialPortFD <= 0) - return JNI_FALSE; - return (ioctl(serialPortFD, TIOCSBRK) == 0); -} - -JNIEXPORT jboolean JNICALL Java_com_fazecast_jSerialComm_SerialPort_clearBreak(JNIEnv *env, jobject obj, jlong serialPortFD) -{ - if (serialPortFD <= 0) - return JNI_FALSE; - return (ioctl(serialPortFD, TIOCCBRK) == 0); -} - -JNIEXPORT jboolean JNICALL Java_com_fazecast_jSerialComm_SerialPort_setRTS(JNIEnv *env, jobject obj, jlong serialPortFD) -{ - if (serialPortFD <= 0) - return JNI_FALSE; - int modemBits = TIOCM_RTS; - return (ioctl(serialPortFD, TIOCMBIS, &modemBits) == 0); -} - -JNIEXPORT jboolean JNICALL Java_com_fazecast_jSerialComm_SerialPort_clearRTS(JNIEnv *env, jobject obj, jlong serialPortFD) -{ - if (serialPortFD <= 0) - return JNI_FALSE; - int modemBits = TIOCM_RTS; - return (ioctl(serialPortFD, TIOCMBIC, &modemBits) == 0); -} - -JNIEXPORT jboolean JNICALL Java_com_fazecast_jSerialComm_SerialPort_presetRTS(JNIEnv *env, jobject obj) -{ - jstring portNameJString = (jstring)(*env)->GetObjectField(env, obj, comPortField); - const char *portName = (*env)->GetStringUTFChars(env, portNameJString, NULL); - - // Send a system command to preset the RTS mode of the serial port - char commandString[64]; - sprintf(commandString, "stty -F %s hupcl", portName); - int result = system(commandString); - - (*env)->ReleaseStringUTFChars(env, portNameJString, portName); - return (result == 0); -} - -JNIEXPORT jboolean JNICALL Java_com_fazecast_jSerialComm_SerialPort_preclearRTS(JNIEnv *env, jobject obj) -{ - jstring portNameJString = (jstring)(*env)->GetObjectField(env, obj, comPortField); - const char *portName = (*env)->GetStringUTFChars(env, portNameJString, NULL); - - // Send a system command to preset the RTS mode of the serial port - char commandString[64]; - sprintf(commandString, "stty -F %s -hupcl", portName); - int result = system(commandString); - - (*env)->ReleaseStringUTFChars(env, portNameJString, portName); - return (result == 0); -} - -JNIEXPORT jboolean JNICALL Java_com_fazecast_jSerialComm_SerialPort_setDTR(JNIEnv *env, jobject obj, jlong serialPortFD) -{ - if (serialPortFD <= 0) - return JNI_FALSE; - int modemBits = TIOCM_DTR; - return (ioctl(serialPortFD, TIOCMBIS, &modemBits) == 0); -} - -JNIEXPORT jboolean JNICALL Java_com_fazecast_jSerialComm_SerialPort_clearDTR(JNIEnv *env, jobject obj, jlong serialPortFD) -{ - if (serialPortFD <= 0) - return JNI_FALSE; - int modemBits = TIOCM_DTR; - return (ioctl(serialPortFD, TIOCMBIC, &modemBits) == 0); -} - -JNIEXPORT jboolean JNICALL Java_com_fazecast_jSerialComm_SerialPort_presetDTR(JNIEnv *env, jobject obj) -{ - jstring portNameJString = (jstring)(*env)->GetObjectField(env, obj, comPortField); - const char *portName = (*env)->GetStringUTFChars(env, portNameJString, NULL); - - // Send a system command to preset the DTR mode of the serial port - char commandString[64]; - sprintf(commandString, "stty -F %s hupcl", portName); - int result = system(commandString); - - (*env)->ReleaseStringUTFChars(env, portNameJString, portName); - return (result == 0); -} - -JNIEXPORT jboolean JNICALL Java_com_fazecast_jSerialComm_SerialPort_preclearDTR(JNIEnv *env, jobject obj) -{ - jstring portNameJString = (jstring)(*env)->GetObjectField(env, obj, comPortField); - const char *portName = (*env)->GetStringUTFChars(env, portNameJString, NULL); - - // Send a system command to preset the DTR mode of the serial port - char commandString[64]; - sprintf(commandString, "stty -F %s -hupcl", portName); - int result = system(commandString); - - (*env)->ReleaseStringUTFChars(env, portNameJString, portName); - return (result == 0); -} - -JNIEXPORT jboolean JNICALL Java_com_fazecast_jSerialComm_SerialPort_getCTS(JNIEnv *env, jobject obj, jlong serialPortFD) -{ - if (serialPortFD <= 0) - return JNI_FALSE; - int modemBits = 0; - return (ioctl(serialPortFD, TIOCMGET, &modemBits) == 0) && (modemBits & TIOCM_CTS); -} - -JNIEXPORT jboolean JNICALL Java_com_fazecast_jSerialComm_SerialPort_getDSR(JNIEnv *env, jobject obj, jlong serialPortFD) -{ - if (serialPortFD <= 0) - return JNI_FALSE; - int modemBits = 0; - return (ioctl(serialPortFD, TIOCMGET, &modemBits) == 0) && (modemBits & TIOCM_LE); -} - -#endif diff --git a/src/main/c/OSX/Makefile b/src/main/c/OSX/Makefile deleted file mode 100644 index 6754e16..0000000 --- a/src/main/c/OSX/Makefile +++ /dev/null @@ -1,79 +0,0 @@ -# OSX specific library variables -COMPILE := gcc -LINK := gcc -CFLAGS := -LDFLAGS := -dynamiclib -JDK_HOME = `/usr/libexec/java_home` -INCLUDES := -I"$(JDK_HOME)/include" -I"$(JDK_HOME)/include/darwin" -LIBRARIES := -framework Cocoa -framework IOKit -framework JavaVM -DELETE := @rm -MKDIR := @mkdir -COPY := @cp -MOVE := @mv -PRINT := @echo -FULL_CLASS := com.fazecast.jSerialComm.SerialPort -JAVAC := javac -JAVAH := javah -jni -JFLAGS := -source 1.6 -target 1.6 -Xlint:-options -LIBRARY_NAME := libjSerialComm.jnilib -JAVA_SOURCE_DIR = ../../../../src/main/java/com/fazecast/jSerialComm -RESOURCE_DIR = ../../../../src/main/resources/OSX -BUILD_DIR = ../../../../bin/OSX -JAVA_CLASS_DIR = $(BUILD_DIR)/../com/fazecast/jSerialComm -OBJECTSx86 = $(BUILD_DIR)/x86/SerialPort_OSX.o $(BUILD_DIR)/x86/OSXHelperFunctions.o -OBJECTSx86_64 = $(BUILD_DIR)/x86_64/SerialPort_OSX.o $(BUILD_DIR)/x86_64/OSXHelperFunctions.o -JNI_HEADER = ../com_fazecast_jSerialComm_SerialPort.h -JAVA_CLASS = $(JAVA_CLASS_DIR)/SerialPort.class - -# Define phony and suffix rules -.PHONY: all osx32 osx64 checkdirs -.SUFFIXES: -.SUFFIXES: .cpp .c .o .class .java .h - -# Default build target builds both 32 and 64 bit libraries -all : osx32 osx64 - $(DELETE) -rf $(BUILD_DIR) - $(DELETE) -rf ../*.h - -# Builds 32-bit OSX libraries -osx32 : ARCH = -m32 -osx32 : checkdirs $(BUILD_DIR)/x86/$(LIBRARY_NAME) - $(DELETE) -rf $(BUILD_DIR)/x86/*.o - $(COPY) $(BUILD_DIR)/x86/*.* $(RESOURCE_DIR)/x86 - -# Builds 64-bit OSX libraries -osx64 : ARCH = -m64 -osx64 : checkdirs $(BUILD_DIR)/x86_64/$(LIBRARY_NAME) - $(DELETE) -rf $(BUILD_DIR)/x86_64/*.o - $(COPY) $(BUILD_DIR)/x86_64/*.* $(RESOURCE_DIR)/x86_64 - -# Rule to create build directories -checkdirs : $(BUILD_DIR)/x86 $(BUILD_DIR)/x86_64 $(JAVA_CLASS_DIR) -$(BUILD_DIR)/x86 : - $(MKDIR) -p $@ -$(BUILD_DIR)/x86_64 : - $(MKDIR) -p $@ -$(JAVA_CLASS_DIR) : - $(MKDIR) -p $@ - -# Rule to build 32-bit library -$(BUILD_DIR)/x86/$(LIBRARY_NAME) : $(JNI_HEADER) $(OBJECTSx86) - $(LINK) $(LDFLAGS) $(ARCH) -o $@ $(OBJECTSx86) $(LIBRARIES) - -# Rule to build 64-bit library -$(BUILD_DIR)/x86_64/$(LIBRARY_NAME) : $(JNI_HEADER) $(OBJECTSx86_64) - $(LINK) $(LDFLAGS) $(ARCH) -o $@ $(OBJECTSx86_64) $(LIBRARIES) - -# Suffix rules to get from *.c -> *.o -$(BUILD_DIR)/x86/%.o : %.c - $(COMPILE) $(INCLUDES) $(CFLAGS) $(ARCH) -c $< -o $@ -$(BUILD_DIR)/x86_64/%.o : %.c - $(COMPILE) $(INCLUDES) $(CFLAGS) $(ARCH) -c $< -o $@ - -# Rule to build JNI header file -$(JNI_HEADER) : $(JAVA_CLASS) - $(JAVAH) -d .. -classpath $(JAVA_CLASS_DIR)/../../.. $(FULL_CLASS) - -# Suffix rule to get from *.java -> *.class -$(JAVA_CLASS) : - $(JAVAC) $(JFLAGS) -d $(JAVA_CLASS_DIR)/../../.. -cp $(JAVA_SOURCE_DIR)/../../.. $(JAVA_SOURCE_DIR)/$(basename $(notdir $@)).java diff --git a/src/main/c/OSX/OSXHelperFunctions.c b/src/main/c/OSX/OSXHelperFunctions.c deleted file mode 100644 index 7306113..0000000 --- a/src/main/c/OSX/OSXHelperFunctions.c +++ /dev/null @@ -1,72 +0,0 @@ -/* - * OSXHelperFunctions.c - * - * Created on: Jul 1, 2015 - * Last Updated on: Mar 25, 2016 - * Author: Will Hedgecock - * - * Copyright (C) 2012-2018 Fazecast, Inc. - * - * This file is part of jSerialComm. - * - * jSerialComm is free software: you can redistribute it and/or modify - * it under the terms of either the Apache Software License, version 2, or - * the GNU Lesser General Public License as published by the Free Software - * Foundation, version 3 or above. - * - * jSerialComm is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * - * You should have received a copy of both the GNU Lesser General Public - * License and the Apache Software License along with jSerialComm. If not, - * see and . - */ - -#ifdef __APPLE__ -#include -#include -#include "OSXHelperFunctions.h" - -speed_t getBaudRateCode(speed_t baudRate) -{ - switch (baudRate) - { - case 50: - return B50; - case 75: - return B75; - case 110: - return B110; - case 134: - return B134; - case 150: - return B150; - case 200: - return B200; - case 300: - return B300; - case 600: - return B600; - case 1200: - return B1200; - case 1800: - return B1800; - case 2400: - return B2400; - case 4800: - return B4800; - case 9600: - return B9600; - case 19200: - return B19200; - case 38400: - return B38400; - default: - return 0; - } - - return 0; -} - -#endif diff --git a/src/main/c/OSX/OSXHelperFunctions.h b/src/main/c/OSX/OSXHelperFunctions.h deleted file mode 100644 index d7200d5..0000000 --- a/src/main/c/OSX/OSXHelperFunctions.h +++ /dev/null @@ -1,33 +0,0 @@ -/* - * OSXHelperFunctions.h - * - * Created on: Jul 1, 2015 - * Last Updated on: Mar 25, 2016 - * Author: Will Hedgecock - * - * Copyright (C) 2012-2018 Fazecast, Inc. - * - * This file is part of jSerialComm. - * - * jSerialComm is free software: you can redistribute it and/or modify - * it under the terms of either the Apache Software License, version 2, or - * the GNU Lesser General Public License as published by the Free Software - * Foundation, version 3 or above. - * - * jSerialComm is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * - * You should have received a copy of both the GNU Lesser General Public - * License and the Apache Software License along with jSerialComm. If not, - * see and . - */ - -#ifndef __OSX_HELPER_FUNCTIONS_HEADER_H__ -#define __OSX_HELPER_FUNCTIONS_HEADER_H__ - -#include - -speed_t getBaudRateCode(speed_t baudRate); - -#endif // #ifndef __OSX_HELPER_FUNCTIONS_HEADER_H__ diff --git a/src/main/c/Posix/Makefile b/src/main/c/Posix/Makefile new file mode 100644 index 0000000..e43a189 --- /dev/null +++ b/src/main/c/Posix/Makefile @@ -0,0 +1,265 @@ +# Architecture-dependent library variables +COMPILE := gcc +COMPILE_ARM32 := arm32-unknown-linux-gnueabi-gcc +COMPILE_ARM32HF := arm32hf-unknown-linux-gnueabi-gcc +COMPILE_ARM64 := aarch64-unknown-linux-gnueabi-gcc +COMPILE_SOLARIS_X86 := x86_64-sun-solaris2.10-gcc +COMPILE_SOLARIS_SPARC := sparc-sun-solaris2.10-gcc +COMPILE_APPLE := /usr/local/bin/gcc-8 +LINK := gcc +LINK_ARM32 := arm32-unknown-linux-gnueabi-gcc +LINK_ARM32HF := arm32hf-unknown-linux-gnueabi-gcc +LINK_ARM64 := aarch64-unknown-linux-gnueabi-gcc +LINK_SOLARIS_X86 := x86_64-sun-solaris2.10-gcc +LINK_SOLARIS_SPARC := sparc-sun-solaris2.10-gcc +LINK_APPLE := /usr/local/bin/gcc-8 +CFLAGS := -fPIC -Os -flto -static-libgcc -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0 +CFLAGS_POSIX := -fuse-linker-plugin +CFLAGS_APPLE := +LDFLAGS := -Os -flto -static-libgcc +LDFLAGS_POSIX := -shared -fuse-linker-plugin -s +LDFLAGS_APPLE := -dynamiclib +JDK_HOME := $(shell if [ "`uname`" = "Darwin" ]; then echo "`/usr/libexec/java_home`"; else echo "$$JDK_HOME"; fi) +INCLUDES := -I"$(JDK_HOME)/include" -I"$(JDK_HOME)/include/linux" -I"$(JDK_HOME)/include/darwin" -I"$(JDK_HOME)/include/solaris" +LIBRARIES_POSIX := +LIBRARIES_APPLE := -framework Cocoa -framework IOKit -framework JavaVM +DELETE := @rm +MKDIR := @mkdir +COPY := @cp +MOVE := @mv +PRINT := @echo +FULL_CLASS := com.fazecast.jSerialComm.SerialPort +JAVAC := "$(JDK_HOME)/bin/javac" +JAVAH := "$(JDK_HOME)/bin/javah" -jni +JFLAGS := -source 1.6 -target 1.6 -Xlint:-options +LIBRARY_NAME_POSIX := libjSerialComm.so +LIBRARY_NAME_APPLE := libjSerialComm.jnilib +JAVA_SOURCE_DIR := ../../../../src/main/java/com/fazecast/jSerialComm +RESOURCE_DIR_LINUX := ../../../../src/main/resources/Linux +RESOURCE_DIR_SOLARIS := ../../../../src/main/resources/Solaris +RESOURCE_DIR_OSX := ../../../../src/main/resources/OSX +BUILD_DIR := ../../../../build +JAVA_CLASS_DIR := $(BUILD_DIR)/com/fazecast/jSerialComm +OBJECTSlinux32 := $(BUILD_DIR)/linux_x86/SerialPort_Posix.o $(BUILD_DIR)/linux_x86/PosixHelperFunctions.o +OBJECTSlinux64 := $(BUILD_DIR)/linux_x86_64/SerialPort_Posix.o $(BUILD_DIR)/linux_x86_64/PosixHelperFunctions.o +OBJECTSarmv5 := $(BUILD_DIR)/armv5/SerialPort_Posix.o $(BUILD_DIR)/armv5/PosixHelperFunctions.o +OBJECTSarmv6 := $(BUILD_DIR)/armv6/SerialPort_Posix.o $(BUILD_DIR)/armv6/PosixHelperFunctions.o +OBJECTSarmv6-hf := $(BUILD_DIR)/armv6-hf/SerialPort_Posix.o $(BUILD_DIR)/armv6-hf/PosixHelperFunctions.o +OBJECTSarmv7 := $(BUILD_DIR)/armv7/SerialPort_Posix.o $(BUILD_DIR)/armv7/PosixHelperFunctions.o +OBJECTSarmv7-hf := $(BUILD_DIR)/armv7-hf/SerialPort_Posix.o $(BUILD_DIR)/armv7-hf/PosixHelperFunctions.o +OBJECTSarmv8_32 := $(BUILD_DIR)/armv8_32/SerialPort_Posix.o $(BUILD_DIR)/armv8_32/PosixHelperFunctions.o +OBJECTSarmv8_64 := $(BUILD_DIR)/armv8_64/SerialPort_Posix.o $(BUILD_DIR)/armv8_64/PosixHelperFunctions.o +OBJECTSsolaris32 := $(BUILD_DIR)/solaris_x86/SerialPort_Posix.o $(BUILD_DIR)/solaris_x86/PosixHelperFunctions.o +OBJECTSsolaris64 := $(BUILD_DIR)/solaris_x86_64/SerialPort_Posix.o $(BUILD_DIR)/solaris_x86_64/PosixHelperFunctions.o +OBJECTSsolarisSparc32 := $(BUILD_DIR)/solaris_sparc32/SerialPort_Posix.o $(BUILD_DIR)/solaris_sparc32/PosixHelperFunctions.o +OBJECTSsolarisSparc64 := $(BUILD_DIR)/solaris_sparc64/SerialPort_Posix.o $(BUILD_DIR)/solaris_sparc64/PosixHelperFunctions.o +OBJECTSosx32 := $(BUILD_DIR)/osx_x86/SerialPort_Posix.o $(BUILD_DIR)/osx_x86/PosixHelperFunctions.o +OBJECTSosx64 := $(BUILD_DIR)/osx_x86_64/SerialPort_Posix.o $(BUILD_DIR)/osx_x86_64/PosixHelperFunctions.o +FLAGSlinux32 := -m32 +FLAGSlinux64 := -m64 +FLAGSarmv5 := -marm -mthumb-interwork -march=armv5 -mfloat-abi=soft +FLAGSarmv6 := -marm -mthumb-interwork -march=armv6 -mfloat-abi=soft +FLAGSarmv6hf := -marm -mthumb-interwork -march=armv6 -mfloat-abi=hard +FLAGSarmv7 := -mthumb -mthumb-interwork -march=armv7 -mfloat-abi=soft +FLAGSarmv7hf := -mthumb -mthumb-interwork -march=armv7 -mfloat-abi=hard +FLAGSarmv8_32 := -mthumb -mthumb-interwork -march=armv8-a +FLAGSarmv8_64 := -march=armv8-a +FLAGSsolaris32 := -m32 +FLAGSsolaris64 := -m64 +FLAGSsolarisSparc32 := -mno-app-regs -mcpu=v8 -mv8plus -m32 +FLAGSsolarisSparc64 := -mno-app-regs -mcpu=v9 -m64 +FLAGSosx32 := -m32 +FLAGSosx64 := -m64 +JNI_HEADER := ../com_fazecast_jSerialComm_SerialPort.h +JAVA_CLASS := $(JAVA_CLASS_DIR)/SerialPort.class + +# Define phony and suffix rules +.PHONY: all clean linux linux32 linux64 arm armv5 armv6 armv6-hf armv7 armv7-hf armv8_32 armv8_64 solaris solaris32 solaris64 solarisSparc32 solarisSparc64 osx osx32 osx64 +.SUFFIXES: +.SUFFIXES: .cpp .c .o .class .java .h + +# Default build target does nothing +all : + $(PRINT) You must specify either linux, arm, solaris, or osx! +clean : + $(DELETE) -rf "$(BUILD_DIR)" + $(DELETE) -rf ../*.h + +# Build all Linux libraries +linux : linux32 linux64 + $(DELETE) -rf "`readlink -f $(BUILD_DIR)`" + $(DELETE) -rf ../*.h + +# Build all ARM libraries +arm : armv5 armv6 armv6-hf armv7 armv7-hf armv8_32 armv8_64 + $(DELETE) -rf "`readlink -f $(BUILD_DIR)`" + $(DELETE) -rf ../*.h + +# Build all Solaris libraries +solaris : solaris32 solaris64 solarisSparc32 solarisSparc64 + $(DELETE) -rf "`readlink -f $(BUILD_DIR)`" + $(DELETE) -rf ../*.h + +# Build all OSX libraries +osx : osx64 + $(DELETE) -rf "$(BUILD_DIR)" + $(DELETE) -rf ../*.h + +# Build architecture-specific Linux libraries +linux32 : $(JAVA_CLASS_DIR) $(BUILD_DIR)/linux_x86 $(BUILD_DIR)/linux_x86/$(LIBRARY_NAME_POSIX) + $(DELETE) -rf $(BUILD_DIR)/linux_x86/*.o + $(COPY) $(BUILD_DIR)/linux_x86/*.* $(RESOURCE_DIR_LINUX)/x86/ +linux64 : $(JAVA_CLASS_DIR) $(BUILD_DIR)/linux_x86_64 $(BUILD_DIR)/linux_x86_64/$(LIBRARY_NAME_POSIX) + $(DELETE) -rf $(BUILD_DIR)/linux_x86_64/*.o + $(COPY) $(BUILD_DIR)/linux_x86_64/*.* $(RESOURCE_DIR_LINUX)/x86_64/ + +# Build architecture-specific ARM libraries +armv5 : $(JAVA_CLASS_DIR) $(BUILD_DIR)/armv5 $(BUILD_DIR)/armv5/$(LIBRARY_NAME_POSIX) + $(DELETE) -rf $(BUILD_DIR)/armv5/*.o + $(COPY) $(BUILD_DIR)/armv5/*.* $(RESOURCE_DIR_LINUX)/armv5/ +armv6 : $(JAVA_CLASS_DIR) $(BUILD_DIR)/armv6 $(BUILD_DIR)/armv6/$(LIBRARY_NAME_POSIX) + $(DELETE) -rf $(BUILD_DIR)/armv6/*.o + $(COPY) $(BUILD_DIR)/armv6/*.* $(RESOURCE_DIR_LINUX)/armv6/ +armv6-hf : $(JAVA_CLASS_DIR) $(BUILD_DIR)/armv6-hf $(BUILD_DIR)/armv6-hf/$(LIBRARY_NAME_POSIX) + $(DELETE) -rf $(BUILD_DIR)/armv6-hf/*.o + $(COPY) $(BUILD_DIR)/armv6-hf/*.* $(RESOURCE_DIR_LINUX)/armv6-hf/ +armv7 : $(JAVA_CLASS_DIR) $(BUILD_DIR)/armv7 $(BUILD_DIR)/armv7/$(LIBRARY_NAME_POSIX) + $(DELETE) -rf $(BUILD_DIR)/armv7/*.o + $(COPY) $(BUILD_DIR)/armv7/*.* $(RESOURCE_DIR_LINUX)/armv7/ +armv7-hf : $(JAVA_CLASS_DIR) $(BUILD_DIR)/armv7-hf $(BUILD_DIR)/armv7-hf/$(LIBRARY_NAME_POSIX) + $(DELETE) -rf $(BUILD_DIR)/armv7-hf/*.o + $(COPY) $(BUILD_DIR)/armv7-hf/*.* $(RESOURCE_DIR_LINUX)/armv7-hf/ +armv8_32 : $(JAVA_CLASS_DIR) $(BUILD_DIR)/armv8_32 $(BUILD_DIR)/armv8_32/$(LIBRARY_NAME_POSIX) + $(DELETE) -rf $(BUILD_DIR)/armv8_32/*.o + $(COPY) $(BUILD_DIR)/armv8_32/*.* $(RESOURCE_DIR_LINUX)/armv8_32/ +armv8_64 : $(JAVA_CLASS_DIR) $(BUILD_DIR)/armv8_64 $(BUILD_DIR)/armv8_64/$(LIBRARY_NAME_POSIX) + $(DELETE) -rf $(BUILD_DIR)/armv8_64/*.o + $(COPY) $(BUILD_DIR)/armv8_64/*.* $(RESOURCE_DIR_LINUX)/armv8_64/ + +# Build architecture-specific Solaris libraries +solaris32 : $(JAVA_CLASS_DIR) $(BUILD_DIR)/solaris_x86 $(BUILD_DIR)/solaris_x86/$(LIBRARY_NAME_POSIX) + $(DELETE) -rf $(BUILD_DIR)/solaris_x86/*.o + $(COPY) $(BUILD_DIR)/solaris_x86/*.* $(RESOURCE_DIR_SOLARIS)/x86/ +solaris64 : $(JAVA_CLASS_DIR) $(BUILD_DIR)/solaris_x86_64 $(BUILD_DIR)/solaris_x86_64/$(LIBRARY_NAME_POSIX) + $(DELETE) -rf $(BUILD_DIR)/solaris_x86_64/*.o + $(COPY) $(BUILD_DIR)/solaris_x86_64/*.* $(RESOURCE_DIR_SOLARIS)/x86_64/ +solarisSparc32 : $(JAVA_CLASS_DIR) $(BUILD_DIR)/solaris_sparc32 $(BUILD_DIR)/solaris_sparc32/$(LIBRARY_NAME_POSIX) + $(DELETE) -rf $(BUILD_DIR)/solaris_sparc32/*.o + $(COPY) $(BUILD_DIR)/solaris_sparc32/*.* $(RESOURCE_DIR_SOLARIS)/sparcv8plus_32/ +solarisSparc64 : $(JAVA_CLASS_DIR) $(BUILD_DIR)/solaris_sparc64 $(BUILD_DIR)/solaris_sparc64/$(LIBRARY_NAME_POSIX) + $(DELETE) -rf $(BUILD_DIR)/solaris_sparc64/*.o + $(COPY) $(BUILD_DIR)/solaris_sparc64/*.* $(RESOURCE_DIR_SOLARIS)/sparcv9_64/ + +# Build architecture-specific OSX libraries +osx32 : $(JAVA_CLASS_DIR) $(BUILD_DIR)/osx_x86 $(BUILD_DIR)/osx_x86/$(LIBRARY_NAME_APPLE) + $(DELETE) -rf $(BUILD_DIR)/osx_x86/*.o + $(COPY) $(BUILD_DIR)/osx_x86/*.* $(RESOURCE_DIR_OSX)/x86 +osx64 : $(JAVA_CLASS_DIR) $(BUILD_DIR)/osx_x86_64 $(BUILD_DIR)/osx_x86_64/$(LIBRARY_NAME_APPLE) + $(DELETE) -rf $(BUILD_DIR)/osx_x86_64/*.o + $(COPY) $(BUILD_DIR)/osx_x86_64/*.* $(RESOURCE_DIR_OSX)/x86_64 + +# Rule to create build directories +$(BUILD_DIR)/linux_x86 : + $(MKDIR) -p $@ +$(BUILD_DIR)/linux_x86_64 : + $(MKDIR) -p $@ +$(BUILD_DIR)/armv5 : + $(MKDIR) -p $@ +$(BUILD_DIR)/armv6 : + $(MKDIR) -p $@ +$(BUILD_DIR)/armv6-hf : + $(MKDIR) -p $@ +$(BUILD_DIR)/armv7 : + $(MKDIR) -p $@ +$(BUILD_DIR)/armv7-hf : + $(MKDIR) -p $@ +$(BUILD_DIR)/armv8_32 : + $(MKDIR) -p $@ +$(BUILD_DIR)/armv8_64 : + $(MKDIR) -p $@ +$(BUILD_DIR)/solaris_x86 : + $(MKDIR) -p $@ +$(BUILD_DIR)/solaris_x86_64 : + $(MKDIR) -p $@ +$(BUILD_DIR)/solaris_sparc32 : + $(MKDIR) -p $@ +$(BUILD_DIR)/solaris_sparc64 : + $(MKDIR) -p $@ +$(BUILD_DIR)/osx_x86 : + $(MKDIR) -p $@ +$(BUILD_DIR)/osx_x86_64 : + $(MKDIR) -p $@ +$(JAVA_CLASS_DIR) : + $(MKDIR) -p $@ + +# Build rules for all libraries +$(BUILD_DIR)/linux_x86/$(LIBRARY_NAME_POSIX) : $(JNI_HEADER) $(OBJECTSlinux32) + $(LINK) $(LDFLAGS) $(LDFLAGS_POSIX) $(FLAGSlinux32) -o $@ $(OBJECTSlinux32) $(LIBRARIES_POSIX) +$(BUILD_DIR)/linux_x86_64/$(LIBRARY_NAME_POSIX) : $(JNI_HEADER) $(OBJECTSlinux64) + $(LINK) $(LDFLAGS) $(LDFLAGS_POSIX) $(FLAGSlinux64) -o $@ $(OBJECTSlinux64) $(LIBRARIES_POSIX) +$(BUILD_DIR)/armv5/$(LIBRARY_NAME_POSIX) : $(JNI_HEADER) $(OBJECTSarmv5) + $(LINK_ARM32) $(LDFLAGS) $(LDFLAGS_POSIX) $(FLAGSarmv5) -o $@ $(OBJECTSarmv5) $(LIBRARIES_POSIX) +$(BUILD_DIR)/armv6/$(LIBRARY_NAME_POSIX) : $(JNI_HEADER) $(OBJECTSarmv6) + $(LINK_ARM32) $(LDFLAGS) $(LDFLAGS_POSIX) $(FLAGSarmv6) -o $@ $(OBJECTSarmv6) $(LIBRARIES_POSIX) +$(BUILD_DIR)/armv6-hf/$(LIBRARY_NAME_POSIX) : $(JNI_HEADER) $(OBJECTSarmv6-hf) + $(LINK_ARM32HF) $(LDFLAGS) $(LDFLAGS_POSIX) $(FLAGSarmv6-hf) -o $@ $(OBJECTSarmv6-hf) $(LIBRARIES_POSIX) +$(BUILD_DIR)/armv7/$(LIBRARY_NAME_POSIX) : $(JNI_HEADER) $(OBJECTSarmv7) + $(LINK_ARM32) $(LDFLAGS) $(LDFLAGS_POSIX) $(FLAGSarmv7) -o $@ $(OBJECTSarmv7) $(LIBRARIES_POSIX) +$(BUILD_DIR)/armv7-hf/$(LIBRARY_NAME_POSIX) : $(JNI_HEADER) $(OBJECTSarmv7-hf) + $(LINK_ARM32HF) $(LDFLAGS) $(LDFLAGS_POSIX) $(FLAGSarmv7-hf) -o $@ $(OBJECTSarmv7-hf) $(LIBRARIES_POSIX) +$(BUILD_DIR)/armv8_32/$(LIBRARY_NAME_POSIX) : $(JNI_HEADER) $(OBJECTSarmv8_32) + $(LINK_ARM32) $(LDFLAGS) $(LDFLAGS_POSIX) $(FLAGSarmv8_32) -o $@ $(OBJECTSarmv8_32) $(LIBRARIES_POSIX) +$(BUILD_DIR)/armv8_64/$(LIBRARY_NAME_POSIX) : $(JNI_HEADER) $(OBJECTSarmv8_64) + $(LINK_ARM64) $(LDFLAGS) $(LDFLAGS_POSIX) $(FLAGSarmv8_64) -o $@ $(OBJECTSarmv8_64) $(LIBRARIES_POSIX) +$(BUILD_DIR)/solaris_x86/$(LIBRARY_NAME_POSIX) : $(JNI_HEADER) $(OBJECTSsolaris32) + $(LINK_SOLARIS_X86) $(LDFLAGS) $(LDFLAGS_POSIX) $(FLAGSsolaris32) -o $@ $(OBJECTSsolaris32) $(LIBRARIES_POSIX) +$(BUILD_DIR)/solaris_x86_64/$(LIBRARY_NAME_POSIX) : $(JNI_HEADER) $(OBJECTSsolaris64) + $(LINK_SOLARIS_X86) $(LDFLAGS) $(LDFLAGS_POSIX) $(FLAGSsolaris64) -o $@ $(OBJECTSsolaris64) $(LIBRARIES_POSIX) +$(BUILD_DIR)/solaris_sparc32/$(LIBRARY_NAME_POSIX) : $(JNI_HEADER) $(OBJECTSsolarisSparc32) + $(LINK_SOLARIS_SPARC) $(LDFLAGS) $(LDFLAGS_POSIX) $(FLAGSsolarisSparc32) -o $@ $(OBJECTSsolarisSparc32) $(LIBRARIES_POSIX) +$(BUILD_DIR)/solaris_sparc64/$(LIBRARY_NAME_POSIX) : $(JNI_HEADER) $(OBJECTSsolarisSparc64) + $(LINK_SOLARIS_SPARC) $(LDFLAGS) $(LDFLAGS_POSIX) $(FLAGSsolarisSparc64) -o $@ $(OBJECTSsolarisSparc64) $(LIBRARIES_POSIX) +$(BUILD_DIR)/osx_x86/$(LIBRARY_NAME_APPLE) : $(JNI_HEADER) $(OBJECTSosx32) + $(LINK_APPLE) $(LDFLAGS) $(LDFLAGS_APPLE) $(FLAGSosx32) -o $@ $(OBJECTSosx32) $(LIBRARIES_APPLE) +$(BUILD_DIR)/osx_x86_64/$(LIBRARY_NAME_APPLE) : $(JNI_HEADER) $(OBJECTSosx64) + $(LINK_APPLE) $(LDFLAGS) $(LDFLAGS_APPLE) $(FLAGSosx64) -o $@ $(OBJECTSosx64) $(LIBRARIES_APPLE) + +# Suffix rules to get from *.c -> *.o +$(BUILD_DIR)/linux_x86/%.o : %.c + $(COMPILE) $(INCLUDES) $(CFLAGS) $(CFLAGS_POSIX) $(FLAGSlinux32) -c $< -o $@ +$(BUILD_DIR)/linux_x86_64/%.o : %.c + $(COMPILE) $(INCLUDES) $(CFLAGS) $(CFLAGS_POSIX) $(FLAGSlinux64) -c $< -o $@ +$(BUILD_DIR)/armv5/%.o : %.c + $(COMPILE_ARM32) $(INCLUDES) $(CFLAGS) $(CFLAGS_POSIX) $(FLAGSarmv5) -c $< -o $@ +$(BUILD_DIR)/armv6/%.o : %.c + $(COMPILE_ARM32) $(INCLUDES) $(CFLAGS) $(CFLAGS_POSIX) $(FLAGSarmv6) -c $< -o $@ +$(BUILD_DIR)/armv6-hf/%.o : %.c + $(COMPILE_ARM32HF) $(INCLUDES) $(CFLAGS) $(CFLAGS_POSIX) $(FLAGSarmv6-hf) -c $< -o $@ +$(BUILD_DIR)/armv7/%.o : %.c + $(COMPILE_ARM32) $(INCLUDES) $(CFLAGS) $(CFLAGS_POSIX) $(FLAGSarmv7) -c $< -o $@ +$(BUILD_DIR)/armv7-hf/%.o : %.c + $(COMPILE_ARM32HF) $(INCLUDES) $(CFLAGS) $(CFLAGS_POSIX) $(FLAGSarmv7-hf) -c $< -o $@ +$(BUILD_DIR)/armv8_32/%.o : %.c + $(COMPILE_ARM32) $(INCLUDES) $(CFLAGS) $(CFLAGS_POSIX) $(FLAGSarmv8_32) -c $< -o $@ +$(BUILD_DIR)/armv8_64/%.o : %.c + $(COMPILE_ARM64) $(INCLUDES) $(CFLAGS) $(CFLAGS_POSIX) $(FLAGSarmv8_64) -c $< -o $@ +$(BUILD_DIR)/solaris_x86/%.o : %.c + $(COMPILE_SOLARIS_X86) $(INCLUDES) $(CFLAGS) $(CFLAGS_POSIX) $(FLAGSsolaris32) -c $< -o $@ +$(BUILD_DIR)/solaris_x86_64/%.o : %.c + $(COMPILE_SOLARIS_X86) $(INCLUDES) $(CFLAGS) $(CFLAGS_POSIX) $(FLAGSsolaris64) -c $< -o $@ +$(BUILD_DIR)/solaris_sparc32/%.o : %.c + $(COMPILE_SOLARIS_SPARC) $(INCLUDES) $(CFLAGS) $(CFLAGS_POSIX) $(FLAGSsolarisSparc32) -c $< -o $@ +$(BUILD_DIR)/solaris_sparc64/%.o : %.c + $(COMPILE_SOLARIS_SPARC) $(INCLUDES) $(CFLAGS) $(CFLAGS_POSIX) $(FLAGSsolarisSparc64) -c $< -o $@ +$(BUILD_DIR)/osx_x86/%.o : %.c + $(COMPILE_APPLE) $(INCLUDES) $(CFLAGS) $(CFLAGS_APPLE) $(FLAGSosx32) -c $< -o $@ +$(BUILD_DIR)/osx_x86_64/%.o : %.c + $(COMPILE_APPLE) $(INCLUDES) $(CFLAGS) $(CFLAGS_APPLE) $(FLAGSosx64) -c $< -o $@ + +# Rule to build JNI header file +$(JNI_HEADER) : $(JAVA_CLASS) + $(JAVAH) -d .. -classpath $(JAVA_CLASS_DIR)/../../.. $(FULL_CLASS) + +# Suffix rule to get from *.java -> *.class +$(JAVA_CLASS) : + $(JAVAC) $(JFLAGS) -d $(JAVA_CLASS_DIR)/../../.. -cp $(JAVA_SOURCE_DIR)/../../.. $(JAVA_SOURCE_DIR)/$(basename $(notdir $@)).java diff --git a/src/main/c/Linux/LinuxHelperFunctions.c b/src/main/c/Posix/PosixHelperFunctions.c similarity index 76% rename from src/main/c/Linux/LinuxHelperFunctions.c rename to src/main/c/Posix/PosixHelperFunctions.c index f451000..2f1d2d1 100644 --- a/src/main/c/Linux/LinuxHelperFunctions.c +++ b/src/main/c/Posix/PosixHelperFunctions.c @@ -1,8 +1,8 @@ /* - * LinuxHelperFunctions.c + * PosixHelperFunctions.c * * Created on: Mar 10, 2015 - * Last Updated on: Nov 01, 2018 + * Last Updated on: Nov 12, 2018 * Author: Will Hedgecock * * Copyright (C) 2012-2018 Fazecast, Inc. @@ -23,23 +23,17 @@ * see and . */ -#ifdef __linux__ +#include +#include #include #include #include -#include #include -#include -#include -#include -#include -#include +#include #include -#include "LinuxHelperFunctions.h" - -// Explicitly define the ioctl function signature -extern int ioctl(int __fd, unsigned long int __request, ...); +#include "PosixHelperFunctions.h" +// Common functionality void push_back(struct charTupleVector* vector, const char* firstString, const char* secondString, const char* thirdString) { // Allocate memory for new string storage @@ -72,6 +66,45 @@ char keyExists(struct charTupleVector* vector, const char* key) return 0; } +// Linux-specific functionality +#if defined(__linux__) +#include +#include +#include + +void getDriverName(const char* directoryToSearch, char* friendlyName) +{ + friendlyName[0] = '\0'; + + // Open the directory + DIR *directoryIterator = opendir(directoryToSearch); + if (!directoryIterator) + return; + + // Read all sub-directories in the current directory + struct dirent *directoryEntry = readdir(directoryIterator); + while (directoryEntry) + { + // Check if entry is a valid sub-directory + if (directoryEntry->d_name[0] != '.') + { + // Get the readable part of the driver name + strcpy(friendlyName, "USB-to-Serial Port ("); + char *startingPoint = strchr(directoryEntry->d_name, ':'); + if (startingPoint != NULL) + strcat(friendlyName, startingPoint+1); + else + strcat(friendlyName, directoryEntry->d_name); + strcat(friendlyName, ")"); + break; + } + directoryEntry = readdir(directoryIterator); + } + + // Close the directory + closedir(directoryIterator); +} + void getFriendlyName(const char* productFile, char* friendlyName) { int friendlyNameLength = 0; @@ -110,39 +143,6 @@ void getInterfaceDescription(const char* interfaceFile, char* interfaceDescripti } } -void getDriverName(const char* directoryToSearch, char* friendlyName) -{ - friendlyName[0] = '\0'; - - // Open the directory - DIR *directoryIterator = opendir(directoryToSearch); - if (!directoryIterator) - return; - - // Read all sub-directories in the current directory - struct dirent *directoryEntry = readdir(directoryIterator); - while (directoryEntry) - { - // Check if entry is a valid sub-directory - if (directoryEntry->d_name[0] != '.') - { - // Get the readable part of the driver name - strcpy(friendlyName, "USB-to-Serial Port ("); - char *startingPoint = strchr(directoryEntry->d_name, ':'); - if (startingPoint != NULL) - strcat(friendlyName, startingPoint+1); - else - strcat(friendlyName, directoryEntry->d_name); - strcat(friendlyName, ")"); - break; - } - directoryEntry = readdir(directoryIterator); - } - - // Close the directory - closedir(directoryIterator); -} - void recursiveSearchForComPorts(charTupleVector* comPorts, const char* fullPathToSearch) { // Open the directory @@ -414,8 +414,9 @@ void driverBasedSearchForComPorts(charTupleVector* comPorts) } } -unsigned int getBaudRateCode(int baudRate) +baud_rate getBaudRateCode(baud_rate baudRate) { + // Translate a raw baud rate into a system-specified one switch (baudRate) { case 50: @@ -497,7 +498,7 @@ unsigned int getBaudRateCode(int baudRate) return 0; } -void setBaudRate(int portFD, int baudRate) +int setBaudRateCustom(int portFD, baud_rate baudRate) { #ifdef TCSETS2 struct termios2 options = { 0 }; @@ -506,7 +507,7 @@ void setBaudRate(int portFD, int baudRate) options.c_cflag |= BOTHER; options.c_ispeed = baudRate; options.c_ospeed = baudRate; - ioctl(portFD, TCSETS2, &options); + int retVal = ioctl(portFD, TCSETS2, &options); #else struct serial_struct serInfo; ioctl(portFD, TIOCGSERIAL, &serInfo); @@ -515,8 +516,216 @@ void setBaudRate(int portFD, int baudRate) serInfo.custom_divisor = serInfo.baud_base / baudRate; if (sersInfo.custom_divisor == 0) serInfo.custom_divisor = 1; - ioctl(portFD, TIOCSSERIAL, &serInfo); + int retVal = ioctl(portFD, TIOCSSERIAL, &serInfo); #endif + return (retVal == 0); +} + +// Solaris-specific functionality +#elif defined(__sun__) +#include + +void searchForComPorts(charTupleVector* comPorts) +{ + // Open the Solaris callout dev directory + DIR *directoryIterator = opendir("/dev/cua/"); + if (directoryIterator) + { + // Read all files in the current directory + struct dirent *directoryEntry = readdir(directoryIterator); + while (directoryEntry) + { + // See if the file names a potential serial port + if ((strlen(directoryEntry->d_name) >= 1) && (directoryEntry->d_name[0] != '.')) + { + // Determine system name of port + char* systemName = (char*)malloc(256); + strcpy(systemName, "/dev/cua/"); + strcat(systemName, directoryEntry->d_name); + + // Set static friendly name + char* friendlyName = (char*)malloc(256); + strcpy(friendlyName, "Serial Port"); + + // Ensure that the file is not a directory + struct stat fileStats; + stat(systemName, &fileStats); + if (!S_ISDIR(fileStats.st_mode)) + { + // Determine if port is already in the list, and add it if not + if (!keyExists(comPorts, systemName)) + push_back(comPorts, systemName, friendlyName, friendlyName); + } + + // Clean up memory + free(systemName); + free(friendlyName); + } + directoryEntry = readdir(directoryIterator); + } + + // Close the directory + closedir(directoryIterator); + } + + // Open the Solaris dial-in dev directory + directoryIterator = opendir("/dev/term/"); + if (directoryIterator) + { + // Read all files in the current directory + struct dirent *directoryEntry = readdir(directoryIterator); + while (directoryEntry) + { + // See if the file names a potential serial port + if ((strlen(directoryEntry->d_name) >= 1) && (directoryEntry->d_name[0] != '.')) + { + // Determine system name of port + char* systemName = (char*)malloc(256); + strcpy(systemName, "/dev/term/"); + strcat(systemName, directoryEntry->d_name); + + // Set static friendly name + char* friendlyName = (char*)malloc(256); + strcpy(friendlyName, "Serial Port (Dial-In)"); + + // Ensure that the file is not a directory + struct stat fileStats; + stat(systemName, &fileStats); + if (!S_ISDIR(fileStats.st_mode)) + { + // Determine if port is already in the list, and add it if not + if (!keyExists(comPorts, systemName)) + push_back(comPorts, systemName, friendlyName, friendlyName); + } + + // Clean up memory + free(systemName); + free(friendlyName); + } + directoryEntry = readdir(directoryIterator); + } + + // Close the directory + closedir(directoryIterator); + } +} + +baud_rate getBaudRateCode(baud_rate baudRate) +{ + // Translate a raw baud rate into a system-specified one + switch (baudRate) + { + case 50: + return B50; + case 75: + return B75; + case 110: + return B110; + case 134: + return B134; + case 150: + return B150; + case 200: + return B200; + case 300: + return B300; + case 600: + return B600; + case 1200: + return B1200; + case 1800: + return B1800; + case 2400: + return B2400; + case 4800: + return B4800; + case 9600: + return B9600; + case 19200: + return B19200; + case 38400: + return B38400; + case 57600: + return B57600; + case 76800: + return B76800; + case 115200: + return B115200; + case 153600: + return B153600; + case 230400: + return B230400; + case 307200: + return B307200; + case 460800: + return B460800; + default: + return 0; + } + + return 0; +} + +int setBaudRateCustom(int portFD, baud_rate baudRate) +{ + // No way to set custom baud rates on this OS + return 0; +} + +// Apple-specific functionality +#elif defined(__APPLE__) +#include +#include + +baud_rate getBaudRateCode(baud_rate baudRate) +{ + // Translate a raw baud rate into a system-specified one + switch (baudRate) + { + case 50: + return B50; + case 75: + return B75; + case 110: + return B110; + case 134: + return B134; + case 150: + return B150; + case 200: + return B200; + case 300: + return B300; + case 600: + return B600; + case 1200: + return B1200; + case 1800: + return B1800; + case 2400: + return B2400; + case 4800: + return B4800; + case 9600: + return B9600; + case 19200: + return B19200; + case 38400: + return B38400; + default: + return 0; + } + + return 0; +} + +int setBaudRateCustom(int portFD, baud_rate baudRate) +{ + // Use OSX-specific ioctls to set a custom baud rate + unsigned long microseconds = 1000; + int retVal = ioctl(portFD, IOSSIOSPEED, &baudRate); + ioctl(portFD, IOSSDATALAT, µseconds); + return (retVal == 0); } #endif diff --git a/src/main/c/Linux/LinuxHelperFunctions.h b/src/main/c/Posix/PosixHelperFunctions.h similarity index 64% rename from src/main/c/Linux/LinuxHelperFunctions.h rename to src/main/c/Posix/PosixHelperFunctions.h index 87f5adc..3b86ec0 100644 --- a/src/main/c/Linux/LinuxHelperFunctions.h +++ b/src/main/c/Posix/PosixHelperFunctions.h @@ -1,8 +1,8 @@ /* - * LinuxHelperFunctions.h + * PosixHelperFunctions.h * * Created on: Mar 10, 2015 - * Last Updated on: Nov 01, 2018 + * Last Updated on: Nov 12, 2018 * Author: Will Hedgecock * * Copyright (C) 2012-2018 Fazecast, Inc. @@ -23,9 +23,10 @@ * see and . */ -#ifndef __LINUX_HELPER_FUNCTIONS_HEADER_H__ -#define __LINUX_HELPER_FUNCTIONS_HEADER_H__ +#ifndef __POSIX_HELPER_FUNCTIONS_HEADER_H__ +#define __POSIX_HELPER_FUNCTIONS_HEADER_H__ +// Common functionality typedef struct charTupleVector { char **first, **second, **third; @@ -34,13 +35,37 @@ typedef struct charTupleVector void push_back(struct charTupleVector* vector, const char* firstString, const char* secondString, const char* thirdString); char keyExists(struct charTupleVector* vector, const char* key); +// Forced definitions +#ifndef CMSPAR +#define CMSPAR 010000000000 +#endif + +// Linux-specific functionality +#if defined(__linux__) +typedef int baud_rate; +extern int ioctl(int __fd, unsigned long int __request, ...); void getDriverName(const char* directoryToSearch, char* friendlyName); +void getFriendlyName(const char* productFile, char* friendlyName); +void getInterfaceDescription(const char* interfaceFile, char* interfaceDescription); void recursiveSearchForComPorts(charTupleVector* comPorts, const char* fullPathToSearch); void lastDitchSearchForComPorts(charTupleVector* comPorts); void driverBasedSearchForComPorts(charTupleVector* comPorts); -void getFriendlyName(const char* productFile, char* friendlyName); -void getInterfaceDescription(const char* interfaceFile, char* interfaceDescription); -unsigned int getBaudRateCode(int baudRate); -void setBaudRate(int portFD, int baudRate); -#endif // #ifndef __LINUX_HELPER_FUNCTIONS_HEADER_H__ +// Solaris-specific functionality +#elif defined(__sun__) +typedef int baud_rate; +extern int ioctl(int __fd, int __request, ...); +void searchForComPorts(charTupleVector* comPorts); + +// Apple-specific functionality +#elif defined(__APPLE__) +#include +typedef speed_t baud_rate; + +#endif + +// Common baud rate functionality +baud_rate getBaudRateCode(baud_rate baudRate); +int setBaudRateCustom(int portFD, baud_rate baudRate); + +#endif // #ifndef __POSIX_HELPER_FUNCTIONS_HEADER_H__ diff --git a/src/main/c/OSX/SerialPort_OSX.c b/src/main/c/Posix/SerialPort_Posix.c similarity index 82% rename from src/main/c/OSX/SerialPort_OSX.c rename to src/main/c/Posix/SerialPort_Posix.c index 09435e0..326c758 100644 --- a/src/main/c/OSX/SerialPort_OSX.c +++ b/src/main/c/Posix/SerialPort_Posix.c @@ -1,8 +1,8 @@ /* - * SerialPort_OSX.c + * SerialPort_Posix.c * * Created on: Feb 25, 2012 - * Last Updated on: Oct 08, 2018 + * Last Updated on: Nov 12, 2018 * Author: Will Hedgecock * * Copyright (C) 2012-2018 Fazecast, Inc. @@ -23,22 +23,25 @@ * see and . */ -#ifdef __APPLE__ -#ifndef CMSPAR -#define CMSPAR 010000000000 -#endif +#include +#include #include #include +#include +#include +#include +#include +#if defined(__linux__) +#include +#elif defined(__sun__) +#include +#elif defined(__APPLE__) #include #include #include #include -#include -#include -#include -#include -#include -#include "OSXHelperFunctions.h" +#endif +#include "PosixHelperFunctions.h" #include "../com_fazecast_jSerialComm_SerialPort.h" // Cached class, method, and field IDs @@ -46,10 +49,10 @@ jclass serialCommClass; jmethodID serialCommConstructor; jfieldID serialPortFdField; jfieldID comPortField; -jfieldID disableConfigField; jfieldID friendlyNameField; jfieldID portDescriptionField; jfieldID isOpenedField; +jfieldID disableConfigField; jfieldID isDtrEnabledField; jfieldID isRtsEnabledField; jfieldID baudRateField; @@ -65,6 +68,62 @@ jfieldID writeTimeoutField; jfieldID eventFlagsField; JNIEXPORT jobjectArray JNICALL Java_com_fazecast_jSerialComm_SerialPort_getCommPorts(JNIEnv *env, jclass serialComm) +#if defined(__linux__) +{ + // Enumerate serial ports on machine + charTupleVector serialPorts = { (char**)malloc(1), (char**)malloc(1), (char**)malloc(1), 0 }; + recursiveSearchForComPorts(&serialPorts, "/sys/devices/"); + lastDitchSearchForComPorts(&serialPorts); + jobjectArray arrayObject = (*env)->NewObjectArray(env, serialPorts.length, serialCommClass, 0); + int i; + for (i = 0; i < serialPorts.length; ++i) + { + // Create new SerialComm object containing the enumerated values + jobject serialCommObject = (*env)->NewObject(env, serialCommClass, serialCommConstructor); + (*env)->SetObjectField(env, serialCommObject, portDescriptionField, (*env)->NewStringUTF(env, serialPorts.third[i])); + (*env)->SetObjectField(env, serialCommObject, friendlyNameField, (*env)->NewStringUTF(env, serialPorts.second[i])); + (*env)->SetObjectField(env, serialCommObject, comPortField, (*env)->NewStringUTF(env, serialPorts.first[i])); + free(serialPorts.first[i]); + free(serialPorts.second[i]); + free(serialPorts.third[i]); + + // Add new SerialComm object to array + (*env)->SetObjectArrayElement(env, arrayObject, i, serialCommObject); + } + free(serialPorts.first); + free(serialPorts.second); + free(serialPorts.third); + + return arrayObject; +} +#elif defined(__sun__) +{ + // Enumerate serial ports on machine + charTupleVector serialPorts = { (char**)malloc(1), (char**)malloc(1), (char**)malloc(1), 0 }; + searchForComPorts(&serialPorts); + jobjectArray arrayObject = (*env)->NewObjectArray(env, serialPorts.length, serialCommClass, 0); + int i; + for (i = 0; i < serialPorts.length; ++i) + { + // Create new SerialComm object containing the enumerated values + jobject serialCommObject = (*env)->NewObject(env, serialCommClass, serialCommConstructor); + (*env)->SetObjectField(env, serialCommObject, portDescriptionField, (*env)->NewStringUTF(env, serialPorts.third[i])); + (*env)->SetObjectField(env, serialCommObject, friendlyNameField, (*env)->NewStringUTF(env, serialPorts.second[i])); + (*env)->SetObjectField(env, serialCommObject, comPortField, (*env)->NewStringUTF(env, serialPorts.first[i])); + free(serialPorts.first[i]); + free(serialPorts.second[i]); + free(serialPorts.third[i]); + + // Add new SerialComm object to array + (*env)->SetObjectArrayElement(env, arrayObject, i, serialCommObject); + } + free(serialPorts.first); + free(serialPorts.second); + free(serialPorts.third); + + return arrayObject; +} +#elif defined(__APPLE__) { io_object_t serialPort; io_iterator_t serialPortIterator; @@ -140,6 +199,7 @@ JNIEXPORT jobjectArray JNICALL Java_com_fazecast_jSerialComm_SerialPort_getCommP return arrayObject; } +#endif JNIEXPORT void JNICALL Java_com_fazecast_jSerialComm_SerialPort_initializeLibrary(JNIEnv *env, jclass serialComm) { @@ -190,7 +250,15 @@ JNIEXPORT jlong JNICALL Java_com_fazecast_jSerialComm_SerialPort_openPortNative( struct termios options = { 0 }; fcntl(serialPortFD, F_SETFL, 0); tcgetattr(serialPortFD, &options); +#if defined(__sun__) + options.c_iflag &= ~(IGNBRK | BRKINT | PARMRK | ISTRIP | INLCR | IGNCR | ICRNL | IXON); + options.c_oflag &= ~OPOST; + options.c_lflag &= ~(ECHO | ECHONL | ICANON | ISIG | IEXTEN); + options.c_cflag &= ~(CSIZE | PARENB); + options.c_cflag |= CS8; +#else cfmakeraw(&options); +#endif if (!isDtrEnabled || !isRtsEnabled) options.c_cflag &= ~HUPCL; options.c_iflag |= BRKINT; @@ -221,7 +289,7 @@ JNIEXPORT jboolean JNICALL Java_com_fazecast_jSerialComm_SerialPort_configPort(J struct termios options = { 0 }; // Get port parameters from Java class - speed_t baudRate = (*env)->GetIntField(env, obj, baudRateField); + baud_rate baudRate = (*env)->GetIntField(env, obj, baudRateField); int byteSizeInt = (*env)->GetIntField(env, obj, dataBitsField); int stopBitsInt = (*env)->GetIntField(env, obj, stopBitsField); int parityInt = (*env)->GetIntField(env, obj, parityField); @@ -254,23 +322,26 @@ JNIEXPORT jboolean JNICALL Java_com_fazecast_jSerialComm_SerialPort_configPort(J options.c_iflag |= (XonXoffInEnabled | XonXoffOutEnabled); // Set baud rate - speed_t baudRateCode = getBaudRateCode(baudRate); - if (baudRateCode != 0) - { - cfsetispeed(&options, baudRateCode); - cfsetospeed(&options, baudRateCode); - } + baud_rate baudRateCode = getBaudRateCode(baudRate); + unsigned char nonStandardBaudRate = (baudRateCode == 0); + if (nonStandardBaudRate) + baudRateCode = B38400; + cfsetispeed(&options, baudRateCode); + cfsetospeed(&options, baudRateCode); // Apply changes and block non-root users from opening this port int retVal = configDisabled ? 0 : tcsetattr(serialPortFD, TCSANOW, &options); ioctl(serialPortFD, TIOCEXCL); - // Attempt to set any necessary custom baud rates - if (baudRateCode == 0) - { - speed_t speed = (speed_t)baudRate; - ioctl(serialPortFD, IOSSIOSPEED, &speed); - } + // Attempt to set the transmit buffer size and any necessary custom baud rates +#if defined(__linux__) + struct serial_struct serInfo; + ioctl(serialPortFD, TIOCGSERIAL, &serInfo); + serInfo.xmit_fifo_size = sendDeviceQueueSize; + ioctl(serialPortFD, TIOCSSERIAL, &serInfo); +#endif + if (nonStandardBaudRate) + setBaudRateCustom(serialPortFD, baudRate); return ((retVal == 0) && Java_com_fazecast_jSerialComm_SerialPort_configEventFlags(env, obj, serialPortFD) ? JNI_TRUE : JNI_FALSE); } @@ -279,11 +350,13 @@ JNIEXPORT jboolean JNICALL Java_com_fazecast_jSerialComm_SerialPort_configTimeou // Get port timeouts from Java class if (serialPortFD <= 0) return JNI_FALSE; + baud_rate baudRate = (*env)->GetIntField(env, obj, baudRateField); + baud_rate baudRateCode = getBaudRateCode(baudRate); int timeoutMode = (*env)->GetIntField(env, obj, timeoutModeField); int readTimeout = (*env)->GetIntField(env, obj, readTimeoutField); // Retrieve existing port configuration - struct termios options; + struct termios options = { 0 }; tcgetattr(serialPortFD, &options); int flags = fcntl(serialPortFD, F_GETFL); if (flags == -1) @@ -329,7 +402,11 @@ JNIEXPORT jboolean JNICALL Java_com_fazecast_jSerialComm_SerialPort_configTimeou // Apply changes int retVal = fcntl(serialPortFD, F_SETFL, flags); - return ((retVal != -1) && (tcsetattr(serialPortFD, TCSANOW, &options) == 0)) ? JNI_TRUE : JNI_FALSE; + if (retVal != -1) + retVal = tcsetattr(serialPortFD, TCSANOW, &options); + if (baudRateCode == 0) + setBaudRateCustom(serialPortFD, baudRate); + return ((retVal == 0) ? JNI_TRUE : JNI_FALSE); } JNIEXPORT jboolean JNICALL Java_com_fazecast_jSerialComm_SerialPort_configEventFlags(JNIEnv *env, jobject obj, jlong serialPortFD) @@ -338,13 +415,15 @@ JNIEXPORT jboolean JNICALL Java_com_fazecast_jSerialComm_SerialPort_configEventF return JNI_FALSE; // Get event flags from Java class + baud_rate baudRate = (*env)->GetIntField(env, obj, baudRateField); + baud_rate baudRateCode = getBaudRateCode(baudRate); int eventsToMonitor = (*env)->GetIntField(env, obj, eventFlagsField); - jboolean retVal = JNI_FALSE; // Change read timeouts if we are monitoring data received + jboolean retVal; if ((eventsToMonitor & com_fazecast_jSerialComm_SerialPort_LISTENING_EVENT_DATA_RECEIVED) > 0) { - struct termios options; + struct termios options = { 0 }; tcgetattr(serialPortFD, &options); int flags = fcntl(serialPortFD, F_GETFL); if (flags == -1) @@ -352,12 +431,15 @@ JNIEXPORT jboolean JNICALL Java_com_fazecast_jSerialComm_SerialPort_configEventF flags &= ~O_NONBLOCK; options.c_cc[VMIN] = 0; options.c_cc[VTIME] = 10; - retVal = ((fcntl(serialPortFD, F_SETFL, flags) != -1) && (tcsetattr(serialPortFD, TCSANOW, &options) != -1)) ? - JNI_TRUE : JNI_FALSE; + retVal = ((fcntl(serialPortFD, F_SETFL, flags) == -1) || (tcsetattr(serialPortFD, TCSANOW, &options) == -1)) ? + JNI_FALSE : JNI_TRUE; + if (baudRateCode == 0) + setBaudRateCustom(serialPortFD, baudRate); } else retVal = Java_com_fazecast_jSerialComm_SerialPort_configTimeouts(env, obj, serialPortFD); + // Apply changes return retVal; } @@ -465,7 +547,7 @@ JNIEXPORT jint JNICALL Java_com_fazecast_jSerialComm_SerialPort_readBytes(JNIEnv else if ((timeoutMode & com_fazecast_jSerialComm_SerialPort_TIMEOUT_READ_BLOCKING) > 0) // Blocking mode, but not indefinitely { // Get current system time - struct timeval expireTime, currTime; + struct timeval expireTime = { 0 }, currTime = { 0 }; gettimeofday(&expireTime, NULL); expireTime.tv_usec += (readTimeout * 1000); if (expireTime.tv_usec > 1000000) @@ -529,7 +611,12 @@ JNIEXPORT jint JNICALL Java_com_fazecast_jSerialComm_SerialPort_writeBytes(JNIEn return -1; int timeoutMode = (*env)->GetIntField(env, obj, timeoutModeField); jbyte *writeBuffer = (*env)->GetByteArrayElements(env, buffer, 0); - int numBytesWritten; + int numBytesWritten, result = 0; + + // Set the DTR line to high if using RS-422 + //ioctl(serialPortFD, TIOCMGET, &result); + //result |= TIOCM_DTR; + //ioctl(serialPortFD, TIOCMSET, &result); // Write to port do { numBytesWritten = write(serialPortFD, writeBuffer+offset, bytesToWrite); } while ((numBytesWritten < 0) && (errno == EINTR)); @@ -548,6 +635,20 @@ JNIEXPORT jint JNICALL Java_com_fazecast_jSerialComm_SerialPort_writeBytes(JNIEn if ((timeoutMode & com_fazecast_jSerialComm_SerialPort_TIMEOUT_WRITE_BLOCKING) > 0) tcdrain(serialPortFD); + // Clear the DTR line if using RS-422 +//#ifdef TIOCSERGETLSR + //do + //{ + //result = ioctl(serialPortFD, TIOCSERGETLSR); + //if (result != TIOCSER_TEMT) + //usleep(100); + //} while (result != TIOCSER_TEMT); +//#endif + //ioctl(serialPortFD, TIOCMGET, &result); + //result &= ~TIOCM_DTR; + //ioctl(serialPortFD, TIOCMSET, &result); + //do { result = tcflush(serialPortFD, TCIFLUSH); } while ((result < 0) && (errno == EINTR)); + // Return number of bytes written if successful (*env)->ReleaseByteArrayElements(env, buffer, writeBuffer, JNI_ABORT); return numBytesWritten; @@ -590,7 +691,11 @@ JNIEXPORT jboolean JNICALL Java_com_fazecast_jSerialComm_SerialPort_presetRTS(JN // Send a system command to preset the RTS mode of the serial port char commandString[64]; +#if defined(__linux__) + sprintf(commandString, "stty -F %s hupcl", portName); +#else sprintf(commandString, "stty -f %s hupcl", portName); +#endif int result = system(commandString); (*env)->ReleaseStringUTFChars(env, portNameJString, portName); @@ -604,7 +709,11 @@ JNIEXPORT jboolean JNICALL Java_com_fazecast_jSerialComm_SerialPort_preclearRTS( // Send a system command to preset the RTS mode of the serial port char commandString[64]; +#if defined(__linux__) + sprintf(commandString, "stty -F %s -hupcl", portName); +#else sprintf(commandString, "stty -f %s -hupcl", portName); +#endif int result = system(commandString); (*env)->ReleaseStringUTFChars(env, portNameJString, portName); @@ -634,7 +743,11 @@ JNIEXPORT jboolean JNICALL Java_com_fazecast_jSerialComm_SerialPort_presetDTR(JN // Send a system command to preset the DTR mode of the serial port char commandString[64]; +#if defined(__linux__) + sprintf(commandString, "stty -F %s hupcl", portName); +#else sprintf(commandString, "stty -f %s hupcl", portName); +#endif int result = system(commandString); (*env)->ReleaseStringUTFChars(env, portNameJString, portName); @@ -648,7 +761,11 @@ JNIEXPORT jboolean JNICALL Java_com_fazecast_jSerialComm_SerialPort_preclearDTR( // Send a system command to preset the DTR mode of the serial port char commandString[64]; +#if defined(__linux__) + sprintf(commandString, "stty -F %s -hupcl", portName); +#else sprintf(commandString, "stty -f %s -hupcl", portName); +#endif int result = system(commandString); (*env)->ReleaseStringUTFChars(env, portNameJString, portName); @@ -670,5 +787,3 @@ JNIEXPORT jboolean JNICALL Java_com_fazecast_jSerialComm_SerialPort_getDSR(JNIEn int modemBits = 0; return (ioctl(serialPortFD, TIOCMGET, &modemBits) == 0) && (modemBits & TIOCM_LE); } - -#endif diff --git a/src/main/c/Linux/jSerialComm32.config b/src/main/c/Posix/jSerialComm32.config similarity index 100% rename from src/main/c/Linux/jSerialComm32.config rename to src/main/c/Posix/jSerialComm32.config diff --git a/src/main/c/Linux/jSerialComm32HF.config b/src/main/c/Posix/jSerialComm32HF.config similarity index 100% rename from src/main/c/Linux/jSerialComm32HF.config rename to src/main/c/Posix/jSerialComm32HF.config diff --git a/src/main/c/Linux/jSerialComm64.config b/src/main/c/Posix/jSerialComm64.config similarity index 100% rename from src/main/c/Linux/jSerialComm64.config rename to src/main/c/Posix/jSerialComm64.config diff --git a/src/main/resources/Linux/armv5/libjSerialComm.so b/src/main/resources/Linux/armv5/libjSerialComm.so index 4234ef1f7dd5ecf69e25b62bbbb22378ded753ad..7f8794a24e47ab8c82269d20a279a2283b42e934 100644 GIT binary patch literal 26136 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 literal 40528 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 cszjM+MO+N3_R8H}O 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 literal 33572 zcmeHw4|tT-mG^yTCdrTlm_Sej)E9~xD@lewbrDe$2nY%~Kw8mihsn%@Oqu-Y%ml&G zZTO?5R+d!I(iY0#(yiOI-SjIyWi4%~+G<_fWn0>hwY1G-oP{d-*_B$WZnMANz3WZFze|Yi@WoC%P+=q9Mm&8lXnMwb;8)~Q z5rA_X<9+Ze5pT*rgD`rgrS2j4HhAq;09mC8zzZCFrV&;T{95=AJ7Eg|YaE;)3V#Xw zJQ9Yx4LFJ~ZiH`zpAAp92EG)2Df}Jqbnl06hQE`9<4_G^Jba5o2LabPc$otU>fkSh zzYzX#fLo$~{JR=|S&4VSvpzlqUkSe!p6)968{nJZWANIQI|%FggAQ&3 zzQ@4{E{6|0bO7*u@YCSu!pGtN3Vs>C#^|OfApc&0zf%obqgQIgfLA+sEntI#FLK}n2VMqP1wR9Ru@g4S zf!8^3j05L8aJmEE3pfsbB|Q5tonHar1yp@hh?||T3I`H=0R9&E+er-J9;5NWxuqo3 z0s5|@ed3oC?l|WEeN^U>6_)Ii6|lS?BI9KSeWrl_1o#6+{F_GOQ{KP8ARCSN!#XoS zU0xkTTQu9p2Hg!+R~zZ~fj*87-GjJs=&408hz7*d`JnF}iK#!7f4OdW;H2Mi32}C+ zvU#ST1-jhM%e$(8|3pD~w?oDW7#8~r)Bii*b{HM|4e6sOe*nfZ1#(GOLchI+e*Xb^ zd40!=DJ&1tvp7P>EU}j+t|p z;1Aq5Q6_$i^miKdIle%@6!dSLg?d7}Qr-_#QYSseF~pz6VEU|+->=ZVE$9@FI`qe& z&wS{^F@@<571+ZrlutYAe*w~IM|v&l?TDRkkGbIQs7L)kZ_4{aLHqnlCkABtiwffF zL3<2+E{48qjPlSeI6~S|2GTjXKz9N^T6-J z1lxd&S-vX@(r-ceI}H7IgvBaXwg2hQVqJ{gDk z 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 U&bJx@y4;Ho;9i5x1kXnQFYS2A=Kufz diff --git a/src/main/resources/Linux/armv7-hf/libjSerialComm.so b/src/main/resources/Linux/armv7-hf/libjSerialComm.so index 1f2dbeb8b92a21d451cd95d36920c140fcdb1aea..d7ae4ae14a561307dfaca4a2b31666100998a9e1 100644 GIT binary patch literal 22044 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 literal 33572 zcmeHw4|tT-mG^yTCdrTlm_Sej)E9~xD@lewbrDe$2nY%~Kw8mihsn%@Oqu-Y%ml&G zZTO?5R+d!I(iY0#(yiOI-SjIyWi4%~+G<_fWn0>hwY1G-oP{d-*_B$WZnMANz3WZFze|Yi@WoC%P+=q9Mm&8lXnMwb;8)~Q z5rA_X<9+Ze5pT*rgD`rgrS2j4HhAq;09mC8zzZCFrV&;T{95=AJ7Eg|YaE;)3V#Xw zJQ9Yx4LFJ~ZiH`zpAAp92EG)2Df}Jqbnl06hQE`9<4_G^Jba5o2LabPc$otU>fkSh zzYzX#fLo$~{JR=|S&4VSvpzlqUkSe!p6)968{nJZWANIQI|%FggAQ&3 zzQ@4{E{6|0bO7*u@YCSu!pGtN3Vs>C#^|OfApc&0zf%obqgQIgfLA+sEntI#FLK}n2VMqP1wR9Ru@g4S zf!8^3j05L8aJmEE3pfsbB|Q5tonHar1yp@hh?||T3I`H=0R9&E+er-J9;5NWxuqo3 z0s5|@ed3oC?l|WEeN^U>6_)Ii6|lS?BI9KSeWrl_1o#6+{F_GOQ{KP8ARCSN!#XoS zU0xkTTQu9p2Hg!+R~zZ~fj*87-GjJs=&408hz7*d`JnF}iK#!7f4OdW;H2Mi32}C+ zvU#ST1-jhM%e$(8|3pD~w?oDW7#8~r)Bii*b{HM|4e6sOe*nfZ1#(GOLchI+e*Xb^ zd40!=DJ&1tvp7P>EU}j+t|p z;1Aq5Q6_$i^miKdIle%@6!dSLg?d7}Qr-_#QYSseF~pz6VEU|+->=ZVE$9@FI`qe& z&wS{^F@@<571+ZrlutYAe*w~IM|v&l?TDRkkGbIQs7L)kZ_4{aLHqnlCkABtiwffF zL3<2+E{48qjPlSeI6~S|2GTjXKz9N^T6-J z1lxd&S-vX@(r-ceI}H7IgvBaXwg2hQVqJ{gDk z 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 Hd}9AM=%)np literal 36212 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 literal 34940 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 diff --git a/src/main/resources/Linux/armv8_64/libjSerialComm.so b/src/main/resources/Linux/armv8_64/libjSerialComm.so index 7db4bdd9f384383805dd68a9f87e2dd58eb79cad..a0493f3c28913911e9ab897e6645aff23b7cc360 100644 GIT binary patch literal 26824 zcmeHweO#2swg2ocAOaGEMG&nlY7(Ro(V)?2HXIC^7(MHk*au?^qVk zd4v0luE=%Vqmd+JyoUBS1VyvIu9eUJx~7AKOM^6eXrFMcTn{qU%MtZ*L_G;RL{}sX z)x@wRA2^Fiu^mWqDUhF6C@&_8E~OOqoK{iH3nBQt{J!@am~TC2-m&1 z;&DyHm4Yh{*Il^MaLJU4Ool*40M5r{z$J#8mt^B_I?pkdC13&IQe3wR{5C+7$marH zEAn>&-XQXy2TTL=mjf!?r{EDHzXXt6AzCTB5&7A;?iRFs0T%;)3D*K#_v0Fm>lR#; zk~F}U38(_;dp3nQ4|y76@+s-su}7L*j77OvMr^ogw0>-T z{B?Dc#|8z5UfZe<%3{eWKS(o=H{H50+||L_>u!xQVYH)IQczR~ANCxQMTy3Y#+&>~ zCK^kc2jrhLHk7EJq(AkUY)O8Xfs6VleT>G5{GEJ^#*S=6<4rzHeox~{K2Cl}^NSMM zpT^dT>)tn3*zTS3=<^eveb>3=)pyQ2H`-S?%d5vXJ8EKb7ZmuY)3BUR0 zOTKw@l4I6p{gg|O#7>xz{ofZSB&?hI=<|214LiAXR${`5x7#jWYZ!SZ^l@uc)t%vw z#s1};j~~0`(FxI?rnb!V952lHM)Z$bJ}mOwyZ5I*dgymIg;&4-(QiEQb(4Q^Vt?NH z*BpPHelF@OCyu|Fm~Q-j-u#byUVQSEPp02(TK1i9g{1xLjbz`8FFf9LkM1ka97Gqd znhY4(c+-_E26$J!O*f!m3Q%KdKxWV-49D?p0LQc{U`aC-X|LsHAvv&yo)*l*aOQ!`XORbdc)7 zN9mVXxJXWDp+=B$-WT-v0QzkBA@LswX!kGJEJS0)>ZX8>l&%4Glh7w^ibiOH9+Vye zBstpyD1KR#I_7zO`Ip-+2&{MW!n`b1o>@wW&$F9>>5fSw(~4lJNw z8-)C*0Q#dC7m}ZE)&w`f?v%bE?C%uzH*+duzZc_Z3XpSF(7gfr-!Ak?4&cuh_BlR7 z6Wl1|e_z;VSAf5T2>L-`2dm(pAoOey4kG1{KT^Mz(k1~Z3+++5SI|$0jglNM7s`nL z$CHVRvF+faG)?rYC!k-`#JF!4ekJ|0hR@${b~#h4e^$sj13QrX;sE{;7#E_4F4Xv6 z7xw?2uv=3=ySs&)r)iUe)Gqj65bd5?pwZ(sz(#>iemgtB{!;|~RDk>!M8A&H<_YPD z2ADyNS9-vBtrPZX36SF!{W?xJ43vcZe=f$WHDF%gvsi=m8<<)jOE9RP5Yz}+zAROohZwWG)t*FTEaIi9) z!VoCA2kb@QD_EIluP(Kfp~=++T9%qFfY_|OT=seRGxPI? z&tHjNm!ZE|`MC`GP@4-&?PbNxQCVGD?p)3s>)|u2KbJuG1&JHB&V33DyT<2jLH08D zbD9S2e6A|IC!edvKh=T-4!mmk_C*_?v&OpWQm5Ur-f4F*XX$Et#Tw`Bn8=!A@G=Ae zdv$erMFFOfjZbE0QE|1cv>ZW!+?e}Ou~wnfaVI9OU0}l=W18if3Y5#&)X*eiQgF4F z7u(kJXfS+R6jG-$*4av(rR6K`rEY%Sx@&EvWju5ayC*y(kwxx+sn*(=vj`oqIT0w9 z7nLJkI*Twu93Qqw>Hq@Ng0=Q?io<30BIoe?QB+aBymW=IsDl-X7_QlN*eYmJxCRT$ zY%3hhPRj7?KP8C_#ENZBo2At0&?I0@sqDupZ5XcgTFLUViglS4<<9DgGQocQbDfR>l%nMruTn>) z-CoRizCz0n+jO*$DgIEje6?+rz1p^J_(Qm+ytEuH%$MfHrG?eDYOI5O3rHqb9>?&7 zT~$;?IaahaMa~L%tFkm})~dvqDJ!~0yu7FfV8UB-=Px_TojB%z_!I)5Z3Z zZ`<_v`&s{JgE#a)S*m0IyZ`7pf{vfp(s>i5ZSJku!Rgt5VSh?VK2I=UUri}l>>JJE zxq+mgn531<^DRl2xT!$ffa)MeY>_p23SFLMQbC$RU!sZTe`hOnI)jwStk8w3yeLPZ zi(4H|U!u^lrSD5i6*`@f%4AjOR!IabQRp^>Ua8Q<5dbf(QRo(h-=)yw6necvr}I^r zHYxOcNd(-k(COKLOpOX%+=}y}CWWq^jkhRtc~(yq4k&c>thrsGXUIkYk0|s^h2Eji z<-H*lpHS%6Dg0iAo~O{6Rr4!71|7F5eJNC-tK%D`(BbHPDPE!D)}}9+6uP+O<7LST zUECURdYVEPQ;5@ND|CMDFIq4w^o4>(AV;B#TR2|2M4^W%{7V%&J;#vAs?Z}O5wJv| z(>cFPl?r{7Bm&kbbQ$}o*rm`T75;jKevLxkq|jx|q2lcdT^w!jT8#>Qv?8ZTp{wV0 zEebtG;Xk0zjS9V8p~oupBMNO4K6(B;_zRr4xz^;uB2LQhcSpHk@bOhu+1 zg-*}5`jWWMCjZarBjOxSp^sPSQ40M_3O!z-Pf+M4g`TL;lNI_Lg`TF+O$vRsLKjCo zywt4FlNA0Og+5WCFHz`X$>F6-75Zd_->T5BRp=!O{d$F7snEZ!&}$TWvO;$$baCX$ zOM7b%HTN2ryMwWY-rAR%+6@J7QNbzDHvx?PG}{-|HQ#O0C%%)|-7% zddAB*9s+!#f`K{xI+^ z1>XoXa_OTqU8*9Z5v|3lyt z72E^dqTtU0FI4cK0pFwzYe@fjoH2o@S0fSTZ8c;#{9R1xsE1X&fJ_7ad;tz4H^%)T*x|F%EkGBH=K z)ez>=00oCrDS~bv7=pv7*Abr%jt75%y-Vf zQv4eX&HfER&HgVlpMM!^`z7Rh=bGC(bsM9J_w2DSgc@C#4Rska&ZrA+I_;gy+PsF? zlos$JPFH#3_9mRk%V<6qLwfw0>yhZXw#qb;<>L%JKXIwP3XiGtf2>3P23?gml;uAG z8zvsn>XOch2Xs|d&=ceJTpn{y$h(MsBw9ySc}KAPkBHx7sA@+(u_dU=i@r0qH{lcF zX^*Zl6Wuhv%B*wcQazn{du|eItWIRQRgEDmzf8~ab=Gg^5^e<^0bO)UH*(wrT-Wjl z&o`p}->823lN@&iqs+8R<6|3h->0(44Y{2{c6$)Zzky_V&37fSs45q59jogrccIQ( zR42`X^5iN!BgjvDBoq2?%$-fcNoR!4Dk1&+VZ3`^!z=g`S->S6~M!>k{^m<(f@2 zea|h^H=l>Tu@Pq98H@qhItDS~kUr)^vNOXt^SQLl0z1FV=aNfr_UURIJzm2Y&!cGH zibt@H5avFEc1+->c6)1o$?b8W$k5ya`8pw=`cG{pp+DyhdXH}s&3gmNnJ?+oL&q31 z`*I=EjQC>JGoLlY?6XChdD&t~4e=2+ZH2Kq{l5l0a=b_%->NLgThQEn{le9~wXgH>YrGY{7saaTB3XW;@Iw>wt?<20!&ndb z*=WddjbiDP-w9n3BiJXe#(^KU(Yc;IS{K=Vn$0VD67lQ9mm)yF2Qp9Us`ib6&zM|C zUqqcy^pSiusXome3wcbpd`~Cj{hI6yo>oBe2lAsj-wab-uHQeR+3ydp}KP19e8woSO+M>(x~RPHs5 zPkD;NI1lxg^!o|NV?57r81LBtNWSqP=AaI~^HN0nX&R$Wtap5jp3qfoL)pGm^LkU$ zw{sDrR%Kwl;Ccn=syZ>}HM>Hu`swcffV_S8F*nxtxUTng?w7vt*iq8sP0(GJ{4>3^ z<~GE|nSVezjp=;QVHZB85keQT&q(AO#hA`Qp2mgr{2tHKxWszQ$ZKuKdXl`;-SdDG zz0)w>GYWZ^!8`{sL5yjv$EDPruGW2Jx_hcp_tVQ-T^D`=Nd5u+Jyj?t`;wjC2TnG2 ziaPgkINq}q@CWD@V%kyC-#efAC?7)kOf7GqJbZ(ExC8BI{%rKTfjo45oEe$>BJ$K< zD$4`E9Ooe9jgZ%ANPtc;9>&X{AMAV%zD~58h<2OV=bdlHdSd+W2*zgyXx>b-FO6Wf z*;fZ0I{`OSoI@O*RO0CAMEOKO9WLtUSBMuf81RXrKIIdI49bs3{sYMBt^Ij3jRUR0 zbRQ>Ul#EY4^n;Z>88wIOz|+c}}jEXCMQ6 zz&YfLyO5{#jPg5>r#_L-CA~6(ucfCz)BM5c*~iOCH>2k_$eRu1D>N=f51#iow8QVb zMdmgZVZ3{;ZXqKpDyZ z6^F5&gMh!__V3>-lm4_m#G_n`yA@0vd+^?fNV#-7wQ}nCq5Z`Qwb@LHZ_Msk)!EDIchdz)#ZsfJt z9OJPdPvvQV&7WsZVj)5J=@K{e}-$EJrLK%l+JS#bj^UMRJ zw*C_~omf(jSO>i@4qUHvT@}T&{VN|ENDtLj9S2>D-w7XPV4STKzs-o>y?)-05XhDN zC_rBJBMN!y$ETN+eq`O~{te{OT41~6*JNQW&{1Bj1^X^)a!;Y2l)Ffgdl7V!+b!gh z@3%o_;9R*R#*X%P1&n<%3cAzY*Nc7DzKxF^rMcYYU~YdRYqLXsJK~`?5k5^ni^1Mn z-m@|6;VzR60EZ(B%>A;A3yxh)R&Q+^-vjBf&!f0P<3s*^7Wagi4`%pqKiXk=n(jxj z*JAVEqWRj1OV3R{=41QpiuJUMJ?A zp{c*_UcGXk$oIDY#pBGsMZcPU{q7X{?fWP7qj7x(>otvQ2F8cRR*q{Y#X^#0yjuO2Q2*Vl)c?2GM;X5n!aiU9C++iZ(N7t__bzJwHT|E|PaVIyA;$0F ztJwdu>eKj@e@6Y=x&IvEaY2W36!IU$CdFsunQj04SL<{>qSeX2N}b-?1I?uCVEYHU zzxe=rsqPzD?;Bw(|15mC2ls$HCSV@dOQHEp@qpr>!P`Hl zXaX_2(Z7VbgV3 zv-Z`|{??fCCGZg3%g1|s%8P)BL2Np$A65hEO=eXYe#CH!NzC;m?G><>dot)i2Az#{ zuua*}5&Jg8Di>mv;L9bxpr-}T_JKU>n0Xepxe;v(B8~|vEu#i=K=A@U?A1B*AjJBXVd=9T8 zjp~`T6}ajTxSz={7{R6|;l5V$huD-I;Gw$X08P53Z3)~l6 zSNb>k0`1>2Fn=&6(d6fUn>)AU}W6%fk2N@4& z{P$8k=;^opSYi98P?zq1+W=)eFbBi~ZUe*u^1c5T`#19W`>ST`!=hy@^TKgu*>x-M?=w3&Qmqc$j zX!~ZGvvdy(8}hZ0_aFDKv|pwBuR{-*dKk_R6V2=sJeSGOzr1iW>f@YF$M>Oh-k2A} zM#q`(j0I@L>;tk>GwXXN{ITC*h&{K$RfTA}gLT0!GScHz%}HUwjB z2x<1u#j~JV*4BXbq|fvsPkvzb`Sb5Juvz*VV>IpQzk~C1SA;9qU!a@Q5ZRt^cA0LD z^s7^-Lv2vKcK8q7i|b$)YEK8dQ`uI2Mih@VD<;JV8p)*RNk7G0ym0yYn=UXbZ_8wI zihapul|$Kg*FgIwvhmd}_$;0~ z;C?*@HZ*z$vtO2Czh{K~Y+5|dHKH#WcveGp92!sa?G^^MwxfL|ozq(2zv@}7|7F%jdrew{LfQ2btUOL&E^7YT!j4OOYWJ16 zm*jg)zQ2?_tpj<;SFVub9mqrbP0151<-Fa`(+GXAC%Tg7;6NU)gSA~D=hQ%+zH)8t zZDB_SmeW1CcOC8z5rc>~Sn{xoWQDdL3sWd;=(gd zR|3u;@51_7<=wV7VPZT>nTh8J*k4zfMzQ=uVFE^?t`++|%pb;@s&%*+t4m1IyK?7d zE;%;epj$a7FaMa4wd6KL?@gF@@0dK_B-+mz;or2DC!~B3e$ABcUGQ(Kz0;W2wZYtW zD4JEd^!gNiR9&vFW=u4G%bAjdYa?W`sJevC$IWf;L09i))|OP35PcT@ZertRB(=K| z4$(ZvGil;aigG1Tz7}J{u>W}w>;2`&S=$q6i{i8~sv&{qC*~RaeXK_h|CRX_;PI|A zx0yrOOxn9^^CcnWub`99)ZzZ({3HYBX+la6>d_jfovA0JFq$_Ga~t2U&^h~i^jte3 z^Yxf0r{~aeJ?X9e#h~Xnv`-M{IDBr>Sq{x%nv*pD=qv}e8}vK} zYYO*GzJ?FtpHx2qebamt=Q)x`@loO#3m$rIL(jt|3A@v{twxN*+M8R4>pa$Tzg%B7 z;Q0>D^ZgiO8b5j8*mIuZ*ci`7&DFmzfbVyY2!uq#8)?F zc=Kq?j47*8XCwCgVm+)>gg!>ikd|t<&J#EJvivx{f`VQpjIn?2Eh&R}y6Yn9)i|3>Vk=J1^CY_z__Troe zG0Ag`$^j`x1R*|c;qgE_+o$z;Kh5bD?M%;wctQ8&@!PU}bAFQTqkH>A7WZK{odeA^ z`%dw;%)Y-9#96>cTz0|`&$P4{X@&grxIfzms5cL8^^k`%MD6#y^0&O-`S`iU3%_o;rMi&aooAWqteC33AZw!cgiOh73R_!R?ObCk zW7CT5Yp3zQcoA$`YU;Gg>WX5#yaW<|d3V}spk;P}Ihdtvjon#M;VjWau_Yzz9i>IK zGJ%pfAqelnYA-M|l36s(>0B>mYVTdKHF(+jX6^5q@>S&(>&i8Cz?sMO=5G$06xCTq z@md??7L}M5)Hv}1o4t5Iai4ZmudM2TSku&nrfVIhsU>SFi^}jab00+`Bu}}A&7*g_ zZo$`u=uNF08(yrov&Ad%^6|7XTltDUg$u~LKfEVXL z?tfvlveYUQW`DGtA9Fu%O?UC%@_U<2;e&13Cep0Hkj=ybXxoY%(w4D}Yw~ zkntnHp5OcZ42%BPPWb(4fbD=*z)Jimr2()5@D;$5c;I^(@QL^Q{v2#9B0By4M*x@L zN0i3_cLCzJE36xEGTteu$Bq0Fz-0U=;z7U?z+He%fCm9{{_OX619k%%aX^!dLx6O^ z62N@GU4Tx&4!{P$rGNGN-v*5T*zdmqFW@W&Tny*}ECa0nJLCf{`G?=%0oZZM?~lg| zIiaV)2iS7X?{5Np`U2VoJP3Fhu>O+YpB##Q^+FC{6l_RI_dqTSs+pi07m>(m@u0P1 zGk*gw)%YlX0<_tJW&$+hx(wP9K$aD0+8wmVVA-r+{O&u)B8h~v0#=MG84t?Q{k}9A zxd(9>L3a@~BhtD%Vo$hbb6CU3gIU0n_`q=Z)4&@KUs($N7EONI?vOpfmd!y82Fn)x{b+(K zml2*Va*T9Zj5^0r$Ew!ZqTi~^q>4FI>n%++?K?CNfV|GOE9Q`%aS8HnD@0o|Xu6O)?{!J8h{485Sw~kn_Eo6J}j-Z`} zr}X!t`k&PL`tkt;bf5g;3CMF|zAYyEWol!38>-S^S|Zsy?+U(F@NNGLK8g)*gYO{t z8j**6D|bik8I`#?q9NR}C2Z?Rn;Z@vM?x`|)4ZR}OYaD!gZF9hnn|wE^Hx$5iOTa) z{>l*Lq?Z%rCx_7%@iu~YDPm6}@>lBvwM*Z8c^$lF;vGb8i z)NcJA9UQ!`UpJuKG(>q8>MTZiI?5^jLRXh=chsJ17Hy7f7_}v0YxuUX?IU-D?i}${ z$gbevoFM((7}=1VfgY*(RRiQW5m(!xFXS}pb{qG^EZQ91FnUYW)@!y!ZXdNHVrTeM zVY@~K=Y$3?8WDVJi2es8?ba)Ooa}NE@=hY|@_va}ahuYwAjH|8AtgACmrk?h#< zH{bgGi9h`DPjA2TZb**y-9#&7Gpto-HGMYec1Q0Sow+%x;Tp@9$gQImZj0C+z9Ves zNc~dCR6_)+Md4~B-LS^RBTtFuL@Q_qKqG&LfAHAMLu}R-z5Z`9B5P}t7raZ)Xlp)r zwe~I4{sL;Bn$M*6El-86ga!km6tzb>OvbtykM)%DU!*TA@P!4wu)r4<_`(AJ8y1k? z5jinQYmJssN_T63MF<#g(lYW}1l{7J7I+tkC;5GnaRLt&FhM~1of6tFQIh4@I`Ong zG>mr*Du|FK3b5VaDOr5HfR=koJ)$5?L)lRwP=0ekuIIFbQ|cDqt-zL@r|m*M-9J*o z63i1GD)HnJ9g%de5GeI-6oN(ye%aoqeog;&LGTM)+7-9aynh!(LwGpMajB;e_b&tT zd-DG>f&WJZrI|FvzJULK?NBei!;qbsd9x|GsJg;|Grfwksdr?Xrl-!hF*Pl9=8V}> zXHB0q`=%+T*{L&9aZ{1%D8YB6oVG%ix}tndYKhHJ!cvRZmpj(4)*!xy#!K+AM+bcz zQbh_-R&6h{Q3a8!EOW9{I^1NbPJ0dh;zO0CD61&8Ic+S}UQ)2U8efnsC@Dr=iD@+o zY}M8HZXB;6^AK!XU0Q@zDfJg0-4B5Vne_s-GSzpF& z31yrH8&5JWO8i=6C}zs~GEPePieQxbOFju_pqyf`#AO_o&?M@U{?xYAUyxY_GE^q( z%eXJ0jQg^ESzq>_mPM*>!9_`~BNEDWhw9VX6Ih?tUD8Xgb8_94P_9>C;fdN((-I(R z{VU?3R9sY&_nZc2wNm-g==gCa?o zCkr%kpZx^NXfdVsCEHN{KZ@iJZ2zHv`rGf+I3=7dHv~dJVE-Qloes35ndQDn{{Ja~ z{1TUNGwMIn{g(CQxHO@RSY-Wp zv2TjUkKrhFXrS+}tS=#c4?Lj0+;?@0`i-J}DL~ef@cDrHay_ZHX*DEYV10=nM22{z z{+q;lv`N%&k&FTc%6kcPQZX%nPuBl(0G)U#sZh49m1uu|Y180qDiL{EPm=!!Mg7_A literal 37720 zcmeHwe|(h1wf8)`0TO;0AwUSU*&tL*O#%S|D9UC71QZdHs8p+)&1ORuHrZr%13|QG zsBI~>eOcuyT3a{Nwy^#vw_*$4wgjYJTCqi}*1oszHK4bbTfKc1e?Uac`#tkxGyCi= zE`Hk2egEJ|o}HO9=bSlnX6DSV=Xqx1!ljEWhQZWjWj|*W3STB5b{X;77U_XwXLHyf z{7zy;9Cy$_RFZG!G67O9;}qg|Frwz%F5>6hE@V*d$}9oTjx!hW7J!Lvxujbz>6F_e zv!dK=!G^8)k5D7gWqRdG#2V0%DCy)pOakFju1ub}0Q2z}@neH?y%xSy`b#v}9q>=Z z-7H~C;ocu{Ihrpt-@8r)U5Z^lj6jkvwIFQyvq;$zyg1Z3sDBP2A({%&xMYyL>09U1O_-_q<-MGJmdpYhe<96VlgPX3^ zxbtz><6ebZU8>9|e2WB5fctsrCx@yh>6k96V$*Sd4)-kFYj9KfU5&c|_k~>X>UIG{ zs$LBP&1l>?8f~8DC+`p$o+RB%q^q1Oq-U%Gz_m*MIJiSK_(b?;Xkq0omY#CyUMt-q zg&^ITaKC_iz6_U2mz=9`FP7miN_Vbw$HTo6ccBcAfjeCK$+-^qG%ZZtTV% z*K(iu@xZwaceMsf=e4qIHqDkCYelIqmi9o!J`d$x%EqwmE`x(q-FguPP4K7*{+h(! zX@b85YO43<>-Q*p;BO}}eF$jOJ3IBV5k3#7_CL3l{(w>39xxn8l@fFLD zEdu`@S=dyTbd^i^p{XJq6%M1esOp>qapyZcT^%C)9Y{A-em5hU`H1OBbz{g4clPiUg^)g=%rNMt4^_lWpCp(#~68~3jh8z{CB3|zggz1*OV_RW}8e)cYd6v9REE{x_d#KO3oQFUvJ8R z#Y|bRHp%vK(j-qon)WhO%KwfDzc@|3qVXe@%VRV^z;#48Y$=x?c4MIcEI_%^RVn$O zG4UUjMxF+)pP}q+X@~EU`Fb1tQ`zmWrP14X$WQf?NqY!1ek}z*l0WNm5snInok^45 z8>Rf&CO)r&E>*ewMathy9XhVVvfgflKNbFd4j;vreX)Z%X%CUhX=k@UM~hHWU84ynZI*|1nK@JpesXc}+F( zc?0PZe3}W~oreFz(w=0=`eT{B>x2_{(GeUpQsXe zVOfs32#!iIzB()0?_N2WRQ>ouuIHhwtz7WQ7Y;iLepGK4OcemTguj$VpJO?`MADpT zJYPfEUMauocbL<;s>R>x42E2RkkiSW-d1mjIh)`x=aRY`oQUBtlU^WF)>>()AJB!?=WD;V?yna|tcE)DuiE0DUc6G?~IDoxX=_-E^97OHAv@zNO(>zh~hJ);6M#qlevD8#syNW3wT2w$NCT&NXXmb z@ppu7@Hcuy#o%#hEuKK2)$c?-cZIzERu*zM23+1&7UY$g*P}*3;0@l02IP^UjLR5# zY!o7puTF>|I5q`59%^Nc)KK4jt=E@YbYh7L+H$E9> zhg%I&%QEO|tq1yo?5>Sep`f4-hWu>xrBJ}{lc+HL3p{JRZqJGiPlu-#3K9`8l^zsb$~fLC5-O>Oie-_{wMt5mak092 zwk5A1RdI*RSQQ!}3Mn4WynqBxUQ@V87fMMLm${pewl~=3@iYp*U-&c58Fi#u6L2@R zxYl?Au63D917%S4Bql*v0Cz_qh!Uwq2j*@@Q$U=ELhl}0;0?K(lcT_5K>$Pn-no-V zjotvaCgf6Q-Ygsp1$d(+Fo>44V&Ku_a-;m?)s;1JP7YVl)0mu66R7y`08E+7?e+wN z%;}+e3G>+y42qGC?x#@?kAYC!FI_mSdg&5Jm9xBbx?0CI82wpr)7rcGvj9Rc{m%?h zI08?F1g`-)L8W3D=R3f8z(*8{lkn*wl8wTGoA4``IV~|rBxnb`G;XEq!N>y`AzN4> z=4*7R{RAuK6?841EL^)>Csc5?puJhn`xIP-^POUVY=94jr18t9!DSLWZmI^y5IKHL z)8H6V$FDgW97E*zW!K;`OFV9|1|J#6M*cK7t%s{?r3Tm6dFwT}+BYDYW(_WvQaGzN z4X)OMDWX$@)7r7R!Ww+O0>a&_!7DZRRt>&TgKyX1*J<#m2B*CUb?wyPH3|rKw+2^x zA{4z>gR4CUg7;|fFA+dqhc!6uYpCm}2B&=#b-kv+>lF}guLgH%a8@tsn+25$6*_)p zYjC~Xb2YfWr;x9~RU08@HVuAhoICcPG&t=ysB4-AS93gyo1?+UD`dEK4NiME>RPP9 z3l$LVat&_N;43wFkp{2V;FC0Xvj)FRgSTmLX##j`rv{&*;fFQ&uW4|-UH58m+GkVONewQS{CU(n8vGiC4EKx%SNl{vTH0Z%|8j|lgR?dG0*z0u z24AAV^EJ4>RBzMZ%QXC{8hp71pQgcAXz)22T;I>KYw$V^f3XI?NrNxf;43xwN)4{| z&?vfIgVVm5x|%ik9SR7yO@lXR@JtG z(d-?>Z)NPAOFyaZ%RMnaVzU&!T4=MrqVC;{ZN1cD@5{9?9>>Fj5uT)lha&9I!XpuG z(88k--lT=cBD_Nj7a)943x6Kr6Iyr@!WLs7{VyOqNedSv?9jrc2sdcqa)dW&;R=Lz zXyL06KB$GSMfijkb|7rA45YsZ;YnKfI)oiscp1VCTDS(`OzX{<A|S%eR2;a?$qLJJ>6*fN->A4XeYzo_oBGq&f4{r%&pJ$0jv zL~$3{2S*t0qKPbmzVC(kbJ)AP@Q6njXo?=G?yCfijTOF1G=xud9G_@_?_l9$MITq) zUo`yS!-(6n33QIPtNUP2_t-T$!@g*4k%i4Vx8Ya3ZNE2+^}T0hF)rI<)qQaH5Px>a z-j~$Jb$O%)?H`7-vIv)cv=>o*P<*I>AOtm+Zawdu*NWY>MMHZ?w3b^ryY7j{`*`b z?S1uw1$>Bt4`zT>?jl@^f(>PTz1IBLk3Q*tFa(-)kdYycZKv*j`6a-%O=2(guAa$d z{vN{X!IR>D3%_j*!NH*GmaeaeonvWW9Y z;ojNcWl;UX<2>Dk_I*XzO0c2aRXt;fBmI9GpDAWOc?(}o#pm3HeY}h;&^whq)qN_X zJear!!kB(8?3BalDeh9b7H$6gi^Lprz z+-|t2SH(nk0(v_RU0Zh!&^~Hm?WC*TagP>=y8N%Qj{bw>+au(=Ov<fVPFA-PAq-^ZebRi-i5x&W(D13){g$MPRNlT zv$F7gdAPIoR#N}{4*OO$Y?YncsW9x6hF6pIn8ewZh!dSb_Rd~GGTe;xh~|WK9P%+X zR)so}#j4``&~FqgTTk}CZ_NVeb0PXlWy5|J*FEW+^snpv+k;u%2U71pm@WFl525d~ z(EVxXK9$}-mbUabWU``Mcs`E|0s{rEOZ{;*dq`PV-Qf7EKhm@j;6|HkZH z`#0w7`W@t8cZX|?#hZ^EH=?JueT7YkR%86wGxOd@Eyi1Ws#)K+q0eZQy)SHO_`bm! z=#j3YmZ^)*u`CC=iq7vxt5{!nd=E}#(t4F))hMwm`F9(n|(Nf!*Aa(aW$lPn4SiB!D>8|_3{yJTE|4jLu zZ|{56VqCw?Vhp4FZUZjWr5FDjypfma_2AFgTf@)x*A)>Ad5+#FV7`y~>l(pB^!?*` zS(EI41P>Z-lI-EP`YZk~!g_g!A@`%O2iX zWYZXNub3aeUeLG;=@ipAoyv{d?g?ZoEU*!l;$2)9ql@=gjYu*47`GjbO1q5uUgJQ1 z$kst`F&fK}9XyV48OCnKAD$(BjxKfq&kb4&8&gi5VI%0hiYo=phV0x8tzKMX<*v8SZny4pSNEGMt`3x$O?MC`_A1}K9<~;j-H2w#_W7Hq* zg?`4`UVXSWi(T4{F?|sm8|%iL;7yG2X-rD_hQ5wbU-t8jS-Y;L{9)|21#M=r${+fv zto-Zmq&7uz>2~hih8MZ~cBCH#f3%Ok_6~Wp;56zF%?l^3wD+OkI$G3I-B*M#%|+Eb zjQS|b%QnPQ-|MKudIF<82P=GO9v9c8xdU^PrR+ik(^J~KVy$S#kBEtn&rtS8?? zc9iPLXv|;dze?%EaVM8Y99Nb{indnw*%<5V0zTRQtWGMA0es^72Gx6uOy6>5*W<)ZgvCoJU?aYvWBXCjIGvfOQa1UjOdvu17`w7TBcxGmD z51$z++LIywX}~?4A#NRTk7kJ53EbTo;%))C2^oR7gw1z@$i`sqBc7dnXRJiRPK4814J(G>5woUyU*(_S? zq4A#_*By1B+{q@_qs?OOTpatT|3TQQ;xO7LpC^m)-BE_T5+97M_rS+S0o*!)dPEdLfTT|^B2Ss9G$}~jGv2%<{`j{?{PWb z@3k7mWdCXWtoneJA74IurBPo&X~TZkV83&26luNzTdKm;H@%K9^;y(cea!7_xQ6&q z|3Q7I>aVFR_}Cl$=C_fTgmM`eXD5}%BFLJuJW%$!p2LG|6;uwCKhk$9T~7cnrR&Y` zldfIR7mZKG;*sJ?BV0rIB^=66H}XgNrTDufey>Tt-;wb5(a&uAJge39JfEkRSFHM3 zy^p1ObON@YWE}&%JghT)0R8bg{5h(_KZ%b&KBO_uWtMnfOZ^kg8>ueS+|hX#+qJ`O ziR^cxPCdu=@$e5U5pqdKsp>lEwBB6DVb_FC#hMa2yJQ^LGaZNORuUiBF&&56iozMB z+7s-T!il2oolS)UyQSkqH>&yWm{^<-?3IoaPe;s?jxzKydOWS;M$zs_?}R%@;h}HQ z@d|*K#0&k2jx!iI^T)AvYG({%l=&0jx1g<{j?6D)?QAgSAz9&?A{H*#Hkhq=bST!L zWowejC~k=nc38FT8~K?+h@0cNOHZ-8CDSZT3d1 z{nY!`Z3PWg%U|A5TlaDv%R}29Tl~ZCj=18kTgKM@3+l^p%>5lp^J;gjWBb0`*Z<%T zzk9eQx2tByI{Ut`Wl(WF)*YNyq|1!rL;3bQqxZ9Yu&;H|`|bN!=a^9x?!MQ) zZ~kQ%SNaNI3nr8oMZ*Q%_p*K4vF;p3ev23@rf?K^4)}YmzZ`y=Hx@9AIbow{y@K*VI{i7~FdqTl*y1jXyZ2pYjr;T5^za{#O_I(69j&SsKwvXZt0gka8Y~DCdPx&XEf5g)eYoKW7v9*BH+?mFS)TdDW zP_}SjE#W0Tu4J8KM?Hf!N_>QU`+3s(ty)`<>$gW$pX0z7%^~|48Yj|txE}S-ypD^u z!r@dusn+>#FHHBgWBG4lRRN9n!4n!u>Oh-{bw! z#v!}*W8S+TWmXBD&{_+vBm54u&}WSFNA+a#1pA%5e%vPO$89M0TGIbmtUsg9vcmFc zEtNrDaW!Z*VXjPhAzeR5a*(bqYCU62>@v{Eb)ckqAL-`=pBrF)sI6Cr!BZdiQ#qa6 z@Ecx6lrGKD79ef%KhNdQD?UkS)7%<$dlusKxe}$r^$l5I>qn)N=g%m6H7^un3l_6s zuEK3G#uj_NYDB2~@s8V3vdi})&FBn#*$~pi3>b|*;SNGApoz@5n+1R&E!j{k) z8tFTV^`!&kV*O!1=Uour8%bO*6LUXG>lMt|y5L%@NViR_-BF!Vb#@-$6QY%UmPZ_Y z#MfxoE8K#mhwPolLkg4J8+)85=s7x*#EJFW)ZB+yMnTOipopxw=B(S8zW zk-tx)B^@xx)+O~o{;x<~kbeXGlwZ`{;x`~Kt&_freYC8-1NwcOm-(~2ol}`VjlG%o zF}|U`yAtcgG)L?jwEGmTsqWus#n=vGyf301pCyA5Fr^01%ir#V&}91^ZM3BQ5;PCIxW2aNE(OE5+Ai;BpD z9Dhv0p7PI556GEfuX-!(Rd;}{UhY*t06+C%pSD-s2)_DW^=3(zdawFvvQa!O+QT4w z2ZMxt1GbfP#|~BSeGRgGHBuJZhh(|oW9Tfm=Hp%t_~|dqj*#B+=g*Eji@t~Y4API0 z8?N~S(HZO+3jY)Q)aP6cH`&gMH6CSOo&`?Nx&A$TpBS{z*Ms(R{hSZ!eG9^cC{tz& zA1i|&ePE3ISHe&0dU5@?&5nEnFjY1);iod9KFtF^=3^L3@O_ln|1sFM9z3@Yb)yd) zo;Rv+s=eJ#bszbp`cbrfb|e(%g)sNidf)iiCm)JF@BrEzt@Y4cO{@iukNIVqH*t4N ztQM}Qr^5cwSOV)eT<4UJ=&Q4Nf5Z2XU~^su@7_z;o`UdG$0pdHI!1aYn>`-kJn(wB z^!KO!&3EJ!FN5diL>?O1bLy(>-cx5s^q!i*bw4h4_KRXoP#*)G+wlBO(2rY-I!)#B zB;_HGz3atTq8|J8#=PeH=Cko{9migZ>t_4h`EMHSUF0vdub;H@n>F*9Wlb0Cm#YDB zSw?#|=%@@{03VX28~KZihm zYE6X3EDqugTSDWBZ@`beF5b@Bw7C(gQ#5v=c2D())mKEQ?$8+L%e?*+#I}GYNe;dr zcZACkz8-nR8m@5()-!Gtwlg}C)or_xMQAUK+8oc{NH&xFqrk6lID2h z#@aR7&+D|0%#9RiwCms}S{wEWqi+}y8oSe+z7X^HDCTqA#XO(8nBS92V|)X2Xy?UI z>zUboykQ?G*YU8E6i;1n}_L{#i7S z41dx;>rdcGW&E^EpUOB4KiNXk&)x9%$})~gIF;29@DceQ7uy54NPAqYsP3xBZld91 z#EG#k_`_EF+#W-f@wnI-z!dEdb=o;sMY?$$?XixF1te{l&rQi*O^p2)U~jUpGnAigNMg7i;Rl;9S`ORaIRtcy4 zz5u@}XUuyzeK*F;WIIEMqdG`+n(GVhPY8Cs9dnGlw@#vLXud)EqrKFf> zKjsiv^N3iRgJ&q-LN4$PxKxKozZ7N&KO}jO{{hK|{P)BECY2?w6R=k_Z)WI^p-+t6 z#Ph)FS>SK~_cPJc&+ooA(15q2LhEfMi)>SZwvy(KHn&fQ2*A`UZf5i7eZXt+(V#ZG zr?uFHH>o{r>1w?AT;_ANt}3ey;nm_*SF87p6W$8sB>Edxw=(tqC`))P5a59~0udN^ z84w?}Qf~q>^%5ZD6z~7xscCxkk7;lH;f=ba7yjtovJ~(7>2JgGSH|R9dQ5-)j}5%} z$I9^fbXg;RnJ`$!ZmM;Zg#0DqC2t$Osb-tXu3%+t0l&Kpsx1?*la+~gXjuo|gTG4r zcC@Z(^{;DX#EUR%+4AP~L9g586Kq5TPk_ISX4BGOm5pm%czMm;Y+KkFLS8+M3DFK; zhbQFshnh>0N!NMJgY$M+01c<-;R@Q=`&m%)Y7U!l3CMoegxp;$) zYTd=_q6RK%;GzaDYT%*K&pkO}q4u#!`X^LKO9cjW(W4F5l8wA>~Hyy*VV>S43| z-a>U%)m65s?tnjtMM%G|WLdRsAkez1WO`}&jM8aW*eXilK;)&kMbi>3Eqs~Chia$F z?kGE??2c-e0(;>1O3sg(q`;U)3E;{VPSP)ZS!M2E2diFoldZDWhVUF_guM_ni+|WQ+xQ_89KH!Z%}Cvx&$~!2 zBl~%BEJNNWCu@iU$d>FO*N|fjKFs3=(br+DS%a`%iMTGDb=Y6= zo6WLE!wF~2evgm}@sl;z0|?9c6MnL;`Z|8IbM7Pf)e-n}bLt2_?-Bgwx6wHxp|ksJQ3`NYSTb1C82$v-uR41ZSTkMTP#=XUZt{(#>(Ir)TBMY)=nGlcvL zUWebF^ETlu#kU36;vC9F)(zxenR6Avmyy3Yr6=Tq1) zO3x@KFI~eMI+_r?6+x=IBUFp22VkVJ+?Y1fSYdt7SU%FIfwO|KOR_%(-X&b6xxa*$ z?m_>{;O9_S*xwM!Ht0Lf%i&91w_E=nb=$a<%5-1SLPnFqVuq;2B)RmW(dL2w}(< z;6W}%8`hD-h7le`=ZuIG%>mNTQe*yj!R7MtOGZ!p z5#QWoK-7P7jGqqNkz3FvE%^}#D#j(3Kw3&Vx0KBvKW}{NNS=Vmn>n|g$gzb@!*7;x zcH{_V;36g9KUwQInM9ZrLSZ=;WjC$Y8bw7#lPvhIoB^;hpVlMH7=WrOVf_=J9Q6p8 zSQu5fRB1Qh%aVG@x3-0Rv^#?T5I$8}M)75#^=H|2x#C~c-Zi_d5}i9bHP=mrq=mt!_F44$Nqj|!1ZX{D{@ z#%N0xvd+!M1?iHiu+*jM1FTb}cA!Yr4_L2MFp^iC8-g)kzrnIPKR+BhngX2ERPpKK z0JgJOXsxp~=yBuAhdkTJhcif@YX+Ra!DiYgBU?;RQU_tUp#@MtTi65hIfM8d^eQJ% zLe5sGb`5zNd}}zL3+!RMej;AwZ3KJlZF#_zm~#o7f;&L*uSIvX2ED8Bbz7Ue*@X|B zda>0Ba&N02C{h9;7e4#iA~O@G;khD7{q8mRHl(x7)i_-^<-~=w1E)pg6+8u}4#>tu zO5o$<6@!cBZ))N$=()@LPiMe`eZ{r-cBiU9@oMIDf~DY1ITn)RtF!=7Ut2YOx)_|; zN?Ls0P{`*g!7ifL)rzpI!F!FbtzxFFWRTb4$EbDjoz| zJb_i75)@epK1qri+Zw`Fa#O3n1b+9L5^OGFqY|Hr1u)?6Kq?p@wYWmf2rpk!h2M}b zSVBVju8|*|E%9{n%7YSvyy_Y*JqBB@yy_cz23w)L)Q`}W#bEs(75?O3>PP7Uq4FvQ z2CGqCo!5%AyugOq23?#dew3ZsCdYZoK&dvTOp|JFicYzL+W#^1p=f6ZVSaOUt;bbupPhD9SdpF+h6qPU<$@O6!5G-0fQT>>} zPp)qQo_v1LJ?Bj~o2mAiD9pzX7jTG%7DEY_N<)lD@PjdU($oVA0 z1^$3Mk_~sxTOTItm`eWCcHn$`p0FqK!G|%BbXAj3uhLc>W^80(>Q~go$s}8Y;^GU8hFQ&nNh2y{5Z?=2?F8OSA!J}P&mH1|R zDC&O-`;SpGo#(P$@=<;IC<%|6;8P`hrwLvG_$W;dNza-)q9( z#Q7(mANLI4sm>vKPU7EFESS%fX`GgD^Z9XCV$Lv0lS6r{0Z)~$+tR@O91i;_+e=t7 z+9=`X^W%OZ;pX$>p2N%~)%kJ%3H(&&$Nf$6F`pmzdGMigYRu=yRdBe<<$${^4V(@M zB|hf!MDfFIoMV!;|g*lYmow>oJw@LBLbx_ji)N`TRHw=E$kaWlS3Qq&pg0WwU2=nD`$8 zJe530Bp>tnaSZFFgm3P@h6A2TPCD;^^k6H=iHZkp}k$1k?=RCf!`_lB%L2;TIlPj(z0WZOW?yKvO*m7h)SWPJT`9S-DjHsSgF#NDiavVnhB}&>uw3kPURPD) zT)L#T4u{7KoR;SdwK#E-O)J)-C)28Cqu;s8=WlTNoQ+s%3p!mL$c4Y9&F2Yu8cS!- z#I{;WBqtrk=X3=EuJulwZG;1(ngTc=&)L|~(y|^TT8N+Bmw>94w4KgHHI+9kbS_-B zfS+(f5-WdW(C=&(uZyU~VCRA_Evvj?Nfp@R&_9J)z4S&$ovP>wC%y8w=MpHzX=w={ zsw6FK380L#opk)2)-%vSusD{jwK4JiLLn%fH2K+*OgNnJJjc+9A^vL)bh6xzZ0{#;~+;ZvXs3xC< zshzKwK$>wu#gCumBbJm$BBy?@HD37=&UF23Lcmavfj#fZh~jAHjPr%Uq(L0@aTn0Z zq&nd=<0Ru}67xeG6Ewk3WKMu&%$1BNs_Gg%G!$Il5^^=b4F!bTtbEO`U^6RiT;B>5 z;o|tnQp{IMacE_b&f3)jPQ(Q~J{J*4Uz;z)O3Bi*(vYVUzx)X8QoOh83b|ORr&)~D z1&$b`3moNN?FLiubG3NgNX!ow_$lRl1rMBF$x1QyZK0!QOB+269jic$m%HhC7ZLQf zHu;s`)zA>YvkWqZ9tBW-K4(w?Xh3=C{A`IX*(OgAFAzdIi&z4~9)-BnzP57bVLh2H z6^~^ceqlM5Uq$%E)HWWk_P>>D!@Qj?Vnes0r>EiQx&k-B6@Rr)u3Yu}HsR7Gmr+Cj zzteGJuivle)qc8iUz3Xp4znJ=dXJm5#zU%a7;6xco}L>Ujj^)~X1} zK3fK|7O&)1sw<)6wrU(X0LV%`QQq(lOJk@P2p*N9A9wLvNMzB%gkn`5i(e zi8xJ1f?v^>n&2us%6$>>%CDpLxJ0N&2g0xPuE2kWCl!6TL10|3GA0SkxF^%lzu-wt zV5a{t9etCaf67E)3gVgVH1anK`l(V3<(TzP&utJ-v;KEV`kPe4mJC$-$}N!eiobHt ztrouR3LsrYr@&Lv&_^+xp=+yf;=ktdBYq|kIqo!{AUP}vYzSV5TjgKbe{37X>n^&#uk`vlg7^~)^(rHC|D5sv=YHwD!U6M-qn{vT{63=aSR diff --git a/src/main/resources/Linux/x86/libjSerialComm.so b/src/main/resources/Linux/x86/libjSerialComm.so index 4a3136f0eba70182c801558cd0c958d238fd21eb..b3e4131762c7121bd40e18a1b2f561318ccdd68f 100644 GIT binary patch delta 7753 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 literal 27428 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 diff --git a/src/main/resources/Linux/x86_64/libjSerialComm.so b/src/main/resources/Linux/x86_64/libjSerialComm.so index 2f532c36721e9e27b3aa7d312343a401cc9907f2..27a8d991223a8aedb20978f56346418be663a5b1 100644 GIT binary patch delta 8078 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 pt_O(KT)R5-uT*`t($?o={}&~jG{OJ? literal 33472 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 diff --git a/src/main/resources/OSX/x86_64/libjSerialComm.jnilib b/src/main/resources/OSX/x86_64/libjSerialComm.jnilib index 5893c8121ead1d6bbdf2bf5149c545186480648d..05672ba9f8bc1ca1b39a25b94061b2da056051bb 100755 GIT binary patch literal 22440 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 literal 26524 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/Solaris/sparcv9_64/libjSerialComm.so b/src/main/resources/Solaris/sparcv9_64/libjSerialComm.so new file mode 100644 index 0000000000000000000000000000000000000000..0e71a7e3a6122792818d6573ebb23793fcd57b3a GIT binary patch literal 20432 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/Solaris/x86/libjSerialComm.so b/src/main/resources/Solaris/x86/libjSerialComm.so new file mode 100644 index 0000000000000000000000000000000000000000..a70d30b2f8fede86abe5c019d442c33f367e1259 GIT binary patch literal 15584 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