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
Diff: ThreadsAndFunctions.h
- Revision:
- 2:2caf2a9a13aa
- Parent:
- 1:a0055b3280c8
- Child:
- 3:6c81fc8834e2
--- a/ThreadsAndFunctions.h Mon Dec 14 12:04:01 2015 +0000
+++ b/ThreadsAndFunctions.h Tue Dec 22 06:09:48 2015 +0000
@@ -1,21 +1,22 @@
// UART ISR
void rx_read(){
- *gRX_CURRENT_PTR = RX1M.getc();
- gFLAGS = gFLAGS | (0xFF & UART_INT_FLAG);
+ gRX_CURRENT_DATA_NODE->values[gRX_COUNT] = RX1M.getc();
+ gFLAGS = gFLAGS | UART_INT_FLAG;
gCOM_MNG_TMTC_THREAD->signal_set(COM_MNG_TMTC_SIGNAL_UART_INT);
}
// RX_TIMEOUT ISR
void after_receive(){
gRX_TIMEOUT.detach();
- gFLAGS = gFLAGS | (0xFF & NEW_TC_RECEIVED);
+ gFLAGS = gFLAGS | NEW_TC_RECEIVED;
gCOM_MNG_TMTC_THREAD->signal_set(COM_MNG_TMTC_SIGNAL_UART_INT);
}
// SESSION_TIMOUT ISR
void after_session(){
gSESSION_TIMEOUT.detach();
- gFLAGS = gFLAGS | (0xFF & END_SESSION);
+ gFLAGS = gFLAGS & (~COM_SESSION_FLAG);
+ gCOM_MNG_TMTC_THREAD->signal_set(COM_MNG_TMTC_SIGNAL_UART_INT);
}
#define reset_all {\
@@ -29,6 +30,7 @@
rx_tc_frames = 0;\
gTOTAL_INCORRECT_SIZE_TC = 0;\
gTOTAL_CRC_FAIL_TC = 0;\
+ gTOTAL_REPEATED_TC = 0;\
COM_RX_DATA_NODE *dataptr = gRX_HEAD_DATA_NODE;\
while( dataptr != NULL ){\
COM_RX_DATA_NODE *temp = dataptr->next_node;\
@@ -38,8 +40,21 @@
gRX_HEAD_DATA_NODE = new COM_RX_DATA_NODE;\
gRX_HEAD_DATA_NODE->next_node = NULL;\
gRX_CURRENT_DATA_NODE = gRX_HEAD_DATA_NODE;\
- gRX_CURRENT_PTR = gRX_HEAD_DATA_NODE->values;\
gRX_COUNT = 0;\
+ /*PENDING : ALL GLOBAL VAARIABLES AND FLAGS*/\
+}
+
+#define PUT_RAW_BYTE {\
+ if( gRX_COUNT < (RX_BUFFER_LENGTH-1) ){\
+ ++gRX_COUNT;\
+ }\
+ else{\
+ gRX_COUNT = 0;\
+ gRX_CURRENT_DATA_NODE->next_node = new COM_RX_DATA_NODE;\
+ gRX_CURRENT_DATA_NODE = gRX_CURRENT_DATA_NODE->next_node;\
+ gRX_CURRENT_DATA_NODE->next_node = NULL;\
+ }\
+ gRX_TIMEOUT.attach(&after_receive, RX_TIMEOUT_LIMIT);\
}
void COM_MNG_TMTC_FUN(void const *args){
@@ -47,63 +62,93 @@
Thread::signal_wait( COM_MNG_TMTC_SIGNAL_UART_INT );
if( gFLAGS & UART_INT_FLAG ){
gFLAGS = gFLAGS & (~UART_INT_FLAG);
- if( gRX_COUNT < (RX_BUFFER_LENGTH-1) ){
- ++gRX_CURRENT_PTR;
- ++gRX_COUNT;
+ if( !(gFLAGS & COM_SESSION_FLAG) ){
+ // PENDING : DISABLE THREADS
+ gFLAGS = gFLAGS | COM_SESSION_FLAG;
+ gSESSION_TIMEOUT.attach(&after_session, SESSION_TIME_LIMIT);
+ gFLAGS = gFLAGS | COM_RX_FLAG;
+ PUT_RAW_BYTE;
+ // PENDING : MEASURE RSSI
+ }
+ else if( gFLAGS & COM_RX_FLAG ){
+ PUT_RAW_BYTE;
}
else{
- gLEDG = !gLEDG;
- gRX_COUNT = 0;
- gRX_CURRENT_DATA_NODE->next_node = new COM_RX_DATA_NODE;
- gRX_CURRENT_DATA_NODE = gRX_CURRENT_DATA_NODE->next_node;
- gRX_CURRENT_DATA_NODE->next_node = NULL;
- gRX_CURRENT_PTR = gRX_CURRENT_DATA_NODE->values;
+ gFLAGS = gFLAGS | COM_RX_FLAG;
+ PUT_RAW_BYTE;
}
- gRX_TIMEOUT.attach(&after_receive, RX_TIMEOUT_LIMIT);
}
- else if( gFLAGS & NEW_TC_RECEIVED ){
+ else if( (gFLAGS & NEW_TC_RECEIVED) && (gFLAGS & COM_MNG_TMTC_RUNNING_FLAG) ){
gFLAGS = gFLAGS & (~NEW_TC_RECEIVED);
-
+ gFLAGS = gFLAGS & (~COM_RX_FLAG);
+
// DISABLE THE RX1M INTERRUPT
RX1M.attach(NULL);
- // PENDING: BEACON
- while(gRX_COUNT < (RX_BUFFER_LENGTH-1)){
- *gRX_CURRENT_PTR = 0x00;
- ++gRX_CURRENT_PTR;
+ while(gRX_COUNT < (RX_BUFFER_LENGTH)){
+ gRX_CURRENT_DATA_NODE->values[gRX_COUNT] = 0x00;
++gRX_COUNT;
}
gRX_COUNT = 0;
-
- if( (gMASTER_STATE == TCL_STATE_IDLE) || (gMASTER_STATE == TCL_STATE_ABORTED) || (gMASTER_STATE == TCL_STATE_COMPLETED)){
- raw_data_to_tc();
- if( (gTOTAL_VALID_TC > 0) && (gFLAGS & START_SESSION) ){
- gFLAGS = gFLAGS & (~START_SESSION);
- gSESSION_TIMEOUT.attach(&after_session, SESSION_TIME_LIMIT);
- }
+
+ // VERIFY CRC, REPEATED PSC AND UPDATE TOTAL_VALID_TC, INCORRECT SIZE TC, CRC FAIL TC
+ raw_data_to_tc();
+ if( gTOTAL_VALID_TC > 0 ){
+ // CHECK WEATHER TC LIST HAS MISSING TC OR WEATHER LAST FRAME BIT IS HIGH IN THE LAST PSC-TC
uint8_t tempContinue = 0xFF;
continueToExecute(tempContinue);
- if( tempContinue == 0x00 ){
- if(gMASTER_STATE == TCL_STATE_ABORTED){
- gMASTER_STATE = TCL_STATE_EXECUTING;
- send_l1_ack;
+ if(tempContinue == 0x00){
+ // CHECK WEATHER GS VERIFICATION CODE MATCHES
+ uint8_t tempGSver = 0x00;
+ GScodeVerification(tempGSver);
+ if( tempGSver ){
+ gFLAGS = gFLAGS | COM_SESSION_VALIDITY;
+ // PENDING : COM_POWER_ON_TX
EXECUTE_OBOSC_ONLY;
+ EXECUTE_TC;
}
- send_l1_ack;
- EXECUTE_TC;
+ else{
+ gFLAGS = gFLAGS & (~COM_SESSION_VALIDITY);
+ // PENDING : ENABLE THREADS
+ gSESSION_TIMEOUT.detach();
+ gFLAGS = gFLAGS & (~COM_SESSION_FLAG);
+ }
}
else{
- send_l1_ack;
+ // PENDING : COM_POWER_ON_TX
+ // PENDING : POWER OFF TX
+ RX1M.attach(&rx_read, Serial::RxIrq);
}
- gPC.puts("Completed Execution\r\n");
+ }
+ else if( !(gFLAGS & COM_TX_FLAG) ){
+ RX1M.attach(&rx_read, Serial::RxIrq);
+ // PENDING : ENABLE THREADS
+ gSESSION_TIMEOUT.detach();
+ gFLAGS = gFLAGS & (~COM_SESSION_FLAG);
+ }
+ }
+ else if( gFLAGS & COM_PA_HOT_FLAG ){
+ uint8_t tempPA = 0xFF;
+ isPAhot(tempPA);
+ if( tempPA == 0x00 ){
+ gCOM_PA_COOLING_TIMER.attach(&after_cooling_pa, COM_PA_COOLING_TIME_LIMIT);
}
else{
- // invalid state found - reset
- reset_all;
+ gFLAGS = gFLAGS & (~COM_PA_HOT_FLAG);
+ gCOM_PA_COOLING_TIMER.detach();
+ // PENDING : COM POWER ON TX
+ EXECUTE_OBOSC_ONLY;
+ EXECUTE_TC;
}
+ }
+ else{
+ // SOME INVALID SIGNAL RECEIVED
- // PENDING: BEACON
- RX1M.attach(&rx_read, Serial::RxIrq);
+ // PENDING : COM_POWER_OFF_TX
+ reset_all;
+ // PENDING : ENABLE THREADS
+ gSESSION_TIMEOUT.detach();
+ gFLAGS = gFLAGS & (~COM_SESSION_FLAG);
}
}
}
\ No newline at end of file
