iface-modem-3gpp: don't force auto registration if already registered
In mm_iface_modem_3gpp_register_in_network() when deciding whether to force automatic registration or not, check whether the modem is already registered in a network. Just checking whether we have a valid operator code is not sufficient, as some modems (ublox Toby R2xx) don't always return an operator name/code even when registered.
This commit is contained in:
@@ -119,6 +119,17 @@ get_registration_state_context (MMIfaceModem3gpp *self)
|
|||||||
return ctx;
|
return ctx;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
reg_state_is_registered (MMModem3gppRegistrationState state)
|
||||||
|
{
|
||||||
|
return state == MM_MODEM_3GPP_REGISTRATION_STATE_HOME ||
|
||||||
|
state == MM_MODEM_3GPP_REGISTRATION_STATE_ROAMING ||
|
||||||
|
state == MM_MODEM_3GPP_REGISTRATION_STATE_HOME_SMS_ONLY ||
|
||||||
|
state == MM_MODEM_3GPP_REGISTRATION_STATE_ROAMING_SMS_ONLY ||
|
||||||
|
state == MM_MODEM_3GPP_REGISTRATION_STATE_HOME_CSFB_NOT_PREFERRED ||
|
||||||
|
state == MM_MODEM_3GPP_REGISTRATION_STATE_ROAMING_CSFB_NOT_PREFERRED;
|
||||||
|
}
|
||||||
|
|
||||||
static MMModem3gppRegistrationState
|
static MMModem3gppRegistrationState
|
||||||
get_consolidated_reg_state (RegistrationStateContext *ctx)
|
get_consolidated_reg_state (RegistrationStateContext *ctx)
|
||||||
{
|
{
|
||||||
@@ -307,12 +318,7 @@ run_registration_checks_ready (MMIfaceModem3gpp *self,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* If we got registered, end registration checks */
|
/* If we got registered, end registration checks */
|
||||||
if (current_registration_state == MM_MODEM_3GPP_REGISTRATION_STATE_HOME ||
|
if (reg_state_is_registered (current_registration_state)) {
|
||||||
current_registration_state == MM_MODEM_3GPP_REGISTRATION_STATE_ROAMING ||
|
|
||||||
current_registration_state == MM_MODEM_3GPP_REGISTRATION_STATE_HOME_SMS_ONLY ||
|
|
||||||
current_registration_state == MM_MODEM_3GPP_REGISTRATION_STATE_ROAMING_SMS_ONLY ||
|
|
||||||
current_registration_state == MM_MODEM_3GPP_REGISTRATION_STATE_HOME_CSFB_NOT_PREFERRED ||
|
|
||||||
current_registration_state == MM_MODEM_3GPP_REGISTRATION_STATE_ROAMING_CSFB_NOT_PREFERRED) {
|
|
||||||
/* Request immediate access tech and signal update: we may have changed
|
/* Request immediate access tech and signal update: we may have changed
|
||||||
* from home to roaming or viceversa, both registered states, so there
|
* from home to roaming or viceversa, both registered states, so there
|
||||||
* wouldn't be an explicit refresh triggered from the modem interface as
|
* wouldn't be an explicit refresh triggered from the modem interface as
|
||||||
@@ -436,9 +442,11 @@ mm_iface_modem_3gpp_register_in_network (MMIfaceModem3gpp *self,
|
|||||||
}
|
}
|
||||||
/* Automatic registration requested? */
|
/* Automatic registration requested? */
|
||||||
else {
|
else {
|
||||||
|
MMModem3gppRegistrationState reg_state = mm_gdbus_modem3gpp_get_registration_state (ctx->skeleton);
|
||||||
|
|
||||||
/* If the modem is already registered and the last time it was asked
|
/* If the modem is already registered and the last time it was asked
|
||||||
* automatic registration, we're done */
|
* automatic registration, we're done */
|
||||||
if (current_operator_code &&
|
if ((current_operator_code || reg_state_is_registered (reg_state)) &&
|
||||||
!registration_state_context->manual_registration) {
|
!registration_state_context->manual_registration) {
|
||||||
mm_dbg ("Already registered in network '%s',"
|
mm_dbg ("Already registered in network '%s',"
|
||||||
" automatic registration not launched...",
|
" automatic registration not launched...",
|
||||||
@@ -1195,13 +1203,7 @@ mm_iface_modem_3gpp_update_access_technologies (MMIfaceModem3gpp *self,
|
|||||||
|
|
||||||
/* Even if registration state didn't change, report access technology,
|
/* Even if registration state didn't change, report access technology,
|
||||||
* but only if something valid to report */
|
* but only if something valid to report */
|
||||||
if (state == MM_MODEM_3GPP_REGISTRATION_STATE_HOME ||
|
if (reg_state_is_registered (state) || ctx->reloading_registration_info) {
|
||||||
state == MM_MODEM_3GPP_REGISTRATION_STATE_ROAMING ||
|
|
||||||
state == MM_MODEM_3GPP_REGISTRATION_STATE_HOME_SMS_ONLY ||
|
|
||||||
state == MM_MODEM_3GPP_REGISTRATION_STATE_ROAMING_SMS_ONLY ||
|
|
||||||
state == MM_MODEM_3GPP_REGISTRATION_STATE_HOME_CSFB_NOT_PREFERRED ||
|
|
||||||
state == MM_MODEM_3GPP_REGISTRATION_STATE_ROAMING_CSFB_NOT_PREFERRED ||
|
|
||||||
ctx->reloading_registration_info) {
|
|
||||||
if (access_tech != MM_MODEM_ACCESS_TECHNOLOGY_UNKNOWN)
|
if (access_tech != MM_MODEM_ACCESS_TECHNOLOGY_UNKNOWN)
|
||||||
mm_iface_modem_update_access_technologies (MM_IFACE_MODEM (self),
|
mm_iface_modem_update_access_technologies (MM_IFACE_MODEM (self),
|
||||||
access_tech,
|
access_tech,
|
||||||
@@ -1234,13 +1236,7 @@ mm_iface_modem_3gpp_update_location (MMIfaceModem3gpp *self,
|
|||||||
* location updates, but only if something valid to report. For the case
|
* location updates, but only if something valid to report. For the case
|
||||||
* where we're registering (loading current registration info after a state
|
* where we're registering (loading current registration info after a state
|
||||||
* change to registered), we also allow LAC/CID updates. */
|
* change to registered), we also allow LAC/CID updates. */
|
||||||
if (ctx->reloading_registration_info ||
|
if (reg_state_is_registered (state) || ctx->reloading_registration_info) {
|
||||||
state == MM_MODEM_3GPP_REGISTRATION_STATE_HOME ||
|
|
||||||
state == MM_MODEM_3GPP_REGISTRATION_STATE_ROAMING ||
|
|
||||||
state == MM_MODEM_3GPP_REGISTRATION_STATE_HOME_SMS_ONLY ||
|
|
||||||
state == MM_MODEM_3GPP_REGISTRATION_STATE_ROAMING_SMS_ONLY ||
|
|
||||||
state == MM_MODEM_3GPP_REGISTRATION_STATE_HOME_CSFB_NOT_PREFERRED ||
|
|
||||||
state == MM_MODEM_3GPP_REGISTRATION_STATE_ROAMING_CSFB_NOT_PREFERRED) {
|
|
||||||
if (location_area_code > 0 && cell_id > 0)
|
if (location_area_code > 0 && cell_id > 0)
|
||||||
mm_iface_modem_location_3gpp_update_lac_ci (MM_IFACE_MODEM_LOCATION (self),
|
mm_iface_modem_location_3gpp_update_lac_ci (MM_IFACE_MODEM_LOCATION (self),
|
||||||
location_area_code,
|
location_area_code,
|
||||||
@@ -1292,12 +1288,7 @@ update_non_registered_state (MMIfaceModem3gpp *self,
|
|||||||
* sent by the carrier during registration or b) by looking at the
|
* sent by the carrier during registration or b) by looking at the
|
||||||
* registration reject error code. If b), we want to make sure we
|
* registration reject error code. If b), we want to make sure we
|
||||||
* preserve the subscription state */
|
* preserve the subscription state */
|
||||||
if (old_state == MM_MODEM_3GPP_REGISTRATION_STATE_HOME ||
|
if (reg_state_is_registered (old_state))
|
||||||
old_state == MM_MODEM_3GPP_REGISTRATION_STATE_ROAMING ||
|
|
||||||
old_state == MM_MODEM_3GPP_REGISTRATION_STATE_HOME_SMS_ONLY ||
|
|
||||||
old_state == MM_MODEM_3GPP_REGISTRATION_STATE_ROAMING_SMS_ONLY ||
|
|
||||||
old_state == MM_MODEM_3GPP_REGISTRATION_STATE_HOME_CSFB_NOT_PREFERRED ||
|
|
||||||
old_state == MM_MODEM_3GPP_REGISTRATION_STATE_ROAMING_CSFB_NOT_PREFERRED)
|
|
||||||
clear_subscription_state (self);
|
clear_subscription_state (self);
|
||||||
|
|
||||||
/* The property in the interface is bound to the property
|
/* The property in the interface is bound to the property
|
||||||
@@ -1334,12 +1325,7 @@ update_registration_state (MMIfaceModem3gpp *self,
|
|||||||
if (new_state == old_state)
|
if (new_state == old_state)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (new_state == MM_MODEM_3GPP_REGISTRATION_STATE_HOME ||
|
if (reg_state_is_registered (new_state)) {
|
||||||
new_state == MM_MODEM_3GPP_REGISTRATION_STATE_ROAMING ||
|
|
||||||
new_state == MM_MODEM_3GPP_REGISTRATION_STATE_HOME_SMS_ONLY ||
|
|
||||||
new_state == MM_MODEM_3GPP_REGISTRATION_STATE_ROAMING_SMS_ONLY ||
|
|
||||||
new_state == MM_MODEM_3GPP_REGISTRATION_STATE_HOME_CSFB_NOT_PREFERRED ||
|
|
||||||
new_state == MM_MODEM_3GPP_REGISTRATION_STATE_ROAMING_CSFB_NOT_PREFERRED) {
|
|
||||||
MMModemState modem_state;
|
MMModemState modem_state;
|
||||||
|
|
||||||
/* If already reloading registration info, skip it */
|
/* If already reloading registration info, skip it */
|
||||||
|
Reference in New Issue
Block a user