diff --git a/Tools/LogAnalyzer/DataflashLog.py b/Tools/LogAnalyzer/DataflashLog.py index 52364a43a4..65e6dd3eb9 100644 --- a/Tools/LogAnalyzer/DataflashLog.py +++ b/Tools/LogAnalyzer/DataflashLog.py @@ -543,36 +543,46 @@ class DataflashLog(object): def handleModeChange(self, lineNumber, e): if self.vehicleType == VehicleType.Copter: + modes = { + 0:'STABILIZE', + 1:'ACRO', + 2:'ALT_HOLD', + 3:'AUTO', + 4:'GUIDED', + 5:'LOITER', + 6:'RTL', + 7:'CIRCLE', + 9:'LAND', + 10:'OF_LOITER', + 11:'DRIFT', + 13:'SPORT', + 14:'FLIP', + 15:'AUTOTUNE', + 16:'POSHOLD', + 17:'BRAKE', + 18:'THROW', + 19:'AVOID_ADSB', + 20:'GUIDED_NOGPS', + 21:'SMART_RTL', + } try: - modes = {0:'STABILIZE', - 1:'ACRO', - 2:'ALT_HOLD', - 3:'AUTO', - 4:'GUIDED', - 5:'LOITER', - 6:'RTL', - 7:'CIRCLE', - 9:'LAND', - 10:'OF_LOITER', - 11:'DRIFT', - 13:'SPORT', - 14:'FLIP', - 15:'AUTOTUNE', - 16:'POSHOLD', - 17:'BRAKE', - 18:'THROW', - 19:'AVOID_ADSB', - 20:'GUIDED_NOGPS', - 21:'SMART_RTL'} if hasattr(e, 'ThrCrs'): self.modeChanges[lineNumber] = (modes[int(e.Mode)], e.ThrCrs) else: # assume it has ModeNum: self.modeChanges[lineNumber] = (modes[int(e.Mode)], e.ModeNum) - except: + except ValueError as x: if hasattr(e, 'ThrCrs'): self.modeChanges[lineNumber] = (e.Mode, e.ThrCrs) else: + # some .log files have the name spelt out by name + # rather than number, contrary to the format + # string. Attempt to map that back to a number: + uppername = str(e.Mode).upper() + for num in modes: + if modes[num].upper() == uppername: + self.modeChanges[lineNumber] = (uppername, num) + return # assume it has ModeNum: print("Unknown mode=%u" % e.ModeNum) self.modeChanges[lineNumber] = (e.Mode, "mode=%u" % e.ModeNum)