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.
7 #include "qemu/osdep.h"
8 #include "qemu/bswap.h"
9 #include "qemu/cutils.h"
10 #include "hw/display/edid.h"
12 static qemu_edid_info info = {
17 static void usage(FILE *out)
21 "This is a test tool for the qemu edid generator.\n"
23 "Typically you'll pipe the output into edid-decode\n"
24 "to check if the generator works correctly.\n"
26 "usage: qemu-edid <options>\n"
28 " -h print this text\n"
29 " -o <file> set output file (stdout by default)\n"
30 " -v <vendor> set monitor vendor (three letters)\n"
31 " -n <name> set monitor name\n"
32 " -s <serial> set monitor serial\n"
33 " -d <dpi> set display resolution\n"
34 " -x <prefx> set preferred width\n"
35 " -y <prefy> set preferred height\n"
36 " -X <maxx> set maximum width\n"
37 " -Y <maxy> set maximum height\n"
41 int main(int argc, char *argv[])
49 rc = getopt(argc, argv, "ho:x:y:X:Y:d:v:n:s:");
56 fprintf(stderr, "outfile specified twice\n");
59 outfile = fopen(optarg, "w");
60 if (outfile == NULL) {
61 fprintf(stderr, "open %s: %s\n", optarg, strerror(errno));
66 if (qemu_strtoui(optarg, NULL, 10, &info.prefx) < 0) {
67 fprintf(stderr, "not a number: %s\n", optarg);
72 if (qemu_strtoui(optarg, NULL, 10, &info.prefy) < 0) {
73 fprintf(stderr, "not a number: %s\n", optarg);
78 if (qemu_strtoui(optarg, NULL, 10, &info.maxx) < 0) {
79 fprintf(stderr, "not a number: %s\n", optarg);
84 if (qemu_strtoui(optarg, NULL, 10, &info.maxy) < 0) {
85 fprintf(stderr, "not a number: %s\n", optarg);
90 if (qemu_strtoui(optarg, NULL, 10, &dpi) < 0) {
91 fprintf(stderr, "not a number: %s\n", optarg);
102 info.serial = optarg;
113 if (outfile == NULL) {
117 info.width_mm = qemu_edid_dpi_to_mm(dpi, info.prefx);
118 info.height_mm = qemu_edid_dpi_to_mm(dpi, info.prefy);
120 memset(blob, 0, sizeof(blob));
121 qemu_edid_generate(blob, sizeof(blob), &info);
122 fwrite(blob, sizeof(blob), 1, outfile);