diff options
author | Jakob Odersky <jodersky@gmail.com> | 2013-07-11 15:33:14 +0200 |
---|---|---|
committer | Jakob Odersky <jodersky@gmail.com> | 2013-07-11 15:33:14 +0200 |
commit | b686a116e484cc8f315443e09a8e20a9ccb7abce (patch) | |
tree | 6249e59955a756d12c7c54915a45fc70f99496ca /flow-main/src | |
parent | 9ceea97cfb9bbf692c986534860ab0bbb315911b (diff) | |
download | akka-serial-b686a116e484cc8f315443e09a8e20a9ccb7abce.tar.gz akka-serial-b686a116e484cc8f315443e09a8e20a9ccb7abce.tar.bz2 akka-serial-b686a116e484cc8f315443e09a8e20a9ccb7abce.zip |
add support for different serial configurations
Diffstat (limited to 'flow-main/src')
3 files changed, 15 insertions, 8 deletions
diff --git a/flow-main/src/main/java/com/github/jodersky/flow/internal/NativeSerial.java b/flow-main/src/main/java/com/github/jodersky/flow/internal/NativeSerial.java index dba3f44..e7322ed 100644 --- a/flow-main/src/main/java/com/github/jodersky/flow/internal/NativeSerial.java +++ b/flow-main/src/main/java/com/github/jodersky/flow/internal/NativeSerial.java @@ -12,22 +12,29 @@ class NativeSerial { final static int E_IO = -1; final static int E_ACCESS_DENIED = -2; final static int E_BUSY = -3; - final static int E_INVALID_BAUD = -4; + final static int E_INVALID_SETTINGS = -4; final static int E_INTERRUPT = -5; final static int E_NO_PORT = -6; + + final static int PARITY_NONE = 0; + final static int PARITY_ODD = 1; + final static int PARITY_EVEN = 2; /**Opens a serial port and allocates memory for storing configuration. Note: if this function fails, * any internally allocated resources will be freed. - * @param port_name name of port + * @param device name of port * @param baud baud rate + * @param characterSize character size of data transmitted through serial device + * @param twoStopBits set to use two stop bits instead of one + * @param parity kind of parity checking to use * @param serial pointer to memory that will be allocated with a serial structure * @return 0 on success * @return E_NO_PORT if the given port does not exist * @return E_ACCESS_DENIED if permissions are not sufficient to open port * @return E_BUSY if port is already in use - * @return E_INVALID_BAUD if specified baudrate is non-standard + * @return E_INVALID_SETTINGS if any of the specified settings are not supported * @return E_IO on other error */ - native static int open(String device, int baud, long[] serial); + native static int open(String device, int baud, int characterSize, boolean twoStopBits, int parity, long[] serial); /**Starts a blocking read from a previously opened serial port. The read is blocking, however it may be * interrupted by calling 'serial_interrupt' on the given serial port. diff --git a/flow-main/src/main/scala/com/github/jodersky/flow/exceptions.scala b/flow-main/src/main/scala/com/github/jodersky/flow/exceptions.scala index 0422018..f91aa1b 100644 --- a/flow-main/src/main/scala/com/github/jodersky/flow/exceptions.scala +++ b/flow-main/src/main/scala/com/github/jodersky/flow/exceptions.scala @@ -5,6 +5,6 @@ import java.io.IOException class NoSuchPortException(message: String) extends Exception(message) class PortInUseException(message: String) extends Exception(message) class AccessDeniedException(message: String) extends Exception(message) -class IllegalBaudRateException(message: String) extends Exception(message) +class InvalidSettingsException(message: String) extends Exception(message) class PortInterruptedException(message: String) extends Exception(message) class PortClosedException(message: String) extends Exception(message)
\ No newline at end of file diff --git a/flow-main/src/main/scala/com/github/jodersky/flow/internal/InternalSerial.scala b/flow-main/src/main/scala/com/github/jodersky/flow/internal/InternalSerial.scala index 315f395..f3e08b8 100644 --- a/flow-main/src/main/scala/com/github/jodersky/flow/internal/InternalSerial.scala +++ b/flow-main/src/main/scala/com/github/jodersky/flow/internal/InternalSerial.scala @@ -68,7 +68,7 @@ object InternalSerial { case E_IO => throw new IOException(port) case E_ACCESS_DENIED => throw new AccessDeniedException(port) case E_BUSY => throw new PortInUseException(port) - case E_INVALID_BAUD => throw new IllegalBaudRateException("use standard baud rate") + case E_INVALID_SETTINGS => throw new InvalidSettingsException("the provided settings are invalid: be sure to use standard baud rate, character size and parity.") case E_INTERRUPT => throw new PortInterruptedException(port) case E_NO_PORT => throw new NoSuchPortException(port) case error if error < 0 => throw new IOException(s"unknown error code: ${error}") @@ -76,9 +76,9 @@ object InternalSerial { } /** Open a new connection to a serial port. */ - def open(port: String, baud: Int): InternalSerial = synchronized { + def open(port: String, baud: Int, characterSize: Int = 8, twoStopBits: Boolean = false, parity: Int = 0): InternalSerial = synchronized { val pointer = new Array[Long](1) - except(NativeSerial.open(port, baud, pointer), port) + except(NativeSerial.open(port, baud, characterSize, twoStopBits, parity, pointer), port) new InternalSerial(port, pointer(0)) } |