summaryrefslogtreecommitdiffstats
path: root/src/canutil
diff options
context:
space:
mode:
Diffstat (limited to 'src/canutil')
-rw-r--r--src/canutil/read.c16
-rw-r--r--src/canutil/read.h10
-rw-r--r--src/canutil/write.c14
-rw-r--r--src/canutil/write.h18
4 files changed, 40 insertions, 18 deletions
diff --git a/src/canutil/read.c b/src/canutil/read.c
index fddf75e3..4864a60f 100644
--- a/src/canutil/read.c
+++ b/src/canutil/read.c
@@ -2,15 +2,21 @@
#include <bitfield/bitfield.h>
#include <bitfield/8byte.h>
-float bitfield_parse_float(uint64_t data, uint8_t bit_offset, uint8_t bit_size,
+float eightbyte_parse_float(uint64_t data, uint8_t bit_offset, uint8_t bit_size,
float factor, float offset) {
- uint64_t raw = get_bit_field(data, bit_offset,
- bit_size, true);
+ uint64_t raw = eightbyte_get_bit_field(data, bit_offset, bit_size, true);
return raw * factor + offset;
}
-bool bitfield_parse_bool(uint64_t data, uint8_t bit_offset, uint8_t bit_size,
+bool eightbyte_parse_bool(uint64_t data, uint8_t bit_offset, uint8_t bit_size,
float factor, float offset) {
- float value = bitfield_parse_float(data, bit_offset, bit_size, factor, offset);
+ float value = eightbyte_parse_float(data, bit_offset, bit_size, factor, offset);
return value == 0.0 ? false : true;
}
+
+float bitfield_parse_float(const uint8_t data[], const uint16_t size,
+ const uint8_t bit_offset, const uint8_t bit_size, const float factor,
+ const float offset) {
+ //TODO
+ return 0;
+}
diff --git a/src/canutil/read.h b/src/canutil/read.h
index 865bb278..bf6c0ade 100644
--- a/src/canutil/read.h
+++ b/src/canutil/read.h
@@ -20,8 +20,12 @@ extern "C" {
*
* Returns the decoded and transformed value of the signal.
*/
-float bitfield_parse_float(uint64_t data, uint8_t bit_offset, uint8_t bit_size,
- float factor, float offset);
+float eightbyte_parse_float(const uint64_t data, const uint8_t bit_offset,
+ const uint8_t bit_size, const float factor, const float offset);
+
+float bitfield_parse_float(const uint8_t data[], const uint16_t size,
+ const uint8_t bit_offset, const uint8_t bit_size, const float factor,
+ const float offset);
/* Public: Parse a CAN signal from a message and interpret it as a boolean.
*
@@ -35,7 +39,7 @@ float bitfield_parse_float(uint64_t data, uint8_t bit_offset, uint8_t bit_size,
*
* Returns false if the value was 0, otherwise true.
*/
-bool bitfield_parse_bool(uint64_t data, uint8_t bit_offset, uint8_t bit_size,
+bool eightbyte_parse_bool(uint64_t data, uint8_t bit_offset, uint8_t bit_size,
float factor, float offset);
#ifdef __cplusplus
diff --git a/src/canutil/write.c b/src/canutil/write.c
index 12c8fa28..09e6caa3 100644
--- a/src/canutil/write.c
+++ b/src/canutil/write.c
@@ -2,11 +2,13 @@
#include <bitfield/bitfield.h>
#include <bitfield/8byte.h>
-uint64_t bitfield_encode_float(float value, uint8_t bit_offset, uint8_t bit_size,
+uint64_t eightbyte_encode_float(float value, uint8_t bit_offset, uint8_t bit_size,
float factor, float offset) {
float raw = (value - offset) / factor;
if(raw > 0) {
// round up to avoid losing precision when we cast to an int
+ // TODO do we need a way to encode an int back to a signal without any
+ // rounding?
raw += 0.5;
}
uint64_t result = 0;
@@ -16,7 +18,13 @@ uint64_t bitfield_encode_float(float value, uint8_t bit_offset, uint8_t bit_size
return result;
}
-uint64_t bitfield_encode_bool(const bool value, const uint8_t bit_offset,
+uint64_t eightbyte_encode_bool(const bool value, const uint8_t bit_offset,
const uint8_t bit_size) {
- return bitfield_encode_float(value, bit_offset, bit_size, 1.0, 0);
+ return eightbyte_encode_float(value, bit_offset, bit_size, 1.0, 0);
+}
+
+bool bitfield_encode_float(float value, uint8_t bit_offset,
+ uint8_t bit_size, float factor, float offset, uint8_t destination[]) {
+ // TODO
+ return 0;
}
diff --git a/src/canutil/write.h b/src/canutil/write.h
index f117a06c..8fd18cdb 100644
--- a/src/canutil/write.h
+++ b/src/canutil/write.h
@@ -14,8 +14,8 @@ extern "C" {
* value - the floating point value to encode.
* bit_offset - the starting point for the encoded bits in the returned value.
* bit_size - The max width of the field in the resulting bit array. If bit_size
- * isn't big enough to store the fixed point version of the value, the bitfeld
- * will *not* be set. TODO some error reporting would be nice.
+ * isn't big enough to store the fixed point version of the value, the
+ * bitfeld will *not* be set. TODO some error reporting would be nice.
* factor - a factor used to transform from floating to fixed point before
* encoding. Use 1.0 for no factor.
* offset - an offset used to transform from floating to fixed point before
@@ -23,20 +23,24 @@ extern "C" {
*
* Returns a big-endian uint64_t with the value encoded as a bitfield.
*/
-uint64_t bitfield_encode_float(float value, uint8_t bit_offset, uint8_t bit_size,
- float factor, float offset);
+uint64_t eightbyte_encode_float(float value, uint8_t bit_offset,
+ uint8_t bit_size, float factor, float offset);
+
+bool bitfield_encode_float(float value, uint8_t bit_offset,
+ uint8_t bit_size, float factor, float offset, uint8_t destination[]);
/* Public: Encode a boolean into fixed bit width field in a bit array.
*
* value - the boolean value to encode - true will be 1, false will be 0.
* bit_offset - the starting point for the encoded bits in the returned value.
* bit_size - The max width of the field in the resulting bit array. If bit_size
- * isn't big enough to store the fixed point version of the value, the bitfeld
- * will *not* be set. TODO some error reporting would be nice.
+ * isn't big enough to store the fixed point version of the value, the
+ * bitfeld will *not* be set. TODO some error reporting would be nice.
*
* Returns a big-endian uint64_t with the value encoded as a bitfield.
*/
-uint64_t bitfield_encode_bool(const bool value, const uint8_t bit_offset, const uint8_t bit_size);
+uint64_t eightbyte_encode_bool(const bool value, const uint8_t bit_offset,
+ const uint8_t bit_size);
#ifdef __cplusplus
}