/* SPDX-License-Identifier: GPL-2.0-only */ /* * * Author Karsten Keil * * Thanks to Jan den Ouden * Fritz Elfert * Copyright 2008 by Karsten Keil */ #ifndef _MISDN_FSM_H #define _MISDN_FSM_H #include /* 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