Index: firmware/App/Drivers/SafetyShutdown.c =================================================================== diff -u -ref5ef16518466c92687b869cabfa16eaf3365dc0 -ra504d6899e709d7432af9c055db1bd1fe340d032 --- firmware/App/Drivers/SafetyShutdown.c (.../SafetyShutdown.c) (revision ef5ef16518466c92687b869cabfa16eaf3365dc0) +++ firmware/App/Drivers/SafetyShutdown.c (.../SafetyShutdown.c) (revision a504d6899e709d7432af9c055db1bd1fe340d032) @@ -1,54 +1,145 @@ -/************************************************************************** - * - * 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 - * - * @date 20-Sep-2019 - * @author S. Nash - * - * @brief Controller for the safety shutdown signal. - * - **************************************************************************/ - -#include "mibspi.h" - -#include "SafetyShutdown.h" - -// ********** private definitions ********** - -// pin I/O macros -#define SAFETY_SPI1_PORT_MASK 0x00000010 // (CS[4] - re-purposed as output GPIO) -#define SET_SAFETY_SHUTDOWN() {mibspiREG1->PC3 |= SAFETY_SPI1_PORT_MASK;} -#define CLR_SAFETY_SHUTDOWN() {mibspiREG1->PC3 &= ~SAFETY_SPI1_PORT_MASK;} - -/************************************************************************* - * @brief initSafetyShutdown - * The initSafetyShutdown function initializes the Buttons module. - * @details - * Inputs : none - * Outputs : Safety Shutdown module signal output set to initial state. - * @param none - * @return none - *************************************************************************/ -void initSafetyShutdown( void ) -{ - CLR_SAFETY_SHUTDOWN(); -} - -/************************************************************************* - * @brief activateSafetyShutdown - * The activateSafetyShutdown function activates the safety shutdown signal. - * @details - * Inputs : none - * Outputs : Safety Shutdown signal output set to active state. - * @param none - * @return none - *************************************************************************/ -void activateSafetyShutdown( void ) -{ - SET_SAFETY_SHUTDOWN(); -} +/**********************************************************************//** + * + * 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 + * + * @date 20-Sep-2019 + * @author S. Nash + * + * @brief Controller for the safety shutdown signal. + * + **************************************************************************/ + +#include "mibspi.h" + +#include "SystemCommMessages.h" +#include "SafetyShutdown.h" + +/** + * @addtogroup SafetyShutdown + * @{ + */ + +// ********** private definitions ********** + +// pin I/O macros +#define SAFETY_SPI1_PORT_MASK 0x00000010 // (CS[4] - re-purposed as output GPIO) +#define SET_SAFETY_SHUTDOWN() {mibspiREG1->PC3 |= SAFETY_SPI1_PORT_MASK;} +#define CLR_SAFETY_SHUTDOWN() {mibspiREG1->PC3 &= ~SAFETY_SPI1_PORT_MASK;} + +// ********** 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 Buttons 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 \n + * signal has been activated. + * @details + * Inputs : none + * Outputs : none + * @return safetyShutdownActivated + *************************************************************************/ +BOOL isSafetyShutdownActivated( void ) +{ + return safetyShutdownActivated; +} + +/*********************************************************************//** + * @brief + * The testSetSafetyShutdownOverride function overrides the HD safety \n + * 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() ) + { + MOTOR_DIR_T dir; + + // 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 \n + * 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; +} + +/**@}*/