Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: FreescaleIAP SimpleDMA mbed-rtos mbed
Fork of CDMS_CODE by
ThreadsAndFunctions.h@0:f016e9e8d48b, 2015-12-01 (annotated)
- Committer:
- shreeshas95
- Date:
- Tue Dec 01 10:56:10 2015 +0000
- Revision:
- 0:f016e9e8d48b
- Child:
- 1:a0055b3280c8
Working without COM_SND_TM
Who changed what in which revision?
| User | Revision | Line number | New contents of line | 
|---|---|---|---|
| shreeshas95 | 0:f016e9e8d48b | 1 | // UART ISR | 
| shreeshas95 | 0:f016e9e8d48b | 2 | void rx_read(){ | 
| shreeshas95 | 0:f016e9e8d48b | 3 | *gRX_CURRENT_PTR = RX1M.getc(); | 
| shreeshas95 | 0:f016e9e8d48b | 4 | gFLAGS = gFLAGS | (0xFF & UART_INT_FLAG); | 
| shreeshas95 | 0:f016e9e8d48b | 5 | gCOM_MNG_TMTC_THREAD->signal_set(COM_MNG_TMTC_SIGNAL_UART_INT); | 
| shreeshas95 | 0:f016e9e8d48b | 6 | } | 
| shreeshas95 | 0:f016e9e8d48b | 7 | |
| shreeshas95 | 0:f016e9e8d48b | 8 | // RX_TIMEOUT ISR | 
| shreeshas95 | 0:f016e9e8d48b | 9 | void after_receive(){ | 
| shreeshas95 | 0:f016e9e8d48b | 10 | gRX_TIMEOUT.detach(); | 
| shreeshas95 | 0:f016e9e8d48b | 11 | gFLAGS = gFLAGS | (0xFF & NEW_TC_RECEIVED); | 
| shreeshas95 | 0:f016e9e8d48b | 12 | gCOM_MNG_TMTC_THREAD->signal_set(COM_MNG_TMTC_SIGNAL_UART_INT); | 
| shreeshas95 | 0:f016e9e8d48b | 13 | } | 
| shreeshas95 | 0:f016e9e8d48b | 14 | |
| shreeshas95 | 0:f016e9e8d48b | 15 | // SESSION_TIMOUT ISR | 
| shreeshas95 | 0:f016e9e8d48b | 16 | void after_session(){ | 
| shreeshas95 | 0:f016e9e8d48b | 17 | gSESSION_TIMEOUT.detach(); | 
| shreeshas95 | 0:f016e9e8d48b | 18 | gFLAGS = gFLAGS | (0xFF & END_SESSION); | 
| shreeshas95 | 0:f016e9e8d48b | 19 | } | 
| shreeshas95 | 0:f016e9e8d48b | 20 | |
| shreeshas95 | 0:f016e9e8d48b | 21 | #define reset_all {\ | 
| shreeshas95 | 0:f016e9e8d48b | 22 | Base_tc *tcp = gHEAD_NODE_TCL;\ | 
| shreeshas95 | 0:f016e9e8d48b | 23 | while(tcp != NULL){\ | 
| shreeshas95 | 0:f016e9e8d48b | 24 | Base_tc *temp = tcp->next_TC;\ | 
| shreeshas95 | 0:f016e9e8d48b | 25 | delete tcp;\ | 
| shreeshas95 | 0:f016e9e8d48b | 26 | tcp = temp;\ | 
| shreeshas95 | 0:f016e9e8d48b | 27 | }\ | 
| shreeshas95 | 0:f016e9e8d48b | 28 | rx_tc_frames = 0;\ | 
| shreeshas95 | 0:f016e9e8d48b | 29 | rx_tc_frames = 0;\ | 
| shreeshas95 | 0:f016e9e8d48b | 30 | gTOTAL_INCORRECT_SIZE_TC = 0;\ | 
| shreeshas95 | 0:f016e9e8d48b | 31 | gTOTAL_CRC_FAIL_TC = 0;\ | 
| shreeshas95 | 0:f016e9e8d48b | 32 | COM_RX_DATA_NODE *dataptr = gRX_HEAD_DATA_NODE;\ | 
| shreeshas95 | 0:f016e9e8d48b | 33 | while( dataptr != NULL ){\ | 
| shreeshas95 | 0:f016e9e8d48b | 34 | COM_RX_DATA_NODE *temp = dataptr->next_node;\ | 
| shreeshas95 | 0:f016e9e8d48b | 35 | delete dataptr;\ | 
| shreeshas95 | 0:f016e9e8d48b | 36 | dataptr = temp;\ | 
| shreeshas95 | 0:f016e9e8d48b | 37 | }\ | 
| shreeshas95 | 0:f016e9e8d48b | 38 | gRX_HEAD_DATA_NODE = new COM_RX_DATA_NODE;\ | 
| shreeshas95 | 0:f016e9e8d48b | 39 | gRX_HEAD_DATA_NODE->next_node = NULL;\ | 
| shreeshas95 | 0:f016e9e8d48b | 40 | gRX_CURRENT_DATA_NODE = gRX_HEAD_DATA_NODE;\ | 
| shreeshas95 | 0:f016e9e8d48b | 41 | gRX_CURRENT_PTR = gRX_HEAD_DATA_NODE->values;\ | 
| shreeshas95 | 0:f016e9e8d48b | 42 | gRX_COUNT = 0;\ | 
| shreeshas95 | 0:f016e9e8d48b | 43 | } | 
| shreeshas95 | 0:f016e9e8d48b | 44 | |
| shreeshas95 | 0:f016e9e8d48b | 45 | void COM_MNG_TMTC_FUN(void const *args){ | 
| shreeshas95 | 0:f016e9e8d48b | 46 | while(true){ | 
| shreeshas95 | 0:f016e9e8d48b | 47 | Thread::signal_wait( COM_MNG_TMTC_SIGNAL_UART_INT ); | 
| shreeshas95 | 0:f016e9e8d48b | 48 | if( gFLAGS & UART_INT_FLAG ){ | 
| shreeshas95 | 0:f016e9e8d48b | 49 | gFLAGS = gFLAGS & (~UART_INT_FLAG); | 
| shreeshas95 | 0:f016e9e8d48b | 50 | if( gRX_COUNT < (RX_BUFFER_LENGTH-1) ){ | 
| shreeshas95 | 0:f016e9e8d48b | 51 | ++gRX_CURRENT_PTR; | 
| shreeshas95 | 0:f016e9e8d48b | 52 | ++gRX_COUNT; | 
| shreeshas95 | 0:f016e9e8d48b | 53 | } | 
| shreeshas95 | 0:f016e9e8d48b | 54 | else{ | 
| shreeshas95 | 0:f016e9e8d48b | 55 | gLEDG = !gLEDG; | 
| shreeshas95 | 0:f016e9e8d48b | 56 | gRX_COUNT = 0; | 
| shreeshas95 | 0:f016e9e8d48b | 57 | gRX_CURRENT_DATA_NODE->next_node = new COM_RX_DATA_NODE; | 
| shreeshas95 | 0:f016e9e8d48b | 58 | gRX_CURRENT_DATA_NODE = gRX_CURRENT_DATA_NODE->next_node; | 
| shreeshas95 | 0:f016e9e8d48b | 59 | gRX_CURRENT_DATA_NODE->next_node = NULL; | 
| shreeshas95 | 0:f016e9e8d48b | 60 | gRX_CURRENT_PTR = gRX_CURRENT_DATA_NODE->values; | 
| shreeshas95 | 0:f016e9e8d48b | 61 | } | 
| shreeshas95 | 0:f016e9e8d48b | 62 | gRX_TIMEOUT.attach(&after_receive, RX_TIMEOUT_LIMIT); | 
| shreeshas95 | 0:f016e9e8d48b | 63 | } | 
| shreeshas95 | 0:f016e9e8d48b | 64 | else if( gFLAGS & NEW_TC_RECEIVED ){ | 
| shreeshas95 | 0:f016e9e8d48b | 65 | gFLAGS = gFLAGS & (~NEW_TC_RECEIVED); | 
| shreeshas95 | 0:f016e9e8d48b | 66 | |
| shreeshas95 | 0:f016e9e8d48b | 67 | // DISABLE THE RX1M INTERRUPT | 
| shreeshas95 | 0:f016e9e8d48b | 68 | RX1M.attach(NULL); | 
| shreeshas95 | 0:f016e9e8d48b | 69 | |
| shreeshas95 | 0:f016e9e8d48b | 70 | // PENDING: BEACON | 
| shreeshas95 | 0:f016e9e8d48b | 71 | while(gRX_COUNT < (RX_BUFFER_LENGTH-1)){ | 
| shreeshas95 | 0:f016e9e8d48b | 72 | *gRX_CURRENT_PTR = 0x00; | 
| shreeshas95 | 0:f016e9e8d48b | 73 | ++gRX_CURRENT_PTR; | 
| shreeshas95 | 0:f016e9e8d48b | 74 | ++gRX_COUNT; | 
| shreeshas95 | 0:f016e9e8d48b | 75 | } | 
| shreeshas95 | 0:f016e9e8d48b | 76 | gRX_COUNT = 0; | 
| shreeshas95 | 0:f016e9e8d48b | 77 | |
| shreeshas95 | 0:f016e9e8d48b | 78 | if( (gMASTER_STATE == TCL_STATE_IDLE) || (gMASTER_STATE == TCL_STATE_ABORTED) || (gMASTER_STATE == TCL_STATE_COMPLETED)){ | 
| shreeshas95 | 0:f016e9e8d48b | 79 | raw_data_to_tc(); | 
| shreeshas95 | 0:f016e9e8d48b | 80 | if( (gTOTAL_VALID_TC > 0) && (gFLAGS & START_SESSION) ){ | 
| shreeshas95 | 0:f016e9e8d48b | 81 | gFLAGS = gFLAGS & (~START_SESSION); | 
| shreeshas95 | 0:f016e9e8d48b | 82 | gSESSION_TIMEOUT.attach(&after_session, SESSION_TIME_LIMIT); | 
| shreeshas95 | 0:f016e9e8d48b | 83 | } | 
| shreeshas95 | 0:f016e9e8d48b | 84 | uint8_t tempContinue = 0xFF; | 
| shreeshas95 | 0:f016e9e8d48b | 85 | continueToExecute(tempContinue); | 
| shreeshas95 | 0:f016e9e8d48b | 86 | if( tempContinue == 0x00 ){ | 
| shreeshas95 | 0:f016e9e8d48b | 87 | if(gMASTER_STATE == TCL_STATE_ABORTED){ | 
| shreeshas95 | 0:f016e9e8d48b | 88 | gMASTER_STATE = TCL_STATE_EXECUTING; | 
| shreeshas95 | 0:f016e9e8d48b | 89 | send_l1_ack; | 
| shreeshas95 | 0:f016e9e8d48b | 90 | EXECUTE_OBOSC_ONLY; | 
| shreeshas95 | 0:f016e9e8d48b | 91 | } | 
| shreeshas95 | 0:f016e9e8d48b | 92 | EXECUTE_TC; | 
| shreeshas95 | 0:f016e9e8d48b | 93 | } | 
| shreeshas95 | 0:f016e9e8d48b | 94 | else{ | 
| shreeshas95 | 0:f016e9e8d48b | 95 | send_l1_ack; | 
| shreeshas95 | 0:f016e9e8d48b | 96 | } | 
| shreeshas95 | 0:f016e9e8d48b | 97 | gPC.puts("Completed Execution\r\n"); | 
| shreeshas95 | 0:f016e9e8d48b | 98 | } | 
| shreeshas95 | 0:f016e9e8d48b | 99 | else{ | 
| shreeshas95 | 0:f016e9e8d48b | 100 | // invalid state found - reset | 
| shreeshas95 | 0:f016e9e8d48b | 101 | reset_all; | 
| shreeshas95 | 0:f016e9e8d48b | 102 | } | 
| shreeshas95 | 0:f016e9e8d48b | 103 | |
| shreeshas95 | 0:f016e9e8d48b | 104 | // PENDING: BEACON | 
| shreeshas95 | 0:f016e9e8d48b | 105 | RX1M.attach(&rx_read, Serial::RxIrq); | 
| shreeshas95 | 0:f016e9e8d48b | 106 | } | 
| shreeshas95 | 0:f016e9e8d48b | 107 | } | 
| shreeshas95 | 0:f016e9e8d48b | 108 | } | 
