#include static uint32_t do_crc(uint32_t init, uint32_t data) { uint32_t crc = init; uint32_t cnt; for (cnt=0; cnt < 32; cnt++) { crc = ((int32_t)(crc ^ data))<0 ? (crc << 1) ^ 0x04C11DB7 : crc << 1; data <<=1; } return crc; } uint32_t calculate_stm_crc(uint32_t *data, size_t len) { uint32_t crc = ~0U; while (len--) { crc = do_crc(crc, *data++); } return crc; }