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

Aleksander Morgado aleksander at lanedo.com
Tue Sep 3 10:35:45 PDT 2013


Hey Ori,

> 
> hello Aleksander.
> i will post a new patch today.


Did I miss that patch? Don't have it in my inbox.

Cheers!



> please see my comments below
> 
> 
> On Tue, Jul 2, 2013 at 1:33 AM, Aleksander Morgado
> <aleksander at lanedo.com <mailto: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
>     <mailto: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
> 
> 
> 
> 
> _______________________________________________
> ModemManager-devel mailing list
> ModemManager-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/modemmanager-devel
> 


-- 
Aleksander


More information about the ModemManager-devel mailing list