OLD | NEW |
1 # -*- coding: utf-8 -*- | 1 # -*- coding: utf-8 -*- |
2 # | 2 # |
3 # Copyright (c) 2010 The Chromium OS Authors. All rights reserved. | 3 # Copyright (c) 2010 The Chromium OS Authors. All rights reserved. |
4 # Use of this source code is governed by a BSD-style license that can be | 4 # Use of this source code is governed by a BSD-style license that can be |
5 # found in the LICENSE file. | 5 # found in the LICENSE file. |
6 | 6 |
7 | 7 |
8 # DESCRIPTION : | 8 # DESCRIPTION : |
9 # | 9 # |
10 # This is a factory test to test the LEDs (wifi, battery, etc). | 10 # This is a factory test to test the LEDs (wifi, battery, etc). |
(...skipping 25 matching lines...) Expand all Loading... |
36 _ORANGE = gtk.gdk.color_parse('orange') | 36 _ORANGE = gtk.gdk.color_parse('orange') |
37 | 37 |
38 _LED_NAMES = 'sleepled battchgled wlan battfulled powerled 3g'.split() | 38 _LED_NAMES = 'sleepled battchgled wlan battfulled powerled 3g'.split() |
39 _ORANGE_LED_NAMES = _LED_NAMES[0:3] | 39 _ORANGE_LED_NAMES = _LED_NAMES[0:3] |
40 _BLUE_LED_NAMES = _LED_NAMES[3:] | 40 _BLUE_LED_NAMES = _LED_NAMES[3:] |
41 | 41 |
42 _LED_COUNT = 3 | 42 _LED_COUNT = 3 |
43 _LED_Y_OFFSET = 10 | 43 _LED_Y_OFFSET = 10 |
44 _LED_X_OFFSETS = [10, 80, 150] | 44 _LED_X_OFFSETS = [10, 80, 150] |
45 _LED_RADIUS = 18 | 45 _LED_RADIUS = 18 |
| 46 _SHFL_XYR = {'x':166,'y':20, 'r':9} |
46 | 47 |
47 | 48 |
48 def run_led_ctl(led_ctl_path, args): | 49 def run_led_ctl(led_ctl_path, args): |
49 rc = subprocess.call([led_ctl_path] + args.split()) | 50 rc = subprocess.call([led_ctl_path] + args.split()) |
50 if rc != 1: | 51 if rc != 1: |
51 factory.log('%s(%s) failed with rc %s' % (led_ctl_path, args, rc)) | 52 factory.log('%s(%s) failed with rc %s' % (led_ctl_path, args, rc)) |
52 | 53 |
53 | 54 |
54 def pattern_all_off(led_ctl_fn): | 55 def pattern_all_off(led_ctl_fn): |
55 for n in _LED_NAMES: | 56 for n in _LED_NAMES: |
56 led_ctl_fn('-%s -off' % n) | 57 led_ctl_fn('-%s -off' % n) |
57 return [ful.BLACK, ful.BLACK, ful.BLACK] | 58 return [ful.BLACK, ful.BLACK, ful.BLACK] |
58 | 59 |
59 def pattern_blue_on(led_ctl_fn): | 60 def pattern_blue_on(led_ctl_fn): |
60 pattern_all_off(led_ctl_fn) | 61 pattern_all_off(led_ctl_fn) |
61 for n in _BLUE_LED_NAMES: | 62 for n in _BLUE_LED_NAMES: |
62 led_ctl_fn('-%s -on' % n) | 63 led_ctl_fn('-%s -on' % n) |
63 return [ful.BLUE, ful.BLUE, ful.BLUE] | 64 return [ful.BLUE, ful.BLUE, ful.BLUE] |
64 | 65 |
65 def pattern_orange_on(led_ctl_fn): | 66 def pattern_orange_on(led_ctl_fn): |
66 pattern_all_off(led_ctl_fn) | 67 pattern_all_off(led_ctl_fn) |
67 for n in _ORANGE_LED_NAMES: | 68 for n in _ORANGE_LED_NAMES: |
68 led_ctl_fn('-%s -on' % n) | 69 led_ctl_fn('-%s -on' % n) |
69 return [_ORANGE, _ORANGE, _ORANGE] | 70 return [_ORANGE, _ORANGE, _ORANGE] |
70 | 71 |
71 _PATTERN_LIST = [ | 72 _PATTERN_LIST = [ |
72 ('all off', pattern_all_off), | 73 ('all off', pattern_all_off), |
73 ('blue on', pattern_blue_on), | 74 ('blue on', pattern_blue_on), |
74 ('orange on', pattern_orange_on)] | 75 ('orange on', pattern_orange_on), |
| 76 ('shift led', False)] |
75 | 77 |
76 | 78 |
77 class factory_Leds(test.test): | 79 class factory_Leds(test.test): |
78 version = 1 | 80 version = 1 |
79 preserve_srcdir = True | 81 preserve_srcdir = True |
80 | 82 |
81 def goto_next_pattern(self): | 83 def goto_next_pattern(self): |
82 if not self._pattern_queue: | 84 if not self._pattern_queue: |
83 gtk.main_quit() | 85 gtk.main_quit() |
84 return | 86 return |
85 self._current_pattern, cb_fn = self._pattern_queue.pop() | 87 self._current_pattern, cb_fn = self._pattern_queue.pop() |
86 self._status_map[self._current_pattern] = ful.ACTIVE | 88 self._status_map[self._current_pattern] = ful.ACTIVE |
87 led_ctl_fn = lambda args: run_led_ctl(self._led_ctl_path, args) | 89 if cb_fn: |
88 self._led_colors = cb_fn(led_ctl_fn) | 90 led_ctl_fn = lambda args: run_led_ctl(self._led_ctl_path, args) |
| 91 self._led_colors = cb_fn(led_ctl_fn) |
| 92 else: |
| 93 self._pattern_da.connect('expose_event', self.shift_led_expose) |
89 self._pattern_da.queue_draw() | 94 self._pattern_da.queue_draw() |
90 | 95 |
| 96 def shift_led_expose(self, widget, event): |
| 97 context = widget.window.cairo_create() |
| 98 context.set_source_surface(self._shf_image, 0, 0) |
| 99 context.paint() |
| 100 |
| 101 if self._shift_cnt is 2: |
| 102 if self._shift_color is ful.BLACK: |
| 103 self._shift_color = ful.BLUE |
| 104 else: |
| 105 self._shift_color = ful.BLACK |
| 106 self._shift_cnt = 0 |
| 107 context.set_source_color(self._shift_color) |
| 108 context.arc(_SHFL_XYR['x'], _SHFL_XYR['y'], _SHFL_XYR['r'], |
| 109 0.0, 2.0 * pi) |
| 110 context.fill() |
| 111 |
91 def pattern_expose(self, widget, event): | 112 def pattern_expose(self, widget, event): |
92 context = widget.window.cairo_create() | 113 context = widget.window.cairo_create() |
93 context.set_source_surface(self._leds_image, 0, 0) | 114 context.set_source_surface(self._leds_image, 0, 0) |
94 context.paint() | 115 context.paint() |
95 for led_index in range(_LED_COUNT): | 116 for led_index in range(_LED_COUNT): |
96 color = self._led_colors[led_index] | 117 color = self._led_colors[led_index] |
97 x_offset = _LED_X_OFFSETS[led_index] + _LED_RADIUS + 3 | 118 x_offset = _LED_X_OFFSETS[led_index] + _LED_RADIUS + 3 |
98 y_offset = _LED_Y_OFFSET + _LED_RADIUS + 3 | 119 y_offset = _LED_Y_OFFSET + _LED_RADIUS + 3 |
99 context.set_source_color(color) | 120 context.set_source_color(color) |
100 context.arc(x_offset, y_offset, _LED_RADIUS, 0.0, 2.0 * pi) | 121 context.arc(x_offset, y_offset, _LED_RADIUS, 0.0, 2.0 * pi) |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
134 eb.add(hbox) | 155 eb.add(hbox) |
135 return eb | 156 return eb |
136 | 157 |
137 def key_release_callback(self, widget, event): | 158 def key_release_callback(self, widget, event): |
138 if event.keyval == gtk.keysyms.Tab: | 159 if event.keyval == gtk.keysyms.Tab: |
139 self._status_map[self._current_pattern] = ful.FAILED | 160 self._status_map[self._current_pattern] = ful.FAILED |
140 self.goto_next_pattern() | 161 self.goto_next_pattern() |
141 elif event.keyval == gtk.keysyms.Return: | 162 elif event.keyval == gtk.keysyms.Return: |
142 self._status_map[self._current_pattern] = ful.PASSED | 163 self._status_map[self._current_pattern] = ful.PASSED |
143 self.goto_next_pattern() | 164 self.goto_next_pattern() |
| 165 elif self._current_pattern.startswith("shift") and \ |
| 166 event.keyval == gtk.keysyms.Shift_L: |
| 167 self._shift_cnt += 1 |
| 168 self._pattern_da.queue_draw() |
144 else: | 169 else: |
145 self._ft_state.exit_on_trigger(event) | 170 self._ft_state.exit_on_trigger(event) |
146 return True | 171 return True |
147 | 172 |
148 def register_callbacks(self, window): | 173 def register_callbacks(self, window): |
149 window.connect('key-release-event', self.key_release_callback) | 174 window.connect('key-release-event', self.key_release_callback) |
150 window.add_events(gdk.KEY_RELEASE_MASK) | 175 window.add_events(gdk.KEY_RELEASE_MASK) |
151 | 176 |
152 def run_once(self, | 177 def run_once(self, |
153 test_widget_size=None, | 178 test_widget_size=None, |
154 trigger_set=None, | 179 trigger_set=None, |
155 led_ctl_path=None): | 180 led_ctl_path=None): |
156 | 181 |
157 factory.log('%s run_once' % self.__class__) | 182 factory.log('%s run_once' % self.__class__) |
158 | 183 |
159 self._ft_state = ful.State(trigger_set) | 184 self._ft_state = ful.State(trigger_set) |
160 | 185 |
161 self._led_ctl_path = led_ctl_path | 186 self._led_ctl_path = led_ctl_path |
162 | 187 |
| 188 self._shift_color = ful.BLACK |
| 189 self._shift_cnt = 0 |
| 190 |
163 os.chdir(self.srcdir) | 191 os.chdir(self.srcdir) |
164 image = cairo.ImageSurface.create_from_png('leds.png') | 192 image = cairo.ImageSurface.create_from_png('leds.png') |
165 image_size = (image.get_width(), image.get_height()) | 193 image_size = (image.get_width(), image.get_height()) |
166 self._leds_image = image | 194 self._leds_image = image |
167 | 195 |
| 196 image = cairo.ImageSurface.create_from_png('shf.png') |
| 197 self._shf_image = image |
| 198 |
168 self._pattern_queue = [x for x in reversed(_PATTERN_LIST)] | 199 self._pattern_queue = [x for x in reversed(_PATTERN_LIST)] |
169 self._status_map = dict((n, ful.UNTESTED) for n, f in _PATTERN_LIST) | 200 self._status_map = dict((n, ful.UNTESTED) for n, f in _PATTERN_LIST) |
170 | 201 |
171 pattern_da = gtk.DrawingArea() | 202 pattern_da = gtk.DrawingArea() |
172 pattern_da.set_size_request(*image_size) | 203 pattern_da.set_size_request(*image_size) |
173 pattern_da.connect('expose_event', self.pattern_expose) | 204 pattern_da.connect('expose_event', self.pattern_expose) |
174 self._pattern_da = pattern_da | 205 self._pattern_da = pattern_da |
175 | 206 |
176 pattern_label = ful.make_label(_PATTERN_LABEL_STR) | 207 pattern_label = ful.make_label(_PATTERN_LABEL_STR) |
177 | 208 |
(...skipping 27 matching lines...) Expand all Loading... |
205 window_registration_callback=self.register_callbacks, | 236 window_registration_callback=self.register_callbacks, |
206 cleanup_callback=self.quit) | 237 cleanup_callback=self.quit) |
207 | 238 |
208 failed_set = set(name for name, status in self._status_map.items() | 239 failed_set = set(name for name, status in self._status_map.items() |
209 if status is not ful.PASSED) | 240 if status is not ful.PASSED) |
210 if failed_set: | 241 if failed_set: |
211 raise error.TestFail('some patterns failed (%s)' % | 242 raise error.TestFail('some patterns failed (%s)' % |
212 ', '.join(failed_set)) | 243 ', '.join(failed_set)) |
213 | 244 |
214 factory.log('%s run_once finished' % self.__class__) | 245 factory.log('%s run_once finished' % self.__class__) |
OLD | NEW |