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:
@@ -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
@@ -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
@@ -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)
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user