2024-04-20 20:05:10 +08:00
|
|
|
/*
|
|
|
|
* @Author: godcreator02 qq974980621@gmail.com
|
|
|
|
* @Date: 2024-04-20 18:52:14
|
|
|
|
* @LastEditors: godcreator02 qq974980621@gmail.com
|
|
|
|
* @LastEditTime: 2024-04-20 19:12:55
|
|
|
|
* @FilePath: \vscode\FSM_OOP\baseFSM\FSM_public.h
|
|
|
|
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
|
|
|
|
*/
|
2024-01-23 20:05:30 +08:00
|
|
|
#ifndef __FSM_PUBLIC_H_
|
|
|
|
#define __FSM_PUBLIC_H_
|
|
|
|
|
2024-01-30 16:06:02 +08:00
|
|
|
#define BASE_FSM(ptr) ((FSM *)(ptr))
|
|
|
|
#define BASE_PTR (FSM *)
|
2024-01-23 20:05:30 +08:00
|
|
|
|
|
|
|
typedef struct _FSM FSM;
|
|
|
|
|
2024-04-19 13:07:09 +08:00
|
|
|
#define Step(pFSM) _vptrFSM((FSM *)pFSM)->step((FSM *)pFSM)
|
|
|
|
#define PreloaderGetReady(pFSM) _preloaderGetReady((FSM *)pFSM);
|
|
|
|
#define GetPreloaderOverFlag(pFSM) _getPreloaderOverFlag((FSM *)pFSM)
|
|
|
|
#define ClearPreloaderOverFlag(pFSM) _clearPreloaderOverFlag((FSM *)pFSM)
|
|
|
|
#define GetData(pFSM) _getData((FSM*)pFSM)
|
|
|
|
|
2024-01-29 20:32:07 +08:00
|
|
|
|
2024-01-23 20:05:30 +08:00
|
|
|
typedef struct _FSMHandler FSMHandler;
|
|
|
|
// 这几个函数可认为是虚函数, 构造函数里不会初始化FSMVtbl, 必须由子类重新实现
|
|
|
|
typedef struct _FSMVtbl {
|
|
|
|
// 状态机控制
|
|
|
|
void (*reset)(FSM *pFSM); // 子类重新实现可以添加一些打印信息
|
|
|
|
void (*step)(FSM *pFSM); // 子类重新实现可以添加一些打印信息
|
2024-04-20 20:05:10 +08:00
|
|
|
|
2024-01-23 20:05:30 +08:00
|
|
|
void (*initData)(FSM *pFSM); // 子类必须重新实现
|
2024-04-19 15:58:28 +08:00
|
|
|
void (*initSignals)(FSM *pFSM); // 子类必须重新实现
|
2024-04-19 16:11:24 +08:00
|
|
|
void (*resetSignals)(FSM *pFSM); // 子类必须重新实现
|
2024-01-23 20:05:30 +08:00
|
|
|
void (*setupHandler)(FSMHandler *fcns); // 子类必须重新实现
|
2024-01-30 20:35:05 +08:00
|
|
|
void (*initDataLoader)(FSM *pFSM); // 子类必须重新实现
|
2024-01-23 20:05:30 +08:00
|
|
|
}FSMVtbl;
|
|
|
|
|
2024-04-19 13:07:09 +08:00
|
|
|
/* --------------------------------- 状态机信息获取 -------------------------------- */
|
2024-01-29 20:32:07 +08:00
|
|
|
int getFSMCurState(FSM *pFSM);
|
2024-04-20 20:05:10 +08:00
|
|
|
int getFSMNextState(FSM *pFSM);
|
2024-01-23 20:05:30 +08:00
|
|
|
void setChildNum(FSM *pFSM, int num);
|
|
|
|
void registerChildFSM(FSM *parent, FSM *child, int index);
|
|
|
|
|
2024-04-19 15:58:28 +08:00
|
|
|
/* ------------------------------ Data和Signals ------------------------------ */
|
2024-04-19 13:07:09 +08:00
|
|
|
const void *_getData(FSM* pFSM);
|
2024-04-19 15:58:28 +08:00
|
|
|
void *_getSignals(FSM* pFSM);
|
2024-04-19 13:07:09 +08:00
|
|
|
|
|
|
|
/* ---------------------------------- 预装载器 ---------------------------------- */
|
2024-01-30 23:00:38 +08:00
|
|
|
void *_preloadIn(FSM *pFSM);
|
2024-01-30 23:07:08 +08:00
|
|
|
void _preloaderGetReady(FSM *pFSM);
|
2024-04-19 13:07:09 +08:00
|
|
|
int _getPreloaderOverFlag(FSM *pFSM);
|
|
|
|
void _clearPreloaderOverFlag(FSM *pFSM);
|
2024-01-30 15:11:15 +08:00
|
|
|
|
2024-04-20 20:05:10 +08:00
|
|
|
/* ---------------------------------- 虚函数表 ---------------------------------- */
|
2024-01-30 23:00:38 +08:00
|
|
|
FSMVtbl *_vptrFSM(FSM* pFSM);
|
2024-01-23 20:05:30 +08:00
|
|
|
|
|
|
|
|
|
|
|
#endif
|