#include <stdio.
h>
#include <stdint.h>
#include <string.h>
// CRC-8 calculation using polynomial 0x07
uint8_t crc8(const uint8_t *data, size_t len) {
uint8_t crc = 0x00; // Initial value
uint8_t poly = 0x07; // Polynomial: x^8 + x^2 + x + 1
for (size_t i = 0; i < len; i++) {
crc ^= data[i];
for (uint8_t bit = 0; bit < 8; bit++) {
if (crc & 0x80) {
crc = (crc << 1) ^ poly;
} else {
crc <<= 1;
}
}
}
return crc;
}
int main() {
// Example formatted data (excluding $ and #, unless required by protocol)
const char *payload = "|H:123.456|12|X:1|2|Y:3|4|5|6|";
// Calculate CRC over the data
uint8_t crc_result = crc8((const uint8_t *)payload, strlen(payload));
// Print result in hex format
printf("CRC-8: %02X\n", crc_result);
// If you want to build a final message with CRC at the end
printf("$%s*%02X#\n", payload, crc_result);
return 0;
}