Release 260111
This commit is contained in:
78
panda/tests/hitl/9_harness.py
Normal file
78
panda/tests/hitl/9_harness.py
Normal file
@@ -0,0 +1,78 @@
|
||||
import time
|
||||
import pytest
|
||||
import itertools
|
||||
|
||||
from opendbc.car.structs import CarParams
|
||||
from panda import Panda
|
||||
from panda.tests.hitl.conftest import PandaGroup
|
||||
|
||||
# TODO: test relay
|
||||
|
||||
@pytest.mark.panda_expect_can_error
|
||||
@pytest.mark.test_panda_types(PandaGroup.GEN2)
|
||||
def test_harness_status(p, panda_jungle):
|
||||
# map from jungle orientations to panda orientations
|
||||
orientation_map = {
|
||||
Panda.HARNESS_STATUS_NC: Panda.HARNESS_STATUS_NC,
|
||||
}
|
||||
|
||||
# this shouldn't be parameterized since we don't want the panda to be reset
|
||||
# between the tests.
|
||||
for ignition, orientation in itertools.product([True, False], [Panda.HARNESS_STATUS_NC, Panda.HARNESS_STATUS_NORMAL, Panda.HARNESS_STATUS_FLIPPED]):
|
||||
print()
|
||||
p.set_safety_mode(CarParams.SafetyModel.elm327)
|
||||
panda_jungle.set_harness_orientation(orientation)
|
||||
panda_jungle.set_ignition(ignition)
|
||||
|
||||
# wait for orientation detection
|
||||
time.sleep(0.25)
|
||||
|
||||
health = p.health()
|
||||
detected_orientation = health['car_harness_status']
|
||||
print(f"orientation set: {orientation} detected: {detected_orientation}")
|
||||
|
||||
if detected_orientation not in orientation_map:
|
||||
assert detected_orientation != Panda.HARNESS_STATUS_NC
|
||||
other = {Panda.HARNESS_STATUS_NORMAL: Panda.HARNESS_STATUS_FLIPPED, Panda.HARNESS_STATUS_FLIPPED: Panda.HARNESS_STATUS_NORMAL}
|
||||
orientation_map.update({
|
||||
orientation: detected_orientation,
|
||||
other[orientation]: other[detected_orientation],
|
||||
})
|
||||
|
||||
# Orientation
|
||||
assert orientation_map[detected_orientation] == orientation
|
||||
|
||||
# Line ignition
|
||||
assert health['ignition_line'] == (False if orientation == Panda.HARNESS_STATUS_NC else ignition)
|
||||
|
||||
# CAN traffic
|
||||
if orientation != Panda.HARNESS_STATUS_NC:
|
||||
for bus in range(3):
|
||||
panda_jungle.can_send(0x123, f"{bus}".encode(), bus)
|
||||
time.sleep(0.5)
|
||||
|
||||
msgs = p.can_recv()
|
||||
buses = {int(dat): bus for _, dat, bus in msgs if bus <= 3}
|
||||
print(msgs)
|
||||
|
||||
# jungle doesn't actually switch buses when switching orientation
|
||||
flipped = orientation == Panda.HARNESS_STATUS_FLIPPED
|
||||
assert buses[0] == (2 if flipped else 0)
|
||||
assert buses[2] == (0 if flipped else 2)
|
||||
|
||||
# SBU voltages
|
||||
supply_voltage_mV = 1800 if p.get_type() in [Panda.HW_TYPE_TRES, ] else 3300
|
||||
|
||||
if orientation == Panda.HARNESS_STATUS_NC:
|
||||
assert health['sbu1_voltage_mV'] > 0.9 * supply_voltage_mV
|
||||
assert health['sbu2_voltage_mV'] > 0.9 * supply_voltage_mV
|
||||
else:
|
||||
relay_line = 'sbu1_voltage_mV' if (detected_orientation == Panda.HARNESS_STATUS_FLIPPED) else 'sbu2_voltage_mV'
|
||||
ignition_line = 'sbu2_voltage_mV' if (detected_orientation == Panda.HARNESS_STATUS_FLIPPED) else 'sbu1_voltage_mV'
|
||||
|
||||
assert health[relay_line] < 0.1 * supply_voltage_mV
|
||||
assert health[ignition_line] > health[relay_line]
|
||||
if ignition:
|
||||
assert health[ignition_line] < 0.3 * supply_voltage_mV
|
||||
else:
|
||||
assert health[ignition_line] > 0.9 * supply_voltage_mV
|
||||
Reference in New Issue
Block a user