91 lines
3.2 KiB
Python
91 lines
3.2 KiB
Python
# Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
|
|
|
|
# DESCRIPTION :
|
|
#
|
|
# This is a hardware test for EC. The test uses ectool to check if the EC can
|
|
# receive message from host and send expected reponse back to host. It also
|
|
# checks basic EC functionality, such as FAN and temperature sensor.
|
|
|
|
|
|
import logging
|
|
import time
|
|
|
|
from autotest_lib.client.bin import test
|
|
from autotest_lib.client.common_lib import error
|
|
from autotest_lib.client.cros import ec as cros_ec
|
|
from autotest_lib.client.cros.power import power_utils
|
|
|
|
|
|
class hardware_EC(test.test):
|
|
"""Class for hardware_EC test."""
|
|
version = 1
|
|
|
|
def run_once(self,
|
|
num_temp_sensor=0,
|
|
temp_sensor_to_test=None,
|
|
test_fan=False,
|
|
fan_rpm_error_margin=200,
|
|
test_battery=None,
|
|
test_lightbar=False,
|
|
fan_delay_secs=3):
|
|
|
|
ec = cros_ec.EC()
|
|
|
|
if not cros_ec.has_ectool() or not ec.hello(ignore_status=True):
|
|
raise error.TestNAError('No support for Google EC')
|
|
|
|
if test_battery is None:
|
|
test_battery = power_utils.has_battery()
|
|
|
|
if test_fan:
|
|
try:
|
|
ec.set_fanspeed(10000)
|
|
time.sleep(fan_delay_secs)
|
|
max_reading = ec.get_fanspeed()
|
|
if max_reading == 0:
|
|
raise error.TestError('Unable to start fan')
|
|
|
|
target_fanspeed = max_reading / 2
|
|
ec.set_fanspeed(target_fanspeed)
|
|
time.sleep(fan_delay_secs)
|
|
current_reading = ec.get_fanspeed()
|
|
|
|
# Sometimes the actual fan speed is close but not equal to
|
|
# the target speed, so we add some error margin here.
|
|
lower_bound = target_fanspeed - fan_rpm_error_margin
|
|
upper_bound = target_fanspeed + fan_rpm_error_margin
|
|
if not (lower_bound <= current_reading <= upper_bound):
|
|
raise error.TestError('Unable to set fan speed')
|
|
finally:
|
|
ec.auto_fan_ctrl()
|
|
|
|
if temp_sensor_to_test is None:
|
|
temp_sensor_to_test = list(range(num_temp_sensor))
|
|
|
|
for idx in temp_sensor_to_test:
|
|
temperature = ec.get_temperature(idx) - 273
|
|
if temperature < 0 or temperature > 100:
|
|
raise error.TestError(
|
|
'Abnormal temperature reading on sensor %d' % idx)
|
|
|
|
if test_battery:
|
|
try:
|
|
logging.info('Battery temperature %d K',
|
|
ec.get_temperature(name='Battery'))
|
|
except cros_ec.ECError as e:
|
|
logging.debug('ECError: %s', e)
|
|
logging.warning('No battery temperature via EC.')
|
|
|
|
try:
|
|
if not ec.get_battery():
|
|
raise error.TestError('Battery communication failed')
|
|
except cros_ec.ECError as e:
|
|
logging.debug('ECError: %s', e)
|
|
logging.warning('No battery info via EC.')
|
|
|
|
if test_lightbar and not ec.get_lightbar():
|
|
raise error.TestError('Lightbar communication failed')
|