FSM/vscode/FSM_OOP/baseFSM/FSM_protected.h

136 lines
4.4 KiB
C
Raw Normal View History

2024-01-23 20:05:30 +08:00
#ifndef __FSM_PROTECTED_H_
#define __FSM_PROTECTED_H_
#include "FSM_public.h"
2024-01-30 16:06:02 +08:00
// #define DSP28377
#ifdef DSP28377
#define NDEBUG
#else
#define FSM_LOG_ON
#endif
#ifdef FSM_LOG_ON
#define FSM_LOG(...) printf(__VA_ARGS__)
#else
#define FSM_LOG(...) ((void)0)
#endif
#define during during
#define enter enter
#define exit exit
2024-01-23 20:05:30 +08:00
#define selectNextStateFcn(curstate) curstate##_##selectNextState
#define transitionHandler(curstate, nextstate) curstate##2##nextstate##Handler
#define actionFcn(action, curstate) curstate##_##action##Action
#define index(curstate, nextstate) (curstate*Count_State + nextstate)
#define addSelectNextStateFcn(curstate) fcns->selectNextState[curstate] = (Avoid_WARNING_SelectNextState)selectNextStateFcn(curstate)
#define addStateActionFcn(type, state) fcns->type##ActionTable[state] = (Avoid_WARNING_State_Fcns)actionFcn(type, state)
#define addTransitionHandler(curstate, nextstate) fcns->transitionTable[index(curstate, nextstate)] = (Avoid_WARNING_Transition_Handler)transitionHandler(curstate, nextstate)
2024-01-23 20:05:30 +08:00
typedef struct _FSMHandler FSMHandler;
typedef struct _FSM FSM;
typedef void (*Avoid_WARNING_State_Fcns)(void *data, FSM **childFSM);
typedef void (*Avoid_WARNING_General_Handlers)(void *data);
typedef void (*Avoid_WARNING_Transition_Handler)(void *data);
typedef void (*Avoid_WARNING_Overrider_Fcns)(FSM *pFsm);
typedef int (*Avoid_WARNING_SelectNextState)(void *data, void *signals);
2024-01-23 20:05:30 +08:00
typedef void (*Avoid_WARNING_void_fcns)(FSMHandler *fcns);
/* -------------------------------------------------------------------------- */
/* private数据类型但是不能声明到private.h里 */
/* -------------------------------------------------------------------------- */
2024-01-23 20:05:30 +08:00
typedef struct _FSMHandler{
int (**selectNextState)(void *data, void *signals);
void (**transitionTable)(void *data);
void (*transitionGeneralAction)(void *data);
void (**enterActionTable)(void *data, FSM **cFSM);
void (**duringActionTable)(void *data, FSM **cFSM);
void (**exitActionTable)(void *data, FSM **cFSM);
void (**childFSMStepTable)(FSM **cFSM);
2024-01-23 20:05:30 +08:00
}FSMHandler;
typedef struct _FSMDataLoader
{
void *shadowData;
int isReady;
int isOverflow;
size_t size;
}FSMDataLoader;
2024-01-23 20:05:30 +08:00
typedef struct _FSMPrivateVars
{
int numState;
int defaultState; // Idle状态不能停留必须指定一个初始状态
int curState;
int nextState;
int index;
2024-01-23 20:05:30 +08:00
FSMHandler fcns;
int numChild;
FSM **childFSM;
FSMDataLoader preloader;
2024-01-23 20:05:30 +08:00
}FMSPrivateVars;
/* -------------------------------------------------------------------------- */
/* 纯虚函数,子类必须重新实现,父类构造函数不会初始化 */
/* -------------------------------------------------------------------------- */
typedef struct _FSMPureVtbl {
// 状态机控制
void (*initData)(FSM *pFSM); // =0子类必须重新实现
void (*initSignals)(FSM *pFSM); // =0子类必须重新实现
void (*setupHandler)(FSMHandler *fcns); // =0子类必须重新实现
void (*initDataLoader)(FSM *pFSM); // =0子类必须重新实现
}FSMPureVtbl;
/* -------------------------------------------------------------------------- */
/* 基类定义,纯虚类 */
/* -------------------------------------------------------------------------- */
2024-01-23 20:05:30 +08:00
typedef struct _FSM
{
// public functions
void (*step)(FSM *pFSM); // 子类重新实现可以添加一些打印信息
void (*reset)(FSM *pFSM); // 子类重新实现可以添加一些打印信息
2024-01-23 20:05:30 +08:00
// protected
FSMPureVtbl pureVtbl;
void *data;
void *signals;
2024-04-23 15:11:06 +08:00
int signalSize;
// private
FMSPrivateVars privateVars;
2024-01-23 20:05:30 +08:00
} FSM;
/* -------------------------------------------------------------------------- */
/* protected函数子类能用外界用不了 */
/* -------------------------------------------------------------------------- */
void stepBaseFSM(FSM *pFSM);
2024-01-23 20:05:30 +08:00
void constructFSM(FSM* pFSM);
FSM* newBaseFSM(int numState, int defaultState);
2024-01-23 20:05:30 +08:00
void resetBaseFSM(FSM *pFSM);
#endif