APP 4

Dependencies:   mbed CRC16 mbed-rtos

Revision:
20:f0932bfe09ed
Parent:
19:41e914ab0d19
Child:
21:137d010e7469
Child:
22:b855dbf3a8c1
Child:
23:d41a23d8f2d7
--- a/APP.cpp	Mon Feb 22 18:38:53 2016 +0000
+++ b/APP.cpp	Tue Feb 23 00:22:49 2016 +0000
@@ -8,17 +8,21 @@
 DigitalIn in(p30);
 
 bool clockTick = false;
-bitset<FRAMESIZE> message;// (string("1010101010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"));
+bitset<FRAMESIZE> message;
 bitset<MAX_DATA> decodedMessage;
+int debugMessage;
+bool debugMessageReady = false;
 bool dataReady;
 bool frameDropped; 
 int counter = 0;
 unsigned int period = 0;
-bool readBuffer[2] = {false, false};
-bool readBufferReady = false;
+unsigned int currentClocks = 0;
+bool periodCalculated = false;
+bool firstBit = true;
 bool value = false;
 MEF mef;
 STATES mefSTATE;
+int payloadSize = 0;
 
 int benchmark(void (*function) (void))
 {
@@ -33,7 +37,7 @@
     {
         LPC_TIM1->IR |= 1 << 0;        // Clear MR0 interrupt flag
         clockTick = !clockTick;
-        out = encode(message[counter] & 0x1, clockTick);
+        out = encode(message[counter], clockTick);
 
         if (clockTick)
         {
@@ -42,7 +46,7 @@
 
         if (counter >= FRAMESIZE)
         {
-            counter = 0;
+            LPC_TIM1->MR0 = 1000000000;
         }
     }
 }
@@ -50,20 +54,34 @@
 extern "C" void TIMER2_IRQHandler()
 {
     unsigned int clocks = LPC_TIM2->CR0;
-    period = clocks;    // preambule 01010101
+    bool inputValue = in.read();
 
-    if (!readBufferReady)
+    // Discard first bit
+    if (!periodCalculated && !firstBit)
     {
-        readBuffer[0] = in.read();
+        period = clocks / 2;
+        periodCalculated = true;
     }
-    else
+    
+    if (firstBit)
     {
-        readBuffer[1] = in.read();
-        value = decode(readBuffer[0], readBuffer[1]);
-        mef.ReceiveBit(value);
+        mef.ReceiveBit(!inputValue);
+        firstBit = false;
     }
 
-    readBufferReady = !readBufferReady;
+    if (periodCalculated)
+    {
+        if (clocks >= period*1.5 || (currentClocks + clocks) >= period*1.5)
+        {
+            currentClocks = 0;
+            mef.ReceiveBit(!inputValue);
+        }
+        else
+        {
+            currentClocks += clocks;
+        }
+    }
+
     LPC_TIM2->TC = 0;
 
     LPC_TIM2->IR |= 0xFFFFFFFF;     // clear Timer interrupt register
@@ -74,7 +92,7 @@
     //Timer 1 (match)
     LPC_SC->PCLKSEL0 |= (1 << 4);           // pclk = cclk timer1
     LPC_SC->PCONP |= (1 << 2);              // timer1 power on
-    LPC_TIM1->MR0 = CLOCKS_TO_SECOND / 10;  // 100 ms
+    LPC_TIM1->MR0 = CLOCKS_TO_SECOND / 1000;  // 100 ms
     LPC_TIM1->MCR = 3;                      // interrupt and reset control
                                             // Interrupt & reset timer on match
     LPC_TIM1->EMR = (3 << 4);
@@ -97,7 +115,7 @@
 
 int main()
 {
-    message = buildFrame(convertToBits("ASDF", 4, &pc), 4, &pc);
+    message = buildFrame(convertToBits("BLUBLUBLUBLUBLU", 17), 17);    
 
     LPC_PINCON->PINSEL0 |= (3 << 8);   // P0.4 = CAP2.0
     initTimers();
@@ -106,24 +124,44 @@
     {
         if (dataReady)
         {
-            pc.printf("ASDF");
+            for (int i = 0; i < payloadSize * 8; i++)
+            {
+                
+                if((i + 1) % 8 == 0)
+                {
+                    char tempChar = (decodedMessage[i] << 0) | (decodedMessage[i - 1] << 1) | (decodedMessage[i - 2] << 2) | (decodedMessage[i - 3] << 3) | (decodedMessage[i - 4] << 4) | (decodedMessage[i - 5] << 5) | (decodedMessage[i - 6] << 6) | (decodedMessage[i - 7] << 7);
+                    pc.printf("%c", tempChar);        
+                }
+            }
+            dataReady = false;
         }
         if (tempState != mefSTATE)
         {
-            pc.printf("BluBlu new state: %i \r\n", mefSTATE);
+            pc.printf("\r\nNew state: %i \r\n", mefSTATE);
             tempState = mefSTATE;
         }
-        pc.printf("%i ", period);
-        pc.printf("%i ", value);
-        pc.printf("%i \r\n", in.read());
-        //pc.printf("%i ", decode(in.read(), clockTick));
-        wait(0.1);
+        if(frameDropped)
+        {
+            pc.printf("Frame dropped\r\n");
+            frameDropped = false;    
+        }
+        if(debugMessageReady)
+        {
+            pc.printf("%i\r\n", debugMessage);
+            debugMessageReady = false;
+        }
     }
 }
 
-void _decodeCallback(bitset<MAX_DATA> decMessage)
+void bSToChar(bitset<8> bs)
+{
+       
+}
+
+void _decodeCallback(bitset<MAX_DATA> decMessage, int size)
 {
     decodedMessage = decMessage;
+    payloadSize = size;
     dataReady = true;
 }
 
@@ -137,7 +175,8 @@
     mefSTATE = state;
 }
 
-void _readDephased()
+void _mefDebug(int blu)
 {
-    readBufferReady = !readBufferReady;
-}
\ No newline at end of file
+    debugMessage = blu;
+    debugMessageReady = true;
+}