gsm: add access technology support for HSPA+
This commit is contained in:
@@ -157,6 +157,9 @@
|
|||||||
<tp:enumvalue suffix="HSPA" value="8">
|
<tp:enumvalue suffix="HSPA" value="8">
|
||||||
<tp:docstring>HSPA (ETSI 27.007: "UTRAN w/HSDPA and HSUPA")</tp:docstring>
|
<tp:docstring>HSPA (ETSI 27.007: "UTRAN w/HSDPA and HSUPA")</tp:docstring>
|
||||||
</tp:enumvalue>
|
</tp:enumvalue>
|
||||||
|
<tp:enumvalue suffix="HSPA_PLUS" value="9">
|
||||||
|
<tp:docstring>HSPA+ (ETSI 27.007: "UTRAN w/HSPA+")</tp:docstring>
|
||||||
|
</tp:enumvalue>
|
||||||
</tp:enum>
|
</tp:enum>
|
||||||
|
|
||||||
</interface>
|
</interface>
|
||||||
|
@@ -367,6 +367,35 @@ get_band (MMModemGsmNetwork *modem,
|
|||||||
mm_at_serial_port_queue_command (port, "AT^SYSCFG?", 3, get_band_done, info);
|
mm_at_serial_port_queue_command (port, "AT^SYSCFG?", 3, get_band_done, info);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static MMModemGsmAccessTech
|
||||||
|
huawei_sysinfo_to_act (int huawei)
|
||||||
|
{
|
||||||
|
switch (huawei) {
|
||||||
|
case 1:
|
||||||
|
return MM_MODEM_GSM_ACCESS_TECH_GSM;
|
||||||
|
case 2:
|
||||||
|
return MM_MODEM_GSM_ACCESS_TECH_GPRS;
|
||||||
|
case 3:
|
||||||
|
return MM_MODEM_GSM_ACCESS_TECH_EDGE;
|
||||||
|
case 4:
|
||||||
|
return MM_MODEM_GSM_ACCESS_TECH_UMTS;
|
||||||
|
case 5:
|
||||||
|
return MM_MODEM_GSM_ACCESS_TECH_HSDPA;
|
||||||
|
case 6:
|
||||||
|
return MM_MODEM_GSM_ACCESS_TECH_HSUPA;
|
||||||
|
case 7:
|
||||||
|
return MM_MODEM_GSM_ACCESS_TECH_HSPA;
|
||||||
|
case 9:
|
||||||
|
return MM_MODEM_GSM_ACCESS_TECH_HSPA_PLUS;
|
||||||
|
case 8:
|
||||||
|
/* TD-SCDMA */
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return MM_MODEM_GSM_ACCESS_TECH_UNKNOWN;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
get_act_request_done (MMAtSerialPort *port,
|
get_act_request_done (MMAtSerialPort *port,
|
||||||
GString *response,
|
GString *response,
|
||||||
@@ -409,22 +438,8 @@ get_act_request_done (MMAtSerialPort *port,
|
|||||||
if (srv_stat != 0) {
|
if (srv_stat != 0) {
|
||||||
/* Valid service */
|
/* Valid service */
|
||||||
str = g_match_info_fetch (match_info, 7);
|
str = g_match_info_fetch (match_info, 7);
|
||||||
if (str && strlen (str)) {
|
if (str && strlen (str))
|
||||||
if (str[0] == '1')
|
act = huawei_sysinfo_to_act (atoi (str));
|
||||||
act = MM_MODEM_GSM_ACCESS_TECH_GSM;
|
|
||||||
else if (str[0] == '2')
|
|
||||||
act = MM_MODEM_GSM_ACCESS_TECH_GPRS;
|
|
||||||
else if (str[0] == '3')
|
|
||||||
act = MM_MODEM_GSM_ACCESS_TECH_EDGE;
|
|
||||||
else if (str[0] == '4')
|
|
||||||
act = MM_MODEM_GSM_ACCESS_TECH_UMTS;
|
|
||||||
else if (str[0] == '5')
|
|
||||||
act = MM_MODEM_GSM_ACCESS_TECH_HSDPA;
|
|
||||||
else if (str[0] == '6')
|
|
||||||
act = MM_MODEM_GSM_ACCESS_TECH_HSUPA;
|
|
||||||
else if (str[0] == '7')
|
|
||||||
act = MM_MODEM_GSM_ACCESS_TECH_HSPA;
|
|
||||||
}
|
|
||||||
g_free (str);
|
g_free (str);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -627,32 +642,21 @@ handle_mode_change (MMAtSerialPort *port,
|
|||||||
MMModemGsmAccessTech act = MM_MODEM_GSM_ACCESS_TECH_UNKNOWN;
|
MMModemGsmAccessTech act = MM_MODEM_GSM_ACCESS_TECH_UNKNOWN;
|
||||||
char *str;
|
char *str;
|
||||||
int a;
|
int a;
|
||||||
int b;
|
|
||||||
|
|
||||||
str = g_match_info_fetch (match_info, 1);
|
str = g_match_info_fetch (match_info, 1);
|
||||||
a = atoi (str);
|
a = atoi (str);
|
||||||
g_free (str);
|
g_free (str);
|
||||||
|
|
||||||
str = g_match_info_fetch (match_info, 2);
|
str = g_match_info_fetch (match_info, 2);
|
||||||
b = atoi (str);
|
act = huawei_sysinfo_to_act (atoi (str));
|
||||||
g_free (str);
|
g_free (str);
|
||||||
|
|
||||||
if (a == 3) { /* GSM/GPRS mode */
|
if (a == 3) { /* GSM/GPRS mode */
|
||||||
if (b == 1)
|
if (act > MM_MODEM_GSM_ACCESS_TECH_EDGE)
|
||||||
act = MM_MODEM_GSM_ACCESS_TECH_GSM;
|
act = MM_MODEM_GSM_ACCESS_TECH_UNKNOWN;
|
||||||
else if (b == 2)
|
|
||||||
act = MM_MODEM_GSM_ACCESS_TECH_GPRS;
|
|
||||||
else if (b == 3)
|
|
||||||
act = MM_MODEM_GSM_ACCESS_TECH_EDGE;
|
|
||||||
} else if (a == 5) { /* WCDMA mode */
|
} else if (a == 5) { /* WCDMA mode */
|
||||||
if (b == 4)
|
if (act < MM_MODEM_GSM_ACCESS_TECH_UMTS)
|
||||||
act = MM_MODEM_GSM_ACCESS_TECH_UMTS;
|
act = MM_MODEM_GSM_ACCESS_TECH_UNKNOWN;
|
||||||
else if (b == 5)
|
|
||||||
act = MM_MODEM_GSM_ACCESS_TECH_HSDPA;
|
|
||||||
else if (b == 6)
|
|
||||||
act = MM_MODEM_GSM_ACCESS_TECH_HSUPA;
|
|
||||||
else if (b == 7)
|
|
||||||
act = MM_MODEM_GSM_ACCESS_TECH_HSPA;
|
|
||||||
} else if (a == 0)
|
} else if (a == 0)
|
||||||
act = MM_MODEM_GSM_ACCESS_TECH_UNKNOWN;
|
act = MM_MODEM_GSM_ACCESS_TECH_UNKNOWN;
|
||||||
else {
|
else {
|
||||||
|
@@ -108,6 +108,8 @@ mm_modem_gsm_network_act_to_old_mode (MMModemGsmAccessTech act)
|
|||||||
return MM_MODEM_GSM_NETWORK_DEPRECATED_MODE_HSUPA;
|
return MM_MODEM_GSM_NETWORK_DEPRECATED_MODE_HSUPA;
|
||||||
else if (act & MM_MODEM_GSM_ACCESS_TECH_HSPA)
|
else if (act & MM_MODEM_GSM_ACCESS_TECH_HSPA)
|
||||||
return MM_MODEM_GSM_NETWORK_DEPRECATED_MODE_HSPA;
|
return MM_MODEM_GSM_NETWORK_DEPRECATED_MODE_HSPA;
|
||||||
|
else if (act & MM_MODEM_GSM_ACCESS_TECH_HSPA_PLUS)
|
||||||
|
return MM_MODEM_GSM_NETWORK_DEPRECATED_MODE_HSPA;
|
||||||
|
|
||||||
return MM_MODEM_GSM_NETWORK_DEPRECATED_MODE_ANY;
|
return MM_MODEM_GSM_NETWORK_DEPRECATED_MODE_ANY;
|
||||||
}
|
}
|
||||||
|
@@ -54,8 +54,9 @@ typedef enum {
|
|||||||
MM_MODEM_GSM_ACCESS_TECH_HSDPA = 6, /* UTRAN w/HSDPA */
|
MM_MODEM_GSM_ACCESS_TECH_HSDPA = 6, /* UTRAN w/HSDPA */
|
||||||
MM_MODEM_GSM_ACCESS_TECH_HSUPA = 7, /* UTRAN w/HSUPA */
|
MM_MODEM_GSM_ACCESS_TECH_HSUPA = 7, /* UTRAN w/HSUPA */
|
||||||
MM_MODEM_GSM_ACCESS_TECH_HSPA = 8, /* UTRAN w/HSDPA and HSUPA */
|
MM_MODEM_GSM_ACCESS_TECH_HSPA = 8, /* UTRAN w/HSDPA and HSUPA */
|
||||||
|
MM_MODEM_GSM_ACCESS_TECH_HSPA_PLUS = 9, /* UTRAN w/HSPA+ */
|
||||||
|
|
||||||
MM_MODEM_GSM_ACCESS_TECH_LAST = MM_MODEM_GSM_ACCESS_TECH_HSPA
|
MM_MODEM_GSM_ACCESS_TECH_LAST = MM_MODEM_GSM_ACCESS_TECH_HSPA_PLUS
|
||||||
} MMModemGsmAccessTech;
|
} MMModemGsmAccessTech;
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
|
@@ -785,7 +785,9 @@ mm_gsm_string_to_access_tech (const char *string)
|
|||||||
/* Better technologies are listed first since modems sometimes say
|
/* Better technologies are listed first since modems sometimes say
|
||||||
* stuff like "GPRS/EDGE" and that should be handled as EDGE.
|
* stuff like "GPRS/EDGE" and that should be handled as EDGE.
|
||||||
*/
|
*/
|
||||||
if (strcasestr (string, "HSPA"))
|
if (strcasestr (string, "HSPA+"))
|
||||||
|
return MM_MODEM_GSM_ACCESS_TECH_HSPA_PLUS;
|
||||||
|
else if (strcasestr (string, "HSPA"))
|
||||||
return MM_MODEM_GSM_ACCESS_TECH_HSPA;
|
return MM_MODEM_GSM_ACCESS_TECH_HSPA;
|
||||||
else if (strcasestr (string, "HSDPA/HSUPA"))
|
else if (strcasestr (string, "HSDPA/HSUPA"))
|
||||||
return MM_MODEM_GSM_ACCESS_TECH_HSPA;
|
return MM_MODEM_GSM_ACCESS_TECH_HSPA;
|
||||||
|
Reference in New Issue
Block a user