Reset landing interval tests at apogee
[fw/altos] / ao-make-product.5c
1 #!/bin/sh
2
3 autoimport ParseArgs;
4
5 void
6 write_string(string a, string description)
7 {
8         int len = String::length(a);
9
10         printf("/* %s */\n", description);
11         printf("#define AO_%s_LEN 0x%02x\n", description, len * 2 + 2);
12         printf("#define AO_%s_STRING", description);
13         for (int i = 0; i < len; i++) {
14                 int     c = a[i];
15                 if (i > 0)
16                         printf(",");
17                 if (0x20 <= c && c < 128)
18                         printf(" '%c', 0", c);
19                 else
20                         printf(" LE_WORD(0x%04x),", c);
21         }
22         printf("\n\n");
23 }
24
25 void
26 write_int(int a, string description)
27 {
28         printf ("/* %s */\n", description);
29         printf ("#define AO_%s_NUMBER %d\n\n", description, a);
30 }
31
32 string manufacturer = "altusmetrum.org";
33 string product = "TeleMetrum";
34 int serial = 1;
35 int user_argind = 0;
36
37 argdesc argd = {
38         .args = {
39                 {
40                         .var = { .arg_string = &manufacturer },
41                         .abbr = 'm',
42                         .name = "manufacturer",
43                         .expr_name = "manf",
44                         .desc = "Manufacturer name." },
45                 {
46                         .var = { .arg_string = &product },
47                         .abbr = 'p',
48                         .name = "product",
49                         .expr_name = "prod",
50                         .desc = "Product name." },
51                 {
52                         .var = { .arg_int = &serial },
53                         .abbr = 's',
54                         .name = "serial",
55                         .expr_name = "number",
56                         .desc = "Serial number." },
57         },
58         .prog_name = "usb descriptors",
59 };
60
61 void
62 main()
63 {
64         string[dim(argv)-1] nargv = {[n] = argv[n+1]};
65         parseargs(&argd, &nargv);
66         write_string(manufacturer, "iManufacturer");
67         write_string(product, "iProduct");
68         write_string(sprintf("%06d", serial), "iSerial");
69         write_int(serial, "iSerial");
70 }
71
72 main();