diff options
author | Jakob Odersky <jodersky@gmail.com> | 2014-11-07 19:19:44 +0100 |
---|---|---|
committer | Jakob Odersky <jodersky@gmail.com> | 2014-11-07 19:19:44 +0100 |
commit | 1c733a1c18ab154e477c42818c48dd2c74866b13 (patch) | |
tree | 8dbb6687ed2a4f0c9206de72d8fb9d4919245af2 /vfd-uav/src | |
parent | 2915f8bf09b4d4db6f5e1b574ba988a0fc0fb90a (diff) | |
download | mavigator-1c733a1c18ab154e477c42818c48dd2c74866b13.tar.gz mavigator-1c733a1c18ab154e477c42818c48dd2c74866b13.tar.bz2 mavigator-1c733a1c18ab154e477c42818c48dd2c74866b13.zip |
cleanup
Diffstat (limited to 'vfd-uav/src')
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 |