aboutsummaryrefslogtreecommitdiff
path: root/src/mm-broadband-modem.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mm-broadband-modem.c')
-rw-r--r--src/mm-broadband-modem.c108
1 files changed, 42 insertions, 66 deletions
diff --git a/src/mm-broadband-modem.c b/src/mm-broadband-modem.c
index 244aed09..9e5b5528 100644
--- a/src/mm-broadband-modem.c
+++ b/src/mm-broadband-modem.c
@@ -91,8 +91,6 @@ struct _MMBroadbandModemPrivate {
/* 3GPP registration helpers */
GPtrArray *reg_regex;
- MMModem3gppRegistrationState reg_cs;
- MMModem3gppRegistrationState reg_ps;
gboolean manual_reg;
GCancellable *pending_reg_cancellable;
};
@@ -100,8 +98,6 @@ struct _MMBroadbandModemPrivate {
/*****************************************************************************/
/* CREATE BEARER */
-static MMModem3gppRegistrationState get_consolidated_reg_state (MMBroadbandModem *self);
-
static MMBearer *
modem_create_bearer_finish (MMIfaceModem *self,
GAsyncResult *res,
@@ -170,8 +166,6 @@ modem_create_bearer (MMIfaceModem *self,
/*****************************************************************************/
/* CREATE SIM */
-static MMModem3gppRegistrationState get_consolidated_reg_state (MMBroadbandModem *self);
-
static MMSim *
modem_create_sim_finish (MMIfaceModem *self,
GAsyncResult *res,
@@ -1823,34 +1817,6 @@ load_operator_name (MMIfaceModem3gpp *self,
/*****************************************************************************/
/* Unsolicited registration messages handling (3GPP) */
-/* static void clear_previous_registration_request (MMBroadbandModem *self, */
-/* gboolean complete_with_cancel); */
-
-static MMModem3gppRegistrationState
-get_consolidated_reg_state (MMBroadbandModem *self)
-{
- /* Some devices (Blackberries for example) will respond to +CGREG, but
- * return ERROR for +CREG, probably because their firmware is just stupid.
- * So here we prefer the +CREG response, but if we never got a successful
- * +CREG response, we'll take +CGREG instead.
- */
- if (self->priv->reg_cs == MM_MODEM_3GPP_REGISTRATION_STATE_HOME ||
- self->priv->reg_cs == MM_MODEM_3GPP_REGISTRATION_STATE_ROAMING)
- return self->priv->reg_cs;
-
- if (self->priv->reg_ps == MM_MODEM_3GPP_REGISTRATION_STATE_HOME ||
- self->priv->reg_ps == MM_MODEM_3GPP_REGISTRATION_STATE_ROAMING)
- return self->priv->reg_ps;
-
- if (self->priv->reg_cs == MM_MODEM_3GPP_REGISTRATION_STATE_SEARCHING)
- return self->priv->reg_cs;
-
- if (self->priv->reg_ps == MM_MODEM_3GPP_REGISTRATION_STATE_SEARCHING)
- return self->priv->reg_ps;
-
- return self->priv->reg_cs;
-}
-
static gboolean
setup_unsolicited_registration_finish (MMIfaceModem3gpp *self,
GAsyncResult *res,
@@ -1883,16 +1849,15 @@ reg_state_changed (MMAtSerialPort *port,
return;
}
+ /* Report new registration state */
if (cgreg)
- self->priv->reg_ps = state;
+ mm_iface_modem_3gpp_update_ps_registration_state (MM_IFACE_MODEM_3GPP (self),
+ state,
+ act);
else
- self->priv->reg_cs = state;
-
- /* Report new registration state */
- state = get_consolidated_reg_state (self);
- mm_iface_modem_3gpp_update_registration_state (MM_IFACE_MODEM_3GPP (self),
- state,
- act);
+ mm_iface_modem_3gpp_update_cs_registration_state (MM_IFACE_MODEM_3GPP (self),
+ state,
+ act);
/* TODO: report LAC/CI location */
/* update_lac_ci (self, lac, cell_id, cgreg ? 1 : 0); */
@@ -2104,9 +2069,12 @@ run_all_registration_checks_ready (MMBroadbandModem *self,
if (error) {
mm_dbg ("Registration check failed: '%s'", error->message);
- mm_iface_modem_3gpp_update_registration_state (MM_IFACE_MODEM_3GPP (self),
- MM_MODEM_3GPP_REGISTRATION_STATE_IDLE,
- MM_MODEM_ACCESS_TECHNOLOGY_UNKNOWN);
+ mm_iface_modem_3gpp_update_ps_registration_state (MM_IFACE_MODEM_3GPP (self),
+ MM_MODEM_3GPP_REGISTRATION_STATE_IDLE,
+ MM_MODEM_ACCESS_TECHNOLOGY_UNKNOWN);
+ mm_iface_modem_3gpp_update_cs_registration_state (MM_IFACE_MODEM_3GPP (self),
+ MM_MODEM_3GPP_REGISTRATION_STATE_IDLE,
+ MM_MODEM_ACCESS_TECHNOLOGY_UNKNOWN);
g_simple_async_result_take_error (ctx->result, error);
register_in_network_context_complete_and_free (ctx);
return;
@@ -2123,9 +2091,12 @@ run_all_registration_checks_ready (MMBroadbandModem *self,
/* Don't spent too much time waiting to get registered */
if (g_timer_elapsed (ctx->timer, NULL) > MAX_REGISTRATION_CHECK_WAIT_TIME) {
mm_dbg ("Registration check timed out");
- mm_iface_modem_3gpp_update_registration_state (MM_IFACE_MODEM_3GPP (self),
- MM_MODEM_3GPP_REGISTRATION_STATE_IDLE,
- MM_MODEM_ACCESS_TECHNOLOGY_UNKNOWN);
+ mm_iface_modem_3gpp_update_cs_registration_state (MM_IFACE_MODEM_3GPP (self),
+ MM_MODEM_3GPP_REGISTRATION_STATE_IDLE,
+ MM_MODEM_ACCESS_TECHNOLOGY_UNKNOWN);
+ mm_iface_modem_3gpp_update_ps_registration_state (MM_IFACE_MODEM_3GPP (self),
+ MM_MODEM_3GPP_REGISTRATION_STATE_IDLE,
+ MM_MODEM_ACCESS_TECHNOLOGY_UNKNOWN);
g_simple_async_result_take_error (
ctx->result,
mm_mobile_equipment_error_for_code (MM_MOBILE_EQUIPMENT_ERROR_NETWORK_TIMEOUT));
@@ -2156,9 +2127,12 @@ register_in_network_ready (MMBroadbandModem *self,
if (error) {
/* Propagate error in COPS, if any */
- mm_iface_modem_3gpp_update_registration_state (MM_IFACE_MODEM_3GPP (self),
- MM_MODEM_3GPP_REGISTRATION_STATE_IDLE,
- MM_MODEM_ACCESS_TECHNOLOGY_UNKNOWN);
+ mm_iface_modem_3gpp_update_cs_registration_state (MM_IFACE_MODEM_3GPP (self),
+ MM_MODEM_3GPP_REGISTRATION_STATE_IDLE,
+ MM_MODEM_ACCESS_TECHNOLOGY_UNKNOWN);
+ mm_iface_modem_3gpp_update_ps_registration_state (MM_IFACE_MODEM_3GPP (self),
+ MM_MODEM_3GPP_REGISTRATION_STATE_IDLE,
+ MM_MODEM_ACCESS_TECHNOLOGY_UNKNOWN);
g_simple_async_result_take_error (ctx->result, error);
register_in_network_context_complete_and_free (ctx);
return;
@@ -2328,15 +2302,17 @@ registration_status_check_ready (MMBroadbandModem *self,
"Error parsing registration response: '%s'",
response);
} else {
+ /* Report new registration state */
if (cgreg)
- self->priv->reg_ps = state;
+ mm_iface_modem_3gpp_update_ps_registration_state (
+ MM_IFACE_MODEM_3GPP (self),
+ state,
+ act);
else
- self->priv->reg_cs = state;
-
- /* Report new registration state */
- mm_iface_modem_3gpp_update_registration_state (MM_IFACE_MODEM_3GPP (self),
- get_consolidated_reg_state (self),
- act);
+ mm_iface_modem_3gpp_update_cs_registration_state (
+ MM_IFACE_MODEM_3GPP (self),
+ state,
+ act);
/* TODO: report LAC/CI location */
@@ -2463,13 +2439,15 @@ cleanup_registration_sequence_ready (MMBroadbandModem *self,
/* Update registration state(s) */
if (g_str_has_prefix (ctx->command, "+CREG"))
- self->priv->reg_cs = MM_MODEM_3GPP_REGISTRATION_STATE_IDLE;
+ mm_iface_modem_3gpp_update_cs_registration_state (
+ MM_IFACE_MODEM_3GPP (self),
+ MM_MODEM_3GPP_REGISTRATION_STATE_IDLE,
+ MM_MODEM_ACCESS_TECHNOLOGY_UNKNOWN);
else
- self->priv->reg_ps = MM_MODEM_3GPP_REGISTRATION_STATE_IDLE;
-
- mm_iface_modem_3gpp_update_registration_state (MM_IFACE_MODEM_3GPP (self),
- get_consolidated_reg_state (self),
- MM_MODEM_ACCESS_TECHNOLOGY_UNKNOWN);
+ mm_iface_modem_3gpp_update_ps_registration_state (
+ MM_IFACE_MODEM_3GPP (self),
+ MM_MODEM_3GPP_REGISTRATION_STATE_IDLE,
+ MM_MODEM_ACCESS_TECHNOLOGY_UNKNOWN);
/* We're done */
g_simple_async_result_set_op_res_gboolean (ctx->result, TRUE);
@@ -3428,8 +3406,6 @@ mm_broadband_modem_init (MMBroadbandModem *self)
self->priv->modem_current_capabilities = MM_MODEM_CAPABILITY_NONE;
self->priv->modem_3gpp_registration_state = MM_MODEM_3GPP_REGISTRATION_STATE_UNKNOWN;
self->priv->reg_regex = mm_3gpp_creg_regex_get (TRUE);
- self->priv->reg_cs = MM_MODEM_3GPP_REGISTRATION_STATE_UNKNOWN;
- self->priv->reg_ps = MM_MODEM_3GPP_REGISTRATION_STATE_UNKNOWN;
self->priv->current_charset = MM_MODEM_CHARSET_UNKNOWN;
}