/************************************************************************** * * Copyright (c) 2019-2020 Diality Inc. - All Rights Reserved. * * THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN * WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. * * @file SafetyShutdown.c * * @author (last) Quang Nguyen * @date (last) 21-Aug-2020 * * @author (original) Dara Navaei * @date (original) 05-Nov-2019 * ***************************************************************************/ #include "mibspi.h" #include "SystemCommMessages.h" #include "SafetyShutdown.h" /** * @addtogroup SafetyShutdown * @{ */ // ********** private definitions ********** #define SAFETY_SPI1_PORT_MASK 0x00000010 ///< Safety shutdown GPIO port mask (CS[4] - re-purposed as output GPIO). #define SET_SAFETY_SHUTDOWN() {mibspiREG1->PC3 |= SAFETY_SPI1_PORT_MASK;} ///< Set safety shutdown GPIO macro. #define CLR_SAFETY_SHUTDOWN() {mibspiREG1->PC3 &= ~SAFETY_SPI1_PORT_MASK;} ///< Clear safety shutdown GPIO macro. // ********** private definitions ********** static BOOL safetyShutdownActivated = FALSE; ///< Status of safety shutdown signal. static BOOL safetyShutdownOverrideResetState = FALSE; ///< Natural status of safety shutdown signal. Used to restore state on override reset. /*********************************************************************//** * @brief * The initSafetyShutdown function initializes the safety shutdown module. * @details * Inputs : none * Outputs : Safety shutdown module signal output set to initial state. * @return none *************************************************************************/ void initSafetyShutdown( void ) { CLR_SAFETY_SHUTDOWN(); } /*********************************************************************//** * @brief * The activateSafetyShutdown function activates the safety shutdown signal. * @details * Inputs : none * Outputs : Safety shutdown signal output set to active state. * @return none *************************************************************************/ void activateSafetyShutdown( void ) { SET_SAFETY_SHUTDOWN(); } /*********************************************************************//** * @brief * The isSafetyShutdownActivated function returns whether the safety shutdown * signal has been activated. * @details * Inputs : none * Outputs : none * @return safetyShutdownActivated *************************************************************************/ BOOL isSafetyShutdownActivated( void ) { return safetyShutdownActivated; } /*********************************************************************//** * @brief * The testSetSafetyShutdownOverride function overrides the HD safety shutdown. * @details * Inputs : none * Outputs : HD safety shutdown overridden * @param value TRUE to activate safety shutdown, FALSE to de-activate it * @return TRUE if override successful, FALSE if not *************************************************************************/ BOOL testSetSafetyShutdownOverride( U32 value ) { BOOL result = FALSE; if ( TRUE == isTestingActivated() ) { // remember natural state before override so we can reset safetyShutdownOverrideResetState = safetyShutdownActivated; // override safety shutdown signal if ( value > 0 ) { activateSafetyShutdown(); } else { safetyShutdownActivated = FALSE; CLR_SAFETY_SHUTDOWN(); } result = TRUE; } return result; } /*********************************************************************//** * @brief * The testResetSafetyShutdownOverride function resets the override of the * HD safety shutdown. * @details * Inputs : none * Outputs : shutdown override reset * @return TRUE if override reset successful, FALSE if not *************************************************************************/ BOOL testResetSafetyShutdownOverride( void ) { BOOL result = FALSE; if ( TRUE == isTestingActivated() ) { if ( TRUE == safetyShutdownOverrideResetState ) { activateSafetyShutdown(); } else { safetyShutdownActivated = FALSE; CLR_SAFETY_SHUTDOWN(); } result = TRUE; } return result; } /**@}*/