From: Bertrand Aygon <[email protected]>

---
 src/cdma-netreg.c |   48 +++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 39 insertions(+), 9 deletions(-)

diff --git a/src/cdma-netreg.c b/src/cdma-netreg.c
index 12ddd23..f1fcb26 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,9 @@ 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;
-
        /*
         * 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 +139,10 @@ 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)
+               netreg->data_strength = strength;
+       else
+               netreg->strength = strength;
 
        if (strength != -1) {
                DBusConnection *conn = ofono_dbus_get_connection();
@@ -151,6 +156,30 @@ void ofono_cdma_netreg_strength_notify(struct 
ofono_cdma_netreg *netreg,
        }
 }
 
+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 +245,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