mirror of https://gitee.com/openkylin/linux.git
62 lines
1.4 KiB
C
62 lines
1.4 KiB
C
|
/* $Id: fsm.h,v 1.3.2.2 2001/09/23 22:24:47 kai Exp $
|
||
|
*
|
||
|
* Finite state machine
|
||
|
*
|
||
|
* Author Karsten Keil
|
||
|
* Copyright by Karsten Keil <keil@isdn4linux.de>
|
||
|
* by Kai Germaschewski <kai.germaschewski@gmx.de>
|
||
|
*
|
||
|
* This software may be used and distributed according to the terms
|
||
|
* of the GNU General Public License, incorporated herein by reference.
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
#ifndef __FSM_H__
|
||
|
#define __FSM_H__
|
||
|
|
||
|
#include <linux/timer.h>
|
||
|
|
||
|
struct FsmInst;
|
||
|
|
||
|
typedef void (* FSMFNPTR)(struct FsmInst *, int, void *);
|
||
|
|
||
|
struct Fsm {
|
||
|
FSMFNPTR *jumpmatrix;
|
||
|
int state_count, event_count;
|
||
|
char **strEvent, **strState;
|
||
|
};
|
||
|
|
||
|
struct FsmInst {
|
||
|
struct Fsm *fsm;
|
||
|
int state;
|
||
|
int debug;
|
||
|
void *userdata;
|
||
|
int userint;
|
||
|
void (*printdebug) (struct FsmInst *, char *, ...);
|
||
|
};
|
||
|
|
||
|
struct FsmNode {
|
||
|
int state, event;
|
||
|
void (*routine) (struct FsmInst *, int, void *);
|
||
|
};
|
||
|
|
||
|
struct FsmTimer {
|
||
|
struct FsmInst *fi;
|
||
|
struct timer_list tl;
|
||
|
int event;
|
||
|
void *arg;
|
||
|
};
|
||
|
|
||
|
int FsmNew(struct Fsm *fsm, struct FsmNode *fnlist, int fncount);
|
||
|
void FsmFree(struct Fsm *fsm);
|
||
|
int FsmEvent(struct FsmInst *fi, int event, void *arg);
|
||
|
void FsmChangeState(struct FsmInst *fi, int newstate);
|
||
|
void FsmInitTimer(struct FsmInst *fi, struct FsmTimer *ft);
|
||
|
int FsmAddTimer(struct FsmTimer *ft, int millisec, int event,
|
||
|
void *arg, int where);
|
||
|
void FsmRestartTimer(struct FsmTimer *ft, int millisec, int event,
|
||
|
void *arg, int where);
|
||
|
void FsmDelTimer(struct FsmTimer *ft, int where);
|
||
|
|
||
|
#endif
|