2 * Copyright 2008, Google Inc.
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are
9 * * Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * * Redistributions in binary form must reproduce the above
12 * copyright notice, this list of conditions and the following disclaimer
13 * in the documentation and/or other materials provided with the
15 * * Neither the name of Google Inc. nor the names of its
16 * contributors may be used to endorse or promote products derived from
17 * this software without specific prior written permission.
19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
23 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32 // Standalone helper functions
33 // Mimic barebones nacl multimedia interface for standalone
34 // non-nacl applications. Mainly used as a debugging aid.
35 // * Only supported under Mac & Linux for now.
37 #ifndef NATIVE_CLIENT_TESTS_COMMON_STANDALONE_H_
38 #define NATIVE_CLIENT_TESTS_COMMON_STANDALONE_H_
40 #if defined(STANDALONE)
48 #define kNaClAudioBufferLength (16 * 1024)
49 #define kNaClVideoMinWindowSize (32)
50 #define kNaClVideoMaxWindowSize (4096)
53 /* subsystems represented as bitset, ie 0x01, 0x02, 0x04 */
54 NACL_SUBSYSTEM_VIDEO
= 0x01,
55 NACL_SUBSYSTEM_AUDIO
= 0x02,
58 /* NACL_SUBSYSTEM_EMBED is not supported for standalone */
60 NACL_SUBSYSTEM_EMBED
= 0
63 enum NaClAudioFormat
{
64 NACL_AUDIO_FORMAT_STEREO_44K
= 0,
65 NACL_AUDIO_FORMAT_STEREO_48K
,
69 NACL_EVENT_NOT_USED
= 0,
74 NACL_EVENT_MOUSE_MOTION
,
75 NACL_EVENT_MOUSE_BUTTON_DOWN
,
76 NACL_EVENT_MOUSE_BUTTON_UP
,
78 NACL_EVENT_UNSUPPORTED
84 NACL_KEY_BACKSPACE
= 8,
91 NACL_KEY_EXCLAIM
= 33,
92 NACL_KEY_QUOTEDBL
= 34,
95 NACL_KEY_AMPERSAND
= 38,
97 NACL_KEY_LEFTPAREN
= 40,
98 NACL_KEY_RIGHTPAREN
= 41,
99 NACL_KEY_ASTERISK
= 42,
103 NACL_KEY_PERIOD
= 46,
116 NACL_KEY_SEMICOLON
= 59,
118 NACL_KEY_EQUALS
= 61,
119 NACL_KEY_GREATER
= 62,
120 NACL_KEY_QUESTION
= 63,
122 NACL_KEY_LEFTBRACKET
= 91,
123 NACL_KEY_BACKSLASH
= 92,
124 NACL_KEY_RIGHTBRACKET
= 93,
126 NACL_KEY_UNDERSCORE
= 95,
127 NACL_KEY_BACKQUOTE
= 96,
154 NACL_KEY_DELETE
= 127,
155 NACL_KEY_WORLD_0
= 160,
156 NACL_KEY_WORLD_1
= 161,
157 NACL_KEY_WORLD_2
= 162,
158 NACL_KEY_WORLD_3
= 163,
159 NACL_KEY_WORLD_4
= 164,
160 NACL_KEY_WORLD_5
= 165,
161 NACL_KEY_WORLD_6
= 166,
162 NACL_KEY_WORLD_7
= 167,
163 NACL_KEY_WORLD_8
= 168,
164 NACL_KEY_WORLD_9
= 169,
165 NACL_KEY_WORLD_10
= 170,
166 NACL_KEY_WORLD_11
= 171,
167 NACL_KEY_WORLD_12
= 172,
168 NACL_KEY_WORLD_13
= 173,
169 NACL_KEY_WORLD_14
= 174,
170 NACL_KEY_WORLD_15
= 175,
171 NACL_KEY_WORLD_16
= 176,
172 NACL_KEY_WORLD_17
= 177,
173 NACL_KEY_WORLD_18
= 178,
174 NACL_KEY_WORLD_19
= 179,
175 NACL_KEY_WORLD_20
= 180,
176 NACL_KEY_WORLD_21
= 181,
177 NACL_KEY_WORLD_22
= 182,
178 NACL_KEY_WORLD_23
= 183,
179 NACL_KEY_WORLD_24
= 184,
180 NACL_KEY_WORLD_25
= 185,
181 NACL_KEY_WORLD_26
= 186,
182 NACL_KEY_WORLD_27
= 187,
183 NACL_KEY_WORLD_28
= 188,
184 NACL_KEY_WORLD_29
= 189,
185 NACL_KEY_WORLD_30
= 190,
186 NACL_KEY_WORLD_31
= 191,
187 NACL_KEY_WORLD_32
= 192,
188 NACL_KEY_WORLD_33
= 193,
189 NACL_KEY_WORLD_34
= 194,
190 NACL_KEY_WORLD_35
= 195,
191 NACL_KEY_WORLD_36
= 196,
192 NACL_KEY_WORLD_37
= 197,
193 NACL_KEY_WORLD_38
= 198,
194 NACL_KEY_WORLD_39
= 199,
195 NACL_KEY_WORLD_40
= 200,
196 NACL_KEY_WORLD_41
= 201,
197 NACL_KEY_WORLD_42
= 202,
198 NACL_KEY_WORLD_43
= 203,
199 NACL_KEY_WORLD_44
= 204,
200 NACL_KEY_WORLD_45
= 205,
201 NACL_KEY_WORLD_46
= 206,
202 NACL_KEY_WORLD_47
= 207,
203 NACL_KEY_WORLD_48
= 208,
204 NACL_KEY_WORLD_49
= 209,
205 NACL_KEY_WORLD_50
= 210,
206 NACL_KEY_WORLD_51
= 211,
207 NACL_KEY_WORLD_52
= 212,
208 NACL_KEY_WORLD_53
= 213,
209 NACL_KEY_WORLD_54
= 214,
210 NACL_KEY_WORLD_55
= 215,
211 NACL_KEY_WORLD_56
= 216,
212 NACL_KEY_WORLD_57
= 217,
213 NACL_KEY_WORLD_58
= 218,
214 NACL_KEY_WORLD_59
= 219,
215 NACL_KEY_WORLD_60
= 220,
216 NACL_KEY_WORLD_61
= 221,
217 NACL_KEY_WORLD_62
= 222,
218 NACL_KEY_WORLD_63
= 223,
219 NACL_KEY_WORLD_64
= 224,
220 NACL_KEY_WORLD_65
= 225,
221 NACL_KEY_WORLD_66
= 226,
222 NACL_KEY_WORLD_67
= 227,
223 NACL_KEY_WORLD_68
= 228,
224 NACL_KEY_WORLD_69
= 229,
225 NACL_KEY_WORLD_70
= 230,
226 NACL_KEY_WORLD_71
= 231,
227 NACL_KEY_WORLD_72
= 232,
228 NACL_KEY_WORLD_73
= 233,
229 NACL_KEY_WORLD_74
= 234,
230 NACL_KEY_WORLD_75
= 235,
231 NACL_KEY_WORLD_76
= 236,
232 NACL_KEY_WORLD_77
= 237,
233 NACL_KEY_WORLD_78
= 238,
234 NACL_KEY_WORLD_79
= 239,
235 NACL_KEY_WORLD_80
= 240,
236 NACL_KEY_WORLD_81
= 241,
237 NACL_KEY_WORLD_82
= 242,
238 NACL_KEY_WORLD_83
= 243,
239 NACL_KEY_WORLD_84
= 244,
240 NACL_KEY_WORLD_85
= 245,
241 NACL_KEY_WORLD_86
= 246,
242 NACL_KEY_WORLD_87
= 247,
243 NACL_KEY_WORLD_88
= 248,
244 NACL_KEY_WORLD_89
= 249,
245 NACL_KEY_WORLD_90
= 250,
246 NACL_KEY_WORLD_91
= 251,
247 NACL_KEY_WORLD_92
= 252,
248 NACL_KEY_WORLD_93
= 253,
249 NACL_KEY_WORLD_94
= 254,
250 NACL_KEY_WORLD_95
= 255,
263 NACL_KEY_KP_PERIOD
= 266,
264 NACL_KEY_KP_DIVIDE
= 267,
265 NACL_KEY_KP_MULTIPLY
= 268,
266 NACL_KEY_KP_MINUS
= 269,
267 NACL_KEY_KP_PLUS
= 270,
268 NACL_KEY_KP_ENTER
= 271,
269 NACL_KEY_KP_EQUALS
= 272,
271 /* arrow & insert/delete pad */
274 NACL_KEY_RIGHT
= 275,
276 NACL_KEY_INSERT
= 277,
279 NACL_KEY_PAGEUP
= 280,
280 NACL_KEY_PAGEDOWN
= 281,
300 NACL_KEY_NUMLOCK
= 300,
301 NACL_KEY_CAPSLOCK
= 301,
302 NACL_KEY_SCROLLOCK
= 302,
303 NACL_KEY_RSHIFT
= 303,
304 NACL_KEY_LSHIFT
= 304,
305 NACL_KEY_RCTRL
= 305,
306 NACL_KEY_LCTRL
= 306,
309 NACL_KEY_RMETA
= 309,
310 NACL_KEY_LMETA
= 310,
311 NACL_KEY_LSUPER
= 311,
312 NACL_KEY_RSUPER
= 312,
314 NACL_KEY_COMPOSE
= 314,
318 NACL_KEY_PRINT
= 316,
319 NACL_KEY_SYSREQ
= 317,
320 NACL_KEY_BREAK
= 318,
322 NACL_KEY_POWER
= 320,
326 /* Add any other keys here */
331 /* mods represented as bitset */
332 NACL_KEYMOD_NONE
= 0x0000,
333 NACL_KEYMOD_LSHIFT
= 0x0001,
334 NACL_KEYMOD_RSHIFT
= 0x0002,
335 NACL_KEYMOD_LCTRL
= 0x0040,
336 NACL_KEYMOD_RCTRL
= 0x0080,
337 NACL_KEYMOD_LALT
= 0x0100,
338 NACL_KEYMOD_RALT
= 0x0200,
339 NACL_KEYMOD_LMETA
= 0x0400,
340 NACL_KEYMOD_RMETA
= 0x0800,
341 NACL_KEYMOD_NUM
= 0x1000,
342 NACL_KEYMOD_CAPS
= 0x2000,
343 NACL_KEYMOD_MODE
= 0x4000,
344 NACL_KEYMOD_RESERVED
= 0x8000
347 enum NaClMouseButton
{
348 NACL_MOUSE_BUTTON_LEFT
= 1,
349 NACL_MOUSE_BUTTON_MIDDLE
= 2,
350 NACL_MOUSE_BUTTON_RIGHT
= 3,
351 NACL_MOUSE_SCROLL_UP
= 4,
352 NACL_MOUSE_SCROLL_DOWN
= 5
355 enum NaClMouseState
{
356 NACL_MOUSE_STATE_LEFT_BUTTON_PRESSED
= 1,
357 NACL_MOUSE_STATE_MIDDLE_BUTTON_PRESSED
= 2,
358 NACL_MOUSE_STATE_RIGHT_BUTTON_PRESSED
= 4
362 NACL_ACTIVE_MOUSE
= 1,
363 NACL_ACTIVE_INPUT_FOCUS
= 2,
364 NACL_ACTIVE_APPLICATION
= 4
367 struct NaClMultimediaKeySymbol
{
374 struct NaClMultimediaActiveEvent
{
380 struct NaClMultimediaKeyboardEvent
{
384 struct NaClMultimediaKeySymbol keysym
;
387 struct NaClMultimediaMouseMotionEvent
{
397 struct NaClMultimediaMouseButtonEvent
{
406 struct NaClMultimediaQuitEvent
{
410 union NaClMultimediaEvent
{
412 struct NaClMultimediaActiveEvent active
;
413 struct NaClMultimediaKeyboardEvent key
;
414 struct NaClMultimediaMouseMotionEvent motion
;
415 struct NaClMultimediaMouseButtonEvent button
;
416 struct NaClMultimediaQuitEvent quit
;
419 extern int nacl_multimedia_init(int subsystems
);
420 extern int nacl_multimedia_shutdown();
422 extern int nacl_multimedia_is_embedded(int *embedded
);
423 extern int nacl_multimedia_get_embed_size(int *width
, int *height
);
424 extern int nacl_video_init(int width
, int height
);
425 extern int nacl_video_shutdown();
426 extern int nacl_video_update(const void *data
);
427 extern int nacl_video_poll_event(union NaClMultimediaEvent
*event
);
428 extern int nacl_audio_init(enum NaClAudioFormat format
,
429 int desired_samples
, int *obtained_samples
);
430 extern int nacl_audio_shutdown();
431 extern int nacl_audio_stream(const void *data
, size_t *size
);
438 #endif // NATIVE_CLIENT_TESTS_COMMON_STANDALONE_H_