1# Copyright 2017 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"""An interface to access the local input facade.""" 6 7 8import json 9import logging 10 11from autotest_lib.client.bin.input import input_event_recorder 12from autotest_lib.client.common_lib import error 13 14 15class InputFacadeNativeError(Exception): 16 """Error in InputFacadeNative.""" 17 pass 18 19 20class InputFacadeNative(object): 21 """Facade to access the record input events.""" 22 23 def __init__(self): 24 """Initializes the input facade.""" 25 self.recorder = None 26 27 28 def initialize_input_recorder(self, device_name): 29 """Initialize an input event recorder object. 30 31 @param device_name: the name of the input device to record. 32 33 """ 34 self.recorder = input_event_recorder.InputEventRecorder(device_name) 35 logging.info('input event device: %s (%s)', 36 self.recorder.device_name, self.recorder.device_node) 37 38 39 def clear_input_events(self): 40 """Clear the event list.""" 41 if self.recorder is None: 42 raise error.TestError('input facade: input device name not given') 43 self.recorder.clear_events() 44 45 46 def start_input_recorder(self): 47 """Start the recording thread.""" 48 if self.recorder is None: 49 raise error.TestError('input facade: input device name not given') 50 self.recorder.start() 51 52 53 def stop_input_recorder(self): 54 """Stop the recording thread.""" 55 if self.recorder is None: 56 raise error.TestError('input facade: input device name not given') 57 self.recorder.stop() 58 59 60 def get_input_events(self): 61 """Get the bluetooth device input events. 62 63 @returns: the recorded input events. 64 65 """ 66 if self.recorder is None: 67 raise error.TestError('input facade: input device name not given') 68 events = self.recorder.get_events() 69 return json.dumps(events) 70