From: Bertrand Aygon <[email protected]>

---
 src/cdma-netreg.c |   54 +++++++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 44 insertions(+), 10 deletions(-)

diff --git a/src/cdma-netreg.c b/src/cdma-netreg.c
index 12ddd23..3f08d1e 100644
--- a/src/cdma-netreg.c
+++ b/src/cdma-netreg.c
@@ -34,6 +34,7 @@ static GSList *g_drivers;
 struct ofono_cdma_netreg {
        enum cdma_netreg_status status;
        int strength;
+       int data_strength;
        const struct ofono_cdma_netreg_driver *driver;
        void *driver_data;
        struct ofono_atom *atom;
@@ -82,6 +83,13 @@ static DBusMessage *network_get_properties(DBusConnection 
*conn,
                                        &strength);
        }
 
+       if (cdma_netreg->data_strength != -1) {
+               unsigned char data_strength = cdma_netreg->data_strength;
+
+               ofono_dbus_dict_append(&dict, "DataStrength", DBUS_TYPE_BYTE,
+                                       &data_strength);
+       }
+
        dbus_message_iter_close_container(&iter, &dict);
 
        return reply;
@@ -121,15 +129,10 @@ 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)
+static void set_signal_strength(struct ofono_cdma_netreg *netreg,
+                                       int strength, gboolean is_data_type)
 {
-       if (netreg == NULL)
-               return;
-
-       if (netreg->strength == strength)
-               return;
-
+       const char *strengh_name;
        /*
         * Theoretically we can get signal strength even when not registered
         * to any network.  However, what do we do with it in that case?
@@ -137,7 +140,13 @@ void ofono_cdma_netreg_strength_notify(struct 
ofono_cdma_netreg *netreg,
        if (netreg->status == CDMA_NETWORK_REGISTRATION_STATUS_NOT_REGISTERED)
                return;
 
-       netreg->strength = strength;
+       if (is_data_type == TRUE) {
+               strengh_name = "DataStrength";
+               netreg->data_strength = strength;
+       } else {
+               strengh_name = "Strength";
+               netreg->strength = strength;
+       }
 
        if (strength != -1) {
                DBusConnection *conn = ofono_dbus_get_connection();
@@ -146,11 +155,35 @@ void ofono_cdma_netreg_strength_notify(struct 
ofono_cdma_netreg *netreg,
 
                ofono_dbus_signal_property_changed(conn, path,
                                OFONO_CDMA_NETWORK_REGISTRATION_INTERFACE,
-                               "Strength", DBUS_TYPE_BYTE,
+                               strengh_name, DBUS_TYPE_BYTE,
                                &strength);
        }
 }
 
+void ofono_cdma_netreg_strength_notify(struct ofono_cdma_netreg *netreg,
+                                       int strength)
+{
+       if (netreg == NULL)
+               return;
+
+       if (netreg->strength == strength)
+               return;
+
+       set_signal_strength(netreg, strength, FALSE);
+}
+
+void ofono_cdma_netreg_data_strength_notify(struct ofono_cdma_netreg *netreg,
+                                       int data_strength)
+{
+       if (netreg == NULL)
+               return;
+
+       if (netreg->data_strength == data_strength)
+               return;
+
+       set_signal_strength(netreg, data_strength, TRUE);
+}
+
 int ofono_cdma_netreg_driver_register(const struct ofono_cdma_netreg_driver *d)
 {
        DBG("driver: %p, name: %s", d, d->name);
@@ -216,6 +249,7 @@ struct ofono_cdma_netreg *ofono_cdma_netreg_create(struct 
ofono_modem *modem,
 
        cdma_netreg->status = CDMA_NETWORK_REGISTRATION_STATUS_NOT_REGISTERED;
        cdma_netreg->strength = -1;
+       cdma_netreg->data_strength = -1;
 
        cdma_netreg->atom = __ofono_modem_add_atom(modem,
                                        OFONO_ATOM_TYPE_CDMA_NETREG,
-- 
1.7.1

_______________________________________________
ofono mailing list
[email protected]
http://lists.ofono.org/listinfo/ofono

Reply via email to