APP 4

Dependencies:   mbed CRC16 mbed-rtos

Revision:
9:b937f9c6d682
Parent:
7:733d500dbe5c
Child:
12:715af3660c73
--- a/Frame.cpp	Sun Feb 21 18:58:52 2016 +0000
+++ b/Frame.cpp	Sun Feb 21 21:40:36 2016 +0000
@@ -1,45 +1,105 @@
 #include "Frame.h"
+#include "CRC16.h"
 
 #pragma once
 
-void FrameBuilder(bitset<640> data, char size)
+bitset<FRAMESIZE> buildFrame(bitset<MAX_DATA> data, char size, Serial* pc)
 {
     bitset<FRAMESIZE> bitset;
     
+    // Preambule 01010101
+    bitset.set(0, 0);
+    bitset.set(1, 1);
+    bitset.set(2, 0);
+    bitset.set(3, 1);
+    bitset.set(4, 0);
+    bitset.set(5, 1);
+    bitset.set(6, 0);
+    bitset.set(7, 1);
+
+    // Start 01111110
+    bitset.set(8,  0);
+    bitset.set(9,  1);
+    bitset.set(10, 1);
+    bitset.set(11, 1);
+    bitset.set(12, 1);
+    bitset.set(13, 1);
+    bitset.set(14, 1);
+    bitset.set(15, 0);
     
-    //Préambule 10101010
-    bitset.set(0,1);
-    bitset.set(1,0);
-    bitset.set(2,1);
-    bitset.set(3,0);
-    bitset.set(4,1);
-    bitset.set(5,0);
-    bitset.set(6,1);
-    bitset.set(7,0);
-    //Start 01111110
-    bitset.set(8,0);
-    bitset.set(9,1);
-    bitset.set(10,1);
-    bitset.set(11,1);
-    bitset.set(12,1);
-    bitset.set(13,1);
-    bitset.set(14,1);
-    bitset.set(15,0);
+    // 8 unused bits
     
-    //8 bits de marde
+    // Length
+    bitset.set(24, size & 0b10000000);
+    bitset.set(25, size & 0b01000000);
+    bitset.set(26, size & 0b00100000);
+    bitset.set(27, size & 0b00010000);
+    bitset.set(28, size & 0b00001000);
+    bitset.set(29, size & 0b00000100);
+    bitset.set(30, size & 0b00000010);
+    bitset.set(31, size & 0b00000001);
+
+    char payload[size];
+    for (int i = 0; i < size * 8; i++)
+    {
+        bitset.set(32 + i, data[i]);
+
+        if ((i % 8) == 0)
+        {
+            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);
+        }
+    }
+
+    CRC16 crc16;
+    unsigned short crc = crc16.calculateCRC16(payload, size);
+    int counter = 32 + size*8;
+
+    // CRC
+    bitset.set(counter,    crc & 0b1000000000000000);
+    bitset.set(counter+1,  crc & 0b0100000000000000);
+    bitset.set(counter+2,  crc & 0b0010000000000000);
+    bitset.set(counter+3,  crc & 0b0001000000000000);
+    bitset.set(counter+4,  crc & 0b0000100000000000);
+    bitset.set(counter+5,  crc & 0b0000010000000000);
+    bitset.set(counter+6,  crc & 0b0000001000000000);
+    bitset.set(counter+7,  crc & 0b0000000100000000);
+    bitset.set(counter+8,  crc & 0b0000000010000000);
+    bitset.set(counter+9,  crc & 0b0000000001000000);
+    bitset.set(counter+10, crc & 0b0000000000100000);
+    bitset.set(counter+11, crc & 0b0000000000010000);
+    bitset.set(counter+12, crc & 0b0000000000001000);
+    bitset.set(counter+13, crc & 0b0000000000000100);
+    bitset.set(counter+14, crc & 0b0000000000000010);
+    bitset.set(counter+15, crc & 0b0000000000000001);
     
-    //length
-    bitset.set(23, size & 10000000);
-    bitset.set(24, size & 01000000);
-    bitset.set(25, size & 00100000);
-    bitset.set(26, size & 00010000);
-    bitset.set(27, size & 00001000);
-    bitset.set(28, size & 00000100);
-    bitset.set(29, size & 00000010);
-    bitset.set(30, size & 00000001);
-    
-    for(int i = 0; i < size; i++)
+    // End
+    bitset.set(counter+16, 0);
+    bitset.set(counter+17, 1);
+    bitset.set(counter+18, 1);
+    bitset.set(counter+19, 1);
+    bitset.set(counter+20, 1);
+    bitset.set(counter+21, 1);
+    bitset.set(counter+22, 1);
+    bitset.set(counter+23, 0);
+
+    return bitset;
+}
+
+bitset<MAX_DATA> convertToBits(char* message, char size, Serial* pc)
+{
+    bitset<MAX_DATA> bitset;
+
+    for (int i = 0; i < size; i++)
     {
-        bitset.set(30+i, bitset[i]);    
+        bitset.set(8*i,   message[i] & 0b10000000);
+        bitset.set(8*i+1, message[i] & 0b01000000);
+        bitset.set(8*i+2, message[i] & 0b00100000);
+        bitset.set(8*i+3, message[i] & 0b00010000);
+        bitset.set(8*i+4, message[i] & 0b00001000);
+        bitset.set(8*i+5, message[i] & 0b00000100);
+        bitset.set(8*i+6, message[i] & 0b00000010);
+        bitset.set(8*i+7, message[i] & 0b00000001);
     }
-}
\ No newline at end of file
+
+    return bitset;
+}