TELECOMMAND MANAGER V1

Dependencies:   mbed SLCD mbed-rtos

main.cpp

Committer:
shreeshas95
Date:
2015-06-24
Revision:
4:f95195748a0c
Parent:
3:eec1097c0dd6
Child:
5:a5a5300d7d49

File content as of revision 4:f95195748a0c:

#include "mbed.h"

#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{
    
    TC_list *Head_node = NULL;
    
    int rx_state = 0;
    /*
     * 0 : idle
     * 1 : Rx interrupt received, saving data
     * 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"
#include "SND_TM.h"
#include "MNG_TC.h"
#include "COM_RCV_TC.h"

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(){
    ledr = 1;
    
    PC.baud(9600);
    
    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 == 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");
            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;
            }
        }
    }
}