From 793983ca31eb05fce655ed5877b6f3faa4577acd Mon Sep 17 00:00:00 2001 From: Jakob Odersky Date: Wed, 27 Feb 2013 15:53:33 +0100 Subject: restructure scala implementation --- .../main/scala/com/github/jodersky/ace/Main.scala | 30 ++++++++++++++ .../jodersky/ace/jssc/JSSCSerialProvider.scala | 48 ++++++++++++++++++++++ .../com/github/jodersky/ace/jssc/package.scala | 7 ++++ 3 files changed, 85 insertions(+) create mode 100644 scala/jssc/src/main/scala/com/github/jodersky/ace/Main.scala create mode 100644 scala/jssc/src/main/scala/com/github/jodersky/ace/jssc/JSSCSerialProvider.scala create mode 100644 scala/jssc/src/main/scala/com/github/jodersky/ace/jssc/package.scala (limited to 'scala/jssc/src/main') diff --git a/scala/jssc/src/main/scala/com/github/jodersky/ace/Main.scala b/scala/jssc/src/main/scala/com/github/jodersky/ace/Main.scala new file mode 100644 index 0000000..55c23b9 --- /dev/null +++ b/scala/jssc/src/main/scala/com/github/jodersky/ace/Main.scala @@ -0,0 +1,30 @@ +package com.github.jodersky.ace + +import com.github.jodersky.ace.protocol._ + +import scala.concurrent.ExecutionContext.Implicits.global + +object Main { + + def main(args: Array[String]): Unit = { + import com.github.jodersky.ace.jssc._ + + val s = serial.Serial.open("/dev/ttyACM0", 9600) + val framer = new Framer + val arq = new Arq(200) + val app = new SimpleActionLayer((s: Seq[Int]) => println(s)) + + s connect framer connect arq connect app + s.begin() + + while (true) { + app.send(Console.readLine.getBytes().map(_.toInt)).map(sent => Console.println("> " + sent)) + + } + + + () + } + + +} \ No newline at end of file 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 -- cgit v1.2.3