static gboolean handle_probe_response (gpointer user_data) { MMPluginBaseSupportsTask *task = MM_PLUGIN_BASE_SUPPORTS_TASK (user_data); MMPluginBaseSupportsTaskPrivate *task_priv = MM_PLUGIN_BASE_SUPPORTS_TASK_GET_PRIVATE (task); MMPluginBase *self = MM_PLUGIN_BASE (mm_plugin_base_supports_task_get_plugin (task)); const char *cmd = NULL; switch (task_priv->probe_state) { case PROBE_STATE_GCAP_TRY1: case PROBE_STATE_GCAP_TRY2: case PROBE_STATE_GCAP_TRY3: cmd = "+GCAP"; break; case PROBE_STATE_ATI: cmd = "I"; break; case PROBE_STATE_CPIN: cmd = "+CPIN?"; break; case PROBE_STATE_CGMM: default: cmd = "+CGMM"; break; } MM_PLUGIN_BASE_GET_CLASS (self)->handle_probe_response (self, task, cmd, task_priv->probe_resp, task_priv->probe_error); return FALSE; }
static gboolean getportmode_response_cb (MMPluginBaseSupportsTask *task, GString *response, GError *error, guint32 tries, gboolean *out_stop, guint32 *out_level, gpointer user_data) { /* If any error occurred that was not ERROR or COMMAND NOT SUPPORT then * retry the command. */ if (error) { if (g_error_matches (error, MM_MOBILE_ERROR, MM_MOBILE_ERROR_UNKNOWN) == FALSE) return tries <= 4 ? TRUE : FALSE; } else { MMPlugin *plugin = mm_plugin_base_supports_task_get_plugin (task); cache_port_mode (plugin, response->str, "PCUI:", TAG_HUAWEI_PCUI_PORT); cache_port_mode (plugin, response->str, "MDM:", TAG_HUAWEI_MODEM_PORT); cache_port_mode (plugin, response->str, "DIAG:", TAG_HUAWEI_DIAG_PORT); g_object_set_data (G_OBJECT (plugin), TAG_GETPORTMODE_SUPPORTED, GUINT_TO_POINTER (1)); } /* No error or if ^GETPORTMODE is not supported, assume success */ return FALSE; }
static gboolean emit_probe_result (gpointer user_data) { MMPluginBaseSupportsTask *task = MM_PLUGIN_BASE_SUPPORTS_TASK (user_data); MMPluginBaseSupportsTaskPrivate *task_priv = MM_PLUGIN_BASE_SUPPORTS_TASK_GET_PRIVATE (task); MMPlugin *self = mm_plugin_base_supports_task_get_plugin (task); /* Close the serial ports */ if (task_priv->probe_port) { g_object_unref (task_priv->probe_port); task_priv->probe_port = NULL; } if (task_priv->qcdm_port) { g_object_unref (task_priv->qcdm_port); task_priv->qcdm_port = NULL; } task_priv->probe_id = 0; g_signal_emit (self, signals[PROBE_RESULT], 0, task, task_priv->probed_caps); return FALSE; }