Home | History | Annotate | Download | only in hardware_LightSensor
      1 # Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
      2 # Use of this source code is governed by a BSD-style license that can be
      3 # found in the LICENSE file.
      4 
      5 import logging, os, glob
      6 from autotest_lib.client.bin import test, utils
      7 from autotest_lib.client.common_lib import error
      8 
      9 LIGHT_SENSOR_LOCATION = "/sys/bus/iio/devices/*/"
     10 # Match sensors files from
     11 # src/platform2/power_manager/powerd/system/ambient_light_sensor.cc
     12 LIGHT_SENSOR_FILES = [ "in_illuminance0_input",
     13                        "in_illuminance_input",
     14                        "in_illuminance0_raw",
     15                        "in_illuminance_raw",
     16                        "illuminance0_input",
     17                      ]
     18 
     19 class hardware_LightSensor(test.test):
     20     """
     21     Test the system's Light Sensor device.
     22     Failure to find the device likely indicates the kernel module is not loaded.
     23     Or it could mean the I2C probe for the device failed because of an incorrect
     24     I2C address or bus specification.
     25     The ebuild scripts should properly load the udev rules for light sensor so
     26     we can find its files in LIGHT_SENSOR_LOCATIONS depending
     27     on the kernel version.
     28     """
     29     version = 1
     30 
     31     def _waiver(self):
     32         path = os.path.join(self.job.testdir, "hardware_LightSensor",
     33                             "no_light_sensor_ok")
     34         if os.path.exists(path):
     35             return True
     36         return False
     37 
     38 
     39     def run_once(self):
     40         if self._waiver():
     41             raise error.TestNAError("Light sensor not required for this device")
     42 
     43         found_light_sensor = 0
     44         for location in glob.glob(LIGHT_SENSOR_LOCATION):
     45             for fname in LIGHT_SENSOR_FILES:
     46                 path = location + fname
     47                 if os.path.exists(path):
     48                     found_light_sensor = 1
     49                     break
     50                 else:
     51                     logging.info("Did not find light sensor reading at " + path)
     52 
     53             if found_light_sensor:
     54                 break
     55 
     56         if not found_light_sensor:
     57             raise error.TestFail("No light sensor reading found.")
     58         else:
     59             logging.info("Found light sensor at " + path)
     60 
     61         val = utils.read_one_line(path)
     62         reading = int(val)
     63         if reading < 0:
     64             raise error.TestFail("Invalid light sensor reading (%s)" % val)
     65         logging.debug("light sensor reading is %d", reading)
     66