FSM/vscode/FSM_OOP/childtest/childFSM_private.h

134 lines
3.5 KiB
C
Raw Normal View History

2024-06-26 20:21:14 +08:00
#ifdef __CHILDFSM_PRIVATE_FSM_H_
#error This file can only be included once!!!
#else
#define __CHILDFSM_PRIVATE_FSM_H_
#endif
2024-01-30 15:50:34 +08:00
#include "FSM_protected.h"
#include "childFSM.h"
#include <stdio.h>
2024-06-26 20:21:14 +08:00
/* -------------------------------------------------------------------------- */
/* 继承基类 */
/* -------------------------------------------------------------------------- */
typedef struct ChildFSM
2024-01-30 15:50:34 +08:00
{
FSM base;
}ChildFSM;
2024-06-26 20:21:14 +08:00
/* -------------------------------------------------------------------------- */
/* 状态定义 */
/* -------------------------------------------------------------------------- */
2024-01-30 15:50:34 +08:00
2024-06-26 20:21:14 +08:00
/**
* @brief Idle和Count_State必须占据开头和结尾两个位置
*
*/
2024-01-30 15:50:34 +08:00
typedef enum _State
{
2024-06-26 20:21:14 +08:00
Idle, /**< 必须在开头,并且枚举值=0 */
2024-01-30 15:50:34 +08:00
D,
E,
2024-06-26 20:21:14 +08:00
Count_State, /**< 必须在结尾,用来统计状态数量 */
2024-01-30 15:50:34 +08:00
} State;
2024-06-26 20:21:14 +08:00
#define DEFAULT_STATE D /**< 默认状态Idle状态会先跳转到默认状态 */
/* -------------------------------------------------------------------------- */
/* 下一个状态选择函数 */
/* -------------------------------------------------------------------------- */
static State selectNextStateFcn(D)(ChildFSM *data, FSMSignals *signals){
if(getSignal(signals, Signal_toE)){
signals->lastTriggeredSignal = Signal_toE;
return E;
}
return Idle;
}
static State selectNextStateFcn(E)(ChildFSM *data, FSMSignals *signals){
if(getSignal(signals, Signal_toD)){
signals->lastTriggeredSignal = Signal_toD;
return D;
}
return Idle;
}
2024-01-30 15:50:34 +08:00
2024-06-26 20:21:14 +08:00
/* -------------------------------------------------------------------------- */
/* 对应的 action, exit, during 函数 */
/* -------------------------------------------------------------------------- */
static void actionFcn(enter, D)()
2024-01-30 15:50:34 +08:00
{
2024-01-30 16:06:02 +08:00
FSM_LOG(" enterD ");
2024-01-30 15:50:34 +08:00
}
2024-06-26 20:21:14 +08:00
static void actionFcn(during, D)()
2024-01-30 15:50:34 +08:00
{
2024-01-30 16:06:02 +08:00
FSM_LOG(" duringD ");
2024-01-30 15:50:34 +08:00
}
2024-06-26 20:21:14 +08:00
static void actionFcn(exit, D)()
2024-01-30 15:50:34 +08:00
{
2024-01-30 16:06:02 +08:00
FSM_LOG(" exitD ");
2024-01-30 15:50:34 +08:00
}
2024-06-26 20:21:14 +08:00
static void actionFcn(enter, E)()
2024-01-30 15:50:34 +08:00
{
2024-01-30 16:06:02 +08:00
FSM_LOG(" enterE ");
2024-01-30 15:50:34 +08:00
}
2024-06-26 20:21:14 +08:00
static void actionFcn(during, E)()
2024-01-30 15:50:34 +08:00
{
2024-01-30 16:06:02 +08:00
FSM_LOG(" duringE ");
2024-01-30 15:50:34 +08:00
}
2024-06-26 20:21:14 +08:00
static void actionFcn(exit, E)()
2024-01-30 15:50:34 +08:00
{
2024-01-30 16:06:02 +08:00
FSM_LOG(" exitE ");
2024-01-30 15:50:34 +08:00
}
2024-06-26 20:21:14 +08:00
/* -------------------------------------------------------------------------- */
/* 转移函数 */
/* -------------------------------------------------------------------------- */
static void transitionGeneralAction(FSM pFSM){
// FSM_LOG("general");
}
2024-01-30 15:50:34 +08:00
2024-06-26 20:21:14 +08:00
// static void transitionGeneralAction(TemplateFSMData *data){
// FSM_LOG("general");
// }
2024-01-30 15:50:34 +08:00
2024-06-26 20:21:14 +08:00
static void transitionHandler(Idle, D)()
2024-01-30 15:50:34 +08:00
{
2024-01-30 16:06:02 +08:00
FSM_LOG(" Idle2D ");
2024-01-30 15:50:34 +08:00
}
2024-06-26 20:21:14 +08:00
static void transitionHandler(Idle, E)()
2024-01-30 15:50:34 +08:00
{
2024-01-30 16:06:02 +08:00
FSM_LOG(" Idle2E ");
2024-01-30 15:50:34 +08:00
}
2024-06-26 20:21:14 +08:00
static void transitionHandler(D, E)()
2024-01-30 15:50:34 +08:00
{
2024-01-30 16:06:02 +08:00
FSM_LOG(" D2E ");
2024-01-30 15:50:34 +08:00
}
2024-06-26 20:21:14 +08:00
static void transitionHandler(E, D)()
2024-01-30 15:50:34 +08:00
{
2024-01-30 16:06:02 +08:00
FSM_LOG(" E2D ");
2024-01-30 15:50:34 +08:00
}
2024-06-26 20:21:14 +08:00
/* -------------------------------------------------------------------------- */
/* 打印调试 */
/* -------------------------------------------------------------------------- */
2024-01-30 15:50:34 +08:00
const static char *stateStr[] = {
"Idle",
"D",
"E",
};
2024-06-26 20:21:14 +08:00
2024-01-30 15:50:34 +08:00
static void printFSM(ChildFSM* pFSM){
2024-06-26 20:21:14 +08:00
FSM_LOG(" \tChild: ");
FSM_LOG("当前状态:%s, 动作:", stateStr[getFSMCurState((FSM *)pFSM)]);
2024-01-30 15:50:34 +08:00
}