qemu

Форк
0
/
qemu-edid.c 
132 строки · 3.7 Кб
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/bswap.h"
9
#include "qemu/cutils.h"
10
#include "hw/display/edid.h"
11

12
static qemu_edid_info info = {
13
    .prefx = 1280,
14
    .prefy = 800,
15
};
16

17
static void usage(FILE *out)
18
{
19
    fprintf(out,
20
            "\n"
21
            "This is a test tool for the qemu edid generator.\n"
22
            "\n"
23
            "Typically you'll pipe the output into edid-decode\n"
24
            "to check if the generator works correctly.\n"
25
            "\n"
26
            "usage: qemu-edid <options>\n"
27
            "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"
38
            "\n");
39
}
40

41
int main(int argc, char *argv[])
42
{
43
    FILE *outfile = NULL;
44
    uint8_t blob[512];
45
    size_t size;
46
    uint32_t dpi = 100;
47
    int rc;
48

49
    for (;;) {
50
        rc = getopt(argc, argv, "ho:x:y:X:Y:d:v:n:s:");
51
        if (rc == -1) {
52
            break;
53
        }
54
        switch (rc) {
55
        case 'o':
56
            if (outfile) {
57
                fprintf(stderr, "outfile specified twice\n");
58
                exit(1);
59
            }
60
            outfile = fopen(optarg, "w");
61
            if (outfile == NULL) {
62
                fprintf(stderr, "open %s: %s\n", optarg, strerror(errno));
63
                exit(1);
64
            }
65
            break;
66
        case 'x':
67
            if (qemu_strtoui(optarg, NULL, 10, &info.prefx) < 0) {
68
                fprintf(stderr, "not a number: %s\n", optarg);
69
                exit(1);
70
            }
71
            break;
72
        case 'y':
73
            if (qemu_strtoui(optarg, NULL, 10, &info.prefy) < 0) {
74
                fprintf(stderr, "not a number: %s\n", optarg);
75
                exit(1);
76
            }
77
            break;
78
        case 'X':
79
            if (qemu_strtoui(optarg, NULL, 10, &info.maxx) < 0) {
80
                fprintf(stderr, "not a number: %s\n", optarg);
81
                exit(1);
82
            }
83
            break;
84
        case 'Y':
85
            if (qemu_strtoui(optarg, NULL, 10, &info.maxy) < 0) {
86
                fprintf(stderr, "not a number: %s\n", optarg);
87
                exit(1);
88
            }
89
            break;
90
        case 'd':
91
            if (qemu_strtoui(optarg, NULL, 10, &dpi) < 0) {
92
                fprintf(stderr, "not a number: %s\n", optarg);
93
                exit(1);
94
            }
95
            if (dpi == 0) {
96
                fprintf(stderr, "cannot be zero: %s\n", optarg);
97
                exit(1);
98
            }
99
            break;
100
        case 'v':
101
            info.vendor = optarg;
102
            break;
103
        case 'n':
104
            info.name = optarg;
105
            break;
106
        case 's':
107
            info.serial = optarg;
108
            break;
109
        case 'h':
110
            usage(stdout);
111
            exit(0);
112
        default:
113
            usage(stderr);
114
            exit(1);
115
        }
116
    }
117

118
    if (outfile == NULL) {
119
        outfile = stdout;
120
    }
121

122
    info.width_mm = qemu_edid_dpi_to_mm(dpi, info.prefx);
123
    info.height_mm = qemu_edid_dpi_to_mm(dpi, info.prefy);
124

125
    memset(blob, 0, sizeof(blob));
126
    qemu_edid_generate(blob, sizeof(blob), &info);
127
    size = qemu_edid_size(blob);
128
    fwrite(blob, size, 1, outfile);
129
    fflush(outfile);
130

131
    exit(0);
132
}
133

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.