| # -*- coding: utf-8 -*- |
| # |
| # Copyright (c) 2011 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. |
| |
| ''' This configuration file consists of: |
| |
| Some path definitions and parameters: |
| gesture_files_path: the path of the gesture files |
| trackpad_device_file: the trackpad device file |
| trackpad_drivers: possible trackpad drivers that may be used |
| xorg_log: the xorg log file |
| xcapture_timeout: the timeout if there are no more X events coming in |
| xcapture_max_post_replay_time: the max allowable duration after |
| the completion of device file playback |
| |
| functionality_list: details the specific functionalities to be tested. |
| |
| filename_attr: specifies the components to generate test file names |
| ''' |
| |
| |
| ''' Path definitions ''' |
| # gesture_files_path: specify the directory of the test files |
| gesture_files_path = '/var/tmp/trackpad_test_data/test_files' |
| |
| # The device file is used to record/replay trackpad device events. |
| # The device file is created by evdev. |
| # Priority about which trackpad device file to use: |
| # (1) Using the tradpad device if specified on trackpad_record command line |
| # (2) Probing the trackpad device in the system. |
| # (3) Using the trackpad device specified in the config file here. |
| # (4) Using the trackpad device hardcoded in trackpad_util module. |
| # Note that the path of the device file may vary from model to model. |
| trackpad_device_file = '/dev/input/event6' |
| |
| |
| ''' Parameters to find trackpad driver ''' |
| trackpad_drivers = ('cmt', 'multitouch', 'synaptics') |
| xorg_log = '/var/log/Xorg.0.log' |
| |
| |
| ''' Parameters for Xcapture ''' |
| xcapture_timeout = 1 |
| xcapture_max_post_replay_time = 20 |
| |
| |
| ''' area: a broader category that several functionalities belong to. |
| E.g., area[0]: 1 finger point & click. |
| It consists of a short name and a long name. |
| ''' |
| |
| area = { |
| 0: ('click', '1 finger point & click'), |
| 1: ('select', 'Click & select/drag'), |
| 2: ('right_click', '2 finger alternate/right click'), |
| 3: ('scroll', '2 finger scroll'), |
| 4: ('palm', 'Palm/thumb detection'), |
| 5: ('settings', 'Settings'), |
| 6: ('requirements', 'Requirements across all Chrome OS components'), |
| } |
| |
| |
| ''' functionality_list: the list of test functionalities |
| |
| A functionality is a TrackpadTestFunctionality class and has the |
| following attributes: |
| |
| TrackpadTestFunctionality( |
| |
| name: the name of the functionality, |
| e.g., any_finger_click, any_angle_click |
| |
| subname: specifying variations of a particular functionality |
| e.g., physical means a physical click |
| tap means a tap to click |
| left means the left hand |
| right means the right hand |
| Note: a subname of the functionality no_min_width_click looks as |
| subname=(('physical', 'tap'), |
| ('left', 'right'), |
| ), |
| In this case, the variations of the file name include |
| no_min_width_click.physical.left-... |
| no_min_width_click.physical.right-... |
| no_min_width_click.tap.left-... |
| no_min_width_click.tap.right-... |
| |
| description: the description of the functionality |
| |
| prompt, subprompt: Prompt messages about a functionality and its |
| subname when recording |
| |
| area: the area to which the functionality belongs, |
| e.g., '2 finger scroll' |
| |
| criteria: configurable criteria associated with a functionality. |
| It includes |
| 'max_movement': the max cursor movement allowed |
| examples 1: To specify movement no more than 5 pixels |
| 'max_movement': 5, |
| examples 2: To specify no movement allowed |
| 'max_movement': 0, |
| 'button': the count of button events specified. |
| examples 1: To specify one left button click: |
| 'button': ('Button Left', 1), |
| examples 2: To specify five left button click: |
| 'button': ('Button Left', 5), |
| examples 3: To specify no button events at all: |
| 'button': None, |
| |
| weight: the weight of each functionality, used to calculate how well |
| a driver performs. This attribute is for future use. |
| |
| enabled: True or False to indicate whether this functionality will be |
| used during recording or during the autotest. |
| |
| files: the list of test files. Can be specific file names, or '*', or |
| something like 'two_finger_scroll.down-*' |
| e.g., for the functionality of 'any_finger_click', |
| Some possible specifications are: |
| - '*': matches all files 'any_finger_click*': |
| - 'any_finger_click.tap.*' |
| - 'any_finger_click.physical.left.*' |
| - 'any_finger_click.physical.right.4-alex-john-*.dat' |
| ), |
| ''' |
| |
| # the min distance of single drag gesture |
| select_drag_distance = 20 |
| # the allowable max cursor movement during a click |
| click_movement = 5 |
| # the allowable max cursor movement during palm contact |
| palm_movement = 5 |
| # the ratio between the movement of the two axises |
| # E.g., if your finger is tracking left, y_move / x_move <= move_ratio. |
| move_ratio = 0.15 |
| # max accumulated motion allowed in between button events |
| max_motion_mixed = 10 |
| # max accumulated button wheel events allowed |
| max_button_wheel_mixed = 15 |
| |
| functionality_list = [ |
| |
| ### Area 0: 1 finger point & click |
| TrackpadTestFunctionality( |
| name='any_finger_click', |
| subname=(('physical_click', 'tap'), |
| ('left', 'right'), |
| ('0', '1', '2', '3', '4'), |
| ), |
| description='Any finger, including thumb, can click', |
| prompt='{0} exactly one time using the {2} of your {1} hand.', |
| subprompt={ |
| 'physical_click': ('Make a physical click',), |
| 'tap': ('Make a tap to click',), |
| 'left': ('left',), |
| 'right': ('right',), |
| '0': ('thumb',), |
| '1': ('index finger',), |
| '2': ('middle finger',), |
| '3': ('ring finger',), |
| '4': ('pinky',), |
| }, |
| area=area[0], |
| criteria={ |
| 'total_movement': ('Motion', '<=', click_movement), |
| 'button': ('Button Left', '==', 1), |
| }, |
| weight=1, |
| enabled=True, |
| files=('*', |
| ), |
| ), |
| |
| TrackpadTestFunctionality( |
| name='any_angle_click', |
| subname=(('physical_click', 'tap'), |
| ('left', 'right'), |
| ('0', '45', '90', '135', '180'), |
| ), |
| description='Finger can be oriented at any angle relative to ' |
| 'trackpad', |
| prompt='{0} exactly one time using any finger of your {1} hand ' |
| 'at {2} degree with the horizontal axis.', |
| subprompt={ |
| 'physical_click': ('Make a physical click',), |
| 'tap': ('Make a tap to click',), |
| 'left': ('left',), |
| 'right': ('right',), |
| '0': (0,), |
| '45': (45,), |
| '90': (90,), |
| '135': (135,), |
| '180': (180,), |
| }, |
| area=area[0], |
| criteria={ |
| 'total_movement': ('Motion', '<=', click_movement), |
| 'button': ('Button Left', '==', 1), |
| }, |
| weight=1, |
| enabled=True, |
| files=('*', |
| ), |
| ), |
| |
| TrackpadTestFunctionality( |
| name='any_location_click', |
| subname=(('physical_click', 'tap'), |
| ('left', 'right'), |
| ('up', 'middle', 'bottom'), |
| ), |
| description='Click can occur at any location on trackpad ' |
| '(no hot zones)', |
| prompt='{0} exactly one time using any finger of your {1} hand ' |
| 'in the {2} part of the trackpad.', |
| subprompt={ |
| 'physical_click': ('Make a physical click',), |
| 'tap': ('Make a tap to click',), |
| 'left': ('left',), |
| 'right': ('right',), |
| 'up': ('upper',), |
| 'middle': ('middle',), |
| 'bottom': ('bottom',), |
| }, |
| area=area[0], |
| criteria={ |
| 'total_movement': ('Motion', '<=', click_movement), |
| 'button': ('Button Left', '==', 1), |
| }, |
| weight=1, |
| enabled=True, |
| files=('*', |
| ), |
| ), |
| |
| TrackpadTestFunctionality( |
| name='no_min_width_click', |
| subname=(('physical_click', 'tap'), |
| ('left', 'right'), |
| ), |
| description='Single finger click should not have a defined minimum ' |
| 'width (i.e. click possible with finger tip and/or ' |
| 'fingernail)', |
| prompt='{0} exactly one time using the finger tip (fingernail) of ' |
| 'your {1} hand.', |
| subprompt={ |
| 'physical_click': ('Make a physical click',), |
| 'tap': ('Make a tap to click',), |
| 'left': ('left',), |
| 'right': ('right',), |
| }, |
| area=area[0], |
| criteria={ |
| 'total_movement': ('Motion', '<=', click_movement), |
| 'button': ('Button Left', '==', 1), |
| }, |
| weight=1, |
| enabled=True, |
| files=('*', |
| ), |
| ), |
| |
| TrackpadTestFunctionality( |
| name='no_cursor_wobble', |
| subname=(('physical_click', 'tap'), |
| ('left', 'right'), |
| ('5times',), |
| ), |
| description='No cursor wobble, creep, or jumping (or jump back) ' |
| 'during clicking', |
| prompt='{0} using any finger of your {1} hand {2} times.', |
| subprompt={ |
| 'physical_click': ('Make a physical click',), |
| 'tap': ('Make tap to clicks',), |
| 'left': ('left',), |
| 'right': ('right',), |
| '5times': (5,), |
| }, |
| area=area[0], |
| criteria={ |
| 'total_movement': ('Motion', '==', 0), |
| 'button': ('Button Left', '==', 5), |
| }, |
| weight=1, |
| enabled=True, |
| files=('*', |
| ), |
| ), |
| |
| TrackpadTestFunctionality( |
| name='drum_roll', |
| subname=('l0r1', 'l1r1', 'r0r1', 'r1r2'), |
| description='Drum roll: One finger (including thumb) touches ' |
| 'trackpad followed shortly (<500ms) by a second finger ' |
| 'touching trackpad should not result in cursor jumping', |
| prompt='Use the {0} of your {1} hand touching trackpad followed ' |
| 'shortly (<500ms) by the {2} of your {3} hand touching trackpad', |
| subprompt={ |
| 'l0r1': ('thumb', 'left', 'first finger', 'right'), |
| 'l1r1': ('first finger', 'left', 'first finger', 'right'), |
| 'r0r1': ('thumb', 'right', 'first finger', 'right'), |
| 'r1r2': ('first finger', 'right', 'middle finger', 'right'), |
| }, |
| area=area[0], |
| criteria={ |
| 'total_movement': ('Motion', '==', 0), |
| 'button': None, |
| }, |
| weight=1, |
| enabled=True, |
| files=('*', |
| ), |
| ), |
| |
| TrackpadTestFunctionality( |
| name='2fscroll_1fclick', |
| subname=('up', 'down', 'left', 'right',), |
| description='2f scroll. Stop scrolling, then raise one finger. Click ' |
| 'with finger remaining on trackpad. Single finger click ' |
| 'should result.', |
| prompt='Two finger scroll {0}. Lift one of the finger. ' |
| 'The other finger make a physical click.', |
| subprompt={ |
| 'up': ('up',), |
| 'down': ('down',), |
| 'left': ('left',), |
| 'right': ('right',), |
| }, |
| area=area[0], |
| criteria={ |
| 'total_movement': ('Motion', '<=', click_movement), |
| 'sequence': (('Button Wheel', '>=', 1), |
| ('ButtonPress', 'Button Left'), |
| ('ButtonRelease', 'Button Left'), |
| ), |
| }, |
| weight=1, |
| enabled=True, |
| files=('*', |
| ), |
| ), |
| |
| ### Area 1: Click & select/drag |
| TrackpadTestFunctionality( |
| name='single_finger_select', |
| subname=(('physical_click', 'tap_and_half'), |
| ('left', 'right', 'up', 'down'), |
| ), |
| description='(Single finger) Finger physical click or ' |
| 'tap & a half, then finger - remaining in contact ' |
| 'with trackpad - drags along surface of trackpad', |
| prompt='Use any finger to make {0} and drag {1} along half of the ' |
| 'surface of the trackpad.', |
| subprompt={ |
| 'physical_click': ('physical click',), |
| 'tap_and_half': ('tap & a half',), |
| 'left': ('left',), |
| 'right': ('right',), |
| 'up': ('up',), |
| 'down': ('down',), |
| }, |
| area=area[1], |
| criteria={ |
| 'sequence': (('Motion', '<=', click_movement), |
| ('ButtonPress', 'Button Left'), |
| ('Motion_x_or_y', '>=', select_drag_distance), |
| ('ButtonRelease', 'Button Left'), |
| ('Motion', '<=', click_movement), |
| ), |
| 'move_ratio': move_ratio, |
| }, |
| weight=1, |
| enabled=True, |
| files=('*', |
| ), |
| ), |
| |
| TrackpadTestFunctionality( |
| name='single_finger_lifted', |
| subname=(('left', 'right', 'up', 'down'), |
| ), |
| description='(Single finger) If finger leaves trackpad for only ' |
| '800ms-1s, select/drag should continue', |
| prompt='Use any finger to make tap & a half and drag {0} along ' |
| 'half of the surface of the trackpad. Lift your finger ' |
| 'no more than 800ms-1s and drag {0} again along half of ' |
| 'the surface.', |
| subprompt={ |
| 'left': ('left',), |
| 'right': ('right',), |
| 'up': ('up',), |
| 'down': ('down',), |
| }, |
| area=area[1], |
| criteria={ |
| 'sequence': (('Motion', '<=', click_movement), |
| ('ButtonPress', 'Button Left'), |
| ('Motion_x_or_y', '>=', select_drag_distance), |
| ('NOP', '1st Finger Lifted'), |
| ('Motion_x_or_y', '>=', select_drag_distance), |
| ('ButtonRelease', 'Button Left'), |
| ('Motion', '<=', click_movement), |
| ), |
| 'move_ratio': move_ratio, |
| }, |
| weight=1, |
| enabled=True, |
| files=('*', |
| ), |
| ), |
| |
| TrackpadTestFunctionality( |
| name='two_fingers_select', |
| subname=(('physical_click', 'tap_and_half'), |
| ('left', 'right', 'up', 'down'), |
| ), |
| description="(Two fingers) 1st finger click or tap & a half, " |
| "2nd finger's movement selects/drags", |
| prompt='Use 1st finger to make {0}, and 2nd finger to drag {1} along ' |
| 'half of the surface of the trackpad.', |
| subprompt={ |
| 'physical_click': ('physical click',), |
| 'tap_and_half': ('tap & a half',), |
| 'left': ('left',), |
| 'right': ('right',), |
| 'up': ('up',), |
| 'down': ('down',), |
| }, |
| area=area[1], |
| criteria={ |
| 'sequence': (('Motion', '<=', click_movement), |
| ('ButtonPress', 'Button Left'), |
| ('Motion_x_or_y', '>=', select_drag_distance), |
| ('ButtonRelease', 'Button Left'), |
| ('Motion', '<=', click_movement), |
| ), |
| 'move_ratio': move_ratio, |
| }, |
| weight=1, |
| enabled=True, |
| files=('*', |
| ), |
| ), |
| |
| TrackpadTestFunctionality( |
| name='two_fingers_lifted', |
| subname=(('physical_click', 'tap_and_half'), |
| ('left', 'right', 'up', 'down'), |
| ), |
| description='(Two fingers) Continues to drag when second finger ' |
| 'is lifted then placed again.', |
| prompt='Use 1st finger to make {0}, and 2nd finger to drag {1} along ' |
| 'half of the surface of the trackpad. Lift your finger for ' |
| 'a while and then drag {1} again along half of the surface.', |
| subprompt={ |
| 'physical_click': ('physical click',), |
| 'tap_and_half': ('tap & a half',), |
| 'left': ('left',), |
| 'right': ('right',), |
| 'up': ('up',), |
| 'down': ('down',), |
| }, |
| area=area[1], |
| criteria={ |
| 'sequence': (('Motion', '<=', click_movement), |
| ('ButtonPress', 'Button Left'), |
| ('Motion_x_or_y', '>=', select_drag_distance), |
| ('NOP', '2nd Finger Lifted'), |
| ('Motion_x_or_y', '>=', select_drag_distance), |
| ('ButtonRelease', 'Button Left'), |
| ('Motion', '<=', click_movement), |
| ), |
| 'move_ratio': move_ratio, |
| }, |
| weight=1, |
| enabled=True, |
| files=('*', |
| ), |
| ), |
| |
| TrackpadTestFunctionality( |
| name='two_fingers_no_delay', |
| subname=('left', 'right', 'up', 'down'), |
| description='(Two fingers) Drag should be immediate (no delay ' |
| 'between movement of finger and movement of ' |
| 'selection/drag)', |
| prompt='Use 1st finger to click and hold, use 2nd finger to ' |
| 'drag {0}, and then release two fingers.', |
| subprompt={ |
| 'left': ('left',), |
| 'right': ('right',), |
| 'up': ('up',), |
| 'down': ('down',), |
| }, |
| area=area[1], |
| criteria={ |
| 'sequence': (('Motion', '<=', click_movement), |
| ('ButtonPress', 'Button Left'), |
| ('Motion_x_or_y', '>=', select_drag_distance), |
| ('ButtonRelease', 'Button Left'), |
| ('Motion', '<=', click_movement), |
| ), |
| 'delay': 0.2, |
| 'move_ratio': move_ratio, |
| }, |
| weight=1, |
| enabled=True, |
| files=('*', |
| ), |
| ), |
| |
| ### Area 2: 2 finger alternate/right click |
| TrackpadTestFunctionality( |
| name='x_seconds_interval', |
| subname=(('0.3', '1', '3'), |
| ), |
| description='1st use case: 1st finger touches trackpad, ' |
| 'X seconds pass, 2nd finger touches trackpad, ' |
| 'physical click = right click, where X is any ' |
| 'number of seconds', |
| prompt='1st finger touches trackpad, wait {0} seconds, and then ' |
| '2nd finger touches trackpad. Lift two fingers together.', |
| subprompt={ |
| '0.3': ('0.3',), |
| '1': ('1',), |
| '3': ('3',), |
| }, |
| area=area[2], |
| criteria={ |
| 'total_movement': ('Motion', '<=', click_movement), |
| 'button': ('Button Right', '==', 1), |
| }, |
| weight=1, |
| enabled=True, |
| files=('*', |
| ), |
| ), |
| |
| TrackpadTestFunctionality( |
| name='roll_case', |
| subname=('300',), |
| description='2nd use case ("roll case"): If first finger generates a ' |
| 'click and second finger "rolls on" within 300ms of first ' |
| 'finger click, an alternate/right click results.', |
| prompt='1st finger generates a click, and 2nd finger rolls on ' |
| 'within {0} milliseconds. Lift two fingers together.', |
| subprompt={ |
| '300': ('300',), |
| }, |
| area=area[2], |
| criteria={ |
| 'total_movement': ('Motion', '<=', click_movement), |
| 'button': ('Button Right', '==', 1), |
| }, |
| weight=1, |
| enabled=True, |
| files=('*', |
| ), |
| ), |
| |
| TrackpadTestFunctionality( |
| name='one_finger_tracking', |
| subname=('left', 'right', 'up', 'down'), |
| description='1 finger tracking, never leaves trackpad, 2f ' |
| 'arrives and there is a click. Right click results.', |
| prompt='1st finger drags {0} along half of the surface of trackpad, ' |
| 'never leaves trackpad, and then the 2nd finger arrives and ' |
| 'make a click. Lift two fingers together.', |
| subprompt={ |
| 'left': ('left',), |
| 'right': ('right',), |
| 'up': ('up',), |
| 'down': ('down',), |
| }, |
| area=area[2], |
| criteria={ |
| 'sequence': (('Motion', '>=', select_drag_distance), |
| ('ButtonPress', 'Button Right'), |
| ('Motion', '<=', click_movement), |
| ('ButtonRelease', 'Button Right'), |
| ('Motion', '<=', click_movement), |
| ), |
| 'move_ratio': move_ratio, |
| }, |
| weight=1, |
| enabled=True, |
| files=('*', |
| ), |
| ), |
| |
| ### Area 3: 2 finger scroll |
| |
| TrackpadTestFunctionality( |
| name='near_parallel', |
| subname=(('up', 'down', 'left', 'right'), |
| ('parallel', '45',), |
| ), |
| description='1st: Two fingers moving near parallel result in scroll', |
| prompt='Use a finger of your left hand and a finger of your right ' |
| 'hand with two fingers about 1 cm apart. Scroll {0} across ' |
| 'half of the trackpad with two fingers moving {1}', |
| subprompt={ |
| 'up': ('up',), |
| 'down': ('down',), |
| 'left': ('left',), |
| 'right': ('right',), |
| 'parallel': ('in parallel',), |
| '45': ('far away with an angle about 45 degrees.',), |
| }, |
| area=area[3], |
| criteria={ |
| 'total_movement': ('Motion', '==', 0), |
| 'button': ('Button Wheel', '>=', 10), |
| }, |
| weight=1, |
| enabled=True, |
| files=('*', |
| ), |
| ), |
| |
| TrackpadTestFunctionality( |
| name='2nd_finger_vertical', |
| subname=('up', 'down'), |
| description='2nd: 1st finger contacts trackpad, 2nd finger ' |
| 'moves vertically and scroll mirrors that movement', |
| prompt='Touch the trackpad with one finger, and use 2nd finger ' |
| 'to move {0} across half of the trackpad.', |
| subprompt={ |
| 'up': ('up',), |
| 'down': ('down',), |
| }, |
| area=area[3], |
| criteria={ |
| 'total_movement': ('Motion', '==', 0), |
| 'button': ('Button Wheel', '>=', 10), |
| }, |
| weight=1, |
| enabled=True, |
| files=('*', |
| ), |
| ), |
| |
| TrackpadTestFunctionality( |
| name='2nd_finger_horizontal', |
| subname=('left', 'right'), |
| description='2nd: 1st finger contacts trackpad, 2nd finger ' |
| 'moves horizontally and scroll mirrors that movement', |
| prompt='Use a finger contacts the trackpad, and use 2nd finger ' |
| 'to move {0} across half of the trackpad.', |
| subprompt={ |
| 'left': ('left',), |
| 'right': ('right',), |
| }, |
| area=area[3], |
| criteria={ |
| 'total_movement': ('Motion', '==', 0), |
| 'button': ('Button Wheel', '>=', 10), |
| }, |
| weight=1, |
| enabled=True, |
| files=('*', |
| ), |
| ), |
| |
| TrackpadTestFunctionality( |
| name='exclude_thumb', |
| subname=('up', 'down', 'left', 'right',), |
| description='Test that finger exclude thumb in scroll', |
| prompt='Use a finger of your one hand contacts the bottom of ' |
| 'the trackpad, and use two fingers of the other hand ' |
| 'to scroll {0} across half of the trackpad.', |
| subprompt={ |
| 'up': ('up',), |
| 'down': ('down',), |
| 'left': ('left',), |
| 'right': ('right',), |
| }, |
| area=area[3], |
| criteria={ |
| 'total_movement': ('Motion', '==', 0), |
| 'button': ('Button Wheel', '>=', 10), |
| }, |
| weight=1, |
| enabled=True, |
| files=('*', |
| ), |
| ), |
| |
| TrackpadTestFunctionality( |
| name='finger_spacing', |
| subname=(('up', 'down',), |
| ('close', 'proper', 'distant',), |
| ), |
| description='Scroll should occur regardless of spacing ' |
| '(close or distant) between fingers', |
| prompt='Use two fingers {1} to scroll {0} across half of ' |
| 'the trackpad.', |
| subprompt={ |
| 'up': ('up',), |
| 'down': ('down',), |
| 'close': ('contacting together',), |
| 'proper': ('spacing naturally in your own way',), |
| 'distant': ('spacing far on two sides of the trackpad',), |
| }, |
| area=area[3], |
| criteria={ |
| 'total_movement': ('Motion', '==', 0), |
| 'button': ('Button Wheel', '>=', 10), |
| }, |
| weight=1, |
| enabled=True, |
| files=('*', |
| ), |
| ), |
| |
| TrackpadTestFunctionality( |
| name='reflect_vertical', |
| subname=('up', 'down',), |
| description='Vertical scroll, reflecting movement of finger(s)', |
| prompt='(1) Use two fingers to scroll {0} slowly for about 4 ' |
| 'seconds. Lift the fingers.\n ' |
| '(2) Use two fingers to scroll {0} again at a medium speed ' |
| 'for about 1~2 seconds. Then lift fingers.\n ' |
| '(3) Use two fingers to scroll {0} again at a fast speed ' |
| 'for less than 0.5 seconds. Then lift fingers. ', |
| subprompt={ |
| 'up': ('up',), |
| 'down': ('down',), |
| }, |
| area=area[3], |
| criteria={ |
| 'total_movement': ('Motion', '==', 0), |
| 'button': ('Button Wheel', '>=', 10), |
| 'wheel_speed': ('Wheel Speed Multiplier', '>=', 1.5), |
| }, |
| weight=1, |
| enabled=True, |
| files=('*', |
| ), |
| ), |
| |
| TrackpadTestFunctionality( |
| name='reflect_horizontal', |
| subname=('left', 'right',), |
| description='Horizontal scroll, reflecting movement of finger(s)', |
| prompt='(1) Use two fingers to scroll {0} slowly for about 4 ' |
| 'seconds. Lift the fingers.\n ' |
| '(2) Use two fingers to scroll {0} again at a medium speed ' |
| 'for about 1~2 seconds. Then lift fingers.\n ' |
| '(3) Use two fingers to scroll {0} again at a fast speed ' |
| 'for less than 0.5 seconds. Then lift fingers. ', |
| subprompt={ |
| 'left': ('left',), |
| 'right': ('right',), |
| }, |
| area=area[3], |
| criteria={ |
| 'total_movement': ('Motion', '==', 0), |
| 'button': ('Button Wheel', '>=', 10), |
| 'wheel_speed': ('Wheel Speed Multiplier', '>=', 1.5), |
| }, |
| weight=1, |
| enabled=True, |
| files=('*', |
| ), |
| ), |
| |
| TrackpadTestFunctionality( |
| name='no_sudden_jump', |
| subname=('up', 'down', 'left', 'right'), |
| description='Consistent scrolling with two fingers ' |
| '(no sudden jumps)', |
| prompt='Use two fingers to scroll {0} steadily to the bezel edge.', |
| subprompt={ |
| 'up': ('up',), |
| 'down': ('down',), |
| 'left': ('left',), |
| 'right': ('right',), |
| }, |
| area=area[3], |
| criteria={ |
| 'total_movement': ('Motion', '==', 0), |
| 'button': ('Button Wheel', '>=', 10), |
| }, |
| weight=1, |
| enabled=True, |
| files=('*', |
| ), |
| ), |
| |
| TrackpadTestFunctionality( |
| name='regardless_prior_state', |
| subname=(('up', 'down',), |
| ('single_finger_movement', |
| 'right_click', |
| 'click_and_drag', |
| 'three_finger_contact',), |
| ), |
| description='Scroll occurs whenever the requirements are met, ' |
| 'regardless of prior state (e.g. single finger ' |
| 'movement, right click, click & drag, three finger ' |
| 'contact with trackpad)', |
| prompt='{1} Use the two fingers to scroll {0}.', |
| subprompt={ |
| 'up': ('up',), |
| 'down': ('down',), |
| 'single_finger_movement': ('Use a finger tracking arbitrarily. ' |
| 'Without the finger leaving the pad, ' |
| 'a 2nd finger touches the trackpad.',), |
| 'right_click': ('Use two fingers to make a right click. ' |
| 'All fingers leave the Trackpad. ' |
| 'Within 300ms, two fingers touch the ' |
| 'trackpad again.',), |
| 'click_and_drag': ('Make a click and drag gesture in any ' |
| 'direction. All fingers leave the trackpad. ' |
| 'Within 300ms, two fingers touch the trackpad ' |
| 'again.',), |
| 'three_finger_contact': ('Use two fingers to scroll in any ' |
| 'direction. Have a 3rd finger in ' |
| 'contact. Then go back to two fingers.',), |
| }, |
| area=area[3], |
| criteria={ |
| 'sequence': (('*'), |
| ('Button Wheel', '>=', 10), |
| ('Motion', '==', 0), |
| ), |
| }, |
| weight=1, |
| enabled=True, |
| files=('*', |
| ), |
| ), |
| |
| ### Area 4: Palm/thumb detection |
| |
| TrackpadTestFunctionality( |
| name='palm_presence', |
| subname=('left', 'right', 'both'), |
| description='No unintended cursor movement, click, scroll due to ' |
| 'presence of palm', |
| prompt='Place {0} on the trackpad for about 5 seconds in the ' |
| 'way as you are typing. Then lift the palm(s).', |
| subprompt={ |
| 'left': ('your left palm',), |
| 'right': ('your right palm',), |
| 'both': ('both palms',), |
| }, |
| area=area[4], |
| criteria={ |
| 'total_movement': ('Motion', '<=', palm_movement), |
| 'button': None, |
| }, |
| weight=1, |
| enabled=True, |
| files=('*', |
| ), |
| ), |
| |
| TrackpadTestFunctionality( |
| name='hovering_thumb', |
| subname=(('left', 'right'), |
| ('contact', 'above',), |
| ), |
| description='No unintended cursor movement, click, scroll due ' |
| 'to presence of "hovering thumb" (Hovering thumb ' |
| 'defined as Thumb above, or in contact with, bottom ' |
| '¼ of pad; thumb in any orientation)', |
| prompt='Place your {0} thumb (in any orientation) {1} bottom ¼ of ' |
| 'pad for about 5 seconds.', |
| subprompt={ |
| 'left': ('left',), |
| 'right': ('right',), |
| 'contact': ('in contact with',), |
| 'above': ('slightly above',), |
| }, |
| area=area[4], |
| criteria={ |
| 'total_movement': ('Motion', '<=', palm_movement), |
| 'button': None, |
| }, |
| weight=1, |
| enabled=True, |
| files=('*', |
| ), |
| ), |
| |
| TrackpadTestFunctionality( |
| name='pointing', |
| subname=('up', 'down', 'left', 'right',), |
| description='Example: Palm/thumb sitting on bottom edge of ' |
| 'trackpad, primary finger comes in contact with ' |
| 'and moves on trackpad: Pointing should occur rather ' |
| 'than scrolling', |
| prompt='Place any thumb on the bottom edge of trackpad. ' |
| 'Use primary finger to move {0} across half of trackpad. ' |
| 'Then lift both fingers.', |
| subprompt={ |
| 'up': ('up',), |
| 'down': ('down',), |
| 'left': ('left',), |
| 'right': ('right',), |
| }, |
| area=area[4], |
| criteria={ |
| 'sequence': (('Motion', '<=', palm_movement), |
| ('NOP', '2nd Finger Landed'), |
| ('Motion_x_or_y', '>=', select_drag_distance), |
| ('NOP', '2nd Finger Lifted'), |
| ('Motion', '<=', palm_movement), |
| ), |
| 'move_ratio': move_ratio, |
| 'button': None, |
| }, |
| weight=1, |
| enabled=True, |
| files=('*', |
| ), |
| ), |
| |
| TrackpadTestFunctionality( |
| name='scroll', |
| subname=('up', 'down', 'left', 'right',), |
| description='Example: Palm/thumb sitting on bottom edge of ' |
| 'trackpad while two fingers move in parallel on ' |
| 'trackpad: Scroll should result', |
| prompt='Place any thumb on the bottom edge of trackpad. ' |
| 'Use two fingers to scroll {0} across half of trackpad. ' |
| 'Then lift all fingers.', |
| subprompt={ |
| 'up': ('up',), |
| 'down': ('down',), |
| 'left': ('left',), |
| 'right': ('right',), |
| }, |
| area=area[4], |
| criteria={ |
| 'sequence': (('Motion', '<=', palm_movement), |
| ('NOP', '3rd Finger Landed'), |
| ('Button Wheel', '>=', 10), |
| ('NOP', '3rd Finger Lifted'), |
| ('Motion', '<=', palm_movement), |
| ), |
| }, |
| weight=1, |
| enabled=True, |
| files=('*', |
| ), |
| ), |
| |
| TrackpadTestFunctionality( |
| name='click', |
| subname=None, |
| description='Example: Palm/thumb sitting on bottom edge of trackpad ' |
| 'while primary finger clicks: Primary click results ' |
| 'rather than alternate click', |
| prompt='Place any thumb on the trackpad. Use primary finger to ' |
| 'make a click.', |
| subprompt=None, |
| area=area[4], |
| criteria={ |
| 'total_movement': ('Motion', '<=', palm_movement), |
| 'button': ('Button Left', '==', 1), |
| }, |
| weight=1, |
| enabled=True, |
| files=('*', |
| ), |
| ), |
| |
| ] |
| |
| |
| ''' filename_attr: A test file name is composed of the following attributes |
| |
| functionality name and subname: This prefix is generated automatically for |
| each functionality. E.g., two_finger_scroll.down |
| |
| prefix: the prefix string before the functionality in the file name. |
| If you want the area name of each functionality to be used as the |
| prefix string in the file name automatically, specify 'DEFAULT' as |
| ['prefix', 'DEFAULT'], |
| |
| You can give a prefix name here as an area name |
| ['prefix', 'click'], |
| |
| If you do not want a prefix string to show up before the |
| functionality name in the file name, you can assign None. |
| ['prefix', None], |
| |
| model: the model of the machine. |
| To let the system figure out the model automatically, |
| specify 'DEFAULT', as in: |
| ['model', 'DEFAULT'], |
| Note: Currently, the model name is looked up in '/etc/lsb-release' |
| as CHROMEOS_RELEASE_BOARD. For systems that do not support it, |
| a model name such as 'alex' below or None must be explicitly |
| given. |
| |
| You can specify a specific model name. E.g., |
| ['model', 'alex'], |
| |
| If you do not want the model name to show up in the file name, |
| you can just assign None. |
| ['model', None], |
| |
| firmware_version: the firmware version of the trackpad. This field can be |
| generally omitted if any updated trackpad firmware provided by the |
| trackpad manufacturer does not affect the performance of the trackpad. |
| When the firmware version needs to be specified, do it like: |
| ['firmware_version', 'v8.5'], |
| |
| [other custom attributes come in here]: e.g., 'kernel_driver_version', |
| 'trackpad_material', etc. |
| |
| tester: the tester name is to be shown on the file name. Different testers |
| might have different ways of making gestures. If the tester is None, |
| trackpad record program will prompt the user to enter the name when |
| capturing gesture data files. To specify the name: |
| ['tester', 'tom'], |
| |
| timestamp: the timestamp when the file is captured. UTC time is employed. |
| It is generated automatically. The format is composed of year, month, |
| day, hour, minute, and second. E.g., 20110407_185746 |
| |
| ext: the extension of the data file. E.g., |
| ['ext', 'dat'] |
| |
| The name of a test file looks as: |
| two_finger_scroll.down-mario-john-20110407_185746.dat |
| ''' |
| |
| filename_attr = [ |
| ['prefix', 'DEFAULT'], |
| ['model', 'DEFAULT'], |
| ['firmware_version', None], |
| ['tester', None], |
| ['ext', 'dat'] |
| ] |