TELECOMMAND MANAGER V1

Dependencies:   mbed SLCD mbed-rtos

Revision:
4:f95195748a0c
Parent:
3:eec1097c0dd6
Child:
5:a5a5300d7d49
--- a/main.cpp	Wed Jun 24 05:59:14 2015 +0000
+++ b/main.cpp	Wed Jun 24 12:04:43 2015 +0000
@@ -1,20 +1,22 @@
 #include "mbed.h"
 
-#include <bitset>
-#include <iostream>
-using namespace std;
-
+#define TIMEOUT_LIMIT 15
 
 Serial PC(USBTX, USBRX);
+Serial rx1m(PTE0, PTE1);
 
 DigitalOut ledr(LED_RED);
 DigitalOut ledg(LED_GREEN);
 
 #include "Structures.h"
 
+struct data_list{
+   char val;
+   struct data_list* next;
+};
+
 namespace VAR_SPACE{
     
-    unsigned char *data = 0;
     TC_list *Head_node = NULL;
     
     int rx_state = 0;
@@ -24,8 +26,15 @@
      * 2 : interrupt handled, RX_RCV_TX running
      * 3 : RX_RCV_TC handled, MNG_TM_TC handled
      */
+   
+    struct data_list *head_data;
+    data_list *data_node;
 }
 
+unsigned int rx_bytes = 0;
+Timer rx_timer;
+struct data_list *rx_new_node;
+
 #include "mbed.h"
 
 #include "crc.h"
@@ -33,54 +42,65 @@
 #include "MNG_TC.h"
 #include "COM_RCV_TC.h"
 
-using namespace VAR_SPACE;
+void callback() {
+    //~ store value
+    rx_new_node->val = rx1m.getc();
+
+    //~ allocate new node
+    rx_new_node->next = new data_list;
+    rx_new_node = rx_new_node->next;
+    rx_new_node->next = NULL;
+
+    rx_timer.stop();
+    rx_timer.start();
+
+    ++rx_bytes;
+    VAR_SPACE::rx_state = 1;
+}
 
 int main(){
-    printf("WELCOME\r\n");
+    ledr = 1;
     
     PC.baud(9600);
     
-    VAR_SPACE::data = new unsigned char[26];
-    
-    data[0] = 0x7E;
-    data[1] = 0x01;
-    data[2] = 0x81;
-    data[3] = 0x88;
-    for(int i =4; i <=9; i++)
-            data[i] = 0x88;
-    data[10] = 0xc0;
-    data[11] = 0x79;
-    data[12] = 0x7E;
-    data[13] = 0x02;
-    data[14] = 0xA1;
-    data[15] = 0x88;
-    for(int i = 16;i <= 21; i++)
-            data[i] = 0x88;
-    data[22] = 0x96;
-    data[23] = 0x55;
-    data[24] = 0x7E;
-    data[25] = 0x7E;
-    
-    VAR_SPACE::rx_state = 2;
+    rx1m.baud(1200);
+    rx1m.attach(&callback);
+    VAR_SPACE::head_data = new data_list;
+    rx_new_node = VAR_SPACE::head_data;
     
     while(true){
         ledg = !ledg;
         
-        if( VAR_SPACE::rx_state == 2 ){
-            printf("Calling rcv_tc\r\n");
+        if(VAR_SPACE::rx_state == 1){
+            
+            if( rx_timer.read() > TIMEOUT_LIMIT ){
+                //~ TIMEOUT REACHED MOVE ON TO RX_RCV_TC
+                VAR_SPACE::rx_state = 2;
+            }
+            
+        }
+        else if( VAR_SPACE::rx_state == 2 ){
+//            printf("Calling rcv_tc\r\n");
+            VAR_SPACE::data_node = VAR_SPACE::head_data;
             RCV_TC::RX_RCV_TC();
             VAR_SPACE::rx_state = 3;
             
         }
         else if( VAR_SPACE::rx_state == 3 ){
             
-            printf("calling mng tc\r\n");
+//            printf("calling mng tc\r\n");
             MNG_TC::init( VAR_SPACE::Head_node );
             MNG_TC::start_with();
             
             VAR_SPACE::rx_state = 0;
             
+            //~ delete linked list
+            rx_new_node = VAR_SPACE::head_data;
+            while(rx_new_node != NULL){
+                data_list *temp = rx_new_node;
+                rx_new_node = rx_new_node->next;
+                delete temp;
+            }
         }
-        wait_ms(10);
     }
 }