summaryrefslogtreecommitdiffstats
path: root/src/canutil
diff options
context:
space:
mode:
authorChristopher Peplin <chris.peplin@rhubarbtech.com>2013-12-24 12:00:20 -0500
committerChristopher Peplin <chris.peplin@rhubarbtech.com>2013-12-24 12:00:20 -0500
commit39a420f13e8000e2dfa53777b9e51594ba03e5d4 (patch)
tree95d8a0975bf7016a71b64fea1162375a1b916985 /src/canutil
parentbc1baf25a0844861713829c0e9e69e4a2d447cc6 (diff)
Add test cases from vi-firmware.
Diffstat (limited to 'src/canutil')
-rw-r--r--src/canutil/read.h16
-rw-r--r--src/canutil/write.c12
-rw-r--r--src/canutil/write.h16
3 files changed, 34 insertions, 10 deletions
diff --git a/src/canutil/read.h b/src/canutil/read.h
index 815f26b0..6ac4eebe 100644
--- a/src/canutil/read.h
+++ b/src/canutil/read.h
@@ -4,10 +4,26 @@
#include <stdint.h>
#include <stdbool.h>
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Public: Parse a CAN signal from a message and apply required transformation.
+ *
+ * signal - The details of the signal to decode and forward.
+ * data - The raw bytes of the CAN message that contains the signal, assumed
+ * to be in big-endian byte order from CAN.
+ *
+ * Returns the final, transformed value of the signal.
+ */
float parseFloat(uint64_t data, uint8_t bitPosition, uint8_t bitSize,
float factor, float offset);
bool parseBoolean(uint64_t data, uint8_t bitPosition, uint8_t bitSize,
float factor, float offset);
+#ifdef __cplusplus
+}
+#endif
+
#endif // __READ_H__
diff --git a/src/canutil/write.c b/src/canutil/write.c
index fdcba1f5..741778c7 100644
--- a/src/canutil/write.c
+++ b/src/canutil/write.c
@@ -1,18 +1,18 @@
#include "write.h"
-uint64_t encodeFloat(float value, float offset, float factor, uint8_t bitPosition,
- uint8_t bitSize) {
+uint64_t encodeFloat(float value, uint8_t bitPosition, uint8_t bitSize,
+ float factor, float offset) {
float rawValue = (value - offset) / factor;
if(rawValue > 0) {
// round up to avoid losing precision when we cast to an int
rawValue += 0.5;
}
uint64_t result = 0;
- setBitField(&result, rawValue, bitPosition, bitSize);
+ setBitField(&result, (uint64_t)rawValue, bitPosition, bitSize);
return result;
}
-uint64_t encodeBoolean(bool value, float offset, float factor,
- uint8_t bitPosition, uint8_t bitSize) {
- return encodeFloat(value, offset, factor, bitPosition, bitSize);
+uint64_t encodeBoolean(bool value, uint8_t bitPosition, uint8_t bitSize,
+ float factor, float offset) {
+ return encodeFloat(value, offset, factor, bitPosition, bitSize);
}
diff --git a/src/canutil/write.h b/src/canutil/write.h
index 85a5c1a0..1b086dbe 100644
--- a/src/canutil/write.h
+++ b/src/canutil/write.h
@@ -4,10 +4,18 @@
#include <stdint.h>
#include <stdbool.h>
-uint64_t encodeFloat(float value, float offset, float factor, uint8_t bitPosition,
- uint8_t bitSize);
+#ifdef __cplusplus
+extern "C" {
+#endif
-uint64_t encodeBoolean(bool value, float offset, float factor,
- uint8_t bitPosition, uint8_t bitSize);
+uint64_t encodeFloat(float value, uint8_t bitPosition, uint8_t bitSize,
+ float factor, float offset);
+
+uint64_t encodeBoolean(bool value, uint8_t bitPosition, uint8_t bitSize,
+ float factor, float offset);
+
+#ifdef __cplusplus
+}
+#endif
#endif // __WRITE_H__