Index: RTC.c =================================================================== diff -u -r99f91b0f1bed7da40da75e97d3bb7a3b00e9508d -r545d8b27b65761cc7f1b5fa96501f02d27034e99 --- RTC.c (.../RTC.c) (revision 99f91b0f1bed7da40da75e97d3bb7a3b00e9508d) +++ RTC.c (.../RTC.c) (revision 545d8b27b65761cc7f1b5fa96501f02d27034e99) @@ -22,9 +22,11 @@ #include "PersistentAlarm.h" #include "RTC.h" #include "SystemCommMessages.h" +#include "TestSupport.h" #include "Timers.h" #include "Utilities.h" + /** * @addtogroup RTC * @{ @@ -207,6 +209,8 @@ static U16 prepRAMBuffer[ RTC_RAM_PREP_BUFFER_LENGTH ]; ///< Buffer to send prep read/write commands to RTC RAM. static U16 RAMBuffer[ MIBSPI_MAX_BUFFER_LENGTH ]; ///< Buffer to read RTC RAM data. static U16 previousFPGATimerCount; ///< Previous FPGA timer count; +static OVERRIDE_U32_T rtcControlRegister1 = { 0, 0, 0, 0 }; ///< RTC control register 1. +static OVERRIDE_U32_T rtcControlRegister3 = { 0, 0, 0, 0 }; ///< RTC control register 3. #ifdef _DG_ static BOOL syncDG2HDDateTimeFlag; ///< Flag indicating whether DG RTC should be sync'd to HD RTC. #endif @@ -225,6 +229,8 @@ static void updateReadTimestampStruct( void ); static BOOL setMibSPIBufferLength( U16 length ); static void prepBufferForReadCommand( U08 length ); // Puts the read command +static U16 getControlReg1( void ); +static U16 getControlReg3( void ); static RTC_SELF_TEST_STATE_T handleSelfTestStart( void ); static RTC_SELF_TEST_STATE_T handleSelfTestCheckCtrlRegs( void ); @@ -787,10 +793,17 @@ BOOL hasReg1Failed = FALSE; BOOL isBatteryLow = FALSE; BOOL status = TRUE; - U16 controlReg1 = rxBuffer[ RTC_REG_1_INDEX ]; + U16 controlReg1 = 0; U16 controlReg2 = rxBuffer[ RTC_REG_2_INDEX ]; - U16 controlReg3 = rxBuffer[ RTC_REG_3_INDEX ]; + U16 controlReg3 = 0; + // populate real data before we consider override + rtcControlRegister1.data = rxBuffer[ RTC_REG_1_INDEX ]; + controlReg1 = getControlReg1(); + + rtcControlRegister3.data = rxBuffer[ RTC_REG_3_INDEX ]; + controlReg3 = getControlReg3(); + #ifdef _DG_ reg1Alarm = ALARM_ID_DG_RTC_CONFIG_ERROR; batteryAlarm = ALARM_ID_DG_RTC_BATTERY_LOW; @@ -1571,7 +1584,31 @@ return state; } +/*********************************************************************//** + * @brief + * The getControlReg1 function gets the current RTC control register 1. + * @details Inputs: rtcControlRegister1 + * @details Outputs: none + * @return the current RTC control register word. + *************************************************************************/ +static U16 getControlReg1( void ) +{ + return getU16OverrideValue(&rtcControlRegister1); +} +/*********************************************************************//** + * @brief + * The getControlReg3 function gets the current RTC control register 3. + * @details Inputs: rtcControlRegister3 + * @details Outputs: none + * @return the current RTC control register word. + *************************************************************************/ +static U16 getControlReg3( void ) +{ + return getU16OverrideValue(&rtcControlRegister3); +} + + /************************************************************************* * TEST SUPPORT FUNCTIONS *************************************************************************/ @@ -1617,4 +1654,92 @@ return result; } +/*********************************************************************//** + * @brief + * The testSetRTCCtlReg1Status function overrides RTC control register 1 + * @details Inputs: none + * @details Outputs: rtcControlRegister1 + * @param status override RTC control register 1 with this value + * @return TRUE if override successful, FALSE if not + *************************************************************************/ +BOOL testSetRTCCtlReg1Status( U32 status ) +{ + BOOL result = FALSE; + + if ( TRUE == isTestingActivated() ) + { + result = TRUE; + rtcControlRegister1.ovData = status; + rtcControlRegister1.override = OVERRIDE_KEY; + } + + return result; +} + +/*********************************************************************//** + * @brief + * The testResetRTCCtlReg1Status function resets the override + * of RTC control register 1. + * @details Inputs: none + * @details Outputs: rtcControlRegister1 + * @return TRUE if reset successful, FALSE if not + *************************************************************************/ +BOOL testResetRTCCtlReg1Status( void ) +{ + BOOL result = FALSE; + + if ( TRUE == isTestingActivated() ) + { + result = TRUE; + rtcControlRegister1.override = OVERRIDE_RESET; + rtcControlRegister1.ovData = rtcControlRegister1.ovInitData; + } + + return result; +} + +/*********************************************************************//** + * @brief + * The testSetRTCCtlReg3Status function overrides RTC control register 3 + * @details Inputs: none + * @details Outputs: rtcControlRegister1 + * @param status override RTC control register 1 with this value + * @return TRUE if override successful, FALSE if not + *************************************************************************/ +BOOL testSetRTCCtlReg3Status( U32 status ) +{ + BOOL result = FALSE; + + if ( TRUE == isTestingActivated() ) + { + result = TRUE; + rtcControlRegister3.ovData = status; + rtcControlRegister3.override = OVERRIDE_KEY; + } + + return result; +} + +/*********************************************************************//** + * @brief + * The testResetRTCCtlReg3Status function resets the override + * of RTC control register 3. + * @details Inputs: none + * @details Outputs: rtcControlRegister1 + * @return TRUE if reset successful, FALSE if not + *************************************************************************/ +BOOL testResetRTCCtlReg3Status( void ) +{ + BOOL result = FALSE; + + if ( TRUE == isTestingActivated() ) + { + result = TRUE; + rtcControlRegister3.override = OVERRIDE_RESET; + rtcControlRegister3.ovData = rtcControlRegister1.ovInitData; + } + + return result; +} + /**@}*/