Support --vidpid option for configure
authorNIIBE Yutaka <gniibe@fsij.org>
Mon, 10 Sep 2012 03:19:23 +0000 (12:19 +0900)
committerNIIBE Yutaka <gniibe@fsij.org>
Mon, 10 Sep 2012 03:19:23 +0000 (12:19 +0900)
ChangeLog
NEUG_USB_DEVICE_ID [new file with mode: 0644]
src/.gitignore
src/Makefile.in
src/configure
src/main.c

index faa8f71..343b816 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2012-09-10  Niibe Yutaka  <gniibe@fsij.org>
+
+       * NEUG_USB_DEVICE_ID: New file.
+
+       * src/main.c: Include usb-vid-pid-ver.c.inc and usb-strings.c.inc.
+
+       * src/configure (vidpid): New.
+
 2012-08-30  Niibe Yutaka  <gniibe@fsij.org>
 
        * Version 0.02.
diff --git a/NEUG_USB_DEVICE_ID b/NEUG_USB_DEVICE_ID
new file mode 100644 (file)
index 0000000..821cba0
--- /dev/null
@@ -0,0 +1,3 @@
+# VID:PID      bcdDev  Product_STRING  Vender_STRING
+234b:0001      0100    NeuG RNG        Free Software Initiative of Japan
+##########<TAB>        ##<TAB> ##########<TAB> #################
index bbeb98c..b03aa2e 100644 (file)
@@ -7,3 +7,5 @@ neug.map
 config.h
 Makefile
 .dep
+usb-strings.c.inc
+usb-vid-pid-ver.c.inc
index fb8b170..5790586 100644 (file)
@@ -183,4 +183,4 @@ include $(CHIBIOS)/os/ports/GCC/ARMCMx/rules.mk
 MCFLAGS= -mcpu=$(MCU) -mfix-cortex-m3-ldrd
 
 distclean: clean
-       -rm -f Makefile neug.ld config.h
+       -rm -f Makefile neug.ld config.h usb-strings.c.inc usb-vid-pid-ver.c.inc
index 876c0ed..293ddbb 100755 (executable)
@@ -3,7 +3,7 @@
 #
 # This file is *NOT* generated by GNU Autoconf, but written by NIIBE Yutaka
 #
-# Copyright (C) 2010, 2011 Free Software Initiative of Japan
+# Copyright (C) 2010, 2011, 2012 Free Software Initiative of Japan
 #
 # This file is a part of NeuG, a Random Number Generator implementation.
 #
@@ -24,6 +24,7 @@
 help=no
 target=STBEE_MINI
 verbose=no
+vidpid=none
 with_dfu=default
 debug=no
 
@@ -41,6 +42,8 @@ for option; do
     target=$optarg ;;
   -v | --verbose)
     verbose=yes ;;
+  --vidpid=*)
+    vidpid=$optarg ;;
   --with-dfu)
     with_dfu=yes ;;
   --without-dfu)
@@ -61,6 +64,7 @@ Defaults for the options are specified in brackets.
 
 Configuration:
   -h, --help           display this help and exit      [no]
+  --vidpid=VID:PID     specify vendor/product ID       [<NONE>]
   --target=TARGET      specify target                  [STBEE_MINI]
                        supported targes are:
                           OLIMEX_STM32_H103
@@ -72,6 +76,11 @@ EOF
   exit 0
 fi
 
+if test "$vidpid" = "none"; then
+  echo "Please specify Vendor ID and Product ID by --vidpid option." 
+  exit 1
+fi
+
 BOARD_DIR=../boards/$target
 if test -d $BOARD_DIR; then
   echo "Configured for target: $target"
@@ -124,6 +133,54 @@ else
   DFU_DEFINE="#undef DFU_SUPPORT"
 fi
 
