diff options
author | Jakob Odersky <jodersky@gmail.com> | 2014-12-18 11:57:54 +0100 |
---|---|---|
committer | Jakob Odersky <jodersky@gmail.com> | 2014-12-18 12:01:32 +0100 |
commit | 82ae4b18a62e949e7280afbaa5dde90d613c4ce6 (patch) | |
tree | ea5dc7eebaa055a493129bf76e0f1361b3dd5552 /vfd-uav/src | |
parent | 5f16695c3b1c13840d0c4dc6a1dfb4adbee4e836 (diff) | |
download | mavigator-82ae4b18a62e949e7280afbaa5dde90d613c4ce6.tar.gz mavigator-82ae4b18a62e949e7280afbaa5dde90d613c4ce6.tar.bz2 mavigator-82ae4b18a62e949e7280afbaa5dde90d613c4ce6.zip |
cleanup and tweaks
Diffstat (limited to 'vfd-uav/src')
-rw-r--r-- | vfd-uav/src/main/scala/vfd/uav/MockConnection.scala | 37 | ||||
-rw-r--r-- | vfd-uav/src/main/scala/vfd/uav/SerialConnection.scala | 23 |
2 files changed, 33 insertions, 27 deletions
diff --git a/vfd-uav/src/main/scala/vfd/uav/MockConnection.scala b/vfd-uav/src/main/scala/vfd/uav/MockConnection.scala index d427aef..1217291 100644 --- a/vfd-uav/src/main/scala/vfd/uav/MockConnection.scala +++ b/vfd-uav/src/main/scala/vfd/uav/MockConnection.scala @@ -15,11 +15,11 @@ class MockConnection extends Actor with ActorLogging with Connection { import Connection._ import context._ - val messageInterval = FiniteDuration(500, MILLISECONDS) + val messageInterval = FiniteDuration(250, MILLISECONDS) override def preStart() = { context.system.scheduler.schedule(messageInterval, messageInterval) { - val data = MockPackets.random() + val data = MockPackets.random this.log.debug("sending mock flight data: " + data.mkString("(", ",", ")")) sendAll(Received(ByteString(data))) @@ -42,26 +42,31 @@ object MockPackets { Packet(5, 42, 1, id, payload).toSeq.toArray } } - - def random(): Array[Byte] = Random.nextInt(4) match { - case 0 => randomInvalid() - case 1 => Heartbeat(0).bytes - case 2 => Motor(Random.nextInt(101).toByte, Random.nextInt(101).toByte, Random.nextInt(101).toByte, Random.nextInt(101).toByte).bytes - case 3 => Attitude((Random.nextInt(160) - 80).toShort, (Random.nextInt(160) - 80).toShort.toShort, Random.nextInt(360).toShort).bytes - } - - def randomInvalid() = Random.nextInt(2) match { - case 0 => invalidCrc - case 1 => invalidOverflow - } - + + def messages = Heartbeat(0) :: + Motor(Random.nextInt(101).toByte, Random.nextInt(101).toByte, Random.nextInt(101).toByte, Random.nextInt(101).toByte) :: + Attitude((Random.nextInt(160) - 80).toShort, (Random.nextInt(160) - 80).toShort.toShort, Random.nextInt(360).toShort) :: + Power(Random.nextInt(12000).toShort) :: Nil + + def valid: Array[Byte] = messages.flatMap(_.bytes).toArray + val invalidCrc = Array(254, 1, 123, 13, 13).map(_.toByte) val invalidOverflow = { - val data = Array.fill[Byte](1006)(42) + val data = Array.fill[Byte](Packet.MaxPayloadLength + 10)(42) data(0) = -2 data(1) = 2 data(1) = -1 data } + + def randomInvalid = Random.nextInt(2) match { + case 0 => invalidCrc + case 1 => invalidOverflow + } + def random: Array[Byte] = if (Random.nextInt(5) == 0) { + randomInvalid + } else { + valid + } }
\ No newline at end of file diff --git a/vfd-uav/src/main/scala/vfd/uav/SerialConnection.scala b/vfd-uav/src/main/scala/vfd/uav/SerialConnection.scala index 857169e..4a1e62f 100644 --- a/vfd-uav/src/main/scala/vfd/uav/SerialConnection.scala +++ b/vfd-uav/src/main/scala/vfd/uav/SerialConnection.scala @@ -4,7 +4,9 @@ import java.util.concurrent.TimeUnit.MILLISECONDS import scala.concurrent.duration.FiniteDuration +import org.mavlink.Packet import org.mavlink.Parser +import org.mavlink.messages.Heartbeat import org.mavlink.messages.Message import com.github.jodersky.flow.Parity @@ -23,13 +25,15 @@ import akka.util.ByteString class SerialConnection(id: Byte, heartbeat: Option[FiniteDuration], port: String, settings: SerialSettings) extends Actor with ActorLogging with Connection { import context._ - val Heartbeat = ByteString( - Array(-2, 9, -121, 20, -56, 0, 0, 0, 0, 0, 2, 0, 0, 3, 3, -112, 76).map(_.toByte)) + lazy val hb = { + val (id, payload) = Message.pack(Heartbeat(0)) + Packet(5, 42, 1, id, payload).toSeq.toArray + } override def preStart() = { heartbeat foreach { interval => context.system.scheduler.schedule(interval, interval) { - self ! Connection.Send(Heartbeat) + self ! Connection.Send(ByteString(hb)) } } } @@ -58,7 +62,7 @@ class SerialConnection(id: Byte, heartbeat: Option[FiniteDuration], port: String context become opened(sender) case Connection.Send(_) => () // ignore - /* + /* * During opening, any outgoing messages are discarded. * By using some kind of message stashing, maybe messages could be treated * once the port has been opened. However, in such a case failure also needs @@ -68,14 +72,11 @@ class SerialConnection(id: Byte, heartbeat: Option[FiniteDuration], port: String */ } - - val last = new collection.mutable.Queue[Int] - - val parser = new Parser(pckt => + + val parser = new Parser(pckt => { println("Received message: " + Message.unpack(pckt.messageId, pckt.payload)) - ) - - + }) + def _opened(operator: ActorRef): Receive = { case Terminated(`operator`) => |