1 CAN Message Utilities for C
2 ===========================
4 This is a C library with functions to help encode and decode Controller Area
5 Network (CAN) message payloads. Some of the bitfield functions may be useful for
8 The header files contain complete function documentation, but to get you
9 started, here are examples using the API:
11 ## Bitfield Manipulation
13 uint8_t data[4] = {0x12, 0x34, 0x56, 0x78};
14 uint8_t result = get_byte(data, sizeof(data), 0);
16 result = get_nibble(data, sizeof(data), 0);
18 bool success = copy_bits_right_aligned(data, 4, 4, 12, result, 4)
23 ## 8 Byte Bitfield Decoding
25 uint64_t data = 0x8000000000000000;
26 uint64_t result = get_bit_field(data, 0, 1, false);
29 data = 0x0402574d555a0401;
30 result = get_bit_field(data, 16, 32, false);
31 // result = 0x574d555a;
33 data = 0x00000000F34DFCFF;
34 result = eightbyte_get_byte(data, 0, false);
37 result = eightbyte_get_byte(data, 4, false);
40 result = eightbyte_get_nibble(data, 10, false);
43 ## 8 Byte Bitfield Encoding
46 fail_unless(set_bit_field(&data, 1, 0, 1));
47 uint64_t result = get_bit_field(data, 0, 1, false);
48 ck_assert_int_eq(result, 0x1);
50 TODO setting bit fields is just copying
52 ## CAN Signal Encoding
54 The library supports encoding floating point CAN signals as well as booleans
55 into a uint64_t payload.
57 uint64_t payload = bitfield_encode_float(1, 1, 3, 1, 0)
58 // payload == 0x1000000000000000
60 payload = bitfield_encode_bool(true, 1, 3);
61 // payload == 0x1000000000000000
63 ## CAN Signal Decoding
65 The library supports parsing floating point CAN signals as well as booleans.
67 uint64_t payload = 0xeb00000000000000;
68 float float_result = bitfield_parse_float(payload,
70 4, // width of the signal's field
71 1001.0, // transformation factor for the signal value
72 -30000.0); // transformation offset for the signal value
73 // float_result == -19990.0
75 bool bool_result = bitfield_parse_bool(payload,
77 1, // width of the signal's field
78 1.0, // transformation factor for the signal value
79 0); // transformation offset for the signal value
80 // bool_result == true
84 The library includes a test suite that uses the `check` C unit test library. It
85 requires the unit testing library `check`.
91 Chris Peplin cpeplin@ford.com
95 Copyright (c) 2013 Ford Motor Company
97 Licensed under the BSD license.