Simplify writing CRC to the bitmap
authorMichal Sojka <sojkam1@fel.cvut.cz>
Wed, 6 Nov 2013 18:00:48 +0000 (19:00 +0100)
committerMichal Sojka <sojkam1@fel.cvut.cz>
Wed, 6 Nov 2013 18:00:48 +0000 (19:00 +0100)
latester/latester.c

index 0906760..6f4aefd 100644 (file)
@@ -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);