BlinkenArea - GitList
Repositories
Blog
Wiki
flaneth
Code
Commits
Branches
Tags
Search
Tree:
e8658d5
Branches
Tags
master
flaneth
firmware.dartboard
checksum.c
initial commit after making CF identify work
Stefan Schuermans
commited
e8658d5
at 2012-04-15 19:57:57
checksum.c
Blame
History
Raw
/* flaneth - flash and ethernet - dartboard mod * version 0.1 date 2008-11-09 * Copyright (C) 2007-2008 Stefan Schuermans <stefan@schuermans.info> * Copyleft: GNU public license V2 - http://www.gnu.org/copyleft/gpl.html * a BlinkenArea project - http://www.blinkenarea.org/ */ #include "checksum.h" #include "macros.h" #include "nethelp.h" // generate a checksum // also includes Pseudo1 and Pseudo2 in the checksum - set to 0x0000 for normal operation // can also be used to check a checksum (returns 0 if correct) unsigned short Checksum( unsigned char * pData, unsigned short Length, unsigned short Pseudo1, unsigned short Pseudo2 ) // (extern) { unsigned long sum; // sum up data of pseudo header sum = Pseudo1; // convert to 32 bit first sum += Pseudo2; // add full 16 bit words in header for( ; Length >= 2; pData += 2, Length -= 2 ) sum += ntohs( *(unsigned short *)pData ); // add last byte if( Length >= 1 ) sum += (unsigned short)(*pData << 8); // convert sum to one's complement sum sum = (sum & 0x0000FFFF) + (sum >> 16); // add carries (bits 31..16) to sum (bits 15..0) sum = (sum & 0x0000FFFF) + (sum >> 16); // still a carry possible (from last addition) // return complement of one's complement sum return ~(unsigned short)sum; }