aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakob Odersky <jodersky@gmail.com>2013-03-02 12:06:03 +0100
committerJakob Odersky <jodersky@gmail.com>2013-03-02 12:06:03 +0100
commit494b80da610fe2b4cb1790ae237437a17ac6ef62 (patch)
treed36b5ed810851198a21de640128631c9846a4835
parent5b00baec28e8e7976636df86f30bc3a6412f8203 (diff)
downloadace-494b80da610fe2b4cb1790ae237437a17ac6ef62.tar.gz
ace-494b80da610fe2b4cb1790ae237437a17ac6ef62.tar.bz2
ace-494b80da610fe2b4cb1790ae237437a17ac6ef62.zip
simplify scala implementation
-rw-r--r--scala/ace/src/main/scala/com/github/jodersky/ace/Arq.scala (renamed from scala/ace/src/main/scala/com/github/jodersky/ace/protocol/Arq.scala)2
-rw-r--r--scala/ace/src/main/scala/com/github/jodersky/ace/Framer.scala (renamed from scala/ace/src/main/scala/com/github/jodersky/ace/protocol/Framer.scala)2
-rw-r--r--scala/ace/src/main/scala/com/github/jodersky/ace/PhysicalLayer.scala5
-rw-r--r--scala/ace/src/main/scala/com/github/jodersky/ace/ReactiveLayer.scala (renamed from scala/ace/src/main/scala/com/github/jodersky/ace/protocol/ReactiveLayer.scala)2
-rw-r--r--scala/ace/src/main/scala/com/github/jodersky/ace/SimpleActionLayer.scala (renamed from scala/ace/src/main/scala/com/github/jodersky/ace/protocol/SimpleActionLayer.scala)2
-rw-r--r--scala/ace/src/main/scala/com/github/jodersky/ace/serial/Serial.scala15
-rw-r--r--scala/ace/src/main/scala/com/github/jodersky/ace/serial/SerialProvider.scala7
-rw-r--r--scala/jssc/src/main/scala/com/github/jodersky/ace/Main.scala18
-rw-r--r--scala/jssc/src/main/scala/com/github/jodersky/ace/jssc/JSSCSerialProvider.scala48
-rw-r--r--scala/jssc/src/main/scala/com/github/jodersky/ace/jssc/Serial.scala47
-rw-r--r--scala/jssc/src/main/scala/com/github/jodersky/ace/jssc/package.scala7
11 files changed, 65 insertions, 90 deletions
diff --git a/scala/ace/src/main/scala/com/github/jodersky/ace/protocol/Arq.scala b/scala/ace/src/main/scala/com/github/jodersky/ace/Arq.scala
index 4a4ed8d..f7c4376 100644
--- a/scala/ace/src/main/scala/com/github/jodersky/ace/protocol/Arq.scala
+++ b/scala/ace/src/main/scala/com/github/jodersky/ace/Arq.scala
@@ -1,4 +1,4 @@
-package com.github.jodersky.ace.protocol
+package com.github.jodersky.ace
import scala.concurrent._
import scala.concurrent.ExecutionContext.Implicits.global
diff --git a/scala/ace/src/main/scala/com/github/jodersky/ace/protocol/Framer.scala b/scala/ace/src/main/scala/com/github/jodersky/ace/Framer.scala
index 5558db3..8546c48 100644
--- a/scala/ace/src/main/scala/com/github/jodersky/ace/protocol/Framer.scala
+++ b/scala/ace/src/main/scala/com/github/jodersky/ace/Framer.scala
@@ -1,4 +1,4 @@
-package com.github.jodersky.ace.protocol
+package com.github.jodersky.ace
import scala.collection.mutable.ArrayBuffer
import scala.concurrent.Future
diff --git a/scala/ace/src/main/scala/com/github/jodersky/ace/PhysicalLayer.scala b/scala/ace/src/main/scala/com/github/jodersky/ace/PhysicalLayer.scala
new file mode 100644
index 0000000..61ebd88
--- /dev/null
+++ b/scala/ace/src/main/scala/com/github/jodersky/ace/PhysicalLayer.scala
@@ -0,0 +1,5 @@
+package com.github.jodersky.ace
+
+trait PhysicalLayer extends ReactiveLayer[Nothing, Seq[Int]] {
+ protected def receive(nothing: Nothing) = throw new UnsupportedOperationException("A receive function cannot be called on the lowest layer.")
+} \ No newline at end of file
diff --git a/scala/ace/src/main/scala/com/github/jodersky/ace/protocol/ReactiveLayer.scala b/scala/ace/src/main/scala/com/github/jodersky/ace/ReactiveLayer.scala
index c9531c0..9d426d3 100644
--- a/scala/ace/src/main/scala/com/github/jodersky/ace/protocol/ReactiveLayer.scala
+++ b/scala/ace/src/main/scala/com/github/jodersky/ace/ReactiveLayer.scala
@@ -1,4 +1,4 @@
-package com.github.jodersky.ace.protocol
+package com.github.jodersky.ace
import scala.concurrent.Future
diff --git a/scala/ace/src/main/scala/com/github/jodersky/ace/protocol/SimpleActionLayer.scala b/scala/ace/src/main/scala/com/github/jodersky/ace/SimpleActionLayer.scala
index 81e39cb..4026c08 100644
--- a/scala/ace/src/main/scala/com/github/jodersky/ace/protocol/SimpleActionLayer.scala
+++ b/scala/ace/src/main/scala/com/github/jodersky/ace/SimpleActionLayer.scala
@@ -1,4 +1,4 @@
-package com.github.jodersky.ace.protocol
+package com.github.jodersky.ace
class SimpleActionLayer[A](action: A => Unit) extends ReactiveLayer[A, A] {
protected def receive(data: A) = action(data)
diff --git a/scala/ace/src/main/scala/com/github/jodersky/ace/serial/Serial.scala b/scala/ace/src/main/scala/com/github/jodersky/ace/serial/Serial.scala
deleted file mode 100644
index b688ec8..0000000
--- a/scala/ace/src/main/scala/com/github/jodersky/ace/serial/Serial.scala
+++ /dev/null
@@ -1,15 +0,0 @@
-package com.github.jodersky.ace.serial
-
-import com.github.jodersky.ace.protocol.ReactiveLayer
-
-trait Serial extends ReactiveLayer[Nothing, Seq[Int]] {
- protected def receive(nothing: Nothing) = throw new UnsupportedOperationException("A receive function cannot be called on the lowest layer.")
-
- def begin(): Unit
- def close(): Unit
-
-}
-
-object Serial {
- def open(port: String, baudRate: Int)(implicit provider: SerialProvider) = provider.open(port, baudRate)
-} \ No newline at end of file
diff --git a/scala/ace/src/main/scala/com/github/jodersky/ace/serial/SerialProvider.scala b/scala/ace/src/main/scala/com/github/jodersky/ace/serial/SerialProvider.scala
deleted file mode 100644
index 9c7b95c..0000000
--- a/scala/ace/src/main/scala/com/github/jodersky/ace/serial/SerialProvider.scala
+++ /dev/null
@@ -1,7 +0,0 @@
-package com.github.jodersky.ace.serial
-
-trait SerialProvider {
-
- def open(port: String, baudRate: Int): Serial
-
-} \ No newline at end of file
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