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.
This commit is contained in:
Aleksander Morgado
2024-05-29 08:02:40 +00:00
parent e215f644d6
commit c5b9effdc7
4 changed files with 24 additions and 15 deletions
+1 -1
View File
@@ -908,7 +908,7 @@ shutdown_low_power_ready (MMIfaceModem *modem,
{
g_autoptr(GError) error = NULL;
if (!mm_iface_modem_set_power_state_finish (modem, res, &error))
if (!mm_iface_modem_set_power_state_finish (modem, res, NULL, &error))
mm_obj_info (ctx->self, "changing to low power state failed: %s", error->message);
if (ctx->remove)
+13 -5
View File
@@ -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;
+8 -7
View File
@@ -499,13 +499,14 @@ gboolean mm_iface_modem_sync_finish (MMIfaceModem *self,
#endif
/* Allow setting power state */
void mm_iface_modem_set_power_state (MMIfaceModem *self,
MMModemPowerState power_state,
GAsyncReadyCallback callback,
gpointer user_data);
gboolean mm_iface_modem_set_power_state_finish (MMIfaceModem *self,
GAsyncResult *res,
GError **error);
void mm_iface_modem_set_power_state (MMIfaceModem *self,
MMModemPowerState power_state,
GAsyncReadyCallback callback,
gpointer user_data);
gboolean mm_iface_modem_set_power_state_finish (MMIfaceModem *self,
GAsyncResult *res,
MMModemPowerState *previous_power_state,
GError **error);
/* Request lock info update.
* It will not only return the lock status, but also set the property values
+2 -2
View File
@@ -196,7 +196,7 @@ after_attach_apn_modem_power_up_ready (MMIfaceModem *self,
ctx = g_task_get_task_data (task);
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 to power up modem after attach APN settings update: %s", error->message);
if (!ctx->saved_error)
ctx->saved_error = g_steal_pointer (&error);
@@ -260,7 +260,7 @@ before_attach_apn_modem_power_down_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 to power down modem before attach APN settings update: %s", error->message);
g_task_return_error (task, error);
g_object_unref (task);