From f4ce6d023499d19d641f9f24abbb8eecc23ee50a Mon Sep 17 00:00:00 2001 From: Michal Sojka Date: Wed, 6 Nov 2013 19:00:48 +0100 Subject: [PATCH] Simplify writing CRC to the bitmap --- latester/latester.c | 24 ++++-------------------- 1 file changed, 4 insertions(+), 20 deletions(-) diff --git a/latester/latester.c b/latester/latester.c index 0906760..6f4aefd 100644 --- a/latester/latester.c +++ b/latester/latester.c @@ -204,24 +204,7 @@ uint32_t calc_bitmap_crc(uint32_t *bitmap, unsigned start, unsigned end) crc = crc_update(crc, bitmap[1], 32); crc = crc_update(crc, bitmap[2], end - 64 > 32 ? 32 : end - 64); /* FIXME: This seems to be broken for end < 64 */ crc = crc_update(crc, bitmap[3], end > 96 ? end - 96 : 0); - return (uint32_t)htons(crc << 17); -} - -void write_crc_to_bitmap(uint32_t crc, uint32_t *bitmap, struct can_frame *frame) -{ - unsigned index = frame->can_id & CAN_EFF_FLAG ? 2 : 1; - if (frame->can_dlc < 4) - bitmap[index] |= crc >> (frame->can_dlc*8); - if (frame->can_dlc == 3) - bitmap[index + 1] |= crc << 8; - if (frame->can_dlc >= 4 && frame->can_dlc < 8) - { - bitmap[index + 1] |= crc >> (frame->can_dlc*8); - if (frame->can_dlc == 7) - bitmap[index + 2] = crc << 8; - } - else if (frame->can_dlc == 8) - bitmap[index + 2] = crc; + return crc << 17; } unsigned calc_stuff_bits(struct can_frame *frame) { @@ -269,8 +252,9 @@ unsigned calc_stuff_bits(struct can_frame *frame) { end = 32 + 8*frame->can_dlc; } crc = calc_bitmap_crc(bitmap, start, end); - write_crc_to_bitmap(crc, bitmap, frame); - end += 15; + uint32_t crc_be = htons(crc << 17); + memcpy((char*)bitmap + end/8, &crc_be, 2); /* end is guaranteed to be divisible by 8 */ + end += 15; while (start < end) { mask = basemask >> (start & 0x1f); -- 2.39.2