+REVISION=`git describe --dirty="-modified"` 
+CONFIG="$target:dfu=$with_dfu"
+
+if !(IFS="     "
+  while read VIDPID VERSION PRODUCT VENDOR; do
+    if test "$vidpid" = "$VIDPID"; then
+      (echo $VIDPID | sed -n -e "s%^\([0-9a-f][0-9a-f]\)\([0-9a-f][0-9a-f]\):\([0-9a-f][0-9a-f]\)\([0-9a-f][0-9a-f]\)$%  0x\2, 0x\1, /* idVendor  */\n  0x\4, 0x\3, /* idProduct */%p"
+       echo $VERSION | sed -n -e "s%^\([0-9a-f][0-9a-f]\)\([0-9a-f][0-9a-f]\)$%  0x\2, 0x\1, /* bcdDevice  */%p"
+      ) > usb-vid-pid-ver.c.inc
+      (echo 'static const uint8_t neug_string_vendor[] = {'
+       echo "  ${#VENDOR}*2+2,                 /* bLength */"
+       echo "  USB_STRING_DESCRIPTOR_TYPE,     /* bDescriptorType */"
+       echo "  /* Manufacturer: \"$VENDOR\" */"
+       echo $VENDOR | sed -n -e "s/\(........\)/\1\n/gp" | sed -n -e "s/\(.\)/'\1', 0, /g" -e "s/^/  /" -e "s/ $//p"
+       echo '};'
+       echo
+       echo 'static const uint8_t neug_string_product[] = {'
+       echo "  ${#PRODUCT}*2+2,                        /* bLength */"
+       echo "  USB_STRING_DESCRIPTOR_TYPE,     /* bDescriptorType */"
+       echo "  /* Product name: \"$PRODUCT\" */"
+       echo $PRODUCT | sed -n -e "s/\(........\)/\1\n/gp" | sed -n -e "s/\(.\)/'\1', 0, /g" -e "s/^/  /" -e "s/ $//p"
+       echo '};'
+       echo
+       echo '#ifdef USB_STRINGS_FOR_NEUG'
+       echo 'static const uint8_t neug_revision_detail[] = {'
+       echo "  ${#REVISION}*2+2,                       /* bLength */"
+       echo "  USB_STRING_DESCRIPTOR_TYPE,     /* bDescriptorType */"
+       echo "  /* revision detail: \"$REVISION\" */"
+       echo $REVISION | sed -n -e "s/\(........\)/\1\n/gp" | sed -n -e "s/\(.\)/'\1', 0, /g" -e "s/^/  /" -e "s/ $//p"
+       echo '};'
+       echo
+       echo 'static const uint8_t neug_config_options[] = {'
+       echo "  ${#CONFIG}*2+2,                 /* bLength */"
+       echo "  USB_STRING_DESCRIPTOR_TYPE,     /* bDescriptorType */"
+       echo "  /* configure options: \"$CONFIG\" */"
+       echo $CONFIG | sed -n -e "s/\(........\)/\1\n/gp" | sed -n -e "s/\(.\)/'\1', 0, /g" -e "s/^/  /" -e "s/ $//p"
+       echo '};'
+       echo '#endif'
+       ) >usb-strings.c.inc
+      exit 0
+    fi
+  done; exit 1) < ../NEUG_USB_DEVICE_ID
+then
+  echo "Please specify valid Vendor ID and Product ID." 
+  echo "Check ../NEUG_USB_DEVICE_ID."
+  exit 1
+fi
+
 sed -e "s%@BOARD_DIR@%$BOARD_DIR%" \
        < Makefile.in > Makefile
 sed -e "s/@ORIGIN@/$ORIGIN/" -e "s/@FLASH_SIZE@/$FLASH_SIZE/" \
index 7139b0d..c02a678 100644 (file)
@@ -59,9 +59,7 @@ static const uint8_t vcom_device_desc[18] = {
   0x00,                                /* bDeviceSubClass.                 */
   0x00,                                /* bDeviceProtocol.                 */
   0x40,                                /* bMaxPacketSize.                  */
-  0x4b, 0x23,                  /* idVendor (FSIJ).                 */
-  0x01, 0x00,                  /* idProduct (NeoG).                */
-  0x00, 0x01,                  /* bcdDevice.                       */
+#include "usb-vid-pid-ver.c.inc"
   1,                           /* iManufacturer.                   */
   2,                           /* iProduct.                        */
   3,                           /* iSerialNumber.                   */
@@ -161,29 +159,8 @@ static const uint8_t vcom_string0[4] = {
   0x09, 0x04                   /* LangID = 0x0409: US-English */
 };
 
-/*
- * Vendor string.
- */
-static const uint8_t vcom_string1[68] = {
-  68,                    /* bLength.                         */
-  USB_STRING_DESCRIPTOR_TYPE, /* bDescriptorType.                 */
-  /* Manufacturer: "Free Software Initiative of Japan" */
-  'F', 0, 'r', 0, 'e', 0, 'e', 0, ' ', 0, 'S', 0, 'o', 0, 'f', 0,
-  't', 0, 'w', 0, 'a', 0, 'r', 0, 'e', 0, ' ', 0, 'I', 0, 'n', 0,
-  'i', 0, 't', 0, 'i', 0, 'a', 0, 't', 0, 'i', 0, 'v', 0, 'e', 0,
-  ' ', 0, 'o', 0, 'f', 0, ' ', 0, 'J', 0, 'a', 0, 'p', 0, 'a', 0,
-  'n', 0
-};
-
-/*
- * Device Description string.
- */
-static const uint8_t vcom_string2[18] = {
-  18,                    /* bLength.                         */
-  USB_STRING_DESCRIPTOR_TYPE, /* bDescriptorType.                 */
-  /* Product name: "NeuG RNG" */
-  'N', 0, 'e', 0, 'u', 0, 'G', 0, ' ', 0, 'R', 0, 'N', 0, 'G', 0,
-};
+#define USB_STRINGS_FOR_NEUG 1
+#include "usb-strings.c.inc"
 
 /*
  * Serial Number string.  NOTE: This does not have CONST qualifier.
@@ -211,9 +188,12 @@ static const struct Descriptor config_desc = {
 
 static const struct Descriptor string_descs[] = {
   {vcom_string0, sizeof vcom_string0},
-  {vcom_string1, sizeof vcom_string1},
-  {vcom_string2, sizeof vcom_string2},
-  {vcom_string3, sizeof vcom_string3}
+  {neug_string_vendor, sizeof (neug_string_vendor)},
+  {neug_string_product, sizeof (neug_string_product)},
+  {vcom_string3, sizeof (vcom_string3)},
+  {neug_revision_detail, sizeof (neug_revision_detail)},
+  {neug_config_options, sizeof (neug_config_options)},
+  {sys_version, sizeof (sys_version)},
 };
 
 #define NUM_STRING_DESC (sizeof (string_descs)/sizeof (struct Descriptor))