diff options
Diffstat (limited to 'src/mm-modem.c')
-rw-r--r-- | src/mm-modem.c | 1008 |
1 files changed, 0 insertions, 1008 deletions
diff --git a/src/mm-modem.c b/src/mm-modem.c deleted file mode 100644 index 012e3203..00000000 --- a/src/mm-modem.c +++ /dev/null @@ -1,1008 +0,0 @@ -/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* - * 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) 2008 - 2009 Novell, Inc. - * Copyright (C) 2009 - 2010 Red Hat, Inc. - */ - -#include <config.h> -#include <string.h> -#include <dbus/dbus-glib.h> -#include "mm-modem.h" -#include "mm-log.h" -#include "mm-errors.h" -#include "mm-callback-info.h" -#include "mm-marshal.h" - -static void impl_modem_enable (MMModem *modem, gboolean enable, DBusGMethodInvocation *context); -static void impl_modem_connect (MMModem *modem, const char *number, DBusGMethodInvocation *context); -static void impl_modem_disconnect (MMModem *modem, DBusGMethodInvocation *context); -static void impl_modem_get_ip4_config (MMModem *modem, DBusGMethodInvocation *context); -static void impl_modem_get_info (MMModem *modem, DBusGMethodInvocation *context); -static void impl_modem_reset (MMModem *modem, DBusGMethodInvocation *context); -static void impl_modem_factory_reset (MMModem *modem, const char *code, DBusGMethodInvocation *context); - -#include "mm-modem-glue.h" - -#define MM_MODEM_PIN_RETRY_COUNTS_PROP_TYPE (dbus_g_type_get_map ("GHashTable", G_TYPE_STRING, G_TYPE_UINT)) - -static void -async_op_not_supported (MMModem *self, - MMModemFn callback, - gpointer user_data) -{ - MMCallbackInfo *info; - - info = mm_callback_info_new (self, callback, user_data); - info->error = g_error_new_literal (MM_MODEM_ERROR, MM_MODEM_ERROR_OPERATION_NOT_SUPPORTED, - "Operation not supported"); - mm_callback_info_schedule (info); -} - -static void -async_call_done (MMModem *modem, GError *error, gpointer user_data) -{ - DBusGMethodInvocation *context = (DBusGMethodInvocation *) user_data; - - if (error) - dbus_g_method_return_error (context, error); - else - dbus_g_method_return (context); -} - -void -mm_modem_enable (MMModem *self, - MMModemFn callback, - gpointer user_data) -{ - MMModemState state; - - g_return_if_fail (MM_IS_MODEM (self)); - g_return_if_fail (callback != NULL); - - state = mm_modem_get_state (self); - if (state >= MM_MODEM_STATE_ENABLED) { - MMCallbackInfo *info; - - info = mm_callback_info_new (self, callback, user_data); - - if (state == MM_MODEM_STATE_ENABLING) { - info->error = g_error_new_literal (MM_MODEM_ERROR, - MM_MODEM_ERROR_OPERATION_IN_PROGRESS, - "The device is already being enabled."); - } else { - /* Already enabled */ - } - - mm_callback_info_schedule (info); - return; - } - - if (MM_MODEM_GET_INTERFACE (self)->enable) - MM_MODEM_GET_INTERFACE (self)->enable (self, callback, user_data); - else - async_op_not_supported (self, callback, user_data); -} - -static void -finish_disable (MMModem *self, - MMModemFn callback, - gpointer user_data) -{ - if (MM_MODEM_GET_INTERFACE (self)->disable) - MM_MODEM_GET_INTERFACE (self)->disable (self, callback, user_data); - else - async_op_not_supported (self, callback, user_data); -} - -typedef struct { - MMModemFn callback; - gpointer user_data; -} DisableDisconnectInfo; - -static void -disable_disconnect_done (MMModem *self, - GError *error, - gpointer user_data) -{ - DisableDisconnectInfo *cb_data = user_data; - GError *tmp_error = NULL; - - /* Check for modem removal */ - if (g_error_matches (error, MM_MODEM_ERROR, MM_MODEM_ERROR_REMOVED)) - tmp_error = g_error_copy (error); - else if (!self) { - tmp_error = g_error_new_literal (MM_MODEM_ERROR, - MM_MODEM_ERROR_REMOVED, - "The modem was removed."); - } - - /* And send an immediate error reply if the modem was removed */ - if (tmp_error) { - cb_data->callback (NULL, tmp_error, cb_data->user_data); - g_free (cb_data); - g_error_free (tmp_error); - return; - } - - if (error) { - char *device = mm_modem_get_device (self); - - /* Don't really care what the error was; log it and proceed to disable */ - g_warning ("%s: (%s): error disconnecting the modem while disabling: (%d) %s", - __func__, - device, - error ? error->code : -1, - error && error->message ? error->message : "(unknown)"); - g_free (device); - } - finish_disable (self, cb_data->callback, cb_data->user_data); - g_free (cb_data); -} - -void -mm_modem_disable (MMModem *self, - MMModemFn callback, - gpointer user_data) -{ - MMModemState state; - - g_return_if_fail (MM_IS_MODEM (self)); - g_return_if_fail (callback != NULL); - - state = mm_modem_get_state (self); - if (state <= MM_MODEM_STATE_DISABLING) { - MMCallbackInfo *info; - - info = mm_callback_info_new (self, callback, user_data); - - if (state == MM_MODEM_STATE_DISABLING) { - info->error = g_error_new_literal (MM_MODEM_ERROR, - MM_MODEM_ERROR_OPERATION_IN_PROGRESS, - "The device is already being disabled."); - } else { - /* Already disabled */ - } - - mm_callback_info_schedule (info); - return; - } - - /* If the modem is connected, disconnect it */ - if (state >= MM_MODEM_STATE_CONNECTING) { - DisableDisconnectInfo *cb_data; - - cb_data = g_malloc0 (sizeof (DisableDisconnectInfo)); - cb_data->callback = callback; - cb_data->user_data = user_data; - mm_modem_disconnect (self, disable_disconnect_done, cb_data); - } else - finish_disable (self, callback, user_data); -} - -static void -impl_modem_enable (MMModem *modem, - gboolean enable, - DBusGMethodInvocation *context) -{ - if (enable) - mm_modem_enable (modem, async_call_done, context); - else - mm_modem_disable (modem, async_call_done, context); -} - -void -mm_modem_connect (MMModem *self, - const char *number, - MMModemFn callback, - gpointer user_data) -{ - MMModemState state; - - g_return_if_fail (MM_IS_MODEM (self)); - g_return_if_fail (callback != NULL); - g_return_if_fail (number != NULL); - - state = mm_modem_get_state (self); - if (state >= MM_MODEM_STATE_CONNECTING) { - MMCallbackInfo *info; - - /* Already connecting */ - info = mm_callback_info_new (self, callback, user_data); - if (state == MM_MODEM_STATE_CONNECTING) { - info->error = g_error_new_literal (MM_MODEM_ERROR, - MM_MODEM_ERROR_OPERATION_IN_PROGRESS, - "The device is already being connected."); - } else { - /* already connected */ - } - - mm_callback_info_schedule (info); - return; - } - - if (MM_MODEM_GET_INTERFACE (self)->connect) - MM_MODEM_GET_INTERFACE (self)->connect (self, number, callback, user_data); - else - async_op_not_supported (self, callback, user_data); -} - -static void -impl_modem_connect (MMModem *modem, - const char *number, - DBusGMethodInvocation *context) -{ - mm_modem_connect (modem, number, async_call_done, context); -} - -static void -get_ip4_invoke (MMCallbackInfo *info) -{ - MMModemIp4Fn callback = (MMModemIp4Fn) info->callback; - - callback (info->modem, - GPOINTER_TO_UINT (mm_callback_info_get_data (info, "ip4-address")), - (GArray *) mm_callback_info_get_data (info, "ip4-dns"), - info->error, info->user_data); -} - -void -mm_modem_get_ip4_config (MMModem *self, - MMModemIp4Fn callback, - gpointer user_data) -{ - g_return_if_fail (MM_IS_MODEM (self)); - g_return_if_fail (callback != NULL); - - if (MM_MODEM_GET_INTERFACE (self)->get_ip4_config) - MM_MODEM_GET_INTERFACE (self)->get_ip4_config (self, callback, user_data); - else { - MMCallbackInfo *info; - - info = mm_callback_info_new_full (self, - get_ip4_invoke, - G_CALLBACK (callback), - user_data); - - info->error = g_error_new_literal (MM_MODEM_ERROR, MM_MODEM_ERROR_OPERATION_NOT_SUPPORTED, - "Operation not supported"); - mm_callback_info_schedule (info); - } -} - -static void -value_array_add_uint (GValueArray *array, guint32 i) -{ - GValue value = { 0, }; - - g_value_init (&value, G_TYPE_UINT); - g_value_set_uint (&value, i); - g_value_array_append (array, &value); - g_value_unset (&value); -} - -static void -get_ip4_done (MMModem *modem, - guint32 address, - GArray *dns, - GError *error, - gpointer user_data) -{ - DBusGMethodInvocation *context = (DBusGMethodInvocation *) user_data; - - if (error) - dbus_g_method_return_error (context, error); - else { - GValueArray *array; - guint32 dns1 = 0; - guint32 dns2 = 0; - guint32 dns3 = 0; - - array = g_value_array_new (4); - - if (dns) { - if (dns->len > 0) - - dns1 = g_array_index (dns, guint32, 0); - if (dns->len > 1) - dns2 = g_array_index (dns, guint32, 1); - if (dns->len > 2) - dns3 = g_array_index (dns, guint32, 2); - } - - value_array_add_uint (array, address); - value_array_add_uint (array, dns1); - value_array_add_uint (array, dns2); - value_array_add_uint (array, dns3); - - dbus_g_method_return (context, array); - - g_value_array_free (array); - } -} - -static void -impl_modem_get_ip4_config (MMModem *modem, - DBusGMethodInvocation *context) -{ - mm_modem_get_ip4_config (modem, get_ip4_done, context); -} - -void -mm_modem_disconnect (MMModem *self, - MMModemFn callback, - gpointer user_data) -{ - MMModemState state; - - g_return_if_fail (MM_IS_MODEM (self)); - g_return_if_fail (callback != NULL); - - state = mm_modem_get_state (self); - if (state <= MM_MODEM_STATE_DISCONNECTING) { - MMCallbackInfo *info; - - /* Already connecting */ - info = mm_callback_info_new (self, callback, user_data); - if (state == MM_MODEM_STATE_DISCONNECTING) { - info->error = g_error_new_literal (MM_MODEM_ERROR, - MM_MODEM_ERROR_OPERATION_IN_PROGRESS, - "The device is already being disconnected."); - } else { - /* already disconnected */ - } - - mm_callback_info_schedule (info); - return; - } - - if (MM_MODEM_GET_INTERFACE (self)->disconnect) - MM_MODEM_GET_INTERFACE (self)->disconnect (self, callback, user_data); - else - async_op_not_supported (self, callback, user_data); -} - -static void -impl_modem_disconnect (MMModem *modem, - DBusGMethodInvocation *context) -{ - mm_modem_disconnect (modem, async_call_done, context); -} - -static void -info_call_done (MMModem *self, - const char *manufacturer, - const char *model, - const char *version, - GError *error, - gpointer user_data) -{ - DBusGMethodInvocation *context = (DBusGMethodInvocation *) user_data; - - if (error) - dbus_g_method_return_error (context, error); - else { - GValueArray *array; - GValue value = { 0, }; - - array = g_value_array_new (3); - - /* Manufacturer */ - g_value_init (&value, G_TYPE_STRING); - g_value_set_string (&value, manufacturer); - g_value_array_append (array, &value); - g_value_unset (&value); - - /* Model */ - g_value_init (&value, G_TYPE_STRING); - g_value_set_string (&value, model); - g_value_array_append (array, &value); - g_value_unset (&value); - - /* Version */ - g_value_init (&value, G_TYPE_STRING); - g_value_set_string (&value, version); - g_value_array_append (array, &value); - g_value_unset (&value); - - dbus_g_method_return (context, array); - - g_value_array_free (array); - } -} - -static void -info_invoke (MMCallbackInfo *info) -{ - MMModemInfoFn callback = (MMModemInfoFn) info->callback; - - callback (info->modem, NULL, NULL, NULL, info->error, info->user_data); -} - -static void -info_call_not_supported (MMModem *self, - MMModemInfoFn callback, - gpointer user_data) -{ - MMCallbackInfo *info; - - info = mm_callback_info_new_full (MM_MODEM (self), info_invoke, G_CALLBACK (callback), user_data); - info->error = g_error_new_literal (MM_MODEM_ERROR, MM_MODEM_ERROR_OPERATION_NOT_SUPPORTED, - "Operation not supported"); - - mm_callback_info_schedule (info); -} - -void -mm_modem_get_info (MMModem *self, - MMModemInfoFn callback, - gpointer user_data) -{ - g_return_if_fail (MM_IS_MODEM (self)); - g_return_if_fail (callback != NULL); - - if (MM_MODEM_GET_INTERFACE (self)->get_info) - MM_MODEM_GET_INTERFACE (self)->get_info (self, callback, user_data); - else - info_call_not_supported (self, callback, user_data); -} - -static void -impl_modem_get_info (MMModem *modem, - DBusGMethodInvocation *context) -{ - mm_modem_get_info (modem, info_call_done, context); -} - -/*****************************************************************************/ - -static void -reset_auth_cb (MMAuthRequest *req, - GObject *owner, - DBusGMethodInvocation *context, - gpointer user_data) -{ - MMModem *self = MM_MODEM (owner); - GError *error = NULL; - - /* Return any authorization error, otherwise try to reset the modem */ - if (!mm_modem_auth_finish (self, req, &error)) { - dbus_g_method_return_error (context, error); - g_error_free (error); - } else - mm_modem_reset (self, async_call_done, context); -} - -static void -impl_modem_reset (MMModem *modem, DBusGMethodInvocation *context) -{ - GError *error = NULL; - - /* Make sure the caller is authorized to reset the device */ - if (!mm_modem_auth_request (MM_MODEM (modem), - MM_AUTHORIZATION_DEVICE_CONTROL, - context, - reset_auth_cb, - NULL, NULL, - &error)) { - dbus_g_method_return_error (context, error); - g_error_free (error); - } -} - -void -mm_modem_reset (MMModem *self, - MMModemFn callback, - gpointer user_data) -{ - g_return_if_fail (MM_IS_MODEM (self)); - g_return_if_fail (callback != NULL); - - if (MM_MODEM_GET_INTERFACE (self)->reset) - MM_MODEM_GET_INTERFACE (self)->reset (self, callback, user_data); - else - async_op_not_supported (self, callback, user_data); -} - -/*****************************************************************************/ - -static void -factory_reset_auth_cb (MMAuthRequest *req, - GObject *owner, - DBusGMethodInvocation *context, - gpointer user_data) -{ - MMModem *self = MM_MODEM (owner); - const char *code = user_data; - GError *error = NULL; - - /* Return any authorization error, otherwise try to reset the modem */ - if (!mm_modem_auth_finish (self, req, &error)) { - dbus_g_method_return_error (context, error); - g_error_free (error); - } else - mm_modem_factory_reset (self, code, async_call_done, context); -} - -static void -impl_modem_factory_reset (MMModem *modem, - const char *code, - DBusGMethodInvocation *context) -{ - GError *error = NULL; - - /* Make sure the caller is authorized to reset the device */ - if (!mm_modem_auth_request (MM_MODEM (modem), - MM_AUTHORIZATION_DEVICE_CONTROL, - context, - factory_reset_auth_cb, - g_strdup (code), - g_free, - &error)) { - dbus_g_method_return_error (context, error); - g_error_free (error); - } -} - -void -mm_modem_factory_reset (MMModem *self, - const char *code, - MMModemFn callback, - gpointer user_data) -{ - g_return_if_fail (MM_IS_MODEM (self)); - g_return_if_fail (callback != NULL); - g_return_if_fail (code != NULL); - - if (MM_MODEM_GET_INTERFACE (self)->factory_reset) - MM_MODEM_GET_INTERFACE (self)->factory_reset (self, code, callback, user_data); - else - async_op_not_supported (self, callback, user_data); -} - -/*****************************************************************************/ - -void -mm_modem_get_supported_charsets (MMModem *self, - MMModemUIntFn callback, - gpointer user_data) -{ - MMCallbackInfo *info; - - g_return_if_fail (MM_IS_MODEM (self)); - g_return_if_fail (callback != NULL); - - if (MM_MODEM_GET_INTERFACE (self)->get_supported_charsets) - MM_MODEM_GET_INTERFACE (self)->get_supported_charsets (self, callback, user_data); - else { - info = mm_callback_info_uint_new (MM_MODEM (self), callback, user_data); - info->error = g_error_new_literal (MM_MODEM_ERROR, MM_MODEM_ERROR_OPERATION_NOT_SUPPORTED, - "Operation not supported"); - mm_callback_info_schedule (info); - } -} - -void -mm_modem_set_charset (MMModem *self, - MMModemCharset charset, - MMModemFn callback, - gpointer user_data) -{ - MMCallbackInfo *info; - - g_return_if_fail (charset != MM_MODEM_CHARSET_UNKNOWN); - g_return_if_fail (MM_IS_MODEM (self)); - g_return_if_fail (callback != NULL); - - if (MM_MODEM_GET_INTERFACE (self)->set_charset) - MM_MODEM_GET_INTERFACE (self)->set_charset (self, charset, callback, user_data); - else { - info = mm_callback_info_new (MM_MODEM (self), callback, user_data); - info->error = g_error_new_literal (MM_MODEM_ERROR, MM_MODEM_ERROR_OPERATION_NOT_SUPPORTED, - "Operation not supported"); - mm_callback_info_schedule (info); - } -} - -/*****************************************************************************/ - -gboolean -mm_modem_owns_port (MMModem *self, - const char *subsys, - const char *name) -{ - g_return_val_if_fail (self != NULL, FALSE); - g_return_val_if_fail (MM_IS_MODEM (self), FALSE); - g_return_val_if_fail (subsys, FALSE); - g_return_val_if_fail (name, FALSE); - - g_assert (MM_MODEM_GET_INTERFACE (self)->owns_port); - return MM_MODEM_GET_INTERFACE (self)->owns_port (self, subsys, name); -} - -gboolean -mm_modem_grab_port (MMModem *self, - const char *subsys, - const char *name, - MMPortType ptype, - MMAtPortFlags at_pflags, - gpointer user_data, - GError **error) -{ - g_return_val_if_fail (self != NULL, FALSE); - g_return_val_if_fail (MM_IS_MODEM (self), FALSE); - g_return_val_if_fail (subsys, FALSE); - g_return_val_if_fail (name, FALSE); - - g_assert (MM_MODEM_GET_INTERFACE (self)->grab_port); - return MM_MODEM_GET_INTERFACE (self)->grab_port (self, subsys, name, ptype, at_pflags, user_data, error); -} - -gboolean -mm_modem_organize_ports (MMModem *self, GError **error) -{ - g_return_val_if_fail (self != NULL, FALSE); - g_return_val_if_fail (MM_IS_MODEM (self), FALSE); - - g_assert (MM_MODEM_GET_INTERFACE (self)->organize_ports); - return MM_MODEM_GET_INTERFACE (self)->organize_ports (self, error); -} - -void -mm_modem_release_port (MMModem *self, - const char *subsys, - const char *name) -{ - g_return_if_fail (self != NULL); - g_return_if_fail (MM_IS_MODEM (self)); - g_return_if_fail (subsys); - g_return_if_fail (name); - - g_assert (MM_MODEM_GET_INTERFACE (self)->release_port); - MM_MODEM_GET_INTERFACE (self)->release_port (self, subsys, name); -} - -gboolean -mm_modem_get_valid (MMModem *self) -{ - gboolean valid = FALSE; - - g_return_val_if_fail (self != NULL, FALSE); - g_return_val_if_fail (MM_IS_MODEM (self), FALSE); - - g_object_get (G_OBJECT (self), MM_MODEM_VALID, &valid, NULL); - return valid; -} - -char * -mm_modem_get_device (MMModem *self) -{ - char *device; - - g_return_val_if_fail (self != NULL, NULL); - g_return_val_if_fail (MM_IS_MODEM (self), NULL); - - g_object_get (G_OBJECT (self), MM_MODEM_MASTER_DEVICE, &device, NULL); - return device; -} - -MMModemState -mm_modem_get_state (MMModem *self) -{ - MMModemState state = MM_MODEM_STATE_UNKNOWN; - - g_object_get (G_OBJECT (self), MM_MODEM_STATE, &state, NULL); - return state; -} - -static const char * -state_to_string (MMModemState state) -{ - switch (state) { - case MM_MODEM_STATE_UNKNOWN: - return "unknown"; - case MM_MODEM_STATE_DISABLED: - return "disabled"; - case MM_MODEM_STATE_DISABLING: - return "disabling"; - case MM_MODEM_STATE_ENABLING: - return "enabling"; - case MM_MODEM_STATE_ENABLED: - return "enabled"; - case MM_MODEM_STATE_SEARCHING: - return "searching"; - case MM_MODEM_STATE_REGISTERED: - return "registered"; - case MM_MODEM_STATE_DISCONNECTING: - return "disconnecting"; - case MM_MODEM_STATE_CONNECTING: - return "connecting"; - case MM_MODEM_STATE_CONNECTED: - return "connected"; - default: - g_assert_not_reached (); - break; - } - - g_assert_not_reached (); - return "(invalid)"; -} - -void -mm_modem_set_state (MMModem *self, - MMModemState new_state, - MMModemStateReason reason) -{ - MMModemState old_state = MM_MODEM_STATE_UNKNOWN; - const char *dbus_path; - - g_object_get (G_OBJECT (self), MM_MODEM_STATE, &old_state, NULL); - - if (new_state != old_state) { - g_object_set (G_OBJECT (self), MM_MODEM_STATE, new_state, NULL); - g_signal_emit_by_name (G_OBJECT (self), "state-changed", old_state, new_state, reason); - - dbus_path = (const char *) g_object_get_data (G_OBJECT (self), DBUS_PATH_TAG); - if (dbus_path) { - mm_info ("Modem %s: state changed (%s -> %s)", - dbus_path, - state_to_string (old_state), - state_to_string (new_state)); - } - } -} - -/*****************************************************************************/ - -gboolean -mm_modem_auth_request (MMModem *self, - const char *authorization, - DBusGMethodInvocation *context, - MMAuthRequestCb callback, - gpointer callback_data, - GDestroyNotify notify, - GError **error) -{ - g_return_val_if_fail (self != NULL, FALSE); - g_return_val_if_fail (MM_IS_MODEM (self), FALSE); - g_return_val_if_fail (authorization != NULL, FALSE); - g_return_val_if_fail (context != NULL, FALSE); - g_return_val_if_fail (callback != NULL, FALSE); - - g_return_val_if_fail (MM_MODEM_GET_INTERFACE (self)->auth_request, FALSE); - return MM_MODEM_GET_INTERFACE (self)->auth_request (self, - authorization, - context, - callback, - callback_data, - notify, - error); -} - -gboolean -mm_modem_auth_finish (MMModem *self, - MMAuthRequest *req, - GError **error) -{ - gboolean success; - - g_return_val_if_fail (self != NULL, FALSE); - g_return_val_if_fail (MM_IS_MODEM (self), FALSE); - g_return_val_if_fail (req != NULL, FALSE); - - g_return_val_if_fail (MM_MODEM_GET_INTERFACE (self)->auth_finish, FALSE); - success = MM_MODEM_GET_INTERFACE (self)->auth_finish (self, req, error); - - /* If the request failed, the implementor *should* return an error */ - if (!success && error) - g_warn_if_fail (*error != NULL); - - return success; -} - -/*****************************************************************************/ - -static void -mm_modem_init (gpointer g_iface) -{ - GType iface_type = G_TYPE_FROM_INTERFACE (g_iface); - static gboolean initialized = FALSE; - - if (initialized) - return; - - /* Properties */ - g_object_interface_install_property - (g_iface, - g_param_spec_string (MM_MODEM_DATA_DEVICE, - "Device", - "Data device", - NULL, - G_PARAM_READWRITE)); - - g_object_interface_install_property - (g_iface, - g_param_spec_string (MM_MODEM_MASTER_DEVICE, - "MasterDevice", - "Master modem parent device of all the modem's ports", - NULL, - G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); - - g_object_interface_install_property - (g_iface, - g_param_spec_string (MM_MODEM_DRIVER, - "Driver", - "Driver", - NULL, - G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); - - g_object_interface_install_property - (g_iface, - g_param_spec_string (MM_MODEM_PLUGIN, - "Plugin", - "Plugin name", - NULL, - G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); - - g_object_interface_install_property - (g_iface, - g_param_spec_uint (MM_MODEM_TYPE, - "Type", - "Type", - 0, G_MAXUINT32, 0, - G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); - - g_object_interface_install_property - (g_iface, - g_param_spec_uint (MM_MODEM_IP_METHOD, - "IP method", - "IP configuration method", - MM_MODEM_IP_METHOD_PPP, - MM_MODEM_IP_METHOD_DHCP, - MM_MODEM_IP_METHOD_PPP, - G_PARAM_READWRITE)); - - g_object_interface_install_property - (g_iface, - g_param_spec_uint (MM_MODEM_IP_TIMEOUT, - "IP timeout", - "Maximum time to wait for a successful IP establishment, " - "when PPP is used. Modems with special needs will set this " - "property to a value greater than 0", - 0, G_MAXUINT32, 0, - G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); - - g_object_interface_install_property - (g_iface, - g_param_spec_boolean (MM_MODEM_VALID, - "Valid", - "Modem is valid", - FALSE, - G_PARAM_READABLE)); - - g_object_interface_install_property - (g_iface, - g_param_spec_uint (MM_MODEM_STATE, - "State", - "State", - MM_MODEM_STATE_UNKNOWN, - MM_MODEM_STATE_CONNECTED, - MM_MODEM_STATE_UNKNOWN, - G_PARAM_READWRITE)); - - g_object_interface_install_property - (g_iface, - g_param_spec_boolean (MM_MODEM_ENABLED, - "Enabled", - "Modem is enabled", - FALSE, - G_PARAM_READABLE)); - - g_object_interface_install_property - (g_iface, - g_param_spec_string (MM_MODEM_EQUIPMENT_IDENTIFIER, - "EquipmentIdentifier", - "The equipment identifier of the device", - NULL, - G_PARAM_READABLE)); - - g_object_interface_install_property - (g_iface, - g_param_spec_string (MM_MODEM_DEVICE_IDENTIFIER, - "DeviceIdentifier", - "A best-effort identifer of the device", - NULL, - G_PARAM_READABLE)); - - g_object_interface_install_property - (g_iface, - g_param_spec_string (MM_MODEM_UNLOCK_REQUIRED, - "UnlockRequired", - "Whether or not the modem requires an unlock " - "code to become usable, and if so, which unlock code is required", - NULL, - G_PARAM_READABLE)); - - g_object_interface_install_property - (g_iface, - g_param_spec_uint (MM_MODEM_UNLOCK_RETRIES, - "UnlockRetries", - "The remaining number of unlock attempts", - 0, G_MAXUINT32, 0, - G_PARAM_READABLE)); - - g_object_interface_install_property - (g_iface, - g_param_spec_boxed (MM_MODEM_PIN_RETRY_COUNTS, - "PinRetryCounts", - "The remaining number of attempts for each PIN type", - MM_MODEM_PIN_RETRY_COUNTS_PROP_TYPE, - G_PARAM_READABLE)); - - g_object_interface_install_property - (g_iface, - g_param_spec_uint (MM_MODEM_HW_VID, - "Hardware vendor ID", - "Hardware vendor ID", - 0, G_MAXUINT, 0, - G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); - - g_object_interface_install_property - (g_iface, - g_param_spec_uint (MM_MODEM_HW_PID, - "Hardware product ID", - "Hardware product ID", - 0, G_MAXUINT, 0, - G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); - - /* Signals */ - g_signal_new ("state-changed", - iface_type, - G_SIGNAL_RUN_FIRST, - G_STRUCT_OFFSET (MMModem, state_changed), - NULL, NULL, - mm_marshal_VOID__UINT_UINT_UINT, - G_TYPE_NONE, 3, - G_TYPE_UINT, G_TYPE_UINT, G_TYPE_UINT); - - initialized = TRUE; -} - -GType -mm_modem_get_type (void) -{ - static GType modem_type = 0; - - if (!G_UNLIKELY (modem_type)) { - const GTypeInfo modem_info = { - sizeof (MMModem), /* class_size */ - mm_modem_init, /* base_init */ - NULL, /* base_finalize */ - NULL, - NULL, /* class_finalize */ - NULL, /* class_data */ - 0, - 0, /* n_preallocs */ - NULL - }; - - modem_type = g_type_register_static (G_TYPE_INTERFACE, - "MMModem", - &modem_info, 0); - - g_type_interface_add_prerequisite (modem_type, G_TYPE_OBJECT); - - dbus_g_object_type_install_info (modem_type, &dbus_glib_mm_modem_object_info); - } - - return modem_type; -} |