aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@lanedo.com>2011-12-30 15:39:19 +0100
committerAleksander Morgado <aleksander@lanedo.com>2012-03-15 14:14:41 +0100
commit148025c3818b4f4f64361314056470e49a9ff2f6 (patch)
treefa4f936a9f4ab5dd36cdb3a096704d47e4c64640
parent1be7c274535a17ca05b8eeb7c1b0cc58029dc5dd (diff)
cli: new `--set-allowed-modes' and `--set-preferred-modes' actions
-rw-r--r--cli/mmcli-modem.c128
1 files changed, 126 insertions, 2 deletions
diff --git a/cli/mmcli-modem.c b/cli/mmcli-modem.c
index 9b05a807..7b5534cf 100644
--- a/cli/mmcli-modem.c
+++ b/cli/mmcli-modem.c
@@ -53,6 +53,8 @@ static gchar *factory_reset_str;
static gboolean list_bearers_flag;
static gchar *create_bearer_str;
static gchar *delete_bearer_str;
+static gchar *set_allowed_modes_str;
+static gchar *set_preferred_mode_str;
static GOptionEntry entries[] = {
{ "monitor-state", 'w', 0, G_OPTION_ARG_NONE, &monitor_state_flag,
@@ -87,6 +89,14 @@ static GOptionEntry entries[] = {
"Delete a data bearer from a given modem",
"[PATH]"
},
+ { "set-allowed-modes", 0, 0, G_OPTION_ARG_STRING, &set_allowed_modes_str,
+ "Set allowed modes in a given modem.",
+ "[MODE1|MODE2...]"
+ },
+ { "set-preferred-mode", 0, 0, G_OPTION_ARG_STRING, &set_preferred_mode_str,
+ "Set preferred mode in a given modem (Must give allowed modes with --set-allowed-modes)",
+ "[MODE]"
+ },
{ NULL }
};
@@ -122,7 +132,9 @@ mmcli_modem_options_enabled (void)
list_bearers_flag +
!!create_bearer_str +
!!delete_bearer_str +
- !!factory_reset_str);
+ !!factory_reset_str +
+ !!set_allowed_modes_str +
+ !!set_preferred_mode_str);
if (n_actions == 0 && mmcli_get_common_modem_string ()) {
/* default to info */
@@ -130,6 +142,14 @@ mmcli_modem_options_enabled (void)
n_actions++;
}
+ if (set_preferred_mode_str) {
+ if (!set_allowed_modes_str) {
+ g_printerr ("error: setting preferred mode requires list of allowed modes\n");
+ exit (EXIT_FAILURE);
+ }
+ n_actions--;
+ }
+
if (n_actions > 1) {
g_printerr ("error: too many modem actions requested\n");
exit (EXIT_FAILURE);
@@ -228,6 +248,9 @@ print_modem_info (void)
gchar *unlock;
gchar *capabilities_string;
gchar *access_technologies_string;
+ gchar *supported_modes_string;
+ gchar *allowed_modes_string;
+ gchar *preferred_mode_string;
gchar *supported_bands_string;
gchar *allowed_bands_string;
MMModemBand *bands = NULL;
@@ -271,9 +294,15 @@ print_modem_info (void)
&n_bands);
supported_bands_string = mm_modem_get_bands_string (bands, n_bands);
g_free (bands);
+ allowed_modes_string = mm_modem_get_modes_string (
+ mm_modem_get_allowed_modes (ctx->modem));
+ preferred_mode_string = mm_modem_get_modes_string (
+ mm_modem_get_preferred_mode (ctx->modem));
+ supported_modes_string = mm_modem_get_modes_string (
+ mm_modem_get_supported_modes (ctx->modem));
/* Rework possible multiline strings */
- prefixed_revision = prefix_newlines (" | ",
+ prefixed_revision = prefix_newlines (" | ",
mm_modem_get_revision (ctx->modem));
/* Global IDs */
@@ -313,6 +342,15 @@ print_modem_info (void)
VALIDATE_UNKNOWN (mmcli_get_state_string (mm_modem_get_state (ctx->modem))),
VALIDATE_UNKNOWN (access_technologies_string));
+ /* Modes */
+ g_print (" -------------------------\n"
+ " Modes | supported: '%s'\n"
+ " | allowed: '%s'\n"
+ " | preferred: '%s'\n",
+ VALIDATE_UNKNOWN (supported_modes_string),
+ VALIDATE_UNKNOWN (allowed_modes_string),
+ VALIDATE_UNKNOWN (preferred_mode_string));
+
/* Band related stuff */
g_print (" -------------------------\n"
" Bands | supported: '%s'\n"
@@ -345,6 +383,9 @@ print_modem_info (void)
g_free (access_technologies_string);
g_free (capabilities_string);
g_free (prefixed_revision);
+ g_free (allowed_modes_string);
+ g_free (preferred_mode_string);
+ g_free (supported_modes_string);
g_free (unlock);
}
@@ -555,6 +596,57 @@ delete_bearer_ready (MMModem *modem,
}
static void
+set_allowed_modes_process_reply (gboolean result,
+ const GError *error)
+{
+ if (!result) {
+ g_printerr ("error: couldn't set allowed modes: '%s'\n",
+ error ? error->message : "unknown error");
+ exit (EXIT_FAILURE);
+ }
+
+ g_print ("successfully set allowed modes in the modem\n");
+}
+
+static void
+set_allowed_modes_ready (MMModem *modem,
+ GAsyncResult *result,
+ gpointer nothing)
+{
+ gboolean operation_result;
+ GError *error = NULL;
+
+ operation_result = mm_modem_set_allowed_modes_finish (modem, result, &error);
+ set_allowed_modes_process_reply (operation_result, error);
+
+ mmcli_async_operation_done ();
+}
+
+static void
+parse_modes (MMModemMode *allowed,
+ MMModemMode *preferred)
+{
+ GError *error = NULL;
+
+ *allowed = mm_common_get_modes_from_string (set_allowed_modes_str, &error);
+ if (error) {
+ g_printerr ("error: couldn't parse list of allowed modes: '%s'\n",
+ error->message);
+ exit (EXIT_FAILURE);
+ }
+
+ *preferred = (set_preferred_mode_str ?
+ mm_common_get_modes_from_string (set_preferred_mode_str, &error) :
+ MM_MODEM_MODE_NONE);
+ if (error) {
+ g_printerr ("error: couldn't parse preferred mode: '%s'\n",
+ error->message);
+ exit (EXIT_FAILURE);
+ }
+}
+
+
+static void
state_changed (MMModem *modem,
MMModemState old_state,
MMModemState new_state,
@@ -684,6 +776,21 @@ get_modem_ready (GObject *source,
return;
}
+ /* Request to set allowed modes in a given modem? */
+ if (set_allowed_modes_str) {
+ MMModemMode allowed;
+ MMModemMode preferred;
+
+ parse_modes (&allowed, &preferred);
+ mm_modem_set_allowed_modes (ctx->modem,
+ allowed,
+ preferred,
+ ctx->cancellable,
+ (GAsyncReadyCallback)set_allowed_modes_ready,
+ NULL);
+ return;
+ }
+
g_warn_if_reached ();
}
@@ -816,5 +923,22 @@ mmcli_modem_run_synchronous (GDBusConnection *connection)
return;
}
+ /* Request to set allowed modes in a given modem? */
+ if (set_allowed_modes_str) {
+ MMModemMode allowed;
+ MMModemMode preferred;
+ gboolean result;
+
+ parse_modes (&allowed, &preferred);
+ result = mm_modem_set_allowed_modes_sync (ctx->modem,
+ allowed,
+ preferred,
+ NULL,
+ &error);
+
+ set_allowed_modes_process_reply (result, error);
+ return;
+ }
+
g_warn_if_reached ();
}