broadband-modem-qmi: move common enum translators to new -helpers-qmi.[ch] files
This commit is contained in:
@@ -25,6 +25,8 @@ libmodem_helpers_la_SOURCES = \
|
|||||||
mm-error-helpers.h \
|
mm-error-helpers.h \
|
||||||
mm-modem-helpers.c \
|
mm-modem-helpers.c \
|
||||||
mm-modem-helpers.h \
|
mm-modem-helpers.h \
|
||||||
|
mm-modem-helpers-qmi.c \
|
||||||
|
mm-modem-helpers-qmi.h \
|
||||||
mm-charsets.c \
|
mm-charsets.c \
|
||||||
mm-charsets.h \
|
mm-charsets.h \
|
||||||
mm-utils.c \
|
mm-utils.c \
|
||||||
|
@@ -27,6 +27,7 @@
|
|||||||
#include "mm-log.h"
|
#include "mm-log.h"
|
||||||
#include "mm-errors-types.h"
|
#include "mm-errors-types.h"
|
||||||
#include "mm-modem-helpers.h"
|
#include "mm-modem-helpers.h"
|
||||||
|
#include "mm-modem-helpers-qmi.h"
|
||||||
#include "mm-iface-modem.h"
|
#include "mm-iface-modem.h"
|
||||||
#include "mm-iface-modem-3gpp.h"
|
#include "mm-iface-modem-3gpp.h"
|
||||||
#include "mm-iface-modem-3gpp-ussd.h"
|
#include "mm-iface-modem-3gpp-ussd.h"
|
||||||
@@ -172,27 +173,6 @@ modem_load_current_capabilities_finish (MMIfaceModem *self,
|
|||||||
return caps;
|
return caps;
|
||||||
}
|
}
|
||||||
|
|
||||||
static MMModemCapability
|
|
||||||
qmi_network_to_modem_capability (QmiDmsRadioInterface network)
|
|
||||||
{
|
|
||||||
switch (network) {
|
|
||||||
case QMI_DMS_RADIO_INTERFACE_CDMA20001X:
|
|
||||||
return MM_MODEM_CAPABILITY_CDMA_EVDO;
|
|
||||||
case QMI_DMS_RADIO_INTERFACE_EVDO:
|
|
||||||
return MM_MODEM_CAPABILITY_CDMA_EVDO;
|
|
||||||
case QMI_DMS_RADIO_INTERFACE_GSM:
|
|
||||||
return MM_MODEM_CAPABILITY_GSM_UMTS;
|
|
||||||
case QMI_DMS_RADIO_INTERFACE_UMTS:
|
|
||||||
return MM_MODEM_CAPABILITY_GSM_UMTS;
|
|
||||||
case QMI_DMS_RADIO_INTERFACE_LTE:
|
|
||||||
return MM_MODEM_CAPABILITY_LTE;
|
|
||||||
default:
|
|
||||||
mm_warn ("Unhandled QMI radio interface received (%u)",
|
|
||||||
(guint)network);
|
|
||||||
return MM_MODEM_CAPABILITY_NONE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
dms_get_capabilities_ready (QmiClientDms *client,
|
dms_get_capabilities_ready (QmiClientDms *client,
|
||||||
GAsyncResult *res,
|
GAsyncResult *res,
|
||||||
@@ -223,9 +203,9 @@ dms_get_capabilities_ready (QmiClientDms *client,
|
|||||||
NULL);
|
NULL);
|
||||||
|
|
||||||
for (i = 0; i < radio_interface_list->len; i++) {
|
for (i = 0; i < radio_interface_list->len; i++) {
|
||||||
mask |= qmi_network_to_modem_capability (g_array_index (radio_interface_list,
|
mask |= mm_modem_capability_from_qmi_radio_interface (g_array_index (radio_interface_list,
|
||||||
QmiDmsRadioInterface,
|
QmiDmsRadioInterface,
|
||||||
i));
|
i));
|
||||||
}
|
}
|
||||||
|
|
||||||
g_simple_async_result_set_op_res_gpointer (simple,
|
g_simple_async_result_set_op_res_gpointer (simple,
|
||||||
@@ -760,36 +740,6 @@ modem_load_unlock_required_finish (MMIfaceModem *self,
|
|||||||
G_SIMPLE_ASYNC_RESULT (res)));
|
G_SIMPLE_ASYNC_RESULT (res)));
|
||||||
}
|
}
|
||||||
|
|
||||||
static MMModemLock
|
|
||||||
uim_pin_status_to_modem_lock (QmiDmsUimPinStatus status,
|
|
||||||
gboolean pin1) /* TRUE for PIN1, FALSE for PIN2 */
|
|
||||||
{
|
|
||||||
switch (status) {
|
|
||||||
case QMI_DMS_UIM_PIN_STATUS_NOT_INITIALIZED:
|
|
||||||
return MM_MODEM_LOCK_UNKNOWN;
|
|
||||||
case QMI_DMS_UIM_PIN_STATUS_ENABLED_NOT_VERIFIED:
|
|
||||||
return pin1 ? MM_MODEM_LOCK_SIM_PIN : MM_MODEM_LOCK_SIM_PIN2;
|
|
||||||
case QMI_DMS_UIM_PIN_STATUS_ENABLED_VERIFIED:
|
|
||||||
return MM_MODEM_LOCK_NONE;
|
|
||||||
case QMI_DMS_UIM_PIN_STATUS_DISABLED:
|
|
||||||
return MM_MODEM_LOCK_NONE;
|
|
||||||
case QMI_DMS_UIM_PIN_STATUS_BLOCKED:
|
|
||||||
return pin1 ? MM_MODEM_LOCK_SIM_PUK : MM_MODEM_LOCK_SIM_PUK2;
|
|
||||||
case QMI_DMS_UIM_PIN_STATUS_PERMANENTLY_BLOCKED:
|
|
||||||
return MM_MODEM_LOCK_UNKNOWN;
|
|
||||||
case QMI_DMS_UIM_PIN_STATUS_UNBLOCKED:
|
|
||||||
/* This state is possibly given when after an Unblock() operation has been performed.
|
|
||||||
* We'll assume the PIN is verified after this. */
|
|
||||||
return MM_MODEM_LOCK_NONE;
|
|
||||||
case QMI_DMS_UIM_PIN_STATUS_CHANGED:
|
|
||||||
/* This state is possibly given when after an ChangePin() operation has been performed.
|
|
||||||
* We'll assume the PIN is verified after this. */
|
|
||||||
return MM_MODEM_LOCK_NONE;
|
|
||||||
default:
|
|
||||||
return MM_MODEM_LOCK_UNKNOWN;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
dms_uim_get_pin_status_ready (QmiClientDms *client,
|
dms_uim_get_pin_status_ready (QmiClientDms *client,
|
||||||
GAsyncResult *res,
|
GAsyncResult *res,
|
||||||
@@ -828,7 +778,7 @@ dms_uim_get_pin_status_ready (QmiClientDms *client,
|
|||||||
NULL, /* verify_retries_left */
|
NULL, /* verify_retries_left */
|
||||||
NULL, /* unblock_retries_left */
|
NULL, /* unblock_retries_left */
|
||||||
NULL))
|
NULL))
|
||||||
lock = uim_pin_status_to_modem_lock (current_status, TRUE);
|
lock = mm_modem_lock_from_qmi_uim_pin_status (current_status, TRUE);
|
||||||
|
|
||||||
if (lock == MM_MODEM_LOCK_NONE &&
|
if (lock == MM_MODEM_LOCK_NONE &&
|
||||||
qmi_message_dms_uim_get_pin_status_output_get_pin2_status (
|
qmi_message_dms_uim_get_pin_status_output_get_pin2_status (
|
||||||
@@ -837,7 +787,7 @@ dms_uim_get_pin_status_ready (QmiClientDms *client,
|
|||||||
NULL, /* verify_retries_left */
|
NULL, /* verify_retries_left */
|
||||||
NULL, /* unblock_retries_left */
|
NULL, /* unblock_retries_left */
|
||||||
NULL))
|
NULL))
|
||||||
lock = uim_pin_status_to_modem_lock (current_status, FALSE);
|
lock = mm_modem_lock_from_qmi_uim_pin_status (current_status, FALSE);
|
||||||
|
|
||||||
g_simple_async_result_set_op_res_gpointer (simple, GUINT_TO_POINTER (lock), NULL);
|
g_simple_async_result_set_op_res_gpointer (simple, GUINT_TO_POINTER (lock), NULL);
|
||||||
}
|
}
|
||||||
@@ -984,165 +934,6 @@ modem_load_supported_bands_finish (MMIfaceModem *self,
|
|||||||
G_SIMPLE_ASYNC_RESULT (res)));
|
G_SIMPLE_ASYNC_RESULT (res)));
|
||||||
}
|
}
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
QmiDmsBandCapability qmi_band;
|
|
||||||
MMModemBand mm_band;
|
|
||||||
} BandsMap;
|
|
||||||
|
|
||||||
static const BandsMap bands_map [] = {
|
|
||||||
/* CDMA bands */
|
|
||||||
{
|
|
||||||
(QMI_DMS_BAND_CAPABILITY_BC_0_A_SYSTEM | QMI_DMS_BAND_CAPABILITY_BC_0_B_SYSTEM),
|
|
||||||
MM_MODEM_BAND_CDMA_BC0_CELLULAR_800
|
|
||||||
},
|
|
||||||
{ QMI_DMS_BAND_CAPABILITY_BC_1_ALL_BLOCKS, MM_MODEM_BAND_CDMA_BC1_PCS_1900 },
|
|
||||||
{ QMI_DMS_BAND_CAPABILITY_BC_2, MM_MODEM_BAND_CDMA_BC2_TACS },
|
|
||||||
{ QMI_DMS_BAND_CAPABILITY_BC_3_A_SYSTEM, MM_MODEM_BAND_CDMA_BC3_JTACS },
|
|
||||||
{ QMI_DMS_BAND_CAPABILITY_BC_4_ALL_BLOCKS, MM_MODEM_BAND_CDMA_BC4_KOREAN_PCS },
|
|
||||||
{ QMI_DMS_BAND_CAPABILITY_BC_5_ALL_BLOCKS, MM_MODEM_BAND_CDMA_BC5_NMT450 },
|
|
||||||
{ QMI_DMS_BAND_CAPABILITY_BC_6, MM_MODEM_BAND_CDMA_BC6_IMT2000 },
|
|
||||||
{ QMI_DMS_BAND_CAPABILITY_BC_7, MM_MODEM_BAND_CDMA_BC7_CELLULAR_700 },
|
|
||||||
{ QMI_DMS_BAND_CAPABILITY_BC_8, MM_MODEM_BAND_CDMA_BC8_1800 },
|
|
||||||
{ QMI_DMS_BAND_CAPABILITY_BC_9, MM_MODEM_BAND_CDMA_BC9_900 },
|
|
||||||
{ QMI_DMS_BAND_CAPABILITY_BC_10, MM_MODEM_BAND_CDMA_BC10_SECONDARY_800 },
|
|
||||||
{ QMI_DMS_BAND_CAPABILITY_BC_11, MM_MODEM_BAND_CDMA_BC11_PAMR_400 },
|
|
||||||
{ QMI_DMS_BAND_CAPABILITY_BC_12, MM_MODEM_BAND_CDMA_BC12_PAMR_800 },
|
|
||||||
{ QMI_DMS_BAND_CAPABILITY_BC_14, MM_MODEM_BAND_CDMA_BC14_PCS2_1900 },
|
|
||||||
{ QMI_DMS_BAND_CAPABILITY_BC_15, MM_MODEM_BAND_CDMA_BC15_AWS },
|
|
||||||
{ QMI_DMS_BAND_CAPABILITY_BC_16, MM_MODEM_BAND_CDMA_BC16_US_2500 },
|
|
||||||
{ QMI_DMS_BAND_CAPABILITY_BC_17, MM_MODEM_BAND_CDMA_BC17_US_FLO_2500 },
|
|
||||||
{ QMI_DMS_BAND_CAPABILITY_BC_18, MM_MODEM_BAND_CDMA_BC18_US_PS_700 },
|
|
||||||
{ QMI_DMS_BAND_CAPABILITY_BC_19, MM_MODEM_BAND_CDMA_BC19_US_LOWER_700 },
|
|
||||||
|
|
||||||
/* GSM bands */
|
|
||||||
{ QMI_DMS_BAND_CAPABILITY_GSM_DCS_1800, MM_MODEM_BAND_DCS },
|
|
||||||
{ QMI_DMS_BAND_CAPABILITY_GSM_900_EXTENDED, MM_MODEM_BAND_EGSM },
|
|
||||||
{ QMI_DMS_BAND_CAPABILITY_GSM_PCS_1900, MM_MODEM_BAND_PCS },
|
|
||||||
{ QMI_DMS_BAND_CAPABILITY_GSM_850, MM_MODEM_BAND_G850 },
|
|
||||||
|
|
||||||
/* UMTS/WCDMA bands */
|
|
||||||
{ QMI_DMS_BAND_CAPABILITY_WCDMA_2100, MM_MODEM_BAND_U2100 },
|
|
||||||
{ QMI_DMS_BAND_CAPABILITY_WCDMA_DCS_1800, MM_MODEM_BAND_U1800 },
|
|
||||||
{ QMI_DMS_BAND_CAPABILITY_WCDMA_1700_US, MM_MODEM_BAND_U17IV },
|
|
||||||
{ QMI_DMS_BAND_CAPABILITY_WCDMA_800, MM_MODEM_BAND_U800 },
|
|
||||||
{
|
|
||||||
(QMI_DMS_BAND_CAPABILITY_WCDMA_850_US | QMI_DMS_BAND_CAPABILITY_WCDMA_850_JAPAN),
|
|
||||||
MM_MODEM_BAND_U850
|
|
||||||
},
|
|
||||||
{ QMI_DMS_BAND_CAPABILITY_WCDMA_900, MM_MODEM_BAND_U900 },
|
|
||||||
{ QMI_DMS_BAND_CAPABILITY_WCDMA_1700_JAPAN, MM_MODEM_BAND_U17IX },
|
|
||||||
{ QMI_DMS_BAND_CAPABILITY_WCDMA_2600, MM_MODEM_BAND_U2600 }
|
|
||||||
|
|
||||||
/* NOTE. The following bands were unmatched:
|
|
||||||
*
|
|
||||||
* - QMI_DMS_BAND_CAPABILITY_GSM_900_PRIMARY
|
|
||||||
* - QMI_DMS_BAND_CAPABILITY_GSM_450
|
|
||||||
* - QMI_DMS_BAND_CAPABILITY_GSM_480
|
|
||||||
* - QMI_DMS_BAND_CAPABILITY_GSM_750
|
|
||||||
* - QMI_DMS_BAND_CAPABILITY_GSM_900_RAILWAILS
|
|
||||||
* - QMI_DMS_BAND_CAPABILITY_WCDMA_1500
|
|
||||||
* - MM_MODEM_BAND_CDMA_BC13_IMT2000_2500
|
|
||||||
* - MM_MODEM_BAND_U1900
|
|
||||||
*/
|
|
||||||
};
|
|
||||||
|
|
||||||
static void
|
|
||||||
add_qmi_bands (GArray *mm_bands,
|
|
||||||
QmiDmsBandCapability qmi_bands)
|
|
||||||
{
|
|
||||||
static QmiDmsBandCapability qmi_bands_expected = 0;
|
|
||||||
QmiDmsBandCapability not_expected;
|
|
||||||
guint i;
|
|
||||||
|
|
||||||
g_assert (mm_bands != NULL);
|
|
||||||
|
|
||||||
/* Build mask of expected bands only once */
|
|
||||||
if (G_UNLIKELY (qmi_bands_expected == 0)) {
|
|
||||||
for (i = 0; i < G_N_ELEMENTS (bands_map); i++) {
|
|
||||||
qmi_bands_expected |= bands_map[i].qmi_band;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Log about the bands that cannot be represented in ModemManager */
|
|
||||||
not_expected = ((qmi_bands_expected ^ qmi_bands) & qmi_bands);
|
|
||||||
if (not_expected) {
|
|
||||||
gchar *aux;
|
|
||||||
|
|
||||||
aux = qmi_dms_band_capability_build_string_from_mask (not_expected);
|
|
||||||
mm_dbg ("Cannot add the following bands: '%s'", aux);
|
|
||||||
g_free (aux);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* And add the expected ones */
|
|
||||||
for (i = 0; i < G_N_ELEMENTS (bands_map); i++) {
|
|
||||||
if (qmi_bands & bands_map[i].qmi_band)
|
|
||||||
g_array_append_val (mm_bands, bands_map[i].mm_band);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
QmiDmsLteBandCapability qmi_band;
|
|
||||||
MMModemBand mm_band;
|
|
||||||
} LteBandsMap;
|
|
||||||
|
|
||||||
static const LteBandsMap lte_bands_map [] = {
|
|
||||||
{ QMI_DMS_LTE_BAND_CAPABILITY_EUTRAN_1, MM_MODEM_BAND_EUTRAN_I },
|
|
||||||
{ QMI_DMS_LTE_BAND_CAPABILITY_EUTRAN_2, MM_MODEM_BAND_EUTRAN_II },
|
|
||||||
{ QMI_DMS_LTE_BAND_CAPABILITY_EUTRAN_3, MM_MODEM_BAND_EUTRAN_III },
|
|
||||||
{ QMI_DMS_LTE_BAND_CAPABILITY_EUTRAN_4, MM_MODEM_BAND_EUTRAN_IV },
|
|
||||||
{ QMI_DMS_LTE_BAND_CAPABILITY_EUTRAN_5, MM_MODEM_BAND_EUTRAN_V },
|
|
||||||
{ QMI_DMS_LTE_BAND_CAPABILITY_EUTRAN_6, MM_MODEM_BAND_EUTRAN_VI },
|
|
||||||
{ QMI_DMS_LTE_BAND_CAPABILITY_EUTRAN_7, MM_MODEM_BAND_EUTRAN_VII },
|
|
||||||
{ QMI_DMS_LTE_BAND_CAPABILITY_EUTRAN_8, MM_MODEM_BAND_EUTRAN_VIII },
|
|
||||||
{ QMI_DMS_LTE_BAND_CAPABILITY_EUTRAN_9, MM_MODEM_BAND_EUTRAN_IX },
|
|
||||||
{ QMI_DMS_LTE_BAND_CAPABILITY_EUTRAN_10, MM_MODEM_BAND_EUTRAN_X },
|
|
||||||
{ QMI_DMS_LTE_BAND_CAPABILITY_EUTRAN_11, MM_MODEM_BAND_EUTRAN_XI },
|
|
||||||
{ QMI_DMS_LTE_BAND_CAPABILITY_EUTRAN_12, MM_MODEM_BAND_EUTRAN_XII },
|
|
||||||
{ QMI_DMS_LTE_BAND_CAPABILITY_EUTRAN_13, MM_MODEM_BAND_EUTRAN_XIII },
|
|
||||||
{ QMI_DMS_LTE_BAND_CAPABILITY_EUTRAN_14, MM_MODEM_BAND_EUTRAN_XIV },
|
|
||||||
{ QMI_DMS_LTE_BAND_CAPABILITY_EUTRAN_17, MM_MODEM_BAND_EUTRAN_XVII },
|
|
||||||
{ QMI_DMS_LTE_BAND_CAPABILITY_EUTRAN_18, MM_MODEM_BAND_EUTRAN_XVIII },
|
|
||||||
{ QMI_DMS_LTE_BAND_CAPABILITY_EUTRAN_19, MM_MODEM_BAND_EUTRAN_XIX },
|
|
||||||
{ QMI_DMS_LTE_BAND_CAPABILITY_EUTRAN_20, MM_MODEM_BAND_EUTRAN_XX },
|
|
||||||
{ QMI_DMS_LTE_BAND_CAPABILITY_EUTRAN_21, MM_MODEM_BAND_EUTRAN_XXI },
|
|
||||||
{ QMI_DMS_LTE_BAND_CAPABILITY_EUTRAN_24, MM_MODEM_BAND_EUTRAN_XXIV },
|
|
||||||
{ QMI_DMS_LTE_BAND_CAPABILITY_EUTRAN_25, MM_MODEM_BAND_EUTRAN_XXV },
|
|
||||||
{ QMI_DMS_LTE_BAND_CAPABILITY_EUTRAN_33, MM_MODEM_BAND_EUTRAN_XXXIII },
|
|
||||||
{ QMI_DMS_LTE_BAND_CAPABILITY_EUTRAN_34, MM_MODEM_BAND_EUTRAN_XXXIV },
|
|
||||||
{ QMI_DMS_LTE_BAND_CAPABILITY_EUTRAN_35, MM_MODEM_BAND_EUTRAN_XXXV },
|
|
||||||
{ QMI_DMS_LTE_BAND_CAPABILITY_EUTRAN_36, MM_MODEM_BAND_EUTRAN_XXXVI },
|
|
||||||
{ QMI_DMS_LTE_BAND_CAPABILITY_EUTRAN_37, MM_MODEM_BAND_EUTRAN_XXXVII },
|
|
||||||
{ QMI_DMS_LTE_BAND_CAPABILITY_EUTRAN_38, MM_MODEM_BAND_EUTRAN_XXXVIII },
|
|
||||||
{ QMI_DMS_LTE_BAND_CAPABILITY_EUTRAN_39, MM_MODEM_BAND_EUTRAN_XXXIX },
|
|
||||||
{ QMI_DMS_LTE_BAND_CAPABILITY_EUTRAN_40, MM_MODEM_BAND_EUTRAN_XL },
|
|
||||||
{ QMI_DMS_LTE_BAND_CAPABILITY_EUTRAN_41, MM_MODEM_BAND_EUTRAN_XLI },
|
|
||||||
{ QMI_DMS_LTE_BAND_CAPABILITY_EUTRAN_42, MM_MODEM_BAND_EUTRAN_XLI },
|
|
||||||
{ QMI_DMS_LTE_BAND_CAPABILITY_EUTRAN_43, MM_MODEM_BAND_EUTRAN_XLIII }
|
|
||||||
|
|
||||||
/* NOTE. The following bands were unmatched:
|
|
||||||
*
|
|
||||||
* - MM_MODEM_BAND_EUTRAN_XXII
|
|
||||||
* - MM_MODEM_BAND_EUTRAN_XXIII
|
|
||||||
* - MM_MODEM_BAND_EUTRAN_XXVI
|
|
||||||
*/
|
|
||||||
};
|
|
||||||
|
|
||||||
static void
|
|
||||||
add_qmi_lte_bands (GArray *mm_bands,
|
|
||||||
QmiDmsLteBandCapability qmi_bands)
|
|
||||||
{
|
|
||||||
/* All QMI LTE bands have a counterpart in ModemManager, no need to check
|
|
||||||
* for unexpected ones */
|
|
||||||
guint i;
|
|
||||||
|
|
||||||
g_assert (mm_bands != NULL);
|
|
||||||
|
|
||||||
for (i = 0; i < G_N_ELEMENTS (lte_bands_map); i++) {
|
|
||||||
if (qmi_bands & lte_bands_map[i].qmi_band)
|
|
||||||
g_array_append_val (mm_bands, lte_bands_map[i].mm_band);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
dms_get_band_capabilities_ready (QmiClientDms *client,
|
dms_get_band_capabilities_ready (QmiClientDms *client,
|
||||||
GAsyncResult *res,
|
GAsyncResult *res,
|
||||||
@@ -1160,24 +951,19 @@ dms_get_band_capabilities_ready (QmiClientDms *client,
|
|||||||
g_simple_async_result_take_error (simple, error);
|
g_simple_async_result_take_error (simple, error);
|
||||||
} else {
|
} else {
|
||||||
GArray *mm_bands;
|
GArray *mm_bands;
|
||||||
QmiDmsBandCapability qmi_bands;
|
QmiDmsBandCapability qmi_bands = 0;
|
||||||
QmiDmsLteBandCapability qmi_lte_bands;
|
QmiDmsLteBandCapability qmi_lte_bands = 0;
|
||||||
|
|
||||||
mm_bands = g_array_new (FALSE, FALSE, sizeof (MMModemBand));
|
|
||||||
|
|
||||||
qmi_message_dms_get_band_capabilities_output_get_band_capability (
|
qmi_message_dms_get_band_capabilities_output_get_band_capability (
|
||||||
output,
|
output,
|
||||||
&qmi_bands,
|
&qmi_bands,
|
||||||
NULL);
|
NULL);
|
||||||
|
qmi_message_dms_get_band_capabilities_output_get_lte_band_capability (
|
||||||
|
output,
|
||||||
|
&qmi_lte_bands,
|
||||||
|
NULL);
|
||||||
|
|
||||||
add_qmi_bands (mm_bands, qmi_bands);
|
mm_bands = mm_modem_bands_from_qmi_band_capabilities (qmi_bands, qmi_lte_bands);
|
||||||
|
|
||||||
if (qmi_message_dms_get_band_capabilities_output_get_lte_band_capability (
|
|
||||||
output,
|
|
||||||
&qmi_lte_bands,
|
|
||||||
NULL)) {
|
|
||||||
add_qmi_lte_bands (mm_bands, qmi_lte_bands);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mm_bands->len == 0) {
|
if (mm_bands->len == 0) {
|
||||||
g_array_unref (mm_bands);
|
g_array_unref (mm_bands);
|
||||||
@@ -1759,33 +1545,6 @@ load_allowed_modes_finish (MMIfaceModem *self,
|
|||||||
|
|
||||||
static void load_allowed_modes_context_step (LoadAllowedModesContext *ctx);
|
static void load_allowed_modes_context_step (LoadAllowedModesContext *ctx);
|
||||||
|
|
||||||
static MMModemMode
|
|
||||||
modem_mode_from_qmi_radio_technology_preference (QmiNasRatModePreference qmi)
|
|
||||||
{
|
|
||||||
MMModemMode mode = MM_MODEM_MODE_NONE;
|
|
||||||
|
|
||||||
if (qmi & QMI_NAS_RADIO_TECHNOLOGY_PREFERENCE_3GPP2) {
|
|
||||||
if (qmi & QMI_NAS_RADIO_TECHNOLOGY_PREFERENCE_AMPS_OR_GSM)
|
|
||||||
mode |= MM_MODEM_MODE_CS; /* AMPS */
|
|
||||||
if (qmi & QMI_NAS_RADIO_TECHNOLOGY_PREFERENCE_CDMA_OR_WCDMA)
|
|
||||||
mode |= MM_MODEM_MODE_2G; /* CDMA */
|
|
||||||
if (qmi & QMI_NAS_RADIO_TECHNOLOGY_PREFERENCE_HDR)
|
|
||||||
mode |= MM_MODEM_MODE_3G; /* EV-DO */
|
|
||||||
}
|
|
||||||
|
|
||||||
if (qmi & QMI_NAS_RADIO_TECHNOLOGY_PREFERENCE_3GPP) {
|
|
||||||
if (qmi & QMI_NAS_RADIO_TECHNOLOGY_PREFERENCE_AMPS_OR_GSM)
|
|
||||||
mode |= (MM_MODEM_MODE_CS | MM_MODEM_MODE_2G); /* GSM */
|
|
||||||
if (qmi & QMI_NAS_RADIO_TECHNOLOGY_PREFERENCE_CDMA_OR_WCDMA)
|
|
||||||
mode |= MM_MODEM_MODE_3G; /* WCDMA */
|
|
||||||
}
|
|
||||||
|
|
||||||
if (qmi & QMI_NAS_RADIO_TECHNOLOGY_PREFERENCE_LTE)
|
|
||||||
mode |= MM_MODEM_MODE_4G;
|
|
||||||
|
|
||||||
return mode;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
get_technology_preference_ready (QmiClientNas *client,
|
get_technology_preference_ready (QmiClientNas *client,
|
||||||
GAsyncResult *res,
|
GAsyncResult *res,
|
||||||
@@ -1811,7 +1570,7 @@ get_technology_preference_ready (QmiClientNas *client,
|
|||||||
&preference_mask,
|
&preference_mask,
|
||||||
NULL, /* duration */
|
NULL, /* duration */
|
||||||
NULL);
|
NULL);
|
||||||
allowed = modem_mode_from_qmi_radio_technology_preference (preference_mask);
|
allowed = mm_modem_mode_from_qmi_radio_technology_preference (preference_mask);
|
||||||
if (allowed == MM_MODEM_MODE_NONE) {
|
if (allowed == MM_MODEM_MODE_NONE) {
|
||||||
gchar *str;
|
gchar *str;
|
||||||
|
|
||||||
@@ -1844,50 +1603,6 @@ get_technology_preference_ready (QmiClientNas *client,
|
|||||||
|
|
||||||
#if defined WITH_NEWEST_QMI_COMMANDS
|
#if defined WITH_NEWEST_QMI_COMMANDS
|
||||||
|
|
||||||
static MMModemMode
|
|
||||||
modem_mode_from_qmi_rat_mode_preference (QmiNasRatModePreference qmi)
|
|
||||||
{
|
|
||||||
MMModemMode mode = MM_MODEM_MODE_NONE;
|
|
||||||
|
|
||||||
if (qmi & QMI_NAS_RAT_MODE_PREFERENCE_CDMA_1X)
|
|
||||||
mode |= MM_MODEM_MODE_2G;
|
|
||||||
|
|
||||||
if (qmi & QMI_NAS_RAT_MODE_PREFERENCE_CDMA_1XEVDO)
|
|
||||||
mode |= MM_MODEM_MODE_3G;
|
|
||||||
|
|
||||||
if (qmi & QMI_NAS_RAT_MODE_PREFERENCE_GSM)
|
|
||||||
mode |= MM_MODEM_MODE_2G;
|
|
||||||
|
|
||||||
if (qmi & QMI_NAS_RAT_MODE_PREFERENCE_UMTS)
|
|
||||||
mode |= MM_MODEM_MODE_3G;
|
|
||||||
|
|
||||||
if (qmi & QMI_NAS_RAT_MODE_PREFERENCE_LTE)
|
|
||||||
mode |= MM_MODEM_MODE_4G;
|
|
||||||
|
|
||||||
/* Assume CS if 2G supported */
|
|
||||||
if (mode & MM_MODEM_MODE_2G)
|
|
||||||
mode |= MM_MODEM_MODE_CS;
|
|
||||||
|
|
||||||
return mode;
|
|
||||||
}
|
|
||||||
|
|
||||||
static MMModemMode
|
|
||||||
modem_mode_from_qmi_gsm_wcdma_acquisition_order_preference (QmiNasGsmWcdmaAcquisitionOrderPreference qmi)
|
|
||||||
{
|
|
||||||
switch (qmi) {
|
|
||||||
case QMI_NAS_GSM_WCDMA_ACQUISITION_ORDER_PREFERENCE_AUTOMATIC:
|
|
||||||
return MM_MODEM_MODE_NONE;
|
|
||||||
case QMI_NAS_GSM_WCDMA_ACQUISITION_ORDER_PREFERENCE_GSM:
|
|
||||||
return MM_MODEM_MODE_2G;
|
|
||||||
case QMI_NAS_GSM_WCDMA_ACQUISITION_ORDER_PREFERENCE_WCDMA:
|
|
||||||
return MM_MODEM_MODE_3G;
|
|
||||||
default:
|
|
||||||
mm_dbg ("Unknown acquisition order preference: '%s'",
|
|
||||||
qmi_nas_gsm_wcdma_acquisition_order_preference_get_string (qmi));
|
|
||||||
return MM_MODEM_MODE_NONE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
allowed_modes_get_system_selection_preference_ready (QmiClientNas *client,
|
allowed_modes_get_system_selection_preference_ready (QmiClientNas *client,
|
||||||
GAsyncResult *res,
|
GAsyncResult *res,
|
||||||
@@ -1916,7 +1631,7 @@ allowed_modes_get_system_selection_preference_ready (QmiClientNas *client,
|
|||||||
} else {
|
} else {
|
||||||
MMModemMode allowed;
|
MMModemMode allowed;
|
||||||
|
|
||||||
allowed = modem_mode_from_qmi_rat_mode_preference (mode_preference_mask);
|
allowed = mm_modem_mode_from_qmi_rat_mode_preference (mode_preference_mask);
|
||||||
if (allowed == MM_MODEM_MODE_NONE) {
|
if (allowed == MM_MODEM_MODE_NONE) {
|
||||||
gchar *str;
|
gchar *str;
|
||||||
|
|
||||||
@@ -1937,7 +1652,7 @@ allowed_modes_get_system_selection_preference_ready (QmiClientNas *client,
|
|||||||
output,
|
output,
|
||||||
&gsm_or_wcdma,
|
&gsm_or_wcdma,
|
||||||
NULL)) {
|
NULL)) {
|
||||||
result->preferred = modem_mode_from_qmi_gsm_wcdma_acquisition_order_preference (gsm_or_wcdma);
|
result->preferred = mm_modem_mode_from_qmi_gsm_wcdma_acquisition_order_preference (gsm_or_wcdma);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2131,89 +1846,6 @@ allowed_modes_set_system_selection_preference_ready (QmiClientNas *client,
|
|||||||
|
|
||||||
#endif /* WITH_NEWEST_QMI_COMMANDS */
|
#endif /* WITH_NEWEST_QMI_COMMANDS */
|
||||||
|
|
||||||
static QmiNasRatModePreference
|
|
||||||
modem_mode_to_qmi_radio_technology_preference (MMModemMode mode,
|
|
||||||
gboolean is_cdma)
|
|
||||||
{
|
|
||||||
QmiNasRatModePreference pref = 0;
|
|
||||||
|
|
||||||
if (is_cdma) {
|
|
||||||
pref |= QMI_NAS_RADIO_TECHNOLOGY_PREFERENCE_3GPP2;
|
|
||||||
if (mode & MM_MODEM_MODE_2G)
|
|
||||||
pref |= QMI_NAS_RADIO_TECHNOLOGY_PREFERENCE_CDMA_OR_WCDMA; /* CDMA */
|
|
||||||
if (mode & MM_MODEM_MODE_3G)
|
|
||||||
pref |= QMI_NAS_RADIO_TECHNOLOGY_PREFERENCE_HDR; /* EV-DO */
|
|
||||||
} else {
|
|
||||||
pref |= QMI_NAS_RADIO_TECHNOLOGY_PREFERENCE_3GPP;
|
|
||||||
if (mode & MM_MODEM_MODE_2G)
|
|
||||||
pref |= QMI_NAS_RADIO_TECHNOLOGY_PREFERENCE_AMPS_OR_GSM; /* GSM */
|
|
||||||
if (mode & MM_MODEM_MODE_3G)
|
|
||||||
pref |= QMI_NAS_RADIO_TECHNOLOGY_PREFERENCE_CDMA_OR_WCDMA; /* WCDMA */
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mode & MM_MODEM_MODE_4G)
|
|
||||||
pref |= QMI_NAS_RADIO_TECHNOLOGY_PREFERENCE_LTE;
|
|
||||||
|
|
||||||
return pref;
|
|
||||||
}
|
|
||||||
|
|
||||||
#if defined WITH_NEWEST_QMI_COMMANDS
|
|
||||||
|
|
||||||
static QmiNasRatModePreference
|
|
||||||
modem_mode_to_qmi_rat_mode_preference (MMModemMode mode,
|
|
||||||
gboolean is_cdma,
|
|
||||||
gboolean is_3gpp)
|
|
||||||
{
|
|
||||||
QmiNasRatModePreference pref = 0;
|
|
||||||
|
|
||||||
if (is_cdma) {
|
|
||||||
if (mode & MM_MODEM_MODE_2G)
|
|
||||||
pref |= QMI_NAS_RAT_MODE_PREFERENCE_CDMA_1X;
|
|
||||||
|
|
||||||
if (mode & MM_MODEM_MODE_3G)
|
|
||||||
pref |= QMI_NAS_RAT_MODE_PREFERENCE_CDMA_1XEVDO;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (is_3gpp) {
|
|
||||||
if (mode & MM_MODEM_MODE_2G)
|
|
||||||
pref |= QMI_NAS_RAT_MODE_PREFERENCE_GSM;
|
|
||||||
|
|
||||||
if (mode & MM_MODEM_MODE_3G)
|
|
||||||
pref |= QMI_NAS_RAT_MODE_PREFERENCE_UMTS;
|
|
||||||
|
|
||||||
if (mode & MM_MODEM_MODE_4G)
|
|
||||||
pref |= QMI_NAS_RAT_MODE_PREFERENCE_LTE;
|
|
||||||
}
|
|
||||||
|
|
||||||
return mode;
|
|
||||||
}
|
|
||||||
|
|
||||||
static QmiNasGsmWcdmaAcquisitionOrderPreference
|
|
||||||
modem_mode_to_qmi_gsm_wcdma_acquisition_order_preference (MMModemMode mode)
|
|
||||||
{
|
|
||||||
gchar *str;
|
|
||||||
|
|
||||||
/* mode is not a mask in this case, only a value */
|
|
||||||
|
|
||||||
switch (mode) {
|
|
||||||
case MM_MODEM_MODE_3G:
|
|
||||||
return QMI_NAS_GSM_WCDMA_ACQUISITION_ORDER_PREFERENCE_WCDMA;
|
|
||||||
case MM_MODEM_MODE_2G:
|
|
||||||
return QMI_NAS_GSM_WCDMA_ACQUISITION_ORDER_PREFERENCE_GSM;
|
|
||||||
case MM_MODEM_MODE_NONE:
|
|
||||||
return QMI_NAS_GSM_WCDMA_ACQUISITION_ORDER_PREFERENCE_AUTOMATIC;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
str = mm_modem_mode_build_string_from_mask (mode);
|
|
||||||
mm_dbg ("Unhandled modem mode: '%s'", str);
|
|
||||||
g_free (str);
|
|
||||||
return MM_MODEM_MODE_NONE;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* WITH_NEWEST_QMI_COMMANDS */
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
set_allowed_modes_context_step (SetAllowedModesContext *ctx)
|
set_allowed_modes_context_step (SetAllowedModesContext *ctx)
|
||||||
{
|
{
|
||||||
@@ -2276,8 +1908,8 @@ set_allowed_modes_context_step (SetAllowedModesContext *ctx)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
pref = modem_mode_to_qmi_radio_technology_preference (ctx->allowed,
|
pref = mm_modem_mode_to_qmi_radio_technology_preference (ctx->allowed,
|
||||||
mm_iface_modem_is_cdma (MM_IFACE_MODEM (ctx->self)));
|
mm_iface_modem_is_cdma (MM_IFACE_MODEM (ctx->self)));
|
||||||
if (!pref) {
|
if (!pref) {
|
||||||
gchar *str;
|
gchar *str;
|
||||||
|
|
||||||
@@ -2434,32 +2066,6 @@ modem_3gpp_load_enabled_facility_locks_finish (MMIfaceModem3gpp *self,
|
|||||||
g_simple_async_result_get_op_res_gpointer (G_SIMPLE_ASYNC_RESULT (res))));
|
g_simple_async_result_get_op_res_gpointer (G_SIMPLE_ASYNC_RESULT (res))));
|
||||||
}
|
}
|
||||||
|
|
||||||
static QmiDmsUimFacility
|
|
||||||
get_qmi_facility_from_mm_facility (MMModem3gppFacility mm)
|
|
||||||
{
|
|
||||||
switch (mm) {
|
|
||||||
case MM_MODEM_3GPP_FACILITY_PH_SIM:
|
|
||||||
/* Not really sure about this one; it may be PH_FSIM? */
|
|
||||||
return QMI_DMS_UIM_FACILITY_PF;
|
|
||||||
|
|
||||||
case MM_MODEM_3GPP_FACILITY_NET_PERS:
|
|
||||||
return QMI_DMS_UIM_FACILITY_PN;
|
|
||||||
|
|
||||||
case MM_MODEM_3GPP_FACILITY_NET_SUB_PERS:
|
|
||||||
return QMI_DMS_UIM_FACILITY_PU;
|
|
||||||
|
|
||||||
case MM_MODEM_3GPP_FACILITY_PROVIDER_PERS:
|
|
||||||
return QMI_DMS_UIM_FACILITY_PP;
|
|
||||||
|
|
||||||
case MM_MODEM_3GPP_FACILITY_CORP_PERS:
|
|
||||||
return QMI_DMS_UIM_FACILITY_PC;
|
|
||||||
|
|
||||||
default:
|
|
||||||
/* Never try to ask for a facility we cannot translate */
|
|
||||||
g_assert_not_reached ();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
dms_uim_get_ck_status_ready (QmiClientDms *client,
|
dms_uim_get_ck_status_ready (QmiClientDms *client,
|
||||||
GAsyncResult *res,
|
GAsyncResult *res,
|
||||||
@@ -2525,7 +2131,7 @@ get_next_facility_lock_status (LoadEnabledFacilityLocksContext *ctx)
|
|||||||
input = qmi_message_dms_uim_get_ck_status_input_new ();
|
input = qmi_message_dms_uim_get_ck_status_input_new ();
|
||||||
qmi_message_dms_uim_get_ck_status_input_set_facility (
|
qmi_message_dms_uim_get_ck_status_input_set_facility (
|
||||||
input,
|
input,
|
||||||
get_qmi_facility_from_mm_facility (facility),
|
mm_3gpp_facility_to_qmi_uim_facility (facility),
|
||||||
NULL);
|
NULL);
|
||||||
qmi_client_dms_uim_get_ck_status (QMI_CLIENT_DMS (ctx->client),
|
qmi_client_dms_uim_get_ck_status (QMI_CLIENT_DMS (ctx->client),
|
||||||
input,
|
input,
|
||||||
@@ -2633,28 +2239,6 @@ get_3gpp_network_info (QmiMessageNasNetworkScanOutputNetworkInformationElement *
|
|||||||
return info;
|
return info;
|
||||||
}
|
}
|
||||||
|
|
||||||
static MMModemAccessTechnology
|
|
||||||
access_technology_from_qmi_rat (QmiNasRadioInterface interface)
|
|
||||||
{
|
|
||||||
switch (interface) {
|
|
||||||
case QMI_NAS_RADIO_INTERFACE_CDMA_1X:
|
|
||||||
return MM_MODEM_ACCESS_TECHNOLOGY_1XRTT;
|
|
||||||
case QMI_NAS_RADIO_INTERFACE_CDMA_1XEVDO:
|
|
||||||
return MM_MODEM_ACCESS_TECHNOLOGY_EVDO0;
|
|
||||||
case QMI_NAS_RADIO_INTERFACE_GSM:
|
|
||||||
return MM_MODEM_ACCESS_TECHNOLOGY_GSM;
|
|
||||||
case QMI_NAS_RADIO_INTERFACE_UMTS:
|
|
||||||
return MM_MODEM_ACCESS_TECHNOLOGY_UMTS;
|
|
||||||
case QMI_NAS_RADIO_INTERFACE_LTE:
|
|
||||||
return MM_MODEM_ACCESS_TECHNOLOGY_LTE;
|
|
||||||
case QMI_NAS_RADIO_INTERFACE_TD_SCDMA:
|
|
||||||
case QMI_NAS_RADIO_INTERFACE_AMPS:
|
|
||||||
case QMI_NAS_RADIO_INTERFACE_NONE:
|
|
||||||
default:
|
|
||||||
return MM_MODEM_ACCESS_TECHNOLOGY_UNKNOWN;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static MMModemAccessTechnology
|
static MMModemAccessTechnology
|
||||||
get_3gpp_access_technology (GArray *array,
|
get_3gpp_access_technology (GArray *array,
|
||||||
gboolean *array_used_flags,
|
gboolean *array_used_flags,
|
||||||
@@ -2673,7 +2257,7 @@ get_3gpp_access_technology (GArray *array,
|
|||||||
if (element->mcc == mcc &&
|
if (element->mcc == mcc &&
|
||||||
element->mnc == mnc) {
|
element->mnc == mnc) {
|
||||||
array_used_flags[i] = TRUE;
|
array_used_flags[i] = TRUE;
|
||||||
return access_technology_from_qmi_rat (element->radio_interface);
|
return mm_modem_access_technology_from_qmi_radio_interface (element->radio_interface);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2981,100 +2565,6 @@ modem_3gpp_run_registration_checks_finish (MMIfaceModem3gpp *self,
|
|||||||
return !g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (res), error);
|
return !g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (res), error);
|
||||||
}
|
}
|
||||||
|
|
||||||
static MMModem3gppRegistrationState
|
|
||||||
qmi_registration_state_to_3gpp_registration_state (QmiNasAttachState attach_state,
|
|
||||||
QmiNasRegistrationState registration_state,
|
|
||||||
gboolean roaming)
|
|
||||||
{
|
|
||||||
if (attach_state == QMI_NAS_ATTACH_STATE_UNKNOWN)
|
|
||||||
return MM_MODEM_3GPP_REGISTRATION_STATE_UNKNOWN;
|
|
||||||
|
|
||||||
if (attach_state == QMI_NAS_ATTACH_STATE_DETACHED)
|
|
||||||
return QMI_NAS_REGISTRATION_STATE_NOT_REGISTERED;
|
|
||||||
|
|
||||||
/* attached */
|
|
||||||
|
|
||||||
switch (registration_state) {
|
|
||||||
case QMI_NAS_REGISTRATION_STATE_NOT_REGISTERED:
|
|
||||||
return MM_MODEM_3GPP_REGISTRATION_STATE_IDLE;
|
|
||||||
case QMI_NAS_REGISTRATION_STATE_REGISTERED:
|
|
||||||
return (roaming ? MM_MODEM_3GPP_REGISTRATION_STATE_ROAMING : MM_MODEM_3GPP_REGISTRATION_STATE_HOME);
|
|
||||||
case QMI_NAS_REGISTRATION_STATE_NOT_REGISTERED_SEARCHING:
|
|
||||||
return MM_MODEM_3GPP_REGISTRATION_STATE_SEARCHING;
|
|
||||||
case QMI_NAS_REGISTRATION_STATE_REGISTRATION_DENIED:
|
|
||||||
return MM_MODEM_3GPP_REGISTRATION_STATE_DENIED;
|
|
||||||
case QMI_NAS_REGISTRATION_STATE_UNKNOWN:
|
|
||||||
default:
|
|
||||||
return MM_MODEM_3GPP_REGISTRATION_STATE_UNKNOWN;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static MMModemAccessTechnology
|
|
||||||
qmi_radio_interface_list_to_access_technologies (GArray *radio_interfaces)
|
|
||||||
{
|
|
||||||
MMModemAccessTechnology access_technology = 0;
|
|
||||||
guint i;
|
|
||||||
|
|
||||||
for (i = 0; i < radio_interfaces->len; i++) {
|
|
||||||
QmiNasRadioInterface iface;
|
|
||||||
|
|
||||||
iface = g_array_index (radio_interfaces, QmiNasRadioInterface, i);
|
|
||||||
access_technology |= access_technology_from_qmi_rat (iface);
|
|
||||||
}
|
|
||||||
|
|
||||||
return access_technology;
|
|
||||||
}
|
|
||||||
|
|
||||||
static MMModemAccessTechnology
|
|
||||||
access_technology_from_qmi_data_capability (QmiNasDataCapability cap)
|
|
||||||
{
|
|
||||||
switch (cap) {
|
|
||||||
case QMI_NAS_DATA_CAPABILITY_GPRS:
|
|
||||||
return MM_MODEM_ACCESS_TECHNOLOGY_GPRS;
|
|
||||||
case QMI_NAS_DATA_CAPABILITY_EDGE:
|
|
||||||
return MM_MODEM_ACCESS_TECHNOLOGY_EDGE;
|
|
||||||
case QMI_NAS_DATA_CAPABILITY_HSDPA:
|
|
||||||
return MM_MODEM_ACCESS_TECHNOLOGY_HSDPA;
|
|
||||||
case QMI_NAS_DATA_CAPABILITY_HSUPA:
|
|
||||||
return MM_MODEM_ACCESS_TECHNOLOGY_HSUPA;
|
|
||||||
case QMI_NAS_DATA_CAPABILITY_WCDMA:
|
|
||||||
return MM_MODEM_ACCESS_TECHNOLOGY_UMTS;
|
|
||||||
case QMI_NAS_DATA_CAPABILITY_CDMA:
|
|
||||||
return MM_MODEM_ACCESS_TECHNOLOGY_1XRTT;
|
|
||||||
case QMI_NAS_DATA_CAPABILITY_EVDO_REV_0:
|
|
||||||
return MM_MODEM_ACCESS_TECHNOLOGY_EVDO0;
|
|
||||||
case QMI_NAS_DATA_CAPABILITY_EVDO_REV_A:
|
|
||||||
return MM_MODEM_ACCESS_TECHNOLOGY_EVDOA;
|
|
||||||
case QMI_NAS_DATA_CAPABILITY_GSM:
|
|
||||||
return MM_MODEM_ACCESS_TECHNOLOGY_GSM;
|
|
||||||
case QMI_NAS_DATA_CAPABILITY_EVDO_REV_B:
|
|
||||||
return MM_MODEM_ACCESS_TECHNOLOGY_EVDOB;
|
|
||||||
case QMI_NAS_DATA_CAPABILITY_LTE:
|
|
||||||
return MM_MODEM_ACCESS_TECHNOLOGY_LTE;
|
|
||||||
case QMI_NAS_DATA_CAPABILITY_HSDPA_PLUS:
|
|
||||||
case QMI_NAS_DATA_CAPABILITY_DC_HSDPA_PLUS:
|
|
||||||
return MM_MODEM_ACCESS_TECHNOLOGY_HSPA_PLUS;
|
|
||||||
default:
|
|
||||||
return MM_MODEM_ACCESS_TECHNOLOGY_UNKNOWN;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static MMModemAccessTechnology
|
|
||||||
qmi_data_capability_list_to_access_technologies (GArray *data_capabilities)
|
|
||||||
{
|
|
||||||
MMModemAccessTechnology access_technology = 0;
|
|
||||||
guint i;
|
|
||||||
|
|
||||||
for (i = 0; i < data_capabilities->len; i++) {
|
|
||||||
QmiNasDataCapability cap;
|
|
||||||
|
|
||||||
cap = g_array_index (data_capabilities, QmiNasDataCapability, i);
|
|
||||||
access_technology |= access_technology_from_qmi_data_capability (cap);
|
|
||||||
}
|
|
||||||
|
|
||||||
return access_technology;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
common_process_serving_system_3gpp (MMBroadbandModemQmi *self,
|
common_process_serving_system_3gpp (MMBroadbandModemQmi *self,
|
||||||
QmiMessageNasGetServingSystemOutput *response_output,
|
QmiMessageNasGetServingSystemOutput *response_output,
|
||||||
@@ -3125,10 +2615,10 @@ common_process_serving_system_3gpp (MMBroadbandModemQmi *self,
|
|||||||
|
|
||||||
if (data_service_capabilities)
|
if (data_service_capabilities)
|
||||||
mm_access_technologies =
|
mm_access_technologies =
|
||||||
qmi_data_capability_list_to_access_technologies (data_service_capabilities);
|
mm_modem_access_technologies_from_qmi_data_capability_array (data_service_capabilities);
|
||||||
else
|
else
|
||||||
mm_access_technologies =
|
mm_access_technologies =
|
||||||
qmi_radio_interface_list_to_access_technologies (radio_interfaces);
|
mm_modem_access_technologies_from_qmi_radio_interface_array (radio_interfaces);
|
||||||
|
|
||||||
/* Only process 3GPP info.
|
/* Only process 3GPP info.
|
||||||
* Seen the case already where 'selected_network' gives UNKNOWN but we still
|
* Seen the case already where 'selected_network' gives UNKNOWN but we still
|
||||||
@@ -3161,12 +2651,12 @@ common_process_serving_system_3gpp (MMBroadbandModemQmi *self,
|
|||||||
|
|
||||||
/* Build MM registration states */
|
/* Build MM registration states */
|
||||||
mm_cs_registration_state =
|
mm_cs_registration_state =
|
||||||
qmi_registration_state_to_3gpp_registration_state (
|
mm_modem_3gpp_registration_state_from_qmi_registration_state (
|
||||||
cs_attach_state,
|
cs_attach_state,
|
||||||
registration_state,
|
registration_state,
|
||||||
(roaming == QMI_NAS_ROAMING_INDICATOR_STATUS_ON));
|
(roaming == QMI_NAS_ROAMING_INDICATOR_STATUS_ON));
|
||||||
mm_ps_registration_state =
|
mm_ps_registration_state =
|
||||||
qmi_registration_state_to_3gpp_registration_state (
|
mm_modem_3gpp_registration_state_from_qmi_registration_state (
|
||||||
ps_attach_state,
|
ps_attach_state,
|
||||||
registration_state,
|
registration_state,
|
||||||
(roaming == QMI_NAS_ROAMING_INDICATOR_STATUS_ON));
|
(roaming == QMI_NAS_ROAMING_INDICATOR_STATUS_ON));
|
||||||
@@ -4057,21 +3547,6 @@ modem_cdma_run_registration_checks_finish (MMIfaceModemCdma *self,
|
|||||||
return !g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (res), error);
|
return !g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (res), error);
|
||||||
}
|
}
|
||||||
|
|
||||||
static MMModemCdmaRegistrationState
|
|
||||||
qmi_registration_state_to_cdma_registration_state (QmiNasRegistrationState registration_state)
|
|
||||||
{
|
|
||||||
switch (registration_state) {
|
|
||||||
case QMI_NAS_REGISTRATION_STATE_REGISTERED:
|
|
||||||
return MM_MODEM_CDMA_REGISTRATION_STATE_REGISTERED;
|
|
||||||
case QMI_NAS_REGISTRATION_STATE_NOT_REGISTERED:
|
|
||||||
case QMI_NAS_REGISTRATION_STATE_NOT_REGISTERED_SEARCHING:
|
|
||||||
case QMI_NAS_REGISTRATION_STATE_REGISTRATION_DENIED:
|
|
||||||
case QMI_NAS_REGISTRATION_STATE_UNKNOWN:
|
|
||||||
default:
|
|
||||||
return MM_MODEM_3GPP_REGISTRATION_STATE_UNKNOWN;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
common_process_serving_system_cdma (MMBroadbandModemQmi *self,
|
common_process_serving_system_cdma (MMBroadbandModemQmi *self,
|
||||||
QmiMessageNasGetServingSystemOutput *response_output,
|
QmiMessageNasGetServingSystemOutput *response_output,
|
||||||
@@ -4118,10 +3593,10 @@ common_process_serving_system_cdma (MMBroadbandModemQmi *self,
|
|||||||
NULL);
|
NULL);
|
||||||
if (data_service_capabilities)
|
if (data_service_capabilities)
|
||||||
mm_access_technologies =
|
mm_access_technologies =
|
||||||
qmi_data_capability_list_to_access_technologies (data_service_capabilities);
|
mm_modem_access_technologies_from_qmi_data_capability_array (data_service_capabilities);
|
||||||
else
|
else
|
||||||
mm_access_technologies =
|
mm_access_technologies =
|
||||||
qmi_radio_interface_list_to_access_technologies (radio_interfaces);
|
mm_modem_access_technologies_from_qmi_radio_interface_array (radio_interfaces);
|
||||||
|
|
||||||
/* Only process 3GPP2 info */
|
/* Only process 3GPP2 info */
|
||||||
if (selected_network == QMI_NAS_NETWORK_TYPE_3GPP2 ||
|
if (selected_network == QMI_NAS_NETWORK_TYPE_3GPP2 ||
|
||||||
@@ -4151,12 +3626,12 @@ common_process_serving_system_cdma (MMBroadbandModemQmi *self,
|
|||||||
/* Build registration states */
|
/* Build registration states */
|
||||||
|
|
||||||
if (mm_access_technologies & MM_IFACE_MODEM_CDMA_ALL_CDMA1X_ACCESS_TECHNOLOGIES_MASK)
|
if (mm_access_technologies & MM_IFACE_MODEM_CDMA_ALL_CDMA1X_ACCESS_TECHNOLOGIES_MASK)
|
||||||
mm_cdma1x_registration_state = qmi_registration_state_to_cdma_registration_state (registration_state);
|
mm_cdma1x_registration_state = mm_modem_cdma_registration_state_from_qmi_registration_state (registration_state);
|
||||||
else
|
else
|
||||||
mm_cdma1x_registration_state = MM_MODEM_CDMA_REGISTRATION_STATE_UNKNOWN;
|
mm_cdma1x_registration_state = MM_MODEM_CDMA_REGISTRATION_STATE_UNKNOWN;
|
||||||
|
|
||||||
if (mm_access_technologies & MM_IFACE_MODEM_CDMA_ALL_EVDO_ACCESS_TECHNOLOGIES_MASK)
|
if (mm_access_technologies & MM_IFACE_MODEM_CDMA_ALL_EVDO_ACCESS_TECHNOLOGIES_MASK)
|
||||||
mm_evdo_registration_state = qmi_registration_state_to_cdma_registration_state (registration_state);
|
mm_evdo_registration_state = mm_modem_cdma_registration_state_from_qmi_registration_state (registration_state);
|
||||||
else
|
else
|
||||||
mm_evdo_registration_state = MM_MODEM_CDMA_REGISTRATION_STATE_UNKNOWN;
|
mm_evdo_registration_state = MM_MODEM_CDMA_REGISTRATION_STATE_UNKNOWN;
|
||||||
|
|
||||||
|
579
src/mm-modem-helpers-qmi.c
Normal file
579
src/mm-modem-helpers-qmi.c
Normal file
@@ -0,0 +1,579 @@
|
|||||||
|
/* -*- 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) 2012 Google, Inc.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "mm-modem-helpers-qmi.h"
|
||||||
|
#include "mm-log.h"
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
MMModemCapability
|
||||||
|
mm_modem_capability_from_qmi_radio_interface (QmiDmsRadioInterface network)
|
||||||
|
{
|
||||||
|
switch (network) {
|
||||||
|
case QMI_DMS_RADIO_INTERFACE_CDMA20001X:
|
||||||
|
return MM_MODEM_CAPABILITY_CDMA_EVDO;
|
||||||
|
case QMI_DMS_RADIO_INTERFACE_EVDO:
|
||||||
|
return MM_MODEM_CAPABILITY_CDMA_EVDO;
|
||||||
|
case QMI_DMS_RADIO_INTERFACE_GSM:
|
||||||
|
return MM_MODEM_CAPABILITY_GSM_UMTS;
|
||||||
|
case QMI_DMS_RADIO_INTERFACE_UMTS:
|
||||||
|
return MM_MODEM_CAPABILITY_GSM_UMTS;
|
||||||
|
case QMI_DMS_RADIO_INTERFACE_LTE:
|
||||||
|
return MM_MODEM_CAPABILITY_LTE;
|
||||||
|
default:
|
||||||
|
mm_warn ("Unhandled QMI radio interface (%u)",
|
||||||
|
(guint)network);
|
||||||
|
return MM_MODEM_CAPABILITY_NONE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
/* pin1 TRUE for PIN1, FALSE for PIN2 */
|
||||||
|
MMModemLock
|
||||||
|
mm_modem_lock_from_qmi_uim_pin_status (QmiDmsUimPinStatus status,
|
||||||
|
gboolean pin1)
|
||||||
|
{
|
||||||
|
switch (status) {
|
||||||
|
case QMI_DMS_UIM_PIN_STATUS_NOT_INITIALIZED:
|
||||||
|
return MM_MODEM_LOCK_UNKNOWN;
|
||||||
|
case QMI_DMS_UIM_PIN_STATUS_ENABLED_NOT_VERIFIED:
|
||||||
|
return pin1 ? MM_MODEM_LOCK_SIM_PIN : MM_MODEM_LOCK_SIM_PIN2;
|
||||||
|
case QMI_DMS_UIM_PIN_STATUS_ENABLED_VERIFIED:
|
||||||
|
return MM_MODEM_LOCK_NONE;
|
||||||
|
case QMI_DMS_UIM_PIN_STATUS_DISABLED:
|
||||||
|
return MM_MODEM_LOCK_NONE;
|
||||||
|
case QMI_DMS_UIM_PIN_STATUS_BLOCKED:
|
||||||
|
return pin1 ? MM_MODEM_LOCK_SIM_PUK : MM_MODEM_LOCK_SIM_PUK2;
|
||||||
|
case QMI_DMS_UIM_PIN_STATUS_PERMANENTLY_BLOCKED:
|
||||||
|
return MM_MODEM_LOCK_UNKNOWN;
|
||||||
|
case QMI_DMS_UIM_PIN_STATUS_UNBLOCKED:
|
||||||
|
/* This state is possibly given when after an Unblock() operation has been performed.
|
||||||
|
* We'll assume the PIN is verified after this. */
|
||||||
|
return MM_MODEM_LOCK_NONE;
|
||||||
|
case QMI_DMS_UIM_PIN_STATUS_CHANGED:
|
||||||
|
/* This state is possibly given when after an ChangePin() operation has been performed.
|
||||||
|
* We'll assume the PIN is verified after this. */
|
||||||
|
return MM_MODEM_LOCK_NONE;
|
||||||
|
default:
|
||||||
|
return MM_MODEM_LOCK_UNKNOWN;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
QmiDmsUimFacility
|
||||||
|
mm_3gpp_facility_to_qmi_uim_facility (MMModem3gppFacility mm)
|
||||||
|
{
|
||||||
|
switch (mm) {
|
||||||
|
case MM_MODEM_3GPP_FACILITY_PH_SIM:
|
||||||
|
/* Not really sure about this one; it may be PH_FSIM? */
|
||||||
|
return QMI_DMS_UIM_FACILITY_PF;
|
||||||
|
|
||||||
|
case MM_MODEM_3GPP_FACILITY_NET_PERS:
|
||||||
|
return QMI_DMS_UIM_FACILITY_PN;
|
||||||
|
|
||||||
|
case MM_MODEM_3GPP_FACILITY_NET_SUB_PERS:
|
||||||
|
return QMI_DMS_UIM_FACILITY_PU;
|
||||||
|
|
||||||
|
case MM_MODEM_3GPP_FACILITY_PROVIDER_PERS:
|
||||||
|
return QMI_DMS_UIM_FACILITY_PP;
|
||||||
|
|
||||||
|
case MM_MODEM_3GPP_FACILITY_CORP_PERS:
|
||||||
|
return QMI_DMS_UIM_FACILITY_PC;
|
||||||
|
|
||||||
|
default:
|
||||||
|
/* Never try to ask for a facility we cannot translate */
|
||||||
|
g_assert_not_reached ();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
QmiDmsBandCapability qmi_band;
|
||||||
|
MMModemBand mm_band;
|
||||||
|
} BandsMap;
|
||||||
|
|
||||||
|
static const BandsMap bands_map [] = {
|
||||||
|
/* CDMA bands */
|
||||||
|
{
|
||||||
|
(QMI_DMS_BAND_CAPABILITY_BC_0_A_SYSTEM | QMI_DMS_BAND_CAPABILITY_BC_0_B_SYSTEM),
|
||||||
|
MM_MODEM_BAND_CDMA_BC0_CELLULAR_800
|
||||||
|
},
|
||||||
|
{ QMI_DMS_BAND_CAPABILITY_BC_1_ALL_BLOCKS, MM_MODEM_BAND_CDMA_BC1_PCS_1900 },
|
||||||
|
{ QMI_DMS_BAND_CAPABILITY_BC_2, MM_MODEM_BAND_CDMA_BC2_TACS },
|
||||||
|
{ QMI_DMS_BAND_CAPABILITY_BC_3_A_SYSTEM, MM_MODEM_BAND_CDMA_BC3_JTACS },
|
||||||
|
{ QMI_DMS_BAND_CAPABILITY_BC_4_ALL_BLOCKS, MM_MODEM_BAND_CDMA_BC4_KOREAN_PCS },
|
||||||
|
{ QMI_DMS_BAND_CAPABILITY_BC_5_ALL_BLOCKS, MM_MODEM_BAND_CDMA_BC5_NMT450 },
|
||||||
|
{ QMI_DMS_BAND_CAPABILITY_BC_6, MM_MODEM_BAND_CDMA_BC6_IMT2000 },
|
||||||
|
{ QMI_DMS_BAND_CAPABILITY_BC_7, MM_MODEM_BAND_CDMA_BC7_CELLULAR_700 },
|
||||||
|
{ QMI_DMS_BAND_CAPABILITY_BC_8, MM_MODEM_BAND_CDMA_BC8_1800 },
|
||||||
|
{ QMI_DMS_BAND_CAPABILITY_BC_9, MM_MODEM_BAND_CDMA_BC9_900 },
|
||||||
|
{ QMI_DMS_BAND_CAPABILITY_BC_10, MM_MODEM_BAND_CDMA_BC10_SECONDARY_800 },
|
||||||
|
{ QMI_DMS_BAND_CAPABILITY_BC_11, MM_MODEM_BAND_CDMA_BC11_PAMR_400 },
|
||||||
|
{ QMI_DMS_BAND_CAPABILITY_BC_12, MM_MODEM_BAND_CDMA_BC12_PAMR_800 },
|
||||||
|
{ QMI_DMS_BAND_CAPABILITY_BC_14, MM_MODEM_BAND_CDMA_BC14_PCS2_1900 },
|
||||||
|
{ QMI_DMS_BAND_CAPABILITY_BC_15, MM_MODEM_BAND_CDMA_BC15_AWS },
|
||||||
|
{ QMI_DMS_BAND_CAPABILITY_BC_16, MM_MODEM_BAND_CDMA_BC16_US_2500 },
|
||||||
|
{ QMI_DMS_BAND_CAPABILITY_BC_17, MM_MODEM_BAND_CDMA_BC17_US_FLO_2500 },
|
||||||
|
{ QMI_DMS_BAND_CAPABILITY_BC_18, MM_MODEM_BAND_CDMA_BC18_US_PS_700 },
|
||||||
|
{ QMI_DMS_BAND_CAPABILITY_BC_19, MM_MODEM_BAND_CDMA_BC19_US_LOWER_700 },
|
||||||
|
|
||||||
|
/* GSM bands */
|
||||||
|
{ QMI_DMS_BAND_CAPABILITY_GSM_DCS_1800, MM_MODEM_BAND_DCS },
|
||||||
|
{ QMI_DMS_BAND_CAPABILITY_GSM_900_EXTENDED, MM_MODEM_BAND_EGSM },
|
||||||
|
{ QMI_DMS_BAND_CAPABILITY_GSM_PCS_1900, MM_MODEM_BAND_PCS },
|
||||||
|
{ QMI_DMS_BAND_CAPABILITY_GSM_850, MM_MODEM_BAND_G850 },
|
||||||
|
|
||||||
|
/* UMTS/WCDMA bands */
|
||||||
|
{ QMI_DMS_BAND_CAPABILITY_WCDMA_2100, MM_MODEM_BAND_U2100 },
|
||||||
|
{ QMI_DMS_BAND_CAPABILITY_WCDMA_DCS_1800, MM_MODEM_BAND_U1800 },
|
||||||
|
{ QMI_DMS_BAND_CAPABILITY_WCDMA_1700_US, MM_MODEM_BAND_U17IV },
|
||||||
|
{ QMI_DMS_BAND_CAPABILITY_WCDMA_800, MM_MODEM_BAND_U800 },
|
||||||
|
{
|
||||||
|
(QMI_DMS_BAND_CAPABILITY_WCDMA_850_US | QMI_DMS_BAND_CAPABILITY_WCDMA_850_JAPAN),
|
||||||
|
MM_MODEM_BAND_U850
|
||||||
|
},
|
||||||
|
{ QMI_DMS_BAND_CAPABILITY_WCDMA_900, MM_MODEM_BAND_U900 },
|
||||||
|
{ QMI_DMS_BAND_CAPABILITY_WCDMA_1700_JAPAN, MM_MODEM_BAND_U17IX },
|
||||||
|
{ QMI_DMS_BAND_CAPABILITY_WCDMA_2600, MM_MODEM_BAND_U2600 }
|
||||||
|
|
||||||
|
/* NOTE. The following bands were unmatched:
|
||||||
|
*
|
||||||
|
* - QMI_DMS_BAND_CAPABILITY_GSM_900_PRIMARY
|
||||||
|
* - QMI_DMS_BAND_CAPABILITY_GSM_450
|
||||||
|
* - QMI_DMS_BAND_CAPABILITY_GSM_480
|
||||||
|
* - QMI_DMS_BAND_CAPABILITY_GSM_750
|
||||||
|
* - QMI_DMS_BAND_CAPABILITY_GSM_900_RAILWAILS
|
||||||
|
* - QMI_DMS_BAND_CAPABILITY_WCDMA_1500
|
||||||
|
* - MM_MODEM_BAND_CDMA_BC13_IMT2000_2500
|
||||||
|
* - MM_MODEM_BAND_U1900
|
||||||
|
*/
|
||||||
|
};
|
||||||
|
|
||||||
|
static void
|
||||||
|
add_qmi_bands (GArray *mm_bands,
|
||||||
|
QmiDmsBandCapability qmi_bands)
|
||||||
|
{
|
||||||
|
static QmiDmsBandCapability qmi_bands_expected = 0;
|
||||||
|
QmiDmsBandCapability not_expected;
|
||||||
|
guint i;
|
||||||
|
|
||||||
|
g_assert (mm_bands != NULL);
|
||||||
|
|
||||||
|
/* Build mask of expected bands only once */
|
||||||
|
if (G_UNLIKELY (qmi_bands_expected == 0)) {
|
||||||
|
for (i = 0; i < G_N_ELEMENTS (bands_map); i++) {
|
||||||
|
qmi_bands_expected |= bands_map[i].qmi_band;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Log about the bands that cannot be represented in ModemManager */
|
||||||
|
not_expected = ((qmi_bands_expected ^ qmi_bands) & qmi_bands);
|
||||||
|
if (not_expected) {
|
||||||
|
gchar *aux;
|
||||||
|
|
||||||
|
aux = qmi_dms_band_capability_build_string_from_mask (not_expected);
|
||||||
|
mm_dbg ("Cannot add the following bands: '%s'", aux);
|
||||||
|
g_free (aux);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* And add the expected ones */
|
||||||
|
for (i = 0; i < G_N_ELEMENTS (bands_map); i++) {
|
||||||
|
if (qmi_bands & bands_map[i].qmi_band)
|
||||||
|
g_array_append_val (mm_bands, bands_map[i].mm_band);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
QmiDmsLteBandCapability qmi_band;
|
||||||
|
MMModemBand mm_band;
|
||||||
|
} LteBandsMap;
|
||||||
|
|
||||||
|
static const LteBandsMap lte_bands_map [] = {
|
||||||
|
{ QMI_DMS_LTE_BAND_CAPABILITY_EUTRAN_1, MM_MODEM_BAND_EUTRAN_I },
|
||||||
|
{ QMI_DMS_LTE_BAND_CAPABILITY_EUTRAN_2, MM_MODEM_BAND_EUTRAN_II },
|
||||||
|
{ QMI_DMS_LTE_BAND_CAPABILITY_EUTRAN_3, MM_MODEM_BAND_EUTRAN_III },
|
||||||
|
{ QMI_DMS_LTE_BAND_CAPABILITY_EUTRAN_4, MM_MODEM_BAND_EUTRAN_IV },
|
||||||
|
{ QMI_DMS_LTE_BAND_CAPABILITY_EUTRAN_5, MM_MODEM_BAND_EUTRAN_V },
|
||||||
|
{ QMI_DMS_LTE_BAND_CAPABILITY_EUTRAN_6, MM_MODEM_BAND_EUTRAN_VI },
|
||||||
|
{ QMI_DMS_LTE_BAND_CAPABILITY_EUTRAN_7, MM_MODEM_BAND_EUTRAN_VII },
|
||||||
|
{ QMI_DMS_LTE_BAND_CAPABILITY_EUTRAN_8, MM_MODEM_BAND_EUTRAN_VIII },
|
||||||
|
{ QMI_DMS_LTE_BAND_CAPABILITY_EUTRAN_9, MM_MODEM_BAND_EUTRAN_IX },
|
||||||
|
{ QMI_DMS_LTE_BAND_CAPABILITY_EUTRAN_10, MM_MODEM_BAND_EUTRAN_X },
|
||||||
|
{ QMI_DMS_LTE_BAND_CAPABILITY_EUTRAN_11, MM_MODEM_BAND_EUTRAN_XI },
|
||||||
|
{ QMI_DMS_LTE_BAND_CAPABILITY_EUTRAN_12, MM_MODEM_BAND_EUTRAN_XII },
|
||||||
|
{ QMI_DMS_LTE_BAND_CAPABILITY_EUTRAN_13, MM_MODEM_BAND_EUTRAN_XIII },
|
||||||
|
{ QMI_DMS_LTE_BAND_CAPABILITY_EUTRAN_14, MM_MODEM_BAND_EUTRAN_XIV },
|
||||||
|
{ QMI_DMS_LTE_BAND_CAPABILITY_EUTRAN_17, MM_MODEM_BAND_EUTRAN_XVII },
|
||||||
|
{ QMI_DMS_LTE_BAND_CAPABILITY_EUTRAN_18, MM_MODEM_BAND_EUTRAN_XVIII },
|
||||||
|
{ QMI_DMS_LTE_BAND_CAPABILITY_EUTRAN_19, MM_MODEM_BAND_EUTRAN_XIX },
|
||||||
|
{ QMI_DMS_LTE_BAND_CAPABILITY_EUTRAN_20, MM_MODEM_BAND_EUTRAN_XX },
|
||||||
|
{ QMI_DMS_LTE_BAND_CAPABILITY_EUTRAN_21, MM_MODEM_BAND_EUTRAN_XXI },
|
||||||
|
{ QMI_DMS_LTE_BAND_CAPABILITY_EUTRAN_24, MM_MODEM_BAND_EUTRAN_XXIV },
|
||||||
|
{ QMI_DMS_LTE_BAND_CAPABILITY_EUTRAN_25, MM_MODEM_BAND_EUTRAN_XXV },
|
||||||
|
{ QMI_DMS_LTE_BAND_CAPABILITY_EUTRAN_33, MM_MODEM_BAND_EUTRAN_XXXIII },
|
||||||
|
{ QMI_DMS_LTE_BAND_CAPABILITY_EUTRAN_34, MM_MODEM_BAND_EUTRAN_XXXIV },
|
||||||
|
{ QMI_DMS_LTE_BAND_CAPABILITY_EUTRAN_35, MM_MODEM_BAND_EUTRAN_XXXV },
|
||||||
|
{ QMI_DMS_LTE_BAND_CAPABILITY_EUTRAN_36, MM_MODEM_BAND_EUTRAN_XXXVI },
|
||||||
|
{ QMI_DMS_LTE_BAND_CAPABILITY_EUTRAN_37, MM_MODEM_BAND_EUTRAN_XXXVII },
|
||||||
|
{ QMI_DMS_LTE_BAND_CAPABILITY_EUTRAN_38, MM_MODEM_BAND_EUTRAN_XXXVIII },
|
||||||
|
{ QMI_DMS_LTE_BAND_CAPABILITY_EUTRAN_39, MM_MODEM_BAND_EUTRAN_XXXIX },
|
||||||
|
{ QMI_DMS_LTE_BAND_CAPABILITY_EUTRAN_40, MM_MODEM_BAND_EUTRAN_XL },
|
||||||
|
{ QMI_DMS_LTE_BAND_CAPABILITY_EUTRAN_41, MM_MODEM_BAND_EUTRAN_XLI },
|
||||||
|
{ QMI_DMS_LTE_BAND_CAPABILITY_EUTRAN_42, MM_MODEM_BAND_EUTRAN_XLI },
|
||||||
|
{ QMI_DMS_LTE_BAND_CAPABILITY_EUTRAN_43, MM_MODEM_BAND_EUTRAN_XLIII }
|
||||||
|
|
||||||
|
/* NOTE. The following bands were unmatched:
|
||||||
|
*
|
||||||
|
* - MM_MODEM_BAND_EUTRAN_XXII
|
||||||
|
* - MM_MODEM_BAND_EUTRAN_XXIII
|
||||||
|
* - MM_MODEM_BAND_EUTRAN_XXVI
|
||||||
|
*/
|
||||||
|
};
|
||||||
|
|
||||||
|
static void
|
||||||
|
add_qmi_lte_bands (GArray *mm_bands,
|
||||||
|
QmiDmsLteBandCapability qmi_bands)
|
||||||
|
{
|
||||||
|
/* All QMI LTE bands have a counterpart in ModemManager, no need to check
|
||||||
|
* for unexpected ones */
|
||||||
|
guint i;
|
||||||
|
|
||||||
|
g_assert (mm_bands != NULL);
|
||||||
|
|
||||||
|
for (i = 0; i < G_N_ELEMENTS (lte_bands_map); i++) {
|
||||||
|
if (qmi_bands & lte_bands_map[i].qmi_band)
|
||||||
|
g_array_append_val (mm_bands, lte_bands_map[i].mm_band);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
GArray *
|
||||||
|
mm_modem_bands_from_qmi_band_capabilities (QmiDmsBandCapability qmi_bands,
|
||||||
|
QmiDmsLteBandCapability qmi_lte_bands)
|
||||||
|
{
|
||||||
|
GArray *mm_bands;
|
||||||
|
|
||||||
|
mm_bands = g_array_new (FALSE, FALSE, sizeof (MMModemBand));
|
||||||
|
add_qmi_bands (mm_bands, qmi_bands);
|
||||||
|
add_qmi_lte_bands (mm_bands, qmi_lte_bands);
|
||||||
|
|
||||||
|
return mm_bands;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
MMModemAccessTechnology
|
||||||
|
mm_modem_access_technology_from_qmi_radio_interface (QmiNasRadioInterface interface)
|
||||||
|
{
|
||||||
|
switch (interface) {
|
||||||
|
case QMI_NAS_RADIO_INTERFACE_CDMA_1X:
|
||||||
|
return MM_MODEM_ACCESS_TECHNOLOGY_1XRTT;
|
||||||
|
case QMI_NAS_RADIO_INTERFACE_CDMA_1XEVDO:
|
||||||
|
return MM_MODEM_ACCESS_TECHNOLOGY_EVDO0;
|
||||||
|
case QMI_NAS_RADIO_INTERFACE_GSM:
|
||||||
|
return MM_MODEM_ACCESS_TECHNOLOGY_GSM;
|
||||||
|
case QMI_NAS_RADIO_INTERFACE_UMTS:
|
||||||
|
return MM_MODEM_ACCESS_TECHNOLOGY_UMTS;
|
||||||
|
case QMI_NAS_RADIO_INTERFACE_LTE:
|
||||||
|
return MM_MODEM_ACCESS_TECHNOLOGY_LTE;
|
||||||
|
case QMI_NAS_RADIO_INTERFACE_TD_SCDMA:
|
||||||
|
case QMI_NAS_RADIO_INTERFACE_AMPS:
|
||||||
|
case QMI_NAS_RADIO_INTERFACE_NONE:
|
||||||
|
default:
|
||||||
|
return MM_MODEM_ACCESS_TECHNOLOGY_UNKNOWN;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
MMModemAccessTechnology
|
||||||
|
mm_modem_access_technologies_from_qmi_radio_interface_array (GArray *radio_interfaces)
|
||||||
|
{
|
||||||
|
MMModemAccessTechnology access_technology = 0;
|
||||||
|
guint i;
|
||||||
|
|
||||||
|
for (i = 0; i < radio_interfaces->len; i++) {
|
||||||
|
QmiNasRadioInterface iface;
|
||||||
|
|
||||||
|
iface = g_array_index (radio_interfaces, QmiNasRadioInterface, i);
|
||||||
|
access_technology |= mm_modem_access_technology_from_qmi_radio_interface (iface);
|
||||||
|
}
|
||||||
|
|
||||||
|
return access_technology;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
MMModemAccessTechnology
|
||||||
|
mm_modem_access_technology_from_qmi_data_capability (QmiNasDataCapability cap)
|
||||||
|
{
|
||||||
|
switch (cap) {
|
||||||
|
case QMI_NAS_DATA_CAPABILITY_GPRS:
|
||||||
|
return MM_MODEM_ACCESS_TECHNOLOGY_GPRS;
|
||||||
|
case QMI_NAS_DATA_CAPABILITY_EDGE:
|
||||||
|
return MM_MODEM_ACCESS_TECHNOLOGY_EDGE;
|
||||||
|
case QMI_NAS_DATA_CAPABILITY_HSDPA:
|
||||||
|
return MM_MODEM_ACCESS_TECHNOLOGY_HSDPA;
|
||||||
|
case QMI_NAS_DATA_CAPABILITY_HSUPA:
|
||||||
|
return MM_MODEM_ACCESS_TECHNOLOGY_HSUPA;
|
||||||
|
case QMI_NAS_DATA_CAPABILITY_WCDMA:
|
||||||
|
return MM_MODEM_ACCESS_TECHNOLOGY_UMTS;
|
||||||
|
case QMI_NAS_DATA_CAPABILITY_CDMA:
|
||||||
|
return MM_MODEM_ACCESS_TECHNOLOGY_1XRTT;
|
||||||
|
case QMI_NAS_DATA_CAPABILITY_EVDO_REV_0:
|
||||||
|
return MM_MODEM_ACCESS_TECHNOLOGY_EVDO0;
|
||||||
|
case QMI_NAS_DATA_CAPABILITY_EVDO_REV_A:
|
||||||
|
return MM_MODEM_ACCESS_TECHNOLOGY_EVDOA;
|
||||||
|
case QMI_NAS_DATA_CAPABILITY_GSM:
|
||||||
|
return MM_MODEM_ACCESS_TECHNOLOGY_GSM;
|
||||||
|
case QMI_NAS_DATA_CAPABILITY_EVDO_REV_B:
|
||||||
|
return MM_MODEM_ACCESS_TECHNOLOGY_EVDOB;
|
||||||
|
case QMI_NAS_DATA_CAPABILITY_LTE:
|
||||||
|
return MM_MODEM_ACCESS_TECHNOLOGY_LTE;
|
||||||
|
case QMI_NAS_DATA_CAPABILITY_HSDPA_PLUS:
|
||||||
|
case QMI_NAS_DATA_CAPABILITY_DC_HSDPA_PLUS:
|
||||||
|
return MM_MODEM_ACCESS_TECHNOLOGY_HSPA_PLUS;
|
||||||
|
default:
|
||||||
|
return MM_MODEM_ACCESS_TECHNOLOGY_UNKNOWN;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
MMModemAccessTechnology
|
||||||
|
mm_modem_access_technologies_from_qmi_data_capability_array (GArray *data_capabilities)
|
||||||
|
{
|
||||||
|
MMModemAccessTechnology access_technology = 0;
|
||||||
|
guint i;
|
||||||
|
|
||||||
|
for (i = 0; i < data_capabilities->len; i++) {
|
||||||
|
QmiNasDataCapability cap;
|
||||||
|
|
||||||
|
cap = g_array_index (data_capabilities, QmiNasDataCapability, i);
|
||||||
|
access_technology |= mm_modem_access_technology_from_qmi_data_capability (cap);
|
||||||
|
}
|
||||||
|
|
||||||
|
return access_technology;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
MMModemMode
|
||||||
|
mm_modem_mode_from_qmi_radio_technology_preference (QmiNasRadioTechnologyPreference qmi)
|
||||||
|
{
|
||||||
|
MMModemMode mode = MM_MODEM_MODE_NONE;
|
||||||
|
|
||||||
|
if (qmi & QMI_NAS_RADIO_TECHNOLOGY_PREFERENCE_3GPP2) {
|
||||||
|
if (qmi & QMI_NAS_RADIO_TECHNOLOGY_PREFERENCE_AMPS_OR_GSM)
|
||||||
|
mode |= MM_MODEM_MODE_CS; /* AMPS */
|
||||||
|
if (qmi & QMI_NAS_RADIO_TECHNOLOGY_PREFERENCE_CDMA_OR_WCDMA)
|
||||||
|
mode |= MM_MODEM_MODE_2G; /* CDMA */
|
||||||
|
if (qmi & QMI_NAS_RADIO_TECHNOLOGY_PREFERENCE_HDR)
|
||||||
|
mode |= MM_MODEM_MODE_3G; /* EV-DO */
|
||||||
|
}
|
||||||
|
|
||||||
|
if (qmi & QMI_NAS_RADIO_TECHNOLOGY_PREFERENCE_3GPP) {
|
||||||
|
if (qmi & QMI_NAS_RADIO_TECHNOLOGY_PREFERENCE_AMPS_OR_GSM)
|
||||||
|
mode |= (MM_MODEM_MODE_CS | MM_MODEM_MODE_2G); /* GSM */
|
||||||
|
if (qmi & QMI_NAS_RADIO_TECHNOLOGY_PREFERENCE_CDMA_OR_WCDMA)
|
||||||
|
mode |= MM_MODEM_MODE_3G; /* WCDMA */
|
||||||
|
}
|
||||||
|
|
||||||
|
if (qmi & QMI_NAS_RADIO_TECHNOLOGY_PREFERENCE_LTE)
|
||||||
|
mode |= MM_MODEM_MODE_4G;
|
||||||
|
|
||||||
|
return mode;
|
||||||
|
}
|
||||||
|
|
||||||
|
QmiNasRadioTechnologyPreference
|
||||||
|
mm_modem_mode_to_qmi_radio_technology_preference (MMModemMode mode,
|
||||||
|
gboolean is_cdma)
|
||||||
|
{
|
||||||
|
QmiNasRadioTechnologyPreference pref = 0;
|
||||||
|
|
||||||
|
if (is_cdma) {
|
||||||
|
pref |= QMI_NAS_RADIO_TECHNOLOGY_PREFERENCE_3GPP2;
|
||||||
|
if (mode & MM_MODEM_MODE_2G)
|
||||||
|
pref |= QMI_NAS_RADIO_TECHNOLOGY_PREFERENCE_CDMA_OR_WCDMA; /* CDMA */
|
||||||
|
if (mode & MM_MODEM_MODE_3G)
|
||||||
|
pref |= QMI_NAS_RADIO_TECHNOLOGY_PREFERENCE_HDR; /* EV-DO */
|
||||||
|
} else {
|
||||||
|
pref |= QMI_NAS_RADIO_TECHNOLOGY_PREFERENCE_3GPP;
|
||||||
|
if (mode & MM_MODEM_MODE_2G)
|
||||||
|
pref |= QMI_NAS_RADIO_TECHNOLOGY_PREFERENCE_AMPS_OR_GSM; /* GSM */
|
||||||
|
if (mode & MM_MODEM_MODE_3G)
|
||||||
|
pref |= QMI_NAS_RADIO_TECHNOLOGY_PREFERENCE_CDMA_OR_WCDMA; /* WCDMA */
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mode & MM_MODEM_MODE_4G)
|
||||||
|
pref |= QMI_NAS_RADIO_TECHNOLOGY_PREFERENCE_LTE;
|
||||||
|
|
||||||
|
return pref;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
#if defined WITH_NEWEST_QMI_COMMANDS
|
||||||
|
|
||||||
|
MMModemMode
|
||||||
|
mm_modem_mode_from_qmi_rat_mode_preference (QmiNasRatModePreference qmi)
|
||||||
|
{
|
||||||
|
MMModemMode mode = MM_MODEM_MODE_NONE;
|
||||||
|
|
||||||
|
if (qmi & QMI_NAS_RAT_MODE_PREFERENCE_CDMA_1X)
|
||||||
|
mode |= MM_MODEM_MODE_2G;
|
||||||
|
|
||||||
|
if (qmi & QMI_NAS_RAT_MODE_PREFERENCE_CDMA_1XEVDO)
|
||||||
|
mode |= MM_MODEM_MODE_3G;
|
||||||
|
|
||||||
|
if (qmi & QMI_NAS_RAT_MODE_PREFERENCE_GSM)
|
||||||
|
mode |= MM_MODEM_MODE_2G;
|
||||||
|
|
||||||
|
if (qmi & QMI_NAS_RAT_MODE_PREFERENCE_UMTS)
|
||||||
|
mode |= MM_MODEM_MODE_3G;
|
||||||
|
|
||||||
|
if (qmi & QMI_NAS_RAT_MODE_PREFERENCE_LTE)
|
||||||
|
mode |= MM_MODEM_MODE_4G;
|
||||||
|
|
||||||
|
/* Assume CS if 2G supported */
|
||||||
|
if (mode & MM_MODEM_MODE_2G)
|
||||||
|
mode |= MM_MODEM_MODE_CS;
|
||||||
|
|
||||||
|
return mode;
|
||||||
|
}
|
||||||
|
|
||||||
|
QmiNasRatModePreference
|
||||||
|
mm_modem_mode_to_qmi_rat_mode_preference (MMModemMode mode,
|
||||||
|
gboolean is_cdma,
|
||||||
|
gboolean is_3gpp)
|
||||||
|
{
|
||||||
|
QmiNasRatModePreference pref = 0;
|
||||||
|
|
||||||
|
if (is_cdma) {
|
||||||
|
if (mode & MM_MODEM_MODE_2G)
|
||||||
|
pref |= QMI_NAS_RAT_MODE_PREFERENCE_CDMA_1X;
|
||||||
|
|
||||||
|
if (mode & MM_MODEM_MODE_3G)
|
||||||
|
pref |= QMI_NAS_RAT_MODE_PREFERENCE_CDMA_1XEVDO;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (is_3gpp) {
|
||||||
|
if (mode & MM_MODEM_MODE_2G)
|
||||||
|
pref |= QMI_NAS_RAT_MODE_PREFERENCE_GSM;
|
||||||
|
|
||||||
|
if (mode & MM_MODEM_MODE_3G)
|
||||||
|
pref |= QMI_NAS_RAT_MODE_PREFERENCE_UMTS;
|
||||||
|
|
||||||
|
if (mode & MM_MODEM_MODE_4G)
|
||||||
|
pref |= QMI_NAS_RAT_MODE_PREFERENCE_LTE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return mode;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
MMModemMode
|
||||||
|
mm_modem_mode_from_qmi_gsm_wcdma_acquisition_order_preference (QmiNasGsmWcdmaAcquisitionOrderPreference qmi)
|
||||||
|
{
|
||||||
|
switch (qmi) {
|
||||||
|
case QMI_NAS_GSM_WCDMA_ACQUISITION_ORDER_PREFERENCE_AUTOMATIC:
|
||||||
|
return MM_MODEM_MODE_NONE;
|
||||||
|
case QMI_NAS_GSM_WCDMA_ACQUISITION_ORDER_PREFERENCE_GSM:
|
||||||
|
return MM_MODEM_MODE_2G;
|
||||||
|
case QMI_NAS_GSM_WCDMA_ACQUISITION_ORDER_PREFERENCE_WCDMA:
|
||||||
|
return MM_MODEM_MODE_3G;
|
||||||
|
default:
|
||||||
|
mm_dbg ("Unknown acquisition order preference: '%s'",
|
||||||
|
qmi_nas_gsm_wcdma_acquisition_order_preference_get_string (qmi));
|
||||||
|
return MM_MODEM_MODE_NONE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
QmiNasGsmWcdmaAcquisitionOrderPreference
|
||||||
|
mm_modem_mode_to_qmi_gsm_wcdma_acquisition_order_preference (MMModemMode mode)
|
||||||
|
{
|
||||||
|
gchar *str;
|
||||||
|
|
||||||
|
/* mode is not a mask in this case, only a value */
|
||||||
|
|
||||||
|
switch (mode) {
|
||||||
|
case MM_MODEM_MODE_3G:
|
||||||
|
return QMI_NAS_GSM_WCDMA_ACQUISITION_ORDER_PREFERENCE_WCDMA;
|
||||||
|
case MM_MODEM_MODE_2G:
|
||||||
|
return QMI_NAS_GSM_WCDMA_ACQUISITION_ORDER_PREFERENCE_GSM;
|
||||||
|
case MM_MODEM_MODE_NONE:
|
||||||
|
return QMI_NAS_GSM_WCDMA_ACQUISITION_ORDER_PREFERENCE_AUTOMATIC;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
str = mm_modem_mode_build_string_from_mask (mode);
|
||||||
|
mm_dbg ("Unhandled modem mode: '%s'", str);
|
||||||
|
g_free (str);
|
||||||
|
|
||||||
|
return MM_MODEM_MODE_NONE;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* WITH_NEWEST_QMI_COMMANDS */
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
MMModem3gppRegistrationState
|
||||||
|
mm_modem_3gpp_registration_state_from_qmi_registration_state (QmiNasAttachState attach_state,
|
||||||
|
QmiNasRegistrationState registration_state,
|
||||||
|
gboolean roaming)
|
||||||
|
{
|
||||||
|
if (attach_state == QMI_NAS_ATTACH_STATE_UNKNOWN)
|
||||||
|
return MM_MODEM_3GPP_REGISTRATION_STATE_UNKNOWN;
|
||||||
|
|
||||||
|
if (attach_state == QMI_NAS_ATTACH_STATE_DETACHED)
|
||||||
|
return QMI_NAS_REGISTRATION_STATE_NOT_REGISTERED;
|
||||||
|
|
||||||
|
/* attached */
|
||||||
|
|
||||||
|
switch (registration_state) {
|
||||||
|
case QMI_NAS_REGISTRATION_STATE_NOT_REGISTERED:
|
||||||
|
return MM_MODEM_3GPP_REGISTRATION_STATE_IDLE;
|
||||||
|
case QMI_NAS_REGISTRATION_STATE_REGISTERED:
|
||||||
|
return (roaming ? MM_MODEM_3GPP_REGISTRATION_STATE_ROAMING : MM_MODEM_3GPP_REGISTRATION_STATE_HOME);
|
||||||
|
case QMI_NAS_REGISTRATION_STATE_NOT_REGISTERED_SEARCHING:
|
||||||
|
return MM_MODEM_3GPP_REGISTRATION_STATE_SEARCHING;
|
||||||
|
case QMI_NAS_REGISTRATION_STATE_REGISTRATION_DENIED:
|
||||||
|
return MM_MODEM_3GPP_REGISTRATION_STATE_DENIED;
|
||||||
|
case QMI_NAS_REGISTRATION_STATE_UNKNOWN:
|
||||||
|
default:
|
||||||
|
return MM_MODEM_3GPP_REGISTRATION_STATE_UNKNOWN;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
MMModemCdmaRegistrationState
|
||||||
|
mm_modem_cdma_registration_state_from_qmi_registration_state (QmiNasRegistrationState registration_state)
|
||||||
|
{
|
||||||
|
switch (registration_state) {
|
||||||
|
case QMI_NAS_REGISTRATION_STATE_REGISTERED:
|
||||||
|
return MM_MODEM_CDMA_REGISTRATION_STATE_REGISTERED;
|
||||||
|
case QMI_NAS_REGISTRATION_STATE_NOT_REGISTERED:
|
||||||
|
case QMI_NAS_REGISTRATION_STATE_NOT_REGISTERED_SEARCHING:
|
||||||
|
case QMI_NAS_REGISTRATION_STATE_REGISTRATION_DENIED:
|
||||||
|
case QMI_NAS_REGISTRATION_STATE_UNKNOWN:
|
||||||
|
default:
|
||||||
|
return MM_MODEM_CDMA_REGISTRATION_STATE_UNKNOWN;
|
||||||
|
}
|
||||||
|
}
|
69
src/mm-modem-helpers-qmi.h
Normal file
69
src/mm-modem-helpers-qmi.h
Normal file
@@ -0,0 +1,69 @@
|
|||||||
|
/* -*- 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) 2012 Google, Inc.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef MM_MODEM_HELPERS_QMI_H
|
||||||
|
#define MM_MODEM_HELPERS_QMI_H
|
||||||
|
|
||||||
|
#include <config.h>
|
||||||
|
|
||||||
|
#include <ModemManager.h>
|
||||||
|
#include <libqmi-glib.h>
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/* QMI/DMS to MM translations */
|
||||||
|
|
||||||
|
MMModemCapability mm_modem_capability_from_qmi_radio_interface (QmiDmsRadioInterface network);
|
||||||
|
|
||||||
|
MMModemLock mm_modem_lock_from_qmi_uim_pin_status (QmiDmsUimPinStatus status,
|
||||||
|
gboolean pin1);
|
||||||
|
|
||||||
|
QmiDmsUimFacility mm_3gpp_facility_to_qmi_uim_facility (MMModem3gppFacility mm);
|
||||||
|
|
||||||
|
GArray *mm_modem_bands_from_qmi_band_capabilities (QmiDmsBandCapability qmi_bands,
|
||||||
|
QmiDmsLteBandCapability qmi_lte_bands);
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/* QMI/NAS to MM translations */
|
||||||
|
|
||||||
|
MMModemAccessTechnology mm_modem_access_technology_from_qmi_radio_interface (QmiNasRadioInterface interface);
|
||||||
|
MMModemAccessTechnology mm_modem_access_technologies_from_qmi_radio_interface_array (GArray *radio_interfaces);
|
||||||
|
|
||||||
|
MMModemAccessTechnology mm_modem_access_technology_from_qmi_data_capability (QmiNasDataCapability cap);
|
||||||
|
MMModemAccessTechnology mm_modem_access_technologies_from_qmi_data_capability_array (GArray *data_capabilities);
|
||||||
|
|
||||||
|
MMModemMode mm_modem_mode_from_qmi_radio_technology_preference (QmiNasRadioTechnologyPreference qmi);
|
||||||
|
QmiNasRadioTechnologyPreference mm_modem_mode_to_qmi_radio_technology_preference (MMModemMode mode,
|
||||||
|
gboolean is_cdma);
|
||||||
|
|
||||||
|
#if defined WITH_NEWEST_QMI_COMMANDS
|
||||||
|
|
||||||
|
MMModemMode mm_modem_mode_from_qmi_rat_mode_preference (QmiNasRatModePreference qmi);
|
||||||
|
QmiNasRatModePreference mm_modem_mode_to_qmi_rat_mode_preference (MMModemMode mode,
|
||||||
|
gboolean is_cdma,
|
||||||
|
gboolean is_3gpp);
|
||||||
|
|
||||||
|
MMModemMode mm_modem_mode_from_qmi_gsm_wcdma_acquisition_order_preference (QmiNasGsmWcdmaAcquisitionOrderPreference qmi);
|
||||||
|
QmiNasGsmWcdmaAcquisitionOrderPreference mm_modem_mode_to_qmi_gsm_wcdma_acquisition_order_preference (MMModemMode mode);
|
||||||
|
|
||||||
|
#endif /* WITH_NEWEST_QMI_COMMANDS */
|
||||||
|
|
||||||
|
MMModem3gppRegistrationState mm_modem_3gpp_registration_state_from_qmi_registration_state (QmiNasAttachState attach_state,
|
||||||
|
QmiNasRegistrationState registration_state,
|
||||||
|
gboolean roaming);
|
||||||
|
|
||||||
|
MMModemCdmaRegistrationState mm_modem_cdma_registration_state_from_qmi_registration_state (QmiNasRegistrationState registration_state);
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* MM_MODEM_HELPERS_QMI_H */
|
Reference in New Issue
Block a user