时间:单击230,多击311
This commit is contained in:
parent
5eaac008c5
commit
381873a8b3
|
@ -47,21 +47,23 @@ void stepBaseFSM(FSM *pFSM)
|
||||||
preload(pFSM);
|
preload(pFSM);
|
||||||
setEvent(pFSM);
|
setEvent(pFSM);
|
||||||
|
|
||||||
int index = pFSM->privateVars.curState * pFSM->privateVars.numEvent + pFSM->privateVars.curEvent;
|
|
||||||
int curState = pFSM->privateVars.curState;
|
|
||||||
FSM **childFSM = pFSM->privateVars.childFSM;
|
|
||||||
int nextState;
|
|
||||||
void *data = pFSM->data;
|
|
||||||
FSMHandler *fcns = &pFSM->privateVars.fcns;
|
FSMHandler *fcns = &pFSM->privateVars.fcns;
|
||||||
|
int curState = pFSM->privateVars.curState;
|
||||||
|
void *data = pFSM->data;
|
||||||
|
|
||||||
if(fcns->isDelayActionActivated[curState] && fcns->delayActionTable[curState] != NULL ){
|
if(!fcns->isDelayActionExcuted[curState] && fcns->delayActionTable[curState] != NULL ){
|
||||||
fcns->delayActionTable[curState](data, NULL);
|
fcns->delayActionTable[curState](data, NULL);
|
||||||
fcns->isDelayActionActivated[curState] = 0;
|
fcns->isDelayActionExcuted[curState] = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
FSM **childFSM = pFSM->privateVars.childFSM;
|
||||||
|
int index = pFSM->privateVars.curState * pFSM->privateVars.numEvent + pFSM->privateVars.curEvent;
|
||||||
|
int nextState;
|
||||||
|
|
||||||
if (fcns->transitionTable[index] != NULL)
|
if (fcns->transitionTable[index] != NULL)
|
||||||
{
|
{
|
||||||
fcns->isDelayActionActivated[curState] = 1;
|
fcns->isDelayActionExcuted[curState] = 0;
|
||||||
if (fcns->exitActionTable[curState] != NULL)
|
if (fcns->exitActionTable[curState] != NULL)
|
||||||
fcns->exitActionTable[curState](data, childFSM);
|
fcns->exitActionTable[curState](data, childFSM);
|
||||||
|
|
||||||
|
@ -100,7 +102,8 @@ FSM* newBaseFSM(int numState, int numEvent, int defaultState){
|
||||||
pFSM->privateVars.preloader.isReady = 0;
|
pFSM->privateVars.preloader.isReady = 0;
|
||||||
|
|
||||||
pFSM->privateVars.fcns.duringActionTable = calloc(numState, sizeof(StateFuncPtr));
|
pFSM->privateVars.fcns.duringActionTable = calloc(numState, sizeof(StateFuncPtr));
|
||||||
pFSM->privateVars.fcns.isDelayActionActivated = calloc(numState, sizeof(int));
|
pFSM->privateVars.fcns.isDelayActionExcuted = calloc(numState, sizeof(int));
|
||||||
|
|
||||||
pFSM->privateVars.fcns.delayActionTable = calloc(numState, sizeof(StateFuncPtr));
|
pFSM->privateVars.fcns.delayActionTable = calloc(numState, sizeof(StateFuncPtr));
|
||||||
pFSM->privateVars.fcns.enterActionTable = calloc(numState, sizeof(StateFuncPtr));
|
pFSM->privateVars.fcns.enterActionTable = calloc(numState, sizeof(StateFuncPtr));
|
||||||
pFSM->privateVars.fcns.exitActionTable = calloc(numState, sizeof(StateFuncPtr));
|
pFSM->privateVars.fcns.exitActionTable = calloc(numState, sizeof(StateFuncPtr));
|
||||||
|
|
|
@ -46,7 +46,7 @@ typedef struct _FSMHandler{
|
||||||
void (**duringActionTable)(void *data, FSM **cFSM);
|
void (**duringActionTable)(void *data, FSM **cFSM);
|
||||||
void (**exitActionTable)(void *data, FSM **cFSM);
|
void (**exitActionTable)(void *data, FSM **cFSM);
|
||||||
|
|
||||||
int *isDelayActionActivated;
|
int *isDelayActionExcuted;
|
||||||
void (**delayActionTable)(void *data, FSM **childFSM);
|
void (**delayActionTable)(void *data, FSM **childFSM);
|
||||||
|
|
||||||
void (**childFSMStepTable)(FSM **cFSM);
|
void (**childFSMStepTable)(FSM **cFSM);
|
||||||
|
|
Loading…
Reference in New Issue