Index: TestSupport.c =================================================================== diff -u -r4cc881a776c1868f7b7c28c6ce334b59f155ae32 -r329c473b3245e42c365bc637136e9ef21ed2a5f0 --- TestSupport.c (.../TestSupport.c) (revision 4cc881a776c1868f7b7c28c6ce334b59f155ae32) +++ TestSupport.c (.../TestSupport.c) (revision 329c473b3245e42c365bc637136e9ef21ed2a5f0) @@ -16,6 +16,8 @@ ***************************************************************************/ #include "Common.h" +#include "SystemCommMessages.h" +#include "Timers.h" /** * @addtogroup TestSupport @@ -24,9 +26,14 @@ // ********** private definitions ********** +#define TEST_CONFIG_ENABLE_KEY 0xDABA36B2 ///< Release software configuration enable key. +#define TEST_CONFIG_DISABLE_KEY 0x00000000 ///< Release software configuration disable key. +#define DIALIN_CHECK_IN_TIMEOUT_MS ( 5 * SEC_PER_MIN * MS_PER_SECOND ) ///< Dialin check in timeout in milliseconds. // ********** private data ********** +static U32 testConfig[ NUM_OF_TEST_CONFIGS ]; ///< Release software configuration. +static U32 dialinCheckInTimeStamp; ///< Dialin checkin time stamp. // ********** private function prototypes ********** @@ -52,7 +59,6 @@ return result; } - /*********************************************************************//** * @brief * The getU16OverrideValue function extracts the appropriate U16 @@ -139,4 +145,199 @@ return result; } +// ********** Release software configurations functions ********** + +/*********************************************************************//** + * @brief + * The initTestConfigs function initializes the test software configurations. + * @details Inputs: none + * @details Outputs: testConfig + * @return none + *************************************************************************/ +void initTestConfigs( void ) +{ + resetAllTestConfigs(); +} + +/*********************************************************************//** + * @brief + * The setTestConfig function sets the test configuration. + * Must be logged into HD/DG. + * @details Inputs: none + * @details Outputs: testConfig + * @param config which is the configuration to set + * @return TRUE if the set configuration was successful otherwise, FALSE + *************************************************************************/ +BOOL setTestConfig( TEST_CONFIG_T config ) +{ + BOOL status = FALSE; + + if ( ( config < NUM_OF_TEST_CONFIGS ) && ( TRUE == isTestingActivated() ) ) + { + testConfig[ config ] = TEST_CONFIG_ENABLE_KEY; + status = TRUE; + } + else + { +#ifdef _DG_ + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DG_SOFTWARE_FAULT, SW_FAULT_ID_DG_INVALID_TEST_CONFIG_SELECTED, config ) +#endif + } + + return status; +} + +/*********************************************************************//** + * @brief + * The resetTestConfig function resets the test configuration. + * Must be logged into HD/DG. + * @details Inputs: none + * @details Outputs: testConfig + * @param config which is the configuration to reset + * @return TRUE if the reset configuration was successful otherwise, FALSE + *************************************************************************/ +BOOL resetTestConfig( TEST_CONFIG_T config ) +{ + BOOL status = FALSE; + + if ( ( config < NUM_OF_TEST_CONFIGS ) && ( TRUE == isTestingActivated() ) ) + { + testConfig[ config ] = TEST_CONFIG_DISABLE_KEY; + status = TRUE; + } + else + { +#ifdef _DG_ + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DG_SOFTWARE_FAULT, SW_FAULT_ID_DG_INVALID_TEST_CONFIG_SELECTED, config ) +#endif + } + + return status; +} + +/*********************************************************************//** + * @brief + * The getTestConfigStatus function gets the status of the provided test + * configuration. Must be logged into HD/DG. + * @details Inputs: testConfig + * @details Outputs: none + * @param config the test configuration + * @return TRUE if the test configuration is enabled otherwise, FALSE + *************************************************************************/ +BOOL getTestConfigStatus( TEST_CONFIG_T config ) +{ + BOOL status = FALSE; + + if ( ( TEST_CONFIG_ENABLE_KEY == testConfig[ config ] ) && ( TRUE == isTestingActivated() ) ) + { + status = TRUE; + } + + return status; +} + +/*********************************************************************//** + * @brief + * The sendTestConfigStatusToDialin function sends the test configuration + * status to dialin. + * @details Inputs: none + * @details Outputs: testConfig + * @return TRUE if the serialization is successful otherwise, FALSE + *************************************************************************/ +BOOL sendTestConfigStatusToDialin( void ) +{ + BOOL result = FALSE; + MESSAGE_T msg; + TEST_CONFIG_T config; + U32 configStatus = 0; + U08 *payloadPtr = msg.payload; + + if ( TRUE == isTestingActivated() ) + { + // Create a message record + blankMessage( &msg ); +#ifdef _DG_ + msg.hdr.msgID = MSG_ID_DG_SEND_TEST_CONFIGURATION; +#endif + msg.hdr.payloadLen = sizeof( testConfig ); + + for ( config = TEST_CONFIG_ENABLE_MIXING_WITH_WATER; config < NUM_OF_TEST_CONFIGS; ++config ) + { + configStatus = (U32)getTestConfigStatus( config ); + + memcpy( payloadPtr, &configStatus, sizeof( U32 ) ); + payloadPtr += sizeof( U32 ); + } + + // Serialize the message (w/ sync, CRC, and appropriate CAN padding) and add serialized message data to appropriate comm buffer + result = serializeMessage( msg, COMM_BUFFER_OUT_CAN_PC, ACK_NOT_REQUIRED ); + } + + return result; +} + +/*********************************************************************//** + * @brief + * The resetAllTestConfigs function resets all of the test configurations. + * Must be logged into HD/DG. + * @details Inputs: none + * @details Outputs: testConfig + * @return TRUE if the reset was successful otherwise, FALSE + *************************************************************************/ +BOOL resetAllTestConfigs( void ) +{ + BOOL status = FALSE; + + if ( TRUE == isTestingActivated() ) + { + TEST_CONFIG_T config; + + for ( config = TEST_CONFIG_ENABLE_MIXING_WITH_WATER; config < NUM_OF_TEST_CONFIGS; ++config ) + { + testConfig[ config ] = TEST_CONFIG_DISABLE_KEY; + } + + status = TRUE; + } + + return status; +} + +/*********************************************************************//** + * @brief + * The setDialinCheckInTimeStamp function set the dialin check in timestamp. + * @details Inputs: none + * @details Outputs: dialinCheckInTimeStamp + * @return none + *************************************************************************/ +void setDialinCheckInTimeStamp( void ) +{ + dialinCheckInTimeStamp = getMSTimerCount(); +} + +/*********************************************************************//** + * @brief + * The hasDialinCheckInExpired function checks whether the check in from + * dialin has expired or not. + * @details Inputs: none + * @details Outputs: dialinCheckInTimeStamp + * @return TRUE if the check in has been expired otherwise, FALSE + *************************************************************************/ +BOOL hasDialinCheckInExpired( void ) +{ + BOOL status = FALSE; + + if ( ( TRUE == didTimeout( dialinCheckInTimeStamp, DIALIN_CHECK_IN_TIMEOUT_MS ) ) && ( TRUE == isTestingActivated() ) ) + { + // If the user has logged in and the check in from dialin has expired, set the status to true + status = TRUE; + } + + // TODO remove when the dialin portion has been implemented + status = FALSE; + // TODo remove when the dialin portion has been implemented + + return status; +} + /**@}*/