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