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')
 |