📄 fsm.h
字号:
/******************************************************************************
Copyright (c) 2006 by RockOS.
All rights reserved.
This software is supported by the Rock Software Workroom only.
Any bugs please contact the author with e-mail or QQ:
E-mail : baobaoba520@yahoo.com.cn
QQ : 59681888
*******************************************************************************
File name : fsm.h
Description : header file for fsm management for RockOS.
:
:
Auther : sunxinqiu
History :
2006-3-15 first release.
******************************************************************************/
#ifndef __FSM_H__
#define __FSM_H__
#ifdef __cplusplus
extern "C" {
#endif
#define FSM_DUMP_ALL_INST ((HANDLE)0xFFFFFFFE)
enum
{
OS_FSM_FREE = 0,
OS_FSM_BUSY = 1
};
enum
{
FSM_STATE_NAME = 0,
FSM_EVENT_NAME = 1,
FSM_ACTION_NAME = 2
};
/* action for a state-event combination. */
typedef void (*FSM_ACTION)(HANDLE hInst, void * param);
/* fsm map provide by application. */
typedef struct
{
U16 oldState;
U16 event;
FSM_ACTION action;
}FSM_MAP;
typedef struct
{
U32 value;
char name[MAX_NAME_LEN+1]; /* its name. */
}FSM_NAME_TBL;
/* to get the current state. */
typedef U16 (* GET_OLD_STATE)(HANDLE hInst);
/* to dump the FSM scheduler track. */
typedef void (* FSM_DUMP)(HFSM hFsm, HANDLE hInst, U16 oldState, U16 event, void *action);
/* this is a copy of fsm map, but it is sorted for search.*/
typedef struct
{
U32 index; /* combined by oldState and event from FSM_MAP. */
FSM_ACTION action;
}FSM_IDX_MAP;
/* the FSM CB. */
typedef struct
{
U16 state; /* free or registered. */
HTASK owner;
char name[MAX_NAME_LEN+1];
GET_OLD_STATE getOldState;
FSM_DUMP dumpFsm;
U16 nIdxCount; /* the count of index map entry. */
FSM_IDX_MAP * pIndexMap;
U32 stateTblSize;
FSM_NAME_TBL * pStateTbl;
U32 eventTblSize;
FSM_NAME_TBL * pEventTbl;
U32 actionTblSize;
FSM_NAME_TBL * pActionTbl;
}FSMCB;
STATUS fsm_init(void);
HFSM fsmCreate(FSM_MAP * pfsmMap, U16 counter, HTASK owner, const char * name);
STATUS fsmReg(HFSM hFsm, GET_OLD_STATE getOldState, FSM_DUMP dumpFsm);
STATUS fsmRegNameTable(HFSM hFsm, U32 type, U32 size, const FSM_NAME_TBL * pNameTbl);
STATUS fsmSetTrig (HFSM hFsm, HANDLE hInst, U16 event, void * pData);
STATUS fsmDestroy (HFSM hFsm);
FSM_IDX_MAP * fsmCreateIdxMap (HFSM hFsm, FSM_MAP * pfsmMap, U16 counter);
FSM_ACTION fsmGetAction(HFSM hFsm, U16 oldState, U16 event);
const char * fsmGetName(HFSM hFsm, U32 type, U32 value);
void fsmDumpDefault (HFSM hFsm, HANDLE hInst, U16 oldState, U16 event, void *action);
void fsmShowAll(void);
void fsmShowSingle(HFSM hfsm);
#ifdef __cplusplus
}
#endif
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -