aboutsummaryrefslogtreecommitdiff
path: root/src/mm-modem-helpers-mbim.h
blob: 89c1f752497737f829433cf9a18bf554478729ca (plain)
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_mobile_equipment_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 */