Dummy program to demonstrate problems: working code

Dependencies:   SLCD mbed-rtos mbed

Fork of MNG_TC by Shreesha S

main.cpp

Committer:
shreeshas95
Date:
2015-07-06
Revision:
7:e71ecfe3a340
Parent:
6:6e9ae3b44e60
Child:
8:cb93c1d3209a

File content as of revision 7:e71ecfe3a340:

#include "mbed.h"
#include "rtos.h"
#define ENDL "\r" << endl

#include "SLCD.h"
SLCD lcd;

#define TIMEOUT_LIMIT 1
#define MAX_NUM_LIST 4  

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{
    
    TC_list *Head_node1;
    TC_list *Head_node2;
    
    bool rx_emergency = false;
    
    /*
     * 0 : idle
     * 1 : RCV_TC running
     * 2 : RCV_TC handled, MNG_TM_TC running
     */
   
    struct data_list *head_data;
    struct data_list *data_node;
    struct data_list *rx_new_node;
        
    Thread *Com_mng_tc_thread;
}

Timer rx_timer;
bool data_received = false;

#include "mbed.h"
#include "crc.h"
#include "COM_RCV_TC.h"
#include "SND_TM.h"
#include "MNG_TC.h"

void rx_read(){
    //~ store value
    VAR_SPACE::rx_new_node->val = rx1m.getc();

    //~ allocate new node
    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.reset();
    data_received = true;
}

int main(){
    printf("welcome to mng_tm_tc\r\n");
    ledr = 1;
    
    PC.baud(9600);
    
    // rx stuff
    rx1m.baud(1200);
    rx1m.attach(&rx_read);
    VAR_SPACE::head_data = new data_list;
    VAR_SPACE::rx_new_node = VAR_SPACE::head_data;
    VAR_SPACE::rx_new_node->next = NULL;
    
    while(true){
        
        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;
                
                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;
            }
        }
        
        ledg = !ledg;
        Thread::wait(1000);
    }
}