TELECOMMAND MANAGER V1
Dependencies: mbed SLCD mbed-rtos
main.cpp@2:994e741028c7, 2015-06-11 (annotated)
- 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?
User | Revision | Line number | New 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 | } |