#ifndef __CHILD_PRIVATE_FSM_H_ #define __CHILD_PRIVATE_FSM_H_ #include "FSM_protected.h" #include "childFSM.h" #include /* 继承基类 */ typedef struct _ChildFSM { // 继承父类 FSM base; }ChildFSM; /* 状态和对应的 action, exit, during 函数 */ typedef enum _State { Idle, D, E, Count_State, } State; #define DEFAULT_STATE E void actionFcn(enter, D)() { FSM_LOG(" enterD "); } void actionFcn(during, D)() { FSM_LOG(" duringD "); } void actionFcn(exit, D)() { FSM_LOG(" exitD "); } void actionFcn(enter, E)() { FSM_LOG(" enterE "); } void actionFcn(during, E)() { FSM_LOG(" duringE "); } void actionFcn(exit, E)() { FSM_LOG(" exitE "); } /* 事件和对应的转移函数 */ typedef enum _Event{ Idle_Event, Idle2D, Idle2E, D2E, E2D, Count_Event, }Event; State transitionHandler(Idle2D)() { FSM_LOG(" Idle2D "); return D; } State transitionHandler(Idle2E)() { FSM_LOG(" Idle2E "); return E; } State transitionHandler(D2E)() { FSM_LOG(" D2E "); return E; } State transitionHandler(E2D)() { FSM_LOG(" E2D "); return D; } /* 用户自定义事件选择逻辑—————————————————begin */ const static char *stateStr[] = { "Idle", "D", "E", }; const static char *eventStr[] = { "Idle", "Idle2D", "Idle2E", "D2E", "E2D", }; static void printFSM(ChildFSM* pFSM){ FSM_LOG(" \t\tChildFSM: "); FSM_LOG("当前状态:%s, 当前事件:%s, 动作:", stateStr[getFSMCurState((FSM *)pFSM)], eventStr[getFSMCurEvent((FSM *)pFSM)]); } #endif