ublox: new +URAT=X command builder
This commit is contained in:
@@ -552,3 +552,49 @@ out:
|
|||||||
*out_preferred = preferred;
|
*out_preferred = preferred;
|
||||||
return TRUE;
|
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);
|
||||||
|
}
|
||||||
|
@@ -86,5 +86,11 @@ gboolean mm_ublox_parse_urat_read_response (const gchar *response,
|
|||||||
MMModemMode *out_preferred,
|
MMModemMode *out_preferred,
|
||||||
GError **error);
|
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 */
|
#endif /* MM_MODEM_HELPERS_UBLOX_H */
|
||||||
|
@@ -354,32 +354,37 @@ test_mode_filtering_sara_u280 (void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/* URAT? response parser */
|
/* URAT? response parser and URAT=X command builder */
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
const gchar *str;
|
const gchar *command;
|
||||||
|
const gchar *response;
|
||||||
MMModemMode allowed;
|
MMModemMode allowed;
|
||||||
MMModemMode preferred;
|
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),
|
.allowed = (MM_MODEM_MODE_2G | MM_MODEM_MODE_3G),
|
||||||
.preferred = 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),
|
.allowed = (MM_MODEM_MODE_2G | MM_MODEM_MODE_3G | MM_MODEM_MODE_4G),
|
||||||
.preferred = MM_MODEM_MODE_2G,
|
.preferred = MM_MODEM_MODE_2G,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.str = "+URAT: 0\r\n",
|
.command = "+URAT=0",
|
||||||
|
.response = "+URAT: 0\r\n",
|
||||||
.allowed = MM_MODEM_MODE_2G,
|
.allowed = MM_MODEM_MODE_2G,
|
||||||
.preferred = MM_MODEM_MODE_NONE,
|
.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),
|
.allowed = (MM_MODEM_MODE_3G | MM_MODEM_MODE_4G),
|
||||||
.preferred = MM_MODEM_MODE_NONE,
|
.preferred = MM_MODEM_MODE_NONE,
|
||||||
},
|
},
|
||||||
@@ -390,18 +395,33 @@ test_urat_read_response (void)
|
|||||||
{
|
{
|
||||||
guint i;
|
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 allowed = MM_MODEM_MODE_NONE;
|
||||||
MMModemMode preferred = MM_MODEM_MODE_NONE;
|
MMModemMode preferred = MM_MODEM_MODE_NONE;
|
||||||
GError *error = NULL;
|
GError *error = NULL;
|
||||||
gboolean success;
|
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);
|
&allowed, &preferred, &error);
|
||||||
g_assert_no_error (error);
|
g_assert_no_error (error);
|
||||||
g_assert (success);
|
g_assert (success);
|
||||||
g_assert_cmpuint (urat_read_response_tests[i].allowed, ==, allowed);
|
g_assert_cmpuint (urat_tests[i].allowed, ==, allowed);
|
||||||
g_assert_cmpuint (urat_read_response_tests[i].preferred, ==, preferred);
|
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/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/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/read/response", test_urat_read_response);
|
||||||
|
g_test_add_func ("/MM/ublox/urat/write/command", test_urat_write_command);
|
||||||
|
|
||||||
return g_test_run ();
|
return g_test_run ();
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user