APP 4

Dependencies:   mbed CRC16 mbed-rtos

Committer:
manl2003
Date:
Tue Feb 23 21:15:05 2016 +0000
Revision:
27:011ad1667040
Parent:
26:f2b37f9dfca9
Tout beau, mef inclue.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
vinbel93 26:f2b37f9dfca9 1 // Vincent Bélanger et Laurent Mandrile
vinbel93 26:f2b37f9dfca9 2 // belv1802 - manl2003
vinbel93 26:f2b37f9dfca9 3
manl2003 7:733d500dbe5c 4 #include "Frame.h"
vinbel93 9:b937f9c6d682 5 #include "CRC16.h"
manl2003 7:733d500dbe5c 6
manl2003 7:733d500dbe5c 7 #pragma once
manl2003 7:733d500dbe5c 8
vinbel93 26:f2b37f9dfca9 9 // Fonction de construction de trame
vinbel93 20:f0932bfe09ed 10 bitset<FRAMESIZE> buildFrame(bitset<MAX_DATA> data, char size)
manl2003 7:733d500dbe5c 11 {
manl2003 7:733d500dbe5c 12 bitset<FRAMESIZE> bitset;
manl2003 7:733d500dbe5c 13
vinbel93 9:b937f9c6d682 14 // Preambule 01010101
vinbel93 9:b937f9c6d682 15 bitset.set(0, 0);
vinbel93 9:b937f9c6d682 16 bitset.set(1, 1);
vinbel93 9:b937f9c6d682 17 bitset.set(2, 0);
vinbel93 9:b937f9c6d682 18 bitset.set(3, 1);
vinbel93 9:b937f9c6d682 19 bitset.set(4, 0);
vinbel93 9:b937f9c6d682 20 bitset.set(5, 1);
vinbel93 9:b937f9c6d682 21 bitset.set(6, 0);
vinbel93 9:b937f9c6d682 22 bitset.set(7, 1);
vinbel93 9:b937f9c6d682 23
vinbel93 9:b937f9c6d682 24 // Start 01111110
vinbel93 9:b937f9c6d682 25 bitset.set(8, 0);
vinbel93 9:b937f9c6d682 26 bitset.set(9, 1);
vinbel93 9:b937f9c6d682 27 bitset.set(10, 1);
vinbel93 9:b937f9c6d682 28 bitset.set(11, 1);
vinbel93 9:b937f9c6d682 29 bitset.set(12, 1);
vinbel93 9:b937f9c6d682 30 bitset.set(13, 1);
vinbel93 9:b937f9c6d682 31 bitset.set(14, 1);
vinbel93 9:b937f9c6d682 32 bitset.set(15, 0);
manl2003 7:733d500dbe5c 33
vinbel93 26:f2b37f9dfca9 34 // 8 bits non utilisés
manl2003 7:733d500dbe5c 35
vinbel93 26:f2b37f9dfca9 36 // Longueur
vinbel93 9:b937f9c6d682 37 bitset.set(24, size & 0b10000000);
vinbel93 9:b937f9c6d682 38 bitset.set(25, size & 0b01000000);
vinbel93 9:b937f9c6d682 39 bitset.set(26, size & 0b00100000);
vinbel93 9:b937f9c6d682 40 bitset.set(27, size & 0b00010000);
vinbel93 9:b937f9c6d682 41 bitset.set(28, size & 0b00001000);
vinbel93 9:b937f9c6d682 42 bitset.set(29, size & 0b00000100);
vinbel93 9:b937f9c6d682 43 bitset.set(30, size & 0b00000010);
vinbel93 9:b937f9c6d682 44 bitset.set(31, size & 0b00000001);
vinbel93 9:b937f9c6d682 45
vinbel93 26:f2b37f9dfca9 46 // Insertion des données utiles
vinbel93 9:b937f9c6d682 47 char payload[size];
vinbel93 9:b937f9c6d682 48 for (int i = 0; i < size * 8; i++)
vinbel93 9:b937f9c6d682 49 {
vinbel93 9:b937f9c6d682 50 bitset.set(32 + i, data[i]);
vinbel93 9:b937f9c6d682 51
vinbel93 9:b937f9c6d682 52 if ((i % 8) == 0)
vinbel93 9:b937f9c6d682 53 {
vinbel93 26:f2b37f9dfca9 54 // Conversion en octets pour le calcul du CRC16
vinbel93 9:b937f9c6d682 55 payload[i / 8] = (data[i] << 7) | (data[i + 1] << 6) | (data[i + 2] << 5) | (data[i + 3] << 4) | (data[i + 4] << 3) | (data[i + 5] << 2) | (data[i + 6] << 1) | (data[i + 7] << 0);
vinbel93 9:b937f9c6d682 56 }
vinbel93 9:b937f9c6d682 57 }
vinbel93 9:b937f9c6d682 58
vinbel93 26:f2b37f9dfca9 59 // Calcul du CRC16
vinbel93 20:f0932bfe09ed 60 unsigned short crc = CRC16::calculateCRC16(payload, size);
vinbel93 9:b937f9c6d682 61 int counter = 32 + size*8;
vinbel93 9:b937f9c6d682 62
vinbel93 26:f2b37f9dfca9 63 // Ajout du CRC
vinbel93 9:b937f9c6d682 64 bitset.set(counter, crc & 0b1000000000000000);
vinbel93 9:b937f9c6d682 65 bitset.set(counter+1, crc & 0b0100000000000000);
vinbel93 9:b937f9c6d682 66 bitset.set(counter+2, crc & 0b0010000000000000);
vinbel93 9:b937f9c6d682 67 bitset.set(counter+3, crc & 0b0001000000000000);
vinbel93 9:b937f9c6d682 68 bitset.set(counter+4, crc & 0b0000100000000000);
vinbel93 9:b937f9c6d682 69 bitset.set(counter+5, crc & 0b0000010000000000);
vinbel93 9:b937f9c6d682 70 bitset.set(counter+6, crc & 0b0000001000000000);
vinbel93 9:b937f9c6d682 71 bitset.set(counter+7, crc & 0b0000000100000000);
vinbel93 9:b937f9c6d682 72 bitset.set(counter+8, crc & 0b0000000010000000);
vinbel93 9:b937f9c6d682 73 bitset.set(counter+9, crc & 0b0000000001000000);
vinbel93 9:b937f9c6d682 74 bitset.set(counter+10, crc & 0b0000000000100000);
vinbel93 9:b937f9c6d682 75 bitset.set(counter+11, crc & 0b0000000000010000);
vinbel93 9:b937f9c6d682 76 bitset.set(counter+12, crc & 0b0000000000001000);
vinbel93 9:b937f9c6d682 77 bitset.set(counter+13, crc & 0b0000000000000100);
vinbel93 9:b937f9c6d682 78 bitset.set(counter+14, crc & 0b0000000000000010);
vinbel93 9:b937f9c6d682 79 bitset.set(counter+15, crc & 0b0000000000000001);
manl2003 7:733d500dbe5c 80
vinbel93 9:b937f9c6d682 81 // End
vinbel93 9:b937f9c6d682 82 bitset.set(counter+16, 0);
vinbel93 9:b937f9c6d682 83 bitset.set(counter+17, 1);
vinbel93 9:b937f9c6d682 84 bitset.set(counter+18, 1);
vinbel93 9:b937f9c6d682 85 bitset.set(counter+19, 1);
vinbel93 9:b937f9c6d682 86 bitset.set(counter+20, 1);
vinbel93 9:b937f9c6d682 87 bitset.set(counter+21, 1);
vinbel93 9:b937f9c6d682 88 bitset.set(counter+22, 1);
vinbel93 9:b937f9c6d682 89 bitset.set(counter+23, 0);
vinbel93 9:b937f9c6d682 90
vinbel93 20:f0932bfe09ed 91 return bitset.flip();
vinbel93 9:b937f9c6d682 92 }
vinbel93 9:b937f9c6d682 93
vinbel93 26:f2b37f9dfca9 94 // Fonction de conversion d'octets en bits
vinbel93 20:f0932bfe09ed 95 bitset<MAX_DATA> convertToBits(char* message, char size)
vinbel93 9:b937f9c6d682 96 {
vinbel93 9:b937f9c6d682 97 bitset<MAX_DATA> bitset;
vinbel93 9:b937f9c6d682 98
vinbel93 9:b937f9c6d682 99 for (int i = 0; i < size; i++)
manl2003 7:733d500dbe5c 100 {
vinbel93 9:b937f9c6d682 101 bitset.set(8*i, message[i] & 0b10000000);
vinbel93 9:b937f9c6d682 102 bitset.set(8*i+1, message[i] & 0b01000000);
vinbel93 9:b937f9c6d682 103 bitset.set(8*i+2, message[i] & 0b00100000);
vinbel93 9:b937f9c6d682 104 bitset.set(8*i+3, message[i] & 0b00010000);
vinbel93 9:b937f9c6d682 105 bitset.set(8*i+4, message[i] & 0b00001000);
vinbel93 9:b937f9c6d682 106 bitset.set(8*i+5, message[i] & 0b00000100);
vinbel93 9:b937f9c6d682 107 bitset.set(8*i+6, message[i] & 0b00000010);
vinbel93 9:b937f9c6d682 108 bitset.set(8*i+7, message[i] & 0b00000001);
manl2003 7:733d500dbe5c 109 }
vinbel93 9:b937f9c6d682 110
vinbel93 9:b937f9c6d682 111 return bitset;
vinbel93 9:b937f9c6d682 112 }