summaryrefslogtreecommitdiffstats
path: root/src/cdma-netreg.c
diff options
context:
space:
mode:
authorBertrand Aygon <bertrand.aygon@intel.com>2011-08-05 15:21:06 +0200
committerDenis Kenzior <denkenz@gmail.com>2011-08-05 10:48:49 -0500
commit8dfd369ba530e7a285b1381d95a634e716869bf5 (patch)
treef7d2598277a98326d9a12ec343e71a10add2028d /src/cdma-netreg.c
parentb7be25e12082d6bb87c4189c46966e816df2b305 (diff)
downloadofono-8dfd369ba530e7a285b1381d95a634e716869bf5.tar.bz2
cdma-netreg: implement support for Status property
Diffstat (limited to 'src/cdma-netreg.c')
-rw-r--r--src/cdma-netreg.c47
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);