aboutsummaryrefslogtreecommitdiff
path: root/project/mavlink-library/src/main/twirl/org/mavlink/Crc.scala.txt
diff options
context:
space:
mode:
Diffstat (limited to 'project/mavlink-library/src/main/twirl/org/mavlink/Crc.scala.txt')
-rw-r--r--project/mavlink-library/src/main/twirl/org/mavlink/Crc.scala.txt23
1 files changed, 23 insertions, 0 deletions
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
new file mode 100644
index 0000000..61b5c6f
--- /dev/null
+++ b/project/mavlink-library/src/main/twirl/org/mavlink/Crc.scala.txt
@@ -0,0 +1,23 @@
+@()
+
+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