aboutsummaryrefslogtreecommitdiff
path: root/src/mm-modem-helpers-mbim.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mm-modem-helpers-mbim.c')
-rw-r--r--src/mm-modem-helpers-mbim.c196
1 files changed, 196 insertions, 0 deletions
diff --git a/src/mm-modem-helpers-mbim.c b/src/mm-modem-helpers-mbim.c
index 7502a82d..0afa9356 100644
--- a/src/mm-modem-helpers-mbim.c
+++ b/src/mm-modem-helpers-mbim.c
@@ -612,6 +612,202 @@ mm_bearer_ip_family_to_mbim_context_ip_type (MMBearerIpFamily ip_family,
/*****************************************************************************/
+gboolean
+mm_bearer_roaming_allowance_to_mbim_context_roaming_control (MMBearerRoamingAllowance mask,
+ gpointer log_object,
+ MbimContextRoamingControl *out_value,
+ GError **error)
+{
+ if (mask == MM_BEARER_ROAMING_ALLOWANCE_NONE) {
+ mm_obj_dbg (log_object, "using default (all) roaming allowance");
+ *out_value = MBIM_CONTEXT_ROAMING_CONTROL_ALLOW_ALL;
+ } else if (mask == MM_BEARER_ROAMING_ALLOWANCE_HOME)
+ *out_value =MBIM_CONTEXT_ROAMING_CONTROL_HOME_ONLY;
+ else if (mask == MM_BEARER_ROAMING_ALLOWANCE_PARTNER)
+ *out_value =MBIM_CONTEXT_ROAMING_CONTROL_PARTNER_ONLY;
+ else if (mask == MM_BEARER_ROAMING_ALLOWANCE_NON_PARTNER)
+ *out_value =MBIM_CONTEXT_ROAMING_CONTROL_NON_PARTNER_ONLY;
+ else if (mask == (MM_BEARER_ROAMING_ALLOWANCE_HOME | MM_BEARER_ROAMING_ALLOWANCE_PARTNER))
+ *out_value =MBIM_CONTEXT_ROAMING_CONTROL_HOME_AND_PARTNER;
+ else if (mask == (MM_BEARER_ROAMING_ALLOWANCE_HOME | MM_BEARER_ROAMING_ALLOWANCE_NON_PARTNER))
+ *out_value =MBIM_CONTEXT_ROAMING_CONTROL_HOME_AND_NON_PARTNER;
+ else if (mask == (MM_BEARER_ROAMING_ALLOWANCE_PARTNER | MM_BEARER_ROAMING_ALLOWANCE_NON_PARTNER))
+ *out_value =MBIM_CONTEXT_ROAMING_CONTROL_PARTNER_AND_NON_PARTNER;
+ else if (mask == (MM_BEARER_ROAMING_ALLOWANCE_HOME | MM_BEARER_ROAMING_ALLOWANCE_PARTNER | MM_BEARER_ROAMING_ALLOWANCE_NON_PARTNER))
+ *out_value = MBIM_CONTEXT_ROAMING_CONTROL_ALLOW_ALL;
+ else {
+ g_set_error (error, MM_CORE_ERROR, MM_CORE_ERROR_UNSUPPORTED,
+ "Unsupported roaming allowance mask: 0x%x", mask);
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+MMBearerRoamingAllowance
+mm_bearer_roaming_allowance_from_mbim_context_roaming_control (MbimContextRoamingControl value,
+ GError **error)
+{
+ switch (value) {
+ case MBIM_CONTEXT_ROAMING_CONTROL_HOME_ONLY:
+ return MM_BEARER_ROAMING_ALLOWANCE_HOME;
+ case MBIM_CONTEXT_ROAMING_CONTROL_PARTNER_ONLY:
+ return MM_BEARER_ROAMING_ALLOWANCE_PARTNER;
+ case MBIM_CONTEXT_ROAMING_CONTROL_NON_PARTNER_ONLY:
+ return MM_BEARER_ROAMING_ALLOWANCE_NON_PARTNER;
+ case MBIM_CONTEXT_ROAMING_CONTROL_HOME_AND_PARTNER:
+ return (MM_BEARER_ROAMING_ALLOWANCE_HOME | MM_BEARER_ROAMING_ALLOWANCE_PARTNER);
+ case MBIM_CONTEXT_ROAMING_CONTROL_HOME_AND_NON_PARTNER:
+ return (MM_BEARER_ROAMING_ALLOWANCE_HOME | MM_BEARER_ROAMING_ALLOWANCE_NON_PARTNER);
+ case MBIM_CONTEXT_ROAMING_CONTROL_PARTNER_AND_NON_PARTNER:
+ return (MM_BEARER_ROAMING_ALLOWANCE_PARTNER | MM_BEARER_ROAMING_ALLOWANCE_NON_PARTNER);
+ case MBIM_CONTEXT_ROAMING_CONTROL_ALLOW_ALL:
+ return (MM_BEARER_ROAMING_ALLOWANCE_HOME | MM_BEARER_ROAMING_ALLOWANCE_PARTNER | MM_BEARER_ROAMING_ALLOWANCE_NON_PARTNER);
+ default:
+ g_set_error (error, MM_CORE_ERROR, MM_CORE_ERROR_UNSUPPORTED,
+ "Unsupported roaming control value: 0x%x", value);
+ return MM_BEARER_ROAMING_ALLOWANCE_NONE;
+ }
+}
+
+/*****************************************************************************/
+
+gboolean
+mm_bearer_access_type_preference_to_mbim_context_media_type (MMBearerAccessTypePreference value,
+ gpointer log_object,
+ MbimContextMediaType *out_value,
+ GError **error)
+{
+ switch (value) {
+ case MM_BEARER_ACCESS_TYPE_PREFERENCE_NONE:
+ mm_obj_dbg (log_object, "using default (cellular only) context media type");
+ *out_value = MBIM_CONTEXT_MEDIA_TYPE_CELLULAR_ONLY;
+ return TRUE;
+ case MM_BEARER_ACCESS_TYPE_PREFERENCE_3GPP_ONLY:
+ *out_value = MBIM_CONTEXT_MEDIA_TYPE_CELLULAR_ONLY;
+ return TRUE;
+ case MM_BEARER_ACCESS_TYPE_PREFERENCE_3GPP_PREFERRED:
+ *out_value = MBIM_CONTEXT_MEDIA_TYPE_ALL;
+ return TRUE;
+ case MM_BEARER_ACCESS_TYPE_PREFERENCE_NON_3GPP_ONLY:
+ *out_value = MBIM_CONTEXT_MEDIA_TYPE_WIFI_ONLY;
+ return TRUE;
+ default:
+ g_set_error (error, MM_CORE_ERROR, MM_CORE_ERROR_UNSUPPORTED,
+ "Unsupported roaming control value: 0x%x", value);
+ return FALSE;
+ }
+}
+
+gboolean
+mm_bearer_access_type_preference_from_mbim_context_media_type (MbimContextMediaType value,
+ MMBearerAccessTypePreference *out_value,
+ GError **error)
+{
+ switch (value) {
+ case MBIM_CONTEXT_MEDIA_TYPE_CELLULAR_ONLY:
+ *out_value = MM_BEARER_ACCESS_TYPE_PREFERENCE_3GPP_ONLY;
+ return TRUE;
+ case MBIM_CONTEXT_MEDIA_TYPE_WIFI_ONLY:
+ *out_value = MM_BEARER_ACCESS_TYPE_PREFERENCE_NON_3GPP_ONLY;
+ return TRUE;
+ case MBIM_CONTEXT_MEDIA_TYPE_ALL:
+ *out_value = MM_BEARER_ACCESS_TYPE_PREFERENCE_3GPP_PREFERRED;
+ return TRUE;
+ default:
+ g_set_error (error, MM_CORE_ERROR, MM_CORE_ERROR_UNSUPPORTED,
+ "Unsupported roaming control value: 0x%x", value);
+ return FALSE;
+ }
+}
+
+/*****************************************************************************/
+
+gboolean
+mm_boolean_from_mbim_context_state (MbimContextState value,
+ gboolean *out_value,
+ GError **error)
+{
+ switch (value) {
+ case MBIM_CONTEXT_STATE_DISABLED:
+ *out_value = FALSE;
+ return TRUE;
+ case MBIM_CONTEXT_STATE_ENABLED:
+ *out_value = TRUE;
+ return TRUE;
+ default:
+ g_set_error (error, MM_CORE_ERROR, MM_CORE_ERROR_UNSUPPORTED,
+ "Unsupported context state value: 0x%x", value);
+ return FALSE;
+ }
+
+}
+
+MbimContextState
+mm_boolean_to_mbim_context_state (gboolean value)
+{
+ return (value ? MBIM_CONTEXT_STATE_ENABLED: MBIM_CONTEXT_STATE_DISABLED);
+}
+
+/*****************************************************************************/
+
+MMBearerProfileSource
+mm_bearer_profile_source_from_mbim_context_source (MbimContextSource value,
+ GError **error)
+{
+ switch (value) {
+ case MBIM_CONTEXT_SOURCE_ADMIN:
+ return MM_BEARER_PROFILE_SOURCE_ADMIN;
+ case MBIM_CONTEXT_SOURCE_USER:
+ return MM_BEARER_PROFILE_SOURCE_USER;
+ case MBIM_CONTEXT_SOURCE_OPERATOR:
+ return MM_BEARER_PROFILE_SOURCE_OPERATOR;
+ case MBIM_CONTEXT_SOURCE_MODEM:
+ return MM_BEARER_PROFILE_SOURCE_MODEM;
+ case MBIM_CONTEXT_SOURCE_DEVICE:
+ return MM_BEARER_PROFILE_SOURCE_DEVICE;
+ default:
+ g_set_error (error, MM_CORE_ERROR, MM_CORE_ERROR_UNSUPPORTED,
+ "Unsupported context source value: 0x%x", value);
+ return MM_BEARER_PROFILE_SOURCE_UNKNOWN;
+ }
+}
+
+gboolean
+mm_bearer_profile_source_to_mbim_context_source (MMBearerProfileSource value,
+ gpointer log_object,
+ MbimContextSource *out_value,
+ GError **error)
+{
+ switch (value) {
+ case MM_BEARER_PROFILE_SOURCE_UNKNOWN:
+ mm_obj_dbg (log_object, "using default (admin) context source");
+ *out_value = MBIM_CONTEXT_SOURCE_ADMIN;
+ return TRUE;
+ case MM_BEARER_PROFILE_SOURCE_ADMIN:
+ *out_value = MBIM_CONTEXT_SOURCE_ADMIN;
+ return TRUE;
+ case MM_BEARER_PROFILE_SOURCE_USER:
+ *out_value = MBIM_CONTEXT_SOURCE_USER;
+ return TRUE;
+ case MM_BEARER_PROFILE_SOURCE_OPERATOR:
+ *out_value = MBIM_CONTEXT_SOURCE_OPERATOR;
+ return TRUE;
+ case MM_BEARER_PROFILE_SOURCE_MODEM:
+ *out_value = MBIM_CONTEXT_SOURCE_MODEM;
+ return TRUE;
+ case MM_BEARER_PROFILE_SOURCE_DEVICE:
+ *out_value = MBIM_CONTEXT_SOURCE_DEVICE;
+ return TRUE;
+ default:
+ g_set_error (error, MM_CORE_ERROR, MM_CORE_ERROR_UNSUPPORTED,
+ "Unsupported profile source value: 0x%x", value);
+ return FALSE;
+ }
+}
+
+/*****************************************************************************/
+
/* index in the array is the code point (8 possible values), and the actual
* value is the lower limit of the error rate range. */
static const gdouble bit_error_rate_ranges[] = { 0.00, 0.20, 0.40, 0.80, 1.60, 3.20, 6.40, 12.80 };