diff --git a/Jenkinsfile b/Jenkinsfile
index d3b3444991..392253e845 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -78,8 +78,8 @@ def deviceStage(String stageName, String deviceType, List extra_env, def steps)
def extra = extra_env.collect { "export ${it}" }.join('\n');
def branch = env.BRANCH_NAME ?: 'master';
- docker.image('ghcr.io/commaai/alpine-ssh').inside('--user=root') {
- lock(resource: "", label: deviceType, inversePrecedence: true, variable: 'device_ip', quantity: 1, resourceSelectStrategy: 'random') {
+ lock(resource: "", label: deviceType, inversePrecedence: true, variable: 'device_ip', quantity: 1, resourceSelectStrategy: 'random') {
+ docker.image('ghcr.io/commaai/alpine-ssh').inside('--user=root') {
timeout(time: 20, unit: 'MINUTES') {
retry (3) {
device(device_ip, "git checkout", extra + "\n" + readFile("selfdrive/test/setup_device_ci.sh"))
@@ -106,7 +106,7 @@ def pcStage(String stageName, Closure body) {
checkout scm
- def dockerArgs = "--user=batman -v /tmp/comma_download_cache:/tmp/comma_download_cache -v /tmp/scons_cache:/tmp/scons_cache -e PYTHONPATH=${env.WORKSPACE}";
+ def dockerArgs = "--user=batman -v /tmp/comma_download_cache:/tmp/comma_download_cache -v /tmp/scons_cache:/tmp/scons_cache -e PYTHONPATH=${env.WORKSPACE} --cpus=8 --memory 16g -e PYTEST_ADDOPTS='-n8'";
def openpilot_base = retryWithDelay (3, 15) {
return docker.build("openpilot-base:build-${env.GIT_COMMIT}", "-f Dockerfile.openpilot_base .")
@@ -205,7 +205,7 @@ node {
])
},
'HW + Unit Tests': {
- deviceStage("tici", "tici-common", ["UNSAFE=1"], [
+ deviceStage("tici-hardware", "tici-common", ["UNSAFE=1"], [
["build", "cd selfdrive/manager && ./build.py"],
["test pandad", "pytest selfdrive/boardd/tests/test_pandad.py", ["panda/", "selfdrive/boardd/"]],
["test power draw", "pytest -s system/hardware/tici/tests/test_power_draw.py"],
@@ -215,7 +215,7 @@ node {
])
},
'loopback': {
- deviceStage("tici", "tici-loopback", ["UNSAFE=1"], [
+ deviceStage("loopback", "tici-loopback", ["UNSAFE=1"], [
["build openpilot", "cd selfdrive/manager && ./build.py"],
["test boardd loopback", "pytest selfdrive/boardd/tests/test_boardd_loopback.py"],
])
@@ -243,7 +243,7 @@ node {
])
},
'replay': {
- deviceStage("tici", "tici-replay", ["UNSAFE=1"], [
+ deviceStage("model-replay", "tici-replay", ["UNSAFE=1"], [
["build", "cd selfdrive/manager && ./build.py"],
["model replay", "selfdrive/test/process_replay/model_replay.py"],
])
diff --git a/cereal b/cereal
index c54369f8ad..80e1e55f0d 160000
--- a/cereal
+++ b/cereal
@@ -1 +1 @@
-Subproject commit c54369f8ad4e0bcb18c96feb4334755c6f65e8f1
+Subproject commit 80e1e55f0dd71cea7f596e8b80c7c33865b689f3
diff --git a/docs/CARS.md b/docs/CARS.md
index 5620bc703c..d82cbe2c96 100644
--- a/docs/CARS.md
+++ b/docs/CARS.md
@@ -4,7 +4,7 @@
A supported vehicle is one that just works when you install a comma device. All supported cars provide a better experience than any stock system. Supported vehicles reference the US market unless otherwise specified.
-# 275 Supported Cars
+# 276 Supported Cars
|Make|Model|Supported Package|ACC|No ACC accel below|No ALC below|Steering Torque|Resume from stop|
Hardware Needed
|Video|
|---|---|---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|
@@ -138,6 +138,7 @@ A supported vehicle is one that just works when you install a comma device. All
|Kia|Niro Hybrid 2023[6](#footnotes)|Smart Cruise Control (SCC)|openpilot available[1](#footnotes)|0 mph|0 mph|[](##)|[](##)|Parts
- 1 Hyundai A connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here ||
|Kia|Niro Plug-in Hybrid 2018-19|All|Stock|10 mph|32 mph|[](##)|[](##)|Parts
- 1 Hyundai C connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here ||
|Kia|Niro Plug-in Hybrid 2020|All|Stock|0 mph|32 mph|[](##)|[](##)|Parts
- 1 Hyundai D connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here ||
+|Kia|Niro Plug-in Hybrid 2021|All|openpilot available[1](#footnotes)|0 mph|0 mph|[](##)|[](##)|Parts
- 1 Hyundai D connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here ||
|Kia|Niro Plug-in Hybrid 2022|All|openpilot available[1](#footnotes)|0 mph|0 mph|[](##)|[](##)|Parts
- 1 Hyundai F connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here ||
|Kia|Optima 2017|Advanced Smart Cruise Control|Stock|0 mph|32 mph|[](##)|[](##)|Parts
- 1 Hyundai B connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here ||
|Kia|Optima 2019-20|Smart Cruise Control (SCC)|Stock|0 mph|0 mph|[](##)|[](##)|Parts
- 1 Hyundai G connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here ||
@@ -267,8 +268,8 @@ A supported vehicle is one that just works when you install a comma device. All
|Volkswagen|Golf R 2015-19|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,13](#footnotes)|0 mph|0 mph|[](##)|[](##)|Parts
- 1 J533 connector
- 1 USB-C coupler
- 1 comma 3X
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here ||
|Volkswagen|Golf SportsVan 2015-20|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,13](#footnotes)|0 mph|0 mph|[](##)|[](##)|Parts
- 1 J533 connector
- 1 USB-C coupler
- 1 comma 3X
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here ||
|Volkswagen|Grand California 2019-23|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,13](#footnotes)|0 mph|31 mph|[](##)|[](##)|Parts
- 1 J533 connector
- 1 USB-C coupler
- 1 angled mount (8 degrees)
- 1 comma 3X
- 1 harness box
- 1 long OBD-C cable
- 1 right angle OBD-C cable (1.5 ft)
Buy Here |
|
-|Volkswagen|Jetta 2018-22|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,13](#footnotes)|0 mph|0 mph|[](##)|[](##)|Parts
- 1 J533 connector
- 1 USB-C coupler
- 1 comma 3X
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here ||
-|Volkswagen|Jetta GLI 2021-22|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,13](#footnotes)|0 mph|0 mph|[](##)|[](##)|Parts
- 1 J533 connector
- 1 USB-C coupler
- 1 comma 3X
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here ||
+|Volkswagen|Jetta 2018-24|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,13](#footnotes)|0 mph|0 mph|[](##)|[](##)|Parts
- 1 J533 connector
- 1 USB-C coupler
- 1 comma 3X
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here ||
+|Volkswagen|Jetta GLI 2021-24|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,13](#footnotes)|0 mph|0 mph|[](##)|[](##)|Parts
- 1 J533 connector
- 1 USB-C coupler
- 1 comma 3X
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here ||
|Volkswagen|Passat 2015-22[11](#footnotes)|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,13](#footnotes)|0 mph|0 mph|[](##)|[](##)|Parts
- 1 J533 connector
- 1 USB-C coupler
- 1 comma 3X
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here ||
|Volkswagen|Passat Alltrack 2015-22|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,13](#footnotes)|0 mph|0 mph|[](##)|[](##)|Parts
- 1 J533 connector
- 1 USB-C coupler
- 1 comma 3X
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here ||
|Volkswagen|Passat GTE 2015-22|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,13](#footnotes)|0 mph|0 mph|[](##)|[](##)|Parts
- 1 J533 connector
- 1 USB-C coupler
- 1 comma 3X
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here ||
diff --git a/panda b/panda
index 457e3b262d..f48fc21a17 160000
--- a/panda
+++ b/panda
@@ -1 +1 @@
-Subproject commit 457e3b262d798aa6e400033c92d12a0b0f52a7ed
+Subproject commit f48fc21a17079bc04cfb3d8042fd2d67d0aac104
diff --git a/selfdrive/car/chrysler/fingerprints.py b/selfdrive/car/chrysler/fingerprints.py
index 940d73c249..0de49f11b9 100644
--- a/selfdrive/car/chrysler/fingerprints.py
+++ b/selfdrive/car/chrysler/fingerprints.py
@@ -359,6 +359,7 @@ FW_VERSIONS = {
b'68294051AG',
b'68294051AI',
b'68294052AG',
+ b'68294052AH',
b'68294063AG',
b'68294063AH',
b'68294063AI',
@@ -478,10 +479,12 @@ FW_VERSIONS = {
b'05149605AE ',
b'05149846AA ',
b'05149848AA ',
+ b'05149848AC ',
b'05190341AD',
b'68378695AJ ',
b'68378696AJ ',
b'68378701AI ',
+ b'68378702AI ',
b'68378710AL ',
b'68378748AL ',
b'68378758AM ',
diff --git a/selfdrive/car/ford/fingerprints.py b/selfdrive/car/ford/fingerprints.py
index 0085b6b9c6..a5d465849a 100644
--- a/selfdrive/car/ford/fingerprints.py
+++ b/selfdrive/car/ford/fingerprints.py
@@ -24,6 +24,7 @@ FW_VERSIONS = {
(Ecu.eps, 0x730, None): [
b'LX6C-14D003-AF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00',
b'LX6C-14D003-AH\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00',
+ b'LX6C-14D003-AK\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00',
b'LX6C-14D003-AL\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00',
],
(Ecu.abs, 0x760, None): [
diff --git a/selfdrive/car/ford/values.py b/selfdrive/car/ford/values.py
index 0faf901fc2..c080e02299 100644
--- a/selfdrive/car/ford/values.py
+++ b/selfdrive/car/ford/values.py
@@ -111,21 +111,15 @@ FW_QUERY_CONFIG = FwQueryConfig(
requests=[
# CAN and CAN FD queries are combined.
# FIXME: For CAN FD, ECUs respond with frames larger than 8 bytes on the powertrain bus
- # TODO: properly handle auxiliary requests to separate queries and add back whitelists
Request(
[StdQueries.TESTER_PRESENT_REQUEST, StdQueries.MANUFACTURER_SOFTWARE_VERSION_REQUEST],
[StdQueries.TESTER_PRESENT_RESPONSE, StdQueries.MANUFACTURER_SOFTWARE_VERSION_RESPONSE],
- # whitelist_ecus=[Ecu.engine],
- ),
- Request(
- [StdQueries.TESTER_PRESENT_REQUEST, StdQueries.MANUFACTURER_SOFTWARE_VERSION_REQUEST],
- [StdQueries.TESTER_PRESENT_RESPONSE, StdQueries.MANUFACTURER_SOFTWARE_VERSION_RESPONSE],
- # whitelist_ecus=[Ecu.eps, Ecu.abs, Ecu.fwdRadar, Ecu.fwdCamera, Ecu.shiftByWire],
bus=0,
auxiliary=True,
),
],
extra_ecus=[
+ # We are unlikely to get a response from the PCM from behind the gateway
(Ecu.engine, 0x7e0, None),
(Ecu.shiftByWire, 0x732, None),
],
diff --git a/selfdrive/car/honda/fingerprints.py b/selfdrive/car/honda/fingerprints.py
index 0a64a73d72..62843472a3 100644
--- a/selfdrive/car/honda/fingerprints.py
+++ b/selfdrive/car/honda/fingerprints.py
@@ -985,6 +985,7 @@ FW_VERSIONS = {
b'37805-RLV-F120\x00\x00',
b'37805-RLV-L080\x00\x00',
b'37805-RLV-L090\x00\x00',
+ b'37805-RLV-L150\x00\x00',
b'37805-RLV-L160\x00\x00',
b'37805-RLV-L180\x00\x00',
b'37805-RLV-L350\x00\x00',
diff --git a/selfdrive/car/hyundai/fingerprints.py b/selfdrive/car/hyundai/fingerprints.py
index 35ee682b4b..5f42ad4918 100644
--- a/selfdrive/car/hyundai/fingerprints.py
+++ b/selfdrive/car/hyundai/fingerprints.py
@@ -914,12 +914,14 @@ FW_VERSIONS = {
(Ecu.transmission, 0x7e1, None): [
b'\xf1\x87VDGMD15352242DD3w\x87gxwvgv\x87wvw\x88wXwffVfffUfw\x88o\xff\x06J\xf1\x81E14\x00\x00\x00\x00\x00\x00\x00\xf1\x00bcshcm49 E14\x00\x00\x00\x00\x00\x00\x00SHI0G50NB1tc5\xb7',
b'\xf1\x87VDGMD15866192DD3x\x88x\x89wuFvvfUf\x88vWwgwwwvfVgx\x87o\xff\xbc^\xf1\x81E14\x00\x00\x00\x00\x00\x00\x00\xf1\x00bcshcm49 E14\x00\x00\x00\x00\x00\x00\x00SHI0G50NB1tc5\xb7',
+ b'\xf1\x87VDHMD16446682DD3WwwxxvGw\x88\x88\x87\x88\x88whxx\x87\x87\x87\x85fUfwu_\xffT\xf8\xf1\x81E14\x00\x00\x00\x00\x00\x00\x00\xf1\x00bcshcm49 E14\x00\x00\x00\x00\x00\x00\x00SHI0G50NB1tc5\xb7',
],
(Ecu.fwdRadar, 0x7d0, None): [
b'\xf1\x00HI__ SCC F-CUP 1.00 1.01 96400-D2100 ',
],
(Ecu.fwdCamera, 0x7c4, None): [
b'\xf1\x00HI LKAS AT USA LHD 1.00 1.00 95895-D2020 160302',
+ b'\xf1\x00HI LKAS AT USA LHD 1.00 1.00 95895-D2030 170208',
],
(Ecu.engine, 0x7e0, None): [
b'\xf1\x810000000000\x00',
@@ -1198,16 +1200,19 @@ FW_VERSIONS = {
},
CAR.KIA_NIRO_PHEV_2022: {
(Ecu.engine, 0x7e0, None): [
+ b'\xf1\x816H6G5051\x00\x00\x00\x00\x00\x00\x00\x00',
b'\xf1\x816H6G6051\x00\x00\x00\x00\x00\x00\x00\x00',
],
(Ecu.transmission, 0x7e1, None): [
b'\xf1\x006U3H1_C2\x00\x006U3J9051\x00\x00PDE0G16NL3\x00\x00\x00\x00',
+ b'\xf1\x816U3J9051\x00\x00\xf1\x006U3H1_C2\x00\x006U3J9051\x00\x00PDE0G16NL3\x00\x00\x00\x00',
],
(Ecu.eps, 0x7d4, None): [
b'\xf1\x00DE MDPS C 1.00 1.01 56310G5520\x00 4DEPC101',
],
(Ecu.fwdCamera, 0x7c4, None): [
b'\xf1\x00DEP MFC AT USA LHD 1.00 1.00 99211-G5500 210428',
+ b'\xf1\x00DEP MFC AT USA LHD 1.00 1.06 99211-G5000 201028',
],
(Ecu.fwdRadar, 0x7d0, None): [
b'\xf1\x00DEhe SCC F-CUP 1.00 1.00 99110-G5600 ',
@@ -1347,22 +1352,28 @@ FW_VERSIONS = {
CAR.ELANTRA_GT_I30: {
(Ecu.fwdCamera, 0x7c4, None): [
b'\xf1\x00PD LKAS AT KOR LHD 1.00 1.02 95740-G3000 A51',
+ b'\xf1\x00PD LKAS AT USA LHD 1.00 1.02 95740-G3000 A51',
b'\xf1\x00PD LKAS AT USA LHD 1.01 1.01 95740-G3100 A54',
],
(Ecu.transmission, 0x7e1, None): [
b'\xf1\x006U2U0_C2\x00\x006U2T0051\x00\x00DPD0D16KS0u\xce\x1fk',
+ b'\xf1\x006U2V0_C2\x00\x006U2V8051\x00\x00DPD0T16NS4\x00\x00\x00\x00',
+ b'\xf1\x006U2V0_C2\x00\x006U2V8051\x00\x00DPD0T16NS4\xda\x7f\xd6\xa7',
b'\xf1\x006U2V0_C2\x00\x006U2VA051\x00\x00DPD0H16NS0e\x0e\xcd\x8e',
],
(Ecu.eps, 0x7d4, None): [
b'\xf1\x00PD MDPS C 1.00 1.00 56310G3300\x00 4PDDC100',
+ b'\xf1\x00PD MDPS C 1.00 1.03 56310/G3300 4PDDC103',
b'\xf1\x00PD MDPS C 1.00 1.04 56310/G3300 4PDDC104',
],
(Ecu.abs, 0x7d1, None): [
b'\xf1\x00PD ESC \t 104\x18\t\x03 58920-G3350',
+ b'\xf1\x00PD ESC \x0b 103\x17\x110 58920-G3350',
b'\xf1\x00PD ESC \x0b 104\x18\t\x03 58920-G3350',
],
(Ecu.fwdRadar, 0x7d0, None): [
b'\xf1\x00PD__ SCC F-CUP 1.00 1.00 96400-G3300 ',
+ b'\xf1\x00PD__ SCC F-CUP 1.01 1.00 96400-G3100 ',
b'\xf1\x00PD__ SCC FNCUP 1.01 1.00 96400-G3000 ',
],
},
diff --git a/selfdrive/car/hyundai/values.py b/selfdrive/car/hyundai/values.py
index dfa4f70c2c..f7986fc202 100644
--- a/selfdrive/car/hyundai/values.py
+++ b/selfdrive/car/hyundai/values.py
@@ -248,7 +248,10 @@ CAR_INFO: Dict[str, Optional[Union[HyundaiCarInfo, List[HyundaiCarInfo]]]] = {
HyundaiCarInfo("Kia Niro Plug-in Hybrid 2018-19", "All", min_enable_speed=10. * CV.MPH_TO_MS, car_parts=CarParts.common([CarHarness.hyundai_c])),
HyundaiCarInfo("Kia Niro Plug-in Hybrid 2020", "All", car_parts=CarParts.common([CarHarness.hyundai_d])),
],
- CAR.KIA_NIRO_PHEV_2022: HyundaiCarInfo("Kia Niro Plug-in Hybrid 2022", "All", car_parts=CarParts.common([CarHarness.hyundai_f])),
+ CAR.KIA_NIRO_PHEV_2022: [
+ HyundaiCarInfo("Kia Niro Plug-in Hybrid 2021", "All", car_parts=CarParts.common([CarHarness.hyundai_d])),
+ HyundaiCarInfo("Kia Niro Plug-in Hybrid 2022", "All", car_parts=CarParts.common([CarHarness.hyundai_f])),
+ ],
CAR.KIA_NIRO_HEV_2021: [
HyundaiCarInfo("Kia Niro Hybrid 2021", car_parts=CarParts.common([CarHarness.hyundai_d])),
HyundaiCarInfo("Kia Niro Hybrid 2022", car_parts=CarParts.common([CarHarness.hyundai_f])),
diff --git a/selfdrive/car/tests/test_fw_fingerprint.py b/selfdrive/car/tests/test_fw_fingerprint.py
index 9f6a847568..064f2e5651 100755
--- a/selfdrive/car/tests/test_fw_fingerprint.py
+++ b/selfdrive/car/tests/test_fw_fingerprint.py
@@ -254,13 +254,13 @@ class TestFwFingerprintTiming(unittest.TestCase):
@pytest.mark.timeout(60)
def test_fw_query_timing(self):
- total_ref_time = 7.0
+ total_ref_time = 6.8
brand_ref_times = {
1: {
'gm': 0.5,
'body': 0.1,
'chrysler': 0.3,
- 'ford': 0.2,
+ 'ford': 0.1,
'honda': 0.55,
'hyundai': 0.65,
'mazda': 0.1,
@@ -271,7 +271,7 @@ class TestFwFingerprintTiming(unittest.TestCase):
'volkswagen': 0.2,
},
2: {
- 'ford': 0.3,
+ 'ford': 0.2,
'hyundai': 1.05,
}
}
diff --git a/selfdrive/car/volkswagen/fingerprints.py b/selfdrive/car/volkswagen/fingerprints.py
index dcdb2e62bf..8e5a0667bd 100644
--- a/selfdrive/car/volkswagen/fingerprints.py
+++ b/selfdrive/car/volkswagen/fingerprints.py
@@ -320,6 +320,7 @@ FW_VERSIONS = {
b'\xf1\x8704E906024L \xf1\x895595',
b'\xf1\x8704E906024L \xf1\x899970',
b'\xf1\x8704E906027MS\xf1\x896223',
+ b'\xf1\x8705E906013DB\xf1\x893361',
b'\xf1\x875G0906259T \xf1\x890003',
],
(Ecu.transmission, 0x7e1, None): [
@@ -327,6 +328,7 @@ FW_VERSIONS = {
b'\xf1\x8709S927158BS\xf1\x893642',
b'\xf1\x8709S927158BS\xf1\x893694',
b'\xf1\x8709S927158CK\xf1\x893770',
+ b'\xf1\x8709S927158JC\xf1\x894113',
b'\xf1\x8709S927158R \xf1\x893552',
b'\xf1\x8709S927158R \xf1\x893587',
b'\xf1\x870GC300020N \xf1\x892803',
@@ -340,9 +342,11 @@ FW_VERSIONS = {
b'\xf1\x875Q0959655BR\xf1\x890403\xf1\x82\x1319170031313300314240011550159333463100',
b'\xf1\x875Q0959655CB\xf1\x890421\xf1\x82\x1314171231313500314642021650169333613100',
b'\xf1\x875Q0959655CB\xf1\x890421\xf1\x82\x1314171231313500314643021650169333613100',
+ b'\xf1\x875Q0959655CB\xf1\x890421\xf1\x82\x1317171231313500314642023050309333613100',
],
(Ecu.eps, 0x712, None): [
b'\xf1\x873Q0909144M \xf1\x895082\xf1\x82\x0571A10A11A1',
+ b'\xf1\x875QM907144D \xf1\x891063\xf1\x82\x000_A1080_OM',
b'\xf1\x875QM909144B \xf1\x891081\xf1\x82\x0521A10A01A1',
b'\xf1\x875QM909144B \xf1\x891081\xf1\x82\x0521B00404A1',
b'\xf1\x875QM909144C \xf1\x891082\xf1\x82\x0521A00642A1',
@@ -350,6 +354,7 @@ FW_VERSIONS = {
b'\xf1\x875QN909144B \xf1\x895082\xf1\x82\x0571A10A11A1',
],
(Ecu.fwdRadar, 0x757, None): [
+ b'\xf1\x872Q0907572AA\xf1\x890396',
b'\xf1\x875Q0907572N \xf1\x890681',
b'\xf1\x875Q0907572P \xf1\x890682',
b'\xf1\x875Q0907572R \xf1\x890771',
diff --git a/selfdrive/car/volkswagen/values.py b/selfdrive/car/volkswagen/values.py
index f4809e4523..35cb3607ec 100644
--- a/selfdrive/car/volkswagen/values.py
+++ b/selfdrive/car/volkswagen/values.py
@@ -223,8 +223,8 @@ CAR_INFO: Dict[str, Union[VWCarInfo, List[VWCarInfo]]] = {
VWCarInfo("Volkswagen Golf SportsVan 2015-20"),
],
CAR.JETTA_MK7: [
- VWCarInfo("Volkswagen Jetta 2018-22"),
- VWCarInfo("Volkswagen Jetta GLI 2021-22"),
+ VWCarInfo("Volkswagen Jetta 2018-24"),
+ VWCarInfo("Volkswagen Jetta GLI 2021-24"),
],
CAR.PASSAT_MK8: [
VWCarInfo("Volkswagen Passat 2015-22", footnotes=[Footnote.PASSAT]),
diff --git a/selfdrive/manager/helpers.py b/selfdrive/manager/helpers.py
index 1b6f8df1ef..797f4ee92e 100644
--- a/selfdrive/manager/helpers.py
+++ b/selfdrive/manager/helpers.py
@@ -56,7 +56,7 @@ def save_bootlog():
def fn(tmpdir):
env = os.environ.copy()
- env['PARAMS_ROOT'] = tmpdir
+ env['PARAMS_COPY_PATH'] = tmpdir
subprocess.call("./bootlog", cwd=os.path.join(BASEDIR, "system/loggerd"), env=env)
shutil.rmtree(tmpdir)
t = threading.Thread(target=fn, args=(tmp, ))
diff --git a/system/loggerd/logger.cc b/system/loggerd/logger.cc
index bb829df6ed..2fc6492ad4 100644
--- a/system/loggerd/logger.cc
+++ b/system/loggerd/logger.cc
@@ -40,7 +40,7 @@ kj::Array logger_build_init_data() {
init.setOsVersion(util::read_file("/VERSION"));
// log params
- auto params = Params();
+ auto params = Params(util::getenv("PARAMS_COPY_PATH", ""));
std::map params_map = params.readAll();
init.setGitCommit(params_map["GitCommit"]);
diff --git a/tools/README.md b/tools/README.md
index 315db3a75f..361a27deda 100644
--- a/tools/README.md
+++ b/tools/README.md
@@ -68,6 +68,7 @@ Learn about the openpilot ecosystem and tools by playing our [CTF](/tools/CTF.md
├── ubuntu_setup.sh # Setup script for Ubuntu
├── mac_setup.sh # Setup script for macOS
├── cabana/ # View and plot CAN messages from drives or in realtime
+├── camerastream/ # Cameras stream over the network
├── joystick/ # Control your car with a joystick
├── lib/ # Libraries to support the tools and reading openpilot logs
├── plotjuggler/ # A tool to plot openpilot logs
diff --git a/tools/camerastream/README.md b/tools/camerastream/README.md
new file mode 100644
index 0000000000..76133f07cd
--- /dev/null
+++ b/tools/camerastream/README.md
@@ -0,0 +1,66 @@
+# Camera stream
+
+`compressed_vipc.py` connects to a remote device running openpilot, decodes the video streams, and republishes them over VisionIPC.
+
+## Usage
+
+### On the device
+SSH into the device and run following in separate terminals:
+
+`cd /data/openpilot/cereal/messaging && ./bridge`
+
+`cd /data/openpilot/system/loggerd && ./encoderd`
+
+`cd /data/openpilot/system/camerad && ./camerad`
+
+Note that both the device and your PC must be on the same openpilot commit.
+
+Alternatively paste this as a single command:
+```
+(
+ cd /data/openpilot/cereal/messaging/
+ ./bridge &
+
+ cd /data/openpilot/system/camerad/
+ ./camerad &
+
+ cd /data/openpilot/system/loggerd/
+ ./encoderd &
+
+ wait
+) ; trap 'kill $(jobs -p)' SIGINT
+```
+Ctrl+C will stop all three processes.
+
+### On the PC
+Decode the stream with `compressed_vipc.py`:
+
+```cd ~/openpilot/tools/camerastream && ./compressed_vipc.py ```
+
+To actually display the stream, run `watch3` in separate terminal:
+
+```cd ~/openpilot/selfdrive/ui/ && ./watch3```
+
+## compressed_vipc.py usage
+```
+$ python compressed_vipc.py -h
+usage: compressed_vipc.py [-h] [--nvidia] [--cams CAMS] [--silent] addr
+
+Decode video streams and broadcast on VisionIPC
+
+positional arguments:
+ addr Address of comma three
+
+options:
+ -h, --help show this help message and exit
+ --nvidia Use nvidia instead of ffmpeg
+ --cams CAMS Cameras to decode
+ --silent Suppress debug output
+```
+
+
+## Example:
+```
+cd ~/openpilot/tools/camerastream && ./compressed_vipc.py comma-ffffffff --cams 0
+cd ~/openpilot/selfdrive/ui/ && ./watch3
+```
diff --git a/tools/camerastream/compressed_vipc.py b/tools/camerastream/compressed_vipc.py
index 6e4ad3866e..f1a6f230fa 100755
--- a/tools/camerastream/compressed_vipc.py
+++ b/tools/camerastream/compressed_vipc.py
@@ -12,6 +12,10 @@ from cereal.visionipc import VisionIpcServer, VisionStreamType
V4L2_BUF_FLAG_KEYFRAME = 8
+# start encoderd
+# also start cereal messaging bridge
+# then run this "./compressed_vipc.py "
+
ENCODE_SOCKETS = {
VisionStreamType.VISION_STREAM_ROAD: "roadEncodeData",
VisionStreamType.VISION_STREAM_WIDE_ROAD: "wideRoadEncodeData",