qxl: check release info object
[qemu.git] / qemu-edid.c
1 /*
2 * QEMU EDID test tool.
3 *
4 * This work is licensed under the terms of the GNU GPL, version 2 or later.
5 * See the COPYING file in the top-level directory.
6 */
7 #include "qemu/osdep.h"
8 #include "qemu-common.h"
9 #include "qemu/bswap.h"
10 #include "qemu/cutils.h"
11 #include "hw/display/edid.h"
12
13 static qemu_edid_info info;
14
15 static void usage(FILE *out)
16 {
17 fprintf(out,
18 "\n"
19 "This is a test tool for the qemu edid generator.\n"
20 "\n"
21 "Typically you'll pipe the output into edid-decode\n"
22 "to check if the generator works correctly.\n"
23 "\n"
24 "usage: qemu-edid <options>\n"
25 "options:\n"
26 " -h print this text\n"
27 " -o <file> set output file (stdout by default)\n"
28 " -v <vendor> set monitor vendor (three letters)\n"
29 " -n <name> set monitor name\n"
30 " -s <serial> set monitor serial\n"
31 " -d <dpi> set display resolution\n"
32 " -x <prefx> set preferred width\n"
33 " -y <prefy> set preferred height\n"
34 " -X <maxx> set maximum width\n"
35 " -Y <maxy> set maximum height\n"
36 "\n");
37 }
38
39 int main(int argc, char *argv[])
40 {
41 FILE *outfile = NULL;
42 uint8_t blob[256];
43 int rc;
44
45 for (;;) {
46 rc = getopt(argc, argv, "ho:x:y:X:Y:d:v:n:s:");
47 if (rc == -1) {
48 break;
49 }
50 switch (rc) {
51 case 'o':
52 if (outfile) {
53 fprintf(stderr, "outfile specified twice\n");
54 exit(1);
55 }
56 outfile = fopen(optarg, "w");
57 if (outfile == NULL) {
58 fprintf(stderr, "open %s: %s\n", optarg, strerror(errno));
59 exit(1);
60 }
61 break;
62 case 'x':
63 if (qemu_strtoui(optarg, NULL, 10, &info.prefx) < 0) {
64 fprintf(stderr, "not a number: %s\n", optarg);
65 exit(1);
66 }
67 break;
68 case 'y':
69 if (qemu_strtoui(optarg, NULL, 10, &info.prefy) < 0) {
70 fprintf(stderr, "not a number: %s\n", optarg);
71 exit(1);
72 }
73 break;
74 case 'X':
75 if (qemu_strtoui(optarg, NULL, 10, &info.maxx) < 0) {
76 fprintf(stderr, "not a number: %s\n", optarg);
77 exit(1);
78 }
79 break;
80 case 'Y':
81 if (qemu_strtoui(optarg, NULL, 10, &info.maxy) < 0) {
82 fprintf(stderr, "not a number: %s\n", optarg);
83 exit(1);
84 }
85 break;
86 case 'd':
87 if (qemu_strtoui(optarg, NULL, 10, &info.dpi) < 0) {
88 fprintf(stderr, "not a number: %s\n", optarg);
89 exit(1);
90 }
91 break;
92 case 'v':
93 info.vendor = optarg;
94 break;
95 case 'n':
96 info.name = optarg;
97 break;
98 case 's':
99 info.serial = optarg;
100 break;
101 case 'h':
102 usage(stdout);
103 exit(0);
104 default:
105 usage(stderr);
106 exit(1);
107 }
108 }
109
110 if (outfile == NULL) {
111 outfile = stdout;
112 }
113
114 memset(blob, 0, sizeof(blob));
115 qemu_edid_generate(blob, sizeof(blob), &info);
116 fwrite(blob, sizeof(blob), 1, outfile);
117 fflush(outfile);
118
119 exit(0);
120 }