diff --git a/include/hydrolink/protocol.h b/include/hydrolink/protocol.h index 37b425f..1bbda38 100644 --- a/include/hydrolink/protocol.h +++ b/include/hydrolink/protocol.h @@ -145,6 +145,16 @@ static inline uint16_t crc_xmodem_calculate(const uint8_t *data, uint8_t length) return crc; } +static inline uint16_t hydrolink_calculate_crc(const uint8_t *payload, uint8_t length, uint8_t crc_extra) { + uint16_t crc; + crc_xmodem_init(&crc); + for(int i = 0; i < length; ++i) { + crc_xmodem_accumulate(payload[i], &crc); + } + crc_xmodem_accumulate(crc_extra, &crc); + return crc; +} + void hydrolink_fill_header_and_crc(hydrolink_msg_t *msg, uint8_t msg_id, uint8_t payload_length, uint8_t dst_id, uint8_t src_id, uint8_t crc_extra) { msg->id = msg_id; msg->payload_length = payload_length;