aboutsummaryrefslogtreecommitdiff
path: root/vfd-uav/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'vfd-uav/src/main')
-rw-r--r--vfd-uav/src/main/scala/org/mavlink/BufferPayloadReader.scala36
-rw-r--r--vfd-uav/src/main/scala/org/mavlink/package.scala7
-rw-r--r--vfd-uav/src/main/scala/vfd/uav/DummyConnection.scala39
-rw-r--r--vfd-uav/src/main/scala/vfd/uav/MockConnection.scala57
4 files changed, 100 insertions, 39 deletions
diff --git a/vfd-uav/src/main/scala/org/mavlink/BufferPayloadReader.scala b/vfd-uav/src/main/scala/org/mavlink/BufferPayloadReader.scala
new file mode 100644
index 0000000..c552a96
--- /dev/null
+++ b/vfd-uav/src/main/scala/org/mavlink/BufferPayloadReader.scala
@@ -0,0 +1,36 @@
+package org.mavlink
+
+import java.nio.ByteBuffer
+import java.nio.ByteOrder
+
+class BufferedPayloadReader(payload: Array[Byte]) extends PayloadReader {
+ private val buffer = ByteBuffer.wrap(payload)
+
+ //mavlink uses little endian
+ buffer.order(ByteOrder.LITTLE_ENDIAN)
+
+ def nextInt8 = buffer.get()
+ def nextInt16 = buffer.getShort()
+ def nextInt32 = buffer.getInt()
+ def nextInt64 = buffer.getLong()
+ def nextFloat = buffer.getFloat()
+ def nextDouble = buffer.getDouble()
+ def nextChar = buffer.getChar()
+
+}
+
+class BufferedPayloadBuilder(payload: Array[Byte]) extends PayloadBuilder {
+ private val buffer = ByteBuffer.wrap(payload)
+
+ //mavlink uses little endian
+ buffer.order(ByteOrder.LITTLE_ENDIAN)
+
+ def writeInt8(x: Byte) = buffer.put(x)
+ def writeInt16(x: Short) = buffer.putShort(x)
+ def writeInt32(x: Int) = buffer.putInt(x)
+ def writeInt64(x: Long) = buffer.putLong(x)
+ def writeFloat(x: Float) = buffer.putFloat(x)
+ def writeDouble(x: Double) = buffer.putDouble(x)
+ def writeChar(x: Char) = buffer.putChar(x)
+
+} \ No newline at end of file
diff --git a/vfd-uav/src/main/scala/org/mavlink/package.scala b/vfd-uav/src/main/scala/org/mavlink/package.scala
new file mode 100644
index 0000000..080648d
--- /dev/null
+++ b/vfd-uav/src/main/scala/org/mavlink/package.scala
@@ -0,0 +1,7 @@
+package org
+
+package object mavlink {
+
+
+
+} \ No newline at end of file
diff --git a/vfd-uav/src/main/scala/vfd/uav/DummyConnection.scala b/vfd-uav/src/main/scala/vfd/uav/DummyConnection.scala
deleted file mode 100644
index 7cf7bb1..0000000
--- a/vfd-uav/src/main/scala/vfd/uav/DummyConnection.scala
+++ /dev/null
@@ -1,39 +0,0 @@
-package vfd.uav
-
-import java.util.concurrent.TimeUnit.MILLISECONDS
-
-import scala.concurrent.duration.FiniteDuration
-
-import akka.actor.Actor
-import akka.actor.Props
-import akka.actor.Terminated
-import akka.actor.actorRef2Scala
-
-class DummyConnection extends Actor with Connection {
- import context._
-
- var time = 0.0
- val messageInterval = FiniteDuration(50, MILLISECONDS)
-
- def flightData(time: Double) = {
- new Array[Byte](10)
- }
-
- override def preStart() = {
- context.system.scheduler.schedule(messageInterval, messageInterval) {
- time += messageInterval.toMillis
- clients foreach (_ ! flightData(time))
- }
- }
-
- def receive = {
- case Connection.Register => register(sender)
- case Terminated(client) => unregister(client)
- }
-
-}
-
-object DummyConnection {
- def apply = Props(classOf[DummyConnection])
-}
-
diff --git a/vfd-uav/src/main/scala/vfd/uav/MockConnection.scala b/vfd-uav/src/main/scala/vfd/uav/MockConnection.scala
new file mode 100644
index 0000000..94a14db
--- /dev/null
+++ b/vfd-uav/src/main/scala/vfd/uav/MockConnection.scala
@@ -0,0 +1,57 @@
+package vfd.uav
+
+import java.util.concurrent.TimeUnit.MILLISECONDS
+import scala.concurrent.duration.FiniteDuration
+import akka.actor.Actor
+import akka.actor.Props
+import akka.actor.Terminated
+import akka.actor.actorRef2Scala
+import akka.actor.ActorLogging
+import scala.util.Random
+
+class MockConnection extends Actor with ActorLogging with Connection {
+ import Connection._
+ import context._
+
+ val messageInterval = FiniteDuration(500, MILLISECONDS)
+
+ override def preStart() = {
+ context.system.scheduler.schedule(messageInterval, messageInterval) {
+ val data = MockPackets.random()
+
+ this.log.debug("sending mock flight data: " + data.mkString("(", ",", ")"))
+ clients foreach (_ ! Received(data))
+ }
+ }
+
+ def receive = {
+ case Connection.Register => register(sender)
+ case Terminated(client) => unregister(client)
+ }
+
+}
+
+object MockConnection {
+ def apply = Props(classOf[MockConnection])
+}
+
+object MockPackets {
+
+ def random() = {
+ Random.nextInt(2) match {
+ case 0 => invalidCrc
+ case 1 => invalidOverflow
+ }
+
+ }
+
+ val invalidCrc = Array(254,1,123,13,13).map(_.toByte)
+ val invalidOverflow = {
+ val data = Array.fill[Byte](1006)(42)
+ data(0) = -2
+ data(1) = 2
+ data(1) = -1
+ data
+ }
+
+} \ No newline at end of file