diff options
-rw-r--r-- | introspection/mm-modem-gsm-network.xml | 30 | ||||
-rw-r--r-- | plugins/mm-modem-huawei.c | 34 | ||||
-rw-r--r-- | plugins/mm-modem-mbm.c | 29 | ||||
-rw-r--r-- | plugins/mm-modem-option.c | 20 | ||||
-rw-r--r-- | src/mm-modem-gsm-network.h | 22 |
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 { |