altos/test: Adjust CRC error rate after FEC fix
[fw/altos] / src / util / ao-make-product.5c
1 #!/usr/bin/nickle
2
3 autoimport ParseArgs;
4
5 file  out = stdout;
6
7 void
8 write_ucs2(string a, string description)
9 {
10         int len = String::length(a);
11
12         File::fprintf(out, "/* %s */\n", description);
13         File::fprintf(out, "#define AO_%s_LEN 0x%02x\n", description, len * 2 + 2);
14         File::fprintf(out, "#define AO_%s_STRING \"%s\"\n", description, a);
15         File::fprintf(out, "#define AO_%s_UCS2", description);
16         for (int i = 0; i < len; i++) {
17                 int     c = a[i];
18                 if (i > 0)
19                         File::fprintf(out, ",");
20                 if (0x20 <= c && c < 128)
21                         File::fprintf(out, " '%c', 0", c);
22                 else
23                         File::fprintf(out, " LE_WORD(0x%04x),", c);
24         }
25         File::fprintf(out, "\n\n");
26 }
27
28 void
29 write_string(string a, string description)
30 {
31         File::fprintf(out, "/* %s */\n", description);
32         File::fprintf(out, "#define AO_%s_STRING \"%s\"\n", description, a);
33 }
34
35 void
36 write_int(int a, string description)
37 {
38         File::fprintf(out, "/* %s */\n", description);
39         File::fprintf(out, "#define AO_%s_NUMBER %d\n\n", description, a);
40 }
41
42 void
43 write_hex(int a, string description)
44 {
45         File::fprintf(out, "/* %s */\n", description);
46         File::fprintf(out, "#define AO_%s_NUMBER 0x%04x\n\n", description, a);
47 }
48
49 string manufacturer = "altusmetrum.org";
50 string product = "TeleMetrum";
51 string version = "0.0";
52 string output = "";
53 int serial = 1;
54 int user_argind = 0;
55 int id_vendor = 0xfffe;
56 int id_product = 0x000a;
57
58 argdesc argd = {
59         .args = {
60                 {
61                         .var = { .arg_string = &manufacturer },
62                         .abbr = 'm',
63                         .name = "manufacturer",
64                         .expr_name = "manf",
65                         .desc = "Manufacturer name." },
66                 {
67                         .var = { .arg_string = &product },
68                         .abbr = 'p',
69                         .name = "product",
70                         .expr_name = "prod",
71                         .desc = "Product name." },
72                 {
73                         .var = { .arg_int = &id_vendor },
74                         .abbr = 'V',
75                         .name = "id_vendor",
76                         .expr_name = "id_v",
77                         .desc = "Vendor ID." },
78                 {
79                         .var = { .arg_int = &id_product },
80                         .abbr = 'i',
81                         .name = "id_product",
82                         .expr_name = "id_p",
83                         .desc = "Product ID." },
84                 {
85                         .var = { .arg_int = &serial },
86                         .abbr = 's',
87                         .name = "serial",
88                         .expr_name = "number",
89                         .desc = "Serial number." },
90                 {
91                         .var = { .arg_string = &version },
92                         .abbr = 'v',
93                         .name = "version",
94                         .expr_name = "string",
95                         .desc = "Program version." },
96                 {
97                         .var = { .arg_string = &output },
98                         .abbr = 'o',
99                         .name = "output",
100                         .expr_name = "out",
101                         .desc = "Output file." },
102         },
103         .prog_name = "usb descriptors",
104 };
105
106 void
107 main()
108 {
109         string[dim(argv)-1] nargv = {[n] = argv[n+1]};
110         parseargs(&argd, &nargv);
111         if (output != "")
112                 out = File::open(output, "w");
113         write_ucs2(manufacturer, "iManufacturer");
114         write_ucs2(product, "iProduct");
115         write_ucs2(sprintf("%06d", serial), "iSerial");
116         write_int(serial, "iSerial");
117         write_hex(id_product, "idProduct");
118         write_hex(id_vendor, "idVendor");
119         write_string(version, "iVersion");
120 }
121
122 main();