aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--introspection/mm-modem-gsm-network.xml30
-rw-r--r--plugins/mm-modem-huawei.c34
-rw-r--r--plugins/mm-modem-mbm.c29
-rw-r--r--plugins/mm-modem-option.c20
-rw-r--r--src/mm-modem-gsm-network.h22
5 files changed, 95 insertions, 40 deletions
diff --git a/introspection/mm-modem-gsm-network.xml b/introspection/mm-modem-gsm-network.xml
index 83a14688..9dadeb16 100644
--- a/introspection/mm-modem-gsm-network.xml
+++ b/introspection/mm-modem-gsm-network.xml
@@ -181,9 +181,9 @@
EDGE
</tp:docstring>
</tp:enumvalue>
- <tp:enumvalue suffix="3G" value="3">
+ <tp:enumvalue suffix="UMTS" value="3">
<tp:docstring>
- 3G
+ UMTS (3G)
</tp:docstring>
</tp:enumvalue>
<tp:enumvalue suffix="HSDPA" value="4">
@@ -191,14 +191,34 @@
HSDPA
</tp:docstring>
</tp:enumvalue>
- <tp:enumvalue suffix="PREFER_2G" value="5">
+ <tp:enumvalue suffix="2G_PREFERRED" value="5">
<tp:docstring>
Prefer 2G (GPRS or EDGE).
</tp:docstring>
</tp:enumvalue>
- <tp:enumvalue suffix="PREFER_3G" value="6">
+ <tp:enumvalue suffix="3G_PREFERRED" value="6">
<tp:docstring>
- Prefer 3G (3G or HSDPA).
+ Prefer 3G (UMTS or HSDPA).
+ </tp:docstring>
+ </tp:enumvalue>
+ <tp:enumvalue suffix="2G_ONLY" value="7">
+ <tp:docstring>
+ Use only 2G (GPRS or EDGE).
+ </tp:docstring>
+ </tp:enumvalue>
+ <tp:enumvalue suffix="3G_ONLY" value="8">
+ <tp:docstring>
+ Use only 3G (UMTS or HSDPA).
+ </tp:docstring>
+ </tp:enumvalue>
+ <tp:enumvalue suffix="HSUPA" value="9">
+ <tp:docstring>
+ HSUPA.
+ </tp:docstring>
+ </tp:enumvalue>
+ <tp:enumvalue suffix="HSPA" value="10">
+ <tp:docstring>
+ HSDPA and HSUPA.
</tp:docstring>
</tp:enumvalue>
</tp:enum>
diff --git a/plugins/mm-modem-huawei.c b/plugins/mm-modem-huawei.c
index 994169c7..1aebebac 100644
--- a/plugins/mm-modem-huawei.c
+++ b/plugins/mm-modem-huawei.c
@@ -56,13 +56,13 @@ parse_syscfg (MMModemHuawei *self,
/* Network mode */
if (*mode_a == 2 && *mode_b == 1)
- priv->mode = MM_MODEM_GSM_NETWORK_MODE_PREFER_2G;
+ priv->mode = MM_MODEM_GSM_NETWORK_MODE_2G_PREFERRED;
else if (*mode_a == 2 && *mode_b == 2)
- priv->mode = MM_MODEM_GSM_NETWORK_MODE_PREFER_3G;
+ priv->mode = MM_MODEM_GSM_NETWORK_MODE_3G_PREFERRED;
else if (*mode_a == 13 && *mode_b == 1)
- priv->mode = MM_MODEM_GSM_NETWORK_MODE_GPRS;
+ priv->mode = MM_MODEM_GSM_NETWORK_MODE_2G_ONLY;
else if (*mode_a == 14 && *mode_b == 2)
- priv->mode = MM_MODEM_GSM_NETWORK_MODE_3G;
+ priv->mode = MM_MODEM_GSM_NETWORK_MODE_3G_ONLY;
/* Band */
if (*band == 0x3FFFFFFF)
@@ -116,19 +116,23 @@ set_network_mode_get_done (MMSerial *serial,
switch (GPOINTER_TO_UINT (mm_callback_info_get_data (info, "mode"))) {
case MM_MODEM_GSM_NETWORK_MODE_GPRS:
case MM_MODEM_GSM_NETWORK_MODE_EDGE:
+ case MM_MODEM_GSM_NETWORK_MODE_2G_ONLY:
a = 13;
b = 1;
break;
- case MM_MODEM_GSM_NETWORK_MODE_3G:
+ case MM_MODEM_GSM_NETWORK_MODE_UMTS:
case MM_MODEM_GSM_NETWORK_MODE_HSDPA:
+ case MM_MODEM_GSM_NETWORK_MODE_HSUPA:
+ case MM_MODEM_GSM_NETWORK_MODE_HSPA:
+ case MM_MODEM_GSM_NETWORK_MODE_3G_ONLY:
a = 14;
b = 2;
break;
- case MM_MODEM_GSM_NETWORK_MODE_PREFER_2G:
+ case MM_MODEM_GSM_NETWORK_MODE_2G_PREFERRED:
a = 2;
b = 1;
break;
- case MM_MODEM_GSM_NETWORK_MODE_PREFER_3G:
+ case MM_MODEM_GSM_NETWORK_MODE_3G_PREFERRED:
a = 2;
b = 2;
break;
@@ -159,10 +163,14 @@ set_network_mode (MMModemGsmNetwork *modem,
break;
case MM_MODEM_GSM_NETWORK_MODE_GPRS:
case MM_MODEM_GSM_NETWORK_MODE_EDGE:
- case MM_MODEM_GSM_NETWORK_MODE_3G:
+ case MM_MODEM_GSM_NETWORK_MODE_UMTS:
case MM_MODEM_GSM_NETWORK_MODE_HSDPA:
- case MM_MODEM_GSM_NETWORK_MODE_PREFER_2G:
- case MM_MODEM_GSM_NETWORK_MODE_PREFER_3G:
+ case MM_MODEM_GSM_NETWORK_MODE_HSUPA:
+ case MM_MODEM_GSM_NETWORK_MODE_HSPA:
+ case MM_MODEM_GSM_NETWORK_MODE_2G_PREFERRED:
+ case MM_MODEM_GSM_NETWORK_MODE_3G_PREFERRED:
+ case MM_MODEM_GSM_NETWORK_MODE_2G_ONLY:
+ case MM_MODEM_GSM_NETWORK_MODE_3G_ONLY:
/* Allowed values */
mm_callback_info_set_data (info, "mode", GUINT_TO_POINTER (mode), NULL);
mm_serial_queue_command (MM_SERIAL (modem), "AT^SYSCFG?", 3, set_network_mode_get_done, info);
@@ -414,9 +422,13 @@ handle_mode_change (MMSerial *serial,
else if (a == 3 && b == 3)
priv->mode = MM_MODEM_GSM_NETWORK_MODE_EDGE;
else if (a == 5 && b == 4)
- priv->mode = MM_MODEM_GSM_NETWORK_MODE_3G;
+ priv->mode = MM_MODEM_GSM_NETWORK_MODE_UMTS;
else if (a == 5 && b == 5)
priv->mode = MM_MODEM_GSM_NETWORK_MODE_HSDPA;
+ else if (a == 5 && b == 6)
+ priv->mode = MM_MODEM_GSM_NETWORK_MODE_HSUPA;
+ else if (a == 5 && b == 7)
+ priv->mode = MM_MODEM_GSM_NETWORK_MODE_HSPA;
else {
g_warning ("Couldn't parse mode change value: '%s'", str);
return;
diff --git a/plugins/mm-modem-mbm.c b/plugins/mm-modem-mbm.c
index f527894e..e0f03455 100644
--- a/plugins/mm-modem-mbm.c
+++ b/plugins/mm-modem-mbm.c
@@ -258,7 +258,12 @@ enable (MMModem *modem,
static gboolean
parse_erinfo (const char *reply, int *mode, int *gsm_rinfo, int *umts_rinfo)
{
- if (reply == NULL || strncmp (reply, "*ERINFO:", 8))
+ g_return_val_if_fail (reply != NULL, FALSE);
+ g_return_val_if_fail (mode != NULL, FALSE);
+ g_return_val_if_fail (gsm_rinfo != NULL, FALSE);
+ g_return_val_if_fail (umts_rinfo != NULL, FALSE);
+
+ if (strncmp (reply, "*ERINFO:", 8))
return FALSE;
if (sscanf (reply + 8, "%d,%d,%d", mode, gsm_rinfo, umts_rinfo))
@@ -278,20 +283,28 @@ get_network_mode_done (MMSerial *serial,
if (error)
info->error = g_error_copy (error);
else {
- int mode;
- int gsm_rinfo;
- int umts_rinfo;
+ int mode = 0, gsm_rinfo = 0, umts_rinfo = 0;
guint32 result = 0;
if (parse_erinfo (response->str, &mode, &gsm_rinfo, &umts_rinfo)) {
if (umts_rinfo == 2)
result = MM_MODEM_GSM_NETWORK_MODE_HSDPA;
else if (umts_rinfo && !gsm_rinfo)
- result = MM_MODEM_GSM_NETWORK_MODE_3G;
+ result = MM_MODEM_GSM_NETWORK_MODE_UMTS;
else if (umts_rinfo && gsm_rinfo)
- result = MM_MODEM_GSM_NETWORK_MODE_PREFER_3G;
- else if (gsm_rinfo)
- result = MM_MODEM_GSM_NETWORK_MODE_GPRS;
+ result = MM_MODEM_GSM_NETWORK_MODE_3G_PREFERRED;
+ else if (gsm_rinfo) {
+ switch (gsm_rinfo) {
+ case 2:
+ case 3:
+ result = MM_MODEM_GSM_NETWORK_MODE_EDGE;
+ break;
+ case 1:
+ default:
+ result = MM_MODEM_GSM_NETWORK_MODE_GPRS;
+ break;
+ }
+ }
}
if (result == 0)
diff --git a/plugins/mm-modem-option.c b/plugins/mm-modem-option.c
index 8a587908..0c77c892 100644
--- a/plugins/mm-modem-option.c
+++ b/plugins/mm-modem-option.c
@@ -98,16 +98,16 @@ get_network_mode_done (MMSerial *serial,
switch (a) {
case 0:
- mode = MM_MODEM_GSM_NETWORK_MODE_GPRS;
+ mode = MM_MODEM_GSM_NETWORK_MODE_2G_ONLY;
break;
case 1:
- mode = MM_MODEM_GSM_NETWORK_MODE_3G;
+ mode = MM_MODEM_GSM_NETWORK_MODE_3G_ONLY;
break;
case 2:
- mode = MM_MODEM_GSM_NETWORK_MODE_PREFER_2G;
+ mode = MM_MODEM_GSM_NETWORK_MODE_2G_PREFERRED;
break;
case 3:
- mode = MM_MODEM_GSM_NETWORK_MODE_PREFER_3G;
+ mode = MM_MODEM_GSM_NETWORK_MODE_3G_PREFERRED;
break;
default:
break;
@@ -165,15 +165,21 @@ set_network_mode (MMModemGsmNetwork *modem,
switch (mode) {
case MM_MODEM_GSM_NETWORK_MODE_ANY:
case MM_MODEM_GSM_NETWORK_MODE_GPRS:
+ case MM_MODEM_GSM_NETWORK_MODE_EDGE:
+ case MM_MODEM_GSM_NETWORK_MODE_2G_ONLY:
i = 0;
break;
- case MM_MODEM_GSM_NETWORK_MODE_3G:
+ case MM_MODEM_GSM_NETWORK_MODE_UMTS:
+ case MM_MODEM_GSM_NETWORK_MODE_HSDPA:
+ case MM_MODEM_GSM_NETWORK_MODE_HSUPA:
+ case MM_MODEM_GSM_NETWORK_MODE_HSPA:
+ case MM_MODEM_GSM_NETWORK_MODE_3G_ONLY:
i = 1;
break;
- case MM_MODEM_GSM_NETWORK_MODE_PREFER_2G:
+ case MM_MODEM_GSM_NETWORK_MODE_2G_PREFERRED:
i = 2;
break;
- case MM_MODEM_GSM_NETWORK_MODE_PREFER_3G:
+ case MM_MODEM_GSM_NETWORK_MODE_3G_PREFERRED:
i = 3;
break;
default:
diff --git a/src/mm-modem-gsm-network.h b/src/mm-modem-gsm-network.h
index f6d08721..e838dc85 100644
--- a/src/mm-modem-gsm-network.h
+++ b/src/mm-modem-gsm-network.h
@@ -11,15 +11,19 @@
#define MM_MODEM_GSM_NETWORK_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), MM_TYPE_MODEM_GSM_NETWORK, MMModemGsmNetwork))
typedef enum {
- MM_MODEM_GSM_NETWORK_MODE_ANY = 0,
- MM_MODEM_GSM_NETWORK_MODE_GPRS = 1,
- MM_MODEM_GSM_NETWORK_MODE_EDGE = 2,
- MM_MODEM_GSM_NETWORK_MODE_3G = 3,
- MM_MODEM_GSM_NETWORK_MODE_HSDPA = 4,
- MM_MODEM_GSM_NETWORK_MODE_PREFER_2G = 5,
- MM_MODEM_GSM_NETWORK_MODE_PREFER_3G = 6,
-
- MM_MODEM_GSM_NETWORK_MODE_LAST = MM_MODEM_GSM_NETWORK_MODE_PREFER_3G
+ MM_MODEM_GSM_NETWORK_MODE_ANY = 0,
+ MM_MODEM_GSM_NETWORK_MODE_GPRS = 1,
+ MM_MODEM_GSM_NETWORK_MODE_EDGE = 2,
+ MM_MODEM_GSM_NETWORK_MODE_UMTS = 3,
+ MM_MODEM_GSM_NETWORK_MODE_HSDPA = 4,
+ MM_MODEM_GSM_NETWORK_MODE_2G_PREFERRED = 5,
+ MM_MODEM_GSM_NETWORK_MODE_3G_PREFERRED = 6,
+ MM_MODEM_GSM_NETWORK_MODE_2G_ONLY = 7,
+ MM_MODEM_GSM_NETWORK_MODE_3G_ONLY = 8,
+ MM_MODEM_GSM_NETWORK_MODE_HSUPA = 9,
+ MM_MODEM_GSM_NETWORK_MODE_HSPA = 10,
+
+ MM_MODEM_GSM_NETWORK_MODE_LAST = MM_MODEM_GSM_NETWORK_MODE_HSPA
} MMModemGsmNetworkMode;
typedef enum {