lele

Dependencies:   mbed

Committer:
krishanprajapat
Date:
Fri Jul 31 12:52:23 2015 +0000
Revision:
1:90fd52655154
Parent:
0:984643af7d81
bro working fine and Sframe and EoS is also done , so put peace;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
krishanprajapat 0:984643af7d81 1 //EDITS
krishanprajapat 0:984643af7d81 2 //changed the initial remainder from 0x0000 to 0xffff according to the standards
krishanprajapat 0:984643af7d81 3 //made two seperate functions crc16_gen and crc8_gen
krishanprajapat 0:984643af7d81 4
krishanprajapat 0:984643af7d81 5 #define TOPBIT16 (1 << 15)
krishanprajapat 0:984643af7d81 6 #define TOPBIT8 (1 << 7)
krishanprajapat 0:984643af7d81 7 #define POLYNOMIAL16 0x1021
krishanprajapat 0:984643af7d81 8 #define POLYNOMIAL8 0xEA
krishanprajapat 0:984643af7d81 9
krishanprajapat 0:984643af7d81 10 namespace CRC{
krishanprajapat 0:984643af7d81 11 typedef unsigned short int crctype16;
krishanprajapat 0:984643af7d81 12 crctype16 crc16_gen(const unsigned char message[], unsigned int nBytes){
krishanprajapat 0:984643af7d81 13 crctype16 remainder = 0xffff;
krishanprajapat 0:984643af7d81 14 int byte;
krishanprajapat 0:984643af7d81 15 char bit;
krishanprajapat 0:984643af7d81 16
krishanprajapat 0:984643af7d81 17 for( byte = 0 ; byte < nBytes ; byte++ ){
krishanprajapat 0:984643af7d81 18 /*
krishanprajapat 0:984643af7d81 19 Bring the data byte by byte
krishanprajapat 0:984643af7d81 20 each time only one byte is brought
krishanprajapat 0:984643af7d81 21 0 xor x = x
krishanprajapat 0:984643af7d81 22 */
krishanprajapat 0:984643af7d81 23 remainder = remainder ^ ( message[byte] << 8 );
krishanprajapat 0:984643af7d81 24
krishanprajapat 0:984643af7d81 25 for( bit = 8 ; bit > 0 ; bit--){
krishanprajapat 0:984643af7d81 26 /*
krishanprajapat 0:984643af7d81 27 for each bit, xor the remainder with polynomial
krishanprajapat 0:984643af7d81 28 if the MSB is 1
krishanprajapat 0:984643af7d81 29 */
krishanprajapat 0:984643af7d81 30 if(remainder & TOPBIT16){
krishanprajapat 0:984643af7d81 31 remainder = (remainder << 1) ^ POLYNOMIAL16;
krishanprajapat 0:984643af7d81 32 /*
krishanprajapat 0:984643af7d81 33 each time the remainder is xor-ed with polynomial, the MSB is made zero
krishanprajapat 0:984643af7d81 34 hence the first digit of the remainder is ignored in the loop
krishanprajapat 0:984643af7d81 35 */
krishanprajapat 0:984643af7d81 36 }
krishanprajapat 0:984643af7d81 37 else{
krishanprajapat 0:984643af7d81 38 remainder = (remainder << 1);
krishanprajapat 0:984643af7d81 39 }
krishanprajapat 0:984643af7d81 40 }
krishanprajapat 0:984643af7d81 41 }
krishanprajapat 0:984643af7d81 42
krishanprajapat 0:984643af7d81 43 return remainder;
krishanprajapat 0:984643af7d81 44 }
krishanprajapat 0:984643af7d81 45
krishanprajapat 0:984643af7d81 46 typedef unsigned char crctype8;
krishanprajapat 0:984643af7d81 47 crctype8 crc8_gen(const unsigned char message[], unsigned int nBytes){
krishanprajapat 0:984643af7d81 48
krishanprajapat 0:984643af7d81 49 crctype8 remainder = 0xff;
krishanprajapat 0:984643af7d81 50
krishanprajapat 0:984643af7d81 51 for(int byte = 0 ; byte < nBytes ; byte++ ){
krishanprajapat 0:984643af7d81 52 /*
krishanprajapat 0:984643af7d81 53 Bring the data byte by byte
krishanprajapat 0:984643af7d81 54 each time only one byte is brought
krishanprajapat 0:984643af7d81 55 0 xor x = x
krishanprajapat 0:984643af7d81 56 */
krishanprajapat 0:984643af7d81 57 remainder = remainder ^ ( message[byte] );
krishanprajapat 0:984643af7d81 58
krishanprajapat 0:984643af7d81 59 for(int bit = 8 ; bit > 0 ; bit--){
krishanprajapat 0:984643af7d81 60 /*
krishanprajapat 0:984643af7d81 61 for each bit, xor the remainder with polynomial
krishanprajapat 0:984643af7d81 62 if the MSB is 1
krishanprajapat 0:984643af7d81 63 */
krishanprajapat 0:984643af7d81 64 if(remainder & TOPBIT8){
krishanprajapat 0:984643af7d81 65 remainder = (remainder << 1) ^ POLYNOMIAL8;
krishanprajapat 0:984643af7d81 66 /*
krishanprajapat 0:984643af7d81 67 each time the remainder is xor-ed with polynomial, the MSB is made zero
krishanprajapat 0:984643af7d81 68 hence the first digit of the remainder is ignored in the loop
krishanprajapat 0:984643af7d81 69 */
krishanprajapat 0:984643af7d81 70 }
krishanprajapat 0:984643af7d81 71 else{
krishanprajapat 0:984643af7d81 72 remainder = (remainder << 1);
krishanprajapat 0:984643af7d81 73 }
krishanprajapat 0:984643af7d81 74 }
krishanprajapat 0:984643af7d81 75 }
krishanprajapat 0:984643af7d81 76
krishanprajapat 0:984643af7d81 77 return remainder;
krishanprajapat 0:984643af7d81 78 }
krishanprajapat 0:984643af7d81 79 }
krishanprajapat 0:984643af7d81 80