[RFC 2/3] STE-plugin: Mechanism for inheritance
sjur.brandeland at stericsson.com
sjur.brandeland at stericsson.com
Sun Jan 17 09:28:31 PST 2010
From: Sjur Brandeland <sjur.brandeland at stericsson.com>
This patch adds a mechanism to inherit/specialize from the standard "atmodem".
This is used in the initialization of voice call driver and the network
registration driver in order to re-use functions from "atmodems" whenever
possible. We realize this is not the standard way of doing it, so I would
appreciate your comments on this approach.
---
include/netreg.h | 5 +++++
include/voicecall.h | 7 ++++++-
src/network.c | 22 ++++++++++++++++++++++
src/voicecall.c | 22 ++++++++++++++++++++++
4 files changed, 55 insertions(+), 1 deletions(-)
diff --git a/include/netreg.h b/include/netreg.h
old mode 100644
new mode 100755
index 0079477..ee0b201
--- a/include/netreg.h
+++ b/include/netreg.h
@@ -17,6 +17,10 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*
+ * Copyright (C) 2010 ST-Ericsson AB.
+ * Author: Marit Henriksen, marit.xx.henriksen at stericsson.com.
+ * STE specific implementation.
+ *
*/
#ifndef __OFONO_NETREG_H
@@ -96,6 +100,7 @@ void ofono_netreg_status_notify(struct ofono_netreg *netreg, int status,
int ofono_netreg_driver_register(const struct ofono_netreg_driver *d);
void ofono_netreg_driver_unregister(const struct ofono_netreg_driver *d);
+struct ofono_netreg_driver *ofono_netreg_driver_get(const char *driver);
struct ofono_netreg *ofono_netreg_create(struct ofono_modem *modem,
unsigned int vendor,
diff --git a/include/voicecall.h b/include/voicecall.h
index 6ceb3d8..ca43c91 100644
--- a/include/voicecall.h
+++ b/include/voicecall.h
@@ -17,6 +17,10 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*
+ * Copyright (C) 2010 ST-Ericsson AB.
+ * Author: Marit Henriksen, marit.xx.henriksen at stericsson.com.
+ * STE specific implementation.
+ *
*/
#ifndef __OFONO_VOICECALL_H
@@ -29,7 +33,7 @@ extern "C" {
#include <ofono/types.h>
struct ofono_voicecall;
-
+struct ofono_modem;
typedef void (*ofono_voicecall_cb_t)(const struct ofono_error *error,
void *data);
@@ -102,6 +106,7 @@ void ofono_voicecall_disconnected(struct ofono_voicecall *vc, int id,
int ofono_voicecall_driver_register(const struct ofono_voicecall_driver *d);
void ofono_voicecall_driver_unregister(const struct ofono_voicecall_driver *d);
+struct ofono_voicecall_driver *ofono_voicecall_driver_get(const char *driver);
struct ofono_voicecall *ofono_voicecall_create(struct ofono_modem *modem,
unsigned int vendor,
diff --git a/src/network.c b/src/network.c
index 8b4eb09..75ee98b 100644
--- a/src/network.c
+++ b/src/network.c
@@ -17,6 +17,10 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*
+ * Copyright (C) 2010 ST-Ericsson AB.
+ * Author: Marit Henriksen, marit.xx.henriksen at stericsson.com.
+ * STE specific implementation.
+ *
*/
#ifdef HAVE_CONFIG_H
@@ -1596,6 +1600,24 @@ void ofono_netreg_driver_unregister(const struct ofono_netreg_driver *d)
g_drivers = g_slist_remove(g_drivers, (void *)d);
}
+struct ofono_netreg_driver *ofono_netreg_driver_get(const char *driver)
+{
+ GSList *l;
+
+ if (driver == NULL)
+ return NULL;
+
+ for (l = g_drivers; l; l = l->next) {
+ struct ofono_netreg_driver *drv = l->data;
+
+ if (g_strcmp0(drv->name, driver))
+ continue;
+ else
+ return drv;
+ }
+ return NULL;
+}
+
static void netreg_unregister(struct ofono_atom *atom)
{
struct ofono_netreg *netreg = __ofono_atom_get_data(atom);
diff --git a/src/voicecall.c b/src/voicecall.c
index 73de35f..1cd5bd7 100644
--- a/src/voicecall.c
+++ b/src/voicecall.c
@@ -17,6 +17,10 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*
+ * Copyright (C) 2010 ST-Ericsson AB.
+ * Author: Marit Henriksen, marit.xx.henriksen at stericsson.com.
+ * STE specific implementation.
+ *
*/
#ifdef HAVE_CONFIG_H
@@ -1751,6 +1755,24 @@ void ofono_voicecall_driver_unregister(const struct ofono_voicecall_driver *d)
g_drivers = g_slist_remove(g_drivers, (void *)d);
}
+struct ofono_voicecall_driver *ofono_voicecall_driver_get(const char *driver)
+{
+ GSList *l;
+
+ if (driver == NULL)
+ return NULL;
+
+ for (l = g_drivers; l; l = l->next) {
+ struct ofono_voicecall_driver *drv = l->data;
+
+ if (g_strcmp0(drv->name, driver))
+ continue;
+ else
+ return drv;
+ }
+ return NULL;
+}
+
static void voicecall_unregister(struct ofono_atom *atom)
{
DBusConnection *conn = ofono_dbus_get_connection();
--
1.6.0.4
More information about the ofono
mailing list