linux/drivers/isdn/mISDN/fsm.h
<<
>>
Prefs
   1/*
   2 *
   3 * Author       Karsten Keil <kkeil@novell.com>
   4 *
   5 * Thanks to    Jan den Ouden
   6 *              Fritz Elfert
   7 * Copyright 2008  by Karsten Keil <kkeil@novell.com>
   8 *
   9 * This program is free software; you can redistribute it and/or modify
  10 * it under the terms of the GNU General Public License version 2 as
  11 * published by the Free Software Foundation.
  12 *
  13 * This program is distributed in the hope that it will be useful,
  14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  16 * GNU General Public License for more details.
  17 *
  18 */
  19
  20#ifndef _MISDN_FSM_H
  21#define _MISDN_FSM_H
  22
  23#include <linux/timer.h>
  24
  25/* Statemachine */
  26
  27struct FsmInst;
  28
  29typedef void (*FSMFNPTR)(struct FsmInst *, int, void *);
  30
  31struct Fsm {
  32        FSMFNPTR *jumpmatrix;
  33        int state_count, event_count;
  34        char **strEvent, **strState;
  35};
  36
  37struct FsmInst {
  38        struct Fsm *fsm;
  39        int state;
  40        int debug;
  41        void *userdata;
  42        int userint;
  43        void (*printdebug) (struct FsmInst *, char *, ...);
  44};
  45
  46struct FsmNode {
  47        int state, event;
  48        void (*routine) (struct FsmInst *, int, void *);
  49};
  50
  51struct FsmTimer {
  52        struct FsmInst *fi;
  53        struct timer_list tl;
  54        int event;
  55        void *arg;
  56};
  57
  58extern void mISDN_FsmNew(struct Fsm *, struct FsmNode *, int);
  59extern void mISDN_FsmFree(struct Fsm *);
  60extern int mISDN_FsmEvent(struct FsmInst *, int , void *);
  61extern void mISDN_FsmChangeState(struct FsmInst *, int);
  62extern void mISDN_FsmInitTimer(struct FsmInst *, struct FsmTimer *);
  63extern int mISDN_FsmAddTimer(struct FsmTimer *, int, int, void *, int);
  64extern void mISDN_FsmRestartTimer(struct FsmTimer *, int, int, void *, int);
  65extern void mISDN_FsmDelTimer(struct FsmTimer *, int);
  66
  67#endif
  68