Giter Club home page Giter Club logo

bitfield-c's Introduction

Bitfield Utilities in C

This is a C library with functions to help encode and decode Controller Area Network (CAN) message payloads or other bitfields.

The header files contain complete function documentation, but to get you started, here are examples using the API:

Bitfield Manipulation

The bitfields are stored in uint8_t[].

uint8_t data[4] = {0x12, 0x34, 0x56, 0x78};
uint8_t result = get_byte(data, sizeof(data), 0);
// result = 0x12;
result = get_nibble(data, sizeof(data), 0);
// result = 0x1;
bool success = copy_bits_right_aligned(data, 4, 4, 12, result, 4)
// success == true
// result[0] == 0x2
// result[1] == 0x34

8 Byte Helpers

If you are dealing with 8 byte CAN messages as uint64_t, there are some additional functions prefixed with eightbyte_ that may be faster or more useful.

8 Byte Decoding

uint64_t data = 0x8000000000000000;
uint64_t result = eightbyte_get_bitfield(data, 0, 1, false);
// result == 0x1

data = 0x0402574d555a0401;
result = eightbyte_get_bitfield(data, 16, 32, false);
// result = 0x574d555a;

data = 0x00000000F34DFCFF;
result = eightbyte_get_byte(data, 0, false);
//result = 0x0

result = eightbyte_get_byte(data, 4, false);
//result = 0xF3

result = eightbyte_get_nibble(data, 10, false);
//result = 0x4;

8 Byte Encoding

uint64_t data = 0;
fail_unless(8byte_set_bitfield(1, 0, 1, &data));
uint64_t result = eightbyte_get_bitfield(data, 0, 1, false);
ck_assert_int_eq(result, 0x1);

CAN Signal Encoding

The library supports encoding floating point CAN signals as well as booleans into a uint64_t payload.

uint64_t payload = eightbyte_encode_float(1, 1, 3, 1, 0)
// payload == 0x1000000000000000

payload = eightbyte_encode_bool(true, 1, 3);
// payload == 0x1000000000000000

CAN Signal Decoding

The library supports parsing floating point CAN signals as well as booleans.

uint64_t payload = 0xeb00000000000000;
float float_result = eightbyte_parse_float(payload,
        2, // starting bit
        4, // width of the signal's field
        1001.0, // transformation factor for the signal value
        -30000.0); // transformation offset for the signal value
// float_result == -19990.0

bool bool_result = eightbyte_parse_bool(payload,
        0, // starting bit
        1, // width of the signal's field
        1.0, // transformation factor for the signal value
        0); // transformation offset for the signal value
// bool_result == true

Testing

The library includes a test suite that uses the check C unit test library. It requires the unit testing library check.

$ make test

You can also see the test coverage if you have lcov installed and the BROWSER environment variable set to your choice of web browsers:

$ BROWSER=google-chrome-stable make coverage

Authors

Chris Peplin [email protected]

License

Copyright (c) 2013 Ford Motor Company

Licensed under the BSD license.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.