diff options
author | Aleksander Morgado <aleksander@aleksander.es> | 2021-10-17 18:07:36 +0200 |
---|---|---|
committer | Aleksander Morgado <aleksander@aleksander.es> | 2021-10-19 08:27:23 +0000 |
commit | 316c91da0a19bfb92a97ea77a332bd32a37f7fce (patch) | |
tree | 93022e4a0fafb120f631c2f7db3ef09067ca0250 | |
parent | 27cc47f796e7adab6cb839804e9d868cc904e15f (diff) |
helpers-mbim: add support for 3GPP2 data classes
Just for completeness.
-rw-r--r-- | src/mm-broadband-modem-mbim.c | 4 | ||||
-rw-r--r-- | src/mm-modem-helpers-mbim.c | 73 | ||||
-rw-r--r-- | src/mm-modem-helpers-mbim.h | 4 |
3 files changed, 58 insertions, 23 deletions
diff --git a/src/mm-broadband-modem-mbim.c b/src/mm-broadband-modem-mbim.c index 72c68409..249af620 100644 --- a/src/mm-broadband-modem-mbim.c +++ b/src/mm-broadband-modem-mbim.c @@ -1212,7 +1212,9 @@ modem_set_current_modes (MMIfaceModem *self, g_autoptr(MbimMessage) message = NULL; MbimDataClass data_class; - data_class = mm_mbim_data_class_from_modem_mode (allowed); + data_class = mm_mbim_data_class_from_modem_mode (allowed, + mm_iface_modem_is_3gpp (self), + mm_iface_modem_is_cdma (self)); g_task_set_task_data (task, GUINT_TO_POINTER (data_class), NULL); message = mbim_message_register_state_set_new ( NULL, diff --git a/src/mm-modem-helpers-mbim.c b/src/mm-modem-helpers-mbim.c index 0f9957e5..c6946760 100644 --- a/src/mm-modem-helpers-mbim.c +++ b/src/mm-modem-helpers-mbim.c @@ -128,39 +128,71 @@ 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) + /* 3GPP... */ + if (data_class & (MBIM_DATA_CLASS_GPRS | + 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) + if (data_class & (MBIM_DATA_CLASS_UMTS | + MBIM_DATA_CLASS_HSDPA | + 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) + if (data_class & (MBIM_DATA_CLASS_5G_NSA | + MBIM_DATA_CLASS_5G_SA)) mask |= MM_MODEM_MODE_5G; + /* 3GPP2... */ + if (self->priv->caps_data_class & MBIM_DATA_CLASS_1XRTT) + all |= MM_MODEM_MODE_2G; + if (self->priv->caps_data_class & (MBIM_DATA_CLASS_1XEVDO | + MBIM_DATA_CLASS_1XEVDO_REVA | + MBIM_DATA_CLASS_1XEVDV | + MBIM_DATA_CLASS_3XRTT | + MBIM_DATA_CLASS_1XEVDO_REVB)) + all |= MM_MODEM_MODE_3G; + if (self->priv->caps_data_class & MBIM_DATA_CLASS_UMB) + all |= MM_MODEM_MODE_4G; + return mask; } MbimDataClass -mm_mbim_data_class_from_modem_mode (MMModemMode modem_mode) +mm_mbim_data_class_from_modem_mode (MMModemMode modem_mode, + gboolean is_3gpp, + gboolean is_cdma) { 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; + /* 3GPP... */ + if (is_3gpp) { + 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); + } + + /* 3GPP2... */ + if (is_cdma) { + if (modem_mode & MM_MODEM_MODE_2G) + mask |= MBIM_DATA_CLASS_1XRTT; + if (modem_mode & MM_MODEM_MODE_3G) + mask |= (MBIM_DATA_CLASS_1XEVDO | + MBIM_DATA_CLASS_1XEVDO_REVA | + MBIM_DATA_CLASS_1XEVDV | + MBIM_DATA_CLASS_3XRTT | + MBIM_DATA_CLASS_1XEVDO_REVB); + if (modem_mode & MM_MODEM_MODE_4G) + mask |= MBIM_DATA_CLASS_UMB; + } return mask; } @@ -585,4 +617,3 @@ mm_signal_quality_from_mbim_signal_state (guint rssi, return quality; } - diff --git a/src/mm-modem-helpers-mbim.h b/src/mm-modem-helpers-mbim.h index d02b6191..a2b9aee0 100644 --- a/src/mm-modem-helpers-mbim.h +++ b/src/mm-modem-helpers-mbim.h @@ -34,7 +34,9 @@ MMModem3gppRegistrationState mm_modem_3gpp_registration_state_from_mbim_register MMModemMode mm_modem_mode_from_mbim_data_class (MbimDataClass data_class); -MbimDataClass mm_mbim_data_class_from_modem_mode (MMModemMode modem_mode); +MbimDataClass mm_mbim_data_class_from_modem_mode (MMModemMode modem_mode, + gboolean is_3gpp, + gboolean is_cdma); MMModemAccessTechnology mm_modem_access_technology_from_mbim_data_class (MbimDataClass data_class); |