aboutsummaryrefslogtreecommitdiff
path: root/vfd-mavlink/src/main/scala/org/mavlink/Packet.scala
blob: 839e5d4b123ef20f2947a60dc03c5cddd4a1da4a (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
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.next(payload.length.toByte)
    c = c.next(seq)
    c = c.next(systemId)
    c = c.next(componentId)
    c = c.next(messageId)
    for (p <- payload) {
      c = c.next(p)
    }
    c = c.next(Packet.MessageIdCrcEnds(messageId & 0xff))
    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 MessageIdCrcEnds: Seq[Byte] = Array(
     50, 124, 137,   0, 237, 217, 104, 119,   0,   0,
      0,  89,   0,   0,   0,   0,   0,   0,   0,   0,
    214, 159, 220, 168,  24,  23, 170, 144,  67, 115,
     39, 246, 185, 104, 237, 244, 222, 212,   9, 254,
    230,  28,  28, 132, 221, 232,  11, 153,  41,  39,
      0,   0,   0,   0,  15,   3,   0,   0,   0,   0,
      0, 153, 183,  51,  82, 118, 148,  21,   0, 243,
    124,   0,   0,  38,  20, 158, 152, 143,   0,   0,
      0, 106,  49,  22, 143, 140,   5, 150,   0, 231,
    183,  63,  54,   0,   0,   0,   0,   0,   0,   0,
    175, 102, 158, 208,  56,  93, 211, 108,  32, 185,
     84,   0,   0, 124, 119,   4,  76, 128,  56, 116,
    134, 237, 203, 250,  87, 203, 220,  25, 226,   0,
     29, 223,  85,   6, 229, 203,   1,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0, 154,  49,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   8, 204,
     49, 170,  44,  83,  46,   0
  ).map(_.toByte)

  final val Empty = Packet(0, 0, 0, 0, List())

}