static int setup_app(struct kmscon_app *app) { int ret; ret = ev_eloop_new(&app->eloop); if (ret) goto err_app; ret = ev_eloop_register_signal_cb(app->eloop, SIGTERM, sig_generic, app); if (ret) goto err_app; ret = ev_eloop_register_signal_cb(app->eloop, SIGINT, sig_generic, app); if (ret) goto err_app; ret = ev_eloop_new_eloop(app->eloop, &app->vt_eloop); if (ret) goto err_app; ret = kmscon_vt_new(&app->vt, vt_switch, app); if (ret) goto err_app; ret = uterm_video_new(&app->video, app->eloop, UTERM_VIDEO_DRM, "/dev/dri/card0"); if (ret) goto err_app; ret = uterm_video_use(app->video); if (ret) goto err_app; ret = kmscon_input_new(&app->input); if (ret) goto err_app; ret = kmscon_input_connect_eloop(app->input, app->eloop); if (ret) goto err_app; ret = kmscon_vt_open(app->vt, KMSCON_VT_NEW, app->vt_eloop); if (ret) goto err_app; ret = kmscon_ui_new(&app->ui, app->eloop, app->video, app->input); if (ret) goto err_app; return 0; err_app: destroy_app(app); return ret; }
int main(int argc, char **argv) { struct uterm_video *video; int ret; const char *node; const struct uterm_video_module *mode; size_t onum; onum = sizeof(options) / sizeof(*options); ret = test_prepare(options, onum, argc, argv, &eloop); if (ret) goto err_fail; if (output_conf.fbdev) { mode = UTERM_VIDEO_FBDEV; node = "/dev/fb0"; } else { mode = UTERM_VIDEO_DRM3D; node = "/dev/dri/card0"; } if (output_conf.dev) node = output_conf.dev; log_notice("Creating video object using %s...", node); ret = uterm_video_new(&video, eloop, node, mode); if (ret) { if (mode == UTERM_VIDEO_DRM3D) { log_notice("cannot create drm device; trying drm2d mode"); ret = uterm_video_new(&video, eloop, node, UTERM_VIDEO_DRM2D); if (ret) goto err_exit; } else { goto err_exit; } } log_notice("Wakeing up video object..."); ret = uterm_video_wake_up(video); if (ret < 0) goto err_unref; if (!output_conf.test) { ret = list_outputs(video); if (ret) { log_err("Cannot list outputs: %d", ret); goto err_unref; } } else { ret = blit_outputs(video); if (ret) { log_err("Cannot set outputs: %d", ret); goto err_unref; } } err_unref: uterm_video_unref(video); err_exit: test_exit(options, onum, eloop); err_fail: if (ret != -ECANCELED) test_fail(ret); return abs(ret); }
int main(int argc, char **argv) { struct uterm_video *video; int ret; unsigned int mode; const char *node; ret = test_prepare(argc, argv, &eloop); if (ret) goto err_fail; if (conf_global.use_fbdev) { mode = UTERM_VIDEO_FBDEV; node = "/dev/fb0"; } else { mode = UTERM_VIDEO_DRM; node = "/dev/dri/card0"; } log_notice("Creating video object using %s...", node); ret = uterm_video_new(&video, eloop, mode, node); if (ret) { if (mode == UTERM_VIDEO_DRM) { log_notice("cannot create drm device; trying dumb drm mode"); ret = uterm_video_new(&video, eloop, UTERM_VIDEO_DUMB, node); if (ret) goto err_exit; } else { goto err_exit; } } log_notice("Wakeing up video object..."); ret = uterm_video_wake_up(video); if (ret < 0) goto err_unref; if (argc < 2) { ret = list_outputs(video); if (ret) { log_err("Cannot list outputs: %d", ret); goto err_unref; } } else { ret = uterm_video_use(video); if (ret) ret = blit_outputs(video); else ret = set_outputs(video); if (ret) { log_err("Cannot set outputs: %d", ret); goto err_unref; } } err_unref: uterm_video_unref(video); err_exit: test_exit(eloop); err_fail: test_fail(ret); return abs(ret); }