2 * Copyright © 2012 Intel Corporation
3 * Copyright © 2013 TOYOTA MOTOR CORPORATION
5 * Permission to use, copy, modify, distribute, and sell this software and its
6 * documentation for any purpose is hereby granted without fee, provided that
7 * the above copyright notice appear in all copies and that both that copyright
8 * notice and this permission notice appear in supporting documentation, and
9 * that the name of the copyright holders not be used in advertising or
10 * publicity pertaining to distribution of the software without specific,
11 * written prior permission. The copyright holders make no representations
12 * about the suitability of this software for any purpose. It is provided "as
13 * is" without express or implied warranty.
15 * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
16 * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
17 * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
18 * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
19 * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
20 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
24 * @brief HomeScreen for unit test of Weston(Wayland) IVI plugins
36 #include <sys/ioctl.h>
40 #include <sys/types.h>
45 #include <linux/input.h>
46 #include <wayland-client.h>
47 #include "ico_window_mgr-client-protocol.h"
48 #include "ico_input_mgr-client-protocol.h"
49 #include "ico_input_mgr.h"
50 #include "test-common.h"
53 #define SHM_SIZE (16*1024*1024)
54 #define MAX_CON_NAME 127
58 struct surface_name *next;
61 char appid[MAX_APPID];
71 struct wl_display *display;
72 struct wl_registry *registry;
73 struct wl_compositor *compositor;
74 struct wl_shell *shell;
75 struct ico_window_mgr *ico_window_mgr;
76 struct ico_input_mgr_control *ico_input_mgr;
77 struct ico_input_mgr_device *ico_input_device;
78 struct ico_exinput *ico_exinput;
81 struct output *output[MAX_OUTPUT];
82 struct surface *surface;
83 struct surface_name *surface_name;
84 struct surface_name *bgsurface_name;
90 int surface_destroyed;
92 int visible_on_create;
93 char connect[MAX_CON_NAME+1];
97 struct display *display;
99 struct wl_pointer *pointer;
100 struct wl_keyboard *keyboard;
101 struct wl_touch *touch;
103 uint32_t button_mask;
104 struct surface *pointer_focus;
105 struct surface *keyboard_focus;
106 uint32_t last_key, last_key_state;
110 struct display *display;
111 struct wl_output *output;
117 struct display *display;
118 struct wl_surface *surface;
119 struct wl_shell_surface *shell_surface;
120 struct output *output;
124 EGLSurface egl_surface;
127 static void clear_surface(struct display *display);
130 pointer_handle_enter(void *data, struct wl_pointer *pointer,
131 uint32_t serial, struct wl_surface *surface,
132 wl_fixed_t x, wl_fixed_t y)
134 struct input *input = data;
136 input->pointer_focus = wl_surface_get_user_data(surface);
137 input->x = wl_fixed_to_double(x);
138 input->y = wl_fixed_to_double(y);
139 print_log("HOMESCREEN: got pointer enter (%d,%d), surface %p",
140 (int)input->x, (int)input->y, surface);
144 pointer_handle_leave(void *data, struct wl_pointer *pointer,
145 uint32_t serial, struct wl_surface *surface)
147 struct input *input = data;
149 input->pointer_focus = NULL;
151 print_log("HOMESCREEN: got pointer leave, surface %p", surface);
155 pointer_handle_motion(void *data, struct wl_pointer *pointer,
156 uint32_t time, wl_fixed_t x, wl_fixed_t y)
158 struct input *input = data;
160 input->x = wl_fixed_to_double(x);
161 input->y = wl_fixed_to_double(y);
163 print_log("HOMESCREEN: got pointer motion (%d,%d)", (int)input->x, (int)input->y);
167 pointer_handle_button(void *data, struct wl_pointer *pointer,
168 uint32_t serial, uint32_t time, uint32_t button, uint32_t state_w)
170 struct input *input = data;
172 enum wl_pointer_button_state state = state_w;
174 bit = 1 << (button - BTN_LEFT);
175 if (state == WL_POINTER_BUTTON_STATE_PRESSED)
176 input->button_mask |= bit;
178 input->button_mask &= ~bit;
179 print_log("HOMESCREEN: got pointer button %u %u", button, state_w);
183 pointer_handle_axis(void *data, struct wl_pointer *pointer,
184 uint32_t time, uint32_t axis, wl_fixed_t value)
186 print_log("HOMESCREEN: got pointer axis %u %d", axis, value);
190 keyboard_handle_keymap(void *data, struct wl_keyboard *keyboard,
191 uint32_t format, int fd, uint32_t size)
194 print_log("HOMESCREEN: got keyboard keymap");
198 keyboard_handle_enter(void *data, struct wl_keyboard *keyboard,
199 uint32_t serial, struct wl_surface *surface, struct wl_array *keys)
201 struct input *input = data;
203 input->keyboard_focus = wl_surface_get_user_data(surface);
204 print_log("HOMESCREEN: got keyboard enter, surface %p", surface);
208 keyboard_handle_leave(void *data, struct wl_keyboard *keyboard,
209 uint32_t serial, struct wl_surface *surface)
211 struct input *input = data;
213 input->keyboard_focus = NULL;
214 print_log("HOMESCREEN: got keyboard leave, surface %p", surface);
218 keyboard_handle_key(void *data, struct wl_keyboard *keyboard,
219 uint32_t serial, uint32_t time, uint32_t key, uint32_t state)
221 struct input *input = data;
223 input->last_key = key;
224 input->last_key_state = state;
226 print_log("HOMESCREEN: got keyboard key %u %u", key, state);
230 keyboard_handle_modifiers(void *data, struct wl_keyboard *keyboard,
231 uint32_t serial, uint32_t mods_depressed,
232 uint32_t mods_latched, uint32_t mods_locked, uint32_t group)
234 print_log("HOMESCREEN: got keyboard modifier");
238 touch_handle_down(void *data, struct wl_touch *wl_touch, uint32_t serial, uint32_t time,
239 struct wl_surface *surface, int32_t id, wl_fixed_t x, wl_fixed_t y)
241 print_log("HOMESCREEN: got touch down %d (%d,%d)", id, x/256, y/256);
245 touch_handle_up(void *data, struct wl_touch *wl_touch, uint32_t serial, uint32_t time,
248 print_log("HOMESCREEN: got touch up %d", id);
252 touch_handle_motion(void *data, struct wl_touch *wl_touch, uint32_t time,
253 int32_t id, wl_fixed_t x, wl_fixed_t y)
255 print_log("HOMESCREEN: got touch motion %d (%d,%d)", id, x/256, y/256);
259 touch_handle_frame(void *data, struct wl_touch *wl_touch)
261 print_log("HOMESCREEN: got touch frame");
265 touch_handle_cancel(void *data, struct wl_touch *wl_touch)
267 print_log("HOMESCREEN: got touch cancel");
270 static const struct wl_pointer_listener pointer_listener = {
271 pointer_handle_enter,
272 pointer_handle_leave,
273 pointer_handle_motion,
274 pointer_handle_button,
278 static const struct wl_keyboard_listener keyboard_listener = {
279 keyboard_handle_keymap,
280 keyboard_handle_enter,
281 keyboard_handle_leave,
283 keyboard_handle_modifiers,
286 static const struct wl_touch_listener touch_listener = {
295 seat_handle_capabilities(void *data, struct wl_seat *seat,
296 enum wl_seat_capability caps)
298 struct input *input = data;
300 print_log("HOMESCREEN: seat_handle_capabilities caps=%x", caps);
302 if ((caps & WL_SEAT_CAPABILITY_POINTER) && !input->pointer) {
303 input->pointer = wl_seat_get_pointer(seat);
304 print_log("HOMESCREEN: seat_handle_capabilities add pointer=%x", (int)input->pointer);
305 wl_pointer_set_user_data(input->pointer, input);
306 wl_pointer_add_listener(input->pointer, &pointer_listener, input);
308 else if (!(caps & WL_SEAT_CAPABILITY_POINTER) && input->pointer) {
309 print_log("HOMESCREEN: seat_handle_capabilities delete pointer");
310 wl_pointer_destroy(input->pointer);
311 input->pointer = NULL;
314 if ((caps & WL_SEAT_CAPABILITY_KEYBOARD) && !input->keyboard) {
315 input->keyboard = wl_seat_get_keyboard(seat);
316 print_log("HOMESCREEN: seat_handle_capabilities add keyboard=%x", (int)input->keyboard);
317 wl_keyboard_set_user_data(input->keyboard, input);
318 wl_keyboard_add_listener(input->keyboard, &keyboard_listener, input);
320 else if (!(caps & WL_SEAT_CAPABILITY_KEYBOARD) && input->keyboard) {
321 print_log("HOMESCREEN: seat_handle_capabilities delete keyboard");
322 wl_keyboard_destroy(input->keyboard);
323 input->keyboard = NULL;
326 if ((caps & WL_SEAT_CAPABILITY_TOUCH) && !input->touch) {
327 input->touch = wl_seat_get_touch(seat);
328 print_log("HOMESCREEN: seat_handle_capabilities add touch=%x", (int)input->touch);
329 wl_touch_set_user_data(input->touch, input);
330 wl_touch_add_listener(input->touch, &touch_listener, input);
332 else if (!(caps & WL_SEAT_CAPABILITY_TOUCH) && input->touch) {
333 print_log("HOMESCREEN: seat_handle_capabilities delete touch");
334 wl_touch_destroy(input->touch);
339 static const struct wl_seat_listener seat_listener = {
340 seat_handle_capabilities,
344 surface_enter(void *data, struct wl_surface *wl_surface, struct wl_output *output)
346 struct surface *surface = data;
348 surface->output = wl_output_get_user_data(output);
350 print_log("HOMESCREEN: got surface enter, output %p", surface->output);
354 surface_leave(void *data, struct wl_surface *wl_surface, struct wl_output *output)
356 struct surface *surface = data;
358 surface->output = NULL;
360 print_log("HOMESCREEN: got surface leave, output %p",
361 wl_output_get_user_data(output));
364 static const struct wl_surface_listener surface_listener = {
370 create_surface(struct display *display, const char *title)
372 struct surface *surface;
375 surface = malloc(sizeof *surface);
377 surface->display = display;
378 display->surface = surface;
379 surface->surface = wl_compositor_create_surface(display->compositor);
380 wl_surface_add_listener(surface->surface, &surface_listener, surface);
382 if (display->shell) {
383 surface->shell_surface =
384 wl_shell_get_shell_surface(display->shell, surface->surface);
385 if (surface->shell_surface) {
386 wl_shell_surface_set_toplevel(surface->shell_surface);
387 wl_shell_surface_set_title(surface->shell_surface, title);
390 wl_display_flush(display->display);
392 id = wl_proxy_get_id((struct wl_proxy *) surface->surface);
393 print_log("HOMESCREEN: create surface = %d", id);
395 poll(NULL, 0, 100); /* Wait for next frame where we'll get events. */
397 wl_display_roundtrip(display->display);
399 surface->dpy = opengl_init(display->display, &surface->conf, &surface->ctx);
401 surface->egl_surface = opengl_create_window(display->display, surface->surface,
402 surface->dpy, surface->conf,
403 surface->ctx, display->init_width,
404 display->init_height,
405 display->init_color);
406 clear_surface(display);
407 print_log("HOMESCREEN: created egl_surface %08x", (int)surface->egl_surface);
412 clear_surface(struct display *display)
414 if (! display->surface) {
415 create_surface(display, "HomeScreen-BG");
418 opengl_clear_window(display->init_color);
419 opengl_swap_buffer(display->display,
420 display->surface->dpy, display->surface->egl_surface);
425 output_handle_geometry(void *data, struct wl_output *wl_output, int x, int y,
426 int physical_width, int physical_height, int subpixel,
427 const char *make, const char *model, int32_t transform)
429 struct output *output = data;
431 print_log("HOMESCREEN: Event[handle_geometry] %08x x/y=%d/%d p.w/h=%d/%d trans=%d",
432 (int)wl_output, x, y, physical_width, physical_height, transform);
439 output_handle_mode(void *data, struct wl_output *wl_output, uint32_t flags,
440 int width, int height, int refresh)
442 struct output *output = data;
444 print_log("HOMESCREEN: Event[handle_mode] %08x x/y=%d/%d flags=%08x refresh=%d",
445 (int)wl_output, width, height, flags, refresh);
447 if (flags & WL_OUTPUT_MODE_CURRENT) {
448 struct display *display = output->display;
450 output->width = width;
451 output->height = height;
453 display->init_width = width;
454 display->init_height = height;
456 if (display->bgsurface_name) {
457 /* ico_window_mgr_set_positionsize(display->ico_window_mgr,
458 display->bgsurface_name->surfaceid,
459 0, 0, 0, 0, width, height); */
461 else if (display->bg_created == 0) {
462 display->bg_created = 9;
463 create_surface(display, "HomeScreen-BG");
468 static const struct wl_output_listener output_listener = {
469 output_handle_geometry,
474 search_surface(struct display *display, const char *surfname)
476 struct surface_name *p;
478 p = display->surface_name;
480 if (strcmp(p->appid, surfname) == 0) break;
490 static struct surface_name *
491 search_surfacename(struct display *display, const char *surfname)
493 struct surface_name *p;
495 p = display->surface_name;
497 if (strcmp(p->appid, surfname) == 0) break;
501 print_log("HOMESCREEN: app(%s) dose not exist", surfname);
507 static struct surface_name *
508 search_surfaceid(struct display *display, const int surfaceid)
510 struct surface_name *p;
512 p = display->surface_name;
514 if (p->surfaceid == surfaceid) {
525 window_created(void *data, struct ico_window_mgr *ico_window_mgr,
526 uint32_t surfaceid, const char *winname, int32_t pid,
527 const char *appid, int32_t layertype)
529 struct display *display = data;
530 struct surface_name *p;
531 struct surface_name *fp;
533 display->surface_created = 1;
534 p = display->surface_name;
537 if (p->surfaceid == (int)surfaceid) break;
542 print_log("HOMESCREEN: Event[window_created] "
543 "surface=%08x(app=%s,name=%s,type=%x) exist",
544 (int)surfaceid, appid, winname, layertype);
547 print_log("HOMESCREEN: Event[window_created] "
548 "new surface=%08x(app=%s) winname=%s layertype=%x",
549 (int)surfaceid, appid, winname, layertype);
550 p = malloc(sizeof(struct surface_name));
554 memset(p, 0, sizeof(struct surface_name));
559 display->surface_name = p;
562 p->surfaceid = surfaceid;
564 strncpy(p->appid, appid, MAX_APPID-1);
566 /* Set default size and show */
568 /* ico_window_mgr_set_positionsize(display->ico_window_mgr, surfaceid,
569 0, p->x, p->y, p->width, p->height, 0); */
572 print_log("HOMESCREEN: Created window[%08x] (app=%s)", (int)surfaceid, appid);
574 if (strncasecmp(appid, "test-homescreen", 15) == 0) {
575 display->bgsurface_name = p;
576 if (display->bg_created == 1) {
577 display->bg_created = 9;
578 /* ico_window_mgr_set_positionsize(display->ico_window_mgr, surfaceid,
580 display->init_width, display->init_height, 0);*/
582 /* ico_window_mgr_set_visible(display->ico_window_mgr, surfaceid, 1, 0, 0); */
583 print_log("HOMESCREEN: Created window[%08x] (app=%s) Visible",
584 (int)surfaceid, appid);
590 window_name(void *data, struct ico_window_mgr *ico_window_mgr,
591 uint32_t surfaceid, const char *winname)
593 print_log("HOMESCREEN: Window Name[%08x] (name=%s)", (int)surfaceid, winname);
597 window_destroyed(void *data, struct ico_window_mgr *ico_window_mgr, uint32_t surfaceid)
599 struct display *display = data;
600 struct surface_name *p;
601 struct surface_name *fp;
603 display->surface_destroyed = 1;
604 p = search_surfaceid(display, (int)surfaceid);
606 print_log("HOMESCREEN: Event[window_destroyed] surface=%08x dose not exist",
610 print_log("HOMESCREEN: Event[window_destroyed] surface=%08x", (int)surfaceid);
611 if (p == display->surface_name) {
612 display->surface_name = p->next;
615 fp = display->surface_name;
629 window_visible(void *data, struct ico_window_mgr *ico_window_mgr,
630 uint32_t surfaceid, int32_t visible, int32_t raise, int32_t hint)
632 struct display *display = data;
633 struct surface_name *p;
635 p = search_surfaceid(display, (int)surfaceid);
637 print_log("HOMESCREEN: Event[window_visible] surface=%08x dose not exist",
641 print_log("HOMESCREEN: Event[window_visible] surface=%08x "
642 "visible=%d raise=%d hint=%d", (int)surfaceid, visible, raise, hint);
643 p->visible = visible;
645 /* ico_window_mgr_set_visible(display->ico_window_mgr, surfaceid,
646 visible, ICO_WINDOW_MGR_V_NOCHANGE, 0); */
652 window_configure(void *data, struct ico_window_mgr *ico_window_mgr,
653 uint32_t surfaceid, uint32_t node, int32_t layertype, uint32_t layer,
654 int32_t x, int32_t y, int32_t width, int32_t height, int32_t hint)
656 struct display *display = data;
657 struct surface_name *p;
659 print_log("HOMESCREEN: Event[window_configure] surface=%08x "
660 "node=%x layer=%x.%x x/y=%d/%d w/h=%d/%d hint=%d",
661 (int)surfaceid, node, layertype, layer, x, y, width, height, hint);
663 p = search_surfaceid(display, (int)surfaceid);
665 print_log("HOMESCREEN: Event[window_configure] surface=%08x dose not exist",
674 window_layer_visible(void *data, struct ico_window_mgr *ico_window_mgr,
675 uint32_t layer, int32_t visible)
677 print_log("HOMESCREEN: Event[layer_visible]layer=%x visible=%d",
678 (int)layer, visible);
682 window_active(void *data, struct ico_window_mgr *ico_window_mgr,
683 uint32_t surfaceid, const int32_t active)
685 print_log("HOMESCREEN: Event[window_active] surface=%08x acive=%d",
686 (int)surfaceid, (int)active);
687 if ((surfaceid & 0x0000ffff) == 0x0001) {
688 /* ico_window_mgr_set_visible(ico_window_mgr, surfaceid,
689 ICO_WINDOW_MGR_V_NOCHANGE, 0, 0); */
694 window_surfaces(void *data, struct ico_window_mgr *ico_window_mgr,
695 const char *appid, int32_t pid, struct wl_array *surfaces)
697 print_log("HOMESCREEN: Event[app_surfaces] app=%s pid=%d", appid, pid);
701 window_map(void *data, struct ico_window_mgr *ico_window_mgr,
702 int32_t event, uint32_t surfaceid, uint32_t type, uint32_t target,
703 int32_t width, int32_t height, int32_t stride, uint32_t format)
705 struct display *display = data;
709 case ICO_WINDOW_MGR_MAP_SURFACE_EVENT_CONTENTS:
710 strcpy(sevt, "Contents"); break;
711 case ICO_WINDOW_MGR_MAP_SURFACE_EVENT_RESIZE:
712 strcpy(sevt, "Resize"); break;
713 case ICO_WINDOW_MGR_MAP_SURFACE_EVENT_MAP:
714 strcpy(sevt, "Map"); break;
715 case ICO_WINDOW_MGR_MAP_SURFACE_EVENT_UNMAP:
716 strcpy(sevt, "Unmap"); break;
717 case ICO_WINDOW_MGR_MAP_SURFACE_EVENT_ERROR:
718 sprintf(sevt, "Error %d", type); break;
720 sprintf(sevt, "??%d??", event); break;
722 print_log("HOMESCREEN: Event[map_surface] ev=%s(%d) surf=%08x type=%d target=%x "
723 "w/h/s/f=%d/%d/%d/%x",
724 sevt, event, (int)surfaceid, type, target, width, height, stride, format);
725 /* if ((event == ICO_WINDOW_MGR_MAP_SURFACE_EVENT_MAP) ||
726 (event == ICO_WINDOW_MGR_MAP_SURFACE_EVENT_CONTENTS)) { */
727 opengl_thumbnail(display->display, surfaceid, display->surface->dpy,
728 display->surface->conf, display->surface->egl_surface,
729 display->surface->ctx, target, width, height, stride, format);
735 static const struct ico_window_mgr_listener window_mgr_listener = {
742 window_layer_visible,
749 cb_input_capabilities(void *data, struct ico_exinput *ico_exinput,
750 const char *device, int32_t type, const char *swname, int32_t input,
751 const char *codename, int32_t code)
753 print_log("HOMESCREEN: Event[input_capabilities] device=%s type=%d sw=%s input=%d "
754 "code=%s[%d]", device, type, swname, input, codename, code);
758 cb_input_code(void *data, struct ico_exinput *ico_exinput,
759 const char *device, int32_t input, const char *codename, int32_t code)
761 print_log("HOMESCREEN: Event[input_code] device=%s input=%d code=%s[%d]",
762 device, input, codename, code);
766 cb_input_input(void *data, struct ico_exinput *ico_exinput, uint32_t time,
767 const char *device, int32_t input, int32_t code, int32_t state)
769 print_log("HOMESCREEN: Event[input_input] device=%s input=%d code=%d state=%d",
770 device, input, code, state);
773 static const struct ico_exinput_listener exinput_listener = {
774 cb_input_capabilities,
780 cb_input_regions(void *data, struct ico_input_mgr_device *ico_input_mgr_device,
781 struct wl_array *regions)
783 struct ico_uifw_input_region *region;
789 wl_array_for_each(region, regions) {
792 print_log("HOMESCREEN: Event[input_regions] number of regions=%d", n);
794 wl_array_for_each(region, regions) {
796 switch (region->change) {
797 case ICO_INPUT_MGR_DEVICE_REGION_ADD:
798 strcpy(schange, "Add");
800 case ICO_INPUT_MGR_DEVICE_REGION_REMOVE:
801 strcpy(schange, "Remove");
803 case ICO_INPUT_MGR_DEVICE_REGION_REMOVEALL:
804 strcpy(schange, "RemoveAll");
807 sprintf(schange, "?%d?", region->change);
810 print_log("HOMESCREEN:%2d. %s %d.%08x(%d/%d) %d/%d-%d/%d "
811 "hot=%d/%d cur=%d/%d-%d/%d attr=%x",
812 n, schange, region->node, region->surfaceid, region->surface_x,
813 region->surface_y, region->x, region->y, region->width,
814 region->height, region->hotspot_x, region->hotspot_y,
815 region->cursor_x, region->cursor_y, region->cursor_width,
816 region->cursor_height, region->attr);
820 print_log("HOMESCREEN: Event[input_regions] no region");
824 static const struct ico_input_mgr_device_listener device_listener = {
830 handle_global(void *data, struct wl_registry *registry, uint32_t id,
831 const char *interface, uint32_t version)
833 struct display *display = data;
835 struct output *output;
837 print_log("HOMESCREEN: handle_global: interface=<%s> id=%d", interface, (int)id);
839 if (strcmp(interface, "wl_compositor") == 0) {
840 display->compositor =
841 wl_registry_bind(display->registry, id, &wl_compositor_interface, 1);
843 else if (strcmp(interface, "wl_seat") == 0) {
844 input = calloc(1, sizeof *input);
845 input->display = display;
846 input->seat = wl_registry_bind(display->registry, id, &wl_seat_interface, 1);
847 input->pointer_focus = NULL;
848 input->keyboard_focus = NULL;
850 wl_seat_add_listener(input->seat, &seat_listener, input);
851 display->input = input;
853 else if (strcmp(interface, "wl_output") == 0) {
854 if (display->num_output < MAX_OUTPUT) {
855 output = malloc(sizeof *output);
856 output->display = display;
857 output->output = wl_registry_bind(display->registry, id, &wl_output_interface, 1);
858 wl_output_add_listener(output->output, &output_listener, output);
859 display->output[display->num_output] = output;
861 print_log("HOMESCREEN: created output[%d] global %p",
862 display->num_output, display->output[display->num_output]);
863 display->num_output ++;
866 else if (strcmp(interface, "wl_shell") == 0) {
868 wl_registry_bind(display->registry, id, &wl_shell_interface, 1);
870 else if (strcmp(interface, "ico_window_mgr") == 0) {
871 display->ico_window_mgr =
872 wl_registry_bind(display->registry, id, &ico_window_mgr_interface, 1);
873 /* ico_window_mgr_add_listener(display->ico_window_mgr, &window_mgr_listener, display); */
874 print_log("HOMESCREEN: created window_mgr global %p", display->ico_window_mgr);
876 /* ico_window_mgr_declare_manager(display->ico_window_mgr, 1); */
878 else if (strcmp(interface, "ico_input_mgr_control") == 0) {
879 display->ico_input_mgr = wl_registry_bind(display->registry, id,
880 &ico_input_mgr_control_interface, 1);
881 print_log("HOMESCREEN: created input_mgr global %p", display->ico_input_mgr);
883 else if (strcmp(interface, "ico_input_mgr_device") == 0) {
884 display->ico_input_device = wl_registry_bind(display->registry, id,
885 &ico_input_mgr_device_interface, 1);
886 ico_input_mgr_device_add_listener(display->ico_input_device,
887 &device_listener, display);
888 print_log("HOMESCREEN: created input_device global %p", display->ico_input_device);
890 else if (strcmp(interface, "ico_exinput") == 0) {
891 display->ico_exinput =
892 wl_registry_bind(display->registry, id, &ico_exinput_interface, 1);
893 ico_exinput_add_listener(display->ico_exinput, &exinput_listener, display);
894 print_log("HOMESCREEN: created exinput global %p", display->ico_exinput);
896 /* ico_window_mgr_declare_manager(display->ico_window_mgr, 1); */
898 display->bg_created = 1;
899 create_surface(display, "HomeScreen-BG");
903 static const struct wl_registry_listener registry_listener = {
908 launch_app(struct display *display, char *buf)
912 display->surface_created = 0;
913 display->surface_destroyed = 0;
914 snprintf(sbuf, sizeof(sbuf)-1, "%s &", skip_spaces(buf));
915 if (system(sbuf) < 0) {
916 print_log("HOMESCREEN: Can not launch application[%s]", sbuf);
919 sleep_with_wayland(display->display, 500);
924 kill_app(struct display *display, char *buf)
928 struct surface_name *p;
929 struct surface_name *fp;
931 narg = pars_command(buf, args, 10);
933 p = search_surfacename(display, args[0]);
935 print_log("HOMESCREEN: kill[%s] Application dose not exist", args[0]);
937 else if (kill(p->pid, SIGINT) < 0) {
938 print_log("HOMESCREEN: kill[%s.%d] Application dose not exist",
942 sleep_with_wayland(display->display, 300);
943 p = search_surfacename(display, args[0]);
944 if ((p != NULL) && (kill(p->pid, SIGTERM) >= 0)) {
945 sleep_with_wayland(display->display, 200);
946 p = search_surfacename(display, args[0]);
948 kill(p->pid, SIGKILL);
949 sleep_with_wayland(display->display, 200);
953 p = search_surfacename(display, args[0]);
955 if (p == display->surface_name) {
956 display->surface_name = p->next;
959 fp = display->surface_name;
971 print_log("HOMESCREEN: kill command[kill appid] has no argument");
976 layer_surface(struct display *display, char *buf)
983 narg = pars_command(buf, args, 10);
985 surfaceid = search_surface(display, args[0]);
986 layerid = strtol(args[1], (char **)0, 0);
987 if ((surfaceid >= 0) && (layerid >= 0)) {
988 print_log("HOMESCREEN: set_window_layer(%s,%08x)",
989 args[0], surfaceid, layerid);
990 /* ico_window_mgr_set_window_layer(display->ico_window_mgr, surfaceid, layerid); */
993 print_log("HOMESCREEN: Unknown surface(%s) at layer command", args[0]);
997 print_log("HOMESCREEN: layer command[layer appid layerid] has no argument");
1002 positionsize_surface(struct display *display, char *buf)
1005 struct surface_name *p;
1008 int x, y, width, height;
1009 /* int anima = 0; */
1012 narg = pars_command(buf, args, 10);
1014 surfaceid = search_surface(display, args[0]);
1015 p = search_surfacename(display, args[0]);
1016 x = strtol(args[1], (char **)0, 0);
1017 y = strtol(args[2], (char **)0, 0);
1018 width = strtol(args[3], (char **)0, 0);
1019 height = strtol(args[4], (char **)0, 0);
1021 node = strtol(args[5], (char **)0, 0);
1030 /* anima = strtol(args[6], (char **)0, 0); */
1032 if ((surfaceid >= 0) && (x >= 0) && (y >=0) && (width >= 0) && (height >=0)) {
1033 print_log("HOMESCREEN: set_positionsize(%s,%08x,%d,%d,%d,%d,%d)",
1034 args[0], surfaceid, node, x, y, width, height);
1035 /* ico_window_mgr_set_positionsize(display->ico_window_mgr, surfaceid,
1036 node, x, y, width, height, anima); */
1039 print_log("HOMESCREEN: Unknown surface(%s) at positionsize command", args[0]);
1043 print_log("HOMESCREEN: positionsize command"
1044 "[positionsize appid x y width heigh node anima] has no argument");
1049 move_surface(struct display *display, char *buf)
1052 struct surface_name *p;
1059 narg = pars_command(buf, args, 10);
1061 surfaceid = search_surface(display, args[0]);
1062 p = search_surfacename(display, args[0]);
1063 x = strtol(args[1], (char **)0, 0);
1064 y = strtol(args[2], (char **)0, 0);
1066 node = strtol(args[3], (char **)0, 0);
1068 if (p) node = p->node;
1071 if (p) p->node = node;
1077 anima = strtol(args[4], (char **)0, 0);
1080 if ((surfaceid >= 0) && (x >= 0) && (y >=0)) {
1081 print_log("HOMESCREEN: move(%s,%08x,%d.%d,%d anima=%d)", args[0], surfaceid,
1083 /* ico_window_mgr_set_positionsize(display->ico_window_mgr, surfaceid,
1085 ICO_WINDOW_MGR_V_NOCHANGE,
1086 ICO_WINDOW_MGR_V_NOCHANGE, anima); */
1089 print_log("HOMESCREEN: Unknown surface(%s) at move command", args[0]);
1093 print_log("HOMESCREEN: move command[positionsize appid x y node anima] has no argument");
1098 resize_surface(struct display *display, char *buf)
1101 struct surface_name *p;
1108 narg = pars_command(buf, args, 10);
1110 surfaceid = search_surface(display, args[0]);
1111 p = search_surfacename(display, args[0]);
1115 width = strtol(args[1], (char **)0, 0);
1116 height = strtol(args[2], (char **)0, 0);
1118 anima = strtol(args[3], (char **)0, 0);
1121 if ((surfaceid >= 0) && (width >= 0) && (height >=0)) {
1122 print_log("HOMESCREEN: resize(%s,%08x,%d.%d,%d,anima=%d)",
1123 args[0], surfaceid, node, width, height, anima);
1124 /* ico_window_mgr_set_positionsize(display->ico_window_mgr, surfaceid,
1125 node, ICO_WINDOW_MGR_V_NOCHANGE,
1126 ICO_WINDOW_MGR_V_NOCHANGE, width, height, anima); */
1129 print_log("HOMESCREEN: Unknown surface(%s) at resize command", args[0]);
1133 print_log("HOMESCREEN: positionsize command"
1134 "[resize appid width heigh anima] has no argument");
1139 visible_surface(struct display *display, char *buf)
1148 narg = pars_command(buf, args, 10);
1150 surfaceid = search_surface(display, args[0]);
1151 visible = strtol(args[1], (char **)0, 0);
1152 raise = strtol(args[2], (char **)0, 0);
1154 anima = strtol(args[3], (char **)0, 0);
1156 if ((surfaceid >= 0) && (visible >= 0) && (raise >=0)) {
1157 print_log("HOMESCREEN: visible(%s,%08x,%d,%d,%d)",
1158 args[0], surfaceid, visible, raise, anima);
1159 /* ico_window_mgr_set_visible(display->ico_window_mgr, surfaceid,
1160 visible, raise, anima); */
1163 print_log("HOMESCREEN: Unknown surface(%s) at visible command", args[0]);
1167 print_log("HOMESCREEN: visible command[visible appid visible raise] "
1173 show_surface(struct display *display, char *buf, const int show)
1184 narg = pars_command(buf, args, 10);
1186 surfaceid = search_surface(display, args[0]);
1188 anima = strtol(args[1], (char **)0, 0);
1194 if (narg >= 3) ax = strtol(args[2], (char **)0, 0);
1195 if (narg >= 4) ay = strtol(args[3], (char **)0, 0);
1196 if (narg >= 5) awidth = strtol(args[4], (char **)0, 0);
1197 if (narg >= 6) aheight = strtol(args[5], (char **)0, 0);
1200 if (surfaceid >= 0) {
1203 print_log("HOMESCREEN: show anima(%s,%08x,x/y=%d/%d,w/h=%d/%d)",
1204 args[0], surfaceid, ax, ay, awidth, aheight);
1205 /* ico_window_mgr_visible_animation(display->ico_window_mgr, surfaceid,
1206 1, ax, ay, awidth, aheight); */
1209 print_log("HOMESCREEN: show(%s,%08x,anima=%d)",
1210 args[0], surfaceid, anima);
1211 /* ico_window_mgr_set_visible(display->ico_window_mgr, surfaceid,
1212 1, ICO_WINDOW_MGR_V_NOCHANGE, anima); */
1217 print_log("HOMESCREEN: hide anima(%s,%08x,x/y=%d/%d,w/h=%d/%d)",
1218 args[0], surfaceid, ax, ay, awidth, aheight);
1219 /* ico_window_mgr_visible_animation(display->ico_window_mgr, surfaceid,
1220 0, ax, ay, awidth, aheight); */
1223 print_log("HOMESCREEN: hide(%s,%08x,anima=%d)",
1224 args[0], surfaceid, anima);
1225 /* ico_window_mgr_set_visible(display->ico_window_mgr, surfaceid,
1226 0, ICO_WINDOW_MGR_V_NOCHANGE, anima); */
1231 print_log("HOMESCREEN: Unknown surface(%s) at show/hide command", args[0]);
1235 print_log("HOMESCREEN: show command[show/hide appid anima x y width height]"
1236 " has no argument");
1241 raise_surface(struct display *display, char *buf, const int raise)
1248 narg = pars_command(buf, args, 10);
1250 surfaceid = search_surface(display, args[0]);
1252 anima = strtol(args[1], (char **)0, 0);
1254 if (surfaceid >= 0) {
1256 print_log("HOMESCREEN: raise(%s,%08x,anima=%d)", args[0], surfaceid, anima);
1257 /* ico_window_mgr_set_visible(display->ico_window_mgr, surfaceid,
1258 ICO_WINDOW_MGR_V_NOCHANGE, 1, anima); */
1261 print_log("HOMESCREEN: lower(%s,%08x,anima=%d)", args[0], surfaceid, anima);
1262 /* ico_window_mgr_set_visible(display->ico_window_mgr, surfaceid,
1263 ICO_WINDOW_MGR_V_NOCHANGE, 0, anima); */
1267 print_log("HOMESCREEN: Unknown surface(%s) at raise/lower command", args[0]);
1271 print_log("HOMESCREEN: show command[raise/lower appid anima] has no argument");
1276 active_window(struct display *display, char *buf)
1283 narg = pars_command(buf, args, 10);
1285 surfaceid = search_surface(display, args[0]);
1287 target = strtol(args[1], (char **)0, 0);
1292 if (surfaceid >= 0) {
1293 print_log("HOMESCREEN: active(%s,%08x,target=%x)", args[0], surfaceid, target);
1294 /* ico_window_mgr_set_active(display->ico_window_mgr, surfaceid, target); */
1297 print_log("HOMESCREEN: Unknown surface(%s) at active command", args[0]);
1301 print_log("HOMESCREEN: active command[active appid[target]] has no argument");
1307 animation_surface(struct display *display, char *buf)
1314 narg = pars_command(buf, args, 10);
1316 surfaceid = search_surface(display, args[0]);
1317 if (surfaceid >= 0) {
1319 time = strtol(args[2], (char **)0, 0);
1324 print_log("HOMESCREEN: animation(%s,%08x,%s,%d)",
1325 args[0], surfaceid, args[1], time);
1326 ico_window_mgr_set_animation(display->ico_window_mgr, surfaceid, 0x7fffffff,
1330 print_log("HOMESCREEN: Unknown surface(%s) at animation command", args[0]);
1334 print_log("HOMESCREEN: animation command"
1335 "[animation appid animation time] has no argument");
1340 map_surface(struct display *display, char *buf, int map)
1347 narg = pars_command(buf, args, 10);
1349 surfaceid = search_surface(display, args[0]);
1350 if (surfaceid >= 0) {
1352 fps = strtol(args[1], (char **)0, 0);
1358 print_log("HOMESCREEN: map surface(%s,%08x,%d)",
1359 args[0], surfaceid, fps);
1360 /* ico_window_mgr_map_surface(display->ico_window_mgr, surfaceid, fps); */
1363 print_log("HOMESCREEN: unmap surface(%s,%08x)", args[0], surfaceid);
1364 /* ico_window_mgr_unmap_surface(display->ico_window_mgr, surfaceid); */
1368 print_log("HOMESCREEN: Unknown surface(%s) at %s command", args[0],
1369 map ? "map" : "unmap");
1374 print_log("HOMESCREEN: map surface command"
1375 "[map surface framerate] has no argument");
1378 print_log("HOMESCREEN: unmap surface command"
1379 "[unmap surface] has no argument");
1385 visible_layer(struct display *display, char *buf)
1392 narg = pars_command(buf, args, 10);
1394 /* layer = strtol(args[0], (char **)0, 0); */
1395 /* visible = strtol(args[1], (char **)0, 0); */
1396 /* ico_window_mgr_set_layer_visible(display->ico_window_mgr, layer, visible); */
1399 print_log("HOMESCREEN: layer_visible command"
1400 "[layer_visible layer visible] has no argument");
1405 input_add(struct display *display, char *buf)
1412 narg = pars_command(buf, args, 10);
1414 input = strtol(args[1], (char **)0, 0);
1416 fix = strtol(args[3], (char **)0, 0);
1421 if ((input >= 0) && (fix >=0)) {
1422 print_log("HOMESCREEN: input_add(%s.%d to %s[%d])",
1423 args[0], input, args[2], fix);
1424 ico_input_mgr_control_add_input_app(display->ico_input_mgr,
1425 args[2], args[0], input, fix, 0);
1428 print_log("HOMESCREEN: Unknown input(%s) at input_add command", args[1]);
1432 print_log("HOMESCREEN: input_add command[input_add device inputId appid fix] "
1438 input_del(struct display *display, char *buf)
1443 char wk1[32], wk2[32];
1445 narg = pars_command(buf, args, 10);
1447 input = strtol(args[1], (char **)0, 0);
1448 if (args[0][0] == '@') {
1452 if (args[2][0] == '@') {
1456 print_log("HOMESCREEN: input_del(%s.%d to %s)", args[0], input, args[2]);
1457 ico_input_mgr_control_del_input_app(display->ico_input_mgr,
1458 args[2], args[0], input);
1461 print_log("HOMESCREEN: input_del command[input_del device inputId appid] "
1467 input_conf(struct display *display, char *buf)
1474 char wk1[32], wk2[32];
1476 narg = pars_command(buf, args, 10);
1478 type = strtol(args[1], (char **)0, 0);
1479 input = strtol(args[3], (char **)0, 0);
1481 code = strtol(args[5], (char **)0, 0);
1486 strcpy(wk1, args[2]);
1490 if ((type >= 0) && (input >= 0) && (code >=0)) {
1491 ico_input_mgr_device_configure_input(display->ico_input_device, args[0], type,
1492 args[2], input, args[4], code);
1495 print_log("HOMESCREEN: Unknown type(%s),input(%s) or code(%s) "
1496 "at input_conf command", args[1], args[3], args[5]);
1500 print_log("HOMESCREEN: input_conf command[input_conf device type swname input "
1501 "codename code] has no argument");
1506 input_code(struct display *display, char *buf)
1513 narg = pars_command(buf, args, 10);
1515 input = strtol(args[1], (char **)0, 0);
1516 code = strtol(args[3], (char **)0, 0);
1517 if ((input >= 0) && (code >= 0)) {
1518 ico_input_mgr_device_configure_code(display->ico_input_device, args[0], input,
1522 print_log("HOMESCREEN: Unknown input(%s) or code(%s) "
1523 "at input_code command", args[1], args[3]);
1527 print_log("HOMESCREEN: input_conf command[input_code device input codename code] "
1533 input_sw(struct display *display, char *buf)
1543 narg = pars_command(buf, args, 10);
1545 input = strtol(args[1], (char **)0, 0);
1546 code = strtol(args[2], (char **)0, 0);
1547 state = strtol(args[3], (char **)0, 0);
1548 if ((input >= 0) && (state >= 0)) {
1549 gettimeofday(&stv, (struct timezone *)NULL);
1550 timems = (stv.tv_sec % 1000) * 1000 + (stv.tv_usec / 1000);
1551 ico_input_mgr_device_input_event(display->ico_input_device,
1552 timems, args[0], input, code, state);
1555 print_log("HOMESCREEN: Unknown input(%s),code(%s) or state(%s) "
1556 "at input_sw command", args[1], args[2], args[3]);
1560 print_log("HOMESCREEN: input_sw command[input_sw device input code, state] "
1566 send_event(const char *cmd)
1568 static int nmqinfo = 0;
1585 for (pt = 0; cmd[pt]; pt++) {
1586 if ((cmd[pt] >= '0') && (cmd[pt] <= '9')) {
1587 mqkey = mqkey * 10 + cmd[pt] - '0';
1593 for (; cmd[pt] == ' '; pt++) ;
1599 for (i = 0; i < nmqinfo; i++) {
1600 if (mqinfo[i].mqkey == mqkey) {
1601 mqid = mqinfo[i].mqid;
1606 if (nmqinfo >= 10) {
1607 fprintf(stderr, "HOMESCREEN: message queue(%d) overflow\n", mqkey);
1610 mqid = msgget(mqkey, 0);
1612 fprintf(stderr, "HOMESCREEN: message queue(%d(0x%x)) get error[%d]\n",
1613 mqkey, mqkey, errno);
1616 mqinfo[nmqinfo].mqkey = mqkey;
1617 mqinfo[nmqinfo].mqid = mqid;
1621 memset(&mqbuf, 0, sizeof(mqbuf));
1623 strncpy(mqbuf.buf, &cmd[pt], sizeof(mqbuf)-sizeof(long));
1625 if (msgsnd(mqid, &mqbuf, sizeof(mqbuf)-sizeof(long), 0) < 0) {
1626 fprintf(stderr, "HOMESCREEN: message queue(%d(0x%x)) send error[%d]\n",
1627 mqkey, mqkey, errno);
1633 set_region(struct display *display, char *buf)
1637 int x, y, width, height;
1639 int c_x, c_y, c_width, c_height;
1641 narg = pars_command(buf, args, 10);
1643 x = strtol(args[1], (char **)0, 0);
1644 y = strtol(args[2], (char **)0, 0);
1645 width = strtol(args[3], (char **)0, 0);
1646 height = strtol(args[4], (char **)0, 0);
1647 hot_x = x + (width / 2);
1648 hot_y = y + (height / 2);
1651 c_width = width - 10;
1652 if (c_width <= 0) c_width = 2;
1653 c_height = height - 10;
1654 if (c_height <= 0) c_height = 2;
1655 print_log("HOMESCREEN: ico_exinput_set_input_region(%s,%d,%d-%d,%d,"
1656 "hot=%d,%d,cur=%d,%d-%d,%d,attr=0)",
1657 args[0] ? args[0] : "(null)", x, y, width, height,
1658 hot_x, hot_y, c_x, c_y, c_width, c_height);
1659 if (strcasecmp(args[0], "NULL") == 0) {
1660 ico_exinput_set_input_region(display->ico_exinput, "", x, y,
1661 width, height, hot_x, hot_y, c_x, c_y,
1662 c_width, c_height, 0);
1665 ico_exinput_set_input_region(display->ico_exinput, args[0], x, y,
1666 width, height, hot_x, hot_y, c_x, c_y,
1667 c_width, c_height, 0);
1671 print_log("HOMESCREEN: set_region command[set_region winname@appid x y "
1672 "width height] has no argument");
1677 unset_region(struct display *display, char *buf)
1681 int x, y, width, height;
1683 narg = pars_command(buf, args, 10);
1686 x = strtol(args[1], (char **)0, 0);
1687 y = strtol(args[2], (char **)0, 0);
1688 width = strtol(args[3], (char **)0, 0);
1689 height = strtol(args[4], (char **)0, 0);
1697 print_log("HOMESCREEN: ico_exinput_unset_input_region(%s,08x,%d,%d-%d,%d)",
1698 args[0] ? args[0] : "(null)", x, y, width, height);
1699 if (strcasecmp(args[0], "NULL") == 0) {
1700 ico_exinput_unset_input_region(display->ico_exinput, "", x, y,
1704 ico_exinput_unset_input_region(display->ico_exinput, args[0],
1705 x, y, width, height);
1709 print_log("HOMESCREEN: unset_region command[unset_region winname@appid x y "
1710 "width height] has no argument");
1718 * test-homescreen < test-case-data-file > test-result-output
1720 int main(int argc, char *argv[])
1722 struct display *display;
1726 #if 1 /* use mkostemp */
1727 extern int mkostemp(char *template, int flags);
1728 #else /* use mkostemp */
1730 #endif /* use mkostemp */
1732 display = malloc(sizeof *display);
1734 memset((char *)display, 0, sizeof *display);
1736 display->init_width = 640;
1737 display->init_height = 480;
1738 display->init_color = 0xFF304010;
1740 for (fd = 1; fd < argc; fd++) {
1741 if (argv[fd][0] == '-') {
1742 if (strncasecmp(argv[fd], "-visible=", 9) == 0) {
1743 display->visible_on_create = argv[fd][9] & 1;
1745 else if (strncasecmp(argv[fd], "-display=", 9) == 0) {
1746 strncpy(display->connect, &argv[fd][9], MAX_CON_NAME);
1748 else if (strncasecmp(argv[fd], "-prompt=", 8) == 0) {
1749 display->prompt = argv[fd][8] & 1;
1754 if (display->connect[0]) {
1755 display->display = wl_display_connect(display->connect);
1758 display->display = wl_display_connect(NULL);
1760 if (! display->display) {
1761 fprintf(stderr, "HOMESCREEN: can not connect to weston\n");
1765 display->registry = wl_display_get_registry(display->display);
1766 wl_registry_add_listener(display->registry, ®istry_listener, display);
1767 wl_display_dispatch(display->display);
1772 sleep_with_wayland(display->display, 20);
1773 if (display->prompt) {
1774 printf("HOMESCREEN> "); fflush(stdout);
1776 ret = getdata(display->ico_window_mgr, "HOMESCREEN> ", fd, buf, sizeof(buf));
1778 fprintf(stderr, "HOMESCREEN: read error: fd %d, %m\n", fd);
1781 if (ret == 0) continue;
1782 wl_display_flush(display->display);
1784 if ((strncasecmp(buf, "bye", 3) == 0) ||
1785 (strncasecmp(buf, "quit", 4) == 0) ||
1786 (strncasecmp(buf, "end", 3) == 0)) {
1787 /* Exit, end of test */
1790 else if (strncasecmp(buf, "launch", 6) == 0) {
1791 /* Launch test application */
1792 launch_app(display, &buf[6]);
1794 else if (strncasecmp(buf, "kill", 4) == 0) {
1795 /* Launch test application */
1796 kill_app(display, &buf[4]);
1798 else if (strncasecmp(buf, "layer_visible", 13) == 0) {
1799 /* Change layer visiblety */
1800 visible_layer(display, &buf[13]);
1802 else if (strncasecmp(buf, "layer", 5) == 0) {
1803 /* layer change surface window */
1804 layer_surface(display, &buf[5]);
1806 else if (strncasecmp(buf, "positionsize", 12) == 0) {
1807 /* Move and Ressize surface window*/
1808 positionsize_surface(display, &buf[12]);
1810 else if (strncasecmp(buf, "move", 4) == 0) {
1811 /* Move surface window */
1812 move_surface(display, &buf[4]);
1814 else if (strncasecmp(buf, "resize", 6) == 0) {
1815 /* Resize surface window */
1816 resize_surface(display, &buf[6]);
1818 else if (strncasecmp(buf, "visible", 7) == 0) {
1819 /* Visible and Raise surface window*/
1820 visible_surface(display, &buf[7]);
1822 else if (strncasecmp(buf, "show", 4) == 0) {
1823 /* Show/Hide surface window */
1824 show_surface(display, &buf[4], 1);
1826 else if (strncasecmp(buf, "hide", 4) == 0) {
1827 /* Show/Hide surface window */
1828 show_surface(display, &buf[4], 0);
1830 else if (strncasecmp(buf, "raise", 5) == 0) {
1831 /* Raise/Lower surface window */
1832 raise_surface(display, &buf[5], 1);
1834 else if (strncasecmp(buf, "lower", 5) == 0) {
1835 /* Raise/Lower surface window */
1836 raise_surface(display, &buf[5], 0);
1838 else if (strncasecmp(buf, "active", 6) == 0) {
1839 /* Active surface window */
1840 active_window(display, &buf[6]);
1842 else if (strncasecmp(buf, "animation", 9) == 0) {
1843 /* Set animation surface window */
1844 animation_surface(display, &buf[9]);
1846 else if (strncasecmp(buf, "map", 3) == 0) {
1848 map_surface(display, &buf[3], 1);
1850 else if (strncasecmp(buf, "unmap", 5) == 0) {
1852 map_surface(display, &buf[5], 0);
1854 else if (strncasecmp(buf, "input_add", 9) == 0) {
1855 /* Set input switch to application */
1856 input_add(display, &buf[9]);
1858 else if (strncasecmp(buf, "input_del", 9) == 0) {
1859 /* Reset input switch to application*/
1860 input_del(display, &buf[9]);
1862 else if (strncasecmp(buf, "input_conf", 10) == 0) {
1863 /* input switch configuration */
1864 input_conf(display, &buf[10]);
1866 else if (strncasecmp(buf, "input_code", 10) == 0) {
1867 /* input code configuration */
1868 input_code(display, &buf[10]);
1870 else if (strncasecmp(buf, "input_sw", 8) == 0) {
1871 /* input switch event */
1872 input_sw(display, &buf[8]);
1874 else if (strncasecmp(buf, "set_region", 10) == 0) {
1875 /* set input region */
1876 set_region(display, &buf[10]);
1878 else if (strncasecmp(buf, "unset_region", 12) == 0) {
1879 /* unset input region */
1880 unset_region(display, &buf[12]);
1882 else if (strncasecmp(buf, "input_sw", 8) == 0) {
1883 /* input switch event */
1884 input_sw(display, &buf[8]);
1886 else if (strncasecmp(buf, "sleep", 5) == 0) {
1888 msec = sec_str_2_value(&buf[6]);
1889 sleep_with_wayland(display->display, msec);
1891 else if (strncasecmp(buf, "waitcreate", 10) == 0) {
1892 /* Wait surface create */
1893 msec = sec_str_2_value(&buf[11]);
1894 wait_with_wayland(display->display, msec, &display->surface_created);
1896 else if (strncasecmp(buf, "waitdestroy", 11) == 0) {
1897 /* Wait surface destrpy */
1898 msec = sec_str_2_value(&buf[12]);
1899 wait_with_wayland(display->display, msec, &display->surface_destroyed);
1901 else if (strncasecmp(buf, "event", 5) == 0) {
1902 /* Send touch panel event to Weston */
1903 send_event(&buf[6]);
1906 print_log("HOMESCREEN: unknown command[%s]", buf);
1911 print_log("HOMESCREEN: end");