diff options
author | Aleksander Morgado <aleksander@lanedo.com> | 2011-11-28 12:21:48 +0100 |
---|---|---|
committer | Aleksander Morgado <aleksander@lanedo.com> | 2012-03-15 14:14:28 +0100 |
commit | b9448b83cb0d5165b3e4002a3c9cea4fa7a153b1 (patch) | |
tree | bb35b81b48af0188de42fedf74a17afb01dc55f8 /src | |
parent | d2d9251733cc4c8e6b5c10fd79341c2f0be08726 (diff) |
iface-modem: simplify interface handling
Interfaces won't have a 'status', just initialize(), enable(), disable() and
shutdown().
Also, shutdown() should never fail. We will take care of cancelling any ongoing
operation afterwards, before calling shutdown().
Diffstat (limited to 'src')
-rw-r--r-- | src/mm-broadband-modem.c | 10 | ||||
-rw-r--r-- | src/mm-iface-modem.c | 200 | ||||
-rw-r--r-- | src/mm-iface-modem.h | 3 |
3 files changed, 67 insertions, 146 deletions
diff --git a/src/mm-broadband-modem.c b/src/mm-broadband-modem.c index ad73d232..192c32c1 100644 --- a/src/mm-broadband-modem.c +++ b/src/mm-broadband-modem.c @@ -1425,16 +1425,10 @@ static void dispose (GObject *object) { MMBroadbandModem *self = MM_BROADBAND_MODEM (object); - GError *error = NULL; if (self->priv->modem_dbus_skeleton) { - if (!mm_iface_modem_shutdown (MM_IFACE_MODEM (object), &error)) { - /* TODO: Cancel initialization/enabling/disabling, whatever */ - mm_warn ("couldn't shutdown interface: '%s'", - error ? error->message : "unknown error"); - g_clear_error (&error); - } - + /* TODO: Cancel initialization/enabling/disabling, whatever */ + mm_iface_modem_shutdown (MM_IFACE_MODEM (object)); g_clear_object (&self->priv->modem_dbus_skeleton); } diff --git a/src/mm-iface-modem.c b/src/mm-iface-modem.c index 49ef9d0a..2e11e432 100644 --- a/src/mm-iface-modem.c +++ b/src/mm-iface-modem.c @@ -35,13 +35,6 @@ static void interface_enabling_step (EnablingContext *ctx); typedef struct _DisablingContext DisablingContext; static void interface_disabling_step (DisablingContext *ctx); -typedef enum { - INTERFACE_STATUS_SHUTDOWN, - INTERFACE_STATUS_INITIALIZING, - INTERFACE_STATUS_INITIALIZED, - INTERFACE_STATUS_ENABLED, -} InterfaceStatus; - typedef struct { MmGdbusModem *skeleton; GDBusMethodInvocation *invocation; @@ -1981,37 +1974,6 @@ interface_initialization (MMIfaceModem *self, /*****************************************************************************/ - -static InterfaceStatus -get_status (MMIfaceModem *self) -{ - GObject *skeleton = NULL; - MMModemState modem_state; - - /* Are we already disabled? */ - g_object_get (self, - MM_IFACE_MODEM_DBUS_SKELETON, &skeleton, - NULL); - if (!skeleton) - return INTERFACE_STATUS_SHUTDOWN; - g_object_unref (skeleton); - - /* Are we being initialized? (interface not yet exported) */ - skeleton = G_OBJECT (mm_gdbus_object_get_modem (MM_GDBUS_OBJECT (self))); - if (!skeleton) - return INTERFACE_STATUS_INITIALIZING; - - modem_state = MM_MODEM_STATE_UNKNOWN; - g_object_get (self, - MM_IFACE_MODEM_STATE, &modem_state, - NULL); - g_object_unref (skeleton); - - return (modem_state > MM_MODEM_STATE_DISABLED ? - INTERFACE_STATUS_ENABLED : - INTERFACE_STATUS_INITIALIZED); -} - gboolean mm_iface_modem_initialize_finish (MMIfaceModem *self, GAsyncResult *res, @@ -2098,6 +2060,8 @@ mm_iface_modem_initialize (MMIfaceModem *self, gpointer user_data) { GSimpleAsyncResult *result; + MmGdbusModem *skeleton = NULL; + MMModemState modem_state = MM_MODEM_STATE_UNKNOWN; g_return_if_fail (MM_IS_IFACE_MODEM (self)); @@ -2107,111 +2071,75 @@ mm_iface_modem_initialize (MMIfaceModem *self, user_data, mm_iface_modem_initialize); - switch (get_status (self)) { - case INTERFACE_STATUS_ENABLED: - case INTERFACE_STATUS_INITIALIZED: - case INTERFACE_STATUS_SHUTDOWN: { - MmGdbusModem *skeleton = NULL; - MMModemState modem_state = MM_MODEM_STATE_UNKNOWN; - - /* Did we already create it? */ - g_object_get (self, - MM_IFACE_MODEM_DBUS_SKELETON, &skeleton, - MM_IFACE_MODEM_STATE, &modem_state, - NULL); - if (!skeleton) { - skeleton = mm_gdbus_modem_skeleton_new (); - - /* Set all initial property defaults */ - mm_gdbus_modem_set_sim (skeleton, NULL); - mm_gdbus_modem_set_modem_capabilities (skeleton, MM_MODEM_CAPABILITY_NONE); - mm_gdbus_modem_set_max_bearers (skeleton, 0); - mm_gdbus_modem_set_max_active_bearers (skeleton, 0); - mm_gdbus_modem_set_manufacturer (skeleton, NULL); - mm_gdbus_modem_set_model (skeleton, NULL); - mm_gdbus_modem_set_revision (skeleton, NULL); - mm_gdbus_modem_set_device_identifier (skeleton, NULL); - mm_gdbus_modem_set_device (skeleton, NULL); - mm_gdbus_modem_set_driver (skeleton, NULL); - mm_gdbus_modem_set_plugin (skeleton, NULL); - mm_gdbus_modem_set_equipment_identifier (skeleton, NULL); - mm_gdbus_modem_set_unlock_required (skeleton, MM_MODEM_LOCK_UNKNOWN); - mm_gdbus_modem_set_unlock_retries (skeleton, 0); - mm_gdbus_modem_set_access_technology (skeleton, MM_MODEM_ACCESS_TECH_UNKNOWN); - mm_gdbus_modem_set_signal_quality (skeleton, g_variant_new ("(ub)", 0, FALSE)); - mm_gdbus_modem_set_supported_modes (skeleton, MM_MODEM_MODE_NONE); - mm_gdbus_modem_set_allowed_modes (skeleton, MM_MODEM_MODE_ANY); - mm_gdbus_modem_set_preferred_mode (skeleton, MM_MODEM_MODE_NONE); - mm_gdbus_modem_set_supported_bands (skeleton, MM_MODEM_BAND_UNKNOWN); - mm_gdbus_modem_set_allowed_bands (skeleton, MM_MODEM_BAND_ANY); - - /* Bind our State property */ - g_object_bind_property (self, MM_IFACE_MODEM_STATE, - skeleton, "state", - G_BINDING_DEFAULT); - /* Bind our Capabilities property */ - g_object_bind_property (self, MM_IFACE_MODEM_CURRENT_CAPABILITIES, - skeleton, "current-capabilities", - G_BINDING_DEFAULT); - - g_object_set (self, - MM_IFACE_MODEM_STATE, modem_state, - MM_IFACE_MODEM_CURRENT_CAPABILITIES, MM_MODEM_CAPABILITY_NONE, - MM_IFACE_MODEM_DBUS_SKELETON, skeleton, - NULL); - } - - /* Perform async initialization here */ - interface_initialization (self, - (GAsyncReadyCallback)interface_initialization_ready, - result); - g_object_unref (skeleton); - return; - } + /* Did we already create it? */ + g_object_get (self, + MM_IFACE_MODEM_DBUS_SKELETON, &skeleton, + MM_IFACE_MODEM_STATE, &modem_state, + NULL); + if (!skeleton) { + skeleton = mm_gdbus_modem_skeleton_new (); + + /* Set all initial property defaults */ + mm_gdbus_modem_set_sim (skeleton, NULL); + mm_gdbus_modem_set_modem_capabilities (skeleton, MM_MODEM_CAPABILITY_NONE); + mm_gdbus_modem_set_max_bearers (skeleton, 0); + mm_gdbus_modem_set_max_active_bearers (skeleton, 0); + mm_gdbus_modem_set_manufacturer (skeleton, NULL); + mm_gdbus_modem_set_model (skeleton, NULL); + mm_gdbus_modem_set_revision (skeleton, NULL); + mm_gdbus_modem_set_device_identifier (skeleton, NULL); + mm_gdbus_modem_set_device (skeleton, NULL); + mm_gdbus_modem_set_driver (skeleton, NULL); + mm_gdbus_modem_set_plugin (skeleton, NULL); + mm_gdbus_modem_set_equipment_identifier (skeleton, NULL); + mm_gdbus_modem_set_unlock_required (skeleton, MM_MODEM_LOCK_UNKNOWN); + mm_gdbus_modem_set_unlock_retries (skeleton, 0); + mm_gdbus_modem_set_access_technology (skeleton, MM_MODEM_ACCESS_TECH_UNKNOWN); + mm_gdbus_modem_set_signal_quality (skeleton, g_variant_new ("(ub)", 0, FALSE)); + mm_gdbus_modem_set_supported_modes (skeleton, MM_MODEM_MODE_NONE); + mm_gdbus_modem_set_allowed_modes (skeleton, MM_MODEM_MODE_ANY); + mm_gdbus_modem_set_preferred_mode (skeleton, MM_MODEM_MODE_NONE); + mm_gdbus_modem_set_supported_bands (skeleton, MM_MODEM_BAND_UNKNOWN); + mm_gdbus_modem_set_allowed_bands (skeleton, MM_MODEM_BAND_ANY); + + /* Bind our State property */ + g_object_bind_property (self, MM_IFACE_MODEM_STATE, + skeleton, "state", + G_BINDING_DEFAULT); + /* Bind our Capabilities property */ + g_object_bind_property (self, MM_IFACE_MODEM_CURRENT_CAPABILITIES, + skeleton, "current-capabilities", + G_BINDING_DEFAULT); - case INTERFACE_STATUS_INITIALIZING: - g_simple_async_result_set_error (result, - MM_CORE_ERROR, - MM_CORE_ERROR_IN_PROGRESS, - "Interface is already being enabled"); - g_simple_async_result_complete_in_idle (result); - g_object_unref (result); - return; + g_object_set (self, + MM_IFACE_MODEM_STATE, modem_state, + MM_IFACE_MODEM_CURRENT_CAPABILITIES, MM_MODEM_CAPABILITY_NONE, + MM_IFACE_MODEM_DBUS_SKELETON, skeleton, + NULL); } - g_return_if_reached (); + /* Perform async initialization here */ + interface_initialization (self, + (GAsyncReadyCallback)interface_initialization_ready, + result); + g_object_unref (skeleton); + return; } -gboolean -mm_iface_modem_shutdown (MMIfaceModem *self, - GError **error) +void +mm_iface_modem_shutdown (MMIfaceModem *self) { - g_return_val_if_fail (MM_IS_IFACE_MODEM (self), FALSE); - - switch (get_status (self)) { - case INTERFACE_STATUS_SHUTDOWN: - return TRUE; - case INTERFACE_STATUS_INITIALIZING: - g_set_error (error, - MM_CORE_ERROR, - MM_CORE_ERROR_IN_PROGRESS, - "Iinterface being currently initialized"); - return FALSE; - case INTERFACE_STATUS_ENABLED: - case INTERFACE_STATUS_INITIALIZED: - /* Remove SIM object */ - g_object_set (self, - MM_IFACE_MODEM_SIM, NULL, - NULL); - /* Unexport DBus interface and remove the skeleton */ - mm_gdbus_object_skeleton_set_modem (MM_GDBUS_OBJECT_SKELETON (self), NULL); - g_object_set (self, - MM_IFACE_MODEM_DBUS_SKELETON, NULL, - NULL); - return TRUE; - } + g_return_if_fail (MM_IS_IFACE_MODEM (self)); - g_return_val_if_reached (FALSE); + /* Remove SIM object */ + g_object_set (self, + MM_IFACE_MODEM_SIM, NULL, + NULL); + /* Unexport DBus interface and remove the skeleton */ + mm_gdbus_object_skeleton_set_modem (MM_GDBUS_OBJECT_SKELETON (self), NULL); + g_object_set (self, + MM_IFACE_MODEM_DBUS_SKELETON, NULL, + NULL); } diff --git a/src/mm-iface-modem.h b/src/mm-iface-modem.h index ee994cd1..b743faa9 100644 --- a/src/mm-iface-modem.h +++ b/src/mm-iface-modem.h @@ -271,8 +271,7 @@ gboolean mm_iface_modem_disable_finish (MMIfaceModem *self, GError **error); /* Shutdown Modem interface */ -gboolean mm_iface_modem_shutdown (MMIfaceModem *self, - GError **error); +void mm_iface_modem_shutdown (MMIfaceModem *self); /* Request unlock recheck. * It will not only return the lock status, but also set the property values |