TELECOMMAND MANAGER V1

Dependencies:   mbed SLCD mbed-rtos

Committer:
shreeshas95
Date:
Mon Jul 13 10:21:45 2015 +0000
Revision:
8:cb93c1d3209a
Parent:
7:e71ecfe3a340
Child:
9:934fdce72b3d
Child:
10:024c2ef51cb1
everything except snd_tm working : update snd tm

Who changed what in which revision?

UserRevisionLine numberNew contents of line
shreeshas95 3:eec1097c0dd6 1 #include "mbed.h"
shreeshas95 6:6e9ae3b44e60 2 #define ENDL "\r" << endl
shreeshas95 2:994e741028c7 3
shreeshas95 5:a5a5300d7d49 4 #include "SLCD.h"
shreeshas95 5:a5a5300d7d49 5 SLCD lcd;
shreeshas95 5:a5a5300d7d49 6
shreeshas95 8:cb93c1d3209a 7 #define RX_TIMEOUT_LIMIT 2
shreeshas95 8:cb93c1d3209a 8 #define PASS_TIME_LIMIT 1200
shreeshas95 3:eec1097c0dd6 9
shreeshas95 3:eec1097c0dd6 10 Serial PC(USBTX, USBRX);
shreeshas95 4:f95195748a0c 11 Serial rx1m(PTE0, PTE1);
shreeshas95 2:994e741028c7 12
shreeshas95 2:994e741028c7 13 DigitalOut ledr(LED_RED);
shreeshas95 2:994e741028c7 14 DigitalOut ledg(LED_GREEN);
shreeshas95 2:994e741028c7 15
shreeshas95 3:eec1097c0dd6 16 #include "Structures.h"
shreeshas95 2:994e741028c7 17
shreeshas95 4:f95195748a0c 18 struct data_list{
shreeshas95 8:cb93c1d3209a 19 unsigned char val;
shreeshas95 4:f95195748a0c 20 struct data_list* next;
shreeshas95 4:f95195748a0c 21 };
shreeshas95 4:f95195748a0c 22
shreeshas95 3:eec1097c0dd6 23 namespace VAR_SPACE{
shreeshas95 3:eec1097c0dd6 24
shreeshas95 8:cb93c1d3209a 25 TC_list *Head_node = NULL;
shreeshas95 8:cb93c1d3209a 26 TC_list *last_node = NULL;
shreeshas95 3:eec1097c0dd6 27
shreeshas95 8:cb93c1d3209a 28 int rx_state = 0;
shreeshas95 3:eec1097c0dd6 29 /*
shreeshas95 8:cb93c1d3209a 30 0 : idle
shreeshas95 8:cb93c1d3209a 31 1 : executing normal
shreeshas95 8:cb93c1d3209a 32 2 : executing obosc
shreeshas95 8:cb93c1d3209a 33 3 : idle 2 : obosc received incorrectly
shreeshas95 8:cb93c1d3209a 34 */
shreeshas95 8:cb93c1d3209a 35
shreeshas95 4:f95195748a0c 36 struct data_list *head_data;
shreeshas95 8:cb93c1d3209a 37 data_list *data_node;
shreeshas95 7:e71ecfe3a340 38 struct data_list *rx_new_node;
shreeshas95 8:cb93c1d3209a 39
shreeshas95 8:cb93c1d3209a 40 bool new_tc_received = false;
shreeshas95 8:cb93c1d3209a 41 bool execute_obosc = false;
shreeshas95 8:cb93c1d3209a 42
shreeshas95 2:994e741028c7 43 }
shreeshas95 2:994e741028c7 44
shreeshas95 8:cb93c1d3209a 45 Timeout rx_timeout;
shreeshas95 8:cb93c1d3209a 46 bool pass_over = false;
shreeshas95 8:cb93c1d3209a 47 bool first_time = true;
shreeshas95 8:cb93c1d3209a 48 Timeout pass_time;
shreeshas95 4:f95195748a0c 49
shreeshas95 3:eec1097c0dd6 50 #include "crc.h"
shreeshas95 8:cb93c1d3209a 51 #include "SND_TM.h"
shreeshas95 7:e71ecfe3a340 52 #include "COM_RCV_TC.h"
shreeshas95 3:eec1097c0dd6 53 #include "MNG_TC.h"
shreeshas95 3:eec1097c0dd6 54
shreeshas95 8:cb93c1d3209a 55 void after_pass(){
shreeshas95 8:cb93c1d3209a 56 pass_time.detach();
shreeshas95 8:cb93c1d3209a 57 pass_over = true;
shreeshas95 8:cb93c1d3209a 58 }
shreeshas95 8:cb93c1d3209a 59
shreeshas95 8:cb93c1d3209a 60 void after_receive(void){
shreeshas95 8:cb93c1d3209a 61 rx_timeout.detach();
shreeshas95 8:cb93c1d3209a 62 VAR_SPACE::rx_new_node->val = 0x00;
shreeshas95 8:cb93c1d3209a 63
shreeshas95 8:cb93c1d3209a 64 VAR_SPACE::new_tc_received = true;
shreeshas95 8:cb93c1d3209a 65
shreeshas95 8:cb93c1d3209a 66 if(first_time){
shreeshas95 8:cb93c1d3209a 67 first_time = false;
shreeshas95 8:cb93c1d3209a 68 pass_time.attach(&after_pass, PASS_TIME_LIMIT);
shreeshas95 8:cb93c1d3209a 69 }
shreeshas95 8:cb93c1d3209a 70 }
shreeshas95 8:cb93c1d3209a 71
shreeshas95 8:cb93c1d3209a 72 void rx_read() {
shreeshas95 4:f95195748a0c 73 //~ store value
shreeshas95 7:e71ecfe3a340 74 VAR_SPACE::rx_new_node->val = rx1m.getc();
shreeshas95 4:f95195748a0c 75
shreeshas95 4:f95195748a0c 76 //~ allocate new node
shreeshas95 8:cb93c1d3209a 77 VAR_SPACE::rx_new_node->next = new data_list;
shreeshas95 7:e71ecfe3a340 78 VAR_SPACE::rx_new_node = VAR_SPACE::rx_new_node->next;
shreeshas95 7:e71ecfe3a340 79 VAR_SPACE::rx_new_node->next = NULL;
shreeshas95 4:f95195748a0c 80
shreeshas95 8:cb93c1d3209a 81 rx_timeout.attach(&after_receive, RX_TIMEOUT_LIMIT);
shreeshas95 8:cb93c1d3209a 82 }
shreeshas95 8:cb93c1d3209a 83
shreeshas95 8:cb93c1d3209a 84 void reset_all(){
shreeshas95 8:cb93c1d3209a 85 printf("resetting all\r\n");
shreeshas95 8:cb93c1d3209a 86 // reset MNG_TC
shreeshas95 8:cb93c1d3209a 87 MNG_TC::init();
shreeshas95 8:cb93c1d3209a 88 TC_list *tcp = VAR_SPACE::Head_node;
shreeshas95 8:cb93c1d3209a 89 while(tcp != NULL){
shreeshas95 8:cb93c1d3209a 90 TC_list *temp = tcp->next_TC;
shreeshas95 8:cb93c1d3209a 91 delete tcp;
shreeshas95 8:cb93c1d3209a 92 tcp = temp;
shreeshas95 8:cb93c1d3209a 93 }
shreeshas95 8:cb93c1d3209a 94
shreeshas95 8:cb93c1d3209a 95 // reset COM_RCV_TC
shreeshas95 8:cb93c1d3209a 96 // handle reset
shreeshas95 8:cb93c1d3209a 97
shreeshas95 8:cb93c1d3209a 98 // reset data linked list
shreeshas95 8:cb93c1d3209a 99 data_list *dataptr = VAR_SPACE::head_data;
shreeshas95 8:cb93c1d3209a 100 while( dataptr != NULL ){
shreeshas95 8:cb93c1d3209a 101 data_list *temp = dataptr->next;
shreeshas95 8:cb93c1d3209a 102 delete dataptr;
shreeshas95 8:cb93c1d3209a 103 dataptr = temp;
shreeshas95 8:cb93c1d3209a 104 }
shreeshas95 8:cb93c1d3209a 105 VAR_SPACE::head_data = new data_list;
shreeshas95 8:cb93c1d3209a 106 VAR_SPACE::rx_new_node = VAR_SPACE::head_data;
shreeshas95 4:f95195748a0c 107 }
shreeshas95 2:994e741028c7 108
shreeshas95 2:994e741028c7 109 int main(){
shreeshas95 8:cb93c1d3209a 110
shreeshas95 6:6e9ae3b44e60 111 printf("welcome to mng_tm_tc\r\n");
shreeshas95 4:f95195748a0c 112 ledr = 1;
shreeshas95 2:994e741028c7 113
shreeshas95 2:994e741028c7 114 PC.baud(9600);
shreeshas95 3:eec1097c0dd6 115
shreeshas95 4:f95195748a0c 116 rx1m.baud(1200);
shreeshas95 7:e71ecfe3a340 117 rx1m.attach(&rx_read);
shreeshas95 4:f95195748a0c 118 VAR_SPACE::head_data = new data_list;
shreeshas95 8:cb93c1d3209a 119 VAR_SPACE::head_data->next = NULL;
shreeshas95 7:e71ecfe3a340 120 VAR_SPACE::rx_new_node = VAR_SPACE::head_data;
shreeshas95 8:cb93c1d3209a 121
shreeshas95 8:cb93c1d3209a 122 MNG_TC::init();
shreeshas95 8:cb93c1d3209a 123
shreeshas95 8:cb93c1d3209a 124 lcd.printf("0");
shreeshas95 8:cb93c1d3209a 125
shreeshas95 8:cb93c1d3209a 126 struct data_list *hehe = VAR_SPACE::head_data;
shreeshas95 8:cb93c1d3209a 127 while( hehe != NULL ){
shreeshas95 8:cb93c1d3209a 128 printf("%x ", hehe->val);
shreeshas95 8:cb93c1d3209a 129 hehe = hehe->next;
shreeshas95 8:cb93c1d3209a 130 }
shreeshas95 8:cb93c1d3209a 131 printf("\r\n");
shreeshas95 5:a5a5300d7d49 132
shreeshas95 2:994e741028c7 133 while(true){
shreeshas95 8:cb93c1d3209a 134 ledg = !ledg;
shreeshas95 8:cb93c1d3209a 135 if( VAR_SPACE::new_tc_received ){
shreeshas95 8:cb93c1d3209a 136 VAR_SPACE::new_tc_received = false;
shreeshas95 8:cb93c1d3209a 137 struct data_list *haha = VAR_SPACE::head_data;
shreeshas95 8:cb93c1d3209a 138 unsigned int count = 0;
shreeshas95 8:cb93c1d3209a 139 while( haha != NULL ){
shreeshas95 8:cb93c1d3209a 140 ++count;
shreeshas95 8:cb93c1d3209a 141 // printf("%x ", haha->val);
shreeshas95 8:cb93c1d3209a 142 haha = haha->next;
shreeshas95 8:cb93c1d3209a 143 }
shreeshas95 8:cb93c1d3209a 144 printf("\t count = %u \r\n", count);
shreeshas95 8:cb93c1d3209a 145 printf("new tc received : state = %u\r\n", VAR_SPACE::rx_state);
shreeshas95 8:cb93c1d3209a 146 if( VAR_SPACE::rx_state == 0 ){
shreeshas95 8:cb93c1d3209a 147 VAR_SPACE::data_node = VAR_SPACE::head_data;
shreeshas95 8:cb93c1d3209a 148 COM_RCV_TC::rx_rcv_tc();
shreeshas95 8:cb93c1d3209a 149 MNG_TC::start_with();
shreeshas95 8:cb93c1d3209a 150 if( MNG_TC::check_for_missing_TC() ){
shreeshas95 8:cb93c1d3209a 151 printf("everything pass\r\n");
shreeshas95 8:cb93c1d3209a 152 VAR_SPACE::rx_state = 1;
shreeshas95 8:cb93c1d3209a 153 MNG_TC::execute_TC();
shreeshas95 8:cb93c1d3209a 154 }
shreeshas95 8:cb93c1d3209a 155 }
shreeshas95 8:cb93c1d3209a 156 else if( VAR_SPACE::rx_state == 3 ){
shreeshas95 8:cb93c1d3209a 157 VAR_SPACE::data_node = VAR_SPACE::head_data;
shreeshas95 8:cb93c1d3209a 158 COM_RCV_TC::rx_rcv_tc();
shreeshas95 8:cb93c1d3209a 159 MNG_TC::start_with();
shreeshas95 8:cb93c1d3209a 160 if( MNG_TC::check_for_missing_TC() ){
shreeshas95 8:cb93c1d3209a 161 VAR_SPACE::execute_obosc = true;
shreeshas95 8:cb93c1d3209a 162 VAR_SPACE::rx_state = 2;
shreeshas95 8:cb93c1d3209a 163 MNG_TC::execute_TC();
shreeshas95 8:cb93c1d3209a 164 }
shreeshas95 7:e71ecfe3a340 165 }
shreeshas95 7:e71ecfe3a340 166 else{
shreeshas95 8:cb93c1d3209a 167 // invalid state in main found reset
shreeshas95 8:cb93c1d3209a 168 reset_all();
shreeshas95 4:f95195748a0c 169 }
shreeshas95 4:f95195748a0c 170 }
shreeshas95 8:cb93c1d3209a 171 if(pass_over){
shreeshas95 8:cb93c1d3209a 172 pass_over = false;
shreeshas95 8:cb93c1d3209a 173 first_time = true;
shreeshas95 8:cb93c1d3209a 174 // pass got over reset all
shreeshas95 8:cb93c1d3209a 175 reset_all();
shreeshas95 8:cb93c1d3209a 176 //also consider frame_no
shreeshas95 8:cb93c1d3209a 177 }
shreeshas95 0:b5b370873460 178 }
shreeshas95 8:cb93c1d3209a 179 }