diff options
author | Jakob Odersky <jodersky@gmail.com> | 2015-03-20 15:39:14 +0100 |
---|---|---|
committer | Jakob Odersky <jodersky@gmail.com> | 2015-03-20 15:39:14 +0100 |
commit | 9346e7da6b95d6a5e43f7a8f4691e8c43dc95bb6 (patch) | |
tree | 71cbca8eb7d49b34697624fb6c8281dc1a4578c6 | |
parent | 99e93734d846f24f2107482869fac58c9dff1774 (diff) | |
download | mavigator-9346e7da6b95d6a5e43f7a8f4691e8c43dc95bb6.tar.gz mavigator-9346e7da6b95d6a5e43f7a8f4691e8c43dc95bb6.tar.bz2 mavigator-9346e7da6b95d6a5e43f7a8f4691e8c43dc95bb6.zip |
move mavlink plugin to separate project
20 files changed, 15 insertions, 592 deletions
diff --git a/project/Build.scala b/project/Build.scala index ffb6fde..c2eaabe 100644 --- a/project/Build.scala +++ b/project/Build.scala @@ -6,8 +6,8 @@ import play.PlayImport.PlayKeys._ import org.scalajs.sbtplugin.ScalaJSPlugin import org.scalajs.sbtplugin.ScalaJSPlugin.autoImport._ -import com.github.jodersky.sbt.mavlink.MavlinkKeys._ -import com.github.jodersky.sbt.SbtMavlink +import com.github.jodersky.mavlink.sbt._ +import com.github.jodersky.mavlink.sbt.MavlinkKeys._ object ApplicationBuild extends Build { diff --git a/project/mavlink-library/src/main/scala/com/github/jodersky/mavlink/Main.scala b/project/mavlink-library/src/main/scala/com/github/jodersky/mavlink/Main.scala deleted file mode 100644 index 57d1fcc..0000000 --- a/project/mavlink-library/src/main/scala/com/github/jodersky/mavlink/Main.scala +++ /dev/null @@ -1,42 +0,0 @@ -package com.github.jodersky.mavlink - -import scala.xml.XML -import com.github.jodersky.mavlink.parsing.Protocol -import java.io.FileWriter -import java.io.BufferedWriter -import scalax.file.Path -import java.io.File - -object Main { - - def prettify(str: String) = str.replaceAll("(\\s*\n)(\\s*\n)+", "\n\n") - - private def processTemplates(protocol: Protocol, rootOut: Path) = { - val root = rootOut / Path.fromString("org/mavlink") - val mappings: List[(String, Path)] = List( - org.mavlink.txt.Crc().body -> Path("Crc.scala"), - org.mavlink.txt.Packet(protocol.messages).body -> Path("Packet.scala"), - org.mavlink.txt.Parser().body -> Path("Parser.scala"), - org.mavlink.txt.Assembler().body -> Path("Assembler.scala"), - org.mavlink.messages.txt.Message(protocol.messages).body -> Path.fromString("messages/messages.scala") - ) - - for ((str, file) <- mappings) yield { - val out = root / file - out.createFile(true, false) - out.write(prettify(str)) - out - } - } - - def run(dialect: File, out: File) = { - val xml = XML.loadFile(dialect) - val protocol = Protocol.parse(xml) - processTemplates(protocol, Path(out)).map(_.fileOption.get) - } - - def main(args: Array[String]): Unit = { - run(new File(args(0)), new File(args(1))) - } - -}
\ No newline at end of file diff --git a/project/mavlink-library/src/main/scala/com/github/jodersky/mavlink/parsing/Crc.scala b/project/mavlink-library/src/main/scala/com/github/jodersky/mavlink/parsing/Crc.scala deleted file mode 100644 index c54b7e9..0000000 --- a/project/mavlink-library/src/main/scala/com/github/jodersky/mavlink/parsing/Crc.scala +++ /dev/null @@ -1,24 +0,0 @@ -package com.github.jodersky.mavlink.parsing - -case class Crc(val crc: Int = 0xffff) extends AnyVal { - - def accumulate(datum: Byte): Crc = { - val d = datum & 0xff - var tmp = d ^ (crc & 0xff) - tmp ^= (tmp << 4) & 0xff; - Crc( - ((crc >> 8) & 0xff) ^ (tmp << 8) ^ (tmp << 3) ^ ((tmp >> 4) & 0xff)) - } - - def accumulate(data: Seq[Byte]): Crc = { - var next = this - for (d <- data) { - next = next.accumulate(d) - } - next - } - - def lsb: Byte = crc.toByte - def msb: Byte = (crc >> 8).toByte - -}
\ No newline at end of file diff --git a/project/mavlink-library/src/main/scala/com/github/jodersky/mavlink/parsing/FieldTypes.scala b/project/mavlink-library/src/main/scala/com/github/jodersky/mavlink/parsing/FieldTypes.scala deleted file mode 100644 index 0cf29b4..0000000 --- a/project/mavlink-library/src/main/scala/com/github/jodersky/mavlink/parsing/FieldTypes.scala +++ /dev/null @@ -1,27 +0,0 @@ -package com.github.jodersky.mavlink.parsing - -import scala.xml.Node - -object FieldTypes { - - sealed trait Type { - def width: Int - def scalaType: String - def nativeType: String - } - - case class IntType(signed: Boolean, width: Int, scalaType: String, nativeType: String) extends Type - - def parse(xml: Node): Type = xml.text match { - case "int8_t" => IntType(true, 1, "Byte", xml.text) - case "int16_t" => IntType(true, 2, "Short", xml.text) - case "int32_t" => IntType(true, 4, "Int", xml.text) - case "int64_t" => IntType(true, 8, "Long", xml.text) - case "uint8_t" => IntType(false, 1, "Byte", xml.text) - case "uint16_t" => IntType(false, 2, "Short", xml.text) - case "uint32_t" => IntType(false, 4, "Int", xml.text) - case "uint64_t" => IntType(false, 8, "Long", xml.text) - case _ => Parser.fatal("unsupported type \"" + xml.text + "\"", xml) - } - -}
\ No newline at end of file diff --git a/project/mavlink-library/src/main/scala/com/github/jodersky/mavlink/parsing/Name.scala b/project/mavlink-library/src/main/scala/com/github/jodersky/mavlink/parsing/Name.scala deleted file mode 100644 index 6f5b6a7..0000000 --- a/project/mavlink-library/src/main/scala/com/github/jodersky/mavlink/parsing/Name.scala +++ /dev/null @@ -1,14 +0,0 @@ -package com.github.jodersky.mavlink.parsing - -object Name { - - def words(raw: String) = raw.split("\\s+|_") - - def className(raw: String): String = words(raw.toLowerCase()).map(_.capitalize).mkString("") - - def varName(raw: String) = { - val (head, tail) = className(raw).splitAt(1) - head.toLowerCase() + tail - } - -}
\ No newline at end of file diff --git a/project/mavlink-library/src/main/scala/com/github/jodersky/mavlink/parsing/parsing.scala b/project/mavlink-library/src/main/scala/com/github/jodersky/mavlink/parsing/parsing.scala deleted file mode 100644 index e14e0c3..0000000 --- a/project/mavlink-library/src/main/scala/com/github/jodersky/mavlink/parsing/parsing.scala +++ /dev/null @@ -1,85 +0,0 @@ -package com.github.jodersky.mavlink.parsing - -import scala.xml.Node -import scala.util.Try -import FieldTypes._ -import Parser._ -import Name._ - -object Parser { - def fatal(message: String, xml: Node) = throw new RuntimeException("Cannot parse message definition: " + message + " " + xml) -} - -case class Protocol(version: String, enums: Seq[Enum], messages: Seq[Message]) -object Protocol { - def parse(xml: Node) = { - val root = xml \\ "mavlink" - val version = (root \ "version").text - val enums = (root \ "enums" \ "_") map Enum.parse - val messages = (root \ "messages" \ "_") map Message.parse - Protocol(version, enums, messages) - } -} - -case class Enum(name: String, entries: Seq[EnumEntry]) { - def scalaName = className(name) -} -object Enum { - def parse(xml: Node) = { - val name = (xml \ "@name").headOption.map(_.text).getOrElse(fatal("no name defined", xml)) - val entries = (xml \ "entry") map EnumEntry.parse - Enum(name, entries) - } -} - -case class EnumEntry(value: Int, name: String, description: String) { - def scalaName = className(name) -} -object EnumEntry { - def parse(xml: Node) = { - val valueString = (xml \ "@value").headOption.map(_.text).getOrElse(fatal("no value defined", xml)) - val value = Try { Integer.parseInt(valueString) }.getOrElse(fatal("value must be an integer", xml)) - val name = (xml \ "@name").headOption.map(_.text).getOrElse(fatal("no name defined", xml)) - val description = (xml \ "description").text - EnumEntry(value, name, description) - } -} - -case class Message(id: Byte, name: String, description: String, fields: Seq[Field]) { - def scalaName = className(name) - def orderedFields = fields.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.tpe.nativeType + " ").getBytes) - c = c.accumulate((field.name + " ").getBytes) - } - (c.lsb ^ c.msb).toByte - } -} -object Message { - def parse(xml: Node): Message = { - val idString = (xml \ "@id").headOption.map(_.text).getOrElse(fatal("no id defined", xml)) - val id = Try { Integer.parseInt(idString).toByte }.getOrElse(fatal("id must be an integer", xml)) - val name = (xml \ "@name").headOption.map(_.text).getOrElse(fatal("no name defined", xml)) - val description = (xml \ "description").text - val fields = (xml \ "field") map Field.parse - Message(id, name, description, fields) - } -} - -case class Field(tpe: Type, name: String, enum: Option[String], description: String) { - def scalaName = varName(name) -} -object Field { - def parse(xml: Node): Field = { - val tpeNode = (xml \ "@type").headOption.getOrElse(fatal("no type defined", xml)) - val tpe = FieldTypes.parse(tpeNode) - val name = (xml \ "@name").headOption.map(_.text).getOrElse(fatal("no name defined", xml)) - val enum = (xml \ "@enum").headOption.map(_.text) - val description = (xml).text - Field(tpe, name, enum, description) - } -}
\ No newline at end of file diff --git a/project/mavlink-library/src/main/twirl/org/mavlink/Assembler.scala.txt b/project/mavlink-library/src/main/twirl/org/mavlink/Assembler.scala.txt deleted file mode 100644 index 8b26b69..0000000 --- a/project/mavlink-library/src/main/twirl/org/mavlink/Assembler.scala.txt +++ /dev/null @@ -1,15 +0,0 @@ -@() - -@_header() -package org.mavlink - -class Assembler(systemId: Byte, componentId: Byte) { - private var seq = 0; - - def assemble(messageId: Byte, payload: Seq[Byte]): Packet = { - val p = Packet(seq.toByte, systemId, componentId, messageId, payload) - seq += 1 - p - } - -}
\ No newline at end of file diff --git a/project/mavlink-library/src/main/twirl/org/mavlink/Crc.scala.txt b/project/mavlink-library/src/main/twirl/org/mavlink/Crc.scala.txt deleted file mode 100644 index 61b5c6f..0000000 --- a/project/mavlink-library/src/main/twirl/org/mavlink/Crc.scala.txt +++ /dev/null @@ -1,23 +0,0 @@ -@() - -package org.mavlink - -/** - * X.25 CRC calculation for MAVlink messages. The checksum must be initialized, - * updated with witch field of the message, and then finished with the message - * id. - */ -case class Crc(val crc: Int = 0xffff) extends AnyVal { - - def accumulate(datum: Byte): Crc = { - val d = datum & 0xff - var tmp = d ^ (crc & 0xff) - tmp ^= (tmp << 4) & 0xff; - Crc( - ((crc >> 8) & 0xff) ^ (tmp << 8) ^ (tmp << 3) ^ ((tmp >> 4) & 0xff)) - } - - def lsb: Byte = crc.toByte - def msb: Byte = (crc >> 8).toByte - -}
\ No newline at end of file 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 deleted file mode 100644 index 9a3ad7f..0000000 --- a/project/mavlink-library/src/main/twirl/org/mavlink/Packet.scala.txt +++ /dev/null @@ -1,60 +0,0 @@ -@(messages: Seq[parsing.Message]) - -@messageCrcs() = @{ - for (i <- 0 to 255) yield { - val crc = messages.find(_.id == i).map(_.checksum).getOrElse(0) - crc.toString - } -} - -@_header() -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 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) - -} diff --git a/project/mavlink-library/src/main/twirl/org/mavlink/_header.scala.txt b/project/mavlink-library/src/main/twirl/org/mavlink/_header.scala.txt deleted file mode 100644 index 6d27c2c..0000000 --- a/project/mavlink-library/src/main/twirl/org/mavlink/_header.scala.txt +++ /dev/null @@ -1,5 +0,0 @@ -@() - -/** - * This file is machine-generated. - */
\ No newline at end of file diff --git a/project/mavlink-library/src/main/twirl/org/mavlink/messages/Message.scala.txt b/project/mavlink-library/src/main/twirl/org/mavlink/messages/Message.scala.txt deleted file mode 100644 index f1d6334..0000000 --- a/project/mavlink-library/src/main/twirl/org/mavlink/messages/Message.scala.txt +++ /dev/null @@ -1,70 +0,0 @@ -@(messages: Seq[parsing.Message]) - -@extract(field: parsing.Field, offset: Int) = { - @field.tpe.width match { - case 1 => {payload(@offset)} - case 2 => {((payload(@offset) & 0xff) | ((payload(@{offset+1}) & 0xff) << 8)).toShort} - case 4 => {(payload(@offset) & 0xff) | ((payload(@{offset+1}) & 0xff) << 8) | ((payload(@{offset+2}) & 0xff) << 16) | ((payload(@{offset+3}) & 0xff) << 24)} - case 8 => {(payload(@offset) & 0xffl) | - ((payload(@{offset+2}) & 0xffl) << 8) | - ((payload(@{offset+3}) & 0xffl) << 16) | - ((payload(@{offset+4}) & 0xffl) << 24) | - ((payload(@{offset+5}) & 0xffl) << 32) | - ((payload(@{offset+6}) & 0xffl) << 40) | - ((payload(@{offset+7}) & 0xffl) << 48) | - ((payload(@{offset+8}) & 0xffl) << 56)} - } -} - -@insert(field: parsing.Field, offset: Int) = { - @defining("m." + field.scalaName) { attr => - @if(field.tpe.width >= 1) { arr(@offset) = (@attr & 0xff).toByte } - @if(field.tpe.width >= 2) { arr(@{offset+1}) = ((@attr >> 8) & 0xff).toByte } - @if(field.tpe.width >= 3) { arr(@{offset+2}) = ((@attr >> 16) & 0xff).toByte } - @if(field.tpe.width >= 4) { arr(@{offset+3}) = ((@attr >> 24) & 0xff).toByte } - @if(field.tpe.width >= 5) { arr(@{offset+4}) = ((@attr >> 32) & 0xff).toByte } - @if(field.tpe.width >= 6) { arr(@{offset+5}) = ((@attr >> 40) & 0xff).toByte } - @if(field.tpe.width >= 7) { arr(@{offset+6}) = ((@attr >> 48) & 0xff).toByte } - @if(field.tpe.width >= 8) { arr(@{offset+7}) = ((@attr >> 56) & 0xff).toByte } - } -} - -@org.mavlink.txt._header() - -package org.mavlink.messages - -sealed trait Message -@for(message <- messages) { - @_message_class(message) -} -case class Unknown(id: Byte, payload: Seq[Byte]) extends Message - -object Message { - def unpack(id: Byte, payload: Seq[Byte]): Message = id match { - @for(message <- messages) { - case @message.id => - @defining(message.orderedFields){ ordered => - @defining(ordered.map(_.tpe.width).scanLeft(0)(_ + _)){ offsets => - @for((field, offset) <- ordered zip offsets) { - val @field.scalaName: @field.tpe.scalaType = @extract(field, offset) - }}} - @{message.scalaName}@message.fields.map(_.scalaName).mkString("(", ", ", ")") - } - - case id => Unknown(id, payload) - } - - def pack(message: Message): (Byte, Seq[Byte]) = message match { - @for(message <- messages) { - case m: @message.scalaName => - val arr = new Array[Byte](@message.fields.map(_.tpe.width).sum) - @defining(message.orderedFields) { ordered => - @defining(ordered.map(_.tpe.width).scanLeft(0)(_ + _)){ offsets => - @for((field, offset) <- ordered zip offsets) { - @insert(field, offset) - } - (@message.id, arr) - }}} - case u: Unknown => (u.id, u.payload) - } -}
\ No newline at end of file diff --git a/project/mavlink-library/src/main/twirl/org/mavlink/messages/_message_class.scala.txt b/project/mavlink-library/src/main/twirl/org/mavlink/messages/_message_class.scala.txt deleted file mode 100644 index 78c8326..0000000 --- a/project/mavlink-library/src/main/twirl/org/mavlink/messages/_message_class.scala.txt +++ /dev/null @@ -1,14 +0,0 @@ -@(message: parsing.Message) - -@arguments(fields: Seq[parsing.Field]) = @{ - fields.map(f => f.scalaName + ": " + f.tpe.scalaType) -} - -@comment(paragraphs: Seq[String]) = @{ - paragraphs.mkString("/**\n * ", "\n * ", "\n */") -} - -@defining(message.description.grouped(120).toSeq){intro => -@defining(message.fields.map(field => "@param " + field.name + " " + field.description)){ fields => -@comment(intro ++ fields)}} -case class @{message.scalaName}@arguments(message.fields).mkString("(", ", ", ")") extends Message
\ No newline at end of file diff --git a/project/mavlink-plugin/src/main/scala/com/github/jodersky/sbt/SbtMavlink.scala b/project/mavlink-plugin/src/main/scala/com/github/jodersky/sbt/SbtMavlink.scala deleted file mode 100644 index 58692cd..0000000 --- a/project/mavlink-plugin/src/main/scala/com/github/jodersky/sbt/SbtMavlink.scala +++ /dev/null @@ -1,24 +0,0 @@ -package com.github.jodersky.sbt - -import sbt._ -import Keys._ -import plugins._ -import mavlink.MavlinkKeys._ -import sbt.Project.Initialize -import com.github.jodersky.mavlink.Main - -object SbtMavlink extends AutoPlugin { - - override def requires = JvmPlugin - - lazy val generate = Def.task[Seq[File]] { - streams.value.log.info("Generating mavlink files...") - Main.run((mavlinkDialect in Compile).value, (mavlinkTarget in Compile).value).map(_.getAbsoluteFile) - } - - override val projectSettings: Seq[Setting[_]] = Seq( - mavlinkTarget in Compile := (sourceManaged in Compile).value, - mavlinkGenerate in Compile := generate.value, - sourceGenerators in Compile += (mavlinkGenerate in Compile).taskValue - ) -} diff --git a/project/mavlink-plugin/src/main/scala/com/github/jodersky/sbt/mavlink/MavlinkKeys.scala b/project/mavlink-plugin/src/main/scala/com/github/jodersky/sbt/mavlink/MavlinkKeys.scala deleted file mode 100644 index 5cbffd4..0000000 --- a/project/mavlink-plugin/src/main/scala/com/github/jodersky/sbt/mavlink/MavlinkKeys.scala +++ /dev/null @@ -1,14 +0,0 @@ -package com.github.jodersky.sbt -package mavlink - -import sbt._ -import sbt.Keys._ -import java.io.File - -object MavlinkKeys { - - lazy val mavlinkDialect = settingKey[File]("Dialect definition from which to generate files.") - lazy val mavlinkTarget = settingKey[File]("Target directory to contain all generated mavlink files.") - lazy val mavlinkGenerate = taskKey[Seq[File]]("Generate mavlink files.") - -}
\ No newline at end of file diff --git a/project/plugins.sbt b/project/plugins.sbt new file mode 100644 index 0000000..5c18aad --- /dev/null +++ b/project/plugins.sbt @@ -0,0 +1,7 @@ +//resolvers += "Typesafe repository" at "https://repo.typesafe.com/typesafe/releases/", + +addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.3.8") + +addSbtPlugin("org.scala-js" % "sbt-scalajs" % "0.6.1") + +addSbtPlugin("com.github.jodersky" % "sbt-mavlink" % "0.1-SNAPSHOT")
\ No newline at end of file diff --git a/project/project/BuildBuild.scala b/project/project/BuildBuild.scala deleted file mode 100644 index ac1974b..0000000 --- a/project/project/BuildBuild.scala +++ /dev/null @@ -1,36 +0,0 @@ -import sbt._ -import sbt.Keys._ -import play.twirl.sbt.SbtTwirl -import play.twirl.sbt.Import._ - -object BuildBuild extends Build { - - lazy val root = ( - Project("root", file(".")) - settings( - resolvers += "Typesafe repository" at "https://repo.typesafe.com/typesafe/releases/", - addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.3.8"), - addSbtPlugin("org.scala-js" % "sbt-scalajs" % "0.6.1") - ) - dependsOn(mavlinkPlugin) - ) - - lazy val mavlinkLibrary = ( - Project("mavlink-library", file("mavlink-library")) - enablePlugins(SbtTwirl) - settings( - libraryDependencies += "com.github.scala-incubator.io" %% "scala-io-file" % "0.4.2", - TwirlKeys.templateImports += "com.github.jodersky.mavlink._" - ) - ) - - lazy val mavlinkPlugin = ( - Project("mavlink-plugin", file("mavlink-plugin")) - settings( - sbtPlugin := true - ) - dependsOn(mavlinkLibrary) - ) - -} - diff --git a/project/project/plugins.sbt b/project/project/plugins.sbt deleted file mode 100644 index 7b458b6..0000000 --- a/project/project/plugins.sbt +++ /dev/null @@ -1 +0,0 @@ -addSbtPlugin("com.typesafe.sbt" % "sbt-twirl" % "1.0.4")
\ No newline at end of file diff --git a/vfd-dashboard/src/main/scala/vfd/dashboard/MavlinkSocket.scala b/vfd-dashboard/src/main/scala/vfd/dashboard/MavlinkSocket.scala index 162ca64..dff3598 100644 --- a/vfd-dashboard/src/main/scala/vfd/dashboard/MavlinkSocket.scala +++ b/vfd-dashboard/src/main/scala/vfd/dashboard/MavlinkSocket.scala @@ -5,6 +5,7 @@ import scala.scalajs.js.Any.fromFunction1 import org.mavlink.Packet import org.mavlink.Parser +import org.mavlink.Parser.Errors._ import org.mavlink.messages.Message import org.scalajs.dom @@ -14,7 +15,7 @@ import rx.ops.RxOps class MavlinkSocket(url: String, remoteSystemId: Int) { - lazy val packet: Var[Packet] = Var(Packet.Empty) + lazy val packet: Var[Packet] = Var(Packet.empty) lazy val message: Rx[Message] = packet.map{p => Message.unpack(p.messageId, p.payload) } @@ -39,8 +40,8 @@ class MavlinkSocket(url: String, remoteSystemId: Int) { }, err => { err match { - case Parser.ParseErrors.CrcError => stats.crcErrors() += 1 - case Parser.ParseErrors.OverflowError => stats.overflows() += 1 + case CrcError => stats.crcErrors() += 1 + case OverflowError => stats.overflows() += 1 } }) diff --git a/vfd-uav/src/main/scala/vfd/uav/MavlinkUtil.scala b/vfd-uav/src/main/scala/vfd/uav/MavlinkUtil.scala index 1d2ac80..edc8484 100644 --- a/vfd-uav/src/main/scala/vfd/uav/MavlinkUtil.scala +++ b/vfd-uav/src/main/scala/vfd/uav/MavlinkUtil.scala @@ -24,9 +24,9 @@ trait MavlinkUtil { myself: Actor with ActorLogging => /** Assembles a message into a bytestring representing a packet sent from this connection. */ protected def assemble(message: Message): ByteString = { - val (messageId: Byte, payload: Seq[Byte]) = Message.pack(message) + val (messageId, payload) = Message.pack(message) val packet: Packet = assembler.assemble(messageId, payload) - ByteString(packet.toSeq.toArray) + ByteString(packet.toArray) } /** Parser for messages being sent to the uav. */ |