diff options
Diffstat (limited to 'plugins/iridium/mm-broadband-modem-iridium.c')
-rw-r--r-- | plugins/iridium/mm-broadband-modem-iridium.c | 115 |
1 files changed, 53 insertions, 62 deletions
diff --git a/plugins/iridium/mm-broadband-modem-iridium.c b/plugins/iridium/mm-broadband-modem-iridium.c index c64e8d2d..681d9123 100644 --- a/plugins/iridium/mm-broadband-modem-iridium.c +++ b/plugins/iridium/mm-broadband-modem-iridium.c @@ -23,7 +23,7 @@ #include <ctype.h> #include "ModemManager.h" -#include "mm-log.h" +#include "mm-log-object.h" #include "mm-errors-types.h" #include "mm-base-modem-at.h" #include "mm-iface-modem.h" @@ -41,43 +41,54 @@ static void iface_modem_messaging_init (MMIfaceModemMessaging *iface); G_DEFINE_TYPE_EXTENDED (MMBroadbandModemIridium, mm_broadband_modem_iridium, MM_TYPE_BROADBAND_MODEM, 0, G_IMPLEMENT_INTERFACE (MM_TYPE_IFACE_MODEM, iface_modem_init) G_IMPLEMENT_INTERFACE (MM_TYPE_IFACE_MODEM_3GPP, iface_modem_3gpp_init) - G_IMPLEMENT_INTERFACE (MM_TYPE_IFACE_MODEM_MESSAGING, iface_modem_messaging_init)); + G_IMPLEMENT_INTERFACE (MM_TYPE_IFACE_MODEM_MESSAGING, iface_modem_messaging_init)) /*****************************************************************************/ -/* Operator Code and Name loading (3GPP interface) */ +/* Operator Code loading (3GPP interface) */ static gchar * load_operator_code_finish (MMIfaceModem3gpp *self, GAsyncResult *res, GError **error) { + return g_task_propagate_pointer (G_TASK (res), error); +} + +static void +load_operator_code (MMIfaceModem3gpp *self, + GAsyncReadyCallback callback, + gpointer user_data) +{ + GTask *task; + + task = g_task_new (self, NULL, callback, user_data); /* Only "90103" operator code is assumed */ - return g_strdup ("90103"); + g_task_return_pointer (task, g_strdup ("90103"), g_free); + g_object_unref (task); } +/*****************************************************************************/ +/* Operator Name loading (3GPP interface) */ + static gchar * load_operator_name_finish (MMIfaceModem3gpp *self, GAsyncResult *res, GError **error) { - /* Only "IRIDIUM" operator name is assumed */ - return g_strdup ("IRIDIUM"); + return g_task_propagate_pointer (G_TASK (res), error); } static void -load_operator_name_or_code (MMIfaceModem3gpp *self, - GAsyncReadyCallback callback, - gpointer user_data) +load_operator_name (MMIfaceModem3gpp *self, + GAsyncReadyCallback callback, + gpointer user_data) { - GSimpleAsyncResult *result; - - result = g_simple_async_result_new (G_OBJECT (self), - callback, - user_data, - load_operator_name_or_code); - g_simple_async_result_set_op_res_gboolean (result, TRUE); - g_simple_async_result_complete_in_idle (result); - g_object_unref (result); + GTask *task; + + task = g_task_new (self, NULL, callback, user_data); + /* Only "IRIDIUM" operator name is assumed */ + g_task_return_pointer (task, g_strdup ("IRIDIUM"), g_free); + g_object_unref (task); } /*****************************************************************************/ @@ -168,25 +179,24 @@ setup_flow_control_finish (MMIfaceModem *self, 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 setup_flow_control_ready (MMBroadbandModemIridium *self, GAsyncResult *res, - GSimpleAsyncResult *operation_result) + GTask *task) { GError *error = NULL; if (!mm_base_modem_at_command_finish (MM_BASE_MODEM (self), res, &error)) /* Let the error be critical. We DO need RTS/CTS in order to have * proper modem disabling. */ - g_simple_async_result_take_error (operation_result, error); + g_task_return_error (task, error); else - g_simple_async_result_set_op_res_gboolean (operation_result, TRUE); + g_task_return_boolean (task, TRUE); - g_simple_async_result_complete (operation_result); - g_object_unref (operation_result); + g_object_unref (task); } static void @@ -194,13 +204,6 @@ setup_flow_control (MMIfaceModem *self, GAsyncReadyCallback callback, gpointer user_data) { - GSimpleAsyncResult *result; - - result = g_simple_async_result_new (G_OBJECT (self), - callback, - user_data, - setup_flow_control); - /* Enable RTS/CTS flow control. * Other available values: * AT&K0: Disable flow control @@ -208,12 +211,13 @@ setup_flow_control (MMIfaceModem *self, * AT&K4: XOFF/XON * AT&K6: Both RTS/CTS and XOFF/XON */ + g_object_set (self, MM_BROADBAND_MODEM_FLOW_CONTROL, MM_FLOW_CONTROL_RTS_CTS, NULL); mm_base_modem_at_command (MM_BASE_MODEM (self), "&K3", 3, FALSE, (GAsyncReadyCallback)setup_flow_control_ready, - result); + g_task_new (self, NULL, callback, user_data)); } /*****************************************************************************/ @@ -224,7 +228,7 @@ load_supported_modes_finish (MMIfaceModem *self, GAsyncResult *res, GError **error) { - return g_array_ref (g_simple_async_result_get_op_res_gpointer (G_SIMPLE_ASYNC_RESULT (res))); + return g_task_propagate_pointer (G_TASK (res), error); } static void @@ -232,14 +236,9 @@ load_supported_modes (MMIfaceModem *self, GAsyncReadyCallback callback, gpointer user_data) { - GSimpleAsyncResult *result; GArray *combinations; MMModemModeCombination mode; - - result = g_simple_async_result_new (G_OBJECT (self), - callback, - user_data, - load_supported_modes); + GTask *task; /* Build list of combinations */ combinations = g_array_sized_new (FALSE, FALSE, sizeof (MMModemModeCombination), 1); @@ -249,9 +248,9 @@ load_supported_modes (MMIfaceModem *self, mode.preferred = MM_MODEM_MODE_NONE; g_array_append_val (combinations, mode); - g_simple_async_result_set_op_res_gpointer (result, combinations, (GDestroyNotify) g_array_unref); - g_simple_async_result_complete_in_idle (result); - g_object_unref (result); + task = g_task_new (self, NULL, callback, user_data); + g_task_return_pointer (task, combinations, (GDestroyNotify) g_array_unref); + g_object_unref (task); } /*****************************************************************************/ @@ -285,12 +284,7 @@ create_bearer_finish (MMIfaceModem *self, GAsyncResult *res, GError **error) { - MMBaseBearer *bearer; - - bearer = g_simple_async_result_get_op_res_gpointer (G_SIMPLE_ASYNC_RESULT (res)); - mm_dbg ("New Iridium bearer created at DBus path '%s'", mm_base_bearer_get_path (bearer)); - - return g_object_ref (bearer); + return g_task_propagate_pointer (G_TASK (res), error); } static void @@ -300,20 +294,14 @@ create_bearer (MMIfaceModem *self, gpointer user_data) { MMBaseBearer *bearer; - GSimpleAsyncResult *result; + GTask *task; - result = g_simple_async_result_new (G_OBJECT (self), - callback, - user_data, - create_bearer); - mm_dbg ("Creating Iridium bearer..."); + mm_obj_dbg (self, "creating Iridium bearer..."); bearer = mm_bearer_iridium_new (MM_BROADBAND_MODEM_IRIDIUM (self), properties); - g_simple_async_result_set_op_res_gpointer (result, - bearer, - (GDestroyNotify)g_object_unref); - g_simple_async_result_complete_in_idle (result); - g_object_unref (result); + task = g_task_new (self, NULL, callback, user_data); + g_task_return_pointer (task, bearer, g_object_unref); + g_object_unref (task); } /*****************************************************************************/ @@ -337,7 +325,7 @@ setup_ports (MMBroadbandModem *self) MM_BROADBAND_MODEM_CLASS (mm_broadband_modem_iridium_parent_class)->setup_ports (self); /* Set 9600 baudrate by default in the AT port */ - mm_dbg ("Baudrate will be set to 9600 bps..."); + mm_obj_dbg (self, "baudrate will be set to 9600 bps..."); primary = mm_base_modem_peek_port_primary (MM_BASE_MODEM (self)); if (!primary) return; @@ -363,6 +351,9 @@ mm_broadband_modem_iridium_new (const gchar *device, MM_BASE_MODEM_PLUGIN, plugin, MM_BASE_MODEM_VENDOR_ID, vendor_id, MM_BASE_MODEM_PRODUCT_ID, product_id, + /* Iridium bearer supports TTY only */ + MM_BASE_MODEM_DATA_NET_SUPPORTED, FALSE, + MM_BASE_MODEM_DATA_TTY_SUPPORTED, TRUE, /* Allow only up to 3 consecutive timeouts in the serial port */ MM_BASE_MODEM_MAX_TIMEOUTS, 3, /* Only CS network is supported by the Iridium modem */ @@ -409,9 +400,9 @@ static void iface_modem_3gpp_init (MMIfaceModem3gpp *iface) { /* Fixed operator code and name to be reported */ - iface->load_operator_name = load_operator_name_or_code; + iface->load_operator_name = load_operator_name; iface->load_operator_name_finish = load_operator_name_finish; - iface->load_operator_code = load_operator_name_or_code; + iface->load_operator_code = load_operator_code; iface->load_operator_code_finish = load_operator_code_finish; /* Don't try to scan networks with AT+COPS=?. |