aboutsummaryrefslogtreecommitdiff
path: root/vfd-uav
diff options
context:
space:
mode:
authorJakob Odersky <jodersky@gmail.com>2014-12-18 11:57:54 +0100
committerJakob Odersky <jodersky@gmail.com>2014-12-18 12:01:32 +0100
commit82ae4b18a62e949e7280afbaa5dde90d613c4ce6 (patch)
treeea5dc7eebaa055a493129bf76e0f1361b3dd5552 /vfd-uav
parent5f16695c3b1c13840d0c4dc6a1dfb4adbee4e836 (diff)
downloadmavigator-82ae4b18a62e949e7280afbaa5dde90d613c4ce6.tar.gz
mavigator-82ae4b18a62e949e7280afbaa5dde90d613c4ce6.tar.bz2
mavigator-82ae4b18a62e949e7280afbaa5dde90d613c4ce6.zip
cleanup and tweaks
Diffstat (limited to 'vfd-uav')
-rw-r--r--vfd-uav/src/main/scala/vfd/uav/MockConnection.scala37
-rw-r--r--vfd-uav/src/main/scala/vfd/uav/SerialConnection.scala23
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`) =>