diff options
author | Aleksander Morgado <aleksander@lanedo.com> | 2012-08-09 10:58:12 +0200 |
---|---|---|
committer | Aleksander Morgado <aleksander@lanedo.com> | 2012-08-23 19:10:58 +0200 |
commit | 18af6f875004278c4d2cfb5f71cdef90e208aeff (patch) | |
tree | 6dcac32843f6ecddbc8aa49b250b40041c77ec5f | |
parent | 994885fc8ce4c0d46eca2fc73026d0139ec81254 (diff) |
iface-modem-cdma: provide separate method to update access tech
-rw-r--r-- | src/mm-broadband-modem.c | 7 | ||||
-rw-r--r-- | src/mm-iface-modem-cdma.c | 66 | ||||
-rw-r--r-- | src/mm-iface-modem-cdma.h | 19 |
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, |