/* * common.c * * Created on: 05.10.2011 * Author: Oliver */ #include #include #include #include "net_help.h" uint16_t csum(uint16_t sum, uint8_t *buf, uint16_t len) { int count; uint16_t carry; count = len >> 1; if(count) { if(count) { carry = 0; do { uint16_t t = (*buf << 8) + *(buf+1); count--; buf += 2; sum += carry; sum += t; carry = (t > sum); } while(count); sum += carry; } } if(len & 1) { uint16_t u = (*buf << 8); sum += (*buf << 8); if(sum < u) { sum++; } } return sum; }