1/* 2 * 3 * Author Karsten Keil <kkeil@novell.com> 4 * 5 * Thanks to Jan den Ouden 6 * Fritz Elfert 7 * Copyright 2008 by Karsten Keil <kkeil@novell.com> 8 * 9 * This program is free software; you can redistribute it and/or modify 10 * it under the terms of the GNU General Public License version 2 as 11 * published by the Free Software Foundation. 12 * 13 * This program is distributed in the hope that it will be useful, 14 * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 * GNU General Public License for more details. 17 * 18 */ 19 20#ifndef _MISDN_FSM_H 21#define _MISDN_FSM_H 22 23#include <linux/timer.h> 24 25/* Statemachine */ 26 27struct FsmInst; 28 29typedef void (*FSMFNPTR)(struct FsmInst *, int, void *); 30 31struct Fsm { 32 FSMFNPTR *jumpmatrix; 33 int state_count, event_count; 34 char **strEvent, **strState; 35}; 36 37struct FsmInst { 38 struct Fsm *fsm; 39 int state; 40 int debug; 41 void *userdata; 42 int userint; 43 void (*printdebug) (struct FsmInst *, char *, ...); 44}; 45 46struct FsmNode { 47 int state, event; 48 void (*routine) (struct FsmInst *, int, void *); 49}; 50 51struct FsmTimer { 52 struct FsmInst *fi; 53 struct timer_list tl; 54 int event; 55 void *arg; 56}; 57 58extern void mISDN_FsmNew(struct Fsm *, struct FsmNode *, int); 59extern void mISDN_FsmFree(struct Fsm *); 60extern int mISDN_FsmEvent(struct FsmInst *, int , void *); 61extern void mISDN_FsmChangeState(struct FsmInst *, int); 62extern void mISDN_FsmInitTimer(struct FsmInst *, struct FsmTimer *); 63extern int mISDN_FsmAddTimer(struct FsmTimer *, int, int, void *, int); 64extern void mISDN_FsmRestartTimer(struct FsmTimer *, int, int, void *, int); 65extern void mISDN_FsmDelTimer(struct FsmTimer *, int); 66 67#endif 68