Steward
分享是一種喜悅、更是一種幸福
掌機 - Miyoo Flip - C/C++ - DRM/KMS - Enum CRTC
參考資訊:
https://www.kernel.org/doc/html/v4.15/gpu/drm-kms.html
https://github.com/grate-driver/libdrm/blob/master/xf86drmMode.h
main.c
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | #include <stdio.h> #include <stdlib.h> #include <fcntl.h> #include <unistd.h> #include <xf86drm.h> #include <xf86drmMode.h> int main ( int argc, char *argv[]) { int i = 0; int j = 0; int fd = -1; drmModeRes *res = NULL ; fd = open ( "/dev/dri/card0" , O_RDWR | O_CLOEXEC ); res = drmModeGetResources (fd); for (i = 0; i < res->count_connectors; i++) { drmModeConnector *conn = drmModeGetConnector (fd, res->connectors[i]); if (conn) { if ((conn->connection == DRM_MODE_CONNECTED ) && conn->count_modes) { printf ( "conn[%d].connector_id=%d\n" , i, conn->connector_id); printf ( "conn[%d].encoder_id=%d\n" , i, conn->encoder_id); for (j = 0; j < conn->count_modes; j++) { drmModeModeInfo * mode = &conn->modes[j]; printf ( "conn[%d].mode[%d]=%s (%dx%dx%d)\n" , i, j, mode -> name , mode ->hdisplay, mode ->vdisplay, mode ->vrefresh); } } drmModeFreeConnector (conn); } } for (i = 0; i < res->count_encoders; i++) { drmModeEncoder *enc = drmModeGetEncoder (fd, res->encoders[i]); if (enc) { printf ( "enc[%d].encoder_id=%d\n" , i, enc->encoder_id); printf ( "enc[%d].crtc_id=%d\n" , i, enc->crtc_id); drmModeFreeEncoder (enc); } } for (i = 0; i < res->count_crtcs; i++) { drmModeCrtc *crtc = drmModeGetCrtc (fd, res->crtcs[i]); if (crtc) { printf ( "crtc[%d].crtc_id=%d\n" , i, crtc->crtc_id); printf ( "crtc[%d].buffer_id=%d\n" , i, crtc->buffer_id); printf ( "crtc[%d].x=%d\n" , i, crtc->x); printf ( "crtc[%d].y=%d\n" , i, crtc->x); printf ( "crtc[%d].width=%d\n" , i, crtc->width); printf ( "crtc[%d].height=%d\n" , i, crtc->height); printf ( "crtc[%d].mode.name=%s\n" , i, crtc-> mode . name ); drmModeFreeCrtc (crtc); } } drmModeFreeResources (res); close (fd); return 0; } |
編譯、執行
$ /opt/flip/bin/aarch64-linux-gcc main.c -o main -I/opt/flip/aarch64-flip-linux-gnu/sysroot/usr/include/libdrm -ldrm root@rk3566-buildroot:/mnt/SDCARD# ./main conn[1].connector_id=179 conn[1].encoder_id=178 conn[1].mode[0]=640x480 (640x480x60) enc[0].encoder_id=161 enc[0].crtc_id=0 enc[1].encoder_id=163 enc[1].crtc_id=0 enc[2].encoder_id=178 enc[2].crtc_id=107 crtc[0].crtc_id=85 crtc[0].buffer_id=0 crtc[0].x=0 crtc[0].y=0 crtc[0].width=0 crtc[0].height=0 crtc[0].mode.name= crtc[1].crtc_id=107 crtc[1].buffer_id=184 crtc[1].x=0 crtc[1].y=0 crtc[1].width=640 crtc[1].height=480 crtc[1].mode.name=640x480