TELECOMMAND MANAGER V1

Dependencies:   mbed SLCD mbed-rtos

Committer:
shreeshas95
Date:
Thu Jun 11 11:20:12 2015 +0000
Revision:
2:994e741028c7
Parent:
1:df31097c8442
Child:
3:eec1097c0dd6
V1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
shreeshas95 2:994e741028c7 1 //#define ENDL "\r" << endl
shreeshas95 2:994e741028c7 2
shreeshas95 1:df31097c8442 3 #include <bitset>
shreeshas95 1:df31097c8442 4 #include <iostream>
shreeshas95 1:df31097c8442 5 using namespace std;
shreeshas95 0:b5b370873460 6
shreeshas95 2:994e741028c7 7 #include "mbed.h"
shreeshas95 2:994e741028c7 8 #include "MNG_TC.h"
shreeshas95 2:994e741028c7 9
shreeshas95 2:994e741028c7 10 DigitalOut ledr(LED_RED);
shreeshas95 2:994e741028c7 11 DigitalOut ledg(LED_GREEN);
shreeshas95 2:994e741028c7 12
shreeshas95 2:994e741028c7 13 //Serial PC(USBTX, USBRX);
shreeshas95 1:df31097c8442 14 //Serial UART_RX(PTE0, PTE1);
shreeshas95 0:b5b370873460 15
shreeshas95 2:994e741028c7 16 namespace ISR{
shreeshas95 2:994e741028c7 17 /*
shreeshas95 2:994e741028c7 18 STATE TABLE
shreeshas95 2:994e741028c7 19 1 = intrerrupt not received & MNG_TC not running
shreeshas95 2:994e741028c7 20 2 = interrupt received but MNG_TC not running
shreeshas95 2:994e741028c7 21 3 = interrupt has been handled(no pending interuupts) & MNG_TC running
shreeshas95 2:994e741028c7 22 4 = new interrupt arrived & MNG_TC running
shreeshas95 2:994e741028c7 23 */
shreeshas95 2:994e741028c7 24 int state = 1;
shreeshas95 2:994e741028c7 25
shreeshas95 2:994e741028c7 26 /*
shreeshas95 2:994e741028c7 27 @brief: handle TC interrupts from the receiver
shreeshas95 2:994e741028c7 28 @param: none
shreeshas95 2:994e741028c7 29 @return: none
shreeshas95 2:994e741028c7 30 */
shreeshas95 2:994e741028c7 31 void PC_isr(){
shreeshas95 2:994e741028c7 32 cout << "INSIDE PC_isr" << "\r" << endl;
shreeshas95 2:994e741028c7 33 PC.attach(NULL);
shreeshas95 2:994e741028c7 34 if(state == 1){
shreeshas95 2:994e741028c7 35 state = 2;
shreeshas95 2:994e741028c7 36 }
shreeshas95 2:994e741028c7 37 else if(state == 2){
shreeshas95 2:994e741028c7 38 state = 2;
shreeshas95 2:994e741028c7 39 }
shreeshas95 2:994e741028c7 40 else if(state == 3){
shreeshas95 2:994e741028c7 41 state = 4;
shreeshas95 2:994e741028c7 42 // read and decode TC here
shreeshas95 2:994e741028c7 43 PC.attach(&PC_isr);
shreeshas95 2:994e741028c7 44 state = 3;
shreeshas95 2:994e741028c7 45 }
shreeshas95 2:994e741028c7 46 else if(state == 4){
shreeshas95 2:994e741028c7 47 state = 4;
shreeshas95 2:994e741028c7 48 }
shreeshas95 2:994e741028c7 49 }
shreeshas95 2:994e741028c7 50 }
shreeshas95 2:994e741028c7 51
shreeshas95 2:994e741028c7 52
shreeshas95 2:994e741028c7 53 /*
shreeshas95 2:994e741028c7 54 @brief: manage TC
shreeshas95 2:994e741028c7 55 */
shreeshas95 2:994e741028c7 56 void manage_TC(void){
shreeshas95 1:df31097c8442 57
shreeshas95 0:b5b370873460 58 unsigned char str[13];
shreeshas95 2:994e741028c7 59 /* Timer time;
shreeshas95 2:994e741028c7 60 time.start();
shreeshas95 2:994e741028c7 61 float start_time = time.read();*/
shreeshas95 0:b5b370873460 62 for(int i = 0 ; i < 13 ; ++i){
shreeshas95 0:b5b370873460 63 str[i] = PC.getc();
shreeshas95 2:994e741028c7 64 PC.putc(str[i]);
shreeshas95 0:b5b370873460 65 }
shreeshas95 2:994e741028c7 66 cout << "Successfully read 13 chars\r" << "\r" << endl;
shreeshas95 2:994e741028c7 67 PC.attach(&ISR::PC_isr);
shreeshas95 0:b5b370873460 68
shreeshas95 1:df31097c8442 69 // UART_RX.baud(38400);
shreeshas95 0:b5b370873460 70
shreeshas95 1:df31097c8442 71 TC_list *tc_node = new TC_list;
shreeshas95 2:994e741028c7 72 // remove flag
shreeshas95 1:df31097c8442 73 tc_node->TC_string = &(str[1]);
shreeshas95 1:df31097c8442 74
shreeshas95 2:994e741028c7 75 uint16_t crc_check = CRC::crc16_gen(&(str[1]), 9);
shreeshas95 0:b5b370873460 76 char c1 = (crc_check >> 8) & 0xffff;
shreeshas95 0:b5b370873460 77 char c2 = (crc_check) & 0xffff;
shreeshas95 2:994e741028c7 78 // str[12] is flag
shreeshas95 0:b5b370873460 79 if(c1 == str[10] && c2 == str[11]){
shreeshas95 0:b5b370873460 80 tc_node->crc_pass = true;
shreeshas95 2:994e741028c7 81 printf("received tc successfully crc pass\r\n");
shreeshas95 0:b5b370873460 82 }
shreeshas95 0:b5b370873460 83 else{
shreeshas95 2:994e741028c7 84 printf("crc fail\r\n");
shreeshas95 2:994e741028c7 85 tc_node->crc_pass = false;
shreeshas95 0:b5b370873460 86 }
shreeshas95 0:b5b370873460 87
shreeshas95 0:b5b370873460 88 tc_node->short_or_long = true;
shreeshas95 0:b5b370873460 89 tc_node->next_TC = NULL;
shreeshas95 0:b5b370873460 90
shreeshas95 2:994e741028c7 91 ledr = 0;
shreeshas95 2:994e741028c7 92 ledg = 1;
shreeshas95 0:b5b370873460 93
shreeshas95 1:df31097c8442 94 // for(int i = 0 ; i < 13; ++i){
shreeshas95 1:df31097c8442 95 // std::bitset<8> b = str[i];
shreeshas95 2:994e741028c7 96 // cout << b << "\r" << ENDL;
shreeshas95 1:df31097c8442 97 // }
shreeshas95 1:df31097c8442 98
shreeshas95 2:994e741028c7 99 MNG_TC::init(tc_node);
shreeshas95 2:994e741028c7 100 MNG_TC::start_with();
shreeshas95 2:994e741028c7 101 MNG_TC::decode_TC();
shreeshas95 2:994e741028c7 102 MNG_TC::check_for_missing_TC();
shreeshas95 2:994e741028c7 103 MNG_TC::execute_TC();
shreeshas95 2:994e741028c7 104
shreeshas95 2:994e741028c7 105
shreeshas95 2:994e741028c7 106 cout << "the received tc is\n" << "\r" << endl;
shreeshas95 2:994e741028c7 107 for(int i = 0 ; i < 13 ; ++i){
shreeshas95 2:994e741028c7 108 cout << tc_node->TC_string[i];
shreeshas95 2:994e741028c7 109 }
shreeshas95 2:994e741028c7 110 cout << "\n" << "\r" << endl;
shreeshas95 0:b5b370873460 111
shreeshas95 2:994e741028c7 112 ISR::state = 1;
shreeshas95 2:994e741028c7 113 ledg = 0;
shreeshas95 2:994e741028c7 114 }
shreeshas95 2:994e741028c7 115
shreeshas95 2:994e741028c7 116 int main(){
shreeshas95 2:994e741028c7 117 UART_TX.baud(38400);
shreeshas95 2:994e741028c7 118 // UART_RX.baud(1200);
shreeshas95 2:994e741028c7 119
shreeshas95 2:994e741028c7 120 PC.baud(9600);
shreeshas95 2:994e741028c7 121 PC.attach(&ISR::PC_isr);
shreeshas95 2:994e741028c7 122
shreeshas95 2:994e741028c7 123 while(true){
shreeshas95 2:994e741028c7 124 ledg = !ledg;
shreeshas95 2:994e741028c7 125 if(ISR::state != 1){
shreeshas95 2:994e741028c7 126 cout << "Inside while Interrupt received" << "\r" << endl;
shreeshas95 2:994e741028c7 127 manage_TC();
shreeshas95 2:994e741028c7 128 }
shreeshas95 0:b5b370873460 129 wait(0.2f);
shreeshas95 0:b5b370873460 130 }
shreeshas95 0:b5b370873460 131 }