diff options
author | Jakob Odersky <jodersky@gmail.com> | 2015-03-19 16:08:46 +0100 |
---|---|---|
committer | Jakob Odersky <jodersky@gmail.com> | 2015-03-19 16:08:46 +0100 |
commit | 1cf6e37dc356144f3da2a2dcde75d1ced8bc5ad6 (patch) | |
tree | 287a8e4ce18d3a8c299d7b2a91599a7a48c7b59d /mavlink-library/src/main/scala/com/github/jodersky/mavlink/trees/package.scala | |
download | sbt-mavlink-1cf6e37dc356144f3da2a2dcde75d1ced8bc5ad6.tar.gz sbt-mavlink-1cf6e37dc356144f3da2a2dcde75d1ced8bc5ad6.tar.bz2 sbt-mavlink-1cf6e37dc356144f3da2a2dcde75d1ced8bc5ad6.zip |
initial commit
Diffstat (limited to 'mavlink-library/src/main/scala/com/github/jodersky/mavlink/trees/package.scala')
-rw-r--r-- | mavlink-library/src/main/scala/com/github/jodersky/mavlink/trees/package.scala | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/mavlink-library/src/main/scala/com/github/jodersky/mavlink/trees/package.scala b/mavlink-library/src/main/scala/com/github/jodersky/mavlink/trees/package.scala new file mode 100644 index 0000000..49b697b --- /dev/null +++ b/mavlink-library/src/main/scala/com/github/jodersky/mavlink/trees/package.scala @@ -0,0 +1,44 @@ +package com.github.jodersky.mavlink + +package trees { + + sealed trait Tree + + case class Dialect(version: String, enums: Set[Enum], messages: Set[Message]) extends Tree + case class Enum(name: String, entries: Set[EnumEntry]) extends Tree + case class EnumEntry(value: Int, name: String, description: String) extends Tree + case class Field(tpe: Type, nativeType: String, name: String, enum: Option[String], description: String) extends Tree + case class Message(id: Byte, name: String, description: String, fields: Seq[Field]) extends Tree { + def orderedFields = fields.toSeq.sortBy(_.tpe.width)(Ordering[Int].reverse) + + lazy val checksum = { + var c = new Crc() + c = c.accumulate((name + " ").getBytes) + for (field <- orderedFields) { + c = c.accumulate((field.nativeType + " ").getBytes) + c = c.accumulate((field.name + " ").getBytes) + } + (c.lsb ^ c.msb).toByte + } + } + + trait Type extends Tree { + def width: Int // width in bytes of the type + def sizeof: Int = width // size of bytes of the type + } + + case class IntType(width: Int, signed: Boolean) extends Type + case class FloatType(width: Int) extends Type + case class ArrayType(underlying: Type, length: Int) extends Type { + def width = underlying.width + override def sizeof = width * length + } + case object CharType extends Type { + def width = 1 + } + case class StringType(maxLength: Int) extends Type { + val width = 1 + override def sizeof = width * maxLength + } + +}
\ No newline at end of file |