ソースを参照

Support firmware versions back to v0.23 even after we rev the host tools

Keir Fraser 4 年 前
コミット
efaee0034e
2 ファイル変更11 行追加8 行削除
  1. 6 6
      scripts/greaseweazle/tools/util.py
  2. 5 2
      scripts/greaseweazle/usb.py

+ 6 - 6
scripts/greaseweazle/tools/util.py

@@ -300,12 +300,12 @@ If the problem persists, install the Update Jumper (across RX/TX).""")
         sys.exit(1)
 
     if not usb.update_mode and usb.update_needed:
-        print("Firmware is out of date: Require v%u.%u"
-              % (version.major, version.minor))
-        if usb.hw_model == 7:
-            print("Run \"update <update_file>\"")
-        else:
-            print("Install the Update Jumper and \"update <update_file>\"")
+        print("ERROR: Greaseweazle firmware v%u.%u is unsupported"
+              % (usb.major, usb.minor))
+        if usb.hw_model != 7:
+            print("Install the Update Jumper; ", end="")
+        print("Run \"gw update\" to install firmware v%u.%u" %
+              (version.major, version.minor))
         sys.exit(1)
 
     return usb

+ 5 - 2
scripts/greaseweazle/usb.py

@@ -12,6 +12,8 @@ from greaseweazle import error
 from greaseweazle.flux import Flux
 from greaseweazle import optimised
 
+EARLIEST_SUPPORTED_FIRMWARE = (0, 23)
+
 ## Control-Path command set
 class ControlCmd:
     ClearComms      = 10000
@@ -159,6 +161,7 @@ class Unit:
         (self.major, self.minor, is_main_firmware,
          self.max_cmd, self.sample_freq, self.hw_model,
          self.hw_submodel, self.usb_speed) = x
+        self.version = (self.major, self.minor)
         # Old firmware doesn't report HW type but runs on STM32F1 only.
         if self.hw_model == 0:
             self.hw_model = 1
@@ -170,8 +173,8 @@ class Unit:
             return
         # We are running main firmware: Check whether an update is needed.
         # We can use only the GetInfo command if the firmware is out of date.
-        self.update_needed = (version.major != self.major
-                              or version.minor != self.minor)
+        self.update_needed = (self.version < EARLIEST_SUPPORTED_FIRMWARE or
+                              self.version > (version.major, version.minor))
         if self.update_needed:
             return
         # Initialise the delay properties with current firmware values.