Index: App/Services/Utilities.c =================================================================== diff -u -ra1c9eabfc633bc7e3ef370096b655b87a08e2e52 -r51bfe834c7865d3880f418da17483dd2c51f4b38 --- App/Services/Utilities.c (.../Utilities.c) (revision a1c9eabfc633bc7e3ef370096b655b87a08e2e52) +++ App/Services/Utilities.c (.../Utilities.c) (revision 51bfe834c7865d3880f418da17483dd2c51f4b38) @@ -21,6 +21,7 @@ // ********** private definitions ********** #define INITIAL_CRC16_VAL 0xFFFF +#define INITIAL_CRC08_VAL 0x00 // ********** private data ********** @@ -59,21 +60,41 @@ 0x07bc7,0x6a4e,0x58d5,0x495c,0x3de3,0x2c6a,0x1ef1,0x0f78 }; +const U08 crc8_table[] = { + + 0, 49, 98, 83, 196,245,166,151,185,136,219,234,125,76, 31, 46, + 67, 114,33, 16, 135,182,229,212,250,203,152,169,62, 15, 92, 109, + 134,183,228,213,66, 115,32, 17, 63, 14, 93, 108,251,202,153,168, + 197,244,167,150,1, 48, 99, 82, 124,77, 30, 47, 184,137,218,235, + 61, 12, 95, 110,249,200,155,170,132,181,230,215,64, 113,34, 19, + 126,79, 28, 45, 186,139,216,233,199,246,165,148,3, 50, 97, 80, + 187,138,217,232,127,78, 29, 44, 2, 51, 96, 81, 198,247,164,149, + 248,201,154,171,60, 13, 94, 111,65, 112,35, 18, 133,180,231,214, + 122,75, 24, 41, 190,143,220,237,195,242,161,144,7, 54, 101,84, + 57, 8, 91, 106,253,204,159,174,128,177,226,211,68, 117,38, 23, + 252,205,158,175,56, 9, 90, 107,69, 116,39, 22, 129,176,227,210, + 191,142,221,236,123,74, 25, 40, 6, 55, 100,85, 194,243,160,145, + 71, 118,37, 20, 131,178,225,208,254,207,156,173,58, 11, 88, 105, + 4, 53, 102,87, 192,241,162,147,189,140,223,238,121,72, 27, 42, + 193,240,163,146,5, 52, 103,86, 120,73, 26, 43, 188,141,222,239, + 130,179,224,209,70, 119,36, 21, 59, 10, 89, 104,255,206,157,172 +}; + // ********** private function prototypes ********** /************************************************************************* * @brief crc16 * The crc16 function calculates a 16-bit CRC for a given range of bytes \n - * in memory. + * in memory. Poly = 0x1021. Not reflected. Initial value = 0xFFFF. * @details * Inputs : none * Outputs : none * @param address : pointer to start address of memory range to calculate CRC for * @param len : # of bytes in the memory range to calculate CRC for * @return CRC *************************************************************************/ -U16 crc16( U08 *address, U32 len ) +U16 crc16( const U08 *address, U32 len ) { U16 crc = INITIAL_CRC16_VAL; @@ -97,11 +118,15 @@ * @param len : # of bytes in the memory range to calculate CRC for * @return CRC *************************************************************************/ -U08 crc8( U08 *address, U32 len ) +U08 crc8( const U08 *address, U32 len ) { - U16 crc = 0; + U08 crc = INITIAL_CRC08_VAL; - // TODO - 8-bit CRC algorithm + while ( len-- > 0 ) + { + crc = crc8_table[(*address) ^ crc]; + address++; + } return crc; }