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