diff options
author | Jakob Odersky <jodersky@gmail.com> | 2013-02-27 15:53:33 +0100 |
---|---|---|
committer | Jakob Odersky <jodersky@gmail.com> | 2013-02-27 15:53:33 +0100 |
commit | 793983ca31eb05fce655ed5877b6f3faa4577acd (patch) | |
tree | 94929b35094209df2964cd69068a0b9a270095dd /scala/jssc/src/main/scala/com/github/jodersky/ace/jssc | |
parent | 20a2350f9b33a797763413509781d0686fc38fe5 (diff) | |
download | ace-793983ca31eb05fce655ed5877b6f3faa4577acd.tar.gz ace-793983ca31eb05fce655ed5877b6f3faa4577acd.tar.bz2 ace-793983ca31eb05fce655ed5877b6f3faa4577acd.zip |
restructure scala implementation
Diffstat (limited to 'scala/jssc/src/main/scala/com/github/jodersky/ace/jssc')
-rw-r--r-- | scala/jssc/src/main/scala/com/github/jodersky/ace/jssc/JSSCSerialProvider.scala | 48 | ||||
-rw-r--r-- | scala/jssc/src/main/scala/com/github/jodersky/ace/jssc/package.scala | 7 |
2 files changed, 55 insertions, 0 deletions
diff --git a/scala/jssc/src/main/scala/com/github/jodersky/ace/jssc/JSSCSerialProvider.scala b/scala/jssc/src/main/scala/com/github/jodersky/ace/jssc/JSSCSerialProvider.scala new file mode 100644 index 0000000..3bfd650 --- /dev/null +++ b/scala/jssc/src/main/scala/com/github/jodersky/ace/jssc/JSSCSerialProvider.scala @@ -0,0 +1,48 @@ +package com.github.jodersky.ace.jssc + +import scala.concurrent._ +import scala.concurrent.ExecutionContext.Implicits.global +import com.github.jodersky.ace.serial._ +import com.github.jodersky.ace.serial.Serial +import jssc.SerialPortEvent +import jssc.SerialPort +import jssc.SerialPortEventListener +import java.io.IOException + +object JSSCSerialProvider extends SerialProvider { + + def open(port: String, baudRate: Int) = new Serial { + val serialPort = new SerialPort(port); + serialPort.openPort() + serialPort.setParams( + baudRate, + SerialPort.DATABITS_8, + SerialPort.STOPBITS_1, + SerialPort.PARITY_NONE) + + val listener = new SerialPortEventListener { + override def serialEvent(event: SerialPortEvent) = { + if (event.isRXCHAR()) { + val bytes = serialPort.readBytes + if (bytes != null) notifyHigher(bytes.map(_ & 0xff)) + } + } + } + + def send(data: Seq[Int]) = future { + serialPort.writeBytes(data.toArray.map(_.toByte)) + } map { success => + if (success) data + else throw new IOException("Could not write to serial port.") + } + + def close() = serialPort.closePort() + + def begin() = { + val mask = SerialPort.MASK_RXCHAR + SerialPort.MASK_CTS + SerialPort.MASK_DSR + serialPort.setEventsMask(mask) + serialPort.addEventListener(listener) + } + } + +}
\ No newline at end of file diff --git a/scala/jssc/src/main/scala/com/github/jodersky/ace/jssc/package.scala b/scala/jssc/src/main/scala/com/github/jodersky/ace/jssc/package.scala new file mode 100644 index 0000000..891e588 --- /dev/null +++ b/scala/jssc/src/main/scala/com/github/jodersky/ace/jssc/package.scala @@ -0,0 +1,7 @@ +package com.github.jodersky.ace + +package object jssc { + + implicit val provider = JSSCSerialProvider + +}
\ No newline at end of file |