Added support for Mac OS X.

This commit is contained in:
hedgecrw85 2015-03-12 11:24:22 -05:00
parent ecb24e40d5
commit 9bbf2ea26e
3 changed files with 49 additions and 3 deletions

View File

@ -212,7 +212,7 @@ JNIEXPORT jboolean JNICALL Java_com_fazecast_jSerialComm_SerialPort_configTimeou
options.c_cc[VMIN] = 1;
options.c_cc[VTIME] = 0;
}
else // Non-blocking
else // Non-blocking
{
flags |= O_NONBLOCK;
options.c_cc[VMIN] = 0;
@ -224,6 +224,53 @@ JNIEXPORT jboolean JNICALL Java_com_fazecast_jSerialComm_SerialPort_configTimeou
return (tcsetattr(serialFD, TCSAFLUSH, &options) == 0) ? JNI_TRUE : JNI_FALSE;
}
JNIEXPORT jboolean JNICALL Java_com_fazecast_jSerialComm_SerialPort_configEventFlags(JNIEnv *env, jobject obj)
{
jclass serialCommClass = env->GetObjectClass(obj);
int serialFD = (int)env->GetLongField(obj, env->GetFieldID(serialCommClass, "portHandle", "J"));
// Get event flags from Java class
int eventsToMonitor = env->GetIntField(obj, env->GetFieldID(serialCommClass, "eventFlags", "I"));
// Change read timeouts if we are monitoring data received
if ((eventsToMonitor & com_fazecast_jSerialComm_SerialPort_LISTENING_EVENT_DATA_RECEIVED) > 0)
{
struct termios options;
tcgetattr(serialFD, &options);
int flags = fcntl(serialFD, F_GETFL);
flags &= ~O_NONBLOCK;
options.c_cc[VMIN] = 0;
options.c_cc[VTIME] = 10;
fcntl(serialFD, F_SETFL, flags);
tcsetattr(serialFD, TCSAFLUSH, &options);
}
else
Java_com_fazecast_jSerialComm_SerialPort_configTimeouts(env, obj);
// Apply changes
return JNI_TRUE;
}
JNIEXPORT jint JNICALL Java_com_fazecast_jSerialComm_SerialPort_waitForEvent(JNIEnv *env, jobject obj)
{
jclass serialCommClass = env->GetObjectClass(obj);
int serialFD = (int)env->GetLongField(obj, env->GetFieldID(serialCommClass, "portHandle", "J"));
// Initialize the waiting set and the timeouts
struct timeval timeout;
fd_set waitingSet;
FD_ZERO(&waitingSet);
FD_SET(serialFD, &waitingSet);
timeout.tv_sec = 1;
timeout.tv_usec = 0;
// Wait for a serial port event
int retVal = select(serialFD + 1, &waitingSet, NULL, NULL, &timeout);
if (retVal <= 0)
return 0;
return (FD_ISSET(serialFD, &waitingSet)) ? com_fazecast_jSerialComm_SerialPort_LISTENING_EVENT_DATA_AVAILABLE : 0;
}
JNIEXPORT jboolean JNICALL Java_com_fazecast_jSerialComm_SerialPort_closePortNative(JNIEnv *env, jobject obj)
{
// Close port

View File

@ -764,7 +764,6 @@ public final class SerialPort
throw new IOException("This port appears to have been shutdown or disconnected.");
return read(b, 0, b.length);
}
@Override

View File

@ -43,7 +43,7 @@ public class SerialPortTest
System.out.println("\nPorts:\n");
for (int i = 0; i < ports.length; ++i)
System.out.println(" " + ports[i].getSystemPortName() + ": " + ports[i].getDescriptivePortName());
SerialPort ubxPort = ports[1];
SerialPort ubxPort = ports[0];
byte[] readBuffer = new byte[2048];
System.out.println("\nOpening " + ubxPort.getDescriptivePortName() + ": " + ubxPort.openPort());