Team Fox / Mbed 2 deprecated BAE_QM_MAR9

Dependencies:   FreescaleIAP mbed-rtos mbed

Fork of workinQM_5thJan_azad by Team Fox

Committer:
lakshya
Date:
Sat Jun 04 11:29:13 2016 +0000
Revision:
19:79e69017c855
Parent:
3:07e15677a75c
Child:
20:949d13045431
before going home

Who changed what in which revision?

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