FSM/vscode/FSM_OOP/template/templateFSM_private.h

126 lines
1.8 KiB
C

#ifndef __TEMPLATE_PRIVATE_FSM_H_
#define __TEMPLATE_PRIVATE_FSM_H_
#include "FSM_protected.h"
#include "templateFSM.h"
#include <stdio.h>
/*
继承基类
*/
typedef struct _TemplateFSM
{
// 继承父类
FSM base;
}TemplateFSM;
/*
状态和对应的 action, exit, during 函数
*/
typedef enum _State
{
Idle,
D,
E,
Count_State,
} State;
#define DEFAULT_STATE E
static void actionFcn(enter, D)()
{
FSM_LOG(" enterD ");
}
static void actionFcn(during, D)()
{
FSM_LOG(" duringD ");
}
static void actionFcn(exit, D)()
{
FSM_LOG(" exitD ");
}
static void actionFcn(enter, E)()
{
FSM_LOG(" enterE ");
}
static void actionFcn(during, E)()
{
FSM_LOG(" duringE ");
}
static void actionFcn(exit, E)()
{
FSM_LOG(" exitE ");
}
/*
事件和对应的转移函数
*/
typedef enum _Event{
Idle_Event,
Idle2D,
Idle2E,
D2E,
E2D,
Count_Event,
}Event;
static State transitionHandler(Idle2D)()
{
FSM_LOG(" Idle2D ");
return D;
}
static void delayHanlder(Idle2D)(TemplateFSMData *data){
FSM_LOG(" DelayIdle2D");
}
static State transitionHandler(Idle2E)()
{
FSM_LOG(" Idle2E ");
return E;
}
static State transitionHandler(D2E)()
{
FSM_LOG(" D2E ");
return E;
}
static 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(TemplateFSM* pFSM){
FSM_LOG(" \t\tTemplateFSM: ");
FSM_LOG("上次事件:%s, 当前状态:%s, 动作:", eventStr[getFSMCurEvent((FSM *)pFSM)], stateStr[getFSMCurState((FSM *)pFSM)]);
}
#endif