APP 4

Dependencies:   mbed CRC16 mbed-rtos

Revision:
24:e307f6aad106
Parent:
23:d41a23d8f2d7
--- a/APP.cpp	Tue Feb 23 14:50:48 2016 +0000
+++ b/APP.cpp	Tue Feb 23 15:57:09 2016 +0000
@@ -28,6 +28,9 @@
 int bufferCounter = 0;
 bool firstBit = true;
 STATES tempState = NOSTATE;
+Mail<Message, 16> mailBox;
+Mutex mute;
+bool sendMessageReady;
 
 int benchmark(void (*function) (void))
 {
@@ -40,19 +43,23 @@
 {
     if ((LPC_TIM1->IR & 0x01) == 0x01) // if MR0 interrupt, proceed
     {
-        clockTick = !clockTick;
-        out = encode(message[counter], clockTick);
 
-        if (clockTick)
+        if(sendMessageReady)
         {
-            counter++;
+            clockTick = !clockTick;
+            out = encode(message[counter], clockTick);
+    
+            if (clockTick)
+            {
+                counter++;
+            }
+    
+            if (counter >= 56+messageLength*8)
+            {
+                counter = 0;
+                sendMessageReady = false;
+            }
         }
-
-        if (counter >= 56+messageLength*8)
-        {
-            counter = 0;
-        }
-        
         LPC_TIM1->IR |= 1 << 0;        // Clear MR0 interrupt flag
     }
 }
@@ -123,12 +130,15 @@
     LPC_TIM2->TCR = 1;                      // start Timer
 }
 
+
+
 int main()
 {
-    message = buildFrame(convertToBits("BLUB", messageLength), messageLength);    
+    //message = buildFrame(convertToBits("BLUB", messageLength), messageLength);    
 
     LPC_PINCON->PINSEL0 |= (3 << 8);   // P0.4 = CAP2.0
     initTimers();
+    Thread term(terminal);
 
     while (true)
     {
@@ -146,6 +156,19 @@
             dataReady = false;
         }
         
+        osEvent evt = mailBox.get();
+        if (evt.status == osEventMail) 
+        {
+            mute.lock();
+            // écriture de l'événement en sortie (port série)
+            Message *mail = (Message*)evt.value.p;
+            messageLength = mail->size;
+            pc.printf("Envoie de %i bytes, %c \r\n", messageLength, mail->buffer[0]);
+            message = buildFrame(convertToBits(mail->buffer, messageLength), messageLength);
+            mailBox.free(mail);
+            sendMessageReady = true;
+            mute.unlock();
+        }    
         
         
         #if DEBUG
@@ -154,11 +177,6 @@
     }
 }
 
-void bSToChar(bitset<8> bs)
-{
-       
-}
-
 void _decodeCallback(bitset<MAX_DATA> decMessage, int size)
 {
     decodedMessage = decMessage;
@@ -208,3 +226,37 @@
         swag = false;
     }
 }
+
+void terminal(void const *args)
+{
+    char messageBuffer[80];
+    int bufferCounter = 0;
+    char temp;
+    while(true)
+    {
+        if(pc.readable())
+        {
+            temp = pc.getc();
+            if(temp == 0x0D)
+            {      
+                pc.printf("Debug send %c , %i\r\n", messageBuffer[0], bufferCounter);          
+                mute.lock();
+                
+                Message * mes = mailBox.alloc();                
+                memcpy(mes->buffer, messageBuffer, bufferCounter);
+                mes->size = bufferCounter;                
+                mailBox.put(mes);
+                
+                mute.unlock();
+                
+                bufferCounter = 0;
+            }
+            else
+            {
+                pc.printf("%c", temp);
+                messageBuffer[bufferCounter] = temp;
+                bufferCounter++;
+            }
+        }
+    }    
+}