diff options
author | Harald Welte <laforge@gnumonks.org> | 2009-02-16 22:05:44 +0000 |
---|---|---|
committer | Harald Welte <laforge@gnumonks.org> | 2009-02-16 22:05:44 +0000 |
commit | 595ad7b7625645e798b80fb9e0f5bef18b8881f7 (patch) | |
tree | a44447fd8af3e0c4a3f59ffaf771d9b72b8064b5 /include/openbsc/signal.h | |
parent | 75099266149b78193854e84f73910074680191fa (diff) |
modify the signal handler/dispatch code (sorry zecke, no offense, I just had some different ideas)
* introduce new notion of subsystem in addition to signal number
* no need for bitmasks of 'areas' (aka subsystems)
* pass subsystem/signal_nr/... per argument rather than by data structure
Diffstat (limited to 'include/openbsc/signal.h')
-rw-r--r-- | include/openbsc/signal.h | 33 |
1 files changed, 15 insertions, 18 deletions
diff --git a/include/openbsc/signal.h b/include/openbsc/signal.h index e53c19429..e979d5c69 100644 --- a/include/openbsc/signal.h +++ b/include/openbsc/signal.h @@ -1,5 +1,6 @@ /* Generic signalling/notification infrastructure */ /* (C) 2009 by Holger Hans Peter Freyther <zecke@selfish.org> + * (C) 2009 by Harald Welte <laforge@gnumonks.org> * All Rights Reserved * * This program is free software; you can redistribute it and/or modify @@ -21,25 +22,28 @@ #ifndef OPENBSC_SIGNAL_H #define OPENBSC_SIGNAL_H +#include <stdlib.h> +#include <errno.h> + #include <openbsc/gsm_data.h> #include <openbsc/gsm_subscriber.h> /* - * Signalling areas + * Signalling subsystems */ -#define S_PAGING 0x0001 -#define S_SMS 0x0002 - +#define SS_PAGING 0x0001 +#define SS_SMS 0x0002 -struct signal_data { - int area; +/* SS_PAGING signals */ +enum signal_paging { + S_PAGING_COMPLETED, }; +typedef int signal_cbfn(unsigned int subsys, unsigned int signal, + void *handler_data, void *signal_data); struct paging_signal_data { - struct signal_data data; - struct gsm_subscriber *subscr; struct gsm_bts *bts; @@ -47,19 +51,12 @@ struct paging_signal_data { struct gsm_lchan *lchan; }; -struct sms_signal_data { - struct signal_data data; - - struct sms_submit *sms; -}; - - /* Management */ -void register_signal_handler(int areas, int (*sig)(struct signal_data *, void *data), void *data); -void remove_signal_handler(int areas, int (*sig)(struct signal_data *, void *data), void *data); +int register_signal_handler(unsigned int subsys, signal_cbfn *cbfn, void *data); +void unregister_signal_handler(unsigned int subsys, signal_cbfn *cbfn, void *data); /* Dispatch */ -void dispatch_signal(struct signal_data *data); +void dispatch_signal(unsigned int subsys, unsigned int signal, void *signal_data); #endif |