You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
128 lines
4.2 KiB
128 lines
4.2 KiB
# Copyright 2017 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.
|
|
|
|
"""An interface to access the local input facade."""
|
|
|
|
|
|
import json
|
|
import logging
|
|
import threading
|
|
|
|
from autotest_lib.client.bin.input import input_event_recorder
|
|
from autotest_lib.client.cros.input_playback import input_playback
|
|
from autotest_lib.client.common_lib import error
|
|
from autotest_lib.client.cros.graphics import graphics_utils
|
|
|
|
|
|
class InputFacadeNativeError(Exception):
|
|
"""Error in InputFacadeNative."""
|
|
pass
|
|
|
|
|
|
class InputFacadeNative(object):
|
|
"""Facade to access the record input events."""
|
|
|
|
def __init__(self):
|
|
"""Initializes the input facade."""
|
|
self.recorders_lock = threading.Lock()
|
|
self.recorders = dict()
|
|
|
|
def initialize_input_playback(self, input_type='keyboard', property_file=None):
|
|
"""Initialize for input events simulation.
|
|
|
|
@param input_type: the name of the input device.
|
|
@param property_file: Property file of device to be emulated.
|
|
"""
|
|
self._player = input_playback.InputPlayback()
|
|
self._player.emulate(input_type=input_type, property_file=property_file)
|
|
self._player.find_connected_inputs()
|
|
|
|
def initialize_input_recorder(self, device_name, uniq):
|
|
"""Initialize an input event recorder object.
|
|
|
|
@param device_name: the name of the input device to record.
|
|
@param uniq: Unique address of input device (None if not used)
|
|
|
|
"""
|
|
with self.recorders_lock:
|
|
self.recorders[device_name] = \
|
|
input_event_recorder.InputEventRecorder(device_name, uniq)
|
|
logging.info('input event device: %s [uniq=%s] (%s)',
|
|
self.recorders[device_name].device_name,
|
|
self.recorders[device_name].uniq,
|
|
self.recorders[device_name].device_node)
|
|
|
|
|
|
def clear_input_events(self, device_name):
|
|
"""Clear the event list.
|
|
|
|
@param device_name: the name of the input device to record.
|
|
|
|
"""
|
|
with self.recorders_lock:
|
|
if self.recorders[device_name] is None:
|
|
raise error.TestError(
|
|
'input facade: input device name not given')
|
|
self.recorders[device_name].clear_events()
|
|
|
|
|
|
def start_input_recorder(self, device_name):
|
|
"""Start the recording thread.
|
|
|
|
@param device_name: the name of the input device to record.
|
|
|
|
"""
|
|
with self.recorders_lock:
|
|
if self.recorders[device_name] is None:
|
|
raise error.TestError(
|
|
'input facade: input device name not given')
|
|
self.recorders[device_name].start()
|
|
|
|
|
|
def stop_input_recorder(self, device_name):
|
|
"""Stop the recording thread.
|
|
|
|
@param device_name: the name of the input device to record.
|
|
|
|
"""
|
|
with self.recorders_lock:
|
|
if self.recorders[device_name] is None:
|
|
raise error.TestError(
|
|
'input facade: input device name not given')
|
|
self.recorders[device_name].stop()
|
|
|
|
|
|
def get_input_events(self, device_name):
|
|
"""Get the bluetooth device input events.
|
|
|
|
@param device_name: the name of the input device to record.
|
|
|
|
@returns: the recorded input events.
|
|
|
|
"""
|
|
with self.recorders_lock:
|
|
if self.recorders[device_name] is None:
|
|
raise error.TestError(
|
|
'input facade: input device name not given')
|
|
events = self.recorders[device_name].get_events()
|
|
return json.dumps(events)
|
|
|
|
|
|
def press_keys(self, key_list):
|
|
""" Simulating key press
|
|
|
|
@param key_list: A list of key strings, e.g. ['LEFTCTRL', 'F4']
|
|
"""
|
|
graphics_utils.press_keys(key_list)
|
|
|
|
|
|
def blocking_playback_of_default_file(self, input_type, filename):
|
|
"""Simulate events
|
|
|
|
@param input_type: input device name
|
|
@param filename: input events
|
|
"""
|
|
self._player.blocking_playback_of_default_file(input_type=input_type,
|
|
filename=filename)
|