You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
44 lines
1.5 KiB
44 lines
1.5 KiB
from LogAnalyzer import Test,TestResult |
|
import DataflashLog |
|
|
|
import collections |
|
|
|
class TestBrownout(Test): |
|
'''test for a log that has been truncated in flight''' |
|
|
|
def __init__(self): |
|
Test.__init__(self) |
|
self.name = "Brownout" |
|
|
|
def run(self, logdata, verbose): |
|
self.result = TestResult() |
|
self.result.status = TestResult.StatusType.GOOD |
|
|
|
isArmed = False |
|
# FIXME: cope with LOG_ARM_DISARM_MSG message |
|
if "EV" in logdata.channels: |
|
# step through the arm/disarm events in order, to see if they're symmetrical |
|
# note: it seems landing detection isn't robust enough to rely upon here, so we'll only consider arm+disarm, not takeoff+land |
|
for line,ev in logdata.channels["EV"]["Id"].listData: |
|
if ev == 10: |
|
isArmed = True |
|
elif ev == 11: |
|
isArmed = False |
|
|
|
if "CTUN" not in logdata.channels: |
|
self.result.status = TestResult.StatusType.UNKNOWN |
|
self.result.statusMessage = "No CTUN log data" |
|
return |
|
|
|
if "BarAlt" in logdata.channels['CTUN']: |
|
self.ctun_baralt_att = 'BarAlt' |
|
else: |
|
self.ctun_baralt_att = 'BAlt' |
|
|
|
# check for relative altitude at end |
|
(finalAlt,finalAltLine) = logdata.channels["CTUN"][self.ctun_baralt_att].getNearestValue(logdata.lineCount, lookForwards=False) |
|
|
|
finalAltMax = 3.0 # max alt offset that we'll still consider to be on the ground |
|
if isArmed and finalAlt > finalAltMax: |
|
self.result.status = TestResult.StatusType.FAIL |
|
self.result.statusMessage = "Truncated Log? Ends while armed at altitude %.2fm" % finalAlt
|
|
|