modem: support SIM hot swap

BaseModem
  added reprobe property.

MMDevice
  added logic to recreate the modem if it is set invalid and "to reprobe"

MMBroadbandModem
 * added initialization step for SIM hot swap:
    1. keep dedicated ports open to listen to modem's unsolicited
    2. dedicated error management in case of initialization failure due to SIM missing
 * added function to be called in order to act upon SIM insertion/removal:
    1. close dedicated ports
    2. set the modem to be reprobed
    3. disable modem
 * added SIM HOT SWAP boolean property

MMIfaceModem
 * added initialization step for SIM hot swap, if supported by the plugin
 * dedicated error management in case of initialization failure due to SIM missing
This commit is contained in:
Carlo Lobrano
2016-08-10 09:39:27 +02:00
committed by Aleksander Morgado
parent 3047522b2e
commit 60f4f9e57d
7 changed files with 233 additions and 9 deletions
+26
View File
@@ -47,6 +47,7 @@ enum {
PROP_VENDOR_ID,
PROP_PRODUCT_ID,
PROP_CONNECTION,
PROP_REPROBE,
PROP_LAST
};
@@ -70,6 +71,7 @@ struct _MMBaseModemPrivate {
gboolean hotplugged;
gboolean valid;
gboolean reprobe;
guint max_timeouts;
@@ -392,6 +394,24 @@ mm_base_modem_set_valid (MMBaseModem *self,
}
}
void
mm_base_modem_set_reprobe (MMBaseModem *self,
gboolean reprobe)
{
g_return_if_fail (MM_IS_BASE_MODEM (self));
self->priv->reprobe = reprobe;
}
gboolean
mm_base_modem_get_reprobe (MMBaseModem *self)
{
g_return_val_if_fail (MM_IS_BASE_MODEM (self), FALSE);
return self->priv->reprobe;
}
gboolean
mm_base_modem_get_valid (MMBaseModem *self)
{
@@ -1295,6 +1315,9 @@ set_property (GObject *object,
case PROP_VALID:
mm_base_modem_set_valid (self, g_value_get_boolean (value));
break;
case PROP_REPROBE:
mm_base_modem_set_reprobe (self, g_value_get_boolean (value));
break;
case PROP_MAX_TIMEOUTS:
self->priv->max_timeouts = g_value_get_uint (value);
break;
@@ -1338,6 +1361,9 @@ get_property (GObject *object,
case PROP_VALID:
g_value_set_boolean (value, self->priv->valid);
break;
case PROP_REPROBE:
g_value_set_boolean (value, self->priv->reprobe);
break;
case PROP_MAX_TIMEOUTS:
g_value_set_uint (value, self->priv->max_timeouts);
break;