diff options
author | Jakob Odersky <jodersky@gmail.com> | 2015-03-27 17:09:23 +0100 |
---|---|---|
committer | Jakob Odersky <jodersky@gmail.com> | 2015-03-27 17:09:23 +0100 |
commit | c18222560943f958cfb0e8498232f732ca4d6a96 (patch) | |
tree | 63b490003e73c62b3d0e23a3745b07ac386baec2 /vfd-uav/src/main/scala/vfd/uav/MockConnection.scala | |
parent | bd174539d8bb2921bef94cccd994a61e334a3dd7 (diff) | |
parent | fa20b967896e3332078b6e2a4b3ca7e98a0b43f0 (diff) | |
download | mavigator-c18222560943f958cfb0e8498232f732ca4d6a96.tar.gz mavigator-c18222560943f958cfb0e8498232f732ca4d6a96.tar.bz2 mavigator-c18222560943f958cfb0e8498232f732ca4d6a96.zip |
Merge branch 'wip/mavlink-common'
Conflicts:
vfd-dashboard/src/main/scala/vfd/dashboard/ui/panels/Communication.scala
vfd-dashboard/src/main/scala/vfd/dashboard/ui/panels/Primary.scala
Diffstat (limited to 'vfd-uav/src/main/scala/vfd/uav/MockConnection.scala')
-rw-r--r-- | vfd-uav/src/main/scala/vfd/uav/MockConnection.scala | 69 |
1 files changed, 32 insertions, 37 deletions
diff --git a/vfd-uav/src/main/scala/vfd/uav/MockConnection.scala b/vfd-uav/src/main/scala/vfd/uav/MockConnection.scala index 801c4ac..1051607 100644 --- a/vfd-uav/src/main/scala/vfd/uav/MockConnection.scala +++ b/vfd-uav/src/main/scala/vfd/uav/MockConnection.scala @@ -3,30 +3,49 @@ package vfd.uav import java.util.concurrent.TimeUnit.MILLISECONDS import scala.concurrent.duration.FiniteDuration import scala.util.Random +import org.mavlink.Packet +import org.mavlink.enums.MavAutopilot +import org.mavlink.enums.MavModeFlag +import org.mavlink.enums.MavState +import org.mavlink.enums.MavType +import org.mavlink.messages.Heartbeat import Connection.Received import akka.actor.Actor import akka.actor.ActorLogging import akka.actor.Props import akka.util.ByteString -import org.mavlink.messages._ -import org.mavlink.Packet +import scala.concurrent.duration._ +import org.mavlink.messages.Message +import vfd.uav.mock.RandomFlightPlan class MockConnection(localSystemId: Byte, localComponentId: Byte, remoteSystemId: Byte) extends Actor with ActorLogging with Connection with MavlinkUtil { import Connection._ - import context._ - + import context._ + override val systemId = remoteSystemId override val componentId = remoteSystemId - - val MessageInterval = FiniteDuration(100, MILLISECONDS) - def randomData: ByteString = Random.nextInt(MockPackets.Messages + 1) match { - case 0 => ByteString(MockPackets.invalid) - case i => assemble(MockPackets.message(i - 1)) - } + val plan = new RandomFlightPlan - override def preStart() = context.system.scheduler.schedule(MessageInterval, MessageInterval) { - sendAll(Received(randomData)) + def scheduleMessage(delay: FiniteDuration)(fct: => Message) = system.scheduler.schedule(delay, delay){ + sendAll(Received(assemble(fct))) + } + def scheduleBytes(delay: FiniteDuration)(fct: => Array[Byte]) = system.scheduler.schedule(delay, delay){ + sendAll(Received(ByteString(fct))) + } + + override def preStart() = { + //increment state + system.scheduler.schedule(0.01.seconds, 0.01.seconds){plan.tick(0.01)} + + //send messages + scheduleMessage(0.1.seconds)(plan.position) + scheduleMessage(0.1.seconds)(plan.attitude) + scheduleMessage(2.seconds)(plan.heartbeat) + + //simulate noisy line + scheduleBytes(0.3.seconds)(MockPackets.invalidCrc) + scheduleBytes(1.5.seconds)(MockPackets.invalidOverflow) } def receive = registration @@ -38,36 +57,12 @@ object MockConnection { } object MockPackets { - private val r = new Random - private implicit class RichRandom(val r: Random) extends AnyVal { - def nextByte(): Byte = r.nextInt().toByte - def nextByte(max: Int): Byte = r.nextInt(max).toByte - } - - def heartbeat = Heartbeat(0) - def motor = Motor(r.nextByte(101), r.nextByte(101), r.nextByte(101), r.nextByte(101)) - def attitude = Attitude((r.nextInt(160) - 80).toShort, (r.nextInt(160) - 80).toShort, r.nextInt(360).toShort) - def power = Power(Random.nextInt(12000).toShort) - - val Messages = 4 - def message(i: Int) = i match { - case 0 => heartbeat - case 1 => motor - case 2 => attitude - case 3 => power - } - val invalidCrc = Array(254, 1, 123, 13, 13).map(_.toByte) val invalidOverflow = { - val data = Array.fill[Byte](Packet.MaxPayloadLength + 10)(42) + val data = Array.fill[Byte](Packet.MaxPayloadLength + 100)(42) data(0) = -2 data(1) = 2 data(1) = -1 data } - - def invalid = r.nextInt(2) match { - case 0 => invalidCrc - case 1 => invalidOverflow - } }
\ No newline at end of file |