Added support for Mac OS X.
This commit is contained in:
parent
ecb24e40d5
commit
9bbf2ea26e
|
@ -212,7 +212,7 @@ JNIEXPORT jboolean JNICALL Java_com_fazecast_jSerialComm_SerialPort_configTimeou
|
||||||
options.c_cc[VMIN] = 1;
|
options.c_cc[VMIN] = 1;
|
||||||
options.c_cc[VTIME] = 0;
|
options.c_cc[VTIME] = 0;
|
||||||
}
|
}
|
||||||
else // Non-blocking
|
else // Non-blocking
|
||||||
{
|
{
|
||||||
flags |= O_NONBLOCK;
|
flags |= O_NONBLOCK;
|
||||||
options.c_cc[VMIN] = 0;
|
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;
|
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)
|
JNIEXPORT jboolean JNICALL Java_com_fazecast_jSerialComm_SerialPort_closePortNative(JNIEnv *env, jobject obj)
|
||||||
{
|
{
|
||||||
// Close port
|
// Close port
|
||||||
|
|
|
@ -764,7 +764,6 @@ public final class SerialPort
|
||||||
throw new IOException("This port appears to have been shutdown or disconnected.");
|
throw new IOException("This port appears to have been shutdown or disconnected.");
|
||||||
|
|
||||||
return read(b, 0, b.length);
|
return read(b, 0, b.length);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -43,7 +43,7 @@ public class SerialPortTest
|
||||||
System.out.println("\nPorts:\n");
|
System.out.println("\nPorts:\n");
|
||||||
for (int i = 0; i < ports.length; ++i)
|
for (int i = 0; i < ports.length; ++i)
|
||||||
System.out.println(" " + ports[i].getSystemPortName() + ": " + ports[i].getDescriptivePortName());
|
System.out.println(" " + ports[i].getSystemPortName() + ": " + ports[i].getDescriptivePortName());
|
||||||
SerialPort ubxPort = ports[1];
|
SerialPort ubxPort = ports[0];
|
||||||
|
|
||||||
byte[] readBuffer = new byte[2048];
|
byte[] readBuffer = new byte[2048];
|
||||||
System.out.println("\nOpening " + ubxPort.getDescriptivePortName() + ": " + ubxPort.openPort());
|
System.out.println("\nOpening " + ubxPort.getDescriptivePortName() + ": " + ubxPort.openPort());
|
||||||
|
|
Loading…
Reference in New Issue