/************************************************************************** * * Copyright (c) 2020-2022 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 ModeSolo.c * * @author (last) Darren Cox * @date (last) 02-Aug-2022 * * @author (original) Sean * @date (original) 18-Mar-2020 * ***************************************************************************/ #include "CPLD.h" #include "ModeSolo.h" #include "OperationModes.h" #include "SystemComm.h" /** * @addtogroup DGSoloStandbyMode * @{ */ // ********** private definitions ********** // ********** private data ********** static DG_SOLO_STANDBY_STATE_T soloState = DG_SOLO_STANDBY_STATE_START; ///< Currently active solo standby state. // ********** private function prototypes ********** static DG_SOLO_STANDBY_STATE_T handleIdleDGSoloStandbyState( void ); /*********************************************************************//** * @brief * The initSoloMode function initializes the solo standby mode module. * @details Inputs: none * @details Outputs: Solo standby mode module initialized * @return none *************************************************************************/ void initSoloMode( void ) { soloState = DG_SOLO_STANDBY_STATE_START; } /*********************************************************************//** * @brief * The transitionToSoloMode function prepares for transition to solo standby mode. * @details Inputs: none * @details Outputs: Re-initialized solo standby mode * @return initial state *************************************************************************/ U32 transitionToSoloMode( void ) { initSoloMode(); setCPLDCleanLEDColor( CPLD_CLEAN_LED_OFF ); return soloState; } /*********************************************************************//** * @brief * The execSoloMode function executes the solo standby mode state machine. * @details Inputs: none * @details Outputs: Solo standby mode state machine executed * @return current state. *************************************************************************/ U32 execSoloMode( void ) { // execute current solo standby state switch ( soloState ) { case DG_SOLO_STANDBY_STATE_START: soloState = DG_SOLO_IDLE_STATE; break; case DG_SOLO_IDLE_STATE: soloState = handleIdleDGSoloStandbyState(); break; default: SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DG_SOFTWARE_FAULT, SW_FAULT_ID_SOLO_MODE_INVALID_EXEC_STATE, soloState ) soloState = DG_SOLO_STANDBY_STATE_START; break; } return soloState; } /*********************************************************************//** * @brief * The handleIdleDGSoloStandbyState function handles the idle state of solo standby mode. * @details Inputs: none * @details Outputs: none * @return the next state of solo standby mode. *************************************************************************/ static DG_SOLO_STANDBY_STATE_T handleIdleDGSoloStandbyState( void ) { DG_SOLO_STANDBY_STATE_T result = DG_SOLO_IDLE_STATE; // if HD is on, transition to DG standby mode if ( TRUE == isHDCommunicating() ) { requestNewOperationMode( DG_MODE_STAN ); } return result; } /*********************************************************************//** * @brief * The getCurrentSoloState function returns the current state of solo standby mode. * @details Inputs: soloState * @details Outputs: none * @return the current state of solo standby mode. *************************************************************************/ DG_SOLO_STANDBY_STATE_T getCurrentSoloState( void ) { return soloState; } /**@}*/