From 494b80da610fe2b4cb1790ae237437a17ac6ef62 Mon Sep 17 00:00:00 2001 From: Jakob Odersky Date: Sat, 2 Mar 2013 12:06:03 +0100 Subject: simplify scala implementation --- .../main/scala/com/github/jodersky/ace/Main.scala | 18 ++++---- .../jodersky/ace/jssc/JSSCSerialProvider.scala | 48 ---------------------- .../com/github/jodersky/ace/jssc/Serial.scala | 47 +++++++++++++++++++++ .../com/github/jodersky/ace/jssc/package.scala | 7 ---- 4 files changed, 56 insertions(+), 64 deletions(-) delete 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/Serial.scala delete mode 100644 scala/jssc/src/main/scala/com/github/jodersky/ace/jssc/package.scala (limited to 'scala/jssc') 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 index 55c23b9..1a673ec 100644 --- a/scala/jssc/src/main/scala/com/github/jodersky/ace/Main.scala +++ b/scala/jssc/src/main/scala/com/github/jodersky/ace/Main.scala @@ -1,29 +1,29 @@ package com.github.jodersky.ace -import com.github.jodersky.ace.protocol._ - +import com.github.jodersky.ace._ +import com.github.jodersky.ace.jssc._ import scala.concurrent.ExecutionContext.Implicits.global +import _root_.jssc.SerialPort + object Main { + + def main(args: Array[String]): Unit = { - import com.github.jodersky.ace.jssc._ - - val s = serial.Serial.open("/dev/ttyACM0", 9600) + val serial = new Serial("/dev/ttyACM0") 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() + serial connect framer connect arq connect app + serial.begin() while (true) { app.send(Console.readLine.getBytes().map(_.toInt)).map(sent => Console.println("> " + sent)) } - - () } 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 deleted file mode 100644 index 3bfd650..0000000 --- a/scala/jssc/src/main/scala/com/github/jodersky/ace/jssc/JSSCSerialProvider.scala +++ /dev/null @@ -1,48 +0,0 @@ -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/Serial.scala b/scala/jssc/src/main/scala/com/github/jodersky/ace/jssc/Serial.scala new file mode 100644 index 0000000..508a79e --- /dev/null +++ b/scala/jssc/src/main/scala/com/github/jodersky/ace/jssc/Serial.scala @@ -0,0 +1,47 @@ +package com.github.jodersky.ace.jssc + +import com.github.jodersky.ace.PhysicalLayer +import jssc.SerialPortEvent +import jssc.SerialPort +import jssc.SerialPortEventListener +import scala.concurrent._ +import scala.concurrent.ExecutionContext.Implicits.global +import java.io.IOException + +class Serial( + portName: String, + baudRate: Int = 9600, + dataBits: Int = SerialPort.DATABITS_8, + stopBits: Int = SerialPort.STOPBITS_1, + parity: Int = SerialPort.PARITY_NONE) extends PhysicalLayer { + + private val port = new SerialPort(portName) + + private val listener = new SerialPortEventListener { + override def serialEvent(event: SerialPortEvent) = { + if (event.isRXCHAR()) { + val bytes = port.readBytes + if (bytes != null) notifyHigher(bytes.map(_ & 0xff)) + } + } + } + + def send(data: Seq[Int]) = future { + port.writeBytes(data.toArray.map(_.toByte)) + } map { success => + if (success) data + else throw new IOException("Could not write to serial port.") + } + + def begin() { + val mask = SerialPort.MASK_RXCHAR + SerialPort.MASK_CTS + SerialPort.MASK_DSR + + port.openPort() + port.setParams(baudRate, dataBits, stopBits, parity) + port.setEventsMask(mask) + port.addEventListener(listener) + } + + def close() = port.closePort() + +} \ 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 deleted file mode 100644 index 891e588..0000000 --- a/scala/jssc/src/main/scala/com/github/jodersky/ace/jssc/package.scala +++ /dev/null @@ -1,7 +0,0 @@ -package com.github.jodersky.ace - -package object jssc { - - implicit val provider = JSSCSerialProvider - -} \ No newline at end of file -- cgit v1.2.3