summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@lanedo.com>2012-05-30 13:05:43 +0200
committerAleksander Morgado <aleksander@lanedo.com>2012-07-03 16:08:57 +0200
commit2a28bb9548815705854b0bfb6273e0b83974b667 (patch)
tree7234733885a4d76d4b3dce1177775145d58a62de
parent55c6f8eda1b760f5bfdd8f120ccb26deb675f8e3 (diff)
cli: new `--dms-get-power-state' action
-rw-r--r--cli/qmicli-dms.c59
1 files changed, 59 insertions, 0 deletions
diff --git a/cli/qmicli-dms.c b/cli/qmicli-dms.c
index 8f3616c..3be966a 100644
--- a/cli/qmicli-dms.c
+++ b/cli/qmicli-dms.c
@@ -47,6 +47,7 @@ static gboolean get_manufacturer_flag;
static gboolean get_model_flag;
static gboolean get_revision_flag;
static gboolean get_msisdn_flag;
+static gboolean get_power_state_flag;
static gboolean noop_flag;
static GOptionEntry entries[] = {
@@ -74,6 +75,10 @@ static GOptionEntry entries[] = {
"Get MSISDN",
NULL
},
+ { "dms-get-power-state", 0, 0, G_OPTION_ARG_NONE, &get_power_state_flag,
+ "Get power state",
+ NULL
+ },
{ "dms-noop", 0, 0, G_OPTION_ARG_NONE, &noop_flag,
"Just allocate or release a DMS client. Use with `--client-no-release-cid' and/or `--client-cid'",
NULL
@@ -111,6 +116,7 @@ qmicli_dms_options_enabled (void)
get_model_flag +
get_revision_flag +
get_msisdn_flag +
+ get_power_state_flag +
noop_flag);
if (n_actions > 1) {
@@ -399,6 +405,47 @@ get_msisdn_ready (QmiClientDms *client,
qmi_message_dms_get_msisdn_output_unref (output);
shutdown (TRUE);
}
+
+static void
+get_power_state_ready (QmiClientDms *client,
+ GAsyncResult *res)
+{
+ gchar *power_state_str;
+ QmiMessageDmsGetPowerStateOutputInfo info;
+ QmiMessageDmsGetPowerStateOutput *output;
+ GError *error = NULL;
+
+ output = qmi_client_dms_get_power_state_finish (client, res, &error);
+ if (!output) {
+ g_printerr ("error: operation failed: %s\n", error->message);
+ g_error_free (error);
+ shutdown (FALSE);
+ return;
+ }
+
+ if (!qmi_message_dms_get_power_state_output_get_result (output, &error)) {
+ g_printerr ("error: couldn't get power state: %s\n", error->message);
+ g_error_free (error);
+ qmi_message_dms_get_power_state_output_unref (output);
+ shutdown (FALSE);
+ return;
+ }
+
+ qmi_message_dms_get_power_state_output_get_info (output, &info, NULL);
+ power_state_str = qmi_dms_power_state_build_string_from_mask ((QmiDmsPowerState)info.power_state_flags);
+
+ g_print ("[%s] Device power state retrieved:\n"
+ "\tPower state: '%s'\n"
+ "\tBattery level: '%u %%'\n",
+ qmi_device_get_path_display (ctx->device),
+ power_state_str,
+ (guint)info.battery_level);
+
+ g_free (power_state_str);
+ qmi_message_dms_get_power_state_output_unref (output);
+ shutdown (TRUE);
+}
+
static gboolean
noop_cb (gpointer unused)
{
@@ -490,6 +537,18 @@ qmicli_dms_run (QmiDevice *device,
return;
}
+ /* Request to get power status? */
+ if (get_power_state_flag) {
+ g_debug ("Asynchronously getting power status...");
+ qmi_client_dms_get_power_state (ctx->client,
+ NULL,
+ 10,
+ ctx->cancellable,
+ (GAsyncReadyCallback)get_power_state_ready,
+ NULL);
+ return;
+ }
+
/* Just client allocate/release? */
if (noop_flag) {
g_idle_add (noop_cb, NULL);