diff options
-rw-r--r-- | libmm-glib/mm-modem.c | 91 | ||||
-rw-r--r-- | libmm-glib/mm-modem.h | 11 |
2 files changed, 102 insertions, 0 deletions
diff --git a/libmm-glib/mm-modem.c b/libmm-glib/mm-modem.c index ebc42c6e..68e739c9 100644 --- a/libmm-glib/mm-modem.c +++ b/libmm-glib/mm-modem.c @@ -1213,3 +1213,94 @@ mm_modem_set_allowed_bands_sync (MMModem *self, cancellable, error)); } + +static void +modem_get_sim_ready (GDBusConnection *connection, + GAsyncResult *res, + GSimpleAsyncResult *simple) +{ + GError *error = NULL; + MMSim *sim; + + sim = mm_gdbus_sim_proxy_new_finish (res, &error); + if (error) + g_simple_async_result_take_error (simple, error); + else + g_simple_async_result_set_op_res_gpointer (simple, sim, NULL); + + g_simple_async_result_complete (simple); + g_object_unref (simple); +} + +void +mm_modem_get_sim (MMModem *self, + GCancellable *cancellable, + GAsyncReadyCallback callback, + gpointer user_data) +{ + GSimpleAsyncResult *result; + const gchar *sim_path; + + g_return_if_fail (MM_GDBUS_IS_OBJECT (self)); + + result = g_simple_async_result_new (G_OBJECT (self), + callback, + user_data, + mm_modem_get_sim); + + sim_path = mm_modem_get_sim_path (self); + if (!sim_path) { + g_simple_async_result_set_op_res_gpointer (result, NULL, NULL); + g_simple_async_result_complete_in_idle (result); + g_object_unref (result); + return; + } + + mm_gdbus_sim_proxy_new ( + g_dbus_object_proxy_get_connection ( + G_DBUS_OBJECT_PROXY ( + mm_gdbus_object_peek_modem (MM_GDBUS_OBJECT (self)))), + G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START, + MM_DBUS_SERVICE, + sim_path, + cancellable, + (GAsyncReadyCallback)modem_get_sim_ready, + result); +} + +MMSim * +mm_modem_get_sim_finish (MMModem *self, + GAsyncResult *res, + GError **error) +{ + g_return_val_if_fail (MM_GDBUS_IS_OBJECT (self), NULL); + + if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (res), error)) + return NULL; + + return g_simple_async_result_get_op_res_gpointer (G_SIMPLE_ASYNC_RESULT (res)); +} + +MMSim * +mm_modem_get_sim_sync (MMModem *self, + GCancellable *cancellable, + GError **error) +{ + const gchar *sim_path; + + g_return_val_if_fail (MM_GDBUS_IS_OBJECT (self), NULL); + + sim_path = mm_modem_get_sim_path (self); + if (!sim_path) + return NULL; + + return (mm_gdbus_sim_proxy_new_sync ( + g_dbus_object_proxy_get_connection ( + G_DBUS_OBJECT_PROXY ( + mm_gdbus_object_peek_modem (MM_GDBUS_OBJECT (self)))), + G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START, + MM_DBUS_SERVICE, + sim_path, + cancellable, + error)); +} diff --git a/libmm-glib/mm-modem.h b/libmm-glib/mm-modem.h index ce853b66..56db03cd 100644 --- a/libmm-glib/mm-modem.h +++ b/libmm-glib/mm-modem.h @@ -172,6 +172,17 @@ gboolean mm_modem_set_allowed_bands_sync (MMModem *self, GCancellable *cancellable, GError **error); +void mm_modem_get_sim (MMModem *self, + GCancellable *cancellable, + GAsyncReadyCallback callback, + gpointer user_data); +MMSim *mm_modem_get_sim_finish (MMModem *self, + GAsyncResult *res, + GError **error); +MMSim *mm_modem_get_sim_sync (MMModem *self, + GCancellable *cancellable, + GError **error); + G_END_DECLS #endif /* _MM_MODEM_H_ */ |