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().
This commit is contained in:
@@ -1425,16 +1425,10 @@ static void
|
|||||||
dispose (GObject *object)
|
dispose (GObject *object)
|
||||||
{
|
{
|
||||||
MMBroadbandModem *self = MM_BROADBAND_MODEM (object);
|
MMBroadbandModem *self = MM_BROADBAND_MODEM (object);
|
||||||
GError *error = NULL;
|
|
||||||
|
|
||||||
if (self->priv->modem_dbus_skeleton) {
|
if (self->priv->modem_dbus_skeleton) {
|
||||||
if (!mm_iface_modem_shutdown (MM_IFACE_MODEM (object), &error)) {
|
|
||||||
/* TODO: Cancel initialization/enabling/disabling, whatever */
|
/* TODO: Cancel initialization/enabling/disabling, whatever */
|
||||||
mm_warn ("couldn't shutdown interface: '%s'",
|
mm_iface_modem_shutdown (MM_IFACE_MODEM (object));
|
||||||
error ? error->message : "unknown error");
|
|
||||||
g_clear_error (&error);
|
|
||||||
}
|
|
||||||
|
|
||||||
g_clear_object (&self->priv->modem_dbus_skeleton);
|
g_clear_object (&self->priv->modem_dbus_skeleton);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -35,13 +35,6 @@ static void interface_enabling_step (EnablingContext *ctx);
|
|||||||
typedef struct _DisablingContext DisablingContext;
|
typedef struct _DisablingContext DisablingContext;
|
||||||
static void interface_disabling_step (DisablingContext *ctx);
|
static void interface_disabling_step (DisablingContext *ctx);
|
||||||
|
|
||||||
typedef enum {
|
|
||||||
INTERFACE_STATUS_SHUTDOWN,
|
|
||||||
INTERFACE_STATUS_INITIALIZING,
|
|
||||||
INTERFACE_STATUS_INITIALIZED,
|
|
||||||
INTERFACE_STATUS_ENABLED,
|
|
||||||
} InterfaceStatus;
|
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
MmGdbusModem *skeleton;
|
MmGdbusModem *skeleton;
|
||||||
GDBusMethodInvocation *invocation;
|
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
|
gboolean
|
||||||
mm_iface_modem_initialize_finish (MMIfaceModem *self,
|
mm_iface_modem_initialize_finish (MMIfaceModem *self,
|
||||||
GAsyncResult *res,
|
GAsyncResult *res,
|
||||||
@@ -2098,6 +2060,8 @@ mm_iface_modem_initialize (MMIfaceModem *self,
|
|||||||
gpointer user_data)
|
gpointer user_data)
|
||||||
{
|
{
|
||||||
GSimpleAsyncResult *result;
|
GSimpleAsyncResult *result;
|
||||||
|
MmGdbusModem *skeleton = NULL;
|
||||||
|
MMModemState modem_state = MM_MODEM_STATE_UNKNOWN;
|
||||||
|
|
||||||
g_return_if_fail (MM_IS_IFACE_MODEM (self));
|
g_return_if_fail (MM_IS_IFACE_MODEM (self));
|
||||||
|
|
||||||
@@ -2107,13 +2071,6 @@ mm_iface_modem_initialize (MMIfaceModem *self,
|
|||||||
user_data,
|
user_data,
|
||||||
mm_iface_modem_initialize);
|
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? */
|
/* Did we already create it? */
|
||||||
g_object_get (self,
|
g_object_get (self,
|
||||||
MM_IFACE_MODEM_DBUS_SKELETON, &skeleton,
|
MM_IFACE_MODEM_DBUS_SKELETON, &skeleton,
|
||||||
@@ -2169,36 +2126,11 @@ mm_iface_modem_initialize (MMIfaceModem *self,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
case INTERFACE_STATUS_INITIALIZING:
|
void
|
||||||
g_simple_async_result_set_error (result,
|
mm_iface_modem_shutdown (MMIfaceModem *self)
|
||||||
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_return_if_reached ();
|
|
||||||
}
|
|
||||||
|
|
||||||
gboolean
|
|
||||||
mm_iface_modem_shutdown (MMIfaceModem *self,
|
|
||||||
GError **error)
|
|
||||||
{
|
{
|
||||||
g_return_val_if_fail (MM_IS_IFACE_MODEM (self), FALSE);
|
g_return_if_fail (MM_IS_IFACE_MODEM (self));
|
||||||
|
|
||||||
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 */
|
/* Remove SIM object */
|
||||||
g_object_set (self,
|
g_object_set (self,
|
||||||
MM_IFACE_MODEM_SIM, NULL,
|
MM_IFACE_MODEM_SIM, NULL,
|
||||||
@@ -2208,10 +2140,6 @@ mm_iface_modem_shutdown (MMIfaceModem *self,
|
|||||||
g_object_set (self,
|
g_object_set (self,
|
||||||
MM_IFACE_MODEM_DBUS_SKELETON, NULL,
|
MM_IFACE_MODEM_DBUS_SKELETON, NULL,
|
||||||
NULL);
|
NULL);
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
g_return_val_if_reached (FALSE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@@ -271,8 +271,7 @@ gboolean mm_iface_modem_disable_finish (MMIfaceModem *self,
|
|||||||
GError **error);
|
GError **error);
|
||||||
|
|
||||||
/* Shutdown Modem interface */
|
/* Shutdown Modem interface */
|
||||||
gboolean mm_iface_modem_shutdown (MMIfaceModem *self,
|
void mm_iface_modem_shutdown (MMIfaceModem *self);
|
||||||
GError **error);
|
|
||||||
|
|
||||||
/* Request unlock recheck.
|
/* Request unlock recheck.
|
||||||
* It will not only return the lock status, but also set the property values
|
* It will not only return the lock status, but also set the property values
|
||||||
|
Reference in New Issue
Block a user