64 lines
2.2 KiB
Python
64 lines
2.2 KiB
Python
# Copyright 2015 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.
|
|
|
|
import glob
|
|
import logging
|
|
import pprint
|
|
from threading import Timer
|
|
|
|
from autotest_lib.client.bin.input.input_device import *
|
|
|
|
|
|
class firmwareCheckKeys(object):
|
|
"""An abstraction to deal with checking firmware keys."""
|
|
# pylint: disable=undefined-variable
|
|
version = 1
|
|
actual_output = []
|
|
device = None
|
|
ev = None
|
|
|
|
def __init__(self):
|
|
for evdev in glob.glob("/dev/input/event*"):
|
|
device = InputDevice(evdev)
|
|
if device.is_keyboard():
|
|
print 'keyboard device %s' % evdev
|
|
self.device = device
|
|
|
|
def _keyboard_input(self):
|
|
"""Read key presses."""
|
|
index = 0
|
|
while True:
|
|
self.ev.read(self.device.f)
|
|
if self.ev.code != KEY_RESERVED:
|
|
print "EventCode is %d value is %d" % (self.ev.code,
|
|
self.ev.value)
|
|
if self.ev.type == 0 or self.ev.type == 1:
|
|
self.actual_output.append(self.ev.code)
|
|
index = index + 1
|
|
|
|
def check_keys(self, expected_sequence):
|
|
"""Wait for key press for 10 seconds.
|
|
|
|
@return number of input keys captured, -1 for error.
|
|
"""
|
|
if not self.device:
|
|
logging.error("Could not find a keyboard device")
|
|
return -1
|
|
|
|
self.ev = InputEvent()
|
|
Timer(0, self._keyboard_input).start()
|
|
|
|
time.sleep(10)
|
|
|
|
# Keypresses will have a tendency to repeat as there is delay between
|
|
# the down and up events. We're not interested in precisely how many
|
|
# repeats of the key there is, just what is the sequence of keys,
|
|
# so, we will make the list unique.
|
|
uniq_actual_output = sorted(list(set(self.actual_output)))
|
|
if uniq_actual_output != expected_sequence:
|
|
print 'Keys mismatched %s' % pprint.pformat(uniq_actual_output)
|
|
return -1
|
|
print 'Key match expected: %s' % pprint.pformat(uniq_actual_output)
|
|
return len(uniq_actual_output)
|