blob: f776aa415305735a09782b59a545fcec8ffec1c3 [file] [log] [blame]
# -*- 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_saved: specify the directory saving the test files
gesture_files_path_saved = '/var/tmp/trackpad_test_data/test_files'
# gesture_files_path: specify the path (symbolic link) for autotest
gesture_files_path = gesture_files_path_saved + '/latest'
# 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) Use trackpad device specified on trackpad_record command line.
# (2) Probe /dev/input/event* for trackpad device.
# TODO(josephsih): get rid of (3) and (4) below
# (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 X input 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
mtplot_gui = True
''' 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'),
}
''' functionality_list: the list of test functionalities
A functionality is a TrackpadTestFunctionality object 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 like
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 axes
# 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'),
description='Any finger, including thumb, can click',
prompt='Make a {0} with every finger of either hand starting from '
'thumb to pinky. Repeat the procedure {1} to make {2} in total.',
subprompt={
'physical_click': ('physical click', 'twice', '10 clicks'),
'tap': ('soft tap', 'twice', '10 taps'),
},
area=area[0],
criteria={
'total_movement': ('Motion', '<=', click_movement),
'button': ('Button Left', '==', 10),
},
weight=1,
enabled=True,
files=('*',
),
),
TrackpadTestFunctionality(
name='any_angle_click',
subname=('physical_click', 'tap'),
description='Finger can be oriented at any angle relative to '
'trackpad',
prompt='Make a {0} with any finger of either hand at 0, 45, 90, '
'135, 180 degrees with the horizontal axis respectively. '
'Repeat the procedure {1} to make {2} in total.',
subprompt={
'physical_click': ('physical click', 'twice', '10 clicks'),
'tap': ('soft tap', 'twice', '10 taps'),
},
area=area[0],
criteria={
'total_movement': ('Motion', '<=', click_movement),
'button': ('Button Left', '==', 10),
},
weight=1,
enabled=True,
files=('*',
),
),
TrackpadTestFunctionality(
name='any_location_click',
subname=('physical_click', 'tap'),
description='Click can occur at any location on trackpad '
'(no hot zones)',
prompt='Make a {0} with any finger of either hand in the upper, '
'middle, and bottom parts of the trackpad respectively. '
'Repeat the procedure {1} to make {2} in total.',
subprompt={
'physical_click': ('physical click', '3 times', '9 clicks'),
'tap': ('soft tap', '3 times', '9 taps'),
},
area=area[0],
criteria={
'total_movement': ('Motion', '<=', click_movement),
'button': ('Button Left', '==', 9),
},
weight=1,
enabled=True,
files=('*',
),
),
TrackpadTestFunctionality(
name='no_min_width_click',
subname=('physical_click', 'tap'),
description='Single finger click should not have a defined minimum '
'width (i.e. click possible with finger tip and/or '
'fingernail)',
prompt='Make {0} using any finger tip {1} of either hand.',
subprompt={
'physical_click': ('physical clicks 5 times', '(fingernail)'),
'tap': ('soft tap 5 times', ''),
},
area=area[0],
criteria={
'total_movement': ('Motion', '<=', click_movement),
'button': ('Button Left', '==', 5),
},
weight=1,
enabled=True,
files=('*',
),
),
TrackpadTestFunctionality(
name='no_cursor_wobble',
subname=('physical_click', 'tap'),
description='No cursor wobble, creep, or jumping (or jump back) '
'during clicking',
prompt='Make {0} using any finger of either hand.',
subprompt={
'physical_click': ('physical clicks 5 times',),
'tap': ('soft tap 5 times',),
},
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='Drum roll: use the {0} of your {1} hand touching trackpad '
'followed shortly (<500ms) by the {2} of your {3} hand '
'touching trackpad. Repeat the gesture for about {4}.',
subprompt={
'l0r1': ('thumb', 'left', 'first finger', 'right', '5 times'),
'l1r1': ('first finger', 'left', 'first finger', 'right',
'5 times'),
'r0r1': ('thumb', 'right', 'first finger', 'right', '5 times'),
'r1r2': ('first finger', 'right', 'middle finger', 'right',
'5 times'),
},
area=area[0],
criteria={
'total_movement': ('Motion', '==', 0),
'button': None,
},
weight=1,
enabled=True,
files=('*',
),
),
TrackpadTestFunctionality(
name='2fscroll_1fclick',
subname=('vert', 'horiz',),
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} several times for about 3 seconds '
'without the fingers leaving the trackpad. Lift one of the '
'finger. The other finger make a physical click.',
subprompt={
'vert': ('up and down',),
'horiz': ('left and right',),
},
area=area[0],
criteria={
'sequence': (('*'),
('ButtonPress', 'Button Left'),
('ButtonRelease', 'Button Left'),
),
},
weight=1,
enabled=True,
files=('*',
),
),
### Area 1: Click & select/drag
TrackpadTestFunctionality(
name='single_finger_select_2d',
subname=('physical_click', 'tap_and_half'),
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 in arbitrary '
'directions for about a few seconds without the finger '
'leaving the trackpad.',
subprompt={
'physical_click': ('physical click',),
'tap_and_half': ('tap & a half',),
},
area=area[1],
criteria={
'sequence': (('ButtonPress', 'Button Left'),
('Motion', '>=', select_drag_distance),
('ButtonRelease', 'Button Left'),
),
},
weight=1,
enabled=True,
files=('*',
),
),
TrackpadTestFunctionality(
name='single_finger_select',
subname=(('physical_click', 'tap_and_half'),
('vert', 'horiz'),
),
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} for a few times '
'without the finger leaving the trackpad.',
subprompt={
'physical_click': ('physical click',),
'tap_and_half': ('tap & a half',),
'vert': ('up and down',),
'horiz': ('left and right',),
},
area=area[1],
criteria={
'sequence': (('ButtonPress', 'Button Left'),
('Motion_x_or_y', '>=', select_drag_distance),
('ButtonRelease', 'Button Left'),
),
'move_ratio': move_ratio,
},
weight=1,
enabled=True,
files=('*',
),
),
TrackpadTestFunctionality(
name='single_finger_lifted_2d',
subname=None,
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 in arbitrary '
'directions on the trackpad for a few seconds. Lift your '
'finger no more than 800ms-1s and then drag again in '
'arbitrary directions for a few seconds.',
subprompt=None,
area=area[1],
criteria={
'sequence': (('ButtonPress', 'Button Left'),
('Motion', '>=', select_drag_distance),
('NOP', '1st Finger Lifted'),
('Motion', '>=', select_drag_distance),
('ButtonRelease', 'Button Left'),
),
},
weight=1,
enabled=True,
files=('*',
),
),
TrackpadTestFunctionality(
name='single_finger_lifted',
subname=('vert', 'horiz'),
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} for a'
'few times without the finger leaving the trackpad. '
'Lift your finger no more than 800ms-1s and drag {0} again '
'for a few times without the finger leaving the trackpad. '
'Lift your finger when finished.',
subprompt={
'vert': ('up and down',),
'horiz': ('left and right',),
},
area=area[1],
criteria={
'sequence': (('ButtonPress', 'Button Left'),
('Motion_x_or_y', '>=', select_drag_distance),
('NOP', '1st Finger Lifted'),
('Motion_x_or_y', '>=', select_drag_distance),
('ButtonRelease', 'Button Left'),
),
'move_ratio': move_ratio,
},
weight=1,
enabled=True,
files=('*',
),
),
TrackpadTestFunctionality(
name='two_fingers_select_2d',
subname=('physical_click', 'tap_and_half'),
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 in '
'arbitrary directions for a few seconds.',
subprompt={
'physical_click': ('physical click',),
'tap_and_half': ('tap & a half',),
},
area=area[1],
criteria={
'sequence': (('ButtonPress', 'Button Left'),
('Motion', '>=', select_drag_distance),
('ButtonRelease', 'Button Left'),
),
},
weight=1,
enabled=True,
files=('*',
),
),
TrackpadTestFunctionality(
name='two_fingers_select',
subname=(('physical_click', 'tap_and_half'),
('vert', 'horiz'),
),
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} a '
'few times without the finger leaving the trackpad.',
subprompt={
'physical_click': ('physical click',),
'tap_and_half': ('tap & a half',),
'vert': ('up and down',),
'horiz': ('left and right',),
},
area=area[1],
criteria={
'sequence': (('ButtonPress', 'Button Left'),
('Motion_x_or_y', '>=', select_drag_distance),
('ButtonRelease', 'Button Left'),
),
'move_ratio': move_ratio,
},
weight=1,
enabled=True,
files=('*',
),
),
TrackpadTestFunctionality(
name='two_fingers_lifted',
subname=(('physical_click', 'tap_and_half'),
('vert', 'horiz'),
),
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} for '
'a few times without the finger leaving the trackpad. '
'Lift your finger for a while and then drag {1} again for a '
'few times without the finger leaving the trackpad. '
'Lift both fingers when finished.',
subprompt={
'physical_click': ('physical click',),
'tap_and_half': ('tap & a half',),
'vert': ('up and down',),
'horiz': ('left and right',),
},
area=area[1],
criteria={
'sequence': (('ButtonPress', 'Button Left'),
('Motion_x_or_y', '>=', select_drag_distance),
('NOP', '2nd Finger Lifted'),
('Motion_x_or_y', '>=', select_drag_distance),
('ButtonRelease', 'Button Left'),
),
'move_ratio': move_ratio,
},
weight=1,
enabled=True,
files=('*',
),
),
TrackpadTestFunctionality(
name='two_fingers_no_delay_2d',
subname=None,
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 in '
'arbitrary directions for a few seconds without leaving the '
'trackpad. Then release two fingers.',
subprompt=None,
area=area[1],
criteria={
'sequence': (('ButtonPress', 'Button Left'),
('Motion', '>=', select_drag_distance),
('ButtonRelease', 'Button Left'),
),
'delay': 0.2,
},
weight=1,
enabled=True,
files=('*',
),
),
### Area 2: 2 finger alternate/right click
TrackpadTestFunctionality(
name='basic_right_click',
subname=('physical_click', 'tap'),
description='Basic two-finger clicks should work.',
prompt='Use two fingers together to make {0} 5 times. Right '
'clicks should results.',
subprompt={
'physical_click': ('physical clicks',),
'tap': ('taps',),
},
area=area[2],
criteria={
'total_movement': ('Motion', '<=', click_movement),
'button': ('Button Right', '==', 5),
},
weight=1,
enabled=True,
files=('*',
),
),
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. '
'Repeat this procedure 3 times.',
subprompt={
'0.3': ('0.3',),
'1': ('1',),
'3': ('3',),
},
area=area[2],
criteria={
'total_movement': ('Motion', '<=', click_movement),
'button': ('Button Right', '==', 3),
},
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. '
'Repeat this procedure 3 times.',
subprompt={
'300': ('300',),
},
area=area[2],
criteria={
'total_movement': ('Motion', '<=', click_movement),
'button': ('Button Right', '==', 3),
},
weight=1,
enabled=True,
files=('*',
),
),
TrackpadTestFunctionality(
name='one_finger_tracking_2d',
subname=None,
description='1 finger tracking, never leaves trackpad, 2f '
'arrives and there is a click. Right click results.',
prompt='1st finger drags in arbitrary directions for a few seconds, '
'never leaves trackpad, and then the 2nd finger arrives and '
'make a click. Lift two fingers together. '
'Repeat this procedure 3 times.',
subprompt=None,
area=area[2],
criteria={
'sequence': (('Motion', '>=', select_drag_distance),
('ButtonPress', 'Button Right'),
('ButtonRelease', 'Button Right'),
('Motion', '>=', select_drag_distance),
('ButtonPress', 'Button Right'),
('ButtonRelease', 'Button Right'),
('Motion', '>=', select_drag_distance),
('ButtonPress', 'Button Right'),
('ButtonRelease', 'Button Right'),
),
},
weight=1,
enabled=True,
files=('*',
),
),
### Area 3: 2 finger scroll
TrackpadTestFunctionality(
name='basic_two_finger',
subname=('vert', 'horiz'),
description='Basic two-finger scroll should work.',
prompt='Use two finger to scroll {0} continuously for a few seconds.',
subprompt={
'vert': ('up and down',),
'horiz': ('left and right',),
},
area=area[3],
criteria={
'total_movement': ('Motion', '==', 0),
'button': ('Button Wheel', '>=', 10),
},
weight=1,
enabled=True,
files=('*',
),
),
TrackpadTestFunctionality(
name='basic_2nd_finger',
subname=('vert', 'horiz'),
description='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} continuously for a few seconds.',
subprompt={
'vert': ('up and down',),
'horiz': ('left and right',),
},
area=area[3],
criteria={
'total_movement': ('Motion', '==', 0),
'button': ('Button Wheel', '>=', 10),
},
weight=1,
enabled=True,
files=('*',
),
),
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=('vert', 'horiz'),
description='Test that finger exclude thumb in scroll',
prompt='Use the thumb of either hand contacts the bottom of the '
'trackpad, and then use two other fingers to scroll {0} for a '
'few times.',
subprompt={
'vert': ('up and down',),
'horiz': ('left and right',),
},
area=area[3],
criteria={
'total_movement': ('Motion', '==', 0),
'button': ('Button Wheel', '>=', 10),
},
weight=1,
enabled=True,
files=('*',
),
),
TrackpadTestFunctionality(
name='finger_spacing',
subname=(('vert',),
('close', 'proper', 'distant'),
),
description='Scroll should occur regardless of spacing '
'(close or distant) between fingers',
prompt='Use two fingers {1} to scroll {0} for a few times.',
subprompt={
'vert': ('up and 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={
'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={
'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={
'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=(('static', 'moving'),
('left', 'right', 'both'),
),
description='No unintended cursor movement, click, scroll due to '
'presence of palm',
prompt='Place {1} on the trackpad {0} for about 5 seconds. '
'Then lift the palm(s).',
subprompt={
'static': ('statically in the way as your are typing',),
'moving': ('and move continuously in arbitrary directions',),
'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 and move 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=None,
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 in arbitrary directions for a few '
'second. Then lift both fingers.',
subprompt=None,
area=area[4],
criteria={
'sequence': (('Motion', '<=', palm_movement),
('NOP', '2nd Finger Landed'),
('Motion', '>=', select_drag_distance),
('NOP', '2nd Finger Lifted'),
('Motion', '<=', palm_movement),
),
'button': None,
},
weight=1,
enabled=True,
files=('*',
),
),
TrackpadTestFunctionality(
name='scroll',
subname=('vert', 'horiz'),
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} for a few times. '
'Then lift all fingers.',
subprompt={
'vert': ('up and down',),
'horiz': ('left and right',),
},
area=area[4],
criteria={
'total_movement': ('Motion', '<=', palm_movement),
'button': ('Button Wheel', '>=', 10),
},
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. Primary click should result. Repeat 5 times.',
subprompt=None,
area=area[4],
criteria={
'total_movement': ('Motion', '<=', palm_movement),
'button': ('Button Left', '==', 5),
},
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 is
generally omitted if any updated trackpad firmware does not affect
the characteristics of the touch data. 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:
scroll-basic_two_finger.vert-mario-john-20110916_000219.dat
'''
filename_attr = [
['prefix', 'DEFAULT'],
['model', 'DEFAULT'],
['firmware_version', None],
['tester', None],
['ext', 'dat']
]