diff options
author | Bertrand Aygon <bertrand.aygon@intel.com> | 2011-08-05 15:21:06 +0200 |
---|---|---|
committer | Denis Kenzior <denkenz@gmail.com> | 2011-08-05 10:48:49 -0500 |
commit | 8dfd369ba530e7a285b1381d95a634e716869bf5 (patch) | |
tree | f7d2598277a98326d9a12ec343e71a10add2028d /src/cdma-netreg.c | |
parent | b7be25e12082d6bb87c4189c46966e816df2b305 (diff) | |
download | ofono-8dfd369ba530e7a285b1381d95a634e716869bf5.tar.bz2 |
cdma-netreg: implement support for Status property
Diffstat (limited to 'src/cdma-netreg.c')
-rw-r--r-- | src/cdma-netreg.c | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/src/cdma-netreg.c b/src/cdma-netreg.c index 927af52f..ec6b3157 100644 --- a/src/cdma-netreg.c +++ b/src/cdma-netreg.c @@ -32,18 +32,36 @@ static GSList *g_drivers; struct ofono_cdma_netreg { + enum cdma_netreg_status status; const struct ofono_cdma_netreg_driver *driver; void *driver_data; struct ofono_atom *atom; }; +static const char *cdma_netreg_status_to_string(enum cdma_netreg_status status) +{ + switch (status) { + case CDMA_NETWORK_REGISTRATION_STATUS_NOT_REGISTERED: + return "unregistered"; + case CDMA_NETWORK_REGISTRATION_STATUS_REGISTERED: + return "registered"; + case CDMA_NETWORK_REGISTRATION_STATUS_ROAMING: + return "roaming"; + } + + return ""; +} + static DBusMessage *network_get_properties(DBusConnection *conn, DBusMessage *msg, void *data) { + struct ofono_cdma_netreg *cdma_netreg = data; DBusMessage *reply; DBusMessageIter iter; DBusMessageIter dict; + const char *status = cdma_netreg_status_to_string(cdma_netreg->status); + reply = dbus_message_new_method_return(msg); if (reply == NULL) return NULL; @@ -54,6 +72,8 @@ static DBusMessage *network_get_properties(DBusConnection *conn, OFONO_PROPERTIES_ARRAY_SIGNATURE, &dict); + ofono_dbus_dict_append(&dict, "Status", DBUS_TYPE_STRING, &status); + dbus_message_iter_close_container(&iter, &dict); return reply; @@ -68,6 +88,31 @@ static GDBusSignalTable cdma_netreg_manager_signals[] = { { } }; +static void set_registration_status(struct ofono_cdma_netreg *cdma_netreg, + enum cdma_netreg_status status) +{ + const char *str_status = cdma_netreg_status_to_string(status); + const char *path = __ofono_atom_get_path(cdma_netreg->atom); + DBusConnection *conn = ofono_dbus_get_connection(); + + cdma_netreg->status = status; + + ofono_dbus_signal_property_changed(conn, path, + OFONO_CDMA_NETWORK_REGISTRATION_INTERFACE, + "Status", DBUS_TYPE_STRING, + &str_status); +} + +void ofono_cdma_netreg_status_notify(struct ofono_cdma_netreg *cdma_netreg, + enum cdma_netreg_status status) +{ + if (cdma_netreg == NULL) + return; + + if (cdma_netreg->status != status) + set_registration_status(cdma_netreg, status); +} + int ofono_cdma_netreg_driver_register(const struct ofono_cdma_netreg_driver *d) { DBG("driver: %p, name: %s", d, d->name); @@ -131,6 +176,8 @@ struct ofono_cdma_netreg *ofono_cdma_netreg_create(struct ofono_modem *modem, if (cdma_netreg == NULL) return NULL; + cdma_netreg->status = CDMA_NETWORK_REGISTRATION_STATUS_NOT_REGISTERED; + cdma_netreg->atom = __ofono_modem_add_atom(modem, OFONO_ATOM_TYPE_CDMA_NETREG, cdma_netreg_remove, cdma_netreg); |