Test all canutil functions and document in README.
[apps/agl-service-can-low-level.git] / src / canutil / write.h
1 #ifndef __WRITE_H__
2 #define __WRITE_H__
3
4 #include <stdint.h>
5 #include <stdbool.h>
6
7 #ifdef __cplusplus
8 extern "C" {
9 #endif
10
11 /* Public: Encode a floating point number into a fixed point, fixed bit width
12  *      field in a bit array.
13  *
14  * value - the floating point value to encode.
15  * bit_offset - the starting point for the encoded bits in the returned value.
16  * bit_size - The max width of the field in the resulting bit array. If bit_size
17  *      isn't big enough to store the fixed point version of the value, the bitfeld
18  *      will *not* be set. TODO some error reporting would be nice.
19  * factor - a factor used to transform from floating to fixed point before
20  *      encoding. Use 1.0 for no factor.
21  * offset - an offset used to transform from floating to fixed point before
22  *      encoding. Use 0 for no offset.
23  *
24  * Returns a big-endian uint64_t with the value encoded as a bitfield.
25  */
26 uint64_t bitfield_encode_float(float value, uint8_t bit_offset, uint8_t bit_size,
27                 float factor, float offset);
28
29 /* Public: Encode a boolean into fixed bit width field in a bit array.
30  *
31  * value - the boolean value to encode - true will be 1, false will be 0.
32  * bit_offset - the starting point for the encoded bits in the returned value.
33  * bit_size - The max width of the field in the resulting bit array. If bit_size
34  *      isn't big enough to store the fixed point version of the value, the bitfeld
35  *      will *not* be set. TODO some error reporting would be nice.
36  *
37  * Returns a big-endian uint64_t with the value encoded as a bitfield.
38  */
39 uint64_t bitfield_encode_bool(const bool value, const uint8_t bit_offset, const uint8_t bit_size);
40
41 #ifdef __cplusplus
42 }
43 #endif
44
45 #endif // __WRITE_H__