xref: /aosp_15_r20/external/autotest/server/cros/power/utils.py (revision 9c5db1993ded3edbeafc8092d69fe5de2ee02df7)
1*9c5db199SXin Li# Copyright 2019 The Chromium OS Authors. All rights reserved.
2*9c5db199SXin Li# Use of this source code is governed by a BSD-style license that can be
3*9c5db199SXin Li# found in the LICENSE file.
4*9c5db199SXin Li
5*9c5db199SXin Li"""Power utils for server tests."""
6*9c5db199SXin Li
7*9c5db199SXin Lifrom autotest_lib.server import autotest
8*9c5db199SXin Lifrom autotest_lib.server.cros.power import servo_charger
9*9c5db199SXin Li
10*9c5db199SXin Lidef put_host_battery_in_range(host, min_level, max_level, timeout):
11*9c5db199SXin Li    """
12*9c5db199SXin Li    Charges or drains the host's battery to the specified range within the
13*9c5db199SXin Li    timeout. This uses a servo v4 and either the power_BatteryCharge or the
14*9c5db199SXin Li    power_BatteryDrain client test.
15*9c5db199SXin Li
16*9c5db199SXin Li    @param host: DUT to use
17*9c5db199SXin Li    @param min_level: battery percentage
18*9c5db199SXin Li    @param max_level: battery percentage
19*9c5db199SXin Li    @param timeout: in seconds
20*9c5db199SXin Li
21*9c5db199SXin Li    @throws: A TestFail error if getting the current battery level, setting the
22*9c5db199SXin Li             servo's charge state, or running either of the client tests fails.
23*9c5db199SXin Li    """
24*9c5db199SXin Li    current_level = host.get_battery_display_percentage()
25*9c5db199SXin Li    if current_level >= min_level and current_level <= max_level:
26*9c5db199SXin Li        return
27*9c5db199SXin Li
28*9c5db199SXin Li    autotest_client = autotest.Autotest(host)
29*9c5db199SXin Li    charge_manager = servo_charger.ServoV4ChargeManager(host, host.servo)
30*9c5db199SXin Li    if current_level < min_level:
31*9c5db199SXin Li        charge_manager.start_charging()
32*9c5db199SXin Li        autotest_client.run_test('power_BatteryCharge',
33*9c5db199SXin Li                                 max_run_time=timeout,
34*9c5db199SXin Li                                 percent_target_charge=min_level,
35*9c5db199SXin Li                                 use_design_charge_capacity=False)
36*9c5db199SXin Li    if current_level > max_level:
37*9c5db199SXin Li        charge_manager.stop_charging()
38*9c5db199SXin Li        autotest_client.run_test('power_BatteryDrain',
39*9c5db199SXin Li                                 drain_to_percent=max_level,
40*9c5db199SXin Li                                 drain_timeout=timeout)
41