diff options
| author | Keith Packard <keithp@keithp.com> | 2011-05-17 17:51:55 -0700 | 
|---|---|---|
| committer | Keith Packard <keithp@keithp.com> | 2011-05-17 17:51:55 -0700 | 
| commit | edc7bff70353df0c83deff6d5107060f6e934607 (patch) | |
| tree | 3c2a7c525249a328e1469cb757b9d73bea857a2f /src-avr/ao-make-product.5c | |
| parent | 106d43a3fa5b1fc5278eaefd879739d917bdecf7 (diff) | |
src-avr: Add a couple of missing files
These are part of the ../src directory, I think
Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'src-avr/ao-make-product.5c')
| -rw-r--r-- | src-avr/ao-make-product.5c | 103 | 
1 files changed, 103 insertions, 0 deletions
| diff --git a/src-avr/ao-make-product.5c b/src-avr/ao-make-product.5c new file mode 100644 index 00000000..5f2eb8e8 --- /dev/null +++ b/src-avr/ao-make-product.5c @@ -0,0 +1,103 @@ +#!/bin/sh + +autoimport ParseArgs; + +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); +	for (int i = 0; i < len; i++) { +		int	c = a[i]; +		if (i > 0) +			printf(","); +		if (0x20 <= c && c < 128) +			printf(" '%c', 0", c); +		else +			printf(" LE_WORD(0x%04x),", c); +	} +	printf("\n\n"); +} + +void +write_string(string a, string description) +{ +	printf ("/* %s */\n", description); +	printf ("#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); +} + +void +write_hex(int a, string description) +{ +	printf ("/* %s */\n", description); +	printf ("#define AO_%s_NUMBER 0x%04x\n\n", description, a); +} + +string manufacturer = "altusmetrum.org"; +string product = "TeleMetrum"; +string version = "0.0"; +int serial = 1; +int user_argind = 0; +int id_product = 0x000a; + +argdesc argd = { +	.args = { +		{ +			.var = { .arg_string = &manufacturer }, +			.abbr = 'm', +			.name = "manufacturer", +			.expr_name = "manf", +			.desc = "Manufacturer name." }, +		{ +			.var = { .arg_string = &product }, +			.abbr = 'p', +			.name = "product", +			.expr_name = "prod", +			.desc = "Product name." }, +		{ +			.var = { .arg_int = &id_product }, +			.abbr = 'i', +			.name = "id_product", +			.expr_name = "id_p", +			.desc = "Product ID." }, +		{ +			.var = { .arg_int = &serial }, +			.abbr = 's', +			.name = "serial", +			.expr_name = "number", +			.desc = "Serial number." }, +		{ +			.var = { .arg_string = &version }, +			.abbr = 'v', +			.name = "version", +			.expr_name = "string", +			.desc = "Program version." }, +	}, +	.prog_name = "usb descriptors", +}; + +void +main() +{ +	string[dim(argv)-1] nargv = {[n] = argv[n+1]}; +	parseargs(&argd, &nargv); +	write_ucs2(manufacturer, "iManufacturer"); +	write_ucs2(product, "iProduct"); +	write_ucs2(sprintf("%06d", serial), "iSerial"); +	write_int(serial, "iSerial"); +	write_hex(id_product, "idProduct"); +	write_string(version, "iVersion"); +} + +main(); | 
