aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorHarald Welte <laforge@gnumonks.org>2009-02-16 22:05:44 +0000
committerHarald Welte <laforge@gnumonks.org>2009-02-16 22:05:44 +0000
commit595ad7b7625645e798b80fb9e0f5bef18b8881f7 (patch)
treea44447fd8af3e0c4a3f59ffaf771d9b72b8064b5 /include
parent75099266149b78193854e84f73910074680191fa (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')
-rw-r--r--include/openbsc/signal.h33
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