Search the Community
Showing results for tags 'crc16'.
-
Hi I have this code in C(and I don't understand it ) Is there someone that can help me translate it to labview? Thanks in advance. Bjarne typedef uint16_t (*bit_order_16)(uint16_t); typedef uint8_t (*bit_order_8)(uint8_t); uint16_t straight_16(uint16_t value) { return value; } uint16_t reverse_16(uint16_t value) { uint16_t reversed = 0; for (int i = 0; i < 16; ++i) { reversed <<= 1; reversed |= value & 0x1; value >>= 1; } return reversed; } uint8_t straight_8(uint8_t value) { return value; } uint8_t reverse_8(uint8_t value) { uint8_t reversed = 0; for (int i = 0; i < 8; ++i) { reversed <<= 1; reversed |= value & 0x1; value >>= 1; } return reversed; } uint16_t crc16(uint8_t const *message, int nBytes, bit_order_8 data_order, bit_order_16 remainder_order, uint16_t remainder, uint16_t polynomial) { for (int byte = 0; byte < nBytes; ++byte) { remainder ^= (data_order(message[byte]) << 8); for (uint8_t bit = 8; bit > 0; --bit) { if (remainder & 0x8000) { remainder = (remainder << 1) ^ polynomial; } else { remainder = (remainder << 1); } } } return remainder_order(remainder); } uint16_t crc16ss(uint8_t const *message, int nBytes, uint16_t initial, uint16_t poly) { return crc16(message, nBytes, straight_8, straight_16, initial, poly); } uint16_t crc16rr(uint8_t const *message, int nBytes, uint16_t initial, uint16_t poly) { return crc16(message, nBytes, reverse_8, reverse_16, initial, poly); } uint16_t crc16rs(uint8_t const *message, int nBytes, uint16_t initial, uint16_t poly) { return crc16(message, nBytes, reverse_8, straight_16, initial, poly); }