base-sim: allow disabling CPOL based preferred networks features
This commit is contained in:
@@ -964,6 +964,26 @@ handle_send_puk (MMBaseSim *self,
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/* Check if preferred networks is supported.
|
||||||
|
*
|
||||||
|
* Modems like the Intel-based EM7345 fail very badly when CPOL? is run, even
|
||||||
|
* completely blocking the AT port after that. We need to avoid running any
|
||||||
|
* CPOL related command in these modules.
|
||||||
|
*/
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
check_preferred_networks_disabled (MMBaseSim *self)
|
||||||
|
{
|
||||||
|
MMPort *primary;
|
||||||
|
|
||||||
|
primary = MM_PORT (mm_base_modem_peek_port_primary (self->priv->modem));
|
||||||
|
return (primary ?
|
||||||
|
mm_kernel_device_get_global_property_as_boolean (mm_port_peek_kernel_device (primary),
|
||||||
|
"ID_MM_PREFERRED_NETWORKS_CPOL_DISABLED") :
|
||||||
|
FALSE);
|
||||||
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/* SET PREFERRED NETWORKS (Generic implementation) */
|
/* SET PREFERRED NETWORKS (Generic implementation) */
|
||||||
|
|
||||||
@@ -1374,10 +1394,17 @@ set_preferred_networks (MMBaseSim *self,
|
|||||||
GTask *task;
|
GTask *task;
|
||||||
SetPreferredNetworksContext *ctx;
|
SetPreferredNetworksContext *ctx;
|
||||||
|
|
||||||
mm_obj_dbg (self, "set preferred networks: loading existing networks...");
|
|
||||||
|
|
||||||
task = g_task_new (self, NULL, callback, user_data);
|
task = g_task_new (self, NULL, callback, user_data);
|
||||||
|
|
||||||
|
if (check_preferred_networks_disabled (self)) {
|
||||||
|
g_task_return_new_error (task, MM_CORE_ERROR, MM_CORE_ERROR_UNSUPPORTED,
|
||||||
|
"setting preferred networks is unsupported");
|
||||||
|
g_object_unref (task);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
mm_obj_dbg (self, "set preferred networks: loading existing networks...");
|
||||||
|
|
||||||
ctx = g_slice_new0 (SetPreferredNetworksContext);
|
ctx = g_slice_new0 (SetPreferredNetworksContext);
|
||||||
ctx->set_list = mm_sim_preferred_network_list_copy (preferred_network_list);
|
ctx->set_list = mm_sim_preferred_network_list_copy (preferred_network_list);
|
||||||
ctx->clear_index = g_array_new (FALSE, TRUE, sizeof (guint));
|
ctx->clear_index = g_array_new (FALSE, TRUE, sizeof (guint));
|
||||||
@@ -1822,6 +1849,17 @@ load_preferred_networks (MMBaseSim *self,
|
|||||||
GAsyncReadyCallback callback,
|
GAsyncReadyCallback callback,
|
||||||
gpointer user_data)
|
gpointer user_data)
|
||||||
{
|
{
|
||||||
|
GTask *task;
|
||||||
|
|
||||||
|
task = g_task_new (self, NULL, callback, user_data);
|
||||||
|
|
||||||
|
if (check_preferred_networks_disabled (self)) {
|
||||||
|
g_task_return_new_error (task, MM_CORE_ERROR, MM_CORE_ERROR_UNSUPPORTED,
|
||||||
|
"setting preferred networks is unsupported");
|
||||||
|
g_object_unref (task);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
/* Invoke AT+CPLS=0 first to make sure the correct (user-defined) preferred network list is selected */
|
/* Invoke AT+CPLS=0 first to make sure the correct (user-defined) preferred network list is selected */
|
||||||
mm_obj_dbg (self, "selecting user-defined preferred network list...");
|
mm_obj_dbg (self, "selecting user-defined preferred network list...");
|
||||||
|
|
||||||
@@ -1831,7 +1869,7 @@ load_preferred_networks (MMBaseSim *self,
|
|||||||
20,
|
20,
|
||||||
FALSE,
|
FALSE,
|
||||||
(GAsyncReadyCallback)load_preferred_networks_cpls_command_ready,
|
(GAsyncReadyCallback)load_preferred_networks_cpls_command_ready,
|
||||||
g_task_new (self, NULL, callback, user_data));
|
task);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
Reference in New Issue
Block a user