| /* | |
| * | |
| * Author Karsten Keil <kkeil@novell.com> | |
| * | |
| * Thanks to Jan den Ouden | |
| * Fritz Elfert | |
| * Copyright 2008 by Karsten Keil <kkeil@novell.com> | |
| * | |
| * This program is free software; you can redistribute it and/or modify | |
| * it under the terms of the GNU General Public License version 2 as | |
| * published by the Free Software Foundation. | |
| * | |
| * This program is distributed in the hope that it will be useful, | |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| * GNU General Public License for more details. | |
| * | |
| */ | |
| #ifndef _MISDN_FSM_H | |
| #define _MISDN_FSM_H | |
| #include <linux/timer.h> | |
| /* Statemachine */ | |
| 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; | |
| }; | |
| extern void mISDN_FsmNew(struct Fsm *, struct FsmNode *, int); | |
| extern void mISDN_FsmFree(struct Fsm *); | |
| extern int mISDN_FsmEvent(struct FsmInst *, int , void *); | |
| extern void mISDN_FsmChangeState(struct FsmInst *, int); | |
| extern void mISDN_FsmInitTimer(struct FsmInst *, struct FsmTimer *); | |
| extern int mISDN_FsmAddTimer(struct FsmTimer *, int, int, void *, int); | |
| extern void mISDN_FsmRestartTimer(struct FsmTimer *, int, int, void *, int); | |
| extern void mISDN_FsmDelTimer(struct FsmTimer *, int); | |
| #endif |