aboutsummaryrefslogtreecommitdiffstats
path: root/monitor-get-edid-using-vbe.c
diff options
context:
space:
mode:
authorAnssi Hannula <anssi@mandriva.org>2010-01-03 08:50:08 +0000
committerAnssi Hannula <anssi@mandriva.org>2010-01-03 08:50:08 +0000
commit854c3e5023035951184375b7bb83525878b9a7fb (patch)
tree3a63cc31efee60a39fbe0447141cca91c9eec15f /monitor-get-edid-using-vbe.c
parentb6a1b2905b8e404fa7e794bbe38fb20c81d6fc56 (diff)
downloadmonitor-edid-854c3e5023035951184375b7bb83525878b9a7fb.tar
monitor-edid-854c3e5023035951184375b7bb83525878b9a7fb.tar.gz
monitor-edid-854c3e5023035951184375b7bb83525878b9a7fb.tar.bz2
monitor-edid-854c3e5023035951184375b7bb83525878b9a7fb.tar.xz
monitor-edid-854c3e5023035951184375b7bb83525878b9a7fb.zip
monitor-get-edid-using-vbe:
- add --skip-vbe-check for skipping call for VBE info; useful if calling the program multiple times for different ports - on failure, return exit status 2 if no successful VBE calls were made
Diffstat (limited to 'monitor-get-edid-using-vbe.c')
-rw-r--r--monitor-get-edid-using-vbe.c21
1 files changed, 15 insertions, 6 deletions
diff --git a/monitor-get-edid-using-vbe.c b/monitor-get-edid-using-vbe.c
index c70e663..abd9e9a 100644
--- a/monitor-get-edid-using-vbe.c
+++ b/monitor-get-edid-using-vbe.c
@@ -17,6 +17,7 @@ int main(int argc, char **argv)
{
char edid[(1 + MAX_EXTENSION_COUNT) * EDID_BLOCK_SIZE];
int try_in_console = 0;
+ int skip_vbe_check = 0;
int port = 0;
int i;
@@ -25,16 +26,18 @@ int main(int argc, char **argv)
if (strcmp(arg, "-v") == 0) verbose = 1;
else if (strcmp(arg, "--port") == 0 && i+1 < argc) port = atoi(argv[++i]);
else if (strcmp(arg, "--try-in-console") == 0) try_in_console = 1;
+ else if (strcmp(arg, "--skip-vbe-check") == 0) skip_vbe_check = 1;
else if (strcmp(arg, "-h") == 0 ||
strcmp(arg, "--help") == 0) {
- printf("usage: monitor-get-edid [-v] [--port <0-3>] [--try-in-console]\n");
+ printf("usage: monitor-get-edid [-v] [--port <0-3>] [--try-in-console]\n"
+ " [--skip-vbe-check]\n");
exit(1);
}
}
- int size = get_edid(edid, port);
+ int size = get_edid(edid, port, skip_vbe_check);
- if (!size && try_in_console) {
+ if (size <= 0 && try_in_console) {
int non_X_console = 1;
struct vt_stat current;
int fd = open("/dev/console", O_RDWR);
@@ -45,7 +48,7 @@ int main(int argc, char **argv)
ioctl(fd, VT_ACTIVATE, non_X_console) == 0 &&
ioctl(fd, VT_WAITACTIVE, non_X_console) == 0) {
/* retrying */
- size = get_edid(edid, port);
+ size = get_edid(edid, port, skip_vbe_check);
/* restore */
if (ioctl(fd, VT_ACTIVATE, current.v_active) == 0)
@@ -54,7 +57,13 @@ int main(int argc, char **argv)
close(fd);
}
- if (size) write(1, edid, size);
+ if (size > 0) {
+ write(1, edid, size);
+ return 0;
+ }
- return size ? 0 : 1;
+ /* return 1 when VBE call was ok but not EDID call;
+ * calling program can then speedup call on other ports with --skip-vbe-check;
+ * also, calling program knows no ports work if the VBE call failed */
+ return size < 0 ? 2 : 1;
}