Fix tool/neug_upgrade.py
authorNIIBE Yutaka <gniibe@fsij.org>
Fri, 11 Sep 2015 05:57:07 +0000 (14:57 +0900)
committerNIIBE Yutaka <gniibe@fsij.org>
Fri, 11 Sep 2015 05:57:07 +0000 (14:57 +0900)
ChangeLog
README
chopstx
tool/neug_upgrade.py

index 8c3602c..6efbd21 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2015-09-11  Niibe Yutaka  <gniibe@fsij.org>
+
+       * tool/neug_upgrade.py (main): Loop until finding reGNUal device.
+
 2015-09-08  Niibe Yutaka  <gniibe@fsij.org>
 
        * src/adc_stm32f103.c (get_adc_config): Add
diff --git a/README b/README
index 065a106..d80fd88 100644 (file)
--- a/README
+++ b/README
@@ -1,7 +1,7 @@
 NeuG - a true random number generator implementation (for STM32F103)
 
-                                                         Version 1.0.3
-                                                            2015-08-03
+                                                         Version 1.0.4
+                                                            2015-09-??
                                                           Niibe Yutaka
                                      Free Software Initiative of Japan
 
@@ -28,7 +28,7 @@ NeuG was named after my daughter, but I don't say she is noisy.
 Release notes
 =============
 
-This is the third minor release of NeuG, after 1.0.
+This is the fourth minor release of NeuG, after 1.0.
 
 Basic features (generating random numbers) are stable, but newly added
 things like Fraucheky (USB Mass Storage Class) support and reGNUal
@@ -36,7 +36,7 @@ things like Fraucheky (USB Mass Storage Class) support and reGNUal
 
 Note that you need Chopstx (the thread library) as external source
 code (instead of ChibiOS/RT).  If you get the source code by Git,
-Chopstx is submodule of neug.
+Chopstx is submodule of NeuG.
 
 
 FAQ
@@ -75,9 +75,9 @@ A3: It is because NIST SP 800-90B mandates something like that for
 Targets
 =======
 
-FST-01, Olimex STM32-H103, and STM32 part of STM8S Discovery Kit,
-STBee Mini, STBee, STM32 Primer 2, ST Dongle and STM32 Nucleo F103 are
-supported.
+FST-01, Nitrokey-Start, Olimex STM32-H103, STM32 part of STM8S
+Discovery Kit, STBee Mini, STBee, STM32 Primer 2, CQ STARM, ST Dongle
+and STM32 Nucleo F103 are supported.
 
 
 Build system and Host system
@@ -167,8 +167,13 @@ How to compile
 
 You need GNU toolchain and newlib for 'arm-none-eabi' target.
 
-See https://launchpad.net/gcc-arm-embedded for preparation
-of GNU Toolchain for 'arm-none-eabi' target.
+On Debian we can install the packages:
+
+    gcc-arm-none-eabi
+    gdb-arm-none-eabi
+
+Or else, see https://launchpad.net/gcc-arm-embedded for preparation of
+GNU Toolchain for 'arm-none-eabi' target.
 
 Change directory to `src':
 
@@ -198,7 +203,7 @@ Olimex STM32-H103 board
 
 If you are using Olimex JTAG-Tiny, type following to invoke OpenOCD:
 
-  $ openocd -f interface/olimex-jtag-tiny.cfg -f board/olimex_stm32_h103.cfg
+  $ openocd -f interface/ftdi/olimex-jtag-tiny.cfg -f board/olimex_stm32_h103.cfg
 
 Then, with another terminal, type following to write "neug.elf" to Flash ROM:
 
diff --git a/chopstx b/chopstx
index acd4460..14ad395 160000 (submodule)
--- a/chopstx
+++ b/chopstx
@@ -1 +1 @@
-Subproject commit acd4460a6ee0f7caa1d7871acd51cdcf6bb4264c
+Subproject commit 14ad39552361815e17ddf9764228a093489555f7
index 4a66481..2538f6b 100755 (executable)
@@ -275,7 +275,7 @@ def crc32(bytestr):
     crc = binascii.crc32(bytestr)
     return UNSIGNED(crc)
 
-def main(passwd, data_regnual, data_upgrade):
+def main(wait_e, passwd, data_regnual, data_upgrade):
     l = len(data_regnual)
     if (l & 0x03) != 0:
         data_regnual = data_regnual.ljust(l + 4 - (l & 0x03), b'\x00')
@@ -310,17 +310,18 @@ def main(passwd, data_regnual, data_upgrade):
     del com
     com = None
     #
-    print("Wait 3 seconds...")
-    time.sleep(3)
-    # Then, send upgrade program...
     reg = None
-    for dev in gnuk_devices_by_vidpid():
-        try:
-            reg = regnual(dev)
-            print("Device: %s" % dev.filename)
-            break
-        except:
-            pass
+    while not reg:
+        print("Wait %d seconds..." % wait_e)
+        time.sleep(wait_e)
+        for dev in gnuk_devices_by_vidpid():
+            try:
+                reg = regnual(dev)
+                print("Device: %s" % dev.filename)
+                break
+            except:
+                pass
+    # Then, send upgrade program...
     mem_info = reg.mem_info()
     print("%08x:%08x" % mem_info)
     print("Downloading the program")
@@ -331,8 +332,12 @@ def main(passwd, data_regnual, data_upgrade):
     return 0
 
 
+# This should be event driven, not guessing some period.
+DEFAULT_WAIT_FOR_REENUMERATION=10
+
 if __name__ == '__main__':
     passwd = None
+    wait_e = DEFAULT_WAIT_FOR_REENUMERATION
     if len(sys.argv) == 2 and sys.argv[1] == '-s': # S for set passwd
         passwd = getpass("Admin password: ")
         com = None
@@ -354,6 +359,9 @@ if __name__ == '__main__':
         sys.argv.pop(1)
         if option == '-f':      # F for Factory setting
             passwd = DEFAULT_PW3
+        elif option == '-e':    # E for Enumeration
+            wait_e = int(sys.argv[1])
+            sys.argv.pop(1)
         else:
             raise ValueError("unknown option", option)
     if not passwd:
@@ -368,4 +376,4 @@ if __name__ == '__main__':
     data_upgrade = f.read()
     f.close()
     print("%s: %d" % (filename_upgrade, len(data_upgrade)))
-    main(passwd, data_regnual, data_upgrade[4096:])
+    main(wait_e, passwd, data_regnual, data_upgrade[4096:])