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
 |