aboutsummaryrefslogtreecommitdiff
path: root/project/mavlink-library/src/main/twirl/org/mavlink/Packet.scala.txt
diff options
context:
space:
mode:
Diffstat (limited to 'project/mavlink-library/src/main/twirl/org/mavlink/Packet.scala.txt')
-rw-r--r--project/mavlink-library/src/main/twirl/org/mavlink/Packet.scala.txt59
1 files changed, 59 insertions, 0 deletions
diff --git a/project/mavlink-library/src/main/twirl/org/mavlink/Packet.scala.txt b/project/mavlink-library/src/main/twirl/org/mavlink/Packet.scala.txt
new file mode 100644
index 0000000..6f96b40
--- /dev/null
+++ b/project/mavlink-library/src/main/twirl/org/mavlink/Packet.scala.txt
@@ -0,0 +1,59 @@
+@(messages: Seq[parsing.Message])
+
+@messageCrcs() = @{
+ for (i <- 0 to 255) yield {
+ val crc = messages.find(_.id == i).map(_.checksum).getOrElse(0)
+ crc.toString
+ }
+}
+
+package org.mavlink
+
+case class Packet(
+ seq: Byte,
+ systemId: Byte,
+ componentId: Byte,
+ messageId: Byte,
+ payload: Seq[Byte]
+) {
+
+ lazy val crc = {
+ var c = new Crc()
+ c = c.accumulate(payload.length.toByte)
+ c = c.accumulate(seq)
+ c = c.accumulate(systemId)
+ c = c.accumulate(componentId)
+ c = c.accumulate(messageId)
+ for (p <- payload) {
+ c = c.accumulate(p)
+ }
+ c = c.accumulate(Packet.extraCrc(messageId))
+ c
+ }
+
+ def toSeq: Seq[Byte] = Seq(
+ Packet.Stx,
+ payload.length.toByte,
+ seq,
+ systemId,
+ componentId,
+ messageId
+ ) ++ payload ++ Seq(
+ crc.lsb,
+ crc.msb
+ )
+
+}
+
+object Packet {
+
+ final val Stx: Byte = (0xfe).toByte
+ final val MaxPayloadLength: Int = @messages.map(_.fields.map(_.tpe.width).sum).max
+
+ final val ExtraCrcs: Seq[Byte] = @messageCrcs().mkString("Array[Byte](", ", ", ")")
+
+ def extraCrc(id: Byte) = ExtraCrcs(id & 0xff)
+
+ final val Empty = Packet(0, 0, 0, -1, Array(0: Byte))
+
+} \ No newline at end of file