From 0e9a0eb4c79d22ce50918abaab954fbf7aeebd6d Mon Sep 17 00:00:00 2001 From: Aleksander Morgado Date: Sat, 13 Apr 2013 18:35:24 +0200 Subject: broadband-modem-mbim: implement access technologies updates --- src/mm-broadband-modem-mbim.c | 15 +++++++++++++-- src/mm-modem-helpers-mbim.c | 42 ++++++++++++++++++++++++++++++++++++++++++ src/mm-modem-helpers-mbim.h | 2 ++ 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 */ ®ister_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 */ ®ister_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 */ -- cgit v1.2.3