TELECOMMAND MANAGER V1

Dependencies:   mbed SLCD mbed-rtos

Committer:
shreeshas95
Date:
Thu Jul 16 14:14:41 2015 +0000
Revision:
10:024c2ef51cb1
Parent:
8:cb93c1d3209a
Child:
11:109f16cc35d7
Child:
13:7b27a8e9cbb4
kinda working with threads

Who changed what in which revision?

UserRevisionLine numberNew contents of line
shreeshas95 10:024c2ef51cb1 1 //how to handle interrupt while running other thread ?
shreeshas95 10:024c2ef51cb1 2
shreeshas95 3:eec1097c0dd6 3 #include "mbed.h"
shreeshas95 10:024c2ef51cb1 4 #include "rtos.h"
shreeshas95 6:6e9ae3b44e60 5 #define ENDL "\r" << endl
shreeshas95 2:994e741028c7 6
shreeshas95 5:a5a5300d7d49 7 #include "SLCD.h"
shreeshas95 5:a5a5300d7d49 8 SLCD lcd;
shreeshas95 5:a5a5300d7d49 9
shreeshas95 8:cb93c1d3209a 10 #define RX_TIMEOUT_LIMIT 2
shreeshas95 8:cb93c1d3209a 11 #define PASS_TIME_LIMIT 1200
shreeshas95 3:eec1097c0dd6 12
shreeshas95 3:eec1097c0dd6 13 Serial PC(USBTX, USBRX);
shreeshas95 10:024c2ef51cb1 14 RawSerial rx1m(PTE0, PTE1);
shreeshas95 2:994e741028c7 15
shreeshas95 2:994e741028c7 16 DigitalOut ledr(LED_RED);
shreeshas95 2:994e741028c7 17 DigitalOut ledg(LED_GREEN);
shreeshas95 2:994e741028c7 18
shreeshas95 3:eec1097c0dd6 19 #include "Structures.h"
shreeshas95 2:994e741028c7 20
shreeshas95 4:f95195748a0c 21 struct data_list{
shreeshas95 8:cb93c1d3209a 22 unsigned char val;
shreeshas95 4:f95195748a0c 23 struct data_list* next;
shreeshas95 4:f95195748a0c 24 };
shreeshas95 4:f95195748a0c 25
shreeshas95 3:eec1097c0dd6 26 namespace VAR_SPACE{
shreeshas95 3:eec1097c0dd6 27
shreeshas95 8:cb93c1d3209a 28 TC_list *Head_node = NULL;
shreeshas95 8:cb93c1d3209a 29 TC_list *last_node = NULL;
shreeshas95 3:eec1097c0dd6 30
shreeshas95 8:cb93c1d3209a 31 int rx_state = 0;
shreeshas95 3:eec1097c0dd6 32 /*
shreeshas95 8:cb93c1d3209a 33 0 : idle
shreeshas95 8:cb93c1d3209a 34 1 : executing normal
shreeshas95 8:cb93c1d3209a 35 2 : executing obosc
shreeshas95 8:cb93c1d3209a 36 3 : idle 2 : obosc received incorrectly
shreeshas95 8:cb93c1d3209a 37 */
shreeshas95 8:cb93c1d3209a 38
shreeshas95 4:f95195748a0c 39 struct data_list *head_data;
shreeshas95 8:cb93c1d3209a 40 data_list *data_node;
shreeshas95 7:e71ecfe3a340 41 struct data_list *rx_new_node;
shreeshas95 8:cb93c1d3209a 42
shreeshas95 8:cb93c1d3209a 43 bool new_tc_received = false;
shreeshas95 8:cb93c1d3209a 44 bool execute_obosc = false;
shreeshas95 10:024c2ef51cb1 45
shreeshas95 10:024c2ef51cb1 46 Thread *mng_tmtc_thread = NULL;
shreeshas95 2:994e741028c7 47 }
shreeshas95 2:994e741028c7 48
shreeshas95 8:cb93c1d3209a 49 Timeout rx_timeout;
shreeshas95 8:cb93c1d3209a 50 bool pass_over = false;
shreeshas95 8:cb93c1d3209a 51 bool first_time = true;
shreeshas95 8:cb93c1d3209a 52 Timeout pass_time;
shreeshas95 4:f95195748a0c 53
shreeshas95 3:eec1097c0dd6 54 #include "crc.h"
shreeshas95 8:cb93c1d3209a 55 #include "SND_TM.h"
shreeshas95 7:e71ecfe3a340 56 #include "COM_RCV_TC.h"
shreeshas95 3:eec1097c0dd6 57 #include "MNG_TC.h"
shreeshas95 10:024c2ef51cb1 58 #include "ThreadFunctions.h"
shreeshas95 3:eec1097c0dd6 59
shreeshas95 8:cb93c1d3209a 60 void after_pass(){
shreeshas95 8:cb93c1d3209a 61 pass_time.detach();
shreeshas95 8:cb93c1d3209a 62 pass_over = true;
shreeshas95 8:cb93c1d3209a 63 }
shreeshas95 8:cb93c1d3209a 64
shreeshas95 8:cb93c1d3209a 65 void after_receive(void){
shreeshas95 8:cb93c1d3209a 66 rx_timeout.detach();
shreeshas95 8:cb93c1d3209a 67 VAR_SPACE::rx_new_node->val = 0x00;
shreeshas95 8:cb93c1d3209a 68
shreeshas95 8:cb93c1d3209a 69 if(first_time){
shreeshas95 8:cb93c1d3209a 70 first_time = false;
shreeshas95 8:cb93c1d3209a 71 pass_time.attach(&after_pass, PASS_TIME_LIMIT);
shreeshas95 8:cb93c1d3209a 72 }
shreeshas95 10:024c2ef51cb1 73
shreeshas95 10:024c2ef51cb1 74 VAR_SPACE::new_tc_received = true;
shreeshas95 10:024c2ef51cb1 75 VAR_SPACE::mng_tmtc_thread->signal_set(0x01);
shreeshas95 8:cb93c1d3209a 76 }
shreeshas95 8:cb93c1d3209a 77
shreeshas95 10:024c2ef51cb1 78 unsigned char rx_char = 0;
shreeshas95 10:024c2ef51cb1 79 bool byte_rx = false;
shreeshas95 10:024c2ef51cb1 80
shreeshas95 10:024c2ef51cb1 81 void rx_read() {
shreeshas95 10:024c2ef51cb1 82 // store value
shreeshas95 10:024c2ef51cb1 83 // rx_char = UART1->D;
shreeshas95 10:024c2ef51cb1 84 rx_char = rx1m.getc();
shreeshas95 8:cb93c1d3209a 85
shreeshas95 10:024c2ef51cb1 86 byte_rx = true;
shreeshas95 4:f95195748a0c 87 }
shreeshas95 2:994e741028c7 88
shreeshas95 2:994e741028c7 89 int main(){
shreeshas95 8:cb93c1d3209a 90
shreeshas95 6:6e9ae3b44e60 91 printf("welcome to mng_tm_tc\r\n");
shreeshas95 2:994e741028c7 92
shreeshas95 2:994e741028c7 93 PC.baud(9600);
shreeshas95 3:eec1097c0dd6 94
shreeshas95 4:f95195748a0c 95 rx1m.baud(1200);
shreeshas95 10:024c2ef51cb1 96 rx1m.attach(&rx_read, Serial::RxIrq);
shreeshas95 4:f95195748a0c 97 VAR_SPACE::head_data = new data_list;
shreeshas95 8:cb93c1d3209a 98 VAR_SPACE::head_data->next = NULL;
shreeshas95 7:e71ecfe3a340 99 VAR_SPACE::rx_new_node = VAR_SPACE::head_data;
shreeshas95 8:cb93c1d3209a 100
shreeshas95 10:024c2ef51cb1 101 VAR_SPACE::mng_tmtc_thread = new Thread(com_mng_fun);
shreeshas95 8:cb93c1d3209a 102 MNG_TC::init();
shreeshas95 8:cb93c1d3209a 103
shreeshas95 8:cb93c1d3209a 104 lcd.printf("0");
shreeshas95 8:cb93c1d3209a 105
shreeshas95 8:cb93c1d3209a 106 struct data_list *hehe = VAR_SPACE::head_data;
shreeshas95 8:cb93c1d3209a 107 while( hehe != NULL ){
shreeshas95 8:cb93c1d3209a 108 printf("%x ", hehe->val);
shreeshas95 8:cb93c1d3209a 109 hehe = hehe->next;
shreeshas95 8:cb93c1d3209a 110 }
shreeshas95 8:cb93c1d3209a 111 printf("\r\n");
shreeshas95 5:a5a5300d7d49 112
shreeshas95 2:994e741028c7 113 while(true){
shreeshas95 10:024c2ef51cb1 114 // ledg = !ledg;
shreeshas95 10:024c2ef51cb1 115 if(byte_rx){
shreeshas95 10:024c2ef51cb1 116 ledg = !ledg;
shreeshas95 10:024c2ef51cb1 117 byte_rx = false;
shreeshas95 10:024c2ef51cb1 118
shreeshas95 10:024c2ef51cb1 119 VAR_SPACE::rx_new_node->val = rx_char;
shreeshas95 10:024c2ef51cb1 120
shreeshas95 10:024c2ef51cb1 121 //~ allocate new node
shreeshas95 10:024c2ef51cb1 122 VAR_SPACE::rx_new_node->next = new data_list;
shreeshas95 10:024c2ef51cb1 123 VAR_SPACE::rx_new_node = VAR_SPACE::rx_new_node->next;
shreeshas95 10:024c2ef51cb1 124 VAR_SPACE::rx_new_node->next = NULL;
shreeshas95 10:024c2ef51cb1 125
shreeshas95 10:024c2ef51cb1 126 rx_timeout.attach(&after_receive, RX_TIMEOUT_LIMIT);
shreeshas95 4:f95195748a0c 127 }
shreeshas95 10:024c2ef51cb1 128
shreeshas95 8:cb93c1d3209a 129 if(pass_over){
shreeshas95 8:cb93c1d3209a 130 pass_over = false;
shreeshas95 8:cb93c1d3209a 131 first_time = true;
shreeshas95 8:cb93c1d3209a 132 // pass got over reset all
shreeshas95 8:cb93c1d3209a 133 reset_all();
shreeshas95 8:cb93c1d3209a 134 //also consider frame_no
shreeshas95 8:cb93c1d3209a 135 }
shreeshas95 0:b5b370873460 136 }
shreeshas95 8:cb93c1d3209a 137 }