diff --git a/src/mm-broadband-modem-qmi.c b/src/mm-broadband-modem-qmi.c index 9e28c308c949c35c5a5802dcff40e1ee7480ec65..6c3dd00aa0789080a884bc3746c2329bc6019494 100644 --- a/src/mm-broadband-modem-qmi.c +++ b/src/mm-broadband-modem-qmi.c @@ -178,18 +178,9 @@ struct _MMBroadbandModemQmiPrivate { guint profile_changed_indication_id; gint profile_changed_indication_ignored; - /* PS registration helpers when using NAS System Info and DSD + /* Packet service state helpers when using NAS System Info and DSD * (not applicable when using NAS Serving System) */ gboolean dsd_supported; - gboolean dsd_data_rat_available; - MMModem3gppRegistrationState system_info_registration_state_cs; - MMModem3gppRegistrationState system_info_registration_state_ps; - MMModem3gppRegistrationState system_info_registration_state_eps; - MMModem3gppRegistrationState system_info_registration_state_5gs; - MMModemAccessTechnology access_tech; - guint16 location_area_code; - guint16 tracking_area_code; - guint32 cell_id; }; /*****************************************************************************/ @@ -3662,45 +3653,6 @@ get_serving_system_3gpp_ready (QmiClientNas *client, qmi_message_nas_get_serving_system_output_unref (output); } -static void -consolidated_update_registration_state (MMBroadbandModemQmi *self) -{ - MMModem3gppRegistrationState state_ps; - MMModem3gppRegistrationState state_eps; - MMModem3gppRegistrationState state_5gs; - - /* CS state unaffected by DSD state */ - mm_iface_modem_3gpp_update_cs_registration_state (MM_IFACE_MODEM_3GPP (self), self->priv->system_info_registration_state_cs, TRUE); - - /* If DSD supported but data RAT not set, no transition to HOME/ROAMING, force IDLE */ - state_ps = self->priv->system_info_registration_state_ps; - state_eps = self->priv->system_info_registration_state_eps; - state_5gs = self->priv->system_info_registration_state_5gs; - if (self->priv->dsd_supported && !self->priv->dsd_data_rat_available) { - if ((state_ps == MM_MODEM_3GPP_REGISTRATION_STATE_HOME || state_ps == MM_MODEM_3GPP_REGISTRATION_STATE_ROAMING)) { - mm_obj_dbg (self, "fallback PS registration state to idle: DSD data RAT unavailable"); - state_ps = MM_MODEM_3GPP_REGISTRATION_STATE_IDLE; - } - if ((state_eps == MM_MODEM_3GPP_REGISTRATION_STATE_HOME || state_eps == MM_MODEM_3GPP_REGISTRATION_STATE_ROAMING)) { - mm_obj_dbg (self, "fallback EPS registration state to idle: DSD data RAT unavailable"); - state_eps = MM_MODEM_3GPP_REGISTRATION_STATE_IDLE; - } - if ((state_5gs == MM_MODEM_3GPP_REGISTRATION_STATE_HOME || state_5gs == MM_MODEM_3GPP_REGISTRATION_STATE_ROAMING)) { - mm_obj_dbg (self, "fallback 5GS registration state to idle: DSD data RAT unavailable"); - state_5gs = MM_MODEM_3GPP_REGISTRATION_STATE_IDLE; - } - } else if (!self->priv->dsd_supported) - mm_obj_dbg (self, "updating PS/EPS/5GS registration state: DSD unsupported"); - else if (self->priv->dsd_data_rat_available) - mm_obj_dbg (self, "updating PS/EPS/5GS registration state: DSD data RAT available"); - else - g_assert_not_reached (); - mm_iface_modem_3gpp_update_ps_registration_state (MM_IFACE_MODEM_3GPP (self), state_ps, TRUE); - mm_iface_modem_3gpp_update_eps_registration_state (MM_IFACE_MODEM_3GPP (self), state_eps, TRUE); - mm_iface_modem_3gpp_update_5gs_registration_state (MM_IFACE_MODEM_3GPP (self), state_5gs, TRUE); - mm_iface_modem_3gpp_apply_deferred_registration_state (MM_IFACE_MODEM_3GPP (self)); -} - static void common_process_system_info_3gpp (MMBroadbandModemQmi *self, QmiMessageNasGetSystemInfoOutput *response_output, @@ -3735,18 +3687,14 @@ common_process_system_info_3gpp (MMBroadbandModemQmi *self, self->priv->current_operator_id = operator_id; } - /* Store latest registration states and update them */ - self->priv->system_info_registration_state_cs = registration_state_cs; - self->priv->system_info_registration_state_ps = registration_state_ps; - self->priv->system_info_registration_state_eps = registration_state_eps; - self->priv->system_info_registration_state_5gs = registration_state_5gs; - consolidated_update_registration_state (self); + /* Update registration states */ + mm_iface_modem_3gpp_update_cs_registration_state (MM_IFACE_MODEM_3GPP (self), registration_state_cs, TRUE); + mm_iface_modem_3gpp_update_ps_registration_state (MM_IFACE_MODEM_3GPP (self), registration_state_ps, TRUE); + mm_iface_modem_3gpp_update_eps_registration_state (MM_IFACE_MODEM_3GPP (self), registration_state_eps, TRUE); + mm_iface_modem_3gpp_update_5gs_registration_state (MM_IFACE_MODEM_3GPP (self), registration_state_5gs, TRUE); + mm_iface_modem_3gpp_apply_deferred_registration_state (MM_IFACE_MODEM_3GPP (self)); - /* Store act and location info and update them */ - self->priv->access_tech = act; - self->priv->location_area_code = lac; - self->priv->tracking_area_code = tac; - self->priv->cell_id = cid; + /* Update act and location info */ mm_iface_modem_3gpp_update_access_technologies (MM_IFACE_MODEM_3GPP (self), act); mm_iface_modem_3gpp_update_location (MM_IFACE_MODEM_3GPP (self), lac, tac, cid); } @@ -3805,10 +3753,9 @@ common_process_system_status_3gpp (MMBroadbandModemQmi *self, } /* Store DSD data RAT availability and update PS/EPS/5GS states accordingly */ - self->priv->dsd_data_rat_available = data_rat_available; - consolidated_update_registration_state (self); - mm_iface_modem_3gpp_update_access_technologies (MM_IFACE_MODEM_3GPP (self), self->priv->access_tech); - mm_iface_modem_3gpp_update_location (MM_IFACE_MODEM_3GPP (self), self->priv->location_area_code, self->priv->tracking_area_code, self->priv->cell_id); + mm_iface_modem_3gpp_update_packet_service_state ( + MM_IFACE_MODEM_3GPP (self), + data_rat_available ? MM_MODEM_3GPP_PACKET_SERVICE_STATE_ATTACHED : MM_MODEM_3GPP_PACKET_SERVICE_STATE_DETACHED); } static void @@ -13601,11 +13548,6 @@ mm_broadband_modem_qmi_init (MMBroadbandModemQmi *self) self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, MM_TYPE_BROADBAND_MODEM_QMI, MMBroadbandModemQmiPrivate); - self->priv->system_info_registration_state_cs = MM_MODEM_3GPP_REGISTRATION_STATE_UNKNOWN; - self->priv->system_info_registration_state_ps = MM_MODEM_3GPP_REGISTRATION_STATE_UNKNOWN; - self->priv->system_info_registration_state_eps = MM_MODEM_3GPP_REGISTRATION_STATE_UNKNOWN; - self->priv->system_info_registration_state_5gs = MM_MODEM_3GPP_REGISTRATION_STATE_UNKNOWN; - self->priv->access_tech = MM_MODEM_ACCESS_TECHNOLOGY_UNKNOWN; } static void