summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDenis Kenzior <denkenz@gmail.com>2010-03-29 00:09:10 -0500
committerDenis Kenzior <denkenz@gmail.com>2010-03-29 00:09:10 -0500
commit1fb68016729720fb81e28803a47eb3294e8256b9 (patch)
tree07a211fbf86c2c34d88efcd26dd559c7098ffb6e
parent5780fdb51f0ae3db67aa322e09ec315e69bb53a9 (diff)
downloadofono-1fb68016729720fb81e28803a47eb3294e8256b9.tar.bz2
Fix: Use tech reported by MBM erinfo
-rw-r--r--drivers/atmodem/network-registration.c33
1 files changed, 33 insertions, 0 deletions
diff --git a/drivers/atmodem/network-registration.c b/drivers/atmodem/network-registration.c
index addde7b6..a96be695 100644
--- a/drivers/atmodem/network-registration.c
+++ b/drivers/atmodem/network-registration.c
@@ -54,6 +54,7 @@ struct netreg_data {
int signal_index; /* If strength is reported via CIND */
int signal_min; /* min strength reported via CIND */
int signal_max; /* max strength reported via CIND */
+ int tech;
unsigned int vendor;
};
@@ -89,6 +90,9 @@ static void at_creg_cb(gboolean ok, GAtResult *result, gpointer user_data)
return;
}
+ if ((status == 1 || status == 5) && (tech == -1))
+ tech = nd->tech;
+
cb(&error, status, lac, ci, tech, cbd->data);
}
@@ -698,6 +702,8 @@ error:
static void mbm_erinfo_notify(GAtResult *result, gpointer user_data)
{
+ struct ofono_netreg *netreg = user_data;
+ struct netreg_data *nd = ofono_netreg_get_data(netreg);
GAtResultIter iter;
int mode, gsm, umts;
@@ -723,6 +729,29 @@ static void mbm_erinfo_notify(GAtResult *result, gpointer user_data)
}
ofono_info("network capability: GSM %d UMTS %d", gsm, umts);
+
+ /* Convert to tech values from 27.007 */
+ switch (gsm) {
+ case 1: /* GSM */
+ nd->tech = 0;
+ break;
+ case 2: /* EDGE */
+ nd->tech = 3;
+ break;
+ default:
+ nd->tech = -1;
+ }
+
+ switch (umts) {
+ case 1: /* UMTS */
+ nd->tech = 2;
+ break;
+ case 2: /* UMTS + HSDPA */
+ nd->tech = 4;
+ break;
+ default:
+ break;
+ }
}
static void creg_notify(GAtResult *result, gpointer user_data)
@@ -735,6 +764,9 @@ static void creg_notify(GAtResult *result, gpointer user_data)
&lac, &ci, &tech, nd->vendor) == FALSE)
return;
+ if ((status == 1 || status == 5) && (tech == -1))
+ tech = nd->tech;
+
ofono_netreg_status_notify(netreg, status, lac, ci, tech);
}
@@ -947,6 +979,7 @@ static int at_netreg_probe(struct ofono_netreg *netreg, unsigned int vendor,
nd->chat = chat;
nd->vendor = vendor;
+ nd->tech = -1;
ofono_netreg_set_data(netreg, nd);
g_at_chat_send(chat, "AT+CREG=?", creg_prefix,