X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=blobdiff_plain;f=src%2Futil%2Fao-make-product.5c;h=3ab8d16ec474aba3403cc9a6654c24f4868eefa9;hp=5f2eb8e895557a492405c016336cac51dd3eedea;hb=c3321bd9f73c89686fe983a8d99f4e54fa91550e;hpb=fce4e6926de7cb5ef6ea64a8db134c442b86153b diff --git a/src/util/ao-make-product.5c b/src/util/ao-make-product.5c index 5f2eb8e8..3ab8d16e 100644 --- a/src/util/ao-make-product.5c +++ b/src/util/ao-make-product.5c @@ -1,54 +1,58 @@ -#!/bin/sh +#!/usr/bin/nickle autoimport ParseArgs; +file out = stdout; + void write_ucs2(string a, string description) { int len = String::length(a); - printf("/* %s */\n", description); - printf("#define AO_%s_LEN 0x%02x\n", description, len * 2 + 2); - printf("#define AO_%s_STRING \"%s\"\n", description, a); - printf("#define AO_%s_UCS2", description); + File::fprintf(out, "/* %s */\n", description); + File::fprintf(out, "#define AO_%s_LEN 0x%02x\n", description, len * 2 + 2); + File::fprintf(out, "#define AO_%s_STRING \"%s\"\n", description, a); + File::fprintf(out, "#define AO_%s_UCS2", description); for (int i = 0; i < len; i++) { int c = a[i]; if (i > 0) - printf(","); + File::fprintf(out, ","); if (0x20 <= c && c < 128) - printf(" '%c', 0", c); + File::fprintf(out, " '%c', 0", c); else - printf(" LE_WORD(0x%04x),", c); + File::fprintf(out, " LE_WORD(0x%04x),", c); } - printf("\n\n"); + File::fprintf(out, "\n\n"); } void write_string(string a, string description) { - printf ("/* %s */\n", description); - printf ("#define AO_%s_STRING \"%s\"\n", description, a); + File::fprintf(out, "/* %s */\n", description); + File::fprintf(out, "#define AO_%s_STRING \"%s\"\n", description, a); } void write_int(int a, string description) { - printf ("/* %s */\n", description); - printf ("#define AO_%s_NUMBER %d\n\n", description, a); + File::fprintf(out, "/* %s */\n", description); + File::fprintf(out, "#define AO_%s_NUMBER %d\n\n", description, a); } void write_hex(int a, string description) { - printf ("/* %s */\n", description); - printf ("#define AO_%s_NUMBER 0x%04x\n\n", description, a); + File::fprintf(out, "/* %s */\n", description); + File::fprintf(out, "#define AO_%s_NUMBER 0x%04x\n\n", description, a); } string manufacturer = "altusmetrum.org"; string product = "TeleMetrum"; string version = "0.0"; +string output = ""; int serial = 1; int user_argind = 0; +int id_vendor = 0xfffe; int id_product = 0x000a; argdesc argd = { @@ -65,6 +69,12 @@ argdesc argd = { .name = "product", .expr_name = "prod", .desc = "Product name." }, + { + .var = { .arg_int = &id_vendor }, + .abbr = 'V', + .name = "id_vendor", + .expr_name = "id_v", + .desc = "Vendor ID." }, { .var = { .arg_int = &id_product }, .abbr = 'i', @@ -83,6 +93,12 @@ argdesc argd = { .name = "version", .expr_name = "string", .desc = "Program version." }, + { + .var = { .arg_string = &output }, + .abbr = 'o', + .name = "output", + .expr_name = "out", + .desc = "Output file." }, }, .prog_name = "usb descriptors", }; @@ -92,11 +108,14 @@ main() { string[dim(argv)-1] nargv = {[n] = argv[n+1]}; parseargs(&argd, &nargv); + if (output != "") + out = File::open(output, "w"); write_ucs2(manufacturer, "iManufacturer"); write_ucs2(product, "iProduct"); write_ucs2(sprintf("%06d", serial), "iSerial"); write_int(serial, "iSerial"); write_hex(id_product, "idProduct"); + write_hex(id_vendor, "idVendor"); write_string(version, "iVersion"); }