plugins,telit: refactor functions dealing with #BND

Currently functions dealing with #BND request

- mm_telit_parse_bnd_query_response
- mm_telit_parse_bnd_test_response
- mm_telit_build_bnd_request

have all a long list of arguments configuring how to deal with the BND
string.

This commit reworks this list of arguments into a single new structure
"MMTelitBNDParseConfig" with the following advantages

- shorter list of arguments for the above functions
- future changes to this arguments will be transparent for the functions
  above that only pass the values
- one single point where the structure is created: a new function
  mm_shared_telit_get_bnd_parse_config.
This commit is contained in:
Carlo Lobrano
2022-08-10 15:37:16 +02:00
parent 99cde83942
commit a55384d7b0
5 changed files with 132 additions and 166 deletions

View File

@@ -195,13 +195,9 @@ initialize_telit_3g_to_mm_band_masks (void)
/* Set current bands helpers */ /* Set current bands helpers */
gchar * gchar *
mm_telit_build_bnd_request (GArray *bands_array, mm_telit_build_bnd_request (GArray *bands_array,
gboolean modem_is_2g, MMTelitBNDParseConfig *config,
gboolean modem_is_3g, GError **error)
gboolean modem_is_4g,
gboolean modem_alternate_3g_bands,
gboolean modem_ext_4g_bands,
GError **error)
{ {
guint32 mask2g = 0; guint32 mask2g = 0;
guint64 mask3g = 0; guint64 mask3g = 0;
@@ -214,11 +210,14 @@ mm_telit_build_bnd_request (GArray *bands_array,
gchar *cmd; gchar *cmd;
const guint64 *telit_3g_to_mm_band_mask; const guint64 *telit_3g_to_mm_band_mask;
guint telit_3g_to_mm_band_mask_n_elements; guint telit_3g_to_mm_band_mask_n_elements;
gboolean modem_is_2g = config->modem_is_2g;
gboolean modem_is_3g = config->modem_is_3g;
gboolean modem_is_4g = config->modem_is_4g;
initialize_telit_3g_to_mm_band_masks (); initialize_telit_3g_to_mm_band_masks ();
/* Select correct 3G band mask */ /* Select correct 3G band mask */
if (modem_alternate_3g_bands) { if (config->modem_alternate_3g_bands) {
telit_3g_to_mm_band_mask = telit_3g_to_mm_band_mask_alternate; telit_3g_to_mm_band_mask = telit_3g_to_mm_band_mask_alternate;
telit_3g_to_mm_band_mask_n_elements = G_N_ELEMENTS (telit_3g_to_mm_band_mask_alternate); telit_3g_to_mm_band_mask_n_elements = G_N_ELEMENTS (telit_3g_to_mm_band_mask_alternate);
} else { } else {
@@ -318,24 +317,24 @@ mm_telit_build_bnd_request (GArray *bands_array,
else if (modem_is_2g && modem_is_3g && !modem_is_4g) else if (modem_is_2g && modem_is_3g && !modem_is_4g)
cmd = g_strdup_printf ("#BND=%d,%" G_GINT64_FORMAT, flag2g, flag3g); cmd = g_strdup_printf ("#BND=%d,%" G_GINT64_FORMAT, flag2g, flag3g);
else if (!modem_is_2g && !modem_is_3g && modem_is_4g) { else if (!modem_is_2g && !modem_is_3g && modem_is_4g) {
if (!modem_ext_4g_bands) if (!config->modem_ext_4g_bands)
cmd = g_strdup_printf ("#BND=0,0,%" G_GINT64_FORMAT, flag4g); cmd = g_strdup_printf ("#BND=0,0,%" G_GINT64_FORMAT, flag4g);
else else
cmd = g_strdup_printf ("#BND=0,0,%" G_GINT64_MODIFIER "x" ",%" G_GINT64_MODIFIER "x", mask4g, mask4gext); cmd = g_strdup_printf ("#BND=0,0,%" G_GINT64_MODIFIER "x" ",%" G_GINT64_MODIFIER "x", mask4g, mask4gext);
} else if (!modem_is_2g && modem_is_3g && modem_is_4g) { } else if (!modem_is_2g && modem_is_3g && modem_is_4g) {
if (!modem_ext_4g_bands) if (!config->modem_ext_4g_bands)
cmd = g_strdup_printf ("#BND=0,%" G_GINT64_FORMAT ",%" G_GINT64_FORMAT, flag3g, flag4g); cmd = g_strdup_printf ("#BND=0,%" G_GINT64_FORMAT ",%" G_GINT64_FORMAT, flag3g, flag4g);
else else
cmd = g_strdup_printf ("#BND=0,%" G_GINT64_FORMAT ",%" G_GINT64_MODIFIER "x" ",%" G_GINT64_MODIFIER "x", flag3g, mask4g, mask4gext); cmd = g_strdup_printf ("#BND=0,%" G_GINT64_FORMAT ",%" G_GINT64_MODIFIER "x" ",%" G_GINT64_MODIFIER "x", flag3g, mask4g, mask4gext);
} else if (modem_is_2g && !modem_is_3g && modem_is_4g) { } else if (modem_is_2g && !modem_is_3g && modem_is_4g) {
if (!modem_ext_4g_bands) if (!config->modem_ext_4g_bands)
cmd = g_strdup_printf ("#BND=%d,0,%" G_GINT64_FORMAT, flag2g, flag4g); cmd = g_strdup_printf ("#BND=%d,0,%" G_GINT64_FORMAT, flag2g, flag4g);
else else
cmd = g_strdup_printf ("#BND=%d,0,%" G_GINT64_MODIFIER "x" ",%" G_GINT64_MODIFIER "x", flag2g, mask4g, mask4gext); cmd = g_strdup_printf ("#BND=%d,0,%" G_GINT64_MODIFIER "x" ",%" G_GINT64_MODIFIER "x", flag2g, mask4g, mask4gext);
} else if (modem_is_2g && modem_is_3g && modem_is_4g) { } else if (modem_is_2g && modem_is_3g && modem_is_4g) {
if (!modem_ext_4g_bands) if (!config->modem_ext_4g_bands)
cmd = g_strdup_printf ("#BND=%d,%" G_GINT64_FORMAT ",%" G_GINT64_FORMAT, flag2g, flag3g, flag4g); cmd = g_strdup_printf ("#BND=%d,%" G_GINT64_FORMAT ",%" G_GINT64_FORMAT, flag2g, flag3g, flag4g);
else else
cmd = g_strdup_printf ("#BND=%d,%" G_GINT64_FORMAT ",%" G_GINT64_MODIFIER "x" ",%" G_GINT64_MODIFIER "x", flag2g, flag3g, mask4g, mask4gext); cmd = g_strdup_printf ("#BND=%d,%" G_GINT64_FORMAT ",%" G_GINT64_MODIFIER "x" ",%" G_GINT64_MODIFIER "x", flag2g, flag3g, mask4g, mask4gext);
} else } else
g_assert_not_reached (); g_assert_not_reached ();
@@ -690,16 +689,11 @@ bnd_response_has_ext_4g_bands (const gchar *response)
#define MM_CURRENT_BANDS_4G_EXT "(,\\s*(?P<Bands4GHex>[0-9A-F]+))?(,\\s*(?P<Bands4GExt>[0-9A-F]+))?" #define MM_CURRENT_BANDS_4G_EXT "(,\\s*(?P<Bands4GHex>[0-9A-F]+))?(,\\s*(?P<Bands4GExt>[0-9A-F]+))?"
static GArray * static GArray *
common_parse_bnd_response (const gchar *response, common_parse_bnd_response (const gchar *response,
gboolean modem_is_2g, MMTelitBNDParseConfig *config,
gboolean modem_is_3g, LoadBandsType load_type,
gboolean modem_is_4g, gpointer log_object,
gboolean modem_alternate_3g_bands, GError **error)
gboolean modem_has_hex_format_4g_bands,
gboolean modem_ext_4g_bands,
LoadBandsType load_type,
gpointer log_object,
GError **error)
{ {
g_autoptr(GMatchInfo) match_info = NULL; g_autoptr(GMatchInfo) match_info = NULL;
g_autoptr(GRegex) r = NULL; g_autoptr(GRegex) r = NULL;
@@ -721,9 +715,9 @@ common_parse_bnd_response (const gchar *response,
[LOAD_BANDS_TYPE_CURRENT] = "#BND:"MM_CURRENT_BANDS_2G MM_CURRENT_BANDS_3G MM_CURRENT_BANDS_4G_EXT, [LOAD_BANDS_TYPE_CURRENT] = "#BND:"MM_CURRENT_BANDS_2G MM_CURRENT_BANDS_3G MM_CURRENT_BANDS_4G_EXT,
}; };
if (modem_ext_4g_bands) if (config->modem_ext_4g_bands)
load_bands_regex = load_bands_regex_4g_ext[load_type]; load_bands_regex = load_bands_regex_4g_ext[load_type];
else if (modem_has_hex_format_4g_bands) else if (config->modem_has_hex_format_4g_bands)
load_bands_regex = load_bands_regex_4g_hex[load_type]; load_bands_regex = load_bands_regex_4g_hex[load_type];
else else
load_bands_regex = load_bands_regex_4g_dec[load_type]; load_bands_regex = load_bands_regex_4g_dec[load_type];
@@ -745,16 +739,16 @@ common_parse_bnd_response (const gchar *response,
bands = g_array_new (TRUE, TRUE, sizeof (MMModemBand)); bands = g_array_new (TRUE, TRUE, sizeof (MMModemBand));
if (modem_is_2g && !telit_get_2g_mm_bands (match_info, log_object, &bands, &inner_error)) if (config->modem_is_2g && !telit_get_2g_mm_bands (match_info, log_object, &bands, &inner_error))
goto out; goto out;
if (modem_is_3g && !telit_get_3g_mm_bands (match_info, log_object, modem_alternate_3g_bands, &bands, &inner_error)) if (config->modem_is_3g && !telit_get_3g_mm_bands (match_info, log_object, config->modem_alternate_3g_bands, &bands, &inner_error))
goto out; goto out;
if (modem_is_4g) { if (config->modem_is_4g) {
gboolean ok; gboolean ok;
ok = modem_ext_4g_bands? ok = config->modem_ext_4g_bands?
telit_get_ext_4g_mm_bands (match_info, &bands, &inner_error) : telit_get_ext_4g_mm_bands (match_info, &bands, &inner_error) :
telit_get_4g_mm_bands (match_info, &bands, &inner_error); telit_get_4g_mm_bands (match_info, &bands, &inner_error);
if (!ok) if (!ok)
@@ -771,43 +765,27 @@ out:
} }
GArray * GArray *
mm_telit_parse_bnd_query_response (const gchar *response, mm_telit_parse_bnd_query_response (const gchar *response,
gboolean modem_is_2g, MMTelitBNDParseConfig *config,
gboolean modem_is_3g, gpointer log_object,
gboolean modem_is_4g, GError **error)
gboolean modem_alternate_3g_bands,
gboolean modem_has_hex_format_4g_bands,
gboolean modem_ext_4g_bands,
gpointer log_object,
GError **error)
{ {
return common_parse_bnd_response (response, return common_parse_bnd_response (response,
modem_is_2g, modem_is_3g, modem_is_4g, config,
modem_alternate_3g_bands,
modem_has_hex_format_4g_bands,
modem_ext_4g_bands,
LOAD_BANDS_TYPE_CURRENT, LOAD_BANDS_TYPE_CURRENT,
log_object, log_object,
error); error);
} }
GArray * GArray *
mm_telit_parse_bnd_test_response (const gchar *response, mm_telit_parse_bnd_test_response (const gchar *response,
gboolean modem_is_2g, MMTelitBNDParseConfig *config,
gboolean modem_is_3g, gpointer log_object,
gboolean modem_is_4g, GError **error)
gboolean modem_alternate_3g_bands,
gboolean modem_has_hex_format_4g_bands,
gboolean *modem_ext_4g_bands,
gpointer log_object,
GError **error)
{ {
*modem_ext_4g_bands = bnd_response_has_ext_4g_bands (response); config->modem_ext_4g_bands = bnd_response_has_ext_4g_bands (response);
return common_parse_bnd_response (response, return common_parse_bnd_response (response,
modem_is_2g, modem_is_3g, modem_is_4g, config,
modem_alternate_3g_bands,
modem_has_hex_format_4g_bands,
*modem_ext_4g_bands,
LOAD_BANDS_TYPE_SUPPORTED, LOAD_BANDS_TYPE_SUPPORTED,
log_object, log_object,
error); error);

View File

@@ -28,32 +28,27 @@ typedef enum {
MM_TELIT_MODEL_LN920, MM_TELIT_MODEL_LN920,
} MMTelitModel; } MMTelitModel;
typedef struct {
gboolean modem_is_2g;
gboolean modem_is_3g;
gboolean modem_is_4g;
gboolean modem_alternate_3g_bands;
gboolean modem_has_hex_format_4g_bands;
gboolean modem_ext_4g_bands;
} MMTelitBNDParseConfig;
/* #BND response parsers and request builder */ /* #BND response parsers and request builder */
GArray *mm_telit_parse_bnd_query_response (const gchar *response, GArray *mm_telit_parse_bnd_query_response (const gchar *response,
gboolean modem_is_2g, MMTelitBNDParseConfig *config,
gboolean modem_is_3g, gpointer log_object,
gboolean modem_is_4g, GError **error);
gboolean modem_alternate_3g_bands, GArray *mm_telit_parse_bnd_test_response (const gchar *response,
gboolean modem_has_hex_format_4g_bands, MMTelitBNDParseConfig *config,
gboolean modem_ext_4g_bands, gpointer log_object,
gpointer log_object, GError **error);
GError **error); gchar *mm_telit_build_bnd_request (GArray *bands_array,
GArray *mm_telit_parse_bnd_test_response (const gchar *response, MMTelitBNDParseConfig *config,
gboolean modem_is_2g, GError **error);
gboolean modem_is_3g,
gboolean modem_is_4g,
gboolean modem_alternate_3g_bands,
gboolean modem_has_hex_format_4g_bands,
gboolean *modem_ext_4g_bands,
gpointer log_object,
GError **error);
gchar *mm_telit_build_bnd_request (GArray *bands_array,
gboolean modem_is_2g,
gboolean modem_is_3g,
gboolean modem_is_4g,
gboolean modem_alternate_3g_bands,
gboolean modem_ext_4g_bands,
GError **error);
/* #QSS? response parser */ /* #QSS? response parser */
typedef enum { /*< underscore_name=mm_telit_qss_status >*/ typedef enum { /*< underscore_name=mm_telit_qss_status >*/

View File

@@ -134,6 +134,21 @@ mm_shared_telit_store_revision (MMSharedTelit *self,
priv->software_package_version = g_strdup (revision); priv->software_package_version = g_strdup (revision);
} }
void
mm_shared_telit_get_bnd_parse_config (MMIfaceModem *self, MMTelitBNDParseConfig *config)
{
Private *priv;
priv = get_private (MM_SHARED_TELIT (self));
config->modem_is_2g = mm_iface_modem_is_2g (self);
config->modem_is_3g = mm_iface_modem_is_3g (self);
config->modem_is_4g = mm_iface_modem_is_4g (self);
config->modem_alternate_3g_bands = priv->alternate_3g_bands;
config->modem_has_hex_format_4g_bands = is_bnd_4g_format_hex (MM_BASE_MODEM(self), priv->software_package_version);
config->modem_ext_4g_bands = priv->ext_4g_bands;
}
/*****************************************************************************/ /*****************************************************************************/
/* Load current mode (Modem interface) */ /* Load current mode (Modem interface) */
@@ -241,16 +256,13 @@ load_supported_bands_ready (MMBaseModem *self,
g_task_return_error (task, error); g_task_return_error (task, error);
else { else {
GArray *bands; GArray *bands;
MMTelitBNDParseConfig config;
bands = mm_telit_parse_bnd_test_response (response, mm_shared_telit_get_bnd_parse_config (MM_IFACE_MODEM (self), &config);
mm_iface_modem_is_2g (MM_IFACE_MODEM (self)),
mm_iface_modem_is_3g (MM_IFACE_MODEM (self)), bands = mm_telit_parse_bnd_test_response (response, &config, self, &error);
mm_iface_modem_is_4g (MM_IFACE_MODEM (self)), /* update ext_4g_bands regardless the bands value */
priv->alternate_3g_bands, priv->ext_4g_bands = config.modem_ext_4g_bands;
is_bnd_4g_format_hex (self, priv->software_package_version),
&priv->ext_4g_bands,
self,
&error);
if (!bands) if (!bands)
g_task_return_error (task, error); g_task_return_error (task, error);
else { else {
@@ -338,25 +350,17 @@ load_current_bands_ready (MMBaseModem *self,
{ {
const gchar *response; const gchar *response;
GError *error = NULL; GError *error = NULL;
Private *priv;
priv = get_private (MM_SHARED_TELIT (self));
response = mm_base_modem_at_command_finish (self, res, &error); response = mm_base_modem_at_command_finish (self, res, &error);
if (!response) if (!response)
g_task_return_error (task, error); g_task_return_error (task, error);
else { else {
GArray *bands; GArray *bands;
MMTelitBNDParseConfig config;
bands = mm_telit_parse_bnd_query_response (response, mm_shared_telit_get_bnd_parse_config (MM_IFACE_MODEM (self), &config);
mm_iface_modem_is_2g (MM_IFACE_MODEM (self)),
mm_iface_modem_is_3g (MM_IFACE_MODEM (self)), bands = mm_telit_parse_bnd_query_response (response, &config, self, &error);
mm_iface_modem_is_4g (MM_IFACE_MODEM (self)),
priv->alternate_3g_bands,
is_bnd_4g_format_hex (self, priv->software_package_version),
priv->ext_4g_bands,
self,
&error);
if (!bands) if (!bands)
g_task_return_error (task, error); g_task_return_error (task, error);
else else
@@ -454,15 +458,16 @@ set_current_bands_at (MMIfaceModem *self,
{ {
GError *error = NULL; GError *error = NULL;
gchar *cmd; gchar *cmd;
Private *priv;
GArray *bands_array; GArray *bands_array;
MMTelitBNDParseConfig config;
priv = get_private (MM_SHARED_TELIT (self));
bands_array = g_task_get_task_data (task); bands_array = g_task_get_task_data (task);
g_assert (bands_array); g_assert (bands_array);
if (bands_array->len == 1 && g_array_index (bands_array, MMModemBand, 0) == MM_MODEM_BAND_ANY) { if (bands_array->len == 1 && g_array_index (bands_array, MMModemBand, 0) == MM_MODEM_BAND_ANY) {
Private *priv;
priv = get_private (MM_SHARED_TELIT (self));
if (!priv->supported_bands) { if (!priv->supported_bands) {
g_task_return_new_error (task, MM_CORE_ERROR, MM_CORE_ERROR_FAILED, g_task_return_new_error (task, MM_CORE_ERROR, MM_CORE_ERROR_FAILED,
"Couldn't build ANY band settings: unknown supported bands"); "Couldn't build ANY band settings: unknown supported bands");
@@ -472,13 +477,8 @@ set_current_bands_at (MMIfaceModem *self,
bands_array = priv->supported_bands; bands_array = priv->supported_bands;
} }
cmd = mm_telit_build_bnd_request (bands_array, mm_shared_telit_get_bnd_parse_config (self, &config);
mm_iface_modem_is_2g (self), cmd = mm_telit_build_bnd_request (bands_array, &config, &error);
mm_iface_modem_is_3g (self),
mm_iface_modem_is_4g (self),
priv->alternate_3g_bands,
priv->ext_4g_bands,
&error);
if (!cmd) { if (!cmd) {
g_task_return_error (task, error); g_task_return_error (task, error);
g_object_unref (task); g_object_unref (task);
@@ -783,3 +783,4 @@ mm_shared_telit_get_type (void)
return shared_telit_type; return shared_telit_type;
} }

View File

@@ -25,6 +25,7 @@
#include "mm-broadband-modem.h" #include "mm-broadband-modem.h"
#include "mm-iface-modem.h" #include "mm-iface-modem.h"
#include "mm-iface-modem-location.h" #include "mm-iface-modem-location.h"
#include "mm-modem-helpers-telit.h"
#define MM_TYPE_SHARED_TELIT (mm_shared_telit_get_type ()) #define MM_TYPE_SHARED_TELIT (mm_shared_telit_get_type ())
#define MM_SHARED_TELIT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MM_TYPE_SHARED_TELIT, MMSharedTelit)) #define MM_SHARED_TELIT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MM_TYPE_SHARED_TELIT, MMSharedTelit))
@@ -101,4 +102,6 @@ gchar * mm_shared_telit_modem_load_revision_finish (MMIfaceModem *self,
void mm_shared_telit_store_revision (MMSharedTelit *self, void mm_shared_telit_store_revision (MMSharedTelit *self,
const gchar *revision); const gchar *revision);
void mm_shared_telit_get_bnd_parse_config (MMIfaceModem *self,
MMTelitBNDParseConfig *config);
#endif /* MM_SHARED_TELIT_H */ #endif /* MM_SHARED_TELIT_H */

View File

@@ -35,26 +35,21 @@
typedef struct { typedef struct {
const gchar *response; const gchar *response;
gboolean modem_is_2g; MMTelitBNDParseConfig config;
gboolean modem_is_3g;
gboolean modem_is_4g;
gboolean modem_alternate_3g_bands;
gboolean modem_has_4g_bands_hex_format;
gboolean modem_ext_4g_bands;
guint mm_bands_len; guint mm_bands_len;
MMModemBand mm_bands [MAX_BANDS_LIST_LEN]; MMModemBand mm_bands [MAX_BANDS_LIST_LEN];
} BndResponseTest; } BndResponseTest;
static BndResponseTest supported_band_mapping_tests [] = { static BndResponseTest supported_band_mapping_tests [] = {
{ {
"#BND: (0-3)", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, 4, "#BND: (0-3)", {TRUE, FALSE, FALSE, FALSE, FALSE, FALSE}, 4,
{ MM_MODEM_BAND_EGSM, { MM_MODEM_BAND_EGSM,
MM_MODEM_BAND_DCS, MM_MODEM_BAND_DCS,
MM_MODEM_BAND_PCS, MM_MODEM_BAND_PCS,
MM_MODEM_BAND_G850 } MM_MODEM_BAND_G850 }
}, },
{ {
"#BND: (0-3),(0,2,5,6)", TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, 7, "#BND: (0-3),(0,2,5,6)", {TRUE, TRUE, FALSE, FALSE, FALSE, FALSE}, 7,
{ MM_MODEM_BAND_EGSM, { MM_MODEM_BAND_EGSM,
MM_MODEM_BAND_DCS, MM_MODEM_BAND_DCS,
MM_MODEM_BAND_PCS, MM_MODEM_BAND_PCS,
@@ -64,7 +59,7 @@ static BndResponseTest supported_band_mapping_tests [] = {
MM_MODEM_BAND_UTRAN_8 } MM_MODEM_BAND_UTRAN_8 }
}, },
{ {
"#BND: (0,3),(0,2,5,6)", TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, 7, "#BND: (0,3),(0,2,5,6)", {TRUE, TRUE, FALSE, FALSE, FALSE, FALSE}, 7,
{ MM_MODEM_BAND_EGSM, { MM_MODEM_BAND_EGSM,
MM_MODEM_BAND_DCS, MM_MODEM_BAND_DCS,
MM_MODEM_BAND_PCS, MM_MODEM_BAND_PCS,
@@ -74,7 +69,7 @@ static BndResponseTest supported_band_mapping_tests [] = {
MM_MODEM_BAND_UTRAN_8 } MM_MODEM_BAND_UTRAN_8 }
}, },
{ {
"#BND: (0,2),(0,2,5,6)", TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, 6, "#BND: (0,2),(0,2,5,6)", {TRUE, TRUE, FALSE, FALSE, FALSE, FALSE}, 6,
{ MM_MODEM_BAND_EGSM, { MM_MODEM_BAND_EGSM,
MM_MODEM_BAND_DCS, MM_MODEM_BAND_DCS,
MM_MODEM_BAND_G850, MM_MODEM_BAND_G850,
@@ -83,7 +78,7 @@ static BndResponseTest supported_band_mapping_tests [] = {
MM_MODEM_BAND_UTRAN_8 } MM_MODEM_BAND_UTRAN_8 }
}, },
{ {
"#BND: (0,2),(0-4,5,6)", TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, 7, "#BND: (0,2),(0-4,5,6)", {TRUE, TRUE, FALSE, FALSE, FALSE, FALSE}, 7,
{ MM_MODEM_BAND_EGSM, { MM_MODEM_BAND_EGSM,
MM_MODEM_BAND_DCS, MM_MODEM_BAND_DCS,
MM_MODEM_BAND_G850, MM_MODEM_BAND_G850,
@@ -93,7 +88,7 @@ static BndResponseTest supported_band_mapping_tests [] = {
MM_MODEM_BAND_UTRAN_8 } MM_MODEM_BAND_UTRAN_8 }
}, },
{ {
"#BND: (0-3),(0,2,5,6),(1-1)", TRUE, TRUE, TRUE, FALSE, FALSE, FALSE, 8, "#BND: (0-3),(0,2,5,6),(1-1)", {TRUE, TRUE, TRUE, FALSE, FALSE, FALSE}, 8,
{ MM_MODEM_BAND_EGSM, { MM_MODEM_BAND_EGSM,
MM_MODEM_BAND_DCS, MM_MODEM_BAND_DCS,
MM_MODEM_BAND_PCS, MM_MODEM_BAND_PCS,
@@ -104,7 +99,7 @@ static BndResponseTest supported_band_mapping_tests [] = {
MM_MODEM_BAND_EUTRAN_1 } MM_MODEM_BAND_EUTRAN_1 }
}, },
{ {
"#BND: (0),(0),(1-3)", TRUE, TRUE, TRUE, FALSE, FALSE, FALSE, 5, "#BND: (0),(0),(1-3)", {TRUE, TRUE, TRUE, FALSE, FALSE, FALSE}, 5,
{ MM_MODEM_BAND_EGSM, { MM_MODEM_BAND_EGSM,
MM_MODEM_BAND_DCS, MM_MODEM_BAND_DCS,
MM_MODEM_BAND_UTRAN_1, MM_MODEM_BAND_UTRAN_1,
@@ -112,13 +107,13 @@ static BndResponseTest supported_band_mapping_tests [] = {
MM_MODEM_BAND_EUTRAN_2 } MM_MODEM_BAND_EUTRAN_2 }
}, },
{ {
"#BND: (0),(0),(1-3)", FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, 2, "#BND: (0),(0),(1-3)", {FALSE, FALSE, TRUE, FALSE, FALSE, FALSE}, 2,
{ MM_MODEM_BAND_EUTRAN_1, { MM_MODEM_BAND_EUTRAN_1,
MM_MODEM_BAND_EUTRAN_2 } MM_MODEM_BAND_EUTRAN_2 }
}, },
/* 3G alternate band settings: default */ /* 3G alternate band settings: default */
{ {
"#BND: (0),(0,2,5,6,12,25)", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, 5, "#BND: (0),(0,2,5,6,12,25)", {FALSE, TRUE, FALSE, FALSE, FALSE, FALSE}, 5,
{ MM_MODEM_BAND_UTRAN_1, { MM_MODEM_BAND_UTRAN_1,
MM_MODEM_BAND_UTRAN_5, MM_MODEM_BAND_UTRAN_5,
MM_MODEM_BAND_UTRAN_8, MM_MODEM_BAND_UTRAN_8,
@@ -127,7 +122,7 @@ static BndResponseTest supported_band_mapping_tests [] = {
}, },
/* 3G alternate band settings: alternate */ /* 3G alternate band settings: alternate */
{ {
"#BND: (0),(0,2,5,6,12,13)", FALSE, TRUE, FALSE, TRUE, FALSE, FALSE, 4, "#BND: (0),(0,2,5,6,12,13)", {FALSE, TRUE, FALSE, TRUE, FALSE, FALSE}, 4,
{ MM_MODEM_BAND_UTRAN_1, { MM_MODEM_BAND_UTRAN_1,
MM_MODEM_BAND_UTRAN_3, MM_MODEM_BAND_UTRAN_3,
MM_MODEM_BAND_UTRAN_5, MM_MODEM_BAND_UTRAN_5,
@@ -137,7 +132,7 @@ static BndResponseTest supported_band_mapping_tests [] = {
* 168695967: 0xA0E189F: 0000 1010 0000 1110 0001 1000 1001 1111 * 168695967: 0xA0E189F: 0000 1010 0000 1110 0001 1000 1001 1111
*/ */
{ {
"#BND: (0-5),(0),(1-168695967)", TRUE, FALSE, TRUE, FALSE, FALSE, FALSE, 17, "#BND: (0-5),(0),(1-168695967)", {TRUE, FALSE, TRUE, FALSE, FALSE, FALSE}, 17,
{ MM_MODEM_BAND_EGSM, { MM_MODEM_BAND_EGSM,
MM_MODEM_BAND_DCS, MM_MODEM_BAND_DCS,
MM_MODEM_BAND_PCS, MM_MODEM_BAND_PCS,
@@ -158,7 +153,7 @@ static BndResponseTest supported_band_mapping_tests [] = {
}, },
/* 4G ext band settings: devices such as LN920 */ /* 4G ext band settings: devices such as LN920 */
{ {
"#BND: (0),(0),(1003100185A),(42)", FALSE, TRUE, TRUE, FALSE, TRUE, TRUE, 13, "#BND: (0),(0),(1003100185A),(42)", {FALSE, TRUE, TRUE, FALSE, TRUE, TRUE}, 13,
{ MM_MODEM_BAND_UTRAN_1, { MM_MODEM_BAND_UTRAN_1,
MM_MODEM_BAND_EUTRAN_2, MM_MODEM_BAND_EUTRAN_2,
MM_MODEM_BAND_EUTRAN_4, MM_MODEM_BAND_EUTRAN_4,
@@ -175,7 +170,7 @@ static BndResponseTest supported_band_mapping_tests [] = {
}, },
/* 4G band in hex format: devices such as LE910C1-EUX */ /* 4G band in hex format: devices such as LE910C1-EUX */
{ {
"#BND: (0),(0,5,6,13,15,23),(80800C5)", TRUE, TRUE, TRUE, FALSE, TRUE, FALSE, 11, "#BND: (0),(0,5,6,13,15,23),(80800C5)", {TRUE, TRUE, TRUE, FALSE, TRUE, FALSE}, 11,
{ {
MM_MODEM_BAND_EGSM, MM_MODEM_BAND_EGSM,
MM_MODEM_BAND_DCS, MM_MODEM_BAND_DCS,
@@ -199,20 +194,13 @@ test_parse_supported_bands_response (void)
for (i = 0; i < G_N_ELEMENTS (supported_band_mapping_tests); i++) { for (i = 0; i < G_N_ELEMENTS (supported_band_mapping_tests); i++) {
GError *error = NULL; GError *error = NULL;
GArray *bands = NULL; GArray *bands = NULL;
gboolean modem_ext_4g_bands;
bands = mm_telit_parse_bnd_test_response (supported_band_mapping_tests[i].response, bands = mm_telit_parse_bnd_test_response (supported_band_mapping_tests[i].response,
supported_band_mapping_tests[i].modem_is_2g, &supported_band_mapping_tests[i].config,
supported_band_mapping_tests[i].modem_is_3g,
supported_band_mapping_tests[i].modem_is_4g,
supported_band_mapping_tests[i].modem_alternate_3g_bands,
supported_band_mapping_tests[i].modem_has_4g_bands_hex_format,
&modem_ext_4g_bands,
NULL, NULL,
&error); &error);
g_assert_no_error (error); g_assert_no_error (error);
g_assert (bands); g_assert (bands);
g_assert (supported_band_mapping_tests[i].modem_ext_4g_bands == modem_ext_4g_bands);
mm_test_helpers_compare_bands (bands, mm_test_helpers_compare_bands (bands,
supported_band_mapping_tests[i].mm_bands, supported_band_mapping_tests[i].mm_bands,
@@ -223,18 +211,18 @@ test_parse_supported_bands_response (void)
static BndResponseTest current_band_mapping_tests [] = { static BndResponseTest current_band_mapping_tests [] = {
{ {
"#BND: 0", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, 2, "#BND: 0", {TRUE, FALSE, FALSE, FALSE, FALSE, FALSE}, 2,
{ MM_MODEM_BAND_EGSM, { MM_MODEM_BAND_EGSM,
MM_MODEM_BAND_DCS } MM_MODEM_BAND_DCS }
}, },
{ {
"#BND: 0,5", TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, 3, "#BND: 0,5", {TRUE, TRUE, FALSE, FALSE, FALSE, FALSE}, 3,
{ MM_MODEM_BAND_EGSM, { MM_MODEM_BAND_EGSM,
MM_MODEM_BAND_DCS, MM_MODEM_BAND_DCS,
MM_MODEM_BAND_UTRAN_8 } MM_MODEM_BAND_UTRAN_8 }
}, },
{ {
"#BND: 1,3", TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, 5, "#BND: 1,3", {TRUE, TRUE, FALSE, FALSE, FALSE, FALSE}, 5,
{ MM_MODEM_BAND_EGSM, { MM_MODEM_BAND_EGSM,
MM_MODEM_BAND_PCS, MM_MODEM_BAND_PCS,
MM_MODEM_BAND_UTRAN_1, MM_MODEM_BAND_UTRAN_1,
@@ -242,38 +230,38 @@ static BndResponseTest current_band_mapping_tests [] = {
MM_MODEM_BAND_UTRAN_5 } MM_MODEM_BAND_UTRAN_5 }
}, },
{ {
"#BND: 2,7", TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, 3, "#BND: 2,7", {TRUE, TRUE, FALSE, FALSE, FALSE, FALSE}, 3,
{ MM_MODEM_BAND_DCS, { MM_MODEM_BAND_DCS,
MM_MODEM_BAND_G850, MM_MODEM_BAND_G850,
MM_MODEM_BAND_UTRAN_4 } MM_MODEM_BAND_UTRAN_4 }
}, },
{ {
"#BND: 3,0,1", TRUE, TRUE, TRUE, FALSE, FALSE, FALSE, 4, "#BND: 3,0,1", {TRUE, TRUE, TRUE, FALSE, FALSE, FALSE}, 4,
{ MM_MODEM_BAND_PCS, { MM_MODEM_BAND_PCS,
MM_MODEM_BAND_G850, MM_MODEM_BAND_G850,
MM_MODEM_BAND_UTRAN_1, MM_MODEM_BAND_UTRAN_1,
MM_MODEM_BAND_EUTRAN_1 } MM_MODEM_BAND_EUTRAN_1 }
}, },
{ {
"#BND: 0,0,3", TRUE, FALSE, TRUE, FALSE, FALSE, FALSE, 4, "#BND: 0,0,3", {TRUE, FALSE, TRUE, FALSE, FALSE, FALSE}, 4,
{ MM_MODEM_BAND_EGSM, { MM_MODEM_BAND_EGSM,
MM_MODEM_BAND_DCS, MM_MODEM_BAND_DCS,
MM_MODEM_BAND_EUTRAN_1, MM_MODEM_BAND_EUTRAN_1,
MM_MODEM_BAND_EUTRAN_2 } MM_MODEM_BAND_EUTRAN_2 }
}, },
{ {
"#BND: 0,0,3", FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, 2, "#BND: 0,0,3", {FALSE, FALSE, TRUE, FALSE, FALSE, FALSE}, 2,
{ MM_MODEM_BAND_EUTRAN_1, { MM_MODEM_BAND_EUTRAN_1,
MM_MODEM_BAND_EUTRAN_2 } MM_MODEM_BAND_EUTRAN_2 }
}, },
/* 3G alternate band settings: default */ /* 3G alternate band settings: default */
{ {
"#BND: 0,12", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, 1, "#BND: 0,12", {FALSE, TRUE, FALSE, FALSE, FALSE, FALSE}, 1,
{ MM_MODEM_BAND_UTRAN_6 } { MM_MODEM_BAND_UTRAN_6 }
}, },
/* 3G alternate band settings: alternate */ /* 3G alternate band settings: alternate */
{ {
"#BND: 0,12", FALSE, TRUE, FALSE, TRUE, FALSE, FALSE, 4, "#BND: 0,12", {FALSE, TRUE, FALSE, TRUE, FALSE, FALSE}, 4,
{ MM_MODEM_BAND_UTRAN_1, { MM_MODEM_BAND_UTRAN_1,
MM_MODEM_BAND_UTRAN_3, MM_MODEM_BAND_UTRAN_3,
MM_MODEM_BAND_UTRAN_5, MM_MODEM_BAND_UTRAN_5,
@@ -283,7 +271,7 @@ static BndResponseTest current_band_mapping_tests [] = {
* 168695967: 0xA0E189F: 0000 1010 0000 1110 0001 1000 1001 1111 * 168695967: 0xA0E189F: 0000 1010 0000 1110 0001 1000 1001 1111
*/ */
{ {
"#BND: 5,0,168695967", TRUE, FALSE, TRUE, FALSE, FALSE, FALSE, 17, "#BND: 5,0,168695967", {TRUE, FALSE, TRUE, FALSE, FALSE, FALSE}, 17,
{ MM_MODEM_BAND_EGSM, { MM_MODEM_BAND_EGSM,
MM_MODEM_BAND_DCS, MM_MODEM_BAND_DCS,
MM_MODEM_BAND_PCS, MM_MODEM_BAND_PCS,
@@ -304,7 +292,7 @@ static BndResponseTest current_band_mapping_tests [] = {
}, },
/* 4G ext band settings: devices such as LN920 */ /* 4G ext band settings: devices such as LN920 */
{ {
"#BND: 0,0,1003100185A,42", FALSE, TRUE, TRUE, FALSE, FALSE, TRUE, 13, "#BND: 0,0,1003100185A,42", {FALSE, TRUE, TRUE, FALSE, FALSE, TRUE}, 13,
{ MM_MODEM_BAND_UTRAN_1, { MM_MODEM_BAND_UTRAN_1,
MM_MODEM_BAND_EUTRAN_2, MM_MODEM_BAND_EUTRAN_2,
MM_MODEM_BAND_EUTRAN_4, MM_MODEM_BAND_EUTRAN_4,
@@ -331,12 +319,7 @@ test_parse_current_bands_response (void)
GArray *bands = NULL; GArray *bands = NULL;
bands = mm_telit_parse_bnd_query_response (current_band_mapping_tests[i].response, bands = mm_telit_parse_bnd_query_response (current_band_mapping_tests[i].response,
current_band_mapping_tests[i].modem_is_2g, &current_band_mapping_tests[i].config,
current_band_mapping_tests[i].modem_is_3g,
current_band_mapping_tests[i].modem_is_4g,
current_band_mapping_tests[i].modem_alternate_3g_bands,
supported_band_mapping_tests[i].modem_has_4g_bands_hex_format,
current_band_mapping_tests[i].modem_ext_4g_bands,
NULL, NULL,
&error); &error);
g_assert_no_error (error); g_assert_no_error (error);
@@ -362,12 +345,15 @@ test_common_bnd_cmd (const gchar *expected_cmd,
{ {
gchar *cmd; gchar *cmd;
GError *error = NULL; GError *error = NULL;
MMTelitBNDParseConfig config = {
.modem_is_2g = modem_is_2g,
.modem_is_3g = modem_is_3g,
.modem_is_4g = modem_is_4g,
.modem_alternate_3g_bands = modem_alternate_3g_bands,
.modem_ext_4g_bands = modem_ext_4g_bands
};
cmd = mm_telit_build_bnd_request (bands_array, cmd = mm_telit_build_bnd_request (bands_array, &config, &error);
modem_is_2g, modem_is_3g, modem_is_4g,
modem_alternate_3g_bands,
modem_ext_4g_bands,
&error);
g_assert_no_error (error); g_assert_no_error (error);
g_assert_cmpstr (cmd, ==, expected_cmd); g_assert_cmpstr (cmd, ==, expected_cmd);
g_free (cmd); g_free (cmd);
@@ -386,11 +372,14 @@ test_common_bnd_cmd_error (gboolean modem_is_2g,
{ {
gchar *cmd; gchar *cmd;
GError *error = NULL; GError *error = NULL;
MMTelitBNDParseConfig config = {
cmd = mm_telit_build_bnd_request (bands_array, .modem_is_2g = modem_is_2g,
modem_is_2g, modem_is_3g, modem_is_4g, .modem_is_3g = modem_is_3g,
FALSE, FALSE, .modem_is_4g = modem_is_4g,
&error); .modem_alternate_3g_bands = FALSE,
.modem_ext_4g_bands = FALSE,
};
cmd = mm_telit_build_bnd_request (bands_array, &config, &error);
g_assert_error (error, MM_CORE_ERROR, (gint)expected_error); g_assert_error (error, MM_CORE_ERROR, (gint)expected_error);
g_assert (!cmd); g_assert (!cmd);
} }