ublox: new +URAT=X command builder

This commit is contained in:
Aleksander Morgado
2016-08-09 09:56:56 +02:00
parent 5d2e89e712
commit 9d78f05cbd
3 changed files with 85 additions and 12 deletions

View File

@@ -552,3 +552,49 @@ out:
*out_preferred = preferred;
return TRUE;
}
/*****************************************************************************/
/* URAT=X command builder */
static gboolean
append_rat_value (GString *str,
MMModemMode mode,
GError **error)
{
guint i;
for (i = 0; i < G_N_ELEMENTS (ublox_combinations); i++) {
if (ublox_combinations[i] == mode) {
g_string_append_printf (str, "%u", i);
return TRUE;
}
}
g_set_error (error, MM_CORE_ERROR, MM_CORE_ERROR_FAILED,
"No AcT value matches requested mode");
return FALSE;
}
gchar *
mm_ublox_build_urat_set_command (MMModemMode allowed,
MMModemMode preferred,
GError **error)
{
GString *command;
command = g_string_new ("+URAT=");
if (!append_rat_value (command, allowed, error)) {
g_string_free (command, TRUE);
return NULL;
}
if (preferred != MM_MODEM_MODE_NONE) {
g_string_append (command, ",");
if (!append_rat_value (command, preferred, error)) {
g_string_free (command, TRUE);
return NULL;
}
}
return g_string_free (command, FALSE);
}

View File

@@ -86,5 +86,11 @@ gboolean mm_ublox_parse_urat_read_response (const gchar *response,
MMModemMode *out_preferred,
GError **error);
/*****************************************************************************/
/* URAT=X command builder */
gchar *mm_ublox_build_urat_set_command (MMModemMode allowed,
MMModemMode preferred,
GError **error);
#endif /* MM_MODEM_HELPERS_UBLOX_H */

View File

@@ -354,32 +354,37 @@ test_mode_filtering_sara_u280 (void)
}
/*****************************************************************************/
/* URAT? response parser */
/* URAT? response parser and URAT=X command builder */
typedef struct {
const gchar *str;
const gchar *command;
const gchar *response;
MMModemMode allowed;
MMModemMode preferred;
} UratReadResponseTest;
} UratTest;
static const UratReadResponseTest urat_read_response_tests[] = {
static const UratTest urat_tests[] = {
{
.str = "+URAT: 1,2\r\n",
.command = "+URAT=1,2",
.response = "+URAT: 1,2\r\n",
.allowed = (MM_MODEM_MODE_2G | MM_MODEM_MODE_3G),
.preferred = MM_MODEM_MODE_3G,
},
{
.str = "+URAT: 4,0\r\n",
.command = "+URAT=4,0",
.response = "+URAT: 4,0\r\n",
.allowed = (MM_MODEM_MODE_2G | MM_MODEM_MODE_3G | MM_MODEM_MODE_4G),
.preferred = MM_MODEM_MODE_2G,
},
{
.str = "+URAT: 0\r\n",
.command = "+URAT=0",
.response = "+URAT: 0\r\n",
.allowed = MM_MODEM_MODE_2G,
.preferred = MM_MODEM_MODE_NONE,
},
{
.str = "+URAT: 6\r\n",
.command = "+URAT=6",
.response = "+URAT: 6\r\n",
.allowed = (MM_MODEM_MODE_3G | MM_MODEM_MODE_4G),
.preferred = MM_MODEM_MODE_NONE,
},
@@ -390,18 +395,33 @@ test_urat_read_response (void)
{
guint i;
for (i = 0; i < G_N_ELEMENTS (urat_read_response_tests); i++) {
for (i = 0; i < G_N_ELEMENTS (urat_tests); i++) {
MMModemMode allowed = MM_MODEM_MODE_NONE;
MMModemMode preferred = MM_MODEM_MODE_NONE;
GError *error = NULL;
gboolean success;
success = mm_ublox_parse_urat_read_response (urat_read_response_tests[i].str,
success = mm_ublox_parse_urat_read_response (urat_tests[i].response,
&allowed, &preferred, &error);
g_assert_no_error (error);
g_assert (success);
g_assert_cmpuint (urat_read_response_tests[i].allowed, ==, allowed);
g_assert_cmpuint (urat_read_response_tests[i].preferred, ==, preferred);
g_assert_cmpuint (urat_tests[i].allowed, ==, allowed);
g_assert_cmpuint (urat_tests[i].preferred, ==, preferred);
}
}
static void
test_urat_write_command (void)
{
guint i;
for (i = 0; i < G_N_ELEMENTS (urat_tests); i++) {
gchar *command;
GError *error = NULL;
command = mm_ublox_build_urat_set_command (urat_tests[i].allowed, urat_tests[i].preferred, &error);
g_assert_no_error (error);
g_assert_cmpstr (command, ==, urat_tests[i].command);
}
}
@@ -446,6 +466,7 @@ int main (int argc, char **argv)
g_test_add_func ("/MM/ublox/urat/test/response/lisa-u200", test_mode_filtering_lisa_u200);
g_test_add_func ("/MM/ublox/urat/test/response/sara-u280", test_mode_filtering_sara_u280);
g_test_add_func ("/MM/ublox/urat/read/response", test_urat_read_response);
g_test_add_func ("/MM/ublox/urat/write/command", test_urat_write_command);
return g_test_run ();
}