/** * @file sysfsm1.h * @author Zhang, Kai(zhangkai71@midea.com) * @brief System FSM * @version 0.1 * @date 2021-09-27 * * @copyright Copyright (c) 2021 * */ #ifndef FSM1ST_H #define FSM1ST_H #include "typedefine.h" /**************************************** * * Definitions & Macros * ****************************************/ #define SYS_RDY_FLG_DEFAULT \ { \ FALSE, FALSE, FALSE, FALSE, FALSE \ } // Default value of FW_CTRL_OUT #define SYS_FSM_FLG_DEFAULT \ { \ FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, 0 \ } // Default value of FW_CTRL_OUT #define DISPLAY_DISABLE_CNT 15 * 60 * 1000 // 15mins #define SHUT_DOWN_CNT 30 * 60 * 1000 // 30min /*************************************** * * Type Definations * ***************************************/ /** * @brief Type of signal * */ typedef struct { BOOL Switched; BOOL Sensor; BOOL Assist; BOOL Light; BOOL Display; } SIGNAL_STATE; /** * @brief Type of system FSM * */ typedef enum { SysInit = 0, SysRdy = 1, SysFault = 2, } SYS_FSM_STATUS; /** * @brief Type of system FSM flag * */ typedef struct { BOOL HMI_Flag; ///< BOOL SysCoef_Flag; BOOL SysRdy_Flag; BOOL SysRun_Flag; BOOL SysWarnning_Flag; BOOL SysFault_Flag; int Standby_flg; } SYS_FMS_FLAG; /** * @brief Type of system ready flag * */ typedef struct { BOOL blAlmOccrFlg; BOOL CommuRdy_Flag; BOOL blADCInitOvrFlg; BOOL blFSMRstOvrFlg; BOOL blCtrlMdVarClcOvrFlg; } SYS_RDY_FLG; /** * @brief Type of system hook function * */ typedef struct { SYS_FSM_STATUS state; void (*Event_hook)(void); void (*Tbcup_hook)(void); void (*TbcDown_hook)(void); void (*Tbs_hook)(void); } FSM_SYS_HOOK; /**************************************** * * Exported variable * ****************************************/ extern FSM_SYS_HOOK FSM1st_Sys_state; extern FSM_SYS_HOOK SysFault_state; extern SYS_RDY_FLG sysfsm_stFlg; extern SIGNAL_STATE signal_state; extern SYS_FMS_FLAG switch_flg; extern ULONG swSwitchStateCnts; extern FSM_SYS_HOOK SysFault_state; extern SYS_FSM_STATUS FaultFROM; /*************************************** * * Function Definations * ***************************************/ /** * @brief Process when switching state from Ready to Run * */ void ReadytoRun(void); /** * @brief Process when switching state from SysInit to SysFault * */ void InittoFault(void); /** * @brief Process when switching state from SysReady to SysFault * */ void RdytoFault(void); /** * @brief Process of FSM during SysInit state * */ void SysInit_hook(void); /** * @brief Process of FSM during SysRdy state * */ void SysRdy_hook(void); /** * @brief Process of FSM during SysFualt state * */ void SysFault_hook(void); /** * @brief Process of Tbc up during SysInit state * */ void SysInit_TbcUphook(void); /** * @brief Process of Tbc up during sysRdy state * */ void SysRdy_TbcUphook(void); /** * @brief Process of Tbc up during SysFault state * */ void SysFault_TbcDownhook(void); /** * @brief Process of Tbc down during SysInit state * */ void SysInit_TbcDownhook(void); /** * @brief Process of Tbc down during sysRdy state * */ void SysRdy_TbcDownhook(void); /** * @brief Process of Tbc down during SysFault state * */ void SysFault_TbcUphook(void); /** * @brief Process of Tbs during SysInit state * */ void SysInit_Tbshook(void); /** * @brief Process of Tbs during sysRdy state * */ void SysRdy_Tbshook(void); /** * @brief Process of Tbs during SysFault state * */ void SysFault_Tbshook(void); /** * @brief Switch current state to *in state * * @param in pointer to target state */ void Switch_sys_FSM(FSM_SYS_HOOK *in); /** * @brief System FSM running function * */ void FSM_1st_Main(void); /** * @brief Relay power on * */ void RlyOnInit(void); /** * @brief Build communication with BMS and Display * */ void CommuInit(void); /** * @brief System FSM initialization * */ void FSM_voInit(void); #endif