TELECOMMAND MANAGER V1

Dependencies:   mbed SLCD mbed-rtos

main.cpp

Committer:
shreeshas95
Date:
2015-07-04
Revision:
6:6e9ae3b44e60
Parent:
5:a5a5300d7d49
Child:
7:e71ecfe3a340

File content as of revision 6:6e9ae3b44e60:

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

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

using namespace VAR_SPACE;

int main(){
    printf("welcome to mng_tm_tc\r\n");
    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;
    
    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;
    
    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);
                
                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;
                }
            }
            
        }
        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");
        }
    }
}