APP4 S5

Dependencies:   mbed-rtos mbed

Committer:
Cheroukee
Date:
Sun Oct 22 20:20:42 2017 +0000
Revision:
13:b44c1f678aff
Needs testing, added CRC calculations and adapted queue code to work with radio

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Cheroukee 13:b44c1f678aff 1
Cheroukee 13:b44c1f678aff 2 #include "crc.h"
Cheroukee 13:b44c1f678aff 3
Cheroukee 13:b44c1f678aff 4 #define POSSIBLE_VALUES 256
Cheroukee 13:b44c1f678aff 5
Cheroukee 13:b44c1f678aff 6 char crc_table[POSSIBLE_VALUES];
Cheroukee 13:b44c1f678aff 7
Cheroukee 13:b44c1f678aff 8 void init_crc_module()
Cheroukee 13:b44c1f678aff 9 {
Cheroukee 13:b44c1f678aff 10 /* iteration sur toutes la valeurs possible de CRC pour le valeurs de byte possible */
Cheroukee 13:b44c1f678aff 11 for (int i = 0; i < POSSIBLE_VALUES; i++)
Cheroukee 13:b44c1f678aff 12 {
Cheroukee 13:b44c1f678aff 13 char current_byte = (char)i;
Cheroukee 13:b44c1f678aff 14 /* calcul de la valeur de CRC pour le byte actuel a l'aide des operations bit a bit avec XOR */
Cheroukee 13:b44c1f678aff 15 for (char bit = 0; bit < 8; bit++)
Cheroukee 13:b44c1f678aff 16 {
Cheroukee 13:b44c1f678aff 17 /* lorsque la valeur du MSB est 1, on execute le XOR en plus du decalage */
Cheroukee 13:b44c1f678aff 18 if ((current_byte & 0x80) != 0)
Cheroukee 13:b44c1f678aff 19 {
Cheroukee 13:b44c1f678aff 20 current_byte = current_byte << 1;
Cheroukee 13:b44c1f678aff 21 current_byte ^= CRC_GEN_NUM;
Cheroukee 13:b44c1f678aff 22 }
Cheroukee 13:b44c1f678aff 23 else
Cheroukee 13:b44c1f678aff 24 {
Cheroukee 13:b44c1f678aff 25 current_byte = current_byte << 1;
Cheroukee 13:b44c1f678aff 26 }
Cheroukee 13:b44c1f678aff 27 }
Cheroukee 13:b44c1f678aff 28 /* en ajoute cette valeur a la table des valeurs pre calculees */
Cheroukee 13:b44c1f678aff 29 crc_table[i] = current_byte;
Cheroukee 13:b44c1f678aff 30 }
Cheroukee 13:b44c1f678aff 31 }
Cheroukee 13:b44c1f678aff 32
Cheroukee 13:b44c1f678aff 33 char get_crc_value(char* buffer, int buffer_length)
Cheroukee 13:b44c1f678aff 34 {
Cheroukee 13:b44c1f678aff 35 char crc = 0;
Cheroukee 13:b44c1f678aff 36 for (int i = 0; i < buffer_length; i++)
Cheroukee 13:b44c1f678aff 37 {
Cheroukee 13:b44c1f678aff 38 /* get current CRC value = remainder */
Cheroukee 13:b44c1f678aff 39 crc = crc_table[buffer[i] ^ crc];
Cheroukee 13:b44c1f678aff 40 }
Cheroukee 13:b44c1f678aff 41
Cheroukee 13:b44c1f678aff 42 return crc;
Cheroukee 13:b44c1f678aff 43 }