TELECOMMAND MANAGER V1

Dependencies:   mbed SLCD mbed-rtos

main.cpp

Committer:
shreeshas95
Date:
2015-06-25
Revision:
5:a5a5300d7d49
Parent:
4:f95195748a0c
Child:
6:6e9ae3b44e60

File content as of revision 5:a5a5300d7d49:

#include "mbed.h"

#include "SLCD.h"
SLCD lcd;

#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;
    
//    remove
//    unsigned char *data;
}

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;
}

//remove
//void pc_isr(){
//    PC.attach(NULL);
//    VAR_SPACE::rx_state = 1;
//    rx_timer.start();
//}

//using namespace VAR_SPACE;

int main(){
//    printf("welcome to mng_tm_tc\r\n");
    ledr = 1;
    
    PC.baud(9600);
//    PC.attach(&pc_isr);
    
    rx1m.baud(1200);
    rx1m.attach(&callback);
    VAR_SPACE::head_data = new data_list;
    rx_new_node = VAR_SPACE::head_data;
    
    
//    remove
//    VAR_SPACE::data = new unsigned char[100];
    
//    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;
    
    
    lcd.printf("0");
    
    while(true){
        ledg = !ledg;
        
        if(VAR_SPACE::rx_state == 1){
            lcd.printf("01");
            
//            remove
//            while( rx_timer.read() < 15 ){
//                if( PC.readable() ){
//                    VAR_SPACE::data[bytes] = PC.getc();
//                }
//            }
//            PC.attach(&pc_isr);
//            VAR_SPACE::rx_state = 2;
//            endremove

            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);
            }
            
        }
        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");
        }
    }
}