summaryrefslogtreecommitdiff
path: root/libmm-glib/mm-manager.c
diff options
context:
space:
mode:
Diffstat (limited to 'libmm-glib/mm-manager.c')
-rw-r--r--libmm-glib/mm-manager.c640
1 files changed, 544 insertions, 96 deletions
diff --git a/libmm-glib/mm-manager.c b/libmm-glib/mm-manager.c
index 8275f791..1100b2d9 100644
--- a/libmm-glib/mm-manager.c
+++ b/libmm-glib/mm-manager.c
@@ -17,14 +17,14 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * Copyright (C) 2011 - 2012 Aleksander Morgado <aleksander@gnu.org>
* Copyright (C) 2011 - 2012 Google, Inc.
- *
- * Author: Aleksander Morgado <aleksander@lanedo.com>
+ * Copyright (C) 2011 - 2018 Aleksander Morgado <aleksander@aleksander.es>
*/
#include <ModemManager.h>
+#include "mm-helpers.h"
+#include "mm-common-helpers.h"
#include "mm-errors-types.h"
#include "mm-gdbus-manager.h"
#include "mm-manager.h"
@@ -66,18 +66,20 @@ get_proxy_type (GDBusObjectManagerClient *manager,
if (g_once_init_enter (&once_init_value)) {
lookup_hash = g_hash_table_new (g_str_hash, g_str_equal);
- g_hash_table_insert (lookup_hash, "org.freedesktop.ModemManager1.Modem", GSIZE_TO_POINTER (MM_TYPE_MODEM));
- g_hash_table_insert (lookup_hash, "org.freedesktop.ModemManager1.Modem.Messaging", GSIZE_TO_POINTER (MM_TYPE_MODEM_MESSAGING));
- g_hash_table_insert (lookup_hash, "org.freedesktop.ModemManager1.Modem.Location", GSIZE_TO_POINTER (MM_TYPE_MODEM_LOCATION));
- g_hash_table_insert (lookup_hash, "org.freedesktop.ModemManager1.Modem.Time", GSIZE_TO_POINTER (MM_TYPE_MODEM_TIME));
- g_hash_table_insert (lookup_hash, "org.freedesktop.ModemManager1.Modem.Signal", GSIZE_TO_POINTER (MM_TYPE_MODEM_SIGNAL));
- g_hash_table_insert (lookup_hash, "org.freedesktop.ModemManager1.Modem.Firmware", GSIZE_TO_POINTER (MM_TYPE_MODEM_FIRMWARE));
- g_hash_table_insert (lookup_hash, "org.freedesktop.ModemManager1.Modem.Oma", GSIZE_TO_POINTER (MM_TYPE_MODEM_OMA));
- g_hash_table_insert (lookup_hash, "org.freedesktop.ModemManager1.Modem.ModemCdma", GSIZE_TO_POINTER (MM_TYPE_MODEM_CDMA));
- g_hash_table_insert (lookup_hash, "org.freedesktop.ModemManager1.Modem.Modem3gpp", GSIZE_TO_POINTER (MM_TYPE_MODEM_3GPP));
- g_hash_table_insert (lookup_hash, "org.freedesktop.ModemManager1.Modem.Modem3gpp.Ussd", GSIZE_TO_POINTER (MM_TYPE_MODEM_3GPP_USSD));
- g_hash_table_insert (lookup_hash, "org.freedesktop.ModemManager1.Modem.Simple", GSIZE_TO_POINTER (MM_TYPE_MODEM_SIMPLE));
- /* g_hash_table_insert (lookup_hash, "org.freedesktop.ModemManager1.Modem.Contacts", GSIZE_TO_POINTER (MM_GDBUS_TYPE_MODEM_CONTACTS_PROXY)); */
+ g_hash_table_insert (lookup_hash, (gpointer) "org.freedesktop.ModemManager1.Modem", GSIZE_TO_POINTER (MM_TYPE_MODEM));
+ g_hash_table_insert (lookup_hash, (gpointer) "org.freedesktop.ModemManager1.Modem.Messaging", GSIZE_TO_POINTER (MM_TYPE_MODEM_MESSAGING));
+ g_hash_table_insert (lookup_hash, (gpointer) "org.freedesktop.ModemManager1.Modem.Voice", GSIZE_TO_POINTER (MM_TYPE_MODEM_VOICE));
+ g_hash_table_insert (lookup_hash, (gpointer) "org.freedesktop.ModemManager1.Modem.Location", GSIZE_TO_POINTER (MM_TYPE_MODEM_LOCATION));
+ g_hash_table_insert (lookup_hash, (gpointer) "org.freedesktop.ModemManager1.Modem.Time", GSIZE_TO_POINTER (MM_TYPE_MODEM_TIME));
+ g_hash_table_insert (lookup_hash, (gpointer) "org.freedesktop.ModemManager1.Modem.Sar", GSIZE_TO_POINTER (MM_TYPE_MODEM_SAR));
+ g_hash_table_insert (lookup_hash, (gpointer) "org.freedesktop.ModemManager1.Modem.Signal", GSIZE_TO_POINTER (MM_TYPE_MODEM_SIGNAL));
+ g_hash_table_insert (lookup_hash, (gpointer) "org.freedesktop.ModemManager1.Modem.Firmware", GSIZE_TO_POINTER (MM_TYPE_MODEM_FIRMWARE));
+ g_hash_table_insert (lookup_hash, (gpointer) "org.freedesktop.ModemManager1.Modem.Oma", GSIZE_TO_POINTER (MM_TYPE_MODEM_OMA));
+ g_hash_table_insert (lookup_hash, (gpointer) "org.freedesktop.ModemManager1.Modem.ModemCdma", GSIZE_TO_POINTER (MM_TYPE_MODEM_CDMA));
+ g_hash_table_insert (lookup_hash, (gpointer) "org.freedesktop.ModemManager1.Modem.Modem3gpp", GSIZE_TO_POINTER (MM_TYPE_MODEM_3GPP));
+ g_hash_table_insert (lookup_hash, (gpointer) "org.freedesktop.ModemManager1.Modem.Modem3gpp.ProfileManager", GSIZE_TO_POINTER (MM_TYPE_MODEM_3GPP_PROFILE_MANAGER));
+ g_hash_table_insert (lookup_hash, (gpointer) "org.freedesktop.ModemManager1.Modem.Modem3gpp.Ussd", GSIZE_TO_POINTER (MM_TYPE_MODEM_3GPP_USSD));
+ g_hash_table_insert (lookup_hash, (gpointer) "org.freedesktop.ModemManager1.Modem.Simple", GSIZE_TO_POINTER (MM_TYPE_MODEM_SIMPLE));
g_once_init_leave (&once_init_value, 1);
}
@@ -89,13 +91,23 @@ get_proxy_type (GDBusObjectManagerClient *manager,
/*****************************************************************************/
+static void
+cleanup_modem_manager1_proxy (MMManager *self)
+{
+ if (self->priv->manager_iface_proxy) {
+ g_signal_handlers_disconnect_by_func (self, cleanup_modem_manager1_proxy, NULL);
+ g_clear_object (&self->priv->manager_iface_proxy);
+ }
+}
+
static gboolean
ensure_modem_manager1_proxy (MMManager *self,
GError **error)
{
gchar *name = NULL;
gchar *object_path = NULL;
- GDBusProxyFlags flags = G_DBUS_PROXY_FLAGS_NONE;
+ GDBusObjectManagerClientFlags obj_manager_flags = G_DBUS_OBJECT_MANAGER_CLIENT_FLAGS_NONE;
+ GDBusProxyFlags proxy_flags = G_DBUS_PROXY_FLAGS_NONE;
GDBusConnection *connection = NULL;
if (self->priv->manager_iface_proxy)
@@ -105,13 +117,16 @@ ensure_modem_manager1_proxy (MMManager *self,
g_object_get (self,
"name", &name,
"object-path", &object_path,
- "flags", &flags,
+ "flags", &obj_manager_flags,
"connection", &connection,
NULL);
+ if (obj_manager_flags & G_DBUS_OBJECT_MANAGER_CLIENT_FLAGS_DO_NOT_AUTO_START)
+ proxy_flags |= G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START;
+
self->priv->manager_iface_proxy =
mm_gdbus_org_freedesktop_modem_manager1_proxy_new_sync (connection,
- flags,
+ proxy_flags,
name,
object_path,
NULL,
@@ -120,6 +135,12 @@ ensure_modem_manager1_proxy (MMManager *self,
g_free (object_path);
g_free (name);
+ if (self->priv->manager_iface_proxy)
+ g_signal_connect (self,
+ "notify::name-owner",
+ G_CALLBACK (cleanup_modem_manager1_proxy),
+ NULL);
+
return !!self->priv->manager_iface_proxy;
}
@@ -127,21 +148,28 @@ ensure_modem_manager1_proxy (MMManager *self,
/**
* mm_manager_new_finish:
- * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to mm_manager_new().
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to
+ * mm_manager_new().
* @error: Return location for error or %NULL
*
* Finishes an operation started with mm_manager_new().
*
- * Returns: (transfer full) (type MMManager): The constructed object manager client or %NULL if @error is set.
+ * Returns: (transfer full) (type MMManager): The constructed object manager
+ * client or %NULL if @error is set.
+ *
+ * Since: 1.0
*/
MMManager *
mm_manager_new_finish (GAsyncResult *res,
GError **error)
{
- GDBusObjectManager *ret;
+ GObject *ret;
+ GObject *source_object;
- ret = mm_gdbus_object_manager_client_new_finish (res, error);
- return (ret ? MM_MANAGER (ret) : NULL);
+ source_object = g_async_result_get_source_object (res);
+ ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error);
+ g_object_unref (source_object);
+ return MM_MANAGER (ret);
}
/**
@@ -160,7 +188,10 @@ mm_manager_new_finish (GAsyncResult *res,
*
* You can then call mm_manager_new_finish() to get the result of the operation.
*
- * See mm_manager_new_sync() for the synchronous, blocking version of this constructor.
+ * See mm_manager_new_sync() for the synchronous, blocking version of this
+ * constructor.
+ *
+ * Since: 1.0
*/
void
mm_manager_new (GDBusConnection *connection,
@@ -195,7 +226,10 @@ mm_manager_new (GDBusConnection *connection,
*
* See mm_manager_new() for the asynchronous version of this constructor.
*
- * Returns: (transfer full) (type MMManager): The constructed object manager client or %NULL if @error is set.
+ * Returns: (transfer full) (type MMManager): The constructed object manager
+ * client or %NULL if @error is set.
+ *
+ * Since: 1.0
*/
MMManager *
mm_manager_new_sync (GDBusConnection *connection,
@@ -203,19 +237,15 @@ mm_manager_new_sync (GDBusConnection *connection,
GCancellable *cancellable,
GError **error)
{
- GInitable *ret;
-
- ret = g_initable_new (MM_TYPE_MANAGER,
- cancellable,
- error,
- "name", MM_DBUS_SERVICE,
- "object-path", MM_DBUS_PATH,
- "flags", flags,
- "connection", connection,
- "get-proxy-type-func", get_proxy_type,
- NULL);
-
- return (ret ? MM_MANAGER (ret) : NULL);
+ return MM_MANAGER (g_initable_new (MM_TYPE_MANAGER,
+ cancellable,
+ error,
+ "name", MM_DBUS_SERVICE,
+ "object-path", MM_DBUS_PATH,
+ "flags", flags,
+ "connection", connection,
+ "get-proxy-type-func", get_proxy_type,
+ NULL));
}
/*****************************************************************************/
@@ -226,7 +256,10 @@ mm_manager_new_sync (GDBusConnection *connection,
*
* Gets the #GDBusProxy interface of the @manager.
*
- * Returns: (transfer none): The #GDBusProxy interface of @manager, or #NULL if none. Do not free the returned object, it is owned by @manager.
+ * Returns: (transfer none): The #GDBusProxy interface of @manager, or #NULL if
+ * none. Do not free the returned object, it is owned by @manager.
+ *
+ * Since: 1.0
*/
GDBusProxy *
mm_manager_peek_proxy (MMManager *manager)
@@ -245,7 +278,10 @@ mm_manager_peek_proxy (MMManager *manager)
*
* Gets the #GDBusProxy interface of the @manager.
*
- * Returns: (transfer full): The #GDBusProxy interface of @manager, or #NULL if none. The returned object must be freed with g_object_unref().
+ * Returns: (transfer full): The #GDBusProxy interface of @manager, or #NULL if
+ * none. The returned object must be freed with g_object_unref().
+ *
+ * Since: 1.0
*/
GDBusProxy *
mm_manager_get_proxy (MMManager *manager)
@@ -261,40 +297,69 @@ mm_manager_get_proxy (MMManager *manager)
/*****************************************************************************/
/**
+ * mm_manager_get_version:
+ * @manager: A #MMManager.
+ *
+ * Gets the ModemManager version, as reported by the daemon.
+ *
+ * It is safe to assume this value never changes during runtime.
+ *
+ * Returns: (transfer none): The version, or %NULL if none available. Do not
+ * free the returned value, it belongs to @self.
+ *
+ * Since: 1.0
+ */
+const gchar *
+mm_manager_get_version (MMManager *manager)
+{
+ g_return_val_if_fail (MM_IS_MANAGER (manager), NULL);
+
+ if (!ensure_modem_manager1_proxy (manager, NULL))
+ return NULL;
+
+ RETURN_NON_EMPTY_CONSTANT_STRING (
+ mm_gdbus_org_freedesktop_modem_manager1_get_version (manager->priv->manager_iface_proxy));
+}
+
+/*****************************************************************************/
+
+/**
* mm_manager_set_logging_finish:
* @manager: A #MMManager.
- * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to mm_manager_set_logging().
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to
+ * mm_manager_set_logging().
* @error: Return location for error or %NULL.
*
* Finishes an operation started with mm_manager_set_logging().
*
- * Returns: %TRUE if the call succeded, %FALSE if @error is set.
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ *
+ * Since: 1.0
*/
gboolean
mm_manager_set_logging_finish (MMManager *manager,
GAsyncResult *res,
GError **error)
{
- return !g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (res), error);
+ return g_task_propagate_boolean (G_TASK (res), error);
}
static void
set_logging_ready (MmGdbusOrgFreedesktopModemManager1 *manager_iface_proxy,
GAsyncResult *res,
- GSimpleAsyncResult *simple)
+ GTask *task)
{
GError *error = NULL;
- if (mm_gdbus_org_freedesktop_modem_manager1_call_set_logging_finish (
+ if (!mm_gdbus_org_freedesktop_modem_manager1_call_set_logging_finish (
manager_iface_proxy,
res,
&error))
- g_simple_async_result_take_error (simple, error);
+ g_task_return_error (task, error);
else
- g_simple_async_result_set_op_res_gboolean (simple, TRUE);
+ g_task_return_boolean (task, TRUE);
- g_simple_async_result_complete (simple);
- g_object_unref (simple);
+ g_object_unref (task);
}
/**
@@ -302,7 +367,8 @@ set_logging_ready (MmGdbusOrgFreedesktopModemManager1 *manager_iface_proxy,
* @manager: A #MMManager.
* @level: the login level to set.
* @cancellable: (allow-none): A #GCancellable or %NULL.
- * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or
+ * %NULL.
* @user_data: User data to pass to @callback.
*
* Asynchronously requests to set the specified logging level in the daemon.
@@ -312,7 +378,10 @@ set_logging_ready (MmGdbusOrgFreedesktopModemManager1 *manager_iface_proxy,
* of the thread you are calling this method from. You can then call
* mm_manager_set_logging_finish() to get the result of the operation.
*
- * See mm_manager_set_logging_sync() for the synchronous, blocking version of this method.
+ * See mm_manager_set_logging_sync() for the synchronous, blocking version of
+ * this method.
+ *
+ * Since: 1.0
*/
void
mm_manager_set_logging (MMManager *manager,
@@ -321,20 +390,16 @@ mm_manager_set_logging (MMManager *manager,
GAsyncReadyCallback callback,
gpointer user_data)
{
- GSimpleAsyncResult *result;
+ GTask *task;
GError *inner_error = NULL;
g_return_if_fail (MM_IS_MANAGER (manager));
- result = g_simple_async_result_new (G_OBJECT (manager),
- callback,
- user_data,
- mm_manager_set_logging);
+ task = g_task_new (manager, cancellable, callback, user_data);
if (!ensure_modem_manager1_proxy (manager, &inner_error)) {
- g_simple_async_result_take_error (result, inner_error);
- g_simple_async_result_complete_in_idle (result);
- g_object_unref (result);
+ g_task_return_error (task, inner_error);
+ g_object_unref (task);
return;
}
@@ -343,7 +408,7 @@ mm_manager_set_logging (MMManager *manager,
level,
cancellable,
(GAsyncReadyCallback)set_logging_ready,
- result);
+ task);
}
/**
@@ -353,13 +418,15 @@ mm_manager_set_logging (MMManager *manager,
* @cancellable: (allow-none): A #GCancellable or %NULL.
* @error: Return location for error or %NULL.
*
- * Synchronously requests to set the specified logging level in the daemon..
+ * Synchronously requests to set the specified logging level in the daemon.
*
* The calling thread is blocked until a reply is received.
*
* See mm_manager_set_logging() for the asynchronous version of this method.
*
- * Returns: %TRUE if the call succeded, %FALSE if @error is set.
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ *
+ * Since: 1.0
*/
gboolean
mm_manager_set_logging_sync (MMManager *manager,
@@ -384,45 +451,48 @@ mm_manager_set_logging_sync (MMManager *manager,
/**
* mm_manager_scan_devices_finish:
* @manager: A #MMManager.
- * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to mm_manager_scan_devices().
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to
+ * mm_manager_scan_devices().
* @error: Return location for error or %NULL.
*
* Finishes an operation started with mm_manager_scan_devices().
*
- * Returns: %TRUE if the call succeded, %FALSE if @error is set.
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ *
+ * Since: 1.0
*/
gboolean
mm_manager_scan_devices_finish (MMManager *manager,
GAsyncResult *res,
GError **error)
{
- return !g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (res), error);
+ return g_task_propagate_boolean (G_TASK (res), error);
}
static void
scan_devices_ready (MmGdbusOrgFreedesktopModemManager1 *manager_iface_proxy,
GAsyncResult *res,
- GSimpleAsyncResult *simple)
+ GTask *task)
{
GError *error = NULL;
- if (mm_gdbus_org_freedesktop_modem_manager1_call_scan_devices_finish (
+ if (!mm_gdbus_org_freedesktop_modem_manager1_call_scan_devices_finish (
manager_iface_proxy,
res,
&error))
- g_simple_async_result_take_error (simple, error);
+ g_task_return_error (task, error);
else
- g_simple_async_result_set_op_res_gboolean (simple, TRUE);
+ g_task_return_boolean (task, TRUE);
- g_simple_async_result_complete (simple);
- g_object_unref (simple);
+ g_object_unref (task);
}
/**
* mm_manager_scan_devices:
* @manager: A #MMManager.
* @cancellable: (allow-none): A #GCancellable or %NULL.
- * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or
+ * %NULL.
* @user_data: User data to pass to @callback.
*
* Asynchronously requests to scan looking for devices.
@@ -432,7 +502,10 @@ scan_devices_ready (MmGdbusOrgFreedesktopModemManager1 *manager_iface_proxy,
* of the thread you are calling this method from. You can then call
* mm_manager_scan_devices_finish() to get the result of the operation.
*
- * See mm_manager_scan_devices_sync() for the synchronous, blocking version of this method.
+ * See mm_manager_scan_devices_sync() for the synchronous, blocking version of
+ * this method.
+ *
+ * Since: 1.0
*/
void
mm_manager_scan_devices (MMManager *manager,
@@ -440,20 +513,16 @@ mm_manager_scan_devices (MMManager *manager,
GAsyncReadyCallback callback,
gpointer user_data)
{
- GSimpleAsyncResult *result;
+ GTask *task;
GError *inner_error = NULL;
g_return_if_fail (MM_IS_MANAGER (manager));
- result = g_simple_async_result_new (G_OBJECT (manager),
- callback,
- user_data,
- mm_manager_scan_devices);
+ task = g_task_new (manager, cancellable, callback, user_data);
if (!ensure_modem_manager1_proxy (manager, &inner_error)) {
- g_simple_async_result_take_error (result, inner_error);
- g_simple_async_result_complete_in_idle (result);
- g_object_unref (result);
+ g_task_return_error (task, inner_error);
+ g_object_unref (task);
return;
}
@@ -461,7 +530,7 @@ mm_manager_scan_devices (MMManager *manager,
manager->priv->manager_iface_proxy,
cancellable,
(GAsyncReadyCallback)scan_devices_ready,
- result);
+ task);
}
/**
@@ -476,7 +545,9 @@ mm_manager_scan_devices (MMManager *manager,
*
* See mm_manager_scan_devices() for the asynchronous version of this method.
*
- * Returns: %TRUE if the call succeded, %FALSE if @error is set.
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ *
+ * Since: 1.0
*/
gboolean
mm_manager_scan_devices_sync (MMManager *manager,
@@ -496,30 +567,407 @@ mm_manager_scan_devices_sync (MMManager *manager,
/*****************************************************************************/
+/**
+ * mm_manager_report_kernel_event_finish:
+ * @manager: A #MMManager.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to
+ * mm_manager_report_kernel_event().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with mm_manager_report_kernel_event().
+ *
+ * Returns: %TRUE if the operation succeeded, %FALSE if @error is set.
+ *
+ * Since: 1.8
+ */
+gboolean
+mm_manager_report_kernel_event_finish (MMManager *manager,
+ GAsyncResult *res,
+ GError **error)
+{
+ return g_task_propagate_boolean (G_TASK (res), error);
+}
+
static void
-register_dbus_errors (void)
+report_kernel_event_ready (MmGdbusOrgFreedesktopModemManager1 *manager_iface_proxy,
+ GAsyncResult *res,
+ GTask *task)
{
- static volatile guint32 aux = 0;
+ GError *error = NULL;
- if (aux)
- return;
+ if (!mm_gdbus_org_freedesktop_modem_manager1_call_report_kernel_event_finish (
+ manager_iface_proxy,
+ res,
+ &error))
+ g_task_return_error (task, error);
+ else
+ g_task_return_boolean (task, TRUE);
+ g_object_unref (task);
+}
- /* Register all known own errors */
- aux |= MM_CORE_ERROR;
- aux |= MM_MOBILE_EQUIPMENT_ERROR;
- aux |= MM_CONNECTION_ERROR;
- aux |= MM_SERIAL_ERROR;
- aux |= MM_MESSAGE_ERROR;
- aux |= MM_CDMA_ACTIVATION_ERROR;
+/**
+ * mm_manager_report_kernel_event:
+ * @manager: A #MMManager.
+ * @properties: the properties of the kernel event.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or
+ * %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously report kernel event.
+ *
+ * When the operation is finished, @callback will be invoked in the
+ * <link linkend="g-main-context-push-thread-default">thread-default main loop</link>
+ * of the thread you are calling this method from. You can then call
+ * mm_manager_report_kernel_event_finish() to get the result of the operation.
+ *
+ * See mm_manager_report_kernel_event_sync() for the synchronous, blocking
+ * version of this method.
+ *
+ * Since: 1.8
+ */
+void
+mm_manager_report_kernel_event (MMManager *manager,
+ MMKernelEventProperties *properties,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ GTask *task;
+ GError *inner_error = NULL;
+ GVariant *dictionary;
+
+ g_return_if_fail (MM_IS_MANAGER (manager));
+
+ task = g_task_new (manager, cancellable, callback, user_data);
+
+ if (!ensure_modem_manager1_proxy (manager, &inner_error)) {
+ g_task_return_error (task, inner_error);
+ g_object_unref (task);
+ return;
+ }
+
+ dictionary = mm_kernel_event_properties_get_dictionary (properties);
+ mm_gdbus_org_freedesktop_modem_manager1_call_report_kernel_event (
+ manager->priv->manager_iface_proxy,
+ dictionary,
+ cancellable,
+ (GAsyncReadyCallback)report_kernel_event_ready,
+ task);
+ g_variant_unref (dictionary);
}
+/**
+ * mm_manager_report_kernel_event_sync:
+ * @manager: A #MMManager.
+ * @properties: the properties of the kernel event.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously report kernel event.
+ *
+ * The calling thread is blocked until a reply is received.
+ *
+ * See mm_manager_report_kernel_event() for the asynchronous version of this
+ * method.
+ *
+ * Returns: %TRUE if the operation succeeded, %FALSE if @error is set.
+ *
+ * Since: 1.8
+ */
+gboolean
+mm_manager_report_kernel_event_sync (MMManager *manager,
+ MMKernelEventProperties *properties,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GVariant *dictionary;
+ gboolean result;
+
+ g_return_val_if_fail (MM_IS_MANAGER (manager), FALSE);
+
+ if (!ensure_modem_manager1_proxy (manager, error))
+ return FALSE;
+
+ dictionary = mm_kernel_event_properties_get_dictionary (properties);
+ result = (mm_gdbus_org_freedesktop_modem_manager1_call_report_kernel_event_sync (
+ manager->priv->manager_iface_proxy,
+ dictionary,
+ cancellable,
+ error));
+ g_variant_unref (dictionary);
+ return result;
+}
+
+/*****************************************************************************/
+
+static gboolean
+common_inhibit_device_finish (MMManager *manager,
+ GAsyncResult *res,
+ GError **error)
+{
+ return g_task_propagate_boolean (G_TASK (res), error);
+}
+
+static void
+inhibit_ready (MmGdbusOrgFreedesktopModemManager1 *manager_iface_proxy,
+ GAsyncResult *res,
+ GTask *task)
+{
+ GError *error = NULL;
+
+ if (!mm_gdbus_org_freedesktop_modem_manager1_call_inhibit_device_finish (manager_iface_proxy, res, &error))
+ g_task_return_error (task, error);
+ else
+ g_task_return_boolean (task, TRUE);
+ g_object_unref (task);
+}
+
+static void
+common_inhibit_device (MMManager *manager,
+ const gchar *uid,
+ gboolean inhibit,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ GTask *task;
+ GError *inner_error = NULL;
+
+ task = g_task_new (manager, cancellable, callback, user_data);
+
+ if (!ensure_modem_manager1_proxy (manager, &inner_error)) {
+ g_task_return_error (task, inner_error);
+ g_object_unref (task);
+ return;
+ }
+
+ mm_gdbus_org_freedesktop_modem_manager1_call_inhibit_device (
+ manager->priv->manager_iface_proxy,
+ uid,
+ inhibit,
+ cancellable,
+ (GAsyncReadyCallback)inhibit_ready,
+ task);
+}
+
+static gboolean
+common_inhibit_device_sync (MMManager *manager,
+ const gchar *uid,
+ gboolean inhibit,
+ GCancellable *cancellable,
+ GError **error)
+{
+ if (!ensure_modem_manager1_proxy (manager, error))
+ return FALSE;
+
+ return (mm_gdbus_org_freedesktop_modem_manager1_call_inhibit_device_sync (
+ manager->priv->manager_iface_proxy,
+ uid,
+ inhibit,
+ cancellable,
+ error));
+}
+
+/**
+ * mm_manager_inhibit_device_finish:
+ * @manager: A #MMManager.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to
+ * mm_manager_inhibit_device().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with mm_manager_inhibit_device().
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ *
+ * Since: 1.10
+ */
+gboolean
+mm_manager_inhibit_device_finish (MMManager *manager,
+ GAsyncResult *res,
+ GError **error)
+{
+ g_return_val_if_fail (MM_IS_MANAGER (manager), FALSE);
+ return common_inhibit_device_finish (manager, res, error);
+}
+
+/**
+ * mm_manager_inhibit_device:
+ * @manager: A #MMManager.
+ * @uid: the unique ID of the physical device.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or
+ * %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously requests to add an inhibition on the device identified by
+ * @uid.
+ *
+ * The @uid must be the unique ID retrieved from an existing #MMModem using
+ * mm_modem_get_device(). The caller should keep track of this @uid and use it
+ * in the mm_manager_uninhibit_device() call when the inhibition is no longer
+ * required.
+ *
+ * The inhibition added with this method may also be automatically removed when
+ * the caller program disappears from the bus (e.g. if the program ends before
+ * having called mm_manager_uninhibit_device() explicitly).
+ *
+ * When the operation is finished, @callback will be invoked in the
+ * <link linkend="g-main-context-push-thread-default">thread-default main loop</link>
+ * of the thread you are calling this method from. You can then call
+ * mm_manager_inhibit_device_finish() to get the result of the operation.
+ *
+ * See mm_manager_inhibit_device_sync() for the synchronous, blocking version of
+ * this method.
+ *
+ * Since: 1.10
+ */
+void
+mm_manager_inhibit_device (MMManager *manager,
+ const gchar *uid,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ g_return_if_fail (MM_IS_MANAGER (manager));
+ common_inhibit_device (manager, uid, TRUE, cancellable, callback, user_data);
+}
+
+/**
+ * mm_manager_inhibit_device_sync:
+ * @manager: A #MMManager.
+ * @uid: the unique ID of the physical device.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously requests to add an inhibition on the device identified by @uid.
+ *
+ * The @uid must be the unique ID retrieved from an existing #MMModem using
+ * mm_modem_get_device(). The caller should keep track of this @uid and use it
+ * in the mm_manager_uninhibit_device_sync() call when the inhibition is no
+ * longer required.
+ *
+ * The inhibition added with this method may also be automatically removed when
+ * the caller program disappears from the bus (e.g. if the program ends before
+ * having called mm_manager_uninhibit_device_sync() explicitly).
+ *
+ * See mm_manager_inhibit_device() for the asynchronous version of this method.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ *
+ * Since: 1.10
+ */
+gboolean
+mm_manager_inhibit_device_sync (MMManager *manager,
+ const gchar *uid,
+ GCancellable *cancellable,
+ GError **error)
+{
+ g_return_val_if_fail (MM_IS_MANAGER (manager), FALSE);
+ return common_inhibit_device_sync (manager, uid, TRUE, cancellable, error);
+}
+
+/**
+ * mm_manager_uninhibit_device_finish:
+ * @manager: A #MMManager.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to
+ * mm_manager_uninhibit_device().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with mm_manager_uninhibit_device().
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ *
+ * Since: 1.10
+ */
+gboolean
+mm_manager_uninhibit_device_finish (MMManager *manager,
+ GAsyncResult *res,
+ GError **error)
+{
+ g_return_val_if_fail (MM_IS_MANAGER (manager), FALSE);
+ return common_inhibit_device_finish (manager, res, error);
+}
+
+/**
+ * mm_manager_uninhibit_device:
+ * @manager: A #MMManager.
+ * @uid: the unique ID of the physical device.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or
+ * %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously requests to remove an inhibition on the device identified by
+ * @uid.
+ *
+ * The @uid must be the same unique ID that was sent in the inhibition request.
+ *
+ * Only the same program that placed an inhibition on a given device is able to
+ * remove the inhibition.
+ *
+ * When the operation is finished, @callback will be invoked in the
+ * <link linkend="g-main-context-push-thread-default">thread-default main loop</link>
+ * of the thread you are calling this method from. You can then call
+ * mm_manager_uninhibit_device_finish() to get the result of the operation.
+ *
+ * See mm_manager_uninhibit_device_sync() for the synchronous, blocking version
+ * of this method.
+ *
+ * Since: 1.10
+ */
+void
+mm_manager_uninhibit_device (MMManager *manager,
+ const gchar *uid,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ g_return_if_fail (MM_IS_MANAGER (manager));
+ common_inhibit_device (manager, uid, FALSE, cancellable, callback, user_data);
+}
+
+/**
+ * mm_manager_uninhibit_device_sync:
+ * @manager: A #MMManager.
+ * @uid: the unique ID of the physical device.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously requests to remove an inhibition on the device identified by
+ * @uid.
+ *
+ * The @uid must be the same unique ID that was sent in the inhibition request.
+ *
+ * Only the same program that placed an inhibition on a given device is able to
+ * remove the inhibition.
+ *
+ * See mm_manager_uninhibit_device() for the asynchronous version of this
+ * method.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ *
+ * Since: 1.10
+ */
+gboolean
+mm_manager_uninhibit_device_sync (MMManager *manager,
+ const gchar *uid,
+ GCancellable *cancellable,
+ GError **error)
+{
+ g_return_val_if_fail (MM_IS_MANAGER (manager), FALSE);
+ return common_inhibit_device_sync (manager, uid, FALSE, cancellable, error);
+}
+
+/*****************************************************************************/
+
static void
mm_manager_init (MMManager *manager)
{
- register_dbus_errors ();
+ mm_common_register_errors ();
/* Setup private data */
- manager->priv = G_TYPE_INSTANCE_GET_PRIVATE ((manager),
+ manager->priv = G_TYPE_INSTANCE_GET_PRIVATE (manager,
MM_TYPE_MANAGER,
MMManagerPrivate);
}