1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
|
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details:
*
* Copyright (C) 2013 Aleksander Morgado <aleksander@gnu.org>
*/
#ifndef MM_MODEM_HELPERS_MBIM_H
#define MM_MODEM_HELPERS_MBIM_H
#include <config.h>
#include <ModemManager.h>
#define _LIBMM_INSIDE_MM
#include <libmm-glib.h>
#include <libmbim-glib.h>
/*****************************************************************************/
/* MBIM/BasicConnect to MM translations */
MMModemCapability mm_modem_capability_from_mbim_device_caps (MbimCellularClass caps_cellular_class,
MbimDataClass caps_data_class,
const gchar *caps_custom_data_class);
MMModemLock mm_modem_lock_from_mbim_pin_type (MbimPinType pin_type);
MMModem3gppRegistrationState mm_modem_3gpp_registration_state_from_mbim_register_state (MbimRegisterState state);
MMModem3gppPacketServiceState mm_modem_3gpp_packet_service_state_from_mbim_packet_service_state (MbimPacketServiceState state);
MbimDataClass mm_mbim_data_class_from_mbim_data_class_v3_and_subclass (MbimDataClassV3 data_class_v3,
MbimDataSubclass data_subclass);
MMModemMode mm_modem_mode_from_mbim_data_class (MbimDataClass data_class,
const gchar *caps_custom_data_class);
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);
MMModem3gppNetworkAvailability mm_modem_3gpp_network_availability_from_mbim_provider_state (MbimProviderState state);
GList *mm_3gpp_network_info_list_from_mbim_providers (const MbimProvider *const *providers, guint n_providers);
MbimPinType mbim_pin_type_from_mm_modem_3gpp_facility (MMModem3gppFacility facility);
MMModem3gppFacility mm_modem_3gpp_facility_from_mbim_pin_type (MbimPinType pin_type);
GError *mm_error_from_mbim_nw_error (MbimNwError nw_error,
gpointer log_object);
MMBearerAllowedAuth mm_bearer_allowed_auth_from_mbim_auth_protocol (MbimAuthProtocol auth_protocol);
MbimAuthProtocol mm_bearer_allowed_auth_to_mbim_auth_protocol (MMBearerAllowedAuth bearer_auth,
gpointer log_object,
GError **error);
MMBearerIpFamily mm_bearer_ip_family_from_mbim_context_ip_type (MbimContextIpType ip_type);
MbimContextIpType mm_bearer_ip_family_to_mbim_context_ip_type (MMBearerIpFamily ip_family,
GError **error);
MMBearerApnType mm_bearer_apn_type_from_mbim_context_type (MbimContextType context_type);
MbimContextType mm_bearer_apn_type_to_mbim_context_type (MMBearerApnType apn_type,
gboolean mbim_extensions_supported,
gpointer log_object,
GError **error);
gboolean mm_bearer_roaming_allowance_to_mbim_context_roaming_control (MMBearerRoamingAllowance mask,
gpointer log_object,
MbimContextRoamingControl *out_value,
GError **error);
MMBearerRoamingAllowance mm_bearer_roaming_allowance_from_mbim_context_roaming_control (MbimContextRoamingControl value,
GError **error);
gboolean mm_bearer_access_type_preference_to_mbim_context_media_type (MMBearerAccessTypePreference value,
gpointer log_object,
MbimContextMediaType *out_value,
GError **error);
gboolean mm_bearer_access_type_preference_from_mbim_context_media_type (MbimContextMediaType value,
MMBearerAccessTypePreference *out_value,
GError **error);
gboolean mm_boolean_from_mbim_context_state (MbimContextState value,
gboolean *out_value,
GError **error);
MbimContextState mm_boolean_to_mbim_context_state (gboolean value);
MMBearerProfileSource mm_bearer_profile_source_from_mbim_context_source (MbimContextSource value,
GError **error);
gboolean mm_bearer_profile_source_to_mbim_context_source (MMBearerProfileSource value,
gpointer log_object,
MbimContextSource *out_value,
GError **error);
gboolean mm_signal_error_rate_percentage_from_coded_value (guint coded_value,
gdouble *out_percentage,
gboolean is_gsm,
GError **error);
gboolean mm_signal_rssi_from_coded_value (guint coded_value,
gdouble *out_rssi,
GError **error);
gboolean mm_signal_rsrp_from_coded_value (guint coded_value,
gdouble *out_rsrp,
GError **error);
gboolean mm_signal_snr_from_coded_value (guint coded_value,
gdouble *out_snr,
GError **error);
MMModem3gppMicoMode mm_modem_3gpp_mico_mode_from_mbim_mico_mode (MbimMicoMode mico_mode);
MbimMicoMode mm_modem_3gpp_mico_mode_to_mbim_mico_mode (MMModem3gppMicoMode mico_mode);
MMModem3gppDrxCycle mm_modem_3gpp_drx_cycle_from_mbim_drx_cycle (MbimDrxCycle drx_cycle);
MbimDrxCycle mm_modem_3gpp_drx_cycle_to_mbim_drx_cycle (MMModem3gppDrxCycle drx_cycle);
/*****************************************************************************/
/* MBIM/SMS to MM translations */
MMSmsState mm_sms_state_from_mbim_message_status (MbimSmsStatus status);
/*****************************************************************************/
guint mm_signal_quality_from_mbim_signal_state (guint rssi,
MbimRsrpSnrInfoArray *rsrp_snr,
guint32 rsrp_snr_count,
gpointer log_object);
gboolean mm_signal_from_mbim_signal_state (MbimDataClass data_class,
guint coded_rssi,
guint coded_error_rate,
MbimRsrpSnrInfoArray *rsrp_snr,
guint32 rsrp_snr_count,
gpointer log_object,
MMSignal **out_cdma,
MMSignal **out_evdo,
MMSignal **out_gsm,
MMSignal **out_umts,
MMSignal **out_lte,
MMSignal **out_nr5g);
gboolean mm_signal_from_atds_signal_response (guint32 rssi,
guint32 rscp,
guint32 ecno,
guint32 rsrq,
guint32 rsrp,
guint32 snr,
MMSignal **out_gsm,
MMSignal **out_umts,
MMSignal **out_lte);
/*****************************************************************************/
/* RF utilities */
/*****************************************************************************/
/* Value defined to allow tolerance in the center frequency comparison logic */
#define FREQUENCY_TOLERANCE_HZ 300
typedef struct {
MMServingCellType serving_cell_type;
guint32 bandwidth;
guint64 center_frequency;
} MMRfInfo;
void mm_rf_info_free (MMRfInfo *rf_data);
void mm_rfim_info_list_free (GList *rfim_info_list);
GList *mm_rfim_info_list_from_mbim_intel_rfim_frequency_value_array (MbimIntelRfimFrequencyValueArray *freq_info,
guint freq_count,
gpointer log_object);
gdouble mm_earfcn_to_frequency (guint32 earfcn,
gpointer log_object);
gdouble mm_nrarfcn_to_frequency (guint32 nrarfcn,
gpointer log_object);
#endif /* MM_MODEM_HELPERS_MBIM_H */
|