int main(int argc, char **argv) { int ret; struct kmscon_app app; ret = conf_parse_argv(argc, argv); if (ret) goto err_out; if (conf_global.exit) return EXIT_SUCCESS; if (!conf_global.debug && !conf_global.verbose && conf_global.silent) log_set_config(&LOG_CONFIG_WARNING(0, 0, 0, 0)); else log_set_config(&LOG_CONFIG_INFO(conf_global.debug, conf_global.verbose)); log_print_init("kmscon"); memset(&app, 0, sizeof(app)); ret = setup_app(&app); if (ret) goto err_out; if (conf_global.switchvt) { ret = kmscon_vt_enter(app.vt); if (ret) log_warn("cannot enter VT"); } ev_eloop_run(app.eloop, -1); if (conf_global.switchvt) { /* The VT subsystem needs to acknowledge the VT-leave so if it * returns -EINPROGRESS we need to wait for the VT-leave SIGUSR2 * signal to arrive. Therefore, we use a separate eloop object * which is used by the VT system only. Therefore, waiting on * this eloop allows us to safely wait 50ms for the SIGUSR2 to * arrive. * We use a timeout of 100ms to avoid haning on exit. * We could also wait on app.eloop but this would allow other * subsystems to continue receiving events and this is not what * we want. */ app.exit = true; ret = kmscon_vt_leave(app.vt); if (ret == -EINPROGRESS) ev_eloop_run(app.vt_eloop, 50); } destroy_app(&app); log_info("exiting"); return EXIT_SUCCESS; err_out: log_err("cannot initialize kmscon, errno %d: %s", ret, strerror(-ret)); return -ret; }
int main(int argc, char **argv) { int ret; struct ev_eloop *eloop; struct uterm_vt_master *vtm; struct uterm_input *input; struct uterm_vt *vt; size_t onum; onum = sizeof(options) / sizeof(*options); ret = test_prepare(options, onum, argc, argv, &eloop); if (ret) goto err_fail; ret = uterm_vt_master_new(&vtm, eloop); if (ret) goto err_exit; ret = uterm_input_new(&input, eloop, "", "", "", "", "", 0, 0, log_llog, NULL); if (ret) goto err_vtm; ret = uterm_vt_allocate(vtm, &vt, UTERM_VT_FAKE | UTERM_VT_REAL, "seat0", input, vtpath, NULL, NULL); if (ret) goto err_input; if (switchvt) { ret = uterm_vt_activate(vt); if (ret == -EINPROGRESS) log_debug("VT switch in progress"); else if (ret) log_warn("cannot switch to VT: %d", ret); } ev_eloop_run(eloop, -1); log_debug("Terminating"); /* switch back to previous VT but wait for eloop to process SIGUSR0 */ if (switchvt) { ret = uterm_vt_deactivate(vt); if (ret == -EINPROGRESS) ev_eloop_run(eloop, 50); } uterm_vt_unref(vt); err_input: uterm_input_unref(input); err_vtm: uterm_vt_master_unref(vtm); err_exit: test_exit(options, onum, eloop); err_fail: if (ret != -ECANCELED) test_fail(ret); return abs(ret); }
int main(int argc, char **argv) { int ret; struct uvtd_app app; log_set_config(&LOG_CONFIG_INFO(1, 1)); log_print_init("uvtd"); memset(&app, 0, sizeof(app)); ret = setup_app(&app); if (ret) goto err_out; ev_eloop_run(app.eloop, -1); ret = 0; destroy_app(&app); err_out: if (ret) log_err("cannot initialize uvtd, errno %d: %s", ret, strerror(-ret)); log_info("exiting"); return -ret; }
static int blit_outputs(struct uterm_video *video) { struct uterm_display *iter; int j, ret; struct uterm_screen *screen; j = 0; iter = uterm_video_get_displays(video); for ( ; iter; iter = uterm_display_next(iter)) { log_notice("Activating display %d %p...", j, iter); ret = uterm_display_activate(iter, NULL); if (ret) log_err("Cannot activate display %d: %d", j, ret); else log_notice("Successfully activated display %d", j); ret = uterm_display_set_dpms(iter, UTERM_DPMS_ON); if (ret) log_err("Cannot set DPMS to ON: %d", ret); ++j; } iter = uterm_video_get_displays(video); for ( ; iter; iter = uterm_display_next(iter)) { if (uterm_display_get_state(iter) != UTERM_DISPLAY_ACTIVE) continue; ret = uterm_screen_new_single(&screen, iter); if (ret) { log_err("Cannot create temp-screen object: %d", ret); continue; } ret = uterm_screen_fill(screen, 0xff, 0xff, 0xff, 0, 0, uterm_screen_width(screen), uterm_screen_height(screen)); if (ret) { log_err("cannot fill framebuffer"); uterm_screen_unref(screen); continue; } ret = uterm_screen_swap(screen); if (ret) { log_err("Cannot swap screen: %d", ret); uterm_screen_unref(screen); continue; } log_notice("Successfully set screen on display %p", iter); uterm_screen_unref(screen); } log_notice("Waiting 5 seconds..."); ev_eloop_run(eloop, 5000); log_notice("Exiting..."); return 0; }
static int blit_outputs(struct uterm_video *video) { struct uterm_display *iter; int j, ret; struct uterm_mode *mode; j = 0; iter = uterm_video_get_displays(video); for ( ; iter; iter = uterm_display_next(iter)) { log_notice("Activating display %d %p...", j, iter); ret = uterm_display_activate(iter, NULL); if (ret) log_err("Cannot activate display %d: %d", j, ret); else log_notice("Successfully activated display %d", j); ret = uterm_display_set_dpms(iter, UTERM_DPMS_ON); if (ret) log_err("Cannot set DPMS to ON: %d", ret); ++j; } iter = uterm_video_get_displays(video); for ( ; iter; iter = uterm_display_next(iter)) { if (uterm_display_get_state(iter) != UTERM_DISPLAY_ACTIVE) continue; mode = uterm_display_get_current(iter); ret = uterm_display_fill(iter, 0xff, 0xff, 0xff, 0, 0, uterm_mode_get_width(mode), uterm_mode_get_height(mode)); if (ret) { log_err("cannot fill framebuffer"); continue; } ret = uterm_display_swap(iter, true); if (ret) { log_err("Cannot swap screen: %d", ret); continue; } log_notice("Successfully set screen on display %p", iter); } log_notice("Waiting 5 seconds..."); ev_eloop_run(eloop, 5000); log_notice("Exiting..."); return 0; }
int main(int argc, char **argv) { int ret; struct ev_eloop *eloop; struct kmscon_vt *vt; ret = test_prepare(argc, argv, &eloop); if (ret) goto err_fail; ret = kmscon_vt_new(&vt, NULL, NULL); if (ret) goto err_exit; ret = kmscon_vt_open(vt, KMSCON_VT_NEW, eloop); if (ret) goto err_vt; ret = kmscon_vt_enter(vt); if (ret) log_warn("Cannot switch to VT"); ev_eloop_run(eloop, -1); log_debug("Terminating\n"); /* switch back to previous VT but wait for eloop to process SIGUSR0 */ ret = kmscon_vt_leave(vt); if (ret == -EINPROGRESS) ev_eloop_run(eloop, 50); err_vt: kmscon_vt_unref(vt); err_exit: test_exit(eloop); err_fail: test_fail(ret); return abs(ret); }
int main(int argc, char **argv) { int ret; struct uterm_monitor *mon; size_t onum; onum = sizeof(options) / sizeof(*options); ret = test_prepare(options, onum, argc, argv, &eloop); if (ret) goto err_fail; if (!setlocale(LC_ALL, "")) { log_err("Cannot set locale: %m"); ret = -EFAULT; goto err_exit; } ret = uterm_monitor_new(&mon, eloop, monitor_event, NULL); if (ret) goto err_exit; ret = ev_eloop_register_signal_cb(eloop, SIGQUIT, sig_quit, NULL); if (ret) goto err_mon; system("stty -echo"); uterm_monitor_scan(mon); ev_eloop_run(eloop, -1); system("stty echo"); ev_eloop_unregister_signal_cb(eloop, SIGQUIT, sig_quit, NULL); err_mon: uterm_monitor_unref(mon); err_exit: test_exit(options, onum, eloop); err_fail: if (ret != -ECANCELED) test_fail(ret); return abs(ret); }
static int set_outputs(struct uterm_video *video) { struct uterm_display *iter; int j, ret; struct gl_shader *shader; struct uterm_screen *screen; ret = gl_shader_new(&shader); if (ret) { log_err("Cannot create shader: %d", ret); return ret; } j = 0; iter = uterm_video_get_displays(video); for ( ; iter; iter = uterm_display_next(iter)) { log_notice("Activating display %d %p...", j, iter); ret = uterm_display_activate(iter, NULL); if (ret) log_err("Cannot activate display %d: %d", j, ret); else log_notice("Successfully activated display %d", j); ret = uterm_display_set_dpms(iter, UTERM_DPMS_ON); if (ret) log_err("Cannot set DPMS to ON: %d", ret); ++j; } iter = uterm_video_get_displays(video); for ( ; iter; iter = uterm_display_next(iter)) { if (uterm_display_get_state(iter) != UTERM_DISPLAY_ACTIVE) continue; ret = uterm_screen_new_single(&screen, iter); if (ret) { log_err("Cannot create temp-screen object: %d", ret); continue; } ret = uterm_screen_use(screen); if (ret) { log_err("Cannot use screen: %d", ret); uterm_screen_unref(screen); continue; } glClearColor(0.0f, 0.0f, 0.0f, 1.0f); glClear(GL_COLOR_BUFFER_BIT); glViewport(0, 0, uterm_screen_width(screen), uterm_screen_height(screen)); gl_shader_draw_def(shader, d_vert, d_col, 6); if (gl_has_error()) log_err("GL error occurred"); ret = uterm_screen_swap(screen); if (ret) { log_err("Cannot swap screen: %d", ret); uterm_screen_unref(screen); continue; } log_notice("Successfully set screen on display %p", iter); uterm_screen_unref(screen); } log_notice("Waiting 5 seconds..."); ev_eloop_run(eloop, 5000); log_notice("Exiting..."); gl_shader_unref(shader); return 0; }