diff --git a/libuavcan/include/uavcan/data_type.hpp b/libuavcan/include/uavcan/data_type.hpp index 642845136c..bfb2f58e79 100644 --- a/libuavcan/include/uavcan/data_type.hpp +++ b/libuavcan/include/uavcan/data_type.hpp @@ -67,33 +67,13 @@ class UAVCAN_EXPORT DataTypeSignatureCRC uint64_t crc_; public: - static DataTypeSignatureCRC extend(uint64_t crc) - { - DataTypeSignatureCRC ret; - ret.crc_ = crc ^ 0xFFFFFFFFFFFFFFFF; - return ret; - } + static DataTypeSignatureCRC extend(uint64_t crc); DataTypeSignatureCRC() : crc_(0xFFFFFFFFFFFFFFFF) { } - void add(uint8_t byte) - { - static const uint64_t Poly = 0x42F0E1EBA9EA3693; - crc_ ^= uint64_t(byte) << 56; - for (int i = 0; i < 8; i++) - { - crc_ = (crc_ & (uint64_t(1) << 63)) ? (crc_ << 1) ^ Poly : crc_ << 1; - } - } + void add(uint8_t byte); - void add(const uint8_t* bytes, unsigned len) - { - assert(bytes); - while (len--) - { - add(*bytes++); - } - } + void add(const uint8_t* bytes, unsigned len); uint64_t get() const { return crc_ ^ 0xFFFFFFFFFFFFFFFF; } }; diff --git a/libuavcan/src/uc_data_type.cpp b/libuavcan/src/uc_data_type.cpp index d5418c528a..6c71cb9bcf 100644 --- a/libuavcan/src/uc_data_type.cpp +++ b/libuavcan/src/uc_data_type.cpp @@ -9,6 +9,35 @@ namespace uavcan { +/* + * DataTypeSignatureCRC + */ +DataTypeSignatureCRC DataTypeSignatureCRC::extend(uint64_t crc) +{ + DataTypeSignatureCRC ret; + ret.crc_ = crc ^ 0xFFFFFFFFFFFFFFFF; + return ret; +} + +void DataTypeSignatureCRC::add(uint8_t byte) +{ + static const uint64_t Poly = 0x42F0E1EBA9EA3693; + crc_ ^= uint64_t(byte) << 56; + for (int i = 0; i < 8; i++) + { + crc_ = (crc_ & (uint64_t(1) << 63)) ? (crc_ << 1) ^ Poly : crc_ << 1; + } +} + +void DataTypeSignatureCRC::add(const uint8_t* bytes, unsigned len) +{ + assert(bytes); + while (len--) + { + add(*bytes++); + } +} + /* * DataTypeSignature */