static bool vt_switch(struct kmscon_vt *vt, enum kmscon_vt_action action, void *data) { struct kmscon_app *app = data; int ret; if (action == KMSCON_VT_ENTER) { ret = uterm_video_wake_up(app->video); if (ret) { log_err("cannot wake-up video system"); } else { kmscon_input_wake_up(app->input); } } else if (action == KMSCON_VT_LEAVE) { kmscon_input_sleep(app->input); uterm_video_sleep(app->video); if (app->exit) ev_eloop_exit(app->vt_eloop); } return true; }
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); }