¶Ô±ÈÐÂÎļþ |
| | |
| | | /******************************************************************************* |
| | | * File Name : PointTable.h |
| | | * Description : |
| | | * Created on : 2019å¹´5æ12æ¥ |
| | | * Author : www.hido-studio.com |
| | | *******************************************************************************/ |
| | | #ifndef _HIDO_FSM_H_ |
| | | #define _HIDO_FSM_H_ |
| | | |
| | | /******************************************************************************* |
| | | * Include Files * |
| | | *******************************************************************************/ |
| | | #include "HIDO_TypeDef.h" |
| | | #include "stdarg.h" |
| | | |
| | | /******************************************************************************* |
| | | * Macro * |
| | | *******************************************************************************/ |
| | | #define HIDO_FSM_DECLARE(name) \ |
| | | extern HIDO_FSMStruct g_stFSM##name /* 声æä¸ä¸ªç¶ææº */ |
| | | |
| | | #define HIDO_FSM_STATE_EXTERN(name) \ |
| | | extern const HIDO_StateStruct g_stState##name /* 声æä¸ä¸ªç¶æ */ |
| | | |
| | | #define HIDO_FSM_DECLARE_IMPLEMENT(name) \ |
| | | HIDO_FSMStruct g_stFSM##name = { HIDO_NULL }; /* å®ç°ä¸ä¸ªç¶ææº */ |
| | | |
| | | #define HIDO_FSM_STATE_DECLARE(name) \ |
| | | extern const HIDO_StateStruct g_stState##name; \ |
| | | HIDO_INT32 name##Proc(HIDO_FSMStruct *_pstFSM, HIDO_UINT32 _u32Event, void *_pArg); |
| | | /* 声æç¶ææºçä¸ä¸ªç¶æ,[name]ç¶æçåå */ |
| | | |
| | | #define HIDO_FSM_DETACHED_STATE(name) \ |
| | | extern HIDO_StateStruct g_stState##name; \ |
| | | HIDO_INT32 name##Proc(HIDO_FSMStruct *_pstFSM, HIDO_UINT32 _u32Event, void *_pArg); |
| | | /* 声æç¶ææºçä¸ä¸ªç¶æ,[name]ç¶æçåå */ |
| | | |
| | | #define HIDO_FSM_STATE_FULL_DECLARE(parent, name) HIDO_FSM_STATE_DECLARE(name) |
| | | |
| | | #define HIDO_FSM_STATE_IMPLEMENT(name, parent, init) \ |
| | | const HIDO_StateStruct g_stState##name = { #name, parent, init, name##Proc }; \ |
| | | HIDO_INT32 name##Proc(HIDO_FSMStruct *_pstFSM, HIDO_UINT32 _u32Event, void *_pArg) |
| | | /* å®ç°ä¸ä¸ªç¶æ */ |
| | | |
| | | #define HIDO_FSM_DETACHED_STATE_IMPLEMENT(name, parent, init) \ |
| | | HIDO_StateStruct g_stState##name = { #name, parent, init, name##Proc }; \ |
| | | HIDO_INT32 name##Proc(HIDO_FSMStruct *_pstFSM, HIDO_UINT32 _u32Event, void *_pArg) |
| | | /* å®ç°ä¸ä¸ªç¶æ */ |
| | | #define HIDO_FSM_DETACHED_STATE_SETTLE(name, parent, init) \ |
| | | g_stState##name.m_pstParent = (parent);\ |
| | | g_stState##name.m_pstInit = (init); |
| | | /* å¨æä¿®æ¹ç¶æçå
³èå
³ç³»ï¼ä¿®æ¹å®çå¤«ç¶æååç¶æ */ |
| | | #define HIDO_FSM(name) (&g_stFSM##name) |
| | | #define HIDO_FSM_STATE(name) (&g_stState##name) |
| | | |
| | | #define HIDO_EVENT_ENTRY 0 /* è¿å
¥ç¶æçäºä»¶ */ |
| | | #define HIDO_EVENT_EXIT 1 /* éåºç¶æçäºä»¶ */ |
| | | #define HIDO_EVENT_ENTRY_NAME "EVENT_ENTRY" /* è¿å
¥ç¶æçäºä»¶åå */ |
| | | #define HIDO_EVENT_EXIT_NAME "EVENT_EXIT" /* éåºç¶æçäºä»¶åå */ |
| | | |
| | | #define HIDO_EVENT_OK 0 /* äºä»¶æ§è¡OK */ |
| | | #define HIDO_EVENT_NO_PROC 1 /* å½åç¶æä¸è½å¤çç®æ äºä»¶ï¼éè¦ç±ç¶ç¶æå®æ */ |
| | | #define HIDO_STATE_MAX_DEPTH 10 /* ç¶ææºç¶æåµå¥çæå¤§æ·±åº¦ */ |
| | | |
| | | /******************************************************************************* |
| | | * Type Definition * |
| | | *******************************************************************************/ |
| | | typedef struct HIDO_StateStruct HIDO_StateStruct; |
| | | typedef struct HIDO_StateListStruct HIDO_StateListStruct; |
| | | typedef struct HIDO_FSMStruct HIDO_FSMStruct; |
| | | typedef struct HIDO_FSMQueueStruct HIDO_FSMQueueStruct; |
| | | typedef struct HIDO_FSMQueueDataStruct HIDO_FSMQueueDataStruct; |
| | | |
| | | /* ç¶æåæ° */ |
| | | typedef struct |
| | | { |
| | | HIDO_VOID *m_pArg; /* ç¨æ·åæ°æé */ |
| | | const HIDO_StateStruct *m_pstAfterState; /* äºä»¶æ§è¡å®è¿å
¥çä¸ä¸ä¸ªç¶æ */ |
| | | } HIDO_StateArgStruct; |
| | | |
| | | /* ç¶æçå®ç° */ |
| | | typedef HIDO_INT32 (* HIDO_DebugFunc)(HIDO_FSMStruct *_pstStateMachine, HIDO_INT32 _i32Level, HIDO_CHAR *_pcFmt, va_list _ap); |
| | | typedef HIDO_INT32 (* HIDO_StateFunc)(HIDO_FSMStruct *, HIDO_UINT32, void *); |
| | | struct HIDO_StateStruct |
| | | { |
| | | const char *m_pcName; |
| | | const HIDO_StateStruct *m_pstParent; |
| | | const HIDO_StateStruct *m_pstInit; |
| | | HIDO_StateFunc m_fnProc; |
| | | }; |
| | | |
| | | /* æªä½¿ç¨ */ |
| | | struct HIDO_FSMQueueDataStruct |
| | | { |
| | | HIDO_UINT32 m_u32Event; |
| | | void *m_pArg; |
| | | }; |
| | | |
| | | /* æªä½¿ç¨ */ |
| | | struct HIDO_FSMQueueStruct |
| | | { |
| | | HIDO_UINT32 m_u32Cnt; |
| | | HIDO_UINT32 m_u32Rear; |
| | | HIDO_UINT32 m_u32Front; |
| | | HIDO_UINT32 m_u32Size; |
| | | HIDO_FSMQueueDataStruct *m_pstBuff; |
| | | }; |
| | | |
| | | /* ç¶ææºçå®ç°ç»æä½ */ |
| | | struct HIDO_FSMStruct |
| | | { |
| | | #define HIDO_FSM_DBG_FLAG_OFF 0 /* 弿¥å¿ */ |
| | | #define HIDO_FSM_DBG_FLAG_ON 1 /* å
³æ¥å¿ */ |
| | | |
| | | HIDO_UINT16 m_u16ID; /* ç¶ææºID æªä½¿ç¨ */ |
| | | HIDO_UINT16 m_u16DbgFlag; /* ç¶ææºè°è¯æå°å¼å
³ */ |
| | | const HIDO_StateStruct *m_pstCurrentState; /* ç¶ææºå½åçç¶æ */ |
| | | void *m_pPrivateData; /* ç¶ææºç§ææ°æ® */ |
| | | const char *m_pcName; /* ç¶ææºåå */ |
| | | const char * const*m_ppcEventName; /* ç¶ææºäºä»¶åååå */ |
| | | HIDO_FSMStruct *m_pstNext; /* æªä½¿ç¨ */ |
| | | HIDO_FSMQueueStruct m_stEventQueue; /* æªä½¿ç¨ */ |
| | | HIDO_DebugFunc m_fnDebugFunc; |
| | | }; |
| | | |
| | | /* æªä½¿ç¨ */ |
| | | struct HIDO_StateListStruct |
| | | { |
| | | const HIDO_StateStruct *m_pstState; |
| | | HIDO_StateListStruct *m_pstNext; |
| | | }; |
| | | |
| | | /******************************************************************************* |
| | | * Global Function * |
| | | *******************************************************************************/ |
| | | /******************************************************************************* |
| | | * Function Name : HIDO_FSMEventExecute |
| | | * Description : ç¶ææºæ§è¡ä¸ä¸ªäºä»¶ |
| | | * Input : _ptStatMachine ç¶ææºç»æä½æé |
| | | * _uEvent ç¶ææºçäºä»¶ |
| | | * _pArg ç¶ææºæ§è¡äºä»¶æ¶ä¼ éçåæ° |
| | | * Output : None |
| | | * Return : None |
| | | * Author : www.hido-studio.com |
| | | * Modified Date: : 2019å¹´07æ15æ¥ |
| | | *******************************************************************************/ |
| | | void HIDO_FSMEventExecute(HIDO_FSMStruct *_ptStateMachine, HIDO_UINT32 _uEvent, void *_pArg); |
| | | |
| | | /******************************************************************************* |
| | | * Function Name : HIDO_FSMRegister |
| | | * Description : ç¶ææºæ³¨å |
| | | * Input : _ptStatMachine ç¶ææºç»æä½æé |
| | | * _ptInitState ç¶ææºçåå§ç¶æ |
| | | * _pcName ç¶ææºçåå(ç¨äºè°è¯æå°) |
| | | * _ppcEventName ç¶ææºæ¶é´çåå(ç¨äºè°è¯æå°) |
| | | * _pPrivateData ç¶ææºç§ææ°æ®,å¯ä»¥ç»ç¶ææºå
³èä¸ä¸ªç§ææ°æ® |
| | | * _u16DbgFlag è°è¯å¼å
³ HIDO_FSM_DBG_FLAG_OFF=å
³ HIDO_FSM_DBG_FLAG_ON=å¼ |
| | | * Output : None |
| | | * Return : None |
| | | * Author : www.hido-studio.com |
| | | * Modified Date: : 2019å¹´07æ15æ¥ |
| | | *******************************************************************************/ |
| | | void HIDO_FSMRegister(HIDO_FSMStruct *_ptStatMachine, const HIDO_StateStruct *_ptInitState, const char *_pcName, const char * const*_ppcEventName, |
| | | void *_pPrivateData, HIDO_UINT16 _u16DbgFlag); |
| | | |
| | | /******************************************************************************* |
| | | * Function Name : DB_FSMRegisterDebugFunc |
| | | * Description : |
| | | * Input : |
| | | * Output : |
| | | * Return : |
| | | * Author : DuJian |
| | | * Modified Date: : 2019å¹´11æ18æ¥ |
| | | *******************************************************************************/ |
| | | HIDO_INT32 HIDO_FSMRegisterDebugFunc(HIDO_FSMStruct *_pstStatMachine, HIDO_DebugFunc _fnDebugFunc); |
| | | |
| | | /******************************************************************************* |
| | | * Function Name : HIDO_FSMStateChange |
| | | * Description : ç¶ææºç¶æè¿ç§»æ¥å£ |
| | | * Input : _ptStateMachine ç¶ææºç»æä½æé |
| | | * _ptNewState æ°çç¶æ(ç¶æè¿ç§»çç®æ ç¶æ) |
| | | * _pData ç¶æè¿ç§»æ¶æºå¸¦çæ°æ® |
| | | * Output : None |
| | | * Return : None |
| | | * Author : www.hido-studio.com |
| | | * Modified Date: : 2019å¹´07æ15æ¥ |
| | | *******************************************************************************/ |
| | | void HIDO_FSMStateChange(HIDO_FSMStruct *_ptStateMachine, const HIDO_StateStruct *_ptNewState, void *_pData); |
| | | |
| | | /******************************************************************************* |
| | | * Function Name : HIDO_FSMStartTimer |
| | | * Description : ç¶ææºå¯å¨å®æ¶å¨æ¥å£ |
| | | * Input : _eTimerID 宿¶å¨çID |
| | | * _u8Type 宿¶å¨çç±»å(åHIDO_Timerãhä¸çç±»å) |
| | | * _uTick 宿¶å¨ç宿¶tick(åä½ms) |
| | | * _ptStatMachine ç¶ææºç»æä½æé |
| | | * _uEvent 宿¶å¨è¶
æ¶å,åç¶ææºåéçäºä»¶ |
| | | * Output : None |
| | | * Return : None |
| | | * Author : www.hido-studio.com |
| | | * Modified Date: : 2019å¹´07æ15æ¥ |
| | | *******************************************************************************/ |
| | | void HIDO_FSMStartTimer(HIDO_UINT32 _eTimerID, HIDO_UINT8 _u8Type, HIDO_UINT32 _uTick, HIDO_FSMStruct *_ptStatMachine, HIDO_UINT32 _uEvent); |
| | | |
| | | #endif |
| | | |