54 lines
1.4 KiB
C
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);
|
|
}
|