68 lines
		
	
	
	
		
			1.7 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			68 lines
		
	
	
	
		
			1.7 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
|   | /*
 | ||
|  |  * | ||
|  |  * 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
 |