<div dir="ltr">Is mm_gdbus_* expected to be called from a plugin?  I don't find any plugin using mm_gdbus_* and wonder if there is a reason for that.</div><div class="gmail_extra"><br><br><div class="gmail_quote">On Tue, Aug 13, 2013 at 7:58 AM, Dan Williams <span dir="ltr"><<a href="mailto:dcbw@redhat.com" target="_blank">dcbw@redhat.com</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="im">On Tue, 2013-08-13 at 00:54 -0700, Ben Chan wrote:<br>
> This patch adds a field in MMBroadbandModemHuaweiPrivate to keep the<br>
> modem model, which can be used later by the plugin to alter the<br>
> implementation based on model. The modem model is used instead of USB<br>
> product ID because different models of Huawei modems often share the<br>
> same USB product ID.<br>
<br>
</div>I'm not sure, but would it be easier to retrieve and cache the return<br>
value of mm_gdbus_modem_get_model()?  Since the Huawei modem is a<br>
subclass of MMBroadbandModem, after init is complete the plugin could do<br>
something like:<br>
<br>
GObject *skeleton = NULL;<br>
const char *model;<br>
<br>
g_object_get (G_OBJECT (<huawei modem object>),<br>
MM_IFACE_MODEM_DBUS_SKELETON, &skeleton, NULL);<br>
model = mm_gdbus_modem_get_model (MM_GDBUS_MODEM (skeleton));<br>
<br>
Or something like that I believe.<br>
<span class="HOEnZb"><font color="#888888"><br>
Dan<br>
</font></span><div class="HOEnZb"><div class="h5"><br>
> ---<br>
>  plugins/huawei/mm-broadband-modem-huawei.c | 55 ++++++++++++++++++++++++++++++<br>
>  1 file changed, 55 insertions(+)<br>
><br>
> diff --git a/plugins/huawei/mm-broadband-modem-huawei.c b/plugins/huawei/mm-broadband-modem-huawei.c<br>
> index c34acc2..3cd3201 100644<br>
> --- a/plugins/huawei/mm-broadband-modem-huawei.c<br>
> +++ b/plugins/huawei/mm-broadband-modem-huawei.c<br>
> @@ -74,6 +74,8 @@ typedef enum {<br>
>  } RfswitchSupport;<br>
><br>
>  struct _MMBroadbandModemHuaweiPrivate {<br>
> +    gchar *model;<br>
> +<br>
>      /* Regex for signal quality related notifications */<br>
>      GRegex *rssi_regex;<br>
>      GRegex *rssilvl_regex;<br>
> @@ -446,6 +448,56 @@ reset (MMIfaceModem *self,<br>
>  }<br>
><br>
>  /*****************************************************************************/<br>
> +/* Model loading (Modem interface) */<br>
> +<br>
> +static gchar *<br>
> +load_model_finish (MMIfaceModem *self,<br>
> +                   GAsyncResult *res,<br>
> +                   GError **error)<br>
> +{<br>
> +    if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (res), error))<br>
> +        return NULL;<br>
> +<br>
> +    return g_simple_async_result_get_op_res_gpointer (G_SIMPLE_ASYNC_RESULT (res));<br>
> +}<br>
> +<br>
> +static void<br>
> +parent_load_model_ready (MMIfaceModem *_self,<br>
> +                         GAsyncResult *res,<br>
> +                         GSimpleAsyncResult *simple)<br>
> +{<br>
> +    MMBroadbandModemHuawei *self = MM_BROADBAND_MODEM_HUAWEI (_self);<br>
> +    GError *error = NULL;<br>
> +    gchar *model;<br>
> +<br>
> +    model = iface_modem_parent->load_model_finish (_self, res, &error);<br>
> +    if (model) {<br>
> +        g_assert (!self->priv->model);<br>
> +        self->priv->model = g_strdup (model);<br>
> +        g_simple_async_result_set_op_res_gpointer (simple, model, NULL);<br>
> +    } else<br>
> +        g_simple_async_result_take_error (simple, error);<br>
> +<br>
> +    g_simple_async_result_complete (simple);<br>
> +    g_object_unref (simple);<br>
> +}<br>
> +<br>
> +static void<br>
> +load_model (MMIfaceModem *self,<br>
> +            GAsyncReadyCallback callback,<br>
> +            gpointer user_data)<br>
> +{<br>
> +    /* Run parent's loading */<br>
> +    iface_modem_parent->load_model (<br>
> +        MM_IFACE_MODEM (self),<br>
> +        (GAsyncReadyCallback)parent_load_model_ready,<br>
> +        g_simple_async_result_new (G_OBJECT (self),<br>
> +                                   callback,<br>
> +                                   user_data,<br>
> +                                   load_model));<br>
> +}<br>
> +<br>
> +/*****************************************************************************/<br>
>  /* Load access technologies (Modem interface) */<br>
><br>
>  static MMModemAccessTechnology<br>
> @@ -2953,6 +3005,7 @@ finalize (GObject *object)<br>
>  {<br>
>      MMBroadbandModemHuawei *self = MM_BROADBAND_MODEM_HUAWEI (object);<br>
><br>
> +    g_free (self->priv->model);<br>
>      g_regex_unref (self->priv->rssi_regex);<br>
>      g_regex_unref (self->priv->rssilvl_regex);<br>
>      g_regex_unref (self->priv->hrssilvl_regex);<br>
> @@ -2977,6 +3030,8 @@ iface_modem_init (MMIfaceModem *iface)<br>
><br>
>      iface->reset = reset;<br>
>      iface->reset_finish = reset_finish;<br>
> +    iface->load_model = load_model;<br>
> +    iface->load_model_finish = load_model_finish;<br>
>      iface->load_access_technologies = load_access_technologies;<br>
>      iface->load_access_technologies_finish = load_access_technologies_finish;<br>
>      iface->load_unlock_retries = load_unlock_retries;<br>
<br>
<br>
</div></div></blockquote></div><br></div>