iface-modem-simple: don't launch band/mode updates unless explicitly required
This commit is contained in:
@@ -33,6 +33,7 @@ struct _MMSimpleConnectPropertiesPrivate {
|
||||
/* Operator ID */
|
||||
gchar *operator_id;
|
||||
/* Bands */
|
||||
gboolean bands_set;
|
||||
MMModemBand *bands;
|
||||
guint n_bands;
|
||||
/* Modes */
|
||||
@@ -78,6 +79,7 @@ mm_simple_connect_properties_set_bands (MMSimpleConnectProperties *self,
|
||||
memcpy (self->priv->bands,
|
||||
bands,
|
||||
sizeof (MMModemBand) * self->priv->n_bands);
|
||||
self->priv->bands_set = TRUE;
|
||||
}
|
||||
|
||||
void
|
||||
@@ -178,30 +180,40 @@ mm_simple_connect_properties_get_operator_id (MMSimpleConnectProperties *self)
|
||||
return self->priv->operator_id;
|
||||
}
|
||||
|
||||
void
|
||||
gboolean
|
||||
mm_simple_connect_properties_get_bands (MMSimpleConnectProperties *self,
|
||||
const MMModemBand **bands,
|
||||
guint *n_bands)
|
||||
{
|
||||
g_return_if_fail (MM_IS_SIMPLE_CONNECT_PROPERTIES (self));
|
||||
g_return_if_fail (bands != NULL);
|
||||
g_return_if_fail (n_bands != NULL);
|
||||
g_return_val_if_fail (MM_IS_SIMPLE_CONNECT_PROPERTIES (self), FALSE);
|
||||
g_return_val_if_fail (bands != NULL, FALSE);
|
||||
g_return_val_if_fail (n_bands != NULL, FALSE);
|
||||
|
||||
*bands = self->priv->bands;
|
||||
*n_bands = self->priv->n_bands;
|
||||
if (self->priv->bands_set) {
|
||||
*bands = self->priv->bands;
|
||||
*n_bands = self->priv->n_bands;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void
|
||||
gboolean
|
||||
mm_simple_connect_properties_get_allowed_modes (MMSimpleConnectProperties *self,
|
||||
MMModemMode *allowed,
|
||||
MMModemMode *preferred)
|
||||
{
|
||||
g_return_if_fail (MM_IS_SIMPLE_CONNECT_PROPERTIES (self));
|
||||
g_return_if_fail (allowed != NULL);
|
||||
g_return_if_fail (preferred != NULL);
|
||||
g_return_val_if_fail (MM_IS_SIMPLE_CONNECT_PROPERTIES (self), FALSE);
|
||||
g_return_val_if_fail (allowed != NULL, FALSE);
|
||||
g_return_val_if_fail (preferred != NULL, FALSE);
|
||||
|
||||
*allowed = self->priv->allowed_modes;
|
||||
*preferred = self->priv->preferred_mode;
|
||||
if (self->priv->allowed_modes_set) {
|
||||
*allowed = self->priv->allowed_modes;
|
||||
*preferred = self->priv->preferred_mode;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
const gchar *
|
||||
@@ -542,7 +554,7 @@ mm_simple_connect_properties_init (MMSimpleConnectProperties *self)
|
||||
self->priv->allowed_modes = MM_MODEM_MODE_ANY;
|
||||
self->priv->preferred_mode = MM_MODEM_MODE_NONE;
|
||||
self->priv->bands = g_new (MMModemBand, 1);
|
||||
self->priv->bands[0] = MM_MODEM_BAND_ANY;
|
||||
self->priv->bands[0] = MM_MODEM_BAND_UNKNOWN;
|
||||
self->priv->n_bands = 1;
|
||||
}
|
||||
|
||||
|
||||
@@ -76,10 +76,10 @@ void mm_simple_connect_properties_set_number (MMSimpleConnectProperties *
|
||||
|
||||
const gchar *mm_simple_connect_properties_get_pin (MMSimpleConnectProperties *properties);
|
||||
const gchar *mm_simple_connect_properties_get_operator_id (MMSimpleConnectProperties *properties);
|
||||
void mm_simple_connect_properties_get_bands (MMSimpleConnectProperties *properties,
|
||||
gboolean mm_simple_connect_properties_get_bands (MMSimpleConnectProperties *properties,
|
||||
const MMModemBand **bands,
|
||||
guint *n_bands);
|
||||
void mm_simple_connect_properties_get_allowed_modes (MMSimpleConnectProperties *properties,
|
||||
gboolean mm_simple_connect_properties_get_allowed_modes (MMSimpleConnectProperties *properties,
|
||||
MMModemMode *allowed,
|
||||
MMModemMode *preferred);
|
||||
const gchar *mm_simple_connect_properties_get_apn (MMSimpleConnectProperties *properties);
|
||||
|
||||
+33
-23
@@ -522,40 +522,50 @@ connection_step (ConnectionContext *ctx)
|
||||
mm_info ("Simple connect state (%d/%d): Allowed mode",
|
||||
ctx->step, CONNECTION_STEP_LAST);
|
||||
|
||||
mm_simple_connect_properties_get_allowed_modes (ctx->properties,
|
||||
&allowed_modes,
|
||||
&preferred_mode);
|
||||
mm_iface_modem_set_allowed_modes (MM_IFACE_MODEM (ctx->self),
|
||||
allowed_modes,
|
||||
preferred_mode,
|
||||
(GAsyncReadyCallback)set_allowed_modes_ready,
|
||||
ctx);
|
||||
return;
|
||||
/* Don't set modes unless explicitly requested to do so */
|
||||
if (mm_simple_connect_properties_get_allowed_modes (ctx->properties,
|
||||
&allowed_modes,
|
||||
&preferred_mode)) {
|
||||
mm_iface_modem_set_allowed_modes (MM_IFACE_MODEM (ctx->self),
|
||||
allowed_modes,
|
||||
preferred_mode,
|
||||
(GAsyncReadyCallback)set_allowed_modes_ready,
|
||||
ctx);
|
||||
return;
|
||||
}
|
||||
|
||||
/* Fall down to next step */
|
||||
ctx->step++;
|
||||
}
|
||||
|
||||
case CONNECTION_STEP_BANDS: {
|
||||
GArray *array;
|
||||
const MMModemBand *bands = NULL;
|
||||
guint n_bands = 0;
|
||||
guint i;
|
||||
|
||||
mm_info ("Simple connect state (%d/%d): Bands",
|
||||
ctx->step, CONNECTION_STEP_LAST);
|
||||
|
||||
mm_simple_connect_properties_get_bands (ctx->properties,
|
||||
&bands,
|
||||
&n_bands);
|
||||
/* Don't set bands unless explicitly requested to do so */
|
||||
if (mm_simple_connect_properties_get_bands (ctx->properties,
|
||||
&bands,
|
||||
&n_bands)) {
|
||||
GArray *array;
|
||||
guint i;
|
||||
|
||||
array = g_array_sized_new (FALSE, FALSE, sizeof (MMModemBand), n_bands);
|
||||
for (i = 0; i < n_bands; i++)
|
||||
g_array_insert_val (array, i, bands[i]);
|
||||
array = g_array_sized_new (FALSE, FALSE, sizeof (MMModemBand), n_bands);
|
||||
for (i = 0; i < n_bands; i++)
|
||||
g_array_insert_val (array, i, bands[i]);
|
||||
|
||||
mm_iface_modem_set_bands (MM_IFACE_MODEM (ctx->self),
|
||||
array,
|
||||
(GAsyncReadyCallback)set_bands_ready,
|
||||
ctx);
|
||||
g_array_unref (array);
|
||||
return;
|
||||
mm_iface_modem_set_bands (MM_IFACE_MODEM (ctx->self),
|
||||
array,
|
||||
(GAsyncReadyCallback)set_bands_ready,
|
||||
ctx);
|
||||
g_array_unref (array);
|
||||
return;
|
||||
}
|
||||
|
||||
/* Fall down to next step */
|
||||
ctx->step++;
|
||||
}
|
||||
|
||||
case CONNECTION_STEP_REGISTER:
|
||||
|
||||
Reference in New Issue
Block a user