blob: 3ee349291143349e5905f26dec2d623e48009e07 (
plain) (
tree)
|
|
package com.github.jodersky.mavlink
import scala.xml.XML
import java.io.FileWriter
import java.io.BufferedWriter
import scalax.file.Path
import java.io.File
import trees._
/**
* Generates Scala code implementing the MAVLink protocol.
* @param dialect a specific MAVLink dialect for which to generate code
*/
class Generator(dialect: Dialect) {
lazy val maxPayloadLength = dialect.messages.map(_.length).max
lazy val extraCrcs = Array.tabulate[Byte](255){i =>
val message = dialect.messages.find(_.id == i)
message.map(_.checksum).getOrElse(0)
}
/**
* Generates Scala code implementing MAVLink.
* @return a list containing proposed Scala file names pointing to their contents
*/
def generate(): List[(String, String)] = {
val context = Context(dialect.version)
List(
"org/mavlink/Assembler.scala" -> org.mavlink.txt.Assembler(context).body,
"org/mavlink/Crc.scala" -> org.mavlink.txt.Crc(context).body,
"org/mavlink/MavlinkBuffer.scala" -> org.mavlink.txt.MavlinkBuffer(context).body,
"org/mavlink/Packet.scala" -> org.mavlink.txt.Packet(context, maxPayloadLength, extraCrcs).body,
"org/mavlink/Parser.scala" -> org.mavlink.txt.Parser(context).body,
"org/mavlink/messages/messages.scala" -> org.mavlink.messages.txt.messages(context, dialect.messages).body
)
}
}
|