633 solution updated for mbed os 54

Fork of Task633Solution-mbedos54 by Stage-1 Students SoCEM

Revision:
11:0dd6d5a87d77
Parent:
10:3a3d2a571c8f
Child:
12:6441be7b83c2
--- a/main.cpp	Tue Mar 22 13:40:05 2016 +0000
+++ b/main.cpp	Tue May 03 08:53:09 2016 +0000
@@ -43,13 +43,18 @@
 };
  
 //Memory Pool - with capacity for 16 message_t types
-MemoryPool<message_t, 16> mpool;
+//MemoryPool<message_t, 16> mpool;
 
 //Message queue - matched to the memory pool
-Queue<message_t, 16> queue;
+//Queue<message_t, 16> queue;
+
+//Mail queue
+Mail<message_t, 16> mail_box;
+
 
 // Call this on precise intervals
 void adcISR() {
+
     
     //Read sample - make a copy
     float sample = adcIn;
@@ -58,9 +63,10 @@
     uint32_t switch2State = sw2;
     
     //Allocate a block from the memory pool
-    message_t *message = mpool.alloc();
+    message_t *message = mail_box.alloc();
     if (message == NULL) {
         //Out of memory
+        printf("Out of memory\n\r");
         redLED = 1;
         return;   
     }
@@ -71,39 +77,55 @@
     message->sw2State = switch2State;
     
     //Write to queue
-    osStatus stat = queue.put(message);    //Note we are sending the "pointer"
+    osStatus stat = mail_box.put(message);    //Note we are sending the "pointer"
     
     //Check if succesful
     if (stat == osErrorResource) {
         redLED = 1; 
         printf("queue->put() Error code: %4Xh, Resource not available\r\n", stat);   
-        mpool.free(message);
+        mail_box.free(message);
         return;
     }
+    
+    
 }
 
 //Normal priority thread (consumer)
 void thread1( const void* arg ) 
-{      
+{
+    static int count = 0;
+          
     while (true) {
         //Block on the queue
-        osEvent evt = queue.get();
+        osEvent evt = mail_box.get();
         
         //Check status
-        if (evt.status == osEventMessage) {
+        if (evt.status == osEventMail) {
             message_t *pMessage = (message_t*)evt.value.p;  //This is the pointer (address)
             //Make a copy
             message_t msg(pMessage->adcValue, pMessage->sw1State, pMessage->sw2State);
             //We are done with this, so give back the memory to the pool
-            mpool.free(pMessage);
+            mail_box.free(pMessage);
             
             //Echo to the terminal
             printf("ADC Value: %.2f\t",    msg.adcValue);
             printf("SW1: %u\t",             msg.sw1State);
             printf("SW2: %u\n\r",             msg.sw2State);
-        }
-
-             
+            
+            //Update state
+            if ((msg.sw1State == 1) && (msg.sw2State == 1)) {
+                count++;
+            } else {
+                count = 0;   
+            }
+            if (count == 10) {
+                greenLED = !greenLED;
+                count = 0;    
+            }
+        } else {
+            printf("ERROR: %x\n\r", evt.status);   
+        }  
+     
     } //end while
 }