APP4 S5

Dependencies:   mbed-rtos mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers crc.cpp Source File

crc.cpp

00001 
00002 #include "crc.h"
00003 
00004 #define POSSIBLE_VALUES 256
00005 
00006 char crc_table[POSSIBLE_VALUES];
00007 
00008 void init_crc_module()
00009 {
00010     /* iteration sur toutes la valeurs possible de CRC pour le valeurs de byte possible */
00011     for (int i = 0; i < POSSIBLE_VALUES; i++)
00012     {
00013         char current_byte = (char)i;
00014         /* calcul de la valeur de CRC pour le byte actuel a l'aide des operations bit a bit avec XOR */
00015         for (char bit = 0; bit < 8; bit++)
00016         {
00017             /* lorsque la valeur du MSB est 1, on execute le XOR en plus du decalage */
00018             if ((current_byte & 0x80) != 0)
00019             {
00020                 current_byte = current_byte << 1;
00021                 current_byte ^= CRC_GEN_NUM;
00022             }
00023             else
00024             {
00025                 current_byte = current_byte << 1;
00026             }
00027         }
00028         /* en ajoute cette valeur a la table des valeurs pre calculees */
00029         crc_table[i] = current_byte;
00030     }
00031 }
00032 
00033 char get_crc_value(char* buffer, int buffer_length)
00034 {
00035     char crc = 0;
00036     for (int i = 0; i < buffer_length; i++)
00037     {
00038         /* get current CRC value = remainder */
00039         crc = crc_table[buffer[i] ^ crc];
00040     }
00041 
00042     return crc;
00043 }