APP 4

Dependencies:   mbed CRC16 mbed-rtos

Committer:
vinbel93
Date:
Sun Feb 21 21:40:36 2016 +0000
Revision:
9:b937f9c6d682
Parent:
7:733d500dbe5c
Child:
12:715af3660c73
asdfasdf

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