aboutsummaryrefslogtreecommitdiff
path: root/scala/src/main/scala/com/github/jodersky/ace/SafeSerial.scala
diff options
context:
space:
mode:
Diffstat (limited to 'scala/src/main/scala/com/github/jodersky/ace/SafeSerial.scala')
-rw-r--r--scala/src/main/scala/com/github/jodersky/ace/SafeSerial.scala35
1 files changed, 35 insertions, 0 deletions
diff --git a/scala/src/main/scala/com/github/jodersky/ace/SafeSerial.scala b/scala/src/main/scala/com/github/jodersky/ace/SafeSerial.scala
new file mode 100644
index 0000000..d75d6f5
--- /dev/null
+++ b/scala/src/main/scala/com/github/jodersky/ace/SafeSerial.scala
@@ -0,0 +1,35 @@
+package com.github.jodersky.ace
+
+import com.github.jodersky.ace.protocol._
+import jssc.SerialPort
+import scala.concurrent.ExecutionContext.Implicits.global
+import scala.util.Try
+
+class SafeSerial(port: SerialPort) { self =>
+ val physical = new PhysicalLayer(port)
+ val link = new LinkLayer
+ val transport = new TransportLayer
+
+ val application = new ReactiveLayer[Message, String] {
+ def receive(message: Message) = Console.println(message.data.map(_.toChar).mkString(""))
+ def write(s: String) = writeToLower(Message(s.map(_.toChar.toInt))).map(x => s)
+ }
+
+ def send(s: String) = application.write(s)
+ def close() = Try(port.closePort())
+
+ physical connect link connect transport connect application
+ physical.begin()
+}
+
+object SafeSerial {
+ def open(port: String, rate: Int) = Try {
+ val serialPort = new SerialPort(port);
+ serialPort.openPort()
+ serialPort.setParams(rate,
+ SerialPort.DATABITS_8,
+ SerialPort.STOPBITS_1,
+ SerialPort.PARITY_NONE)
+ serialPort
+ } map (port => new SafeSerial(port))
+} \ No newline at end of file