aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@lanedo.com>2013-04-13 18:35:24 +0200
committerAleksander Morgado <aleksander@lanedo.com>2013-04-17 15:19:41 +0200
commit0e9a0eb4c79d22ce50918abaab954fbf7aeebd6d (patch)
treeb5e6e409c1e0162ef1b5aa416da76a8576b6582b
parent6b5dd6af51b729fc608560f85ca6a1af0020d671 (diff)
broadband-modem-mbim: implement access technologies updates
-rw-r--r--src/mm-broadband-modem-mbim.c15
-rw-r--r--src/mm-modem-helpers-mbim.c42
-rw-r--r--src/mm-modem-helpers-mbim.h2
3 files changed, 57 insertions, 2 deletions
diff --git a/src/mm-broadband-modem-mbim.c b/src/mm-broadband-modem-mbim.c
index ed133a87..77014dfd 100644
--- a/src/mm-broadband-modem-mbim.c
+++ b/src/mm-broadband-modem-mbim.c
@@ -1397,12 +1397,15 @@ basic_connect_notification_signal_state (MMBroadbandModemMbim *self,
static void
update_registration_info (MMBroadbandModemMbim *self,
MbimRegisterState state,
+ MbimDataClass available_data_classes,
gchar *operator_id_take,
gchar *operator_name_take)
{
MMModem3gppRegistrationState reg_state;
+ MMModemAccessTechnology act;
reg_state = mm_modem_3gpp_registration_state_from_mbim_register_state (state);
+ act = mm_modem_access_technology_from_mbim_data_class (available_data_classes);
if (reg_state == MM_MODEM_3GPP_REGISTRATION_STATE_HOME ||
reg_state == MM_MODEM_3GPP_REGISTRATION_STATE_ROAMING) {
@@ -1437,6 +1440,10 @@ update_registration_info (MMBroadbandModemMbim *self,
mm_iface_modem_3gpp_update_ps_registration_state (
MM_IFACE_MODEM_3GPP (self),
reg_state);
+
+ mm_iface_modem_3gpp_update_access_technologies (
+ MM_IFACE_MODEM_3GPP (self),
+ act);
}
static void
@@ -1444,6 +1451,7 @@ basic_connect_notification_register_state (MMBroadbandModemMbim *self,
MbimMessage *notification)
{
MbimRegisterState register_state;
+ MbimDataClass available_data_classes;
gchar *provider_id;
gchar *provider_name;
@@ -1452,7 +1460,7 @@ basic_connect_notification_register_state (MMBroadbandModemMbim *self,
NULL, /* nw_error */
&register_state,
NULL, /* register_mode */
- NULL, /* available_data_classes */
+ &available_data_classes,
NULL, /* current_cellular_class */
&provider_id,
&provider_name,
@@ -1461,6 +1469,7 @@ basic_connect_notification_register_state (MMBroadbandModemMbim *self,
NULL)) {
update_registration_info (self,
register_state,
+ available_data_classes,
provider_id,
provider_name);
}
@@ -1824,6 +1833,7 @@ register_state_query_ready (MbimDevice *device,
MbimMessage *response;
GError *error = NULL;
MbimRegisterState register_state;
+ MbimDataClass available_data_classes;
gchar *provider_id;
gchar *provider_name;
@@ -1835,7 +1845,7 @@ register_state_query_ready (MbimDevice *device,
NULL, /* nw_error */
&register_state,
NULL, /* register_mode */
- NULL, /* available_data_classes */
+ &available_data_classes,
NULL, /* current_cellular_class */
&provider_id,
&provider_name,
@@ -1847,6 +1857,7 @@ register_state_query_ready (MbimDevice *device,
self = MM_BROADBAND_MODEM_MBIM (g_async_result_get_source_object (G_ASYNC_RESULT (simple)));
update_registration_info (self,
register_state,
+ available_data_classes,
provider_id,
provider_name);
g_object_unref (self);
diff --git a/src/mm-modem-helpers-mbim.c b/src/mm-modem-helpers-mbim.c
index 7815d01e..e5432f9e 100644
--- a/src/mm-modem-helpers-mbim.c
+++ b/src/mm-modem-helpers-mbim.c
@@ -63,6 +63,8 @@ mm_modem_lock_from_mbim_pin_type (MbimPinType pin_type)
return MM_MODEM_LOCK_UNKNOWN;
}
+/*****************************************************************************/
+
MMModem3gppRegistrationState
mm_modem_3gpp_registration_state_from_mbim_register_state (MbimRegisterState state)
{
@@ -84,6 +86,46 @@ mm_modem_3gpp_registration_state_from_mbim_register_state (MbimRegisterState sta
}
}
+/*****************************************************************************/
+
+MMModemAccessTechnology
+mm_modem_access_technology_from_mbim_data_class (MbimDataClass data_class)
+{
+ MMModemAccessTechnology mask = MM_MODEM_ACCESS_TECHNOLOGY_UNKNOWN;
+
+ if (data_class & MBIM_DATA_CLASS_GPRS)
+ mask |= MM_MODEM_ACCESS_TECHNOLOGY_GPRS;
+ if (data_class & MBIM_DATA_CLASS_EDGE)
+ mask |= MM_MODEM_ACCESS_TECHNOLOGY_EDGE;
+ if (data_class & MBIM_DATA_CLASS_UMTS)
+ mask |= MM_MODEM_ACCESS_TECHNOLOGY_UMTS;
+ if (data_class & MBIM_DATA_CLASS_HSDPA)
+ mask |= MM_MODEM_ACCESS_TECHNOLOGY_HSDPA;
+ if (data_class & MBIM_DATA_CLASS_HSUPA)
+ mask |= MM_MODEM_ACCESS_TECHNOLOGY_HSUPA;
+ if (data_class & MBIM_DATA_CLASS_LTE)
+ mask |= MM_MODEM_ACCESS_TECHNOLOGY_LTE;
+ if (data_class & MBIM_DATA_CLASS_1XRTT)
+ mask |= MM_MODEM_ACCESS_TECHNOLOGY_1XRTT;
+ if (data_class & MBIM_DATA_CLASS_1XEVDO)
+ mask |= MM_MODEM_ACCESS_TECHNOLOGY_EVDO0;
+ if (data_class & MBIM_DATA_CLASS_1XEVDO_REVA)
+ mask |= MM_MODEM_ACCESS_TECHNOLOGY_EVDOA;
+ if (data_class & MBIM_DATA_CLASS_1XEVDO_REVB)
+ mask |= MM_MODEM_ACCESS_TECHNOLOGY_EVDOB;
+
+ /* Skip:
+ * MBIM_DATA_CLASS_1XEVDV
+ * MBIM_DATA_CLASS_3XRTT
+ * MBIM_DATA_CLASS_UMB
+ * MBIM_DATA_CLASS_CUSTOM
+ */
+
+ return mask;
+}
+
+/*****************************************************************************/
+
GError *
mm_mobile_equipment_error_from_mbim_nw_error (MbimNwError nw_error)
{
diff --git a/src/mm-modem-helpers-mbim.h b/src/mm-modem-helpers-mbim.h
index 45a65c07..5b01609c 100644
--- a/src/mm-modem-helpers-mbim.h
+++ b/src/mm-modem-helpers-mbim.h
@@ -28,6 +28,8 @@ MMModemLock mm_modem_lock_from_mbim_pin_type (MbimPinType pin_type);
MMModem3gppRegistrationState mm_modem_3gpp_registration_state_from_mbim_register_state (MbimRegisterState state);
+MMModemAccessTechnology mm_modem_access_technology_from_mbim_data_class (MbimDataClass data_class);
+
GError *mm_mobile_equipment_error_from_mbim_nw_error (MbimNwError nw_error);
#endif /* MM_MODEM_HELPERS_MBIM_H */