APP 4

Dependencies:   mbed CRC16 mbed-rtos

Committer:
manl2003
Date:
Mon Feb 22 16:56:48 2016 +0000
Revision:
12:715af3660c73
Parent:
9:b937f9c6d682
Child:
20:f0932bfe09ed
Premi?re it?ration de la MEF

Who changed what in which revision?

UserRevisionLine numberNew contents of line
manl2003 7:733d500dbe5c 1 #include "Frame.h"
vinbel93 9:b937f9c6d682 2 #include "CRC16.h"
manl2003 7:733d500dbe5c 3
manl2003 12:715af3660c73 4
manl2003 7:733d500dbe5c 5 #pragma once
manl2003 7:733d500dbe5c 6
vinbel93 9:b937f9c6d682 7 bitset<FRAMESIZE> buildFrame(bitset<MAX_DATA> data, char size, Serial* pc)
manl2003 7:733d500dbe5c 8 {
manl2003 7:733d500dbe5c 9 bitset<FRAMESIZE> bitset;
manl2003 7:733d500dbe5c 10
vinbel93 9:b937f9c6d682 11 // Preambule 01010101
vinbel93 9:b937f9c6d682 12 bitset.set(0, 0);
vinbel93 9:b937f9c6d682 13 bitset.set(1, 1);
vinbel93 9:b937f9c6d682 14 bitset.set(2, 0);
vinbel93 9:b937f9c6d682 15 bitset.set(3, 1);
vinbel93 9:b937f9c6d682 16 bitset.set(4, 0);
vinbel93 9:b937f9c6d682 17 bitset.set(5, 1);
vinbel93 9:b937f9c6d682 18 bitset.set(6, 0);
vinbel93 9:b937f9c6d682 19 bitset.set(7, 1);
vinbel93 9:b937f9c6d682 20
vinbel93 9:b937f9c6d682 21 // Start 01111110
vinbel93 9:b937f9c6d682 22 bitset.set(8, 0);
vinbel93 9:b937f9c6d682 23 bitset.set(9, 1);
vinbel93 9:b937f9c6d682 24 bitset.set(10, 1);
vinbel93 9:b937f9c6d682 25 bitset.set(11, 1);
vinbel93 9:b937f9c6d682 26 bitset.set(12, 1);
vinbel93 9:b937f9c6d682 27 bitset.set(13, 1);
vinbel93 9:b937f9c6d682 28 bitset.set(14, 1);
vinbel93 9:b937f9c6d682 29 bitset.set(15, 0);
manl2003 7:733d500dbe5c 30
vinbel93 9:b937f9c6d682 31 // 8 unused bits
manl2003 7:733d500dbe5c 32
vinbel93 9:b937f9c6d682 33 // Length
vinbel93 9:b937f9c6d682 34 bitset.set(24, size & 0b10000000);
vinbel93 9:b937f9c6d682 35 bitset.set(25, size & 0b01000000);
vinbel93 9:b937f9c6d682 36 bitset.set(26, size & 0b00100000);
vinbel93 9:b937f9c6d682 37 bitset.set(27, size & 0b00010000);
vinbel93 9:b937f9c6d682 38 bitset.set(28, size & 0b00001000);
vinbel93 9:b937f9c6d682 39 bitset.set(29, size & 0b00000100);
vinbel93 9:b937f9c6d682 40 bitset.set(30, size & 0b00000010);
vinbel93 9:b937f9c6d682 41 bitset.set(31, size & 0b00000001);
vinbel93 9:b937f9c6d682 42
vinbel93 9:b937f9c6d682 43 char payload[size];
vinbel93 9:b937f9c6d682 44 for (int i = 0; i < size * 8; i++)
vinbel93 9:b937f9c6d682 45 {
vinbel93 9:b937f9c6d682 46 bitset.set(32 + i, data[i]);
vinbel93 9:b937f9c6d682 47
vinbel93 9:b937f9c6d682 48 if ((i % 8) == 0)
vinbel93 9:b937f9c6d682 49 {
vinbel93 9:b937f9c6d682 50 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 51 }
vinbel93 9:b937f9c6d682 52 }
vinbel93 9:b937f9c6d682 53
vinbel93 9:b937f9c6d682 54 CRC16 crc16;
vinbel93 9:b937f9c6d682 55 unsigned short crc = crc16.calculateCRC16(payload, size);
vinbel93 9:b937f9c6d682 56 int counter = 32 + size*8;
vinbel93 9:b937f9c6d682 57
vinbel93 9:b937f9c6d682 58 // CRC
vinbel93 9:b937f9c6d682 59 bitset.set(counter, crc & 0b1000000000000000);
vinbel93 9:b937f9c6d682 60 bitset.set(counter+1, crc & 0b0100000000000000);
vinbel93 9:b937f9c6d682 61 bitset.set(counter+2, crc & 0b0010000000000000);
vinbel93 9:b937f9c6d682 62 bitset.set(counter+3, crc & 0b0001000000000000);
vinbel93 9:b937f9c6d682 63 bitset.set(counter+4, crc & 0b0000100000000000);
vinbel93 9:b937f9c6d682 64 bitset.set(counter+5, crc & 0b0000010000000000);
vinbel93 9:b937f9c6d682 65 bitset.set(counter+6, crc & 0b0000001000000000);
vinbel93 9:b937f9c6d682 66 bitset.set(counter+7, crc & 0b0000000100000000);
vinbel93 9:b937f9c6d682 67 bitset.set(counter+8, crc & 0b0000000010000000);
vinbel93 9:b937f9c6d682 68 bitset.set(counter+9, crc & 0b0000000001000000);
vinbel93 9:b937f9c6d682 69 bitset.set(counter+10, crc & 0b0000000000100000);
vinbel93 9:b937f9c6d682 70 bitset.set(counter+11, crc & 0b0000000000010000);
vinbel93 9:b937f9c6d682 71 bitset.set(counter+12, crc & 0b0000000000001000);
vinbel93 9:b937f9c6d682 72 bitset.set(counter+13, crc & 0b0000000000000100);
vinbel93 9:b937f9c6d682 73 bitset.set(counter+14, crc & 0b0000000000000010);
vinbel93 9:b937f9c6d682 74 bitset.set(counter+15, crc & 0b0000000000000001);
manl2003 7:733d500dbe5c 75
vinbel93 9:b937f9c6d682 76 // End
vinbel93 9:b937f9c6d682 77 bitset.set(counter+16, 0);
vinbel93 9:b937f9c6d682 78 bitset.set(counter+17, 1);
vinbel93 9:b937f9c6d682 79 bitset.set(counter+18, 1);
vinbel93 9:b937f9c6d682 80 bitset.set(counter+19, 1);
vinbel93 9:b937f9c6d682 81 bitset.set(counter+20, 1);
vinbel93 9:b937f9c6d682 82 bitset.set(counter+21, 1);
vinbel93 9:b937f9c6d682 83 bitset.set(counter+22, 1);
vinbel93 9:b937f9c6d682 84 bitset.set(counter+23, 0);
vinbel93 9:b937f9c6d682 85
vinbel93 9:b937f9c6d682 86 return bitset;
vinbel93 9:b937f9c6d682 87 }
vinbel93 9:b937f9c6d682 88
vinbel93 9:b937f9c6d682 89 bitset<MAX_DATA> convertToBits(char* message, char size, Serial* pc)
vinbel93 9:b937f9c6d682 90 {
vinbel93 9:b937f9c6d682 91 bitset<MAX_DATA> bitset;
vinbel93 9:b937f9c6d682 92
vinbel93 9:b937f9c6d682 93 for (int i = 0; i < size; i++)
manl2003 7:733d500dbe5c 94 {
vinbel93 9:b937f9c6d682 95 bitset.set(8*i, message[i] & 0b10000000);
vinbel93 9:b937f9c6d682 96 bitset.set(8*i+1, message[i] & 0b01000000);
vinbel93 9:b937f9c6d682 97 bitset.set(8*i+2, message[i] & 0b00100000);
vinbel93 9:b937f9c6d682 98 bitset.set(8*i+3, message[i] & 0b00010000);
vinbel93 9:b937f9c6d682 99 bitset.set(8*i+4, message[i] & 0b00001000);
vinbel93 9:b937f9c6d682 100 bitset.set(8*i+5, message[i] & 0b00000100);
vinbel93 9:b937f9c6d682 101 bitset.set(8*i+6, message[i] & 0b00000010);
vinbel93 9:b937f9c6d682 102 bitset.set(8*i+7, message[i] & 0b00000001);
manl2003 7:733d500dbe5c 103 }
vinbel93 9:b937f9c6d682 104
vinbel93 9:b937f9c6d682 105 return bitset;
vinbel93 9:b937f9c6d682 106 }