FSM/vscode/FSM_OOP/childtest/childFSM_private.h

124 lines
3.1 KiB
C

#ifdef __CHILDFSM_PRIVATE_FSM_H_
#error This file can only be included once!!!
#else
#define __CHILDFSM_PRIVATE_FSM_H_
#endif
#include "FSM_protected.h"
#include "childFSM.h"
#include "childFSM_state.h"
#include <stdio.h>
/* -------------------------------------------------------------------------- */
/* 继承基类 */
/* -------------------------------------------------------------------------- */
typedef struct ChildFSM
{
FSM base;
}ChildFSM;
/* -------------------------------------------------------------------------- */
/* 下一个状态选择函数 */
/* -------------------------------------------------------------------------- */
static State selectNextStateFcn(Idle)(ChildFSMData *data, FSMSignals *signals){
if(data->external.x == 1)
return D;
else
return E;
}
static State selectNextStateFcn(D)(ChildFSMData *data, FSMSignals *signals){
if(getSignal(signals, Signal_toE)){
signals->lastTriggeredSignal = Signal_toE;
return E;
}
return Idle;
}
static State selectNextStateFcn(E)(ChildFSMData *data, FSMSignals *signals){
if(getSignal(signals, Signal_toD)){
signals->lastTriggeredSignal = Signal_toD;
return D;
}
return Idle;
}
/* -------------------------------------------------------------------------- */
/* 对应的 action, exit, during 函数 */
/* -------------------------------------------------------------------------- */
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 ");
}
/* -------------------------------------------------------------------------- */
/* 转移函数 */
/* -------------------------------------------------------------------------- */
static void transitionGeneralAction(FSM pFSM){
// FSM_LOG("general");
}
// static void transitionGeneralAction(TemplateFSMData *data){
// FSM_LOG("general");
// }
static void transitionHandler(Idle, D)()
{
FSM_LOG(" Idle2D ");
}
static void transitionHandler(Idle, E)()
{
FSM_LOG(" Idle2E ");
}
static void transitionHandler(D, E)()
{
FSM_LOG(" D2E ");
}
static void transitionHandler(E, D)()
{
FSM_LOG(" E2D ");
}
/* -------------------------------------------------------------------------- */
/* 打印调试 */
/* -------------------------------------------------------------------------- */
const static char *stateStr[] = {
"Idle",
"D",
"E",
};
static void printFSM(ChildFSM* pFSM){
FSM_LOG(" \tChild: ");
FSM_LOG("CurrentState:%s, Action", stateStr[getFSMCurState((FSM *)pFSM)]);
}