blob: 92a25f45a306341dba69ab8b9d3f6bd3ab53c8ca [file] [log] [blame]
Charlie Mooney08661912015-04-16 09:20:34 -07001# Copyright 2015 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""" This is a module containing functions that allow the test suite to
6determine the specifics of the gesture and execute them on the touchbot.
7In essence, you use this class to go from a Test object to the robot
8actually performing the correct gesture on the pad.
9"""
10
11from threading import Thread
12
13import colorama as color
14
15import tests
16from touchbot import Touchbot
17
18
Charlie Mooney61b4fbb2015-04-22 15:22:02 -070019STANDARD_FINGERTIP = '1round_9mm'
20
Charlie Mooney08661912015-04-16 09:20:34 -070021BUFFER_SIZE = 0.1
Charlie Mooney61b4fbb2015-04-22 15:22:02 -070022OVERSHOOT_DISTANCE = 0.05
Charlie Mooney08661912015-04-16 09:20:34 -070023LEFT = BUFFER_SIZE
Charlie Mooney61b4fbb2015-04-22 15:22:02 -070024OVER_LEFT = -OVERSHOOT_DISTANCE
Charlie Mooney08661912015-04-16 09:20:34 -070025RIGHT = 1.0 - BUFFER_SIZE
Charlie Mooney61b4fbb2015-04-22 15:22:02 -070026OVER_RIGHT = 1.0 + OVERSHOOT_DISTANCE
Charlie Mooney08661912015-04-16 09:20:34 -070027TOP = BUFFER_SIZE
Charlie Mooney61b4fbb2015-04-22 15:22:02 -070028OVER_TOP = -OVERSHOOT_DISTANCE
Charlie Mooney08661912015-04-16 09:20:34 -070029BOTTOM = 1.0 - BUFFER_SIZE
Charlie Mooney61b4fbb2015-04-22 15:22:02 -070030OVER_BOTTOM = 1.0 + OVERSHOOT_DISTANCE
Charlie Mooney08661912015-04-16 09:20:34 -070031CENTER = 0.5
32
33LOCATION_COORDINATES = {
34 tests.GV.TL: (LEFT, TOP),
35 tests.GV.TR: (RIGHT, TOP),
36 tests.GV.BL: (LEFT, BOTTOM),
37 tests.GV.BR: (RIGHT, BOTTOM),
38 tests.GV.TS: (CENTER, TOP),
39 tests.GV.BS: (CENTER, BOTTOM),
40 tests.GV.LS: (LEFT, CENTER),
41 tests.GV.RS: (RIGHT, CENTER),
42 tests.GV.CENTER: (CENTER, CENTER),
43}
44
Charlie Mooney61b4fbb2015-04-22 15:22:02 -070045LINE_DIRECTION_COORDINATES = {
46 tests.GV.LR: ((LEFT, CENTER), (RIGHT, CENTER)),
47 tests.GV.RL: ((RIGHT, CENTER), (LEFT, CENTER)),
48 tests.GV.TB: ((CENTER, TOP), (CENTER, BOTTOM)),
49 tests.GV.BT: ((CENTER, BOTTOM), (CENTER, TOP)),
50 tests.GV.BLTR: ((LEFT, BOTTOM), (RIGHT, TOP)),
51 tests.GV.BRTL: ((RIGHT, BOTTOM), (LEFT, TOP)),
52 tests.GV.TRBL: ((RIGHT, TOP), (LEFT, BOTTOM)),
53 tests.GV.TLBR: ((LEFT, TOP), (RIGHT, BOTTOM)),
54 tests.GV.CL: ((CENTER, CENTER), (OVER_LEFT, CENTER)),
55 tests.GV.CR: ((CENTER, CENTER), (OVER_RIGHT, CENTER)),
56 tests.GV.CT: ((CENTER, CENTER), (CENTER, OVER_TOP)),
57 tests.GV.CB: ((CENTER, CENTER), (CENTER, OVER_BOTTOM)),
58 tests.GV.CUL: ((CENTER, CENTER), (OVER_LEFT, OVER_TOP)),
59 tests.GV.CLL: ((CENTER, CENTER), (OVER_LEFT, OVER_BOTTOM)),
60 tests.GV.CLR: ((CENTER, CENTER), (OVER_RIGHT, OVER_BOTTOM)),
61}
62
63SPEEDS = {
64 tests.GV.NORMAL: Touchbot.SPEED_MEDIUM,
65 tests.GV.SLOW: Touchbot.SPEED_SLOW,
66}
67
68SINGLE_FINGER_LINE_TESTS = [
69 tests.ONE_FINGER_TO_EDGE,
70 tests.ONE_FINGER_TRACKING,
71 tests.ONE_FINGER_TRACKING_FROM_CENTER,
72]
73
Charlie Mooney08661912015-04-16 09:20:34 -070074
75def PerformCorrespondingGesture(test, variation_number, robot, device_spec):
76 variation = test.variations[variation_number]
77 fn = None
78 if test.name == tests.NOISE_STATIONARY:
79 fn = lambda: _PerformStationaryNoiseTest(variation, robot, device_spec)
Charlie Mooney1b708112015-04-28 14:46:21 -070080 elif test.name == tests.ONE_FINGER_TAP:
81 fn = lambda: _PerformOneFingerTapTest(variation, robot, device_spec)
Charlie Mooney61b4fbb2015-04-22 15:22:02 -070082 elif test.name in SINGLE_FINGER_LINE_TESTS:
83 pause = 1 if test.name == tests.ONE_FINGER_TRACKING_FROM_CENTER else 0
84 fn = lambda: _PerformOneFingerLineTest(variation, robot, device_spec, pause)
Charlie Mooney08661912015-04-16 09:20:34 -070085
86 if fn is None:
87 print color.Fore.RED + 'Error: Robot unable to perform gesture!'
88 return None
89
90 return Thread(target=fn)
91
Charlie Mooney61b4fbb2015-04-22 15:22:02 -070092
Charlie Mooney08661912015-04-16 09:20:34 -070093def _PerformStationaryNoiseTest(variation, robot, device_spec):
94 frequency, amplitude, waveform, location = variation
Charlie Mooney61b4fbb2015-04-22 15:22:02 -070095 tap_position = LOCATION_COORDINATES[location]
96 fingertip = robot.fingertips[STANDARD_FINGERTIP]
97 robot.SingleTipTap(device_spec, fingertip, tap_position, touch_time_s=4)
98
99
Charlie Mooney1b708112015-04-28 14:46:21 -0700100def _PerformOneFingerTapTest(variation, robot, device_spec):
101 location, = variation
102 tap_position = LOCATION_COORDINATES[location]
103 fingertip = robot.fingertips[STANDARD_FINGERTIP]
104 robot.SingleTipTap(device_spec, fingertip, tap_position)
105
106
Charlie Mooney61b4fbb2015-04-22 15:22:02 -0700107def _PerformOneFingerLineTest(variation, robot, device_spec, pause_time_s):
108 direction, speed = variation
109 start, end = LINE_DIRECTION_COORDINATES[direction]
110 fingertip = robot.fingertips[STANDARD_FINGERTIP]
111
112 robot.PushSpeed(SPEEDS[speed])
113 robot.SingleTipLine(device_spec, fingertip, start, end, pause_time_s)
114 robot.PopSpeed()