int main(int argc, char **argv) { int ret, fd; const char *card; struct modeset_dev *iter; struct modeset_buf *buf; /* check which DRM device to open */ if (argc > 1) card = argv[1]; else card = "/dev/dri/card0"; fprintf(stderr, "using card '%s'\n", card); /* open the DRM device */ ret = modeset_open(&fd, card); if (ret) goto out_return; /* prepare all connectors and CRTCs */ ret = modeset_prepare(fd); if (ret) goto out_close; /* perform actual modesetting on each found connector+CRTC */ for (iter = modeset_list; iter; iter = iter->next) { iter->saved_crtc = drmModeGetCrtc(fd, iter->crtc); buf = &iter->bufs[iter->front_buf]; ret = drmModeSetCrtc(fd, iter->crtc, buf->fb, 0, 0, &iter->conn, 1, &iter->mode); if (ret) fprintf(stderr, "cannot set CRTC for connector %u (%d): %m\n", iter->conn, errno); } /* draw some colors for 5seconds */ modeset_draw(fd); /* cleanup everything */ modeset_cleanup(fd); ret = 0; out_close: close(fd); out_return: if (ret) { errno = -ret; fprintf(stderr, "modeset failed with error %d: %m\n", errno); } else { fprintf(stderr, "exiting\n"); } return ret; }
int main(int argc, char **argv) { int fd; int opt; const char *card = "/dev/dri/card0"; while ((opt = getopt(argc, argv, "c:")) != -1) { switch (opt) { case 'c': card = optarg; break; } } // open the DRM device fd = drm_open_dev_dumb(card); // Prepare all connectors and CRTCs modeset_prepare(fd, &modeset_list); // Allocate buffers modeset_alloc_fbs(modeset_list, 2); // Allocate private data for_each_output(out, modeset_list) out->data = calloc(1, sizeof(struct flip_data)); // Set modes modeset_set_modes(modeset_list); // Draw color bar modeset_main_loop(modeset_list, &page_flip_event); // Free private data for_each_output(out, modeset_list) free(out->data); // Free modeset data modeset_cleanup(modeset_list); close(fd); fprintf(stderr, "exiting\n"); return 0; }