/************************************************************************** * * 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 ModeSolo.c * * @author (last) Dara Navaei * @date (last) 04-Jun-2020 * * @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 Standby-Solo Mode module. * @details * Inputs : none * Outputs : Standby-Solo Mode module initialized. * @return none *************************************************************************/ void initSoloMode( void ) { soloState = DG_SOLO_STANDBY_STATE_START; } /*********************************************************************//** * @brief * The transitionToSoloMode function prepares for transition to standby-solo mode. * @details * Inputs : none * Outputs : * @return none *************************************************************************/ void transitionToSoloMode( void ) { initSoloMode(); } /*********************************************************************//** * @brief * The execSoloMode function executes the Standby-Solo Mode state machine. * @details * Inputs : none * Outputs : * @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: // TODO - s/w fault soloState = DG_SOLO_STANDBY_STATE_START; break; } return soloState; } /*********************************************************************//** * @brief * The handleIdleDGSoloStandbyState function handles the idle state of DG \n * standby-solo mode. * @details * Inputs : none * Outputs : none * @return the next state of standby-solo 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 the \n * standby-solo mode. * @details * Inputs : soloState * Outputs : none * @return the current state of standby-solo mode. *************************************************************************/ DG_SOLO_STANDBY_STATE_T getCurrentSoloState( void ) { return soloState; } /**@}*/