Index: firmware/App/Modes/ModeSolo.c =================================================================== diff -u -r200edfc2ef75cf499887b4c85d22264ded0db125 -r7d4711edd7b40cd3e29f43e766f79a8a09586fe9 --- firmware/App/Modes/ModeSolo.c (.../ModeSolo.c) (revision 200edfc2ef75cf499887b4c85d22264ded0db125) +++ firmware/App/Modes/ModeSolo.c (.../ModeSolo.c) (revision 7d4711edd7b40cd3e29f43e766f79a8a09586fe9) @@ -1,63 +1,127 @@ /************************************************************************** - * - * Copyright (c) 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 - * - * @date 18-Mar-2020 - * @author S. Nash - * - * @brief Top-level state machine for the standby-solo mode. - * - **************************************************************************/ +* +* Copyright (c) 2020-2024 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) Michael Garthwaite +* @date (last) 16-May-2023 +* +* @author (original) Sean +* @date (original) 18-Mar-2020 +* +***************************************************************************/ -#include "OperationModes.h" -#include "ModeSolo.h" #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. - * @param none + * 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 standby-solo mode. - * @details - * Inputs : none - * Outputs : - * @param none - * @return none + * The transitionToSoloMode function prepares for transition to solo standby mode. + * @details Inputs: none + * @details Outputs: Re-initialized solo standby mode + * @return initial state *************************************************************************/ -void transitionToSoloMode( void ) +U32 transitionToSoloMode( void ) { + initSoloMode(); + setCurrentSubState( NO_SUB_STATE ); + setCPLDCleanLEDColor( CPLD_CLEAN_LED_OFF ); + + return soloState; } -/************************************************************************* +/*********************************************************************//** * @brief - * The execSoloMode function executes the Standby-Solo Mode state machine. - * @details - * Inputs : none - * Outputs : - * @param none - * @return none + * The execSoloMode function executes the solo standby mode state machine. + * @details Inputs: none + * @details Outputs: Solo standby mode state machine executed + * @return current state. *************************************************************************/ -void execSoloMode( void ) +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; +} + +/**@}*/