IQ.Pilot Release Commit @ 4b0cfbe
This commit is contained in:
@@ -116,7 +116,7 @@
|
||||
},
|
||||
"python/iqpilot_private/navassist/__init__.cpython-312-aarch64-linux-gnu.so": {
|
||||
"mode": 493,
|
||||
"sha256": "d07a56d54a8dfd8dd66b0a58a709cd13585de455b7eeecbb50616792757193e1",
|
||||
"sha256": "2ff824301dba9858009c5896a1539a702e7d83a5bfa401ced739afe56d6a6663",
|
||||
"size": 67640
|
||||
},
|
||||
"python/iqpilot_private/navassist/__init__.py": {
|
||||
@@ -126,32 +126,32 @@
|
||||
},
|
||||
"python/iqpilot_private/navassist/appsetup.cpython-312-aarch64-linux-gnu.so": {
|
||||
"mode": 493,
|
||||
"sha256": "d7ba6546b659c439dfd747ee80419117493db6bdfee5305965428896aa75e720",
|
||||
"size": 135328
|
||||
"sha256": "2f37ea823cbdd13183539d343853df77c74c63f10a45c1d0d2dfa6dd504a5e05",
|
||||
"size": 135392
|
||||
},
|
||||
"python/iqpilot_private/navassist/assets.cpython-312-aarch64-linux-gnu.so": {
|
||||
"mode": 493,
|
||||
"sha256": "45f9529ee808c55bd2e8965a6c72e5050dd8d12f47fd71e996a5aad161aa2e6b",
|
||||
"sha256": "d2d9637b01968c656d35a583b238030b13de1d0a942d1a4ba2c5895c25701399",
|
||||
"size": 201704
|
||||
},
|
||||
"python/iqpilot_private/navassist/container.cpython-312-aarch64-linux-gnu.so": {
|
||||
"mode": 493,
|
||||
"sha256": "16d2d214e9d4a793ead2b623fade799cf842e739b25cf74ab5ed60cb7c26f2f3",
|
||||
"sha256": "f5bca5aa39d29ae40e289bb4381b4e0e1596ae5203adc501aada8f0223ca5a21",
|
||||
"size": 134016
|
||||
},
|
||||
"python/iqpilot_private/navassist/daemon.cpython-312-aarch64-linux-gnu.so": {
|
||||
"mode": 493,
|
||||
"sha256": "f2d8fd727cb6002c174ea47ccd2945977143e5abe6d188732217474bcbd931bc",
|
||||
"size": 203048
|
||||
"sha256": "97c8ff983b101ae0f6f034f9a041cd410f7cdd656f6baf6067c1acb669767e74",
|
||||
"size": 203224
|
||||
},
|
||||
"python/iqpilot_private/navassist/guard.cpython-312-aarch64-linux-gnu.so": {
|
||||
"mode": 493,
|
||||
"sha256": "2aed237187dcfa009ebbd5f0f6beab7a5da4d89cd3b4e37968a2bb62f7fc6468",
|
||||
"sha256": "d264372e8f219533da1f9bdc0e5793e6c10c42937012138c304e9f8ed6751763",
|
||||
"size": 68240
|
||||
},
|
||||
"python/iqpilot_private/navassist/paths.cpython-312-aarch64-linux-gnu.so": {
|
||||
"mode": 493,
|
||||
"sha256": "0e63117bb686de08c73176138cc3851cbdadf491774b04e752995c059dcd281a",
|
||||
"sha256": "7bec3818357726584894cb137b4c6a07c811a8178d8aaf6e3ee77597273728bc",
|
||||
"size": 69656
|
||||
},
|
||||
"runtime": {
|
||||
@@ -163,12 +163,12 @@
|
||||
}
|
||||
},
|
||||
"signatures": {
|
||||
"python/iqpilot_private/navassist/__init__.cpython-312-aarch64-linux-gnu.so": "grzvl6Szgy0DhX0A2RHxMH+EZYP4GDUwRwrXCI278zqBo9A+xdZPxBSQ0FIxoDzMZVrAfrK5yOADYYyF1gFkDQ==",
|
||||
"python/iqpilot_private/navassist/appsetup.cpython-312-aarch64-linux-gnu.so": "e4WP9/AodSGn0e1aCmUfLvDCA36Z3lyLQXTAXeuMpFamR2uu7SRYCKBoW7gIMtrqZvNi3DNeDfmPaWdITSlDDA==",
|
||||
"python/iqpilot_private/navassist/assets.cpython-312-aarch64-linux-gnu.so": "K9jDY0eQxqtE7RKPmnnjJhOYogK4mkUXxucZmkY+K798BWThYxT+Q0q2D50eW9vc33fKH0lk4+L4w4P/qkTzDA==",
|
||||
"python/iqpilot_private/navassist/container.cpython-312-aarch64-linux-gnu.so": "qE6DWECE/wsj58n9ewIFAEts8xTCKjWGQ0p+7fZ3XKFJR7hvFt7fNTZAQm1sBSAd55697ow7kq7Y1wyicvBBDw==",
|
||||
"python/iqpilot_private/navassist/daemon.cpython-312-aarch64-linux-gnu.so": "h2yssDIlxVDJMaPW+K3TzGKwzrGcGDdQdOrZ75LmTS02UN34tmPWzv0j7WV2ombz5n8gu8+FcxYB+o1VapqkDA==",
|
||||
"python/iqpilot_private/navassist/guard.cpython-312-aarch64-linux-gnu.so": "kTPke8BA2muzet1xLQWUKnFtlVboJSZ6Ep6O79y2zQ8xMkEPum2fHiYZr8wkqu+2NMEB/j1HO0BvwJPdl/qOBg==",
|
||||
"python/iqpilot_private/navassist/paths.cpython-312-aarch64-linux-gnu.so": "Sd7DGPwD4DDrbqrnCiIwGgGAnTXU5MTS7rNdpq2rsixxvXhFzaaxQgMbGFi6CoylBAHeOwqi9uwjtY6aiaYkCQ=="
|
||||
"python/iqpilot_private/navassist/__init__.cpython-312-aarch64-linux-gnu.so": "pB2EuFRYCo2d0WQnYAziKZMtTF0myedrlt4jPt6baypR49sl15qOFiKnFW8iL/C91mC8yrb8mgRu9DEJNs07Bw==",
|
||||
"python/iqpilot_private/navassist/appsetup.cpython-312-aarch64-linux-gnu.so": "y/P4Ni0GEBmqZHULY14DX/Odh4ByFo/tDd8QlgHiAM22QJ0hXhPRwr6AqbHqNADfjYSEOrGS30Oz/aXcXlXBBw==",
|
||||
"python/iqpilot_private/navassist/assets.cpython-312-aarch64-linux-gnu.so": "TzTvaBh0Wzuesg5T1GP6QKX253masiMTyYtcKkz2Mptfc8LcAq7xbJmPP5RfviDXiv0tEFe6PfH/LEvD8Xv6AQ==",
|
||||
"python/iqpilot_private/navassist/container.cpython-312-aarch64-linux-gnu.so": "bzSB5YmGEMbPX6TJn9R+g3hvIWI9sQYUOrSWofpQTFNcoPcf2WcLJRM9Fl1LbIdRWtEx2lWPQwjAQ5pd6J+4BQ==",
|
||||
"python/iqpilot_private/navassist/daemon.cpython-312-aarch64-linux-gnu.so": "sVR22V1Mfp2b2anriiZ16zoLPUT+/WT6uTpcfTErx8PxX2Ox/gWwe4ifzQMkWezFIaWn2imT4CehxhQZCA8HDA==",
|
||||
"python/iqpilot_private/navassist/guard.cpython-312-aarch64-linux-gnu.so": "k9Fz2A9GIFbJE+LEcFSmPWaNfYi0y3ZtVyP6P9e9vgk7KiugIazn5q9hRwUSlbBAn92vx8vU875Zv3/sqpr4AA==",
|
||||
"python/iqpilot_private/navassist/paths.cpython-312-aarch64-linux-gnu.so": "PplaPn3UzgTejl36JQ0tKHq9qd2Z8YqE7dX6z0+tHWaITgPdMhV5bDOXjt4haJCvzdN/Z5moPkXHPyCgKB4SCQ=="
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1 +1 @@
|
||||
+k8uY8dYPLT5xuTlqHHgo9YUJkOQM6KQxhPn4leJUi2t9DsHDEMBWJwdtyqzQi5Zes9eRuG9GmF7Hircxj88DQ==
|
||||
Vx6Vm8MyJE7uWp+sCDMp9K8NBG6lbJ2w49N8AXP8pAnM82G2NB1SWe4pTI4AqwoUle/n93Ydpdvwhv1kAztuCg==
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -845,6 +845,7 @@ class CarState(CarStateBase):
|
||||
pt_messages += [
|
||||
("Blinkmodi_01", math.nan), # From J519 BCM (is inactive when no lights active, 50Hz when active)
|
||||
("Kombi_02", math.nan), # Auxiliary-bus cluster odometer
|
||||
("LH_EPS_01", math.nan), # ALC key slot, absent on MLB racks that never send 0x32A
|
||||
]
|
||||
else:
|
||||
pt_messages += [("Kombi_02", math.nan)] # Auxiliary-bus cluster odometer
|
||||
|
||||
@@ -10,8 +10,8 @@ from iqdbc.car.volkswagen.carstate import CarState
|
||||
from iqdbc.car.structs import CarParams
|
||||
from iqdbc.car.volkswagen.interface import CarInterface
|
||||
from iqdbc.car.volkswagen.values import (CAR, FW_QUERY_CONFIG, MLB_ACC_COORDINATOR_MSGS, MLB_GEARBOX_MSGS, MLB_MSG_ACC_10,
|
||||
MLB_MSG_GATEWAY_05, MLB_MSG_GETRIEBE_01, MLB_MSG_LH_EPS_03, WMI, VolkswagenFlags,
|
||||
VolkswagenFlagsIQ, VolkswagenSafetyFlags)
|
||||
MLB_MSG_GATEWAY_05, MLB_MSG_GETRIEBE_01, MLB_MSG_LH_EPS_01, MLB_MSG_LH_EPS_03,
|
||||
WMI, VolkswagenFlags, VolkswagenFlagsIQ, VolkswagenSafetyFlags)
|
||||
from iqdbc.car.volkswagen.fingerprints import FW_VERSIONS
|
||||
|
||||
Ecu = CarParams.Ecu
|
||||
@@ -210,7 +210,6 @@ def _a4_mk4_frames(packer, reverse=False, eps_torque=None):
|
||||
packer.make_can_msg("Kombi_02", 1, {"KBI_Inhalt_Tank": 40, "KBI_Kilometerstand": 100000}),
|
||||
packer.make_can_msg("Airbag_02", 1, {"AB_Gurtschloss_FA": 3}),
|
||||
packer.make_can_msg("Gateway_05", 1, {"BCM1_Rueckfahrlicht_Schalter": int(reverse)}),
|
||||
packer.make_can_msg("LH_EPS_01", 1, {}),
|
||||
]
|
||||
if eps_torque is not None:
|
||||
msgs.append(packer.make_can_msg("LH_EPS_03", 1, {"EPS_Lenkmoment": abs(eps_torque),
|
||||
@@ -499,6 +498,32 @@ def test_mlb_manual_gateway_car_adds_only_the_reverse_switch_on_the_powertrain_b
|
||||
assert manual[Bus.aux] == automatic[Bus.aux] | {MLB_MSG_GATEWAY_05}
|
||||
|
||||
|
||||
def _read_like_the_alc_runtime(parser, name):
|
||||
# the closed-source ALC reads its key slot through parser.vl, which subscribes the message on first access
|
||||
if name not in parser.dat:
|
||||
parser.vl[name]
|
||||
return parser.dat.get(name, b"")
|
||||
|
||||
|
||||
@pytest.mark.parametrize("build", (_a4_mk4_car, _q5_mk1_car), ids=("a4_mk4", "q5_mk1"))
|
||||
def test_mlb_alc_key_slot_read_keeps_can_valid_on_a_rack_that_never_sends_it(build):
|
||||
car = build()
|
||||
subscribed = _subscribed_addresses(car)
|
||||
never_sent = {bus: addrs - {MLB_MSG_LH_EPS_01} for bus, addrs in subscribed.items()}
|
||||
|
||||
packer = CANPacker("vw_mlb")
|
||||
|
||||
def build_frames():
|
||||
_read_like_the_alc_runtime(car.can_parsers[Bus.pt], "LH_EPS_01")
|
||||
return _frames_for(car, packer, never_sent)
|
||||
|
||||
ret = _run_past_aliveness_timeout(car, build_frames)
|
||||
|
||||
assert ret.canValid
|
||||
assert all(parser.can_valid for parser in car.can_parsers.values())
|
||||
assert not any(parser.bus_timeout for parser in car.can_parsers.values())
|
||||
|
||||
|
||||
@pytest.mark.parametrize("build", (_a4_mk4_car, _q5_mk1_car), ids=("a4_mk4", "q5_mk1"))
|
||||
def test_mlb_carstate_subscriptions_settle_and_stay_alive(build):
|
||||
car = build()
|
||||
|
||||
@@ -339,6 +339,7 @@ class VolkswagenFlagsIQ(IntFlag):
|
||||
|
||||
RADAR_DISABLE_STATE = {"error": False}
|
||||
|
||||
MLB_MSG_LH_EPS_01 = 0x32A
|
||||
MLB_MSG_LH_EPS_03 = 0x9F
|
||||
MLB_MSG_GETRIEBE_01 = 0x82
|
||||
MLB_MSG_GETRIEBE_02 = 0x83
|
||||
|
||||
Reference in New Issue
Block a user