2026-03-21 19:41:43 +01:00

54 lines
1.4 KiB
C

#include "slcore.h"
/*
before starting this, should set app user to have :
sudo usermod -aG video,input $USER
also this only work on linux x86_64 computer
*/
drmModeConnector *ListMonitors() {
int fd = open("/dev/dri/card0", O_RDWR | O_NONBLOCK);
if (fd < 0) {
return(NULL);
}
drmModeConnector *monitors = 0x00;
drmModeRes *res = drmModeGetResources(fd);
for (int i = 0; i < res->count_connectors; i++) {
drmModeConnector *conn = 0x00;
conn = drmModeGetConnector(fd, res->connectors[i]);
if (conn->connection == DRM_MODE_CONNECTED) {
printf("Monitor Found: ID %d | Type: %d\n", \
conn->connector_id, conn->connector_type);
//addconn to connected monitor
arrpush(monitors, *conn);
}
drmModeFreeConnector(conn);
}
drmModeFreeResources(res);
close(fd);
return (monitors);
}
/* todo:
* -KEYMAP_IMPLEMENTATION
* -drmcache check gbm framebuffercaching;
*/
int entry_window_display_manager(int ac, char**av,char**envp) {
(void)ac;
(void)av;
(void)envp;
//printf("%i", drmAvailable());
drmModeConnector *monitors = NULL;
monitors = ListMonitors();
if (!monitors || !arrlen(monitors)) {
//Log Error no available monitors
return (-1);
}
for (int i = 0; i < arrlen(monitors); i++) {
printf("%dx%d@%d\n", monitors[i].modes[0].vdisplay, monitors[i].modes[0].hdisplay, monitors[i].modes[0].vrefresh);
}
arrfree(monitors);
return (0);
}