hc
2023-08-30 862c27fc9920c83318c784bfdadf43a65df1ec8f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
/* $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