Home | History | Annotate | Download | only in utils
      1 # Copyright 2015 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 glob
      6 import logging
      7 import pprint
      8 from threading import Timer
      9 
     10 from autotest_lib.client.bin.input.input_device import *
     11 
     12 class firmwareCheckKeys(object):
     13     version = 1
     14     actual_output = []
     15     device = None
     16     ev = None
     17 
     18     def __init__(self):
     19         for evdev in glob.glob("/dev/input/event*"):
     20             device = InputDevice(evdev)
     21             if device.is_keyboard():
     22                 print 'keyboard device %s' % evdev
     23                 self.device = device
     24 
     25     def _keyboard_input(self):
     26         """Read key presses."""
     27         index = 0
     28         while True:
     29             self.ev.read(self.device.f)
     30             if self.ev.code != KEY_RESERVED:
     31                 print "EventCode is %d value is %d" % (self.ev.code, self.ev.value)
     32                 if self.ev.type == 0 or self.ev.type == 1:
     33                     self.actual_output.append(self.ev.code)
     34                     index = index + 1
     35 
     36     def check_keys(self, expected_sequence):
     37         """Wait for key press for 10 seconds.
     38 
     39         @return number of input keys captured, -1 for error.
     40         """
     41         if not self.device:
     42             logging.error("Could not find a keyboard device")
     43             return -1
     44 
     45         self.ev = InputEvent()
     46         Timer(0, self._keyboard_input).start()
     47 
     48         time.sleep(10)
     49 
     50         # Keypresses will have a tendency to repeat as there is delay between
     51         # the down and up events.  We're not interested in precisely how many
     52         # repeats of the key there is, just what is the sequence of keys,
     53         # so, we will make the list unique.
     54         uniq_actual_output = sorted(list(set(self.actual_output)))
     55         if uniq_actual_output != expected_sequence:
     56             print 'Keys mismatched %s' % pprint.pformat(uniq_actual_output)
     57             return -1
     58         print 'Key match expected: %s' % pprint.pformat(uniq_actual_output)
     59         return len(uniq_actual_output)
     60 
     61