summaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorMarcel Holtmann <marcel@holtmann.org>2011-07-29 13:11:44 +0200
committerMarcel Holtmann <marcel@holtmann.org>2011-07-29 13:11:44 +0200
commita69690b3b5b86f11165efd9df10827f1b922a0ed (patch)
treecf8a3ca7a0764a45107324073d88a124025ae995 /drivers
parent7cabd1075c7e8303737c16eaed0e2cd0f1d6bcc7 (diff)
downloadofono-a69690b3b5b86f11165efd9df10827f1b922a0ed.tar.bz2
atmodem: Add Huawei specific technology reporting
Diffstat (limited to 'drivers')
-rw-r--r--drivers/atmodem/network-registration.c32
1 files changed, 32 insertions, 0 deletions
diff --git a/drivers/atmodem/network-registration.c b/drivers/atmodem/network-registration.c
index 6dc808e5..de025c2b 100644
--- a/drivers/atmodem/network-registration.c
+++ b/drivers/atmodem/network-registration.c
@@ -829,6 +829,34 @@ static void huawei_rssi_notify(GAtResult *result, gpointer user_data)
at_util_convert_signal_strength(strength));
}
+static void huawei_mode_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, submode;
+
+ g_at_result_iter_init(&iter, result);
+
+ if (!g_at_result_iter_next(&iter, "^MODE:"))
+ return;
+
+ if (!g_at_result_iter_next_number(&iter, &mode))
+ return;
+
+ if (!g_at_result_iter_next_number(&iter, &submode))
+ return;
+
+ switch (mode) {
+ case 3:
+ nd->tech = ACCESS_TECHNOLOGY_GSM;
+ break;
+ case 5:
+ nd->tech = ACCESS_TECHNOLOGY_UTRAN;
+ break;
+ }
+}
+
static void huawei_nwtime_notify(GAtResult *result, gpointer user_data)
{
struct ofono_netreg *netreg = user_data;
@@ -1351,6 +1379,10 @@ static void at_creg_set_cb(gboolean ok, GAtResult *result, gpointer user_data)
g_at_chat_register(nd->chat, "^RSSI:", huawei_rssi_notify,
FALSE, netreg, NULL);
+ /* Register for system mode reports */
+ g_at_chat_register(nd->chat, "^MODE:", huawei_mode_notify,
+ FALSE, netreg, NULL);
+
/* Register for network time reports */
g_at_chat_register(nd->chat, "^NWTIME:", huawei_nwtime_notify,
FALSE, netreg, NULL);