typedef unsigned long long int uint64_t;
typedef unsigned long uint32_t;
typedef unsigned short uint16_t;
typedef unsigned char uint8_t;
uint8_t data[64] = {
0x00,0x9A,0x70,0x28,0x3A,0x08,0x41,0x08,0x40,0x00,0x58,0x3C,0x02,0xFE,0x00,0x00,
0x00,0x00,0x00,0x00,0x14,0x5A,0xC0,0x31,0x82,0xFD,0x08,0xEF,0x21,0xF6,0x0E,0x0C,
0x00,0x9A,0x70,0x28,0x3A,0x08,0x41,0x08,0x40,0x00,0x58,0x3C,0x02,0xFE,0x00,0x00,
0x00,0x00,0x00,0x00,0x14,0x5A,0xC0,0x31,0x82,0xFD,0x08,0xEF,0x77,0x5D,0x10,0x01,
};
uint8_t data_ff[] = {
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
};
uint8_t data_00[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
uint32_t func_crc32(uint32_t data, uint32_t crc_init) {
uint32_t crc_poly = 0x04c11db7;
uint32_t refdata = crc_init;
for (uint32_t i = 0; i < 32; i++) {
refdata = (refdata << 1) ^ (((((refdata >> 31) & 0x01) ^
((data >> i) & 0x01)) == 0x01) ? 0xffffffff & crc_poly : 0x00000000 & crc_poly);
}
return refdata;
}
void sn_id(uint8_t * info, uint32_t size) {
uint32_t uuid[4] = {0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF};
for (uint8_t i = 0; i < (size / 16); i += 16) {
uuid[0] = func_crc32(*(uint32_t*)&info[0 * 4 + i], uuid[0]);
uuid[1] = func_crc32(*(uint32_t*)&info[1 * 4 + i], uuid[1]);
uuid[2] = func_crc32(*(uint32_t*)&info[2 * 4 + i], uuid[2]);
uuid[3] = func_crc32(*(uint32_t*)&info[3 * 4 + i], uuid[3]);
printf("|1 UUID: %08X-%08X-%08X-%08X\n", uuid[0], uuid[1], uuid[2], uuid[3]);
}
printf("|2 UUID: %08X-%08X-%08X-%08X\n", uuid[0], uuid[1], uuid[2], uuid[3]);
}
int main () {
uint32_t crc;
for (uint8_t i = 0; i < sizeof(data); i += 16) {
for (uint8_t j = 0; j < 16; j++) {
printf("%02X", data[i+j]);
}
printf("\n");
}
sn_id(data, sizeof(data));
// crc = 0xFFFFFFFF;
// // crc = 0x0000000;
// for (uint32_t i = 0; i < 0x2000; i++) {
// crc = func_crc32(0xFFFFFFFF, crc);
// }
// printf("crc ff %08X\n", crc);
crc = 0xFFFFFFFF;
for (uint32_t i = 0; i < 0x1000; i++) {
crc = func_crc32(0x00000000, crc);
}
printf("crc 00 %08X\n", crc);
crc = 0xFFFFFFFF;
for (uint32_t i = 0; i < 0x2000; i++) {
crc = func_crc32(0x00000000, crc);
}
printf("crc 00 %08X\n", crc);
crc = 0xFFFFFFFF;
for (uint32_t i = 0; i < 0x3000; i++) {
crc = func_crc32(0x00000000, crc);
}
printf("crc 00 %08X\n", crc);
return 0;
}