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