gsm: clean up network modes

Add specific modes for HSUPA and HSPA; add modes for 2G and 3G only, and
update plugins to use the right modes.
This commit is contained in:
Dan Williams
2009-04-15 10:44:09 -04:00
parent 8eb9fa50b4
commit 58a48405cf
5 changed files with 94 additions and 39 deletions
+25 -5
View File
@@ -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>
+23 -11
View File
@@ -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;
+21 -8
View File
@@ -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)
+13 -7
View File
@@ -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:
+12 -8
View File
@@ -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_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_PREFER_3G
MM_MODEM_GSM_NETWORK_MODE_LAST = MM_MODEM_GSM_NETWORK_MODE_HSPA
} MMModemGsmNetworkMode;
typedef enum {