werwere
Dependencies: FreescaleIAP SimpleDMA mbed-rtos mbed
Fork of COM_MNG_TMTC_SIMPLE_pl123 by
Diff: crc.h
- Revision:
- 0:f016e9e8d48b
- Child:
- 6:79d422d1ed42
diff -r 000000000000 -r f016e9e8d48b crc.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/crc.h Tue Dec 01 10:56:10 2015 +0000 @@ -0,0 +1,77 @@ +//EDITS +//changed the initial remainder from 0x0000 to 0xffff according to the standards +//made two seperate functions crc16_gen and crc8_gen + +#define TOPBIT16 (1 << 15) +#define TOPBIT8 (1 << 7) +#define POLYNOMIAL16 0x1021 +#define POLYNOMIAL8 0xEA + +typedef uint16_t crctype16; +crctype16 crc16_gen(const unsigned char message[], unsigned int nBytes){ + crctype16 remainder = 0xffff; + int byte; + char bit; + + for( byte = 0 ; byte < nBytes ; byte++ ){ + /* + Bring the data byte by byte + each time only one byte is brought + 0 xor x = x + */ + remainder = remainder ^ ( message[byte] << 8 ); + + for( bit = 8 ; bit > 0 ; bit--){ + /* + for each bit, xor the remainder with polynomial + if the MSB is 1 + */ + if(remainder & TOPBIT16){ + remainder = (remainder << 1) ^ POLYNOMIAL16; + /* + each time the remainder is xor-ed with polynomial, the MSB is made zero + hence the first digit of the remainder is ignored in the loop + */ + } + else{ + remainder = (remainder << 1); + } + } + } + + return remainder; +} + +typedef uint8_t crctype8; +crctype8 crc8_gen(const unsigned char message[], unsigned int nBytes){ + + crctype8 remainder = 0xff; + + for(int byte = 0 ; byte < nBytes ; byte++ ){ + /* + Bring the data byte by byte + each time only one byte is brought + 0 xor x = x + */ + remainder = remainder ^ ( message[byte] ); + + for(int bit = 8 ; bit > 0 ; bit--){ + /* + for each bit, xor the remainder with polynomial + if the MSB is 1 + */ + if(remainder & TOPBIT8){ + remainder = (remainder << 1) ^ POLYNOMIAL8; + /* + each time the remainder is xor-ed with polynomial, the MSB is made zero + hence the first digit of the remainder is ignored in the loop + */ + } + else{ + remainder = (remainder << 1); + } + } + } + + return remainder; +} \ No newline at end of file