If an MBIM modem supports unsolicited notifications for subscriber ready status, we can use it to detect when SIM cards have been removed and reinserted. Upon detection we should re- probe the modem so that we can configure it for the new SIM. --- src/mm-broadband-modem-mbim.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-)
diff --git a/src/mm-broadband-modem-mbim.c b/src/mm-broadband-modem-mbim.c index 0d1126d4..c95255d9 100644 --- a/src/mm-broadband-modem-mbim.c +++ b/src/mm-broadband-modem-mbim.c @@ -88,6 +88,9 @@ struct _MMBroadbandModemMbimPrivate { /* Access technology updates */ MbimDataClass available_data_classes; MbimDataClass highest_available_data_class; + + /* For checking whether the SIM has been hot swapped */ + MbimSubscriberReadyState last_ready_state; }; /*****************************************************************************/ @@ -2041,8 +2044,18 @@ basic_connect_notification_subscriber_ready_status (MMBroadbandModemMbim *self, if (ready_state == MBIM_SUBSCRIBER_READY_STATE_INITIALIZED) mm_iface_modem_update_own_numbers (MM_IFACE_MODEM (self), telephone_numbers); - /* TODO: handle SIM removal using MBIM_SUBSCRIBER_READY_STATE_SIM_NOT_INSERTED */ + if (self->priv->last_ready_state != MBIM_SUBSCRIBER_READY_STATE_SIM_NOT_INSERTED && + ready_state == MBIM_SUBSCRIBER_READY_STATE_SIM_NOT_INSERTED) { + /* SIM has been removed */ + mm_iface_modem_update_failed_state (MM_IFACE_MODEM (self), + MM_MODEM_STATE_FAILED_REASON_SIM_MISSING); + } else if (self->priv->last_ready_state == MBIM_SUBSCRIBER_READY_STATE_SIM_NOT_INSERTED && + ready_state != MBIM_SUBSCRIBER_READY_STATE_SIM_NOT_INSERTED) { + /* SIM has been reinserted */ + mm_broadband_modem_update_sim_hot_swap_detected (MM_BROADBAND_MODEM (self)); + } + self->priv->last_ready_state = ready_state; g_strfreev (telephone_numbers); } @@ -3165,6 +3178,7 @@ mm_broadband_modem_mbim_new (const gchar *device, MM_BASE_MODEM_PLUGIN, plugin, MM_BASE_MODEM_VENDOR_ID, vendor_id, MM_BASE_MODEM_PRODUCT_ID, product_id, + MM_IFACE_MODEM_SIM_HOT_SWAP_SUPPORTED, TRUE, NULL); } -- 2.12.2 _______________________________________________ ModemManager-devel mailing list ModemManager-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/modemmanager-devel