diff options
author | Riccardo Vangelisti <riccardo.vangelisti@sadel.it> | 2015-04-27 11:38:57 +0200 |
---|---|---|
committer | Aleksander Morgado <aleksander@aleksander.es> | 2015-08-02 10:39:12 +0200 |
commit | 0bf4ad6b66b1ea7626df28dc2417686b9e2d03f7 (patch) | |
tree | 4fb3fe9aea212c941954d94f4d040cfa6c5c9cfb /libmm-glib/mm-call.c | |
parent | 0feb4acef4d47bc3c22bb1b8f121e5959fb55901 (diff) |
libmm-glib: added support for Modem.Voice and Call interfaces
Diffstat (limited to 'libmm-glib/mm-call.c')
-rw-r--r-- | libmm-glib/mm-call.c | 422 |
1 files changed, 422 insertions, 0 deletions
diff --git a/libmm-glib/mm-call.c b/libmm-glib/mm-call.c new file mode 100644 index 00000000..ec93663b --- /dev/null +++ b/libmm-glib/mm-call.c @@ -0,0 +1,422 @@ +/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * libmm -- Access modem status & information from glib applications + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details: + * + * Copyright (C) 2015 Riccardo Vangelisti <riccardo.vangelisti@sadel.it> + */ + +#include "string.h" + +#include "mm-helpers.h" +#include "mm-call.h" +#include "mm-modem.h" + +/** + * SECTION: mm-call + * @title: MMCall + * @short_description: The call interface + * + * The #MMCall is an object providing access to the methods, signals and + * properties of the call interface. + * + * When the call is exposed and available in the bus, it is ensured that at + * least this interface is also available. + */ + +G_DEFINE_TYPE (MMCall, mm_call, MM_GDBUS_TYPE_CALL_PROXY) + +/*****************************************************************************/ + +/** + * mm_call_get_path: + * @self: A #MMCall. + * + * Gets the DBus path of the #MMCall object. + * + * Returns: (transfer none): The DBus path of the #MMCall object. + */ +const gchar * +mm_call_get_path (MMCall *self) +{ + g_return_val_if_fail (MM_IS_CALL (self), NULL); + + RETURN_NON_EMPTY_CONSTANT_STRING ( + g_dbus_proxy_get_object_path (G_DBUS_PROXY (self))); +} + +/** + * mm_call_dup_path: + * @self: A #MMCall. + * + * Gets a copy of the DBus path of the #MMCall object. + * + * Returns: (transfer full): The DBus path of the #MMCall object. The returned value should be freed with g_free(). + */ +gchar * +mm_call_dup_path (MMCall *self) +{ + gchar *value; + + g_return_val_if_fail (MM_IS_CALL (self), NULL); + + g_object_get (G_OBJECT (self), + "g-object-path", &value, + NULL); + + RETURN_NON_EMPTY_STRING (value); +} + +/*****************************************************************************/ + +/** + * mm_call_get_number: + * @self: A #MMCall. + * + * Gets the call number. In outgoing calls contains the dialing number or + * the remote number in incoming calls + * + * <warning>The returned value is only valid until the property changes so + * it is only safe to use this function on the thread where + * @self was constructed. Use mm_call_dup_number() if on another + * thread.</warning> + * + * Returns: (transfer none): The number, or %NULL if it couldn't be retrieved. + */ +const gchar * +mm_call_get_number (MMCall *self) +{ + g_return_val_if_fail (MM_IS_CALL (self), NULL); + + RETURN_NON_EMPTY_CONSTANT_STRING ( + mm_gdbus_call_get_number (MM_GDBUS_CALL (self))); +} + +/** + * mm_call_dup_number: + * @self: A #MMCall. + * + * Gets the call number. In outgoing calls contains the dialing number or + * the remote number in incoming calls + * + * Returns: (transfer full): The number, or %NULL if it couldn't be retrieved. The returned value should be freed with g_free(). + */ +gchar * +mm_call_dup_number (MMCall *self) +{ + g_return_val_if_fail (MM_IS_CALL (self), NULL); + + RETURN_NON_EMPTY_STRING ( + mm_gdbus_call_dup_number (MM_GDBUS_CALL (self))); +} + +/*****************************************************************************/ + +/** + * mm_call_get_direction: + * @self: A #MMCall. + * + * Gets the call direction. + * + * Returns: a #MMCallDirection. + */ +MMCallDirection +mm_call_get_direction (MMCall *self) +{ + g_return_val_if_fail (MM_IS_CALL (self), MM_CALL_DIRECTION_INCOMING); + + return (MMCallDirection) mm_gdbus_call_get_direction (MM_GDBUS_CALL (self)); +} + +/*****************************************************************************/ + +/** + * mm_call_get_state: + * @self: A #MMCall. + * + * Gets the current state of call. + * + * Returns: a #MMCallState. + */ +MMCallState +mm_call_get_state (MMCall *self) +{ + g_return_val_if_fail (MM_IS_CALL (self), MM_CALL_STATE_UNKNOWN); + + return (MMCallState) mm_gdbus_call_get_state (MM_GDBUS_CALL (self)); +} + +/*****************************************************************************/ + +/** + * mm_call_get_state_reason: + * @self: A #MMCall. + * + * Gets the reason of why the call changes its state. + * + * Returns: a #MMCallStateReason. + */ +MMCallStateReason +mm_call_get_state_reason (MMCall *self) +{ + g_return_val_if_fail (MM_IS_CALL (self), MM_CALL_STATE_REASON_UNKNOWN); + + return (MMCallStateReason) mm_gdbus_call_get_state_reason (MM_GDBUS_CALL (self)); +} + +/*****************************************************************************/ + +/** + * mm_call_start_finish: + * @self: A #MMCall. + * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to mm_call_start(). + * @error: Return location for error or %NULL. + * + * Finishes an operation started with mm_call_start(). + * + * Returns: %TRUE if the operation succeded, %FALSE if @error is set. + */ +gboolean +mm_call_start_finish (MMCall *self, + GAsyncResult *res, + GError **error) +{ + g_return_val_if_fail (MM_IS_CALL (self), FALSE); + + return mm_gdbus_call_call_start_finish (MM_GDBUS_CALL (self), res, error); +} + +/** + * mm_call_start: + * @self: A #MMCall. + * @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 queue the call. + * + * Call objects can only be executed once. + * + * 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_call_start_finish() to get the result of the operation. + * + * See mm_call_start_sync() for the synchronous, blocking version of this method. + */ +void +mm_call_start (MMCall *self, + GCancellable *cancellable, + GAsyncReadyCallback callback, + gpointer user_data) +{ + g_return_if_fail (MM_IS_CALL (self)); + + mm_gdbus_call_call_start (MM_GDBUS_CALL (self), + cancellable, + callback, + user_data); +} + +/** + * mm_call_start_sync: + * @self: A #MMCall. + * @cancellable: (allow-none): A #GCancellable or %NULL. + * @error: Return location for error or %NULL. + * + * Synchronously requests to queue the call for delivery. + * + * Call objects can only be sent once. + * + * The calling thread is blocked until a reply is received. + * See mm_call_start() for the asynchronous version of this method. + * + * Returns: %TRUE if the operation succeded, %FALSE if @error is set. + */ +gboolean +mm_call_start_sync (MMCall *self, + GCancellable *cancellable, + GError **error) +{ + g_return_val_if_fail (MM_IS_CALL (self), FALSE); + + return mm_gdbus_call_call_start_sync (MM_GDBUS_CALL (self), + cancellable, + error); +} + +/*****************************************************************************/ + +/** + * mm_call_accept_finish: + * @self: A #MMCall. + * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to mm_call_accept(). + * @error: Return location for error or %NULL. + * + * Finishes an operation accepted with mm_call_accept(). + * + * Returns: %TRUE if the operation succeded, %FALSE if @error is set. + */ +gboolean +mm_call_accept_finish (MMCall *self, + GAsyncResult *res, + GError **error) +{ + g_return_val_if_fail (MM_IS_CALL (self), FALSE); + + return mm_gdbus_call_call_accept_finish (MM_GDBUS_CALL (self), res, error); +} + +/** + * mm_call_accept: + * @self: A #MMCall. + * @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 accept the incoming call. + * + * Call objects can only be executed once. + * + * 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_call_accept_finish() to get the result of the operation. + * + * See mm_call_accept_sync() for the synchronous, blocking version of this method. + */ +void +mm_call_accept (MMCall *self, + GCancellable *cancellable, + GAsyncReadyCallback callback, + gpointer user_data) +{ + g_return_if_fail (MM_IS_CALL (self)); + + mm_gdbus_call_call_accept (MM_GDBUS_CALL (self), + cancellable, + callback, + user_data); +} + +/** + * mm_call_accept_sync: + * @self: A #MMCall. + * @cancellable: (allow-none): A #GCancellable or %NULL. + * @error: Return location for error or %NULL. + * + * Synchronously requests to accept the incoming call. + * + * Call objects can only be sent once. + * + * The calling thread is blocked until an incoming call is ready. + * See mm_call_accept() for the asynchronous version of this method. + * + * Returns: %TRUE if the operation succeded, %FALSE if @error is set. + */ +gboolean +mm_call_accept_sync (MMCall *self, + GCancellable *cancellable, + GError **error) +{ + g_return_val_if_fail (MM_IS_CALL (self), FALSE); + + return mm_gdbus_call_call_accept_sync (MM_GDBUS_CALL (self), + cancellable, + error); +} + +/*****************************************************************************/ + +/** + * mm_call_hangup_finish: + * @self: A #MMCall. + * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to mm_call_hangup(). + * @error: Return location for error or %NULL. + * + * Finishes an operation hanguped with mm_call_hangup(). + * + * Returns: %TRUE if the operation succeded, %FALSE if @error is set. + */ +gboolean +mm_call_hangup_finish (MMCall *self, + GAsyncResult *res, + GError **error) +{ + g_return_val_if_fail (MM_IS_CALL (self), FALSE); + + return mm_gdbus_call_call_hangup_finish (MM_GDBUS_CALL (self), res, error); +} + +/** + * mm_call_hangup: + * @self: A #MMCall. + * @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 hangup the call. + * + * Call objects can only be executed once. + * + * 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_call_hangup_finish() to get the result of the operation. + * + * See mm_call_hangup_sync() for the synchronous, blocking version of this method. + */ +void +mm_call_hangup (MMCall *self, + GCancellable *cancellable, + GAsyncReadyCallback callback, + gpointer user_data) +{ + g_return_if_fail (MM_IS_CALL (self)); + + mm_gdbus_call_call_hangup (MM_GDBUS_CALL (self), + cancellable, + callback, + user_data); +} + +/** + * mm_call_hangup_sync: + * @self: A #MMCall. + * @cancellable: (allow-none): A #GCancellable or %NULL. + * @error: Return location for error or %NULL. + * + * Synchronously requests to hangup the call. + * + * Call objects can only be sent once. + * + * The calling thread is blocked until an incoming call is ready. + * See mm_call_hangup() for the asynchronous version of this method. + * + * Returns: %TRUE if the operation succeded, %FALSE if @error is set. + */ +gboolean +mm_call_hangup_sync (MMCall *self, + GCancellable *cancellable, + GError **error) +{ + g_return_val_if_fail (MM_IS_CALL (self), FALSE); + + return mm_gdbus_call_call_hangup_sync (MM_GDBUS_CALL (self), + cancellable, + error); +} + +/*****************************************************************************/ +static void +mm_call_init (MMCall *self) +{ +} + +static void +mm_call_class_init (MMCallClass *call_class) +{ +} |