[MM][PATCH] modem: add support for 3GPP Vendor PCO info

ori inbar ori.inbar.altair.semi.com at gmail.com
Wed Jul 10 19:17:12 PDT 2013


hello Aleksander.
i will post a new patch today.
please see my comments below


On Tue, Jul 2, 2013 at 1:33 AM, Aleksander Morgado <aleksander at lanedo.com>wrote:

> Hey Ori,
>
>>
> See comments below.
>
>
> On 02/07/13 07:27, ori inbar wrote:
> > From: ori inbar <ori.inbar at altair-semi.com>
> >
> > Change-Id: I139802238868e9743390906c1cfc77fef9179599
> > ---
> >  ...g.freedesktop.ModemManager1.Modem.Modem3gpp.xml |  17 +++
> >  libmm-glib/mm-simple-status.c                      |  26 +++-
> >  libmm-glib/mm-simple-status.h                      |   1 +
> >  src/mm-broadband-bearer.c                          |  10 ++
> >  src/mm-iface-modem-3gpp.c                          | 145
> +++++++++++++++++++--
> >  src/mm-iface-modem-3gpp.h                          |  18 +++
> >  6 files changed, 206 insertions(+), 11 deletions(-)
> >
> > diff --git
> a/introspection/org.freedesktop.ModemManager1.Modem.Modem3gpp.xml
> b/introspection/org.freedesktop.ModemManager1.Modem.Modem3gpp.xml
> > index 83e1499..14b5e02 100644
> > --- a/introspection/org.freedesktop.ModemManager1.Modem.Modem3gpp.xml
> > +++ b/introspection/org.freedesktop.ModemManager1.Modem.Modem3gpp.xml
> > @@ -136,5 +136,22 @@
> >      -->
> >      <property name="EnabledFacilityLocks" type="u" access="read" />
> >
> > +    <!--
> > +        VendorPcoInfo
> > +
> > +        Vendor-specific protocol configuration option (PCO) info
> received from the LTE
> > +        mobile network to which the mobile is currently registered (see
> 3GPP TS 24.008
> > +        Section 10.5.6.3).
> > +
> > +        Returned in the format <literal>"PCOIdPCOPayload"</literal>,
> where
> > +        <literal>PCOId</literal> is the 4-digit hex-encoded string of
> PCO ID and
> > +        <literal>PCOPayload</literal> is the hex-encoded string of the
> PCO payload data,
> > +        e.g. <literal>"FF003114800"</literal>.
> > +
> > +        If the <literal>PCOId</literal> and
> <literal>PCOPayload</literal> are not known
> > +        or the mobile is not registered to a mobile network, this
> property will
> > +        be a zero-length (blank) string.
> > +    -->
> > +    <property name="VendorPcoInfo" type="s" access="read" />
> >    </interface>
> >  </node>
>
> What is the point of adding this property in the Simple Status info?
>
> Simple Status should have the most commonly used values (e.g. operator
>
> name, code, signal quality...). This PCO info doesn't seem very commonly
>
> used to me; so I would not add it to Simple Status.
>
>
we need it since we need to print the PCO in mmcli .


