diff options
author | August Mayer <august.mayer@hale.at> | 2012-08-16 10:11:16 +0200 |
---|---|---|
committer | Denis Kenzior <denkenz@gmail.com> | 2012-08-16 01:10:56 -0500 |
commit | 4293e4ea63a95dd8de54ee573a7ea514bfb1b89b (patch) | |
tree | 5a1d508ecd35648015d55c8ffa5d2efd1a1b5b63 /drivers/atmodem | |
parent | b26444073788793508057f21153df22b4b9559d1 (diff) | |
download | ofono-4293e4ea63a95dd8de54ee573a7ea514bfb1b89b.tar.bz2 |
gprs: data bearer for telit with PSNT
Telit neither supports '+CPSB' nor reports the data bearer through
'+CGREG'. It has its own +PSNT command.
Diffstat (limited to 'drivers/atmodem')
-rw-r--r-- | drivers/atmodem/gprs.c | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/drivers/atmodem/gprs.c b/drivers/atmodem/gprs.c index 65a8b7b9..3005867b 100644 --- a/drivers/atmodem/gprs.c +++ b/drivers/atmodem/gprs.c @@ -247,6 +247,41 @@ static void huawei_mode_notify(GAtResult *result, gpointer user_data) ofono_gprs_bearer_notify(gprs, bearer); } +static void telit_mode_notify(GAtResult *result, gpointer user_data) +{ + struct ofono_gprs *gprs = user_data; + GAtResultIter iter; + gint nt, bearer; + + g_at_result_iter_init(&iter, result); + + if (!g_at_result_iter_next(&iter, "#PSNT:")) + return; + + if (!g_at_result_iter_next_number(&iter,&nt)) + return; + + switch (nt) { + case 0: + bearer = 1; /* GPRS */ + break; + case 1: + bearer = 2; /* EDGE */ + break; + case 2: + bearer = 3; /* UMTS */ + break; + case 3: + bearer = 5; /* HSDPA */ + break; + default: + bearer = 0; + break; + } + + ofono_gprs_bearer_notify(gprs, bearer); +} + static void cpsb_notify(GAtResult *result, gpointer user_data) { struct ofono_gprs *gprs = user_data; @@ -281,6 +316,11 @@ static void gprs_initialized(gboolean ok, GAtResult *result, gpointer user_data) g_at_chat_register(gd->chat, "^MODE:", huawei_mode_notify, FALSE, gprs, NULL); break; + case OFONO_VENDOR_TELIT: + g_at_chat_register(gd->chat, "#PSNT:", telit_mode_notify, + FALSE, gprs, NULL); + g_at_chat_send(gd->chat, "AT#PSNT=1", none_prefix, + NULL, NULL, NULL); default: g_at_chat_register(gd->chat, "+CPSB:", cpsb_notify, FALSE, gprs, NULL); |