aboutsummaryrefslogtreecommitdiff
path: root/src/mm-iface-modem.c
diff options
context:
space:
mode:
authorAleksander Morgado <aleksandermj@chromium.org>2024-05-07 10:40:48 +0000
committerAleksander Morgado <aleksandermj@chromium.org>2024-05-29 08:02:40 +0000
commitc5b9effdc7b8d7dd505c223e742a4e1f25c3fde3 (patch)
treeaf9f4abc2c1f6830dbffdf623a385aa492e67b79 /src/mm-iface-modem.c
parente215f644d6daa0096ac9243704a16e292d998f2a (diff)
iface-modem: allow reporting the previous power state after an update
Let the caller of mm_iface_modem_set_power_state() know which was the power state in the device before the actual update happened. This is useful in cases where we want to temporarily switch to a given power state (e.g. low) before returning to the original power state.
Diffstat (limited to 'src/mm-iface-modem.c')
-rw-r--r--src/mm-iface-modem.c18
1 files changed, 13 insertions, 5 deletions
diff --git a/src/mm-iface-modem.c b/src/mm-iface-modem.c
index 4b2a3553..8d4f5290 100644
--- a/src/mm-iface-modem.c
+++ b/src/mm-iface-modem.c
@@ -2418,7 +2418,7 @@ set_power_state_ready (MMIfaceModem *self,
{
GError *error = NULL;
- if (!mm_iface_modem_set_power_state_finish (self, res, &error)) {
+ if (!mm_iface_modem_set_power_state_finish (self, res, NULL, &error)) {
mm_obj_warn (self, "failed setting power state '%s': %s", mm_modem_power_state_get_string (ctx->power_state), error->message);
if (ctx->disable_after_update) {
ctx->saved_error = error;
@@ -4152,10 +4152,17 @@ set_power_state_context_free (SetPowerStateContext *ctx)
}
gboolean
-mm_iface_modem_set_power_state_finish (MMIfaceModem *self,
- GAsyncResult *res,
- GError **error)
+mm_iface_modem_set_power_state_finish (MMIfaceModem *self,
+ GAsyncResult *res,
+ MMModemPowerState *previous_power_state,
+ GError **error)
{
+ SetPowerStateContext *ctx;
+
+ ctx = g_task_get_task_data (G_TASK (res));
+ if (previous_power_state)
+ *previous_power_state = ctx->previous_real_power_state;
+
return g_task_propagate_boolean (G_TASK (res), error);
}
@@ -4440,6 +4447,7 @@ mm_iface_modem_set_power_state (MMIfaceModem *self,
ctx = g_slice_new0 (SetPowerStateContext);
ctx->step = SET_POWER_STATE_STEP_FIRST;
ctx->requested_power_state = power_state;
+ ctx->previous_real_power_state = MM_MODEM_POWER_STATE_UNKNOWN;
task = g_task_new (self, NULL, callback, user_data);
g_task_set_task_data (task, ctx, (GDestroyNotify)set_power_state_context_free);
@@ -4562,7 +4570,7 @@ enabling_set_power_state_ready (MMIfaceModem *self,
EnablingContext *ctx;
GError *error = NULL;
- if (!mm_iface_modem_set_power_state_finish (self, res, &error)) {
+ if (!mm_iface_modem_set_power_state_finish (self, res, NULL, &error)) {
g_task_return_error (task, error);
g_object_unref (task);
return;