> > diff --git a/libmm-glib/mm-simple-status.c
> b/libmm-glib/mm-simple-status.c
> > index 10dfee3..0560a34 100644
> > --- a/libmm-glib/mm-simple-status.c
> > +++ b/libmm-glib/mm-simple-status.c
> > @@ -44,6 +44,7 @@ enum {
> >      PROP_3GPP_REGISTRATION_STATE,
> >      PROP_3GPP_OPERATOR_CODE,
> >      PROP_3GPP_OPERATOR_NAME,
> > +    PROP_3GPP_VENDOR_PCO_INFO,
> >      PROP_CDMA_CDMA1X_REGISTRATION_STATE,
> >      PROP_CDMA_EVDO_REGISTRATION_STATE,
> >      PROP_CDMA_SID,
> > @@ -72,6 +73,8 @@ struct _MMSimpleStatusPrivate {
> >      gchar *modem_3gpp_operator_code;
> >      /* 3GPP operator name, given only when registered, signature 's' */
> >      gchar *modem_3gpp_operator_name;
> > +    /* 3GPP LTE vendor PCO info, given only when registered, signature
> 's' */
> > +    gchar *modem_3gpp_vendor_pco_info;
> >
> >      /* <--- From the Modem CDMA interface ---> */
> >      /* CDMA/CDMA1x registration state, signature 'u' */
> > @@ -350,6 +353,11 @@ mm_simple_status_get_dictionary (MMSimpleStatus
> *self)
> >                                     "{sv}",
> >
> MM_SIMPLE_PROPERTY_3GPP_OPERATOR_NAME,
> >                                     g_variant_new_string
> (self->priv->modem_3gpp_operator_name));
> > +        if (self->priv->modem_3gpp_vendor_pco_info)
> > +            g_variant_builder_add (&builder,
> > +                                   "{sv}",
> > +
> MM_SIMPLE_PROPERTY_3GPP_VENDOR_PCO_INFO,
> > +                                   g_variant_new_string
> (self->priv->modem_3gpp_vendor_pco_info));
> >
> >          if (self->priv->modem_cdma_cdma1x_registration_state !=
> MM_MODEM_CDMA_REGISTRATION_STATE_UNKNOWN) {
> >              g_variant_builder_add (&builder,
> > @@ -423,7 +431,8 @@ mm_simple_status_new_from_dictionary (GVariant
> *dictionary,
> >                            key, g_variant_get_uint32 (value),
> >                            NULL);
> >          } else if (g_str_equal (key,
> MM_SIMPLE_PROPERTY_3GPP_OPERATOR_CODE) ||
> > -                   g_str_equal (key,
> MM_SIMPLE_PROPERTY_3GPP_OPERATOR_NAME)) {
> > +                   g_str_equal (key,
> MM_SIMPLE_PROPERTY_3GPP_OPERATOR_NAME) ||
> > +                   g_str_equal (key,
> MM_SIMPLE_PROPERTY_3GPP_VENDOR_PCO_INFO)) {
> >              /* string properties */
> >              g_object_set (properties,
> >                            key, g_variant_get_string (value, NULL),
> > @@ -501,6 +510,10 @@ set_property (GObject *object,
> >          g_free (self->priv->modem_3gpp_operator_code);
> >          self->priv->modem_3gpp_operator_code = g_value_dup_string
> (value);
> >          break;
> > +    case PROP_3GPP_VENDOR_PCO_INFO:
> > +        g_free (self->priv->modem_3gpp_vendor_pco_info);
> > +        self->priv->modem_3gpp_vendor_pco_info = g_value_dup_string
> (value);
> > +        break;
> >      case PROP_3GPP_OPERATOR_NAME:
> >          g_free (self->priv->modem_3gpp_operator_name);
> >          self->priv->modem_3gpp_operator_name = g_value_dup_string
> (value);
> > @@ -553,6 +566,9 @@ get_property (GObject *object,
> >      case PROP_3GPP_OPERATOR_NAME:
> >          g_value_set_string (value,
> self->priv->modem_3gpp_operator_name);
> >          break;
> > +    case PROP_3GPP_VENDOR_PCO_INFO:
> > +        g_value_set_string (value,
> self->priv->modem_3gpp_vendor_pco_info);
> > +        break;
> >      case PROP_CDMA_CDMA1X_REGISTRATION_STATE:
> >          g_value_set_enum (value,
> self->priv->modem_cdma_cdma1x_registration_state);
> >          break;
> > @@ -678,6 +694,14 @@ mm_simple_status_class_init (MMSimpleStatusClass
> *klass)
> >                               G_PARAM_READWRITE);
> >      g_object_class_install_property (object_class,
> PROP_3GPP_OPERATOR_NAME, properties[PROP_3GPP_OPERATOR_NAME]);
> >
> > +    properties[PROP_3GPP_VENDOR_PCO_INFO] =
> > +        g_param_spec_string (MM_SIMPLE_PROPERTY_3GPP_VENDOR_PCO_INFO,
> > +                             "3GPP LTE vendor PCO info",
> > +                             "Hex-encoded string of the current vendor
> PCO info",
> > +                             NULL,
> > +                             G_PARAM_READWRITE);
> > +    g_object_class_install_property (object_class,
> PROP_3GPP_VENDOR_PCO_INFO, properties[PROP_3GPP_VENDOR_PCO_INFO]);
> > +
> >      properties[PROP_CDMA_CDMA1X_REGISTRATION_STATE] =
> >          g_param_spec_enum
> (MM_SIMPLE_PROPERTY_CDMA_CDMA1X_REGISTRATION_STATE,
> >                             "CDMA1x registration state",
> > diff --git a/libmm-glib/mm-simple-status.h
> b/libmm-glib/mm-simple-status.h
> > index 8292fdb..be4f7f6 100644
> > --- a/libmm-glib/mm-simple-status.h
> > +++ b/libmm-glib/mm-simple-status.h
> > @@ -88,6 +88,7 @@ guint
>  mm_simple_status_get_cdma_nid
> >  #define MM_SIMPLE_PROPERTY_3GPP_REGISTRATION_STATE
> "m3gpp-registration-state"
> >  #define MM_SIMPLE_PROPERTY_3GPP_OPERATOR_CODE      "m3gpp-operator-code"
> >  #define MM_SIMPLE_PROPERTY_3GPP_OPERATOR_NAME      "m3gpp-operator-name"
> > +#define MM_SIMPLE_PROPERTY_3GPP_VENDOR_PCO_INFO
>  "m3gpp-vendor-pco-info"
> >
> >  #define MM_SIMPLE_PROPERTY_CDMA_CDMA1X_REGISTRATION_STATE
> "cdma-cdma1x-registration-state"
> >  #define MM_SIMPLE_PROPERTY_CDMA_EVDO_REGISTRATION_STATE
> "cdma-evdo-registration-state"
> > diff --git a/src/mm-broadband-bearer.c b/src/mm-broadband-bearer.c
> > index f8f449d..90fd33f 100644
> > --- a/src/mm-broadband-bearer.c
> > +++ b/src/mm-broadband-bearer.c
> > @@ -1100,6 +1100,7 @@ connect_3gpp_ready (MMBroadbandBearer *self,
> >                      ConnectContext *ctx)
> >  {
> >      MMBearerConnectResult *result;
> > +    MMBaseModem *modem = NULL;
> >      GError *error = NULL;
> >
> >      result = MM_BROADBAND_BEARER_GET_CLASS (self)->connect_3gpp_finish
> (self, res, &error);
> > @@ -1109,6 +1110,15 @@ connect_3gpp_ready (MMBroadbandBearer *self,
> >          return;
> >      }
> >
> > +    /* Get the owner modem object */
> > +    g_object_get (self,
> > +                  MM_BEARER_MODEM, &modem,
> > +                  NULL);
> > +    g_assert (modem != NULL);
> > +
> > +    /* In case of 3GPP LTE, there is a need to refresh the vendor PCO
> info at this stage. */
> > +    mm_iface_modem_3gpp_reload_current_vendor_pco_info
> (MM_IFACE_MODEM_3GPP (modem), NULL, NULL);
> > +
>
> You need to g_object_unref (modem) here, to balance out with the one you
>
> got in g_object_get (). A useful hint to avoid these issues is to always
>
> make sure that when MM exits and the modem is still plugged in you see
>
> the "Modem (whatever)... completely disposed" log message. If you don't
>
> see that message, there's a reference to balance out somewhere.
>
>>
> But anyway, could you explain a bit why this update is needed? Why do
>
> you say this is needed only in 3GPP-LTE? And if it is 3GPP-LTE only, why
> isn't it within a if (mm_iface_modem_is_3gpp_lte())?
>

ok - i've put it under  if (mm_iface_modem_is_3gpp_lte())
Vendor PCO can come with any PDN (bearer) initiation - and in LTE network
where there are more than one PDN
you might get different Vendor PCO on each of the PDN - so when u raise the
bearer here (which actually is the 3rd PDN in
Verizon network) you need to check the vendor PCO value in the network.
I'm an LTE guy - so and as far as i know only 3GPP-LTE has support for
VENDOR PCO inside it's signaling.



> >      /* take result */
> >      connect_succeeded (ctx, CONNECTION_TYPE_3GPP, result);
> >  }
> > diff --git a/src/mm-iface-modem-3gpp.c b/src/mm-iface-modem-3gpp.c
> > index 53399d5..7fdce03 100644
> > --- a/src/mm-iface-modem-3gpp.c
> > +++ b/src/mm-iface-modem-3gpp.c
> > @@ -64,6 +64,10 @@ mm_iface_modem_3gpp_bind_simple_status
> (MMIfaceModem3gpp *self,
> >                              status,
> MM_SIMPLE_PROPERTY_3GPP_OPERATOR_NAME,
> >                              G_BINDING_DEFAULT | G_BINDING_SYNC_CREATE);
> >
> > +    g_object_bind_property (skeleton, "vendor-pco-info",
> > +                            status,
> MM_SIMPLE_PROPERTY_3GPP_VENDOR_PCO_INFO,
> > +                            G_BINDING_DEFAULT | G_BINDING_SYNC_CREATE);
> > +
>
> As said, no need this in Simple Status.
>

see above


> >      g_object_unref (skeleton);
> >  }
> >
> > @@ -75,7 +79,7 @@ typedef struct {
> >      MMModem3gppRegistrationState eps;
> >      gboolean manual_registration;
> >      GCancellable *pending_registration_cancellable;
> > -    gboolean reloading_operator;
> > +    gboolean reloading_registration_info;
> >  } RegistrationStateContext;
> >
> >  static void
> > @@ -951,6 +955,114 @@ mm_iface_modem_3gpp_clear_current_operator
> (MMIfaceModem3gpp *self)
> >
> >
>  /*****************************************************************************/
> >
> > +typedef struct {
> > +    MMIfaceModem3gpp *self;
> > +    MmGdbusModem3gpp *skeleton;
> > +    GSimpleAsyncResult *result;
> > +} ReloadCurrentVendorPcoInfoContext;
> > +
> > +static void
> > +reload_current_vendor_pco_info_context_complete_and_free
> (ReloadCurrentVendorPcoInfoContext *ctx)
> > +{
> > +    g_simple_async_result_complete_in_idle (ctx->result);
> > +    g_object_unref (ctx->result);
> > +    if (ctx->skeleton)
> > +        g_object_unref (ctx->skeleton);
> > +    g_object_unref (ctx->self);
> > +    g_slice_free (ReloadCurrentVendorPcoInfoContext, ctx);
> > +}
> > +
> > +gboolean
> > +mm_iface_modem_3gpp_reload_current_vendor_pco_info_finish
> (MMIfaceModem3gpp *self,
> > +                                                           GAsyncResult
> *res,
> > +                                                           GError
> **error)
> > +{
> > +    return !g_simple_async_result_propagate_error
> (G_SIMPLE_ASYNC_RESULT (res), error);
> > +}
> > +
> > +static void
> > +load_vendor_pco_info_ready (MMIfaceModem3gpp *self,
> > +                            GAsyncResult *res,
> > +                            ReloadCurrentVendorPcoInfoContext *ctx)
> > +{
> > +    GError *error = NULL;
> > +    gchar *str;
> > +
> > +    str = MM_IFACE_MODEM_3GPP_GET_INTERFACE
> (self)->load_vendor_pco_info_finish (self, res, &error);
> > +    if (error) {
> > +        mm_warn ("Couldn't load Vendor PCO Info: '%s'", error->message);
> > +        g_error_free (error);
> > +    }
> > +
> > +    if (ctx->skeleton)
> > +        mm_gdbus_modem3gpp_set_vendor_pco_info (ctx->skeleton, str);
>
> On error, the PCO info is not reseted to an empty string, it will leave
> the previous PCO info. Is this intended?
>

i followed the same idea as load_operator_code_ready().


>
> > +
> > +    g_free (str);
> > +
> > +    g_simple_async_result_set_op_res_gboolean (ctx->result, TRUE);
> > +    reload_current_vendor_pco_info_context_complete_and_free (ctx);
> > +}
> > +
> > +void
> > +mm_iface_modem_3gpp_reload_current_vendor_pco_info (MMIfaceModem3gpp
> *self,
> > +                                                    GAsyncReadyCallback
> callback,
> > +                                                    gpointer user_data)
> > +{
> > +    ReloadCurrentVendorPcoInfoContext *ctx;
> > +
> > +    ctx = g_slice_new0 (ReloadCurrentVendorPcoInfoContext);
> > +    ctx->self = g_object_ref (self);
> > +    ctx->result = g_simple_async_result_new (G_OBJECT (self),
> > +                                             callback,
> > +                                             user_data,
> > +
> mm_iface_modem_3gpp_reload_current_vendor_pco_info);
> > +
> > +    g_object_get (self,
> > +                  MM_IFACE_MODEM_3GPP_DBUS_SKELETON, &ctx->skeleton,
> > +                  NULL);
> > +
> > +    if (!ctx->skeleton) {
> > +        g_simple_async_result_set_error (ctx->result,
> > +                                         MM_CORE_ERROR,
> > +                                         MM_CORE_ERROR_FAILED,
> > +                                         "Couldn't get interface
> skeleton");
> > +        reload_current_vendor_pco_info_context_complete_and_free (ctx);
> > +        return;
> > +    }
> > +
> > +    if (!MM_IFACE_MODEM_3GPP_GET_INTERFACE (self)->load_vendor_pco_info
> ||
> > +        !MM_IFACE_MODEM_3GPP_GET_INTERFACE
> (self)->load_vendor_pco_info_finish) {
> > +
> > +        mm_gdbus_modem3gpp_set_vendor_pco_info (ctx->skeleton, NULL);
>
>
> Didn't you say in the interface description that if no value given, it
> would be an empty string? (i.e. "")
>

again i followed the same as operator name which states:

If the <literal>MCC</literal> and <literal>MNC</literal> are not known
        or the mobile is not registered to a mobile network, this property
will
        be a zero-length (blank) string.

and uses the same technique to specify it
mm_gdbus_modem3gpp_set_operator_code (ctx->skeleton, NULL);
in mm_iface_modem_3gpp_reload_current_operator


>
> > +
> > +        g_simple_async_result_set_op_res_gboolean(ctx->result, TRUE);
> > +        reload_current_vendor_pco_info_context_complete_and_free(ctx);
> > +        return;
> > +    }
> > +
> > +    /* Launch vendor PCO info update */
> > +    MM_IFACE_MODEM_3GPP_GET_INTERFACE (ctx->self)->load_vendor_pco_info
> (
> > +        ctx->self,
> > +        (GAsyncReadyCallback)load_vendor_pco_info_ready,
> > +        ctx);
> > +}
> > +
> > +void
> > +mm_iface_modem_3gpp_clear_current_vendor_pco_info (MMIfaceModem3gpp
> *self)
> > +{
> > +    MmGdbusModem3gpp *skeleton = NULL;
> > +
> > +    g_object_get (self,
> > +                  MM_IFACE_MODEM_3GPP_DBUS_SKELETON, &skeleton,
> > +                  NULL);
> > +    if (!skeleton)
> > +        return;
> > +
> > +    mm_gdbus_modem3gpp_set_vendor_pco_info (skeleton, NULL);
>
> Same here, I was expecting an empty string "".
>

see above



>
> > +}
> >
> +/*****************************************************************************/
> > +
> > +
> >  void
> >  mm_iface_modem_3gpp_update_access_technologies (MMIfaceModem3gpp *self,
> >                                                  MMModemAccessTechnology
> access_tech)
> > @@ -969,7 +1081,7 @@ mm_iface_modem_3gpp_update_access_technologies
> (MMIfaceModem3gpp *self,
> >       * but only if something valid to report */
> >      if (state == MM_MODEM_3GPP_REGISTRATION_STATE_HOME ||
> >          state == MM_MODEM_3GPP_REGISTRATION_STATE_ROAMING ||
> > -        ctx->reloading_operator) {
> > +        ctx->reloading_registration_info) {
> >          if (access_tech != MM_MODEM_ACCESS_TECHNOLOGY_UNKNOWN)
> >              mm_iface_modem_update_access_technologies (MM_IFACE_MODEM
> (self),
> >                                                         access_tech,
> > @@ -1034,7 +1146,19 @@ update_registration_reload_current_operator_ready
> (MMIfaceModem3gpp *self,
> >
> MM_MODEM_STATE_CHANGE_REASON_UNKNOWN);
> >
> >      ctx = get_registration_state_context (self);
> > -    ctx->reloading_operator = FALSE;
> > +    ctx->reloading_registration_info = FALSE;
> > +}
> > +
> > +static void
> > +update_registration_reload_current_vendor_pco_info_ready
> (MMIfaceModem3gpp *self,
> > +                                                          GAsyncResult
> *res,
> > +                                                          gpointer
> user_data)
> > +{
> > +    mm_iface_modem_3gpp_reload_current_operator (
> > +        self,
> > +
>  (GAsyncReadyCallback)update_registration_reload_current_operator_ready,
> > +        user_data);
> > +
> >  }
> >
> >  static void
> > @@ -1044,6 +1168,7 @@ update_non_registered_state (MMIfaceModem3gpp
> *self,
> >  {
> >      /* Not registered neither in home nor roaming network */
> >      mm_iface_modem_3gpp_clear_current_operator (self);
> > +    mm_iface_modem_3gpp_clear_current_vendor_pco_info(self);
>
> Whitespace before parenthesis needed.
>

done


> >
> >      /* The property in the interface is bound to the property
> >       * in the skeleton, so just updating here is enough */
> > @@ -1081,20 +1206,20 @@ update_registration_state (MMIfaceModem3gpp
> *self,
> >
> >      if (new_state == MM_MODEM_3GPP_REGISTRATION_STATE_HOME ||
> >          new_state == MM_MODEM_3GPP_REGISTRATION_STATE_ROAMING) {
> > -        /* If already reloading operator, skip it */
> > -        if (ctx->reloading_operator)
> > +        /* If already reloading registration info, skip it */
> > +        if (ctx->reloading_registration_info)
> >              return;
> >
> >          mm_info ("Modem %s: 3GPP Registration state changed (%s ->
> registering)",
> >                   g_dbus_object_get_object_path (G_DBUS_OBJECT (self)),
> >                   mm_modem_3gpp_registration_state_get_string
> (old_state));
> >
> > -        /* Reload current operator. ONLY update the state to REGISTERED
> after
> > -         * having loaded operator code/name */
> > -        ctx->reloading_operator = TRUE;
> > -        mm_iface_modem_3gpp_reload_current_operator (
> > +        /* Reload current registration info - vendor PCO info and
> operator.
> > +         * ONLY update the state to REGISTERED after having loaded
> operator code/name */
> > +        ctx->reloading_registration_info = TRUE;
> > +        mm_iface_modem_3gpp_reload_current_vendor_pco_info (
> >              self,
> > -
>  (GAsyncReadyCallback)update_registration_reload_current_operator_ready,
> > +
>  (GAsyncReadyCallback)update_registration_reload_current_vendor_pco_info_ready,
> >              GUINT_TO_POINTER (new_state));
>
> Instead of chaining the PCO update and the current operator info update
>
>  with separate calls; just include within reload_current_operator() the
>
> logic to update the PCO info in addition to operator code and such. If
>
> the PCO should be updated whenever operator changes, you'll better
> handle that directly inside reload_current_öperator().
>

i wanted to seperate the two
since mm_iface_modem_3gpp_reload_current_vendor_pco_info() is called
from connect_3gpp_ready() and there
is no need to update the operator at the stage.


>
>
> >          return;
> >      }
> > diff --git a/src/mm-iface-modem-3gpp.h b/src/mm-iface-modem-3gpp.h
> > index f4014c4..79342e6 100644
> > --- a/src/mm-iface-modem-3gpp.h
> > +++ b/src/mm-iface-modem-3gpp.h
> > @@ -34,6 +34,7 @@
> >  #define MM_IFACE_MODEM_3GPP_PS_NETWORK_SUPPORTED
>  "iface-modem-3gpp-ps-network-supported"
> >  #define MM_IFACE_MODEM_3GPP_EPS_NETWORK_SUPPORTED
> "iface-modem-3gpp-eps-network-supported"
> >  #define MM_IFACE_MODEM_3GPP_IGNORED_FACILITY_LOCKS
>  "iface-modem-3gpp-ignored-facility-locks"
> > +#define MM_IFACE_MODEM_3GPP_VENDOR_PCO_INFO
> "iface-modem-3gpp-vendor-pco-info"
> >
> >  #define MM_IFACE_MODEM_3GPP_ALL_ACCESS_TECHNOLOGIES_MASK    \
> >      (MM_MODEM_ACCESS_TECHNOLOGY_GSM |                       \
> > @@ -176,6 +177,14 @@ struct _MMIfaceModem3gpp {
> >                                            GAsyncResult *res,
> >                                            GError **error);
> >
> > +    /* Loading of the Vendor PCO Info property */
> > +    void (*load_vendor_pco_info) (MMIfaceModem3gpp *self,
> > +                                  GAsyncReadyCallback callback,
> > +                                  gpointer user_data);
> > +    gchar * (*load_vendor_pco_info_finish) (MMIfaceModem3gpp *self,
> > +                                            GAsyncResult *res,
> > +                                            GError **error);
> > +
> >      /* Scan current networks, expect a GList of MMModem3gppNetworkInfo
> */
> >      void (* scan_networks) (MMIfaceModem3gpp *self,
> >                              GAsyncReadyCallback callback,
> > @@ -249,6 +258,15 @@ gboolean
> mm_iface_modem_3gpp_reload_current_operator_finish (MMIfaceModem3gpp *s
> >                                                               GError
> **error);
> >  void     mm_iface_modem_3gpp_clear_current_operator
> (MMIfaceModem3gpp *self);
> >
> > +/* Request to reload vendor PCO info */
> > +void     mm_iface_modem_3gpp_reload_current_vendor_pco_info
>  (MMIfaceModem3gpp *self,
> > +
>  GAsyncReadyCallback callback,
> > +
>  gpointer user_data);
> > +gboolean mm_iface_modem_3gpp_reload_current_vendor_pco_info_finish
> (MMIfaceModem3gpp *self,
> > +
>  GAsyncResult *res,
> > +
>  GError **error);
> > +void     mm_iface_modem_3gpp_clear_current_vendor_pco_info
> (MMIfaceModem3gpp *self);
> > +
>
> When is 'clear_current_vendor_pco_info()' used? Didn't see any use of it.
>

in update_non_registered_state()
see above.



> >  /* Allow registering in the network */
> >  gboolean mm_iface_modem_3gpp_register_in_network_finish
> (MMIfaceModem3gpp *self,
> >                                                           GAsyncResult
> *res,
> >
>
>
> --
> Aleksander
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/modemmanager-devel/attachments/20130710/6a909e24/attachment-0001.html>


More information about the ModemManager-devel mailing list