diff options
author | Bertrand Aygon <bertrand.aygon@intel.com> | 2011-08-05 15:21:11 +0200 |
---|---|---|
committer | Denis Kenzior <denkenz@gmail.com> | 2011-08-05 10:48:49 -0500 |
commit | 92d4ff44c579f25667f8f2b792b72d8042895791 (patch) | |
tree | 121883ff42fd9d610f38c5bba0e6b9881f417c6b /src/cdma-netreg.c | |
parent | 26c7c2f771be7330b01476d6fb8bedc7b055d681 (diff) | |
download | ofono-92d4ff44c579f25667f8f2b792b72d8042895791.tar.bz2 |
cdma-netreg: Add Strength property support
Diffstat (limited to 'src/cdma-netreg.c')
-rw-r--r-- | src/cdma-netreg.c | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/src/cdma-netreg.c b/src/cdma-netreg.c index ec6b3157..12ddd23b 100644 --- a/src/cdma-netreg.c +++ b/src/cdma-netreg.c @@ -33,6 +33,7 @@ static GSList *g_drivers; struct ofono_cdma_netreg { enum cdma_netreg_status status; + int strength; const struct ofono_cdma_netreg_driver *driver; void *driver_data; struct ofono_atom *atom; @@ -74,6 +75,13 @@ static DBusMessage *network_get_properties(DBusConnection *conn, ofono_dbus_dict_append(&dict, "Status", DBUS_TYPE_STRING, &status); + if (cdma_netreg->strength != -1) { + unsigned char strength = cdma_netreg->strength; + + ofono_dbus_dict_append(&dict, "Strength", DBUS_TYPE_BYTE, + &strength); + } + dbus_message_iter_close_container(&iter, &dict); return reply; @@ -113,6 +121,36 @@ void ofono_cdma_netreg_status_notify(struct ofono_cdma_netreg *cdma_netreg, set_registration_status(cdma_netreg, status); } +void ofono_cdma_netreg_strength_notify(struct ofono_cdma_netreg *netreg, + int strength) +{ + if (netreg == NULL) + return; + + if (netreg->strength == strength) + return; + + /* + * Theoretically we can get signal strength even when not registered + * to any network. However, what do we do with it in that case? + */ + if (netreg->status == CDMA_NETWORK_REGISTRATION_STATUS_NOT_REGISTERED) + return; + + netreg->strength = strength; + + if (strength != -1) { + DBusConnection *conn = ofono_dbus_get_connection(); + const char *path = __ofono_atom_get_path(netreg->atom); + unsigned char strength = netreg->strength; + + ofono_dbus_signal_property_changed(conn, path, + OFONO_CDMA_NETWORK_REGISTRATION_INTERFACE, + "Strength", DBUS_TYPE_BYTE, + &strength); + } +} + int ofono_cdma_netreg_driver_register(const struct ofono_cdma_netreg_driver *d) { DBG("driver: %p, name: %s", d, d->name); @@ -177,6 +215,7 @@ struct ofono_cdma_netreg *ofono_cdma_netreg_create(struct ofono_modem *modem, return NULL; cdma_netreg->status = CDMA_NETWORK_REGISTRATION_STATUS_NOT_REGISTERED; + cdma_netreg->strength = -1; cdma_netreg->atom = __ofono_modem_add_atom(modem, OFONO_ATOM_TYPE_CDMA_NETREG, |