FSM/vscode/FSM_OOP/template/templateFSM.c

76 lines
2.3 KiB
C
Raw Normal View History

2024-01-23 20:05:30 +08:00
#include <stdio.h>
#include <stdlib.h>
#include "FSM_protected.h"
#include "templateFSM.h"
#include "templateFSM_private.h"
/*
*/
static Event ceventArr[20] = {
Idle_Event,
Idle_Event,
Idle2D,
Idle_Event,
Idle_Event,
D2E,
E2D,
D2E,
Idle_Event,
Idle_Event,
Idle_Event,
Idle_Event,
};
static Event selectEvent(TemplateFSMData *data){ // 必须重新实现
return ceventArr[data->arrindex];
}
static void step(TemplateFSM* pFSM){
printFSM(pFSM);
stepBaseFSM(BASE_FSM(pFSM));
}
static void initData(TemplateFSM *pFSM){ // 必须重新实现
TemplateFSMData *data = (TemplateFSMData *)malloc(sizeof(TemplateFSMData));
data->arrindex = 0;
pFSM->base.data = data;
}
static void setupHandler(FSMHandler* fcns){ // 必须重新实现
fcns->duringActionTable[E] = (Avoid_WARNING_State_Fcns)actionFcn(during, E);
fcns->duringActionTable[D] = (Avoid_WARNING_State_Fcns)actionFcn(during, D);
2024-01-23 20:05:30 +08:00
fcns->enterActionTable[D] = (Avoid_WARNING_State_Fcns)actionFcn(enter, D);
fcns->enterActionTable[E] = (Avoid_WARNING_State_Fcns)actionFcn(enter, E);
2024-01-23 20:05:30 +08:00
fcns->exitActionTable[D] = (Avoid_WARNING_State_Fcns)D_exitAction;
fcns->exitActionTable[E] = (Avoid_WARNING_State_Fcns)E_exitAction;
2024-01-23 20:05:30 +08:00
fcns->transitionTable[index(Idle, Idle2D)] = (Avoid_WARNING_Transition_Handler)transitionHandler(Idle2D);
fcns->transitionTable[index(Idle, Idle2E)] = (Avoid_WARNING_Transition_Handler)transitionHandler(Idle2E);
fcns->transitionTable[index(D, D2E)] = (Avoid_WARNING_Transition_Handler)transitionHandler(D2E);
fcns->transitionTable[index(E, E2D)] = (Avoid_WARNING_Transition_Handler)transitionHandler(E2D);
2024-01-23 20:05:30 +08:00
}
/*
*/
TemplateFSM *createTemplateFSM(){
TemplateFSM *pFSM;
pFSM = (TemplateFSM *)newBaseFSM(Count_State, Count_Event, DEFAULT_STATE);
pFSM->base.vtbl.step = (Avoid_WARNING_State_Fcns)step;
2024-01-23 20:05:30 +08:00
pFSM->base.vtbl.selectEvent = (Avoid_WARNING_int_data)selectEvent;
pFSM->base.vtbl.initData = (Avoid_WARNING_State_Fcns)initData;
2024-01-23 20:05:30 +08:00
pFSM->base.vtbl.setupHandler = (Avoid_WARNING_void_fcns)setupHandler;
constructFSM((FSM_Ptr)pFSM);
return pFSM;
}