/** * @file FSM_public.h * @author 天神 (dalaoshi@stu.xjtu.edu.cn) * @brief * @version 2.1 * @date 2024-05-07 * * @copyright 天神创意无限公司 2024 * */ #ifndef __FSM_PUBLIC_H_ #define __FSM_PUBLIC_H_ typedef unsigned int Uint16; typedef unsigned long Uint32; #define BASE_FSM(ptr) ((FSM *)(ptr)) #define BASE_PTR (FSM *) typedef struct FSM FSM; typedef struct FSMPublicFcns { void (*step)(FSM *pFSM); // 子类重新实现可以添加一些打印信息 void (*reset)(FSM *pFSM); // 子类重新实现可以添加一些打印信息 }FSMPublicFcns; /* -------------------------------- 避免警告的函数定义 ------------------------------- */ #define Step(pFSM) _stepFSM((FSM *)pFSM) /**< 外界调用这个 */ #define GetData(pFSM) _getData((FSM*)pFSM) /**< 外界调用这个 */ #define SetSignal(pFSM, signal) _setSignal((FSM*)pFSM, signal) /**< 外界调用这个 */ #define PreloaderGetReady(pFSM) _preloaderGetReady((FSM *)pFSM); /**< @deprecated */ #define GetPreloaderOverFlag(pFSM) _getPreloaderOverFlag((FSM *)pFSM) /**< @deprecated */ #define ClearPreloaderOverFlag(pFSM) _clearPreloaderOverFlag((FSM *)pFSM) /**< @deprecated */ void _stepFSM(FSM *pFSM); /* --------------------------------- 状态机信息获取 -------------------------------- */ int getFSMCurState(FSM *pFSM); int getFSMNextState(FSM *pFSM); /* ------------------------------ Data和Signals ------------------------------ */ const void *_getData(FSM* pFSM); void _setSignal(FSM *pFSM, Uint16 signalFlag); /* ---------------------------------- 预装载器 ---------------------------------- */ void *_preloadIn(FSM *pFSM); void _preloaderGetReady(FSM *pFSM); int _getPreloaderOverFlag(FSM *pFSM); void _clearPreloaderOverFlag(FSM *pFSM); /* ---------------------------------- 子状态机 ---------------------------------- */ void registerChildFSM(FSM *parent, FSM *child); #endif