Dummy program to demonstrate problems: working code

Dependencies:   SLCD mbed-rtos mbed

Fork of MNG_TC by Shreesha S

Revision:
7:e71ecfe3a340
Parent:
6:6e9ae3b44e60
Child:
8:cb93c1d3209a
--- a/main.cpp	Sat Jul 04 13:22:07 2015 +0000
+++ b/main.cpp	Mon Jul 06 05:00:29 2015 +0000
@@ -1,10 +1,12 @@
 #include "mbed.h"
+#include "rtos.h"
 #define ENDL "\r" << endl
 
 #include "SLCD.h"
 SLCD lcd;
 
-#define TIMEOUT_LIMIT 15
+#define TIMEOUT_LIMIT 1
+#define MAX_NUM_LIST 4  
 
 Serial PC(USBTX, USBRX);
 Serial rx1m(PTE0, PTE1);
@@ -21,127 +23,83 @@
 
 namespace VAR_SPACE{
     
-    TC_list *Head_node = NULL;
+    TC_list *Head_node1;
+    TC_list *Head_node2;
     
-    int rx_state = 0;
+    bool rx_emergency = false;
+    
     /*
      * 0 : idle
-     * 1 : Rx interrupt received, saving data
-     * 2 : interrupt handled, RX_RCV_TX running
-     * 3 : RX_RCV_TC handled, MNG_TM_TC handled
+     * 1 : RCV_TC running
+     * 2 : RCV_TC handled, MNG_TM_TC running
      */
    
     struct data_list *head_data;
-    data_list *data_node;
-    
-    unsigned char *data;
+    struct data_list *data_node;
+    struct data_list *rx_new_node;
+        
+    Thread *Com_mng_tc_thread;
 }
 
-unsigned int rx_bytes = 0;
 Timer rx_timer;
-struct data_list *rx_new_node;
+bool data_received = false;
 
 #include "mbed.h"
-
 #include "crc.h"
+#include "COM_RCV_TC.h"
 #include "SND_TM.h"
 #include "MNG_TC.h"
-#include "COM_RCV_TC.h"
 
-void callback() {
+void rx_read(){
     //~ store value
-    rx_new_node->val = rx1m.getc();
+    VAR_SPACE::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;
+    VAR_SPACE::rx_new_node->next = new struct data_list;
+    VAR_SPACE::rx_new_node = VAR_SPACE::rx_new_node->next;
+    VAR_SPACE::rx_new_node->next = NULL;
 
-    rx_timer.stop();
-    rx_timer.start();
-
-    ++rx_bytes;
-    VAR_SPACE::rx_state = 1;
+    rx_timer.reset();
+    data_received = true;
 }
 
-using namespace VAR_SPACE;
-
 int main(){
     printf("welcome to mng_tm_tc\r\n");
     ledr = 1;
     
     PC.baud(9600);
     
+    // rx stuff
     rx1m.baud(1200);
-    rx1m.attach(&callback);
+    rx1m.attach(&rx_read);
     VAR_SPACE::head_data = new data_list;
-    rx_new_node = VAR_SPACE::head_data;
-    
-    lcd.printf("0");
-    
-    data = new unsigned char [15];
-    data[0] = 0x7e;
-    data[1] = 0x01;
-    data[2] = 0xa1;
-    data[3] = 0x61;
-    data[4] = 0x01;
-    data[5] = 0x02;
-    data[6] = 0xef;
-    data[7] = 0x96;
-    data[8] = 0x80;
-    data[9] = 0x00;
-    data[10] = 0x4b;
-    data[11] = 0xee;
-    data[12] = 0x9f;
-    data[13] = 0x9f;
-    data[14] = 0x80;
-    
-    VAR_SPACE::rx_state = 2;
+    VAR_SPACE::rx_new_node = VAR_SPACE::head_data;
+    VAR_SPACE::rx_new_node->next = NULL;
     
     while(true){
-        ledg = !ledg;
         
-        if(VAR_SPACE::rx_state == 1){
-            lcd.printf("01");
-            
-            if( rx_timer.read() > TIMEOUT_LIMIT ){
-                //~ TIMEOUT REACHED MOVE ON TO RX_RCV_TC
-                VAR_SPACE::rx_state = 2;
-                lcd.printf("012");
-                printf("received %u bytes\r\n", rx_bytes);
+        if(data_received && ( rx_timer.read() >= TIMEOUT_LIMIT ) ){
+            if( (VAR_SPACE::Com_mng_tc_thread->get_state() == Thread::Inactive) || 
+                (VAR_SPACE::Com_mng_tc_thread->get_state() == Thread::WaitingDelay) ){
+                // inactive or osWaitForever
+                delete VAR_SPACE::Com_mng_tc_thread;
+                VAR_SPACE::Com_mng_tc_thread = new Thread( MNG_MAIN );
+            }
+            else{
+                VAR_SPACE::rx_emergency = true;
                 
-                rx_new_node = VAR_SPACE::head_data;
-                for(int i = 0 ; i < rx_bytes ; ++i){
-                    printf("%02x ", rx_new_node->val);
-                    rx_new_node = rx_new_node->next;
-                }
+                RCV_TC RcvClass( VAR_SPACE::Head_node2 );
+                MNG_TC manager2( VAR_SPACE::Head_node2 );
+
+                manager2.update_valid_TC();
+                manager2.decode_TC();
+                manager2.execute_urgent();
+                
+                VAR_SPACE::rx_emergency = false;
             }
-            
         }
-        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");
-            lcd.printf("0123");
-            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;
-            }
-            printf("successfully sent data\r\n");
-        }
+        
+        ledg = !ledg;
+        Thread::wait(1000);
     }
-}
+}
\ No newline at end of file