diff options
author | Pascal Rigaux <pixel@mandriva.com> | 2005-08-08 12:57:01 +0000 |
---|---|---|
committer | Pascal Rigaux <pixel@mandriva.com> | 2005-08-08 12:57:01 +0000 |
commit | 0c5e8b25cba12f61ef53a9b605359254c261d274 (patch) | |
tree | d0b90b13627871748ce6e507197700c6f9df044d /monitor-get-edid.c | |
parent | fbc544617a94c6c7b815ca5d52ea8bc0dff2fe67 (diff) | |
download | monitor-edid-0c5e8b25cba12f61ef53a9b605359254c261d274.tar monitor-edid-0c5e8b25cba12f61ef53a9b605359254c261d274.tar.gz monitor-edid-0c5e8b25cba12f61ef53a9b605359254c261d274.tar.bz2 monitor-edid-0c5e8b25cba12f61ef53a9b605359254c261d274.tar.xz monitor-edid-0c5e8b25cba12f61ef53a9b605359254c261d274.zip |
- add option --try-in-console when probing edid
since probing edid sometimes only work in console
- use this option by default in monitor-probe
Diffstat (limited to 'monitor-get-edid.c')
-rw-r--r-- | monitor-get-edid.c | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/monitor-get-edid.c b/monitor-get-edid.c index 41e0e5d..5e4a549 100644 --- a/monitor-get-edid.c +++ b/monitor-get-edid.c @@ -7,6 +7,8 @@ #include <fcntl.h> #include <errno.h> #include <stdarg.h> +#include <sys/ioctl.h> +#include <sys/vt.h> #include "get-edid.h" int verbose = 0; @@ -14,17 +16,39 @@ int verbose = 0; int main(int argc, char **argv) { char edid[256]; + int try_in_console = 0; int i; for (i = 1; i < argc; i++) if (strcmp(argv[i], "-v") == 0) verbose = 1; + else if (strcmp(argv[i], "--try-in-console") == 0) try_in_console = 1; else if (strcmp(argv[i], "-h") == 0 || strcmp(argv[i], "--help") == 0) { printf("usage: monitor-get-edid [-v]\n"); exit(1); } - int size = get_edid(edid); + int size = 0 && get_edid(edid); + + if (!size && try_in_console) { + int non_X_console = 1; + int first_X_console = 7; + struct vt_stat current; + int fd = open("/dev/console", O_RDWR); + + if (ioctl(fd, VT_GETSTATE, ¤t) == 0 && + current.v_state >= first_X_console && + ioctl(fd, VT_ACTIVATE, non_X_console) == 0 && + ioctl(fd, VT_WAITACTIVE, non_X_console) == 0) { + /* retrying */ + size = get_edid(edid); + + /* restore */ + ioctl(fd, VT_ACTIVATE, current.v_active) == 0 && + ioctl(fd, VT_WAITACTIVE, current.v_active) == 0; + } + close(fd); + } if (size) write(1, edid, size); |