/*有限状态表*/
typedef struct TestTable_s
{
int event; //事件
int CurState; //当前状态
void (*eventActFun)(int event); //函数指针
int NextState; //下一个状态
}TestTable_t;
/*状态机类型*/
typedef struct Test_s{
int curState;//当前状态
TestTable_t * pTestTable;//状态表
int size;//表的项数
}Test_t;
/*状态机注册,给它一个状态表*/
void Test_Regist(Test_t* pTest, TestTable_t* pTable, int size)
{
pTest->pTestTable = pTable;
pTest->size = size;
}
/*状态迁移*/
void Test_StateTransfer(Test_t* pTest, int state)
{
pTest->curState = state;
}
/*事件处理*/
void Test_EventHandle(Test_t* pTest, int event)
{
TestTable_t* pActTable = pTest->pTestTable;
void (*eventActFun)(int event) = NULL; //函数指针初始化为空
int NextState;
int CurState = pTest->curState;
int g_max_num = pTest->size;
int i;
/*获取当前动作函数*/
for (i = 0; i<g_max_num; i++)
{
//当且仅当当前状态下来个指定的事件,我才执行它
if (event == pActTable[i].event && CurState == pActTable[i].CurState)
{
if (pActTable[i].eventActFun)
{
NextState = pActTable[i].eventActFun(event);
if(NextState == 0)
{
Test_StateTransfer(pTest, pActTable[i].NextState);
}
}
break;
}
}
}