aboutsummaryrefslogtreecommitdiffstats
path: root/monitor-get-edid.c
diff options
context:
space:
mode:
authorPascal Rigaux <pixel@mandriva.com>2005-08-08 12:57:01 +0000
committerPascal Rigaux <pixel@mandriva.com>2005-08-08 12:57:01 +0000
commit0c5e8b25cba12f61ef53a9b605359254c261d274 (patch)
treed0b90b13627871748ce6e507197700c6f9df044d /monitor-get-edid.c
parentfbc544617a94c6c7b815ca5d52ea8bc0dff2fe67 (diff)
downloadmonitor-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.c26
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, &current) == 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);