aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@lanedo.com>2012-08-09 10:58:12 +0200
committerAleksander Morgado <aleksander@lanedo.com>2012-08-23 19:10:58 +0200
commit18af6f875004278c4d2cfb5f71cdef90e208aeff (patch)
tree6dcac32843f6ecddbc8aa49b250b40041c77ec5f
parent994885fc8ce4c0d46eca2fc73026d0139ec81254 (diff)
iface-modem-cdma: provide separate method to update access tech
-rw-r--r--src/mm-broadband-modem.c7
-rw-r--r--src/mm-iface-modem-cdma.c66
-rw-r--r--src/mm-iface-modem-cdma.h19
3 files changed, 65 insertions, 27 deletions
diff --git a/src/mm-broadband-modem.c b/src/mm-broadband-modem.c
index ecce6d38..d6eaff73 100644
--- a/src/mm-broadband-modem.c
+++ b/src/mm-broadband-modem.c
@@ -5790,6 +5790,10 @@ run_cdma_registration_checks_ready (MMBroadbandModem *self,
mm_iface_modem_cdma_update_evdo_registration_state (
MM_IFACE_MODEM_CDMA (self),
MM_MODEM_CDMA_REGISTRATION_STATE_UNKNOWN);
+ mm_iface_modem_cdma_update_access_technologies (
+ MM_IFACE_MODEM_CDMA (self),
+ MM_MODEM_ACCESS_TECHNOLOGY_UNKNOWN);
+
g_simple_async_result_take_error (ctx->result, error);
register_in_cdma_network_context_complete_and_free (ctx);
return;
@@ -5818,6 +5822,9 @@ run_cdma_registration_checks_ready (MMBroadbandModem *self,
mm_iface_modem_cdma_update_evdo_registration_state (
MM_IFACE_MODEM_CDMA (self),
MM_MODEM_CDMA_REGISTRATION_STATE_UNKNOWN);
+ mm_iface_modem_cdma_update_access_technologies (
+ MM_IFACE_MODEM_CDMA (self),
+ 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));
diff --git a/src/mm-iface-modem-cdma.c b/src/mm-iface-modem-cdma.c
index 2a6e1be5..465633af 100644
--- a/src/mm-iface-modem-cdma.c
+++ b/src/mm-iface-modem-cdma.c
@@ -846,6 +846,23 @@ registration_check_step (RunRegistrationChecksContext *ctx)
mm_iface_modem_cdma_update_evdo_registration_state (ctx->self,
ctx->evdo_state);
+ /* Update access technologies.
+ * TODO: proper EV-DO revision reporting */
+ {
+ MMModemAccessTechnology act = MM_MODEM_ACCESS_TECHNOLOGY_UNKNOWN;
+
+ if (ctx->cdma1x_state == MM_MODEM_CDMA_REGISTRATION_STATE_HOME ||
+ ctx->cdma1x_state == MM_MODEM_CDMA_REGISTRATION_STATE_ROAMING ||
+ ctx->cdma1x_state == MM_MODEM_CDMA_REGISTRATION_STATE_REGISTERED)
+ act |= MM_IFACE_MODEM_CDMA_ALL_CDMA1X_ACCESS_TECHNOLOGIES_MASK;
+
+ if (ctx->evdo_state == MM_MODEM_CDMA_REGISTRATION_STATE_HOME ||
+ ctx->evdo_state == MM_MODEM_CDMA_REGISTRATION_STATE_ROAMING ||
+ ctx->evdo_state == MM_MODEM_CDMA_REGISTRATION_STATE_REGISTERED)
+ act |= MM_IFACE_MODEM_CDMA_ALL_EVDO_ACCESS_TECHNOLOGIES_MASK;
+ mm_iface_modem_cdma_update_access_technologies (MM_IFACE_MODEM_CDMA (ctx->self), act);
+ }
+
g_simple_async_result_set_op_res_gboolean (ctx->result, TRUE);
run_registration_checks_context_complete_and_free (ctx);
return;
@@ -936,17 +953,35 @@ mm_iface_modem_cdma_run_registration_checks (MMIfaceModemCdma *self,
/*****************************************************************************/
-#define ALL_CDMA_ACCESS_TECHNOLOGIES_MASK \
- (ALL_CDMA_CDMA1X_ACCESS_TECHNOLOGIES_MASK | \
- ALL_CDMA_EVDO_ACCESS_TECHNOLOGIES_MASK)
+void
+mm_iface_modem_cdma_update_access_technologies (MMIfaceModemCdma *self,
+ MMModemAccessTechnology access_tech)
+{
+ MMModemCdmaRegistrationState cdma1x_state;
+ MMModemCdmaRegistrationState evdo_state;
-#define ALL_CDMA_EVDO_ACCESS_TECHNOLOGIES_MASK \
- (MM_MODEM_ACCESS_TECHNOLOGY_EVDO0 | \
- MM_MODEM_ACCESS_TECHNOLOGY_EVDOA | \
- MM_MODEM_ACCESS_TECHNOLOGY_EVDOB)
+ g_object_get (self,
+ MM_IFACE_MODEM_CDMA_CDMA1X_REGISTRATION_STATE, &cdma1x_state,
+ MM_IFACE_MODEM_CDMA_EVDO_REGISTRATION_STATE, &evdo_state,
+ NULL);
-#define ALL_CDMA_CDMA1X_ACCESS_TECHNOLOGIES_MASK \
- (MM_MODEM_ACCESS_TECHNOLOGY_1XRTT)
+ /* Even if registration state didn't change, report access technology,
+ * but only if something valid to report */
+ if (cdma1x_state == MM_MODEM_CDMA_REGISTRATION_STATE_HOME ||
+ cdma1x_state == MM_MODEM_CDMA_REGISTRATION_STATE_ROAMING ||
+ cdma1x_state == MM_MODEM_CDMA_REGISTRATION_STATE_REGISTERED ||
+ evdo_state == MM_MODEM_CDMA_REGISTRATION_STATE_HOME ||
+ evdo_state == MM_MODEM_CDMA_REGISTRATION_STATE_ROAMING ||
+ evdo_state == MM_MODEM_CDMA_REGISTRATION_STATE_REGISTERED) {
+ if (access_tech != MM_MODEM_ACCESS_TECHNOLOGY_UNKNOWN)
+ mm_iface_modem_update_access_technologies (MM_IFACE_MODEM (self),
+ access_tech,
+ MM_IFACE_MODEM_CDMA_ALL_ACCESS_TECHNOLOGIES_MASK);
+ } else
+ mm_iface_modem_update_access_technologies (MM_IFACE_MODEM (self),
+ MM_MODEM_ACCESS_TECHNOLOGY_UNKNOWN,
+ MM_IFACE_MODEM_CDMA_ALL_ACCESS_TECHNOLOGIES_MASK);
+}
void
mm_iface_modem_cdma_update_evdo_registration_state (MMIfaceModemCdma *self,
@@ -975,19 +1010,12 @@ mm_iface_modem_cdma_update_evdo_registration_state (MMIfaceModemCdma *self,
SUBSYSTEM_EVDO,
MM_MODEM_STATE_REGISTERED,
MM_MODEM_STATE_CHANGE_REASON_UNKNOWN);
- /* TODO: report proper EVDO revision (0/A/B) */
- mm_iface_modem_update_access_technologies (MM_IFACE_MODEM (self),
- MM_MODEM_ACCESS_TECHNOLOGY_EVDO0,
- ALL_CDMA_EVDO_ACCESS_TECHNOLOGIES_MASK);
break;
case MM_MODEM_CDMA_REGISTRATION_STATE_UNKNOWN:
mm_iface_modem_update_subsystem_state (MM_IFACE_MODEM (self),
SUBSYSTEM_EVDO,
MM_MODEM_STATE_ENABLED,
MM_MODEM_STATE_CHANGE_REASON_UNKNOWN);
- mm_iface_modem_update_access_technologies (MM_IFACE_MODEM (self),
- MM_MODEM_ACCESS_TECHNOLOGY_UNKNOWN,
- ALL_CDMA_EVDO_ACCESS_TECHNOLOGIES_MASK);
break;
}
}
@@ -1026,9 +1054,6 @@ mm_iface_modem_cdma_update_cdma1x_registration_state (MMIfaceModemCdma *self,
SUBSYSTEM_CDMA1X,
MM_MODEM_STATE_REGISTERED,
MM_MODEM_STATE_CHANGE_REASON_UNKNOWN);
- mm_iface_modem_update_access_technologies (MM_IFACE_MODEM (self),
- MM_MODEM_ACCESS_TECHNOLOGY_1XRTT,
- ALL_CDMA_CDMA1X_ACCESS_TECHNOLOGIES_MASK);
break;
case MM_MODEM_CDMA_REGISTRATION_STATE_UNKNOWN:
if (mm_gdbus_modem_cdma_get_sid (skeleton) != MM_MODEM_CDMA_SID_UNKNOWN)
@@ -1040,9 +1065,6 @@ mm_iface_modem_cdma_update_cdma1x_registration_state (MMIfaceModemCdma *self,
SUBSYSTEM_CDMA1X,
MM_MODEM_STATE_ENABLED,
MM_MODEM_STATE_CHANGE_REASON_UNKNOWN);
- mm_iface_modem_update_access_technologies (MM_IFACE_MODEM (self),
- MM_MODEM_ACCESS_TECHNOLOGY_UNKNOWN,
- ALL_CDMA_CDMA1X_ACCESS_TECHNOLOGIES_MASK);
break;
}
}
diff --git a/src/mm-iface-modem-cdma.h b/src/mm-iface-modem-cdma.h
index 8407e1b5..8fb334b4 100644
--- a/src/mm-iface-modem-cdma.h
+++ b/src/mm-iface-modem-cdma.h
@@ -34,12 +34,18 @@
#define MM_IFACE_MODEM_CDMA_EVDO_NETWORK_SUPPORTED "iface-modem-cdma-evdo-network-supported"
#define MM_IFACE_MODEM_CDMA_CDMA1X_NETWORK_SUPPORTED "iface-modem-cdma-cdma1x-network-supported"
-#define MM_IFACE_MODEM_CDMA_ALL_ACCESS_TECHNOLOGIES_MASK \
- (MM_MODEM_ACCESS_TECHNOLOGY_1XRTT | \
- MM_MODEM_ACCESS_TECHNOLOGY_EVDO0 | \
- MM_MODEM_ACCESS_TECHNOLOGY_EVDOA | \
+#define MM_IFACE_MODEM_CDMA_ALL_ACCESS_TECHNOLOGIES_MASK \
+ (MM_IFACE_MODEM_CDMA_ALL_CDMA1X_ACCESS_TECHNOLOGIES_MASK | \
+ MM_IFACE_MODEM_CDMA_ALL_EVDO_ACCESS_TECHNOLOGIES_MASK)
+
+#define MM_IFACE_MODEM_CDMA_ALL_EVDO_ACCESS_TECHNOLOGIES_MASK \
+ (MM_MODEM_ACCESS_TECHNOLOGY_EVDO0 | \
+ MM_MODEM_ACCESS_TECHNOLOGY_EVDOA | \
MM_MODEM_ACCESS_TECHNOLOGY_EVDOB)
+#define MM_IFACE_MODEM_CDMA_ALL_CDMA1X_ACCESS_TECHNOLOGIES_MASK \
+ (MM_MODEM_ACCESS_TECHNOLOGY_1XRTT)
+
typedef struct _MMIfaceModemCdma MMIfaceModemCdma;
struct _MMIfaceModemCdma {
@@ -244,13 +250,16 @@ gboolean mm_iface_modem_cdma_disable_finish (MMIfaceModemCdma *self,
/* Shutdown CDMA interface */
void mm_iface_modem_cdma_shutdown (MMIfaceModemCdma *self);
-/* Objects implementing this interface can report new registration states. */
+/* Objects implementing this interface can report new registration states and
+ * access technologies */
void mm_iface_modem_cdma_update_cdma1x_registration_state (MMIfaceModemCdma *self,
MMModemCdmaRegistrationState state,
guint sid,
guint nid);
void mm_iface_modem_cdma_update_evdo_registration_state (MMIfaceModemCdma *self,
MMModemCdmaRegistrationState state);
+void mm_iface_modem_cdma_update_access_technologies (MMIfaceModemCdma *self,
+ MMModemAccessTechnology access_tech);
/* Run all registration checks */
void mm_iface_modem_cdma_run_registration_checks (MMIfaceModemCdma *self,