blob: 16930fa72c26fffd803e01f35b7b63377f14a3a6 [file] [log] [blame]
// Copyright 2023 The ChromiumOS Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package commands
import (
"go.chromium.org/chromiumos/test/provision/v2/cros-provision/service"
"context"
"fmt"
"log"
"go.chromium.org/chromiumos/config/go/test/api"
)
type EnableChargeLimitCommand struct {
ctx context.Context
cs *service.CrOSService
}
func NewEnableChargeLimitCommand(ctx context.Context, cs *service.CrOSService) *EnableChargeLimitCommand {
return &EnableChargeLimitCommand{
ctx: ctx,
cs: cs,
}
}
func (c *EnableChargeLimitCommand) Execute(log *log.Logger) error {
log.Printf("Start EnableChargeLimitCommand Execute")
// If this is run on a DUT without a battery (or even just a backup battery
// for Chromebases), this will effectively do nothing.
if _, err := c.cs.Connection.RunCmd(c.ctx, "echo", []string{"\"1\"", ">", "/var/lib/power_manager/charge_limit_enabled"}); err != nil {
return fmt.Errorf("failed to create charge_limit_enabled pref, %s", err)
}
if _, err := c.cs.Connection.RunCmd(c.ctx, "echo", []string{"\"3\"", ">", "/var/lib/power_manager/adaptive_charging_hold_delta_percent"}); err != nil {
return fmt.Errorf("failed to create adaptive_charging_hold_delta_percent pref, %s", err)
}
if _, err := c.cs.Connection.RunCmd(c.ctx, "stop", []string{"powerd"}); err != nil {
log.Printf("failed to stop powerd, %s", err)
}
if _, err := c.cs.Connection.RunCmd(c.ctx, "start", []string{"powerd"}); err != nil {
return fmt.Errorf("failed to start powerd, %s", err)
}
log.Printf("EnableChargeLimitCommand Success")
return nil
}
func (c *EnableChargeLimitCommand) Revert() error {
log.Printf("Start EnableChargeLimitCommand Revert")
if _, err := c.cs.Connection.RunCmd(c.ctx, "rm", []string{"/var/lib/power_manager/charge_limit_enabled"}); err != nil {
return fmt.Errorf("failed to remove charge_limit_enabled pref, %s", err)
}
if _, err := c.cs.Connection.RunCmd(c.ctx, "rm", []string{"/var/lib/power_manager/adaptive_charging_hold_delta_percent"}); err != nil {
return fmt.Errorf("failed to remove adaptive_charging_hold_delta_percent pref, %s", err)
}
if _, err := c.cs.Connection.RunCmd(c.ctx, "stop", []string{"powerd"}); err != nil {
log.Printf("failed to stop powerd, %s", err)
}
if _, err := c.cs.Connection.RunCmd(c.ctx, "start", []string{"powerd"}); err != nil {
return fmt.Errorf("failed to start powerd, %s", err)
}
log.Printf("EnableChargeLimitCommand Revert Success")
return nil
}
func (c *EnableChargeLimitCommand) GetErrorMessage() string {
return "failed to get enable Charge Limit"
}
func (c *EnableChargeLimitCommand) GetStatus() api.InstallResponse_Status {
return api.InstallResponse_STATUS_PROVISIONING_FAILED
}