aboutsummaryrefslogtreecommitdiff
path: root/project/mavlink-library/src/main/twirl/org/mavlink/Parser.scala.txt
diff options
context:
space:
mode:
Diffstat (limited to 'project/mavlink-library/src/main/twirl/org/mavlink/Parser.scala.txt')
-rw-r--r--project/mavlink-library/src/main/twirl/org/mavlink/Parser.scala.txt131
1 files changed, 0 insertions, 131 deletions
diff --git a/project/mavlink-library/src/main/twirl/org/mavlink/Parser.scala.txt b/project/mavlink-library/src/main/twirl/org/mavlink/Parser.scala.txt
deleted file mode 100644
index f37fc8c..0000000
--- a/project/mavlink-library/src/main/twirl/org/mavlink/Parser.scala.txt
+++ /dev/null
@@ -1,131 +0,0 @@
-@()
-
-@_header()
-package org.mavlink
-
-import scala.collection.mutable.ArrayBuffer
-
-object Parser {
-
- object ParseStates {
- sealed trait State
- case object Idle extends State
- case object GotStx extends State
- case object GotLength extends State
- case object GotSeq extends State
- case object GotSysId extends State
- case object GotCompId extends State
- case object GotMsgId extends State
- case object GotCrc1 extends State
- case object GotPayload extends State
- }
-
- object ParseErrors {
- sealed trait ParseError
- case object CrcError extends ParseError
- case object OverflowError extends ParseError
- }
-}
-
-class Parser(receiver: Packet => Unit, error: Parser.ParseErrors.ParseError => Unit = _ => ()) {
- import Parser._
-
- private var state: ParseStates.State = ParseStates.Idle
-
- private object inbound {
- var length: Int = 0
- var seq: Byte = 0
- var systemId: Byte = 0
- var componentId: Byte = 0
- var messageId: Byte = 0
- var payload = new ArrayBuffer[Byte]
- var crc: Crc = new Crc()
- }
-
- def push(c: Byte): Unit = {
- import ParseStates._
-
- state match {
- case Idle =>
- if (c == Packet.Stx) {
- state = GotStx
- }
-
- case GotStx =>
- inbound.crc = new Crc()
- inbound.length = (c & 0xff)
- inbound.crc = inbound.crc.accumulate(c)
- state = GotLength
-
- case GotLength =>
- inbound.seq = c;
- inbound.crc = inbound.crc.accumulate(c)
- state = GotSeq
-
- case GotSeq =>
- inbound.systemId = c
- inbound.crc = inbound.crc.accumulate(c)
- state = GotSysId
-
- case GotSysId =>
- inbound.componentId = c
- inbound.crc = inbound.crc.accumulate(c)
- state = GotCompId
-
- case GotCompId =>
- inbound.messageId = c
- inbound.crc = inbound.crc.accumulate(c)
- if (inbound.length == 0) {
- state = GotPayload
- } else {
- state = GotMsgId
- inbound.payload.clear()
- }
-
- case GotMsgId =>
- inbound.payload += c
- inbound.crc = inbound.crc.accumulate(c)
- if(inbound.payload.length >= Packet.MaxPayloadLength) {
- state = Idle
- error(ParseErrors.OverflowError)
- }
- if (inbound.payload.length >= inbound.length) {
- state = GotPayload
- }
-
- case GotPayload =>
- inbound.crc = inbound.crc.accumulate(Packet.extraCrc(inbound.messageId))
- if (c != inbound.crc.lsb) {
- state = Idle
- if (c == Packet.Stx) {
- state = GotStx
- }
- error(ParseErrors.CrcError)
- } else {
- state = GotCrc1
- }
-
- case GotCrc1 =>
- if (c != inbound.crc.msb) {
- state = Idle
- if (c == Packet.Stx) {
- state = GotStx
- }
- error(ParseErrors.CrcError)
- } else {
- val packet = Packet(
- inbound.seq,
- inbound.systemId,
- inbound.componentId,
- inbound.messageId,
- inbound.payload)
- state = Idle
- inbound.payload = new ArrayBuffer[Byte]()
- receiver(packet)
- }
- }
- }
-
- def push(bytes: Traversable[Byte]): Unit = for (b <- bytes) push(b)
-
-}