aboutsummaryrefslogtreecommitdiff
path: root/src/mm-sim-qmi.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mm-sim-qmi.c')
-rw-r--r--src/mm-sim-qmi.c109
1 files changed, 61 insertions, 48 deletions
diff --git a/src/mm-sim-qmi.c b/src/mm-sim-qmi.c
index ea9f2a77..d8e1c82d 100644
--- a/src/mm-sim-qmi.c
+++ b/src/mm-sim-qmi.c
@@ -30,6 +30,14 @@
G_DEFINE_TYPE (MMSimQmi, mm_sim_qmi, MM_TYPE_BASE_SIM)
+enum {
+ PROP_0,
+ PROP_DMS_UIM_DEPRECATED,
+ PROP_LAST
+};
+
+static GParamSpec *properties[PROP_LAST];
+
struct _MMSimQmiPrivate {
gboolean dms_uim_deprecated;
};
@@ -481,17 +489,6 @@ dms_uim_verify_pin_ready (QmiClientDms *client,
g_prefix_error (&error, "QMI operation failed: ");
g_task_return_error (task, error);
} else if (!qmi_message_dms_uim_verify_pin_output_get_result (output, &error)) {
- /* DMS UIM deprecated? */
- if (g_error_matches (error,
- QMI_PROTOCOL_ERROR,
- QMI_PROTOCOL_ERROR_INVALID_QMI_COMMAND)) {
- g_error_free (error);
- qmi_message_dms_uim_verify_pin_output_unref (output);
- /* Flag as deprecated and try with UIM */
- self->priv->dms_uim_deprecated = TRUE;
- uim_verify_pin (self, task);
- return;
- }
g_prefix_error (&error, "Couldn't verify PIN: ");
g_task_return_error (task, pin_qmi_error_to_mobile_equipment_error (error));
} else
@@ -654,17 +651,6 @@ dms_uim_unblock_pin_ready (QmiClientDms *client,
g_prefix_error (&error, "QMI operation failed: ");
g_task_return_error (task, error);
} else if (!qmi_message_dms_uim_unblock_pin_output_get_result (output, &error)) {
- /* DMS UIM deprecated? */
- if (g_error_matches (error,
- QMI_PROTOCOL_ERROR,
- QMI_PROTOCOL_ERROR_INVALID_QMI_COMMAND)) {
- g_error_free (error);
- qmi_message_dms_uim_unblock_pin_output_unref (output);
- /* Flag as deprecated and try with UIM */
- self->priv->dms_uim_deprecated = TRUE;
- uim_unblock_pin (self, task);
- return;
- }
g_prefix_error (&error, "Couldn't unblock PIN: ");
g_task_return_error (task, pin_qmi_error_to_mobile_equipment_error (error));
} else
@@ -835,17 +821,6 @@ dms_uim_change_pin_ready (QmiClientDms *client,
g_prefix_error (&error, "QMI operation failed: ");
g_task_return_error (task, error);
} else if (!qmi_message_dms_uim_change_pin_output_get_result (output, &error)) {
- /* DMS UIM deprecated? */
- if (g_error_matches (error,
- QMI_PROTOCOL_ERROR,
- QMI_PROTOCOL_ERROR_INVALID_QMI_COMMAND)) {
- g_error_free (error);
- qmi_message_dms_uim_change_pin_output_unref (output);
- /* Flag as deprecated and try with UIM */
- self->priv->dms_uim_deprecated = TRUE;
- uim_change_pin (self, task);
- return;
- }
g_prefix_error (&error, "Couldn't change PIN: ");
g_task_return_error (task, pin_qmi_error_to_mobile_equipment_error (error));
} else
@@ -1015,17 +990,6 @@ dms_uim_set_pin_protection_ready (QmiClientDms *client,
g_prefix_error (&error, "QMI operation failed: ");
g_task_return_error (task, error);
} else if (!qmi_message_dms_uim_set_pin_protection_output_get_result (output, &error)) {
- /* DMS UIM deprecated? */
- if (g_error_matches (error,
- QMI_PROTOCOL_ERROR,
- QMI_PROTOCOL_ERROR_INVALID_QMI_COMMAND)) {
- g_error_free (error);
- qmi_message_dms_uim_set_pin_protection_output_unref (output);
- /* Flag as deprecated and try with UIM */
- self->priv->dms_uim_deprecated = TRUE;
- uim_enable_pin (self, task);
- return;
- }
g_prefix_error (&error, "Couldn't enable PIN: ");
g_task_return_error (task, pin_qmi_error_to_mobile_equipment_error (error));
} else
@@ -1120,10 +1084,11 @@ mm_sim_qmi_new_finish (GAsyncResult *res,
}
void
-mm_sim_qmi_new (MMBaseModem *modem,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data)
+mm_sim_qmi_new (MMBaseModem *modem,
+ gboolean dms_uim_deprecated,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
{
g_async_initable_new_async (MM_TYPE_SIM_QMI,
G_PRIORITY_DEFAULT,
@@ -1131,6 +1096,7 @@ mm_sim_qmi_new (MMBaseModem *modem,
callback,
user_data,
MM_BASE_SIM_MODEM, modem,
+ MM_SIM_QMI_DMS_UIM_DEPRECATED, dms_uim_deprecated,
NULL);
}
@@ -1144,6 +1110,42 @@ mm_sim_qmi_init (MMSimQmi *self)
}
static void
+set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ MMSimQmi *self = MM_SIM_QMI (object);
+
+ switch (prop_id) {
+ case PROP_DMS_UIM_DEPRECATED:
+ self->priv->dms_uim_deprecated = g_value_get_boolean (value);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ MMSimQmi *self = MM_SIM_QMI (object);
+
+ switch (prop_id) {
+ case PROP_DMS_UIM_DEPRECATED:
+ g_value_set_boolean (value, self->priv->dms_uim_deprecated);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
mm_sim_qmi_class_init (MMSimQmiClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
@@ -1151,6 +1153,9 @@ mm_sim_qmi_class_init (MMSimQmiClass *klass)
g_type_class_add_private (object_class, sizeof (MMSimQmiPrivate));
+ object_class->get_property = get_property;
+ object_class->set_property = set_property;
+
base_sim_class->load_sim_identifier = load_sim_identifier;
base_sim_class->load_sim_identifier_finish = load_sim_identifier_finish;
base_sim_class->load_imsi = load_imsi;
@@ -1167,4 +1172,12 @@ mm_sim_qmi_class_init (MMSimQmiClass *klass)
base_sim_class->change_pin_finish = change_pin_finish;
base_sim_class->enable_pin = enable_pin;
base_sim_class->enable_pin_finish = enable_pin_finish;
+
+ properties[PROP_DMS_UIM_DEPRECATED] =
+ g_param_spec_boolean (MM_SIM_QMI_DMS_UIM_DEPRECATED,
+ "DMS UIM deprecated",
+ "Whether DMS UIM commands should be skipped",
+ FALSE,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY);
+ g_object_class_install_property (object_class, PROP_DMS_UIM_DEPRECATED, properties[PROP_DMS_UIM_DEPRECATED]);
}