altos: Define USB product ID in per-product Makefile.defs file
authorKeith Packard <keithp@keithp.com>
Sun, 22 Aug 2010 00:09:41 +0000 (17:09 -0700)
committerKeith Packard <keithp@keithp.com>
Sun, 22 Aug 2010 00:09:41 +0000 (17:09 -0700)
This allows Win7 to tell which kind of device is connected purely by
USB id as it doesn't expose the USB product ID string to user space.

Signed-off-by: Keith Packard <keithp@keithp.com>
src/Makefile.proto
src/ao-make-product.5c
src/ao_product.c
src/teledongle-v0.1/Makefile.defs
src/teledongle-v0.2/Makefile.defs
src/telemetrum-v0.1-sirf/Makefile.defs
src/telemetrum-v0.1-sky/Makefile.defs
src/telemetrum-v1.0/Makefile.defs
src/tidongle/Makefile.defs

index 106333a..eedb878 100644 (file)
@@ -214,7 +214,7 @@ all: ../$(PROG)
        nickle $< > $@
 
 ao_product.h: ao-make-product.5c
-       $(call quiet,NICKLE,$<) $< -m altusmetrum.org -p $(PRODUCT) -v $(VERSION) > $@
+       $(call quiet,NICKLE,$<) $< -m altusmetrum.org -i $(IDPRODUCT) -p $(PRODUCT) -v $(VERSION) > $@
 
 ao_product.rel: ao_product.c ao_product.h
        $(call quiet,CC) -c $(CFLAGS) -D PRODUCT_DEFS='\"ao_product.h\"' -o$@ $<
index 933032d..5f2eb8e 100644 (file)
@@ -37,11 +37,19 @@ write_int(int a, string 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 = {
@@ -57,6 +65,12 @@ argdesc argd = {
                        .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',
@@ -82,6 +96,7 @@ main()
        write_ucs2(product, "iProduct");
        write_ucs2(sprintf("%06d", serial), "iSerial");
        write_int(serial, "iSerial");
+       write_hex(id_product, "idProduct");
        write_string(version, "iVersion");
 }
 
index b42e62c..2bd0b59 100644 (file)
@@ -40,7 +40,7 @@ const uint8_t ao_usb_descriptors [] =
        0x00,                   /*  bDeviceProtocol */
        AO_USB_CONTROL_SIZE,    /*  bMaxPacketSize */
        LE_WORD(0xFFFE),        /*  idVendor */
-       LE_WORD(0x000A),        /*  idProduct */
+       LE_WORD(AO_idProduct_NUMBER),   /*  idProduct */
        LE_WORD(0x0100),        /*  bcdDevice */
        0x01,                   /*  iManufacturer */
        0x02,                   /*  iProduct */
index 06559b2..be7741d 100644 (file)
@@ -6,3 +6,4 @@ SRC = \
 
 PRODUCT=TeleDongle-v0.1
 PRODUCT_DEF=-DTELEDONGLE_V_0_1
+IDPRODUCT=0x000c
index 23694fd..cbec780 100644 (file)
@@ -6,3 +6,4 @@ SRC = \
 
 PRODUCT=TeleDongle-v0.2
 PRODUCT_DEF=-DTELEDONGLE_V_0_2
+IDPRODUCT=0x000c
index 7306683..2ce6e6e 100644 (file)
@@ -8,3 +8,4 @@ SRC = \
 
 PRODUCT=TeleMetrum-v0.1-SiRF
 PRODUCT_DEF=-DTELEMETRUM_V_0_1
+IDPRODUCT=0x000b
index df475ba..098ac54 100644 (file)
@@ -8,3 +8,4 @@ SRC = \
 
 PRODUCT=TeleMetrum-v0.1
 PRODUCT_DEF=-DTELEMETRUM_V_0_1
+IDPRODUCT=0x000b
index e3cc5eb..624ce6e 100644 (file)
@@ -8,3 +8,4 @@ SRC = \
 
 PRODUCT=TeleMetrum-v1.0
 PRODUCT_DEF=-DTELEMETRUM_V_1_0
+IDPRODUCT=0x000b
index 5b910b9..fdd5173 100644 (file)
@@ -6,3 +6,4 @@ SRC = \
 PRODUCT=TIDongle
 
 PRODUCT_DEF=-DTIDONGLE
+IDPRODUCT=0x000a