/* * eth_checksum.c * * Created on: 13 мар. 2023 г. * Author: sychev */ #include "ethernet_ip/eth_checksum.h" uint16_t eth_calcChksum(uint32_t sum, uint8_t * const data, uint16_t len) { uint16_t i; uint16_t size = len - 1; if ( !len ) return 0; for ( i = 0; i < size; i+=2 ) sum += ((uint16_t)data[i] << 8) + data[i+1]; if (len & 0x01) sum += (uint16_t)data[i] << 8; while ( sum >> 16 ) sum = (sum & 0xFFFF) + (sum >> 16); return ~sum; }