hc
2024-05-10 37f49e37ab4cb5d0bc4c60eb5c6d4dd57db767bb
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
/* SPDX-License-Identifier: GPL-2.0-only */
/*
 *
 * Author       Karsten Keil <kkeil@novell.com>
 *
 * Thanks to    Jan den Ouden
 *              Fritz Elfert
 * Copyright 2008  by Karsten Keil <kkeil@novell.com>
 */
 
#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 int 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