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.
56 lines
1.8 KiB
56 lines
1.8 KiB
from LogAnalyzer import Test,TestResult |
|
import DataflashLog |
|
|
|
|
|
class TestEvents(Test): |
|
'''test for erroneous events and failsafes''' |
|
# TODO: need to check for vehicle-specific codes |
|
|
|
def __init__(self): |
|
Test.__init__(self) |
|
self.name = "Event/Failsafe" |
|
|
|
def run(self, logdata, verbose): |
|
self.result = TestResult() |
|
self.result.status = TestResult.StatusType.GOOD |
|
|
|
errors = set() |
|
|
|
if "ERR" in logdata.channels: |
|
assert(len(logdata.channels["ERR"]["Subsys"].listData) == len(logdata.channels["ERR"]["ECode"].listData)) |
|
for i in range(len(logdata.channels["ERR"]["Subsys"].listData)): |
|
subSys = logdata.channels["ERR"]["Subsys"].listData[i][1] |
|
eCode = logdata.channels["ERR"]["ECode"].listData[i][1] |
|
if subSys == 2 and (eCode == 1): |
|
errors.add("PPM") |
|
elif subSys == 3 and (eCode == 1 or eCode == 2): |
|
errors.add("COMPASS") |
|
elif subSys == 5 and (eCode == 1): |
|
errors.add("FS_THR") |
|
elif subSys == 6 and (eCode == 1): |
|
errors.add("FS_BATT") |
|
elif subSys == 7 and (eCode == 1): |
|
errors.add("GPS") |
|
elif subSys == 8 and (eCode == 1): |
|
errors.add("GCS") |
|
elif subSys == 9 and (eCode == 1 or eCode == 2): |
|
errors.add("FENCE") |
|
elif subSys == 10: |
|
errors.add("FLT_MODE") |
|
elif subSys == 11 and (eCode == 2): |
|
errors.add("GPS_GLITCH") |
|
elif subSys == 12 and (eCode == 1): |
|
errors.add("CRASH") |
|
|
|
if errors: |
|
if len(errors) == 1 and "FENCE" in errors: |
|
self.result.status = TestResult.StatusType.WARN |
|
else: |
|
self.result.status = TestResult.StatusType.FAIL |
|
if len(errors) == 1: |
|
self.result.statusMessage = "ERR found: " |
|
else: |
|
self.result.statusMessage = "ERRs found: " |
|
for err in errors: |
|
self.result.statusMessage = self.result.statusMessage + err + " " |
|
|
|
|