Index: RTC.c =================================================================== diff -u -r7e186bb97310fb59f525e5399ec7a74711bea571 -r839935998cfe2a1a7594e6b6810301ad3c2aa872 --- RTC.c (.../RTC.c) (revision 7e186bb97310fb59f525e5399ec7a74711bea571) +++ RTC.c (.../RTC.c) (revision 839935998cfe2a1a7594e6b6810301ad3c2aa872) @@ -1050,7 +1050,7 @@ * @details Outputs: none * @return next state *************************************************************************/ -static RTC_EXEC_STATE_T handleExecWaitForPostState( void ) +static RTC_EXEC_STATE_T handleExecWaitForPostState( void ) // TODO remove this function { RTC_EXEC_STATE_T result = RTC_EXEC_STATE_WAIT_FOR_POST; @@ -1061,7 +1061,7 @@ result = RTC_EXEC_STATE_READ; } - return result; + return RTC_EXEC_STATE_IDLE; //result; } /*********************************************************************//** @@ -1090,7 +1090,7 @@ { result = RTC_EXEC_STATE_PREP_RAM; } - else if ( TIMER_COUNTER_TO_REQUEST_READ >= timeCounter ) + else if ( ( TIMER_COUNTER_TO_REQUEST_READ <= timeCounter ) && ( getCurrentOperationMode() != DG_MODE_INIT ) ) { if ( TRUE == getSemaphore( SEMAPHORE_RTC ) ) { @@ -1134,17 +1134,21 @@ } RTC_EXEC_STATE_T result = RTC_EXEC_STATE_WRITE; - BOOL isStatusOk = serviceRTC( txBuffer, rxBuffer, RTC_GENERAL_BUFFER_LENGTH ); + BOOL isStatusOk = serviceRTC( txBuffer, rxBuffer, RTC_GENERAL_BUFFER_LENGTH ); if ( RTCServiceState == RTC_SERVICE_COMPLETE && isStatusOk ) { + releaseSemaphore( SEMAPHORE_RTC ); + // Reset the counter to start with the new read timeCounter = 1; hasWriteToRTCRequested = FALSE; result = RTC_EXEC_STATE_IDLE; } else if ( RTCServiceState == RTC_SERVICE_COMPLETE ) { + releaseSemaphore( SEMAPHORE_RTC ); + SET_ALARM_WITH_1_U32_DATA( ALARM_ID_RTC_RAM_OPS_ERROR, result ); result = RTC_EXEC_STATE_IDLE; hasWriteToRTCRequested = FALSE; @@ -1164,7 +1168,7 @@ static RTC_EXEC_STATE_T handleExecPrepRAMState( void ) { RTC_EXEC_STATE_T result = RTC_EXEC_STATE_PREP_RAM; - BOOL isStatusOk = serviceRTC( prepRAMBuffer, RAMBuffer, RTC_RAM_PREP_BUFFER_LENGTH ); + BOOL isStatusOk = serviceRTC( prepRAMBuffer, RAMBuffer, RTC_RAM_PREP_BUFFER_LENGTH ); if ( RTCServiceState == RTC_SERVICE_COMPLETE && isStatusOk ) { @@ -1179,6 +1183,8 @@ } else if ( RTCServiceState == RTC_SERVICE_COMPLETE ) { + releaseSemaphore( SEMAPHORE_RTC ); + SET_ALARM_WITH_1_U32_DATA( ALARM_ID_RTC_RAM_OPS_ERROR, result ); result = RTC_EXEC_STATE_IDLE; } @@ -1202,12 +1208,16 @@ if ( RTCServiceState == RTC_SERVICE_COMPLETE && isStatusOk ) { + releaseSemaphore( SEMAPHORE_RTC ); + result = RTC_EXEC_STATE_IDLE; RTCRAMStatus = RTC_RAM_STATUS_COMPLETE; hasWriteToRAMRequested = FALSE; } else if ( RTCServiceState == RTC_SERVICE_COMPLETE ) { + releaseSemaphore( SEMAPHORE_RTC ); + RTCRAMStatus = RTC_RAM_STATUS_FAILED; SET_ALARM_WITH_2_U32_DATA( ALARM_ID_RTC_RAM_OPS_ERROR, result, RTCRAMStatus ); result = RTC_EXEC_STATE_IDLE; @@ -1229,16 +1239,20 @@ static RTC_EXEC_STATE_T handleExecReadFromRAMState( void ) { RTC_EXEC_STATE_T result = RTC_EXEC_STATE_READ_FROM_RAM; - BOOL isStatusOk = serviceRTC( txBuffer, RAMBuffer, RAMBufferLength + 1 ); + BOOL isStatusOk = serviceRTC( txBuffer, RAMBuffer, RAMBufferLength + 1 ); if ( RTCServiceState == RTC_SERVICE_COMPLETE && isStatusOk ) { + releaseSemaphore( SEMAPHORE_RTC ); + result = RTC_EXEC_STATE_IDLE; RTCRAMStatus = RTC_RAM_STATUS_COMPLETE; hasReadFromRAMRequested = FALSE; } else if ( RTCServiceState == RTC_SERVICE_COMPLETE ) { + releaseSemaphore( SEMAPHORE_RTC ); + RTCRAMStatus = RTC_RAM_STATUS_FAILED; SET_ALARM_WITH_2_U32_DATA( ALARM_ID_RTC_RAM_OPS_ERROR, result, RTCRAMStatus ); result = RTC_EXEC_STATE_IDLE; @@ -1269,7 +1283,6 @@ { RTC_DATA_T data; - releaseSemaphore( SEMAPHORE_RTC ); updateReadTimestampStruct(); lastEpochTime = convertDateTime2Epoch( RTCTimestampStruct ); timeCounter = 1; @@ -1284,10 +1297,14 @@ #endif } + releaseSemaphore( SEMAPHORE_RTC ); + result = RTC_EXEC_STATE_IDLE; } else if ( RTCServiceState == RTC_SERVICE_COMPLETE ) { + releaseSemaphore( SEMAPHORE_RTC ); + SET_ALARM_WITH_1_U32_DATA( ALARM_ID_RTC_RAM_OPS_ERROR, result ); result = RTC_EXEC_STATE_IDLE; } @@ -1308,9 +1325,12 @@ RTC_SELF_TEST_STATE_T result = RTC_SELF_TEST_STATE_START; RTCSelfTestResult = SELF_TEST_STATUS_IN_PROGRESS; - prepBufferForReadCommand( RTC_GENERAL_BUFFER_LENGTH ); + if ( TRUE == getSemaphore( SEMAPHORE_RTC ) ) + { + prepBufferForReadCommand( RTC_GENERAL_BUFFER_LENGTH ); - result = RTC_SELF_TEST_STATE_CHECK_CTRL_REGS; + result = RTC_SELF_TEST_STATE_CHECK_CTRL_REGS; + } return result; } @@ -1329,7 +1349,7 @@ static RTC_SELF_TEST_STATE_T handleSelfTestCheckCtrlRegs( void ) { RTC_SELF_TEST_STATE_T result = RTC_SELF_TEST_STATE_CHECK_CTRL_REGS; - BOOL isStatusOk = serviceRTC( txBuffer, rxBuffer, RTC_GENERAL_BUFFER_LENGTH ); + BOOL isStatusOk = serviceRTC( txBuffer, rxBuffer, RTC_GENERAL_BUFFER_LENGTH ); if ( ( RTC_SERVICE_COMPLETE == RTCServiceState ) && ( TRUE == isStatusOk ) ) { @@ -1341,14 +1361,18 @@ } else { + releaseSemaphore( SEMAPHORE_RTC ); + RTCSelfTestResult = SELF_TEST_STATUS_FAILED; - result = RTC_SELF_TEST_STATE_COMPLETE; + result = RTC_SELF_TEST_STATE_COMPLETE; } } - else if ( RTCServiceState == RTC_SERVICE_COMPLETE ) + else if ( RTC_SERVICE_COMPLETE == RTCServiceState ) { + releaseSemaphore( SEMAPHORE_RTC ); + RTCSelfTestResult = SELF_TEST_STATUS_FAILED; - result = RTC_SELF_TEST_STATE_COMPLETE; + result = RTC_SELF_TEST_STATE_COMPLETE; } return result; @@ -1385,12 +1409,16 @@ } else { + releaseSemaphore( SEMAPHORE_RTC ); + RTCSelfTestResult = SELF_TEST_STATUS_FAILED; result = RTC_SELF_TEST_STATE_COMPLETE; } } - else if ( RTCServiceState == RTC_SERVICE_COMPLETE ) + else if ( RTC_SERVICE_COMPLETE == RTCServiceState ) { + releaseSemaphore( SEMAPHORE_RTC ); + RTCSelfTestResult = SELF_TEST_STATUS_FAILED; result = RTC_SELF_TEST_STATE_COMPLETE; } @@ -1443,6 +1471,8 @@ RTCSelfTestResult = SELF_TEST_STATUS_FAILED; SET_ALARM_WITH_2_U32_DATA( alarm, (U32)elapsedFPGATime, (U32)elapsedTime ); } + + releaseSemaphore( SEMAPHORE_RTC ); } #else result = RTC_SELF_TEST_STATE_COMPLETE; @@ -1459,7 +1489,7 @@ * @details Outputs : RTCSelfTestState * @return none *************************************************************************/ -void resetRTCPostState( void ) +void resetRTCPostState( void ) // TODO remove this function { RTCSelfTestState = RTC_SELF_TEST_STATE_START; }