diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/mm-plugin-base.c | 24 | ||||
-rw-r--r-- | src/mm-plugin-base.h | 1 |
2 files changed, 17 insertions, 8 deletions
diff --git a/src/mm-plugin-base.c b/src/mm-plugin-base.c index 6c5658c4..01fe9c5d 100644 --- a/src/mm-plugin-base.c +++ b/src/mm-plugin-base.c @@ -716,15 +716,20 @@ real_handle_probe_response (MMPluginBase *self, { MMPluginBaseSupportsTaskPrivate *task_priv = MM_PLUGIN_BASE_SUPPORTS_TASK_GET_PRIVATE (task); MMAtSerialPort *port = task_priv->probe_port; - gboolean ignore_error = FALSE; /* Some modems (Huawei E160g) won't respond to +GCAP with no SIM, but - * will respond to ATI. + * will respond to ATI. Ignore the error and continue. */ - if (response && strstr (response, "+CME ERROR:")) - ignore_error = TRUE; + if (response && strstr (response, "+CME ERROR:")) { + task_priv->probed_caps |= MM_PLUGIN_BASE_PORT_CAP_AT; + error = NULL; + } + + if (error) { + /* If the modem returned a recognizable error, it can do AT commands */ + if (error->domain == MM_MOBILE_ERROR) + task_priv->probed_caps |= MM_PLUGIN_BASE_PORT_CAP_AT; - if (error && !ignore_error) { /* Only allow timeout errors in the initial AT+GCAP queries. If all AT+GCAP * get timed out, assume it's not an AT port. */ if (g_error_matches (error, MM_SERIAL_ERROR, MM_SERIAL_ERROR_RESPONSE_TIMEOUT)) { @@ -763,7 +768,8 @@ real_handle_probe_response (MMPluginBase *self, /* Some modems don't respond to AT+GCAP, but often they put a * GCAP-style response as a line in the ATI response. */ - task_priv->probed_caps = parse_caps_gcap (response); + task_priv->probed_caps |= parse_caps_gcap (response); + task_priv->probed_caps |= MM_PLUGIN_BASE_PORT_CAP_AT; break; case PROBE_STATE_CAPS_CPIN: /* Some devices (ZTE MF628/ONDA MT503HS for example) reply to @@ -771,13 +777,15 @@ real_handle_probe_response (MMPluginBase *self, * Since no known CDMA modems support AT+CPIN? we can consider the * device a GSM device if it returns a non-error response to AT+CPIN?. */ - task_priv->probed_caps = parse_caps_cpin (response); + task_priv->probed_caps |= parse_caps_cpin (response); + task_priv->probed_caps |= MM_PLUGIN_BASE_PORT_CAP_AT; break; case PROBE_STATE_CAPS_CGMM: /* Some models (BUSlink SCWi275u) stick stupid stuff in the CGMM * response but at least it allows us to identify them. */ - task_priv->probed_caps = parse_caps_cgmm (response); + task_priv->probed_caps |= parse_caps_cgmm (response); + task_priv->probed_caps |= MM_PLUGIN_BASE_PORT_CAP_AT; break; case PROBE_STATE_VENDOR_CGMI: case PROBE_STATE_VENDOR_GMI: diff --git a/src/mm-plugin-base.h b/src/mm-plugin-base.h index 5ab6ec21..4b0932ca 100644 --- a/src/mm-plugin-base.h +++ b/src/mm-plugin-base.h @@ -38,6 +38,7 @@ #define MM_PLUGIN_BASE_PORT_CAP_IS856 0x0100 /* CDMA 3G EVDO rev 0 */ #define MM_PLUGIN_BASE_PORT_CAP_IS856_A 0x0200 /* CDMA 3G EVDO rev A */ #define MM_PLUGIN_BASE_PORT_CAP_QCDM 0x0400 /* QCDM-capable port */ +#define MM_PLUGIN_BASE_PORT_CAP_AT 0x0800 /* Responds to AT commands */ #define MM_TYPE_PLUGIN_BASE_SUPPORTS_TASK (mm_plugin_base_supports_task_get_type ()) #define MM_PLUGIN_BASE_SUPPORTS_TASK(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MM_TYPE_PLUGIN_BASE_SUPPORTS_TASK, MMPluginBaseSupportsTask)) |