aboutsummaryrefslogtreecommitdiff
path: root/src/mm-modem-helpers-mbim.c
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@aleksander.es>2021-10-16 23:53:43 +0200
committerAleksander Morgado <aleksander@aleksander.es>2021-10-19 08:27:23 +0000
commitdb6f397e3e568487da7da3dcfca52533d9b675b3 (patch)
treebc82e52147bffefee21cdfd2140b271870e66702 /src/mm-modem-helpers-mbim.c
parent7663a2e6c383bb68f31c91ca51ba2801ee990c6e (diff)
broadband-modem-mbim: implement current mode switching using 'Register State v2'
Use the new Preferred Data Classes field in the Register State v2 message in order to know if the modes requested in the Set message are the expected ones or not. Based on an initial implementation by Som_SP <somashekhar.puttagangaiah@intel.com>
Diffstat (limited to 'src/mm-modem-helpers-mbim.c')
-rw-r--r--src/mm-modem-helpers-mbim.c42
1 files changed, 42 insertions, 0 deletions
diff --git a/src/mm-modem-helpers-mbim.c b/src/mm-modem-helpers-mbim.c
index 8d05227a..0f9957e5 100644
--- a/src/mm-modem-helpers-mbim.c
+++ b/src/mm-modem-helpers-mbim.c
@@ -123,6 +123,48 @@ mm_modem_3gpp_registration_state_from_mbim_register_state (MbimRegisterState sta
/*****************************************************************************/
+MMModemMode
+mm_modem_mode_from_mbim_data_class (MbimDataClass data_class)
+{
+ MMModemMode mask = MM_MODEM_MODE_NONE;
+
+ if (data_class & MBIM_DATA_CLASS_GPRS)
+ mask |= MM_MODEM_MODE_2G;
+ if (data_class & MBIM_DATA_CLASS_EDGE)
+ mask |= MM_MODEM_MODE_2G;
+ if (data_class & MBIM_DATA_CLASS_UMTS)
+ mask |= MM_MODEM_MODE_3G;
+ if (data_class & MBIM_DATA_CLASS_HSDPA)
+ mask |= MM_MODEM_MODE_3G;
+ if (data_class & MBIM_DATA_CLASS_HSUPA)
+ mask |= MM_MODEM_MODE_3G;
+ if (data_class & MBIM_DATA_CLASS_LTE)
+ mask |= MM_MODEM_MODE_4G;
+ if(data_class & MBIM_DATA_CLASS_5G_NSA)
+ mask |= MM_MODEM_MODE_5G;
+ if(data_class & MBIM_DATA_CLASS_5G_SA)
+ mask |= MM_MODEM_MODE_5G;
+
+ return mask;
+}
+
+MbimDataClass
+mm_mbim_data_class_from_modem_mode (MMModemMode modem_mode)
+{
+ MbimDataClass mask = 0;
+
+ if (modem_mode & MM_MODEM_MODE_2G)
+ mask |= MBIM_DATA_CLASS_GPRS | MBIM_DATA_CLASS_EDGE;
+ if (modem_mode & MM_MODEM_MODE_3G)
+ mask |= MBIM_DATA_CLASS_UMTS | MBIM_DATA_CLASS_HSDPA | MBIM_DATA_CLASS_HSUPA;
+ if (modem_mode & MM_MODEM_MODE_4G)
+ mask |= MBIM_DATA_CLASS_LTE;
+ if (modem_mode & MM_MODEM_MODE_5G)
+ mask |= MBIM_DATA_CLASS_5G_NSA | MBIM_DATA_CLASS_5G_SA;
+
+ return mask;
+}
+
MMModemAccessTechnology
mm_modem_access_technology_from_mbim_data_class (MbimDataClass data_class)
{