crc_t crc = 0;
crc = crc_update(crc, bitmap[0] << start, 32 - start);
crc = crc_update(crc, bitmap[1], 32);
- crc = crc_update(crc, bitmap[2], end - 64 > 32 ? 32 : end - 64);
+ 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);
}
(!!(frame->can_id & CAN_RTR_FLAG)) << 6 |
0 << 4 |
frame->can_dlc & 0xf;
- bitmap[2] = htonl(((uint32_t*)frame->data)[0]);
- bitmap[3] = htonl(((uint32_t*)frame->data)[1]);
+ memcpy(&bitmap[2], &frame->data, frame->can_dlc);
start = 27;
end = 64 + 8*frame->can_dlc;
} else {
(!!(frame->can_id & CAN_RTR_FLAG)) << 6 |
0 << 4 |
frame->can_dlc & 0xf;
- bitmap[1] = htonl(((uint32_t*)frame->data)[0]);
- bitmap[2] = htonl(((uint32_t*)frame->data)[1]);
+ memcpy(&bitmap[1], &frame->data, frame->can_dlc);
start = 13;
end = 32 + 8*frame->can_dlc;
}