helpers-mbim: add support for 3GPP2 data classes

Just for completeness.
This commit is contained in:
Aleksander Morgado
2021-10-17 18:07:36 +02:00
parent 27cc47f796
commit 316c91da0a
3 changed files with 58 additions and 23 deletions

View File

@@ -1212,7 +1212,9 @@ modem_set_current_modes (MMIfaceModem *self,
g_autoptr(MbimMessage) message = NULL; g_autoptr(MbimMessage) message = NULL;
MbimDataClass data_class; 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); g_task_set_task_data (task, GUINT_TO_POINTER (data_class), NULL);
message = mbim_message_register_state_set_new ( message = mbim_message_register_state_set_new (
NULL, NULL,

View File

@@ -128,39 +128,71 @@ mm_modem_mode_from_mbim_data_class (MbimDataClass data_class)
{ {
MMModemMode mask = MM_MODEM_MODE_NONE; MMModemMode mask = MM_MODEM_MODE_NONE;
if (data_class & MBIM_DATA_CLASS_GPRS) /* 3GPP... */
if (data_class & (MBIM_DATA_CLASS_GPRS |
MBIM_DATA_CLASS_EDGE))
mask |= MM_MODEM_MODE_2G; mask |= MM_MODEM_MODE_2G;
if (data_class & MBIM_DATA_CLASS_EDGE) if (data_class & (MBIM_DATA_CLASS_UMTS |
mask |= MM_MODEM_MODE_2G; MBIM_DATA_CLASS_HSDPA |
if (data_class & MBIM_DATA_CLASS_UMTS) MBIM_DATA_CLASS_HSUPA))
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; mask |= MM_MODEM_MODE_3G;
if (data_class & MBIM_DATA_CLASS_LTE) if (data_class & MBIM_DATA_CLASS_LTE)
mask |= MM_MODEM_MODE_4G; mask |= MM_MODEM_MODE_4G;
if(data_class & MBIM_DATA_CLASS_5G_NSA) if (data_class & (MBIM_DATA_CLASS_5G_NSA |
mask |= MM_MODEM_MODE_5G; MBIM_DATA_CLASS_5G_SA))
if(data_class & MBIM_DATA_CLASS_5G_SA)
mask |= MM_MODEM_MODE_5G; 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; return mask;
} }
MbimDataClass 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; MbimDataClass mask = 0;
/* 3GPP... */
if (is_3gpp) {
if (modem_mode & MM_MODEM_MODE_2G) if (modem_mode & MM_MODEM_MODE_2G)
mask |= MBIM_DATA_CLASS_GPRS | MBIM_DATA_CLASS_EDGE; mask |= (MBIM_DATA_CLASS_GPRS |
MBIM_DATA_CLASS_EDGE);
if (modem_mode & MM_MODEM_MODE_3G) if (modem_mode & MM_MODEM_MODE_3G)
mask |= MBIM_DATA_CLASS_UMTS | MBIM_DATA_CLASS_HSDPA | MBIM_DATA_CLASS_HSUPA; mask |= (MBIM_DATA_CLASS_UMTS |
MBIM_DATA_CLASS_HSDPA |
MBIM_DATA_CLASS_HSUPA);
if (modem_mode & MM_MODEM_MODE_4G) if (modem_mode & MM_MODEM_MODE_4G)
mask |= MBIM_DATA_CLASS_LTE; mask |= MBIM_DATA_CLASS_LTE;
if (modem_mode & MM_MODEM_MODE_5G) if (modem_mode & MM_MODEM_MODE_5G)
mask |= MBIM_DATA_CLASS_5G_NSA | MBIM_DATA_CLASS_5G_SA; 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; return mask;
} }
@@ -585,4 +617,3 @@ mm_signal_quality_from_mbim_signal_state (guint rssi,
return quality; return quality;
} }

View File

@@ -34,7 +34,9 @@ MMModem3gppRegistrationState mm_modem_3gpp_registration_state_from_mbim_register
MMModemMode mm_modem_mode_from_mbim_data_class (MbimDataClass data_class); 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); MMModemAccessTechnology mm_modem_access_technology_from_mbim_data_class (MbimDataClass data_class);