IQ.Pilot Release Commit @ 24b1ade
This commit is contained in:
@@ -316,8 +316,8 @@
|
|||||||
},
|
},
|
||||||
"python/_iqclosure/iqpilot/system/manager/process_config.py": {
|
"python/_iqclosure/iqpilot/system/manager/process_config.py": {
|
||||||
"mode": 420,
|
"mode": 420,
|
||||||
"sha256": "1676d1350461c917f2ac8412d68b85a4181e05075755823d34d530866f37ce62",
|
"sha256": "8b8de3f4d266213530dbc37248cf86c6a36241ec9b2f04afe0389e126fd2282f",
|
||||||
"size": 13361
|
"size": 13597
|
||||||
},
|
},
|
||||||
"python/_iqclosure/iqpilot/system/micd.py": {
|
"python/_iqclosure/iqpilot/system/micd.py": {
|
||||||
"mode": 420,
|
"mode": 420,
|
||||||
@@ -376,27 +376,27 @@
|
|||||||
},
|
},
|
||||||
"python/iqpilot_private/konn3kt/backups/archive_codec.cpython-312-aarch64-linux-gnu.so": {
|
"python/iqpilot_private/konn3kt/backups/archive_codec.cpython-312-aarch64-linux-gnu.so": {
|
||||||
"mode": 493,
|
"mode": 493,
|
||||||
"sha256": "e5766a76611ae1e6a16f16bed9899c0a1617e9ec8390487ac1c76bd68102aec8",
|
"sha256": "8d8808534c26b97369f5a69da3afbb2f6bdb2e2708c2479ff55a07574eab3cbd",
|
||||||
"size": 135552
|
"size": 135552
|
||||||
},
|
},
|
||||||
"python/iqpilot_private/konn3kt/backups/backup_keys.cpython-312-aarch64-linux-gnu.so": {
|
"python/iqpilot_private/konn3kt/backups/backup_keys.cpython-312-aarch64-linux-gnu.so": {
|
||||||
"mode": 493,
|
"mode": 493,
|
||||||
"sha256": "f3434b919fbbcf9fc2bb29c3af817214b4b025eda7d8a50ab331637e41e3fc30",
|
"sha256": "5ec7c8dc4e4d21f47b9e949a8960baacb470ab267752681ae840ea537646d29a",
|
||||||
"size": 67664
|
"size": 67664
|
||||||
},
|
},
|
||||||
"python/iqpilot_private/konn3kt/backups/backup_orchestrator.cpython-312-aarch64-linux-gnu.so": {
|
"python/iqpilot_private/konn3kt/backups/backup_orchestrator.cpython-312-aarch64-linux-gnu.so": {
|
||||||
"mode": 493,
|
"mode": 493,
|
||||||
"sha256": "c2a3cbc4411bee79c6b9cf284385152f4c1d8a50fd4beb246872bf47a5059878",
|
"sha256": "91e0fab17809c6a7231a956ef082033c906a8e5e44972a10bd32f9b653d634ea",
|
||||||
"size": 204640
|
"size": 204640
|
||||||
},
|
},
|
||||||
"python/iqpilot_private/konn3kt/backups/cbc_vault.cpython-312-aarch64-linux-gnu.so": {
|
"python/iqpilot_private/konn3kt/backups/cbc_vault.cpython-312-aarch64-linux-gnu.so": {
|
||||||
"mode": 493,
|
"mode": 493,
|
||||||
"sha256": "13f241fc7fb7cdd3afc01ce65936e3054d60910461c384b6f8ccabb65e50e61b",
|
"sha256": "d7356d8cb1ef60ac025ec806f6fe1c1c734c234f5fe5256f17c1bfd3ff36052f",
|
||||||
"size": 69768
|
"size": 69768
|
||||||
},
|
},
|
||||||
"python/iqpilot_private/konn3kt/backups/imahelper.cpython-312-aarch64-linux-gnu.so": {
|
"python/iqpilot_private/konn3kt/backups/imahelper.cpython-312-aarch64-linux-gnu.so": {
|
||||||
"mode": 493,
|
"mode": 493,
|
||||||
"sha256": "c9d4a41687f057074f520b693c3d208cb8c78951f8c2e24b8cf6ea95c1690f14",
|
"sha256": "58c1601759b2f61b942d18bf7a07d16050c53424337882e040afb6d083dbd4a4",
|
||||||
"size": 203088
|
"size": 203088
|
||||||
},
|
},
|
||||||
"python/iqpilot_private/konn3kt/flockd/__init__.py": {
|
"python/iqpilot_private/konn3kt/flockd/__init__.py": {
|
||||||
@@ -406,12 +406,12 @@
|
|||||||
},
|
},
|
||||||
"python/iqpilot_private/konn3kt/flockd/flockd.cpython-312-aarch64-linux-gnu.so": {
|
"python/iqpilot_private/konn3kt/flockd/flockd.cpython-312-aarch64-linux-gnu.so": {
|
||||||
"mode": 493,
|
"mode": 493,
|
||||||
"sha256": "bd6e7bdcd9186240febe0cba2b66dc5ff92e5d7b65f91d8b146e81114a8c6090",
|
"sha256": "3dea6e1a02a92a5cbebda37b768bcb4ba65224b4920307cded9247f738e6bdfe",
|
||||||
"size": 202184
|
"size": 202184
|
||||||
},
|
},
|
||||||
"python/iqpilot_private/konn3kt/flockd/signatures.cpython-312-aarch64-linux-gnu.so": {
|
"python/iqpilot_private/konn3kt/flockd/signatures.cpython-312-aarch64-linux-gnu.so": {
|
||||||
"mode": 493,
|
"mode": 493,
|
||||||
"sha256": "9bea4ab85fdc103fc451031d99e1235ca7f84358a65424db902bbfd839278b30",
|
"sha256": "34a58774d1243add0c0dc5cc95d78e0b17b13ede3bbfb8f0de63dd47a4c6a39f",
|
||||||
"size": 68080
|
"size": 68080
|
||||||
},
|
},
|
||||||
"python/iqpilot_private/konn3kt/hephaestus/__init__.py": {
|
"python/iqpilot_private/konn3kt/hephaestus/__init__.py": {
|
||||||
@@ -421,67 +421,67 @@
|
|||||||
},
|
},
|
||||||
"python/iqpilot_private/konn3kt/hephaestus/_vendor/localapi_runtime.zip": {
|
"python/iqpilot_private/konn3kt/hephaestus/_vendor/localapi_runtime.zip": {
|
||||||
"mode": 420,
|
"mode": 420,
|
||||||
"sha256": "5bccf8ab5fb8a3d648ba8be6f1e9a9263c1577b2a959f202763a6fcbe02eacb9",
|
"sha256": "60ce72178566082562ceeeeb84693f04640a2436d5d6c88657ee10fbf570adaa",
|
||||||
"size": 1379342
|
"size": 1379342
|
||||||
},
|
},
|
||||||
"python/iqpilot_private/konn3kt/hephaestus/ble_auth.cpython-312-aarch64-linux-gnu.so": {
|
"python/iqpilot_private/konn3kt/hephaestus/ble_auth.cpython-312-aarch64-linux-gnu.so": {
|
||||||
"mode": 493,
|
"mode": 493,
|
||||||
"sha256": "6681689c2a20680be9a5c588fc6234a57eba1bc023ff209e9ba16534955d760c",
|
"sha256": "c83f7947d210eee887750ca5e494e859cd6a099371eede6740282ee5f95fc725",
|
||||||
"size": 268080
|
"size": 268080
|
||||||
},
|
},
|
||||||
"python/iqpilot_private/konn3kt/hephaestus/ble_gatt.cpython-312-aarch64-linux-gnu.so": {
|
"python/iqpilot_private/konn3kt/hephaestus/ble_gatt.cpython-312-aarch64-linux-gnu.so": {
|
||||||
"mode": 493,
|
"mode": 493,
|
||||||
"sha256": "cc9c70a616928fe18e3ec7a49b80b127bb827438cd536146d57013ad006cb9ac",
|
"sha256": "f7e0c6471e5ae85e4bdb7225d60cdd67e2a54bd7e9386436e6f9eef7249354b3",
|
||||||
"size": 406176
|
"size": 406176
|
||||||
},
|
},
|
||||||
"python/iqpilot_private/konn3kt/hephaestus/ble_rpc_dispatch.cpython-312-aarch64-linux-gnu.so": {
|
"python/iqpilot_private/konn3kt/hephaestus/ble_rpc_dispatch.cpython-312-aarch64-linux-gnu.so": {
|
||||||
"mode": 493,
|
"mode": 493,
|
||||||
"sha256": "ac9f9b0467d64935e0a4f81a5e3525aacc8b243937eb339462086a447d7c6210",
|
"sha256": "83e7f6f18984c947811e2a17707def76fc2e563aea9eb37e9f37f5e09e377548",
|
||||||
"size": 68048
|
"size": 68048
|
||||||
},
|
},
|
||||||
"python/iqpilot_private/konn3kt/hephaestus/ble_transportd.cpython-312-aarch64-linux-gnu.so": {
|
"python/iqpilot_private/konn3kt/hephaestus/ble_transportd.cpython-312-aarch64-linux-gnu.so": {
|
||||||
"mode": 493,
|
"mode": 493,
|
||||||
"sha256": "33e3f6f65a0000d89c5b7e66054232a9773adc4d01fa28cb1ac658c20432e56b",
|
"sha256": "20f4505b5c0a320c2bab7f5026f55a0a405d85840b40f89a624b417f764f8a07",
|
||||||
"size": 335776
|
"size": 335848
|
||||||
},
|
},
|
||||||
"python/iqpilot_private/konn3kt/hephaestus/bt_gamepad.cpython-312-aarch64-linux-gnu.so": {
|
"python/iqpilot_private/konn3kt/hephaestus/bt_gamepad.cpython-312-aarch64-linux-gnu.so": {
|
||||||
"mode": 493,
|
"mode": 493,
|
||||||
"sha256": "c3306fc198b7b9cbf4b481debf4af79ff3d3e9dd23a6cc52137e763427d8f4cd",
|
"sha256": "b1a14c8534fc8b20bef3661b9390db53a3f39086337d241f931af72a368f7da2",
|
||||||
"size": 272112
|
"size": 272112
|
||||||
},
|
},
|
||||||
"python/iqpilot_private/konn3kt/hephaestus/cloud_routes.cpython-312-aarch64-linux-gnu.so": {
|
"python/iqpilot_private/konn3kt/hephaestus/cloud_routes.cpython-312-aarch64-linux-gnu.so": {
|
||||||
"mode": 493,
|
"mode": 493,
|
||||||
"sha256": "a3e3e45c6c9091620ee1d25f840bac287e166d7fb967d48f04d985c801d72711",
|
"sha256": "cf3c6b74668adb6f8830e52c25aa17f4211c5fe4cbea88e50dbd3c077e92bd84",
|
||||||
"size": 134408
|
"size": 134408
|
||||||
},
|
},
|
||||||
"python/iqpilot_private/konn3kt/hephaestus/hephaestusd.cpython-312-aarch64-linux-gnu.so": {
|
"python/iqpilot_private/konn3kt/hephaestus/hephaestusd.cpython-312-aarch64-linux-gnu.so": {
|
||||||
"mode": 493,
|
"mode": 493,
|
||||||
"sha256": "9151341dad54e3d27335a1e34592a35dc96e7f82431512cb9387a6ce35ac9661",
|
"sha256": "2f30fe07926a2b6d51c6ec88ee4d57d0895d841e080bd3866a8750b5f9608aa1",
|
||||||
"size": 3915272
|
"size": 3915272
|
||||||
},
|
},
|
||||||
"python/iqpilot_private/konn3kt/hephaestus/kwp2000.cpython-312-aarch64-linux-gnu.so": {
|
"python/iqpilot_private/konn3kt/hephaestus/kwp2000.cpython-312-aarch64-linux-gnu.so": {
|
||||||
"mode": 493,
|
"mode": 493,
|
||||||
"sha256": "b3481836a4f580539882bf0781b6aa196940c247e6050f074727501599a04eaa",
|
"sha256": "823b330d38eac09dbc22a01d1abe00d110f9d2cf8c5dc489ce58b05050db3dbe",
|
||||||
"size": 136472
|
"size": 136472
|
||||||
},
|
},
|
||||||
"python/iqpilot_private/konn3kt/hephaestus/manage_hephaestusd.cpython-312-aarch64-linux-gnu.so": {
|
"python/iqpilot_private/konn3kt/hephaestus/manage_hephaestusd.cpython-312-aarch64-linux-gnu.so": {
|
||||||
"mode": 493,
|
"mode": 493,
|
||||||
"sha256": "7f557d6349f6feb313896fb063b7cdd1b81d13bc3adaa51072730b62e51f2199",
|
"sha256": "02b76b8792b8f62ec4278dad6e63e5c8574479b8e714538c2cc73ebc216872eb",
|
||||||
"size": 68208
|
"size": 68208
|
||||||
},
|
},
|
||||||
"python/iqpilot_private/konn3kt/hephaestus/motd.cpython-312-aarch64-linux-gnu.so": {
|
"python/iqpilot_private/konn3kt/hephaestus/motd.cpython-312-aarch64-linux-gnu.so": {
|
||||||
"mode": 493,
|
"mode": 493,
|
||||||
"sha256": "32257f70289748828910bcdefeb689221a9b9f1b60b669aa454e0c4ed0514194",
|
"sha256": "46197da34eed0bf10c17baf32081b6a9871ddc9f3807f5de376e41699286e38c",
|
||||||
"size": 67840
|
"size": 67840
|
||||||
},
|
},
|
||||||
"python/iqpilot_private/konn3kt/hephaestus/tp20.cpython-312-aarch64-linux-gnu.so": {
|
"python/iqpilot_private/konn3kt/hephaestus/tp20.cpython-312-aarch64-linux-gnu.so": {
|
||||||
"mode": 493,
|
"mode": 493,
|
||||||
"sha256": "a3de8a57ec88a7a7900e360f274ff4a4a55cb6c693282f000ab9e1a804d1aadf",
|
"sha256": "144af2138c5e8f90c8432d9b90a8acafe995c1a030eb864aeb4e1b210b53b871",
|
||||||
"size": 135664
|
"size": 135664
|
||||||
},
|
},
|
||||||
"python/iqpilot_private/konn3kt/hephaestus/vw_pq_flasher.cpython-312-aarch64-linux-gnu.so": {
|
"python/iqpilot_private/konn3kt/hephaestus/vw_pq_flasher.cpython-312-aarch64-linux-gnu.so": {
|
||||||
"mode": 493,
|
"mode": 493,
|
||||||
"sha256": "28a68065a70ceea382ac3773d79f0251f0bf862900a7a353d11fe9cb52561b08",
|
"sha256": "3918430ba6f7dd7b654c73222bb7444afa2ef78be7bf595092b0813cebd61606",
|
||||||
"size": 269600
|
"size": 269600
|
||||||
},
|
},
|
||||||
"python/iqpilot_private/konn3kt/uploaderd/__init__.py": {
|
"python/iqpilot_private/konn3kt/uploaderd/__init__.py": {
|
||||||
@@ -491,7 +491,7 @@
|
|||||||
},
|
},
|
||||||
"python/iqpilot_private/konn3kt/uploaderd/iquploaderd.cpython-312-aarch64-linux-gnu.so": {
|
"python/iqpilot_private/konn3kt/uploaderd/iquploaderd.cpython-312-aarch64-linux-gnu.so": {
|
||||||
"mode": 493,
|
"mode": 493,
|
||||||
"sha256": "beda75859f40628aaea1890d1207225bd633c76bc975f5a3cc741066508cc709",
|
"sha256": "77a0da7cf61eaa05df08c448460cb2e563929ee7c41257d9b5f0814d6d32016f",
|
||||||
"size": 336280
|
"size": 336280
|
||||||
},
|
},
|
||||||
"runtime": {
|
"runtime": {
|
||||||
@@ -535,25 +535,25 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"signatures": {
|
"signatures": {
|
||||||
"python/iqpilot_private/konn3kt/backups/archive_codec.cpython-312-aarch64-linux-gnu.so": "/uV0KncXN88hxSYogRunz1SJTaeiZtYzMfVXiOwr+QA3AwatE3ZHouzIiPxqYsH/AngmSPBqk9sBHOCmPuTiCw==",
|
"python/iqpilot_private/konn3kt/backups/archive_codec.cpython-312-aarch64-linux-gnu.so": "lRrLXy0fYvSR0U/mJbw1BXUacNm7Jc6YRknVHM8DuT0gGsLp0y0xrYXSlarISHznZvV0JbPsNf3wgbQA5NZ3CA==",
|
||||||
"python/iqpilot_private/konn3kt/backups/backup_keys.cpython-312-aarch64-linux-gnu.so": "skmbTy7FxaZggM1kT1qKUoQijD7s0TJjs7FZB+JSUt4ocf248pQMC55bbKM9P4yFX2QKk7LJ9P0NzXglwTi4CA==",
|
"python/iqpilot_private/konn3kt/backups/backup_keys.cpython-312-aarch64-linux-gnu.so": "H0GqhuuUrSJYyT4UXbf7GujRXxGx/zgIn+ZDaiyjPghcYdy64bGH2fVWwEm69OC409ZtVB0sI69GlqGPMKF/Dg==",
|
||||||
"python/iqpilot_private/konn3kt/backups/backup_orchestrator.cpython-312-aarch64-linux-gnu.so": "pVG+KU133RzRnnJ71ocvMO5c6lnAhXf3eq7wB3Vr1U3KeITBE/7dJemwbvVfN9bciD8/mUFeurVpBslBDlp1Bw==",
|
"python/iqpilot_private/konn3kt/backups/backup_orchestrator.cpython-312-aarch64-linux-gnu.so": "sF93qmp1nxbSBfqq0FBr/jI8QK1jP3wQgEYoys3McYNfC3IOk6V7eqL1AZz8Rj20j7Iu1TOpWsGsSVxo+G0xAg==",
|
||||||
"python/iqpilot_private/konn3kt/backups/cbc_vault.cpython-312-aarch64-linux-gnu.so": "/N1l31Ks/riHSDMhyqBpguzrPNGNPg3WlNRBBnloST7kvAEvphcBnT5+yIQvPWtIZfDN6uKNFavUi06Q3/2JDA==",
|
"python/iqpilot_private/konn3kt/backups/cbc_vault.cpython-312-aarch64-linux-gnu.so": "FcuWnfFQt7EWTRH5Lev1PhNpQposz/8d6p8DK6Jg7Zi+Rf93GUDgg3/t74IjHTq+aPSvR1J1ArKAUGRstGmpDw==",
|
||||||
"python/iqpilot_private/konn3kt/backups/imahelper.cpython-312-aarch64-linux-gnu.so": "2m5TXcCRT3Shxw5k8Ch3G3UtCIE5Lq5pZwp/R0Npn3hBIqAHi7lVU2q8YuaAPEuR09vbL+dStL3aqy/CbCqXBw==",
|
"python/iqpilot_private/konn3kt/backups/imahelper.cpython-312-aarch64-linux-gnu.so": "UkRfnbDSg3UPzTL6BgLM3pXTOKUqo/QA/DP1qCUVYWm7hTGX5balWH3inYKaxQTP6WkbIm0dGusMT2pldW7JAg==",
|
||||||
"python/iqpilot_private/konn3kt/flockd/flockd.cpython-312-aarch64-linux-gnu.so": "YtzOVOh9rRQT3fbT4a4UDMbmKxPAUL/fLsA7WvQiI4YaUOgy5vx3i/FMx7N+2FswSbAL1Si+jab85zZbJbGaCQ==",
|
"python/iqpilot_private/konn3kt/flockd/flockd.cpython-312-aarch64-linux-gnu.so": "VLvLBhbqm6+V8udYUKpv7hXQygiu3scB6FXmfjyRVKLvGcCsVUA2LKLNtH8Ff+TPsdEXRp7wCBMrVBVUslCiBA==",
|
||||||
"python/iqpilot_private/konn3kt/flockd/signatures.cpython-312-aarch64-linux-gnu.so": "+zB9FYrJAU6/equ/5EUmCTKV+ukSnPb3NdFuLVDxrbQ0wOKLpwU5fL+760Nk4anp8bpOVABQeS5LMSK+jvhqDA==",
|
"python/iqpilot_private/konn3kt/flockd/signatures.cpython-312-aarch64-linux-gnu.so": "b9jhc7aE//J2/bE8fyglw3hO+KKSOEjnzDzKSPmfL+bVmVUvtdN/F/1lpvdYrb2RalkBvl7ktFOgymZKn0vrBA==",
|
||||||
"python/iqpilot_private/konn3kt/hephaestus/ble_auth.cpython-312-aarch64-linux-gnu.so": "Uny9JAJkWPPCJbAkE9PkQvF2XNdHBKqZqdJraA6c2ywzbTx+F8Y+ge054N7Pfgj/oY2rZqHHwC66sz6zUXNbBg==",
|
"python/iqpilot_private/konn3kt/hephaestus/ble_auth.cpython-312-aarch64-linux-gnu.so": "IovyDAeYBOAC8yv67H+UqiicwOd210iwDXMvNuTXbU4lbq0xuqa1uy7t/oCClt4P0BhZLgvJQ0KI/jqMRsbxBA==",
|
||||||
"python/iqpilot_private/konn3kt/hephaestus/ble_gatt.cpython-312-aarch64-linux-gnu.so": "EGHn14z9HhVK4WDAiv1k3MKPm9YRkXThjee3PKte9hMB6wF0LWCMNul0pUWcmauPSjhBIU7h9DSIFg9GmgKiAw==",
|
"python/iqpilot_private/konn3kt/hephaestus/ble_gatt.cpython-312-aarch64-linux-gnu.so": "xmIlShogvGuAh7RJOaOJSV/oB7EhvUpjPFiPHah97yvwg+pmrDYy2avmjWM8wCE3kKrKCFgEVW6ye6u4Eo0wCA==",
|
||||||
"python/iqpilot_private/konn3kt/hephaestus/ble_rpc_dispatch.cpython-312-aarch64-linux-gnu.so": "Cmy6QWRx+jkndmCXb2Inr7KSWnB8MeN3IVYoR+GUR7Al2H28bTkB4aroCHc6JRIIIyiE+L3RHn8OZfbfszRICA==",
|
"python/iqpilot_private/konn3kt/hephaestus/ble_rpc_dispatch.cpython-312-aarch64-linux-gnu.so": "Zbj2hW+Z5TMeXrXOVd7htJ1KAOkEOX7W4jqj1hulsO/hsUEzcIBFEYkCTGzEJ7jkU7QO1LzUjT04WyqlRAgOAA==",
|
||||||
"python/iqpilot_private/konn3kt/hephaestus/ble_transportd.cpython-312-aarch64-linux-gnu.so": "vAEIgGKcJnr8NmZDkgoJlVQczr2JmQoORbj5jUmFIidDyw2biwH/hhnhAUEbd7DMs2AgcUKsaCozIdD2SYi8CQ==",
|
"python/iqpilot_private/konn3kt/hephaestus/ble_transportd.cpython-312-aarch64-linux-gnu.so": "L+gCCPfiImd9gqtJ0jnSKzRWYnJjqB8f1ixz7WFJGDipbjMF1NDj24nwYLE21oUAqTdDSVnb3bQG9gtLkNbeBg==",
|
||||||
"python/iqpilot_private/konn3kt/hephaestus/bt_gamepad.cpython-312-aarch64-linux-gnu.so": "qA+C/uOh+uLHDi8j2HwLUa+Mx3CMOY5hVOjTaw86opkE8GFiCJEMnZnD1+gLfHhSw686VNswDgrp2oUmz97MBQ==",
|
"python/iqpilot_private/konn3kt/hephaestus/bt_gamepad.cpython-312-aarch64-linux-gnu.so": "Tu14xhw8hc5vgg0oJ4vYZSwuml+k80ZrWjf8VgTefxvG8JGvm4ZwZ34lVdesUfvZCAVCszkEUustAXVhTLu0Cw==",
|
||||||
"python/iqpilot_private/konn3kt/hephaestus/cloud_routes.cpython-312-aarch64-linux-gnu.so": "A/t3xlcV3TPh3o9rfH1JhX7nhUVsDH9foqFKjwpqvpuOlm7X4pfgJXLlxCeEN/YAOkaFEL2ITxpTR/LxxI+sAQ==",
|
"python/iqpilot_private/konn3kt/hephaestus/cloud_routes.cpython-312-aarch64-linux-gnu.so": "VvPIQ0Ffu2K0T806hzzK5sLdAtL6I0ORgLVW6Hl4VNgzwJucMPSHQChFn3q94G7KhD20F1g0UvBF+0NrgRVCDg==",
|
||||||
"python/iqpilot_private/konn3kt/hephaestus/hephaestusd.cpython-312-aarch64-linux-gnu.so": "oQC/Edkjh7OGSHjWyYdY0SKRJst5drk4GjXnMuFbZQu53INbrGEuZnpQ8x5Mjb6LxLOiKGU4Yu+ibhZTl7+oAw==",
|
"python/iqpilot_private/konn3kt/hephaestus/hephaestusd.cpython-312-aarch64-linux-gnu.so": "qMi6U7oxlcOf9s3O+o2mFRorOYNxjK/MPrw0JxRJ2cVgG64hbzXou1yw/LZTVTAjun/EGCJgfXC313G/nGP9Cg==",
|
||||||
"python/iqpilot_private/konn3kt/hephaestus/kwp2000.cpython-312-aarch64-linux-gnu.so": "P1y+n8sFHjL+0EMD3+5dHYCUZ5fGLeznzf+1/zszr45fBsHJbSYqPDBepAEx+TrXwDrxEONo8aaVC6PA193pDg==",
|
"python/iqpilot_private/konn3kt/hephaestus/kwp2000.cpython-312-aarch64-linux-gnu.so": "/kjgZ33Ev8UgrJtqsyGWCMp5IIeqk6Kb9UGpwzZE5jrJiym15HjVQZnfWIqAECUOxBnJsIKrun5tcKKndfgsAQ==",
|
||||||
"python/iqpilot_private/konn3kt/hephaestus/manage_hephaestusd.cpython-312-aarch64-linux-gnu.so": "yZY/mAzII1O/xMrmQueULxTgXf6Ze6P9PvMNM41LYEaLWlNSJLbYu+umhGQeru8LUGAO+xpuGahDloNMKa+dDg==",
|
"python/iqpilot_private/konn3kt/hephaestus/manage_hephaestusd.cpython-312-aarch64-linux-gnu.so": "/eUDZy8k0jVHALTMabHt3f9Va3xGc2FnXUX0ly7oSqaWPsoB/CivrxP+jlc5NcKNsigwqox97lDye291B1LOBg==",
|
||||||
"python/iqpilot_private/konn3kt/hephaestus/motd.cpython-312-aarch64-linux-gnu.so": "zQoY1eHKdlMZW3ITM8G6+UwMBCGR+xt+0dx/ovz5u1uGkbrVHm6A8tfk6Zx27iBKle0qFdye6Al2PQK02kXMBQ==",
|
"python/iqpilot_private/konn3kt/hephaestus/motd.cpython-312-aarch64-linux-gnu.so": "C+ObT5E4w707z7kVKW89SUsEzVb7ZExmDLKXnTh1a2oa92hzRusH60iIEMF8ofL0eZBORRmbNVsewVEEGQ6ZDQ==",
|
||||||
"python/iqpilot_private/konn3kt/hephaestus/tp20.cpython-312-aarch64-linux-gnu.so": "10YGOLrImdCOB7LXlDkwkEdj6beXsFfc5AixI5Zq097mBiAcfoWFKiCSPeN3pk4CxuehNXtebw5UuLXsx2ABDg==",
|
"python/iqpilot_private/konn3kt/hephaestus/tp20.cpython-312-aarch64-linux-gnu.so": "2vqBy+02ldRHcVMlKUT+Vk6Hz7diGSxVct+FK/LcMCpXg5N51YqhvX5YdBgtZWnQpbvIPi1wyr9Zqs3oIT5hAw==",
|
||||||
"python/iqpilot_private/konn3kt/hephaestus/vw_pq_flasher.cpython-312-aarch64-linux-gnu.so": "QQ2CnLrT79NeQzODxK9/QbduXtCrp6u/Ca6U5KAdnKVPD86+TndxeiX01wgYUZMLmIFCJh4rPGiFBI2f+oS7AA==",
|
"python/iqpilot_private/konn3kt/hephaestus/vw_pq_flasher.cpython-312-aarch64-linux-gnu.so": "uHyniVaxBLNTVLx/40UH6pifUZF/xwwo9Jd8slS+0lyhAXMuZnmoQoHnaJRN4adTuEGOyKKyi/wisjFASuwqCA==",
|
||||||
"python/iqpilot_private/konn3kt/uploaderd/iquploaderd.cpython-312-aarch64-linux-gnu.so": "CqJ0BMkC09FCG+XDybTNULBSobSDBWAPL8YMqXv7QVGCut/9pO1NON5s5zQPVsN6IHUOdt94Iz+h5Ehu1yPjAQ=="
|
"python/iqpilot_private/konn3kt/uploaderd/iquploaderd.cpython-312-aarch64-linux-gnu.so": "No8Xim23VntTR9aceGofLd/vNC3jVQSZ9PmB3qwS5osNqdUrEh/5Y5RpXWKU2/azhsOMqnlbT0ppARqNGVDKCQ=="
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
1J/pEtI6qoBjh397jGVMx0xaeG1QXhcxuiHCXKKiU497RGTTHNmgVpKkNngATL61HgbYa7dgj7mPwLs2u7epAQ==
|
Li23uJ7UFsHmYsNYtk8ZvF7oFHZoV8tl9yuzsFSkEzPBnX5MQJwpihQtEwVC1mn1EAHwyjj7nJ/uaZww1o9wCg==
|
||||||
|
|||||||
@@ -138,6 +138,11 @@ def egpu_enabled(started, params, CP: car.CarParams) -> bool:
|
|||||||
return (resolve_backend(params.get_bool("IQEmacEnabled"), egpu_selected(params), _egpu_present(params)) == "egpu"
|
return (resolve_backend(params.get_bool("IQEmacEnabled"), egpu_selected(params), _egpu_present(params)) == "egpu"
|
||||||
and _egpu_present(params))
|
and _egpu_present(params))
|
||||||
|
|
||||||
|
def egpu_prefetch_enabled(started, params, CP: car.CarParams) -> bool:
|
||||||
|
if params.get_bool("IQEgpuDisabled"):
|
||||||
|
return False
|
||||||
|
return resolve_backend(params.get_bool("IQEmacEnabled"), True, _egpu_present(params)) == "egpu"
|
||||||
|
|
||||||
def big_model_enabled(started, params, CP: car.CarParams) -> bool:
|
def big_model_enabled(started, params, CP: car.CarParams) -> bool:
|
||||||
return params.get_bool("IQEmacEnabled") or egpu_selected(params)
|
return params.get_bool("IQEmacEnabled") or egpu_selected(params)
|
||||||
|
|
||||||
@@ -223,7 +228,7 @@ procs += [
|
|||||||
PythonProcess("iqegpumodeld", "iqpilot.selfdrive.iqmodeld.iqegpumodeld",
|
PythonProcess("iqegpumodeld", "iqpilot.selfdrive.iqmodeld.iqegpumodeld",
|
||||||
and_(only_onroad, and_(is_tinygrad_model, egpu_enabled)), restart_if_crash=True),
|
and_(only_onroad, and_(is_tinygrad_model, egpu_enabled)), restart_if_crash=True),
|
||||||
PythonProcess("egpu_prefetch", "iqpilot.selfdrive.iqmodeld.egpu_prefetch",
|
PythonProcess("egpu_prefetch", "iqpilot.selfdrive.iqmodeld.egpu_prefetch",
|
||||||
and_(only_offroad, and_(is_tinygrad_model, egpu_enabled)), restart_if_crash=True),
|
and_(only_offroad, and_(is_tinygrad_model, egpu_prefetch_enabled)), restart_if_crash=True),
|
||||||
|
|
||||||
BundleProcess("backup_manager_k3", "iqpilot_hephaestusd_private", "iqpilot_private.konn3kt.backups.backup_orchestrator",
|
BundleProcess("backup_manager_k3", "iqpilot_hephaestusd_private", "iqpilot_private.konn3kt.backups.backup_orchestrator",
|
||||||
and_(only_offroad, hephaestus_ready_shim, not_low_power)),
|
and_(only_offroad, hephaestus_ready_shim, not_low_power)),
|
||||||
|
|||||||
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.
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.
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.
@@ -16,22 +16,22 @@
|
|||||||
},
|
},
|
||||||
"python/iqpilot_private/updater/_hf_maps_blob.cpython-312-aarch64-linux-gnu.so": {
|
"python/iqpilot_private/updater/_hf_maps_blob.cpython-312-aarch64-linux-gnu.so": {
|
||||||
"mode": 493,
|
"mode": 493,
|
||||||
"sha256": "f18e3a7886a2e6835c91936cc4a11b118c02576f827683cff2a8d8788c3d1628",
|
"sha256": "69b858142aeb82cf730f042f6bc354dabb19579654872eaed3f73d482a856802",
|
||||||
"size": 67616
|
"size": 67616
|
||||||
},
|
},
|
||||||
"python/iqpilot_private/updater/_iqos_pat_blob.cpython-312-aarch64-linux-gnu.so": {
|
"python/iqpilot_private/updater/_iqos_pat_blob.cpython-312-aarch64-linux-gnu.so": {
|
||||||
"mode": 493,
|
"mode": 493,
|
||||||
"sha256": "9bb73ab877e3c87f415b07a780c807f6f686bf5d5c01f4f4866260d2812f0b8d",
|
"sha256": "d8d9ccc3059b6239f2be41437e97b160b96278e419d84f9c0c243a2ba3ebf94c",
|
||||||
"size": 67616
|
"size": 67616
|
||||||
},
|
},
|
||||||
"python/iqpilot_private/updater/_pat_blob.cpython-312-aarch64-linux-gnu.so": {
|
"python/iqpilot_private/updater/_pat_blob.cpython-312-aarch64-linux-gnu.so": {
|
||||||
"mode": 493,
|
"mode": 493,
|
||||||
"sha256": "8e33ab06991537400b3c50d2bfe3483627b50c999d6ad0c44d27d09eacac9235",
|
"sha256": "cea69f651768732bcbbd1a7edff668876dcf6787c332e859f6f01c945d74cbe0",
|
||||||
"size": 67616
|
"size": 67616
|
||||||
},
|
},
|
||||||
"python/iqpilot_private/updater/git_remote.cpython-312-aarch64-linux-gnu.so": {
|
"python/iqpilot_private/updater/git_remote.cpython-312-aarch64-linux-gnu.so": {
|
||||||
"mode": 493,
|
"mode": 493,
|
||||||
"sha256": "55db05006382a9212c300db2236590260b66489d904e19656f2cf03309de89bf",
|
"sha256": "384782451d53a5ca89809f05bf5c68577596dfbaca3f2f82bb0a972663897491",
|
||||||
"size": 136608
|
"size": 136608
|
||||||
},
|
},
|
||||||
"runtime": {
|
"runtime": {
|
||||||
@@ -43,9 +43,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"signatures": {
|
"signatures": {
|
||||||
"python/iqpilot_private/updater/_hf_maps_blob.cpython-312-aarch64-linux-gnu.so": "8MfmjOuuJgGPd2959u6zSnbsfCGIcY8ut4vH4JW//Vqb51508zKFSZYbmsKYFSYmUYcsNrDdKlzG7cyxwi25CQ==",
|
"python/iqpilot_private/updater/_hf_maps_blob.cpython-312-aarch64-linux-gnu.so": "2hlUdv1cuGpzNrKoSx3VqRGdaVsgkkGhiHKBirfYkEwJmQJizQ966d6iZQoIzh8LEmRdhi+77iLFXQiEWApSDQ==",
|
||||||
"python/iqpilot_private/updater/_iqos_pat_blob.cpython-312-aarch64-linux-gnu.so": "7ygpLdx/E5TgYoL8OINkv4mYLVkAHlAG0Wh4ZBnXCdTi+fd1bySI+7WmQczoQMlk0VjtIqyJTus+tsRkXEjQDg==",
|
"python/iqpilot_private/updater/_iqos_pat_blob.cpython-312-aarch64-linux-gnu.so": "EHoKO6/esRwuP7oxR9a5FXiQVPjh+3CmtXS1jNQor7yOpra/LijNPHvvu423y+vlOn1KkVCbhZgaHrsB/3oJDA==",
|
||||||
"python/iqpilot_private/updater/_pat_blob.cpython-312-aarch64-linux-gnu.so": "79iU094xiuJ25sF9qXaLqTS/f9AidQhDoTlj2HVBIWt6biVmBY0MpgHOXK7lhCskykR7H/8j9zp2SsA2dToaDA==",
|
"python/iqpilot_private/updater/_pat_blob.cpython-312-aarch64-linux-gnu.so": "oqWDyKXImMpVEHwBohGW1nL7oZaNMu12aP/zMfowkjDAsHZJOM+TOicUNketIi990nJMbhApcJk3zpoM+1nGCw==",
|
||||||
"python/iqpilot_private/updater/git_remote.cpython-312-aarch64-linux-gnu.so": "rxKmOjUbaJRdo65i8bDae/zEDUXIWvOay4k+KJ3vuH1Z+jQQvRXuWjKAMtJX7a7v/zzTcg7ijY2CBfXEFZJRCQ=="
|
"python/iqpilot_private/updater/git_remote.cpython-312-aarch64-linux-gnu.so": "xp2MN37LX95Rbt3zGC/ZysyTCv8wUi6xpzbHoTLMwRfq4cDpWafItWgFiypcn5ANsAQA7weqMbihmtq6EbV3Bg=="
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
0OdQnuSdywA/tTTIVWGwz2gpZ5H50RoDjjWrXlgYDivBPpTU83nj3jbFtFenrzVNDouRC/PbTvEFNwcnHAe8DA==
|
Q62ipKl3jmGXHvKYVnhQY7sk4ZSS7AmhXf23DY4sYqoTP7hn9WDDlQD82bMhQJdcY+Obcr9fRn1EGmGTuMUjDw==
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -429,55 +429,38 @@ class CarController(CarControllerBase, AolCarController, GasInterceptorCarContro
|
|||||||
self.gas = pcm_accel / self.params.NIDEC_GAS_MAX
|
self.gas = pcm_accel / self.params.NIDEC_GAS_MAX
|
||||||
|
|
||||||
# Render OP's lane and lead cars on the dash. On CAN FD these are radar look-alikes that only
|
# Render OP's lane and lead cars on the dash. On CAN FD these are radar look-alikes that only
|
||||||
# exist (and are only allowed by panda safety) when the radar is disabled; in stock ACC the real
|
# exist (and are only allowed by panda safety) when the radar is disabled. Radarless keeps the
|
||||||
# radar still owns LANE_PATH/HUD_OBJECTS
|
# camera as the dash authority (known-good), so OP does not author these there
|
||||||
if ((self.frame % 2 == 0 and self.CP.carFingerprint in HONDA_BOSCH_RADARLESS) or
|
if (CS.radar_50hz_tick and self.CP.carFingerprint in HONDA_BOSCH_CANFD and self.CP.openpilotLongitudinalControl
|
||||||
(CS.radar_50hz_tick and self.CP.carFingerprint in HONDA_BOSCH_CANFD and self.CP.openpilotLongitudinalControl
|
and not CS.stock_acc_alive):
|
||||||
and not CS.stock_acc_alive)):
|
|
||||||
leads = dash_objects.leads_from_model(self.model, CS.out.vEgo)
|
leads = dash_objects.leads_from_model(self.model, CS.out.vEgo)
|
||||||
lead = leads[0]
|
lead = leads[0]
|
||||||
lead_d = lead.dRel if lead.status else 0.0
|
lead_d = lead.dRel if lead.status else 0.0
|
||||||
self.rendered_lane = self.lane_renderer.update(self.model, CS.out.vEgo, lead_d)
|
self.rendered_lane = self.lane_renderer.update(self.model, CS.out.vEgo, lead_d)
|
||||||
# the dash freezes the lane display if LANE_PATH and HUD_OBJECTS muxes don't match
|
|
||||||
if self.CP.carFingerprint in HONDA_BOSCH_CANFD:
|
|
||||||
mux = self.radar_mux
|
mux = self.radar_mux
|
||||||
# no LKAS_HUD_2 on CAN FD: the dash reads the lane length from the in-band terminator, so the
|
# no LKAS_HUD_2 on CAN FD: the dash reads the lane length from the in-band terminator, so the
|
||||||
# path is reshaped into the terminated-prefix form
|
# path is reshaped into the terminated-prefix form
|
||||||
lane_offsets = dash_lane.canfd_lane_offsets(self.rendered_lane)
|
lane_offsets = dash_lane.canfd_lane_offsets(self.rendered_lane)
|
||||||
else:
|
|
||||||
mux = dash_lane.MUX_CYCLE[(self.frame // 2) % len(dash_lane.MUX_CYCLE)]
|
|
||||||
lane_offsets = self.rendered_lane.offsets
|
|
||||||
lane_msg = dash_lane.create_lane_path(self.packer, self.CAN.lkas, lane_offsets, mux)
|
lane_msg = dash_lane.create_lane_path(self.packer, self.CAN.lkas, lane_offsets, mux)
|
||||||
can_sends.append(lane_msg)
|
can_sends.append(lane_msg)
|
||||||
|
|
||||||
# CAN FD cars have no camera HUD_OBJECTS to poll (the disabled radar owned it): author OP's
|
# CAN FD cars have no camera HUD_OBJECTS to poll (the disabled radar owned it): author OP's
|
||||||
# lead in slot 0 with the other slots blank (tracks=None)
|
# lead in slot 0 with the other slots blank (tracks=None)
|
||||||
tracks = CS.camera_object_tracker.snapshot() if CS.camera_object_tracker is not None else None
|
tracks = CS.camera_object_tracker.snapshot() if CS.camera_object_tracker is not None else None
|
||||||
if self.CP.openpilotLongitudinalControl:
|
|
||||||
hud_msg = self.dash_object_author.create(self.packer, self.CAN.lkas, lead, tracks, mux, now_nanos * 1e-9,
|
hud_msg = self.dash_object_author.create(self.packer, self.CAN.lkas, lead, tracks, mux, now_nanos * 1e-9,
|
||||||
extra_leads=leads[1:])
|
extra_leads=leads[1:])
|
||||||
else:
|
|
||||||
# for stock ACC, forward the camera's objects but with our mux
|
|
||||||
hud_msg = dash_objects.forward_hud_object(self.packer, self.CAN.lkas, mux, tracks)
|
|
||||||
can_sends.append(hud_msg)
|
can_sends.append(hud_msg)
|
||||||
|
|
||||||
# on CAN FD the camera (behind the relay) also consumes these; mirror the identical packed
|
# the camera (behind the relay) also consumes these; mirror the identical packed bytes onto the
|
||||||
# bytes onto the camera bus (packed once, so the counter/checksum stay in lockstep)
|
# camera bus (packed once, so the counter/checksum stay in lockstep)
|
||||||
if self.CP.carFingerprint in HONDA_BOSCH_CANFD:
|
|
||||||
for addr, dat, _ in (lane_msg, hud_msg):
|
for addr, dat, _ in (lane_msg, hud_msg):
|
||||||
can_sends.append((addr, dat, self.CAN.camera))
|
can_sends.append((addr, dat, self.CAN.camera))
|
||||||
|
|
||||||
if self.frame % 20 == 0 and self.CP.carFingerprint in HONDA_BOSCH_RADARLESS:
|
# CAN FD: when stock LKAS is active, the touch-steering-wheel nag eventually forces an ACC
|
||||||
# COUNTER_2 trails the packer's COUNTER (frame//20 % 4) by one
|
# disengagement (a brake tap from the VSA). Disable LKAS automatically and block the driver's LKAS
|
||||||
rl = self.rendered_lane
|
# button by taking over SCM_BUTTONS on the camera bus while engaged (panda blocks the forwarded
|
||||||
can_sends.append(dash_lane.create_lkas_hud_2(self.packer, self.CAN.lkas, (self.frame // 20 - 1) % 4,
|
# stock SCM_BUTTONS while this stream flows). Radarless keeps the stock camera LKAS untouched
|
||||||
rl.reach, rl.lane_cross, rl.left_line, rl.right_line))
|
if self.CP.carFingerprint in HONDA_BOSCH_CANFD and CC.enabled and self.frame % 4 == 0 and \
|
||||||
|
|
||||||
# Radarless + CAN FD: when stock LKAS is active, the touch-steering-wheel nag eventually forces an
|
|
||||||
# ACC disengagement (on CAN FD it shows up as a brake tap from the VSA). Disable LKAS automatically
|
|
||||||
# and block the driver's LKAS button by taking over SCM_BUTTONS on the camera bus while engaged
|
|
||||||
# (panda blocks the forwarded stock SCM_BUTTONS while this stream flows)
|
|
||||||
if self.CP.carFingerprint in (HONDA_BOSCH_RADARLESS | HONDA_BOSCH_CANFD) and CC.enabled and self.frame % 4 == 0 and \
|
|
||||||
not pcm_cancel_cmd and not CC.cruiseControl.resume:
|
not pcm_cancel_cmd and not CC.cruiseControl.resume:
|
||||||
if self.lkas_button_send_remaining == 0 and CS.lkas_hud["LKAS_READY"] and self.frame >= self.last_lkas_button_frame + 500:
|
if self.lkas_button_send_remaining == 0 and CS.lkas_hud["LKAS_READY"] and self.frame >= self.last_lkas_button_frame + 500:
|
||||||
self.lkas_button_send_remaining = 3
|
self.lkas_button_send_remaining = 3
|
||||||
|
|||||||
@@ -197,18 +197,19 @@ def create_lkas_hud(packer, bus, CP, hud_control, lat_active, steering_available
|
|||||||
|
|
||||||
if CP.carFingerprint in (HONDA_BOSCH_RADARLESS | HONDA_BOSCH_CANFD):
|
if CP.carFingerprint in (HONDA_BOSCH_RADARLESS | HONDA_BOSCH_CANFD):
|
||||||
lkas_hud_values['LANE_LINES'] = 3
|
lkas_hud_values['LANE_LINES'] = 3
|
||||||
lkas_hud_values['LKAS_PROBLEM'] = steer_fault_permanent
|
lkas_hud_values['DASHED_LANES'] = lat_active
|
||||||
|
|
||||||
|
# car likely needs to see LKAS_PROBLEM fall within a specific time frame, so forward from camera
|
||||||
if CP.carFingerprint in HONDA_BOSCH_RADARLESS:
|
if CP.carFingerprint in HONDA_BOSCH_RADARLESS:
|
||||||
# gray lanes when disengaged
|
lkas_hud_values['LKAS_PROBLEM'] = lkas_hud['LKAS_PROBLEM']
|
||||||
lkas_hud_values['DASHED_LANES'] = 1
|
|
||||||
else:
|
if CP.carFingerprint in HONDA_BOSCH_CANFD:
|
||||||
|
lkas_hud_values['LKAS_PROBLEM'] = steer_fault_permanent
|
||||||
# CAN FD: dashed lanes are the AOL armed indication (dashed_lanes is aol.enabled and not
|
# CAN FD: dashed lanes are the AOL armed indication (dashed_lanes is aol.enabled and not
|
||||||
# latActive, which is not standstill-gated - so parked LKAS button presses produce cluster
|
# latActive, which is not standstill-gated - so parked LKAS button presses produce cluster
|
||||||
# feedback). ORed with lat_active so the engaged payload keeps SOLID and DASHED set together,
|
# feedback). ORed with lat_active so the engaged payload keeps SOLID and DASHED set together,
|
||||||
# byte-matching the stock camera's lanes-on state
|
# byte-matching the stock camera's lanes-on state
|
||||||
lkas_hud_values['DASHED_LANES'] = dashed_lanes or lat_active
|
lkas_hud_values['DASHED_LANES'] = dashed_lanes or lat_active
|
||||||
|
|
||||||
if CP.carFingerprint in HONDA_BOSCH_CANFD:
|
|
||||||
# every payload change must coincide with an LKAS_STATE_CHANGE pulse (see carcontroller); keyed
|
# every payload change must coincide with an LKAS_STATE_CHANGE pulse (see carcontroller); keyed
|
||||||
# on lat_active, not lanesVisible, so the dash LKAS indication follows AOL's lateral state
|
# on lat_active, not lanesVisible, so the dash LKAS indication follows AOL's lateral state
|
||||||
lkas_hud_values['SOLID_LANES'] = lat_active
|
lkas_hud_values['SOLID_LANES'] = lat_active
|
||||||
|
|||||||
@@ -323,9 +323,9 @@ static bool honda_tx_hook(const CANPacket_t *msg) {
|
|||||||
// FORCE CANCEL: safety check only relevant when spamming the cancel button in Bosch HW
|
// FORCE CANCEL: safety check only relevant when spamming the cancel button in Bosch HW
|
||||||
// ensuring that only the cancel button press is sent (VAL 2) when controls are off.
|
// ensuring that only the cancel button press is sent (VAL 2) when controls are off.
|
||||||
// This avoids unintended engagements while still allowing resume spam
|
// This avoids unintended engagements while still allowing resume spam
|
||||||
// On CAN FD and radarless, buttons are also sent to the camera (bus 2) to take over SCM_BUTTONS
|
// On CAN FD, buttons are also sent to the camera (bus 2) to take over SCM_BUTTONS while engaged, so
|
||||||
// while engaged, so the same check applies there
|
// the same check applies there (radarless already sends buttons on bus 2 via bus_buttons)
|
||||||
const bool is_buttons_bus = (msg->bus == bus_buttons) || ((honda_bosch_canfd || honda_bosch_radarless) && (msg->bus == 2U));
|
const bool is_buttons_bus = (msg->bus == bus_buttons) || (honda_bosch_canfd && (msg->bus == 2U));
|
||||||
if ((msg->addr == 0x296U) && !controls_allowed && is_buttons_bus) {
|
if ((msg->addr == 0x296U) && !controls_allowed && is_buttons_bus) {
|
||||||
if (((msg->data[0] >> 5) & 0x7U) != 2U) {
|
if (((msg->data[0] >> 5) & 0x7U) != 2U) {
|
||||||
tx = false;
|
tx = false;
|
||||||
@@ -454,13 +454,10 @@ static safety_config honda_bosch_init(uint16_t param) {
|
|||||||
{0x33DA, 1, 5, .check_relay = true}, {0x33DB, 1, 8, .check_relay = true}, {0x39F, 1, 8, .check_relay = false},
|
{0x33DA, 1, 5, .check_relay = true}, {0x33DB, 1, 8, .check_relay = true}, {0x39F, 1, 8, .check_relay = false},
|
||||||
{0x18DAB0F1, 1, 8, .check_relay = false}}; // Bosch w/ gas and brakes
|
{0x18DAB0F1, 1, 8, .check_relay = false}}; // Bosch w/ gas and brakes
|
||||||
|
|
||||||
static CanMsg HONDA_RADARLESS_TX_MSGS[] = {{0xE4, 0, 5, .check_relay = true}, {0x296, 2, 4, .check_relay = false}, {0x33D, 0, 8, .check_relay = true},
|
static CanMsg HONDA_RADARLESS_TX_MSGS[] = {{0xE4, 0, 5, .check_relay = true}, {0x296, 2, 4, .check_relay = false}, {0x33D, 0, 8, .check_relay = true}}; // Bosch radarless
|
||||||
{0x6CD5554, 0, 8, .check_relay = true}, {0xF31AA54, 0, 8, .check_relay = true},
|
|
||||||
{0x6CD5557, 0, 8, .check_relay = true}}; // Bosch radarless (LANE_PATH/LKAS_HUD_2/HUD_OBJECTS authored in stock ACC too)
|
|
||||||
|
|
||||||
static CanMsg HONDA_RADARLESS_LONG_TX_MSGS[] = {{0xE4, 0, 5, .check_relay = true}, {0x33D, 0, 8, .check_relay = true}, {0x1C8, 0, 8, .check_relay = true},
|
static CanMsg HONDA_RADARLESS_LONG_TX_MSGS[] = {{0xE4, 0, 5, .check_relay = true}, {0x33D, 0, 8, .check_relay = true}, {0x1C8, 0, 8, .check_relay = true},
|
||||||
{0x30C, 0, 8, .check_relay = true}, {0x296, 2, 4, .check_relay = false}, {0x6CD5554, 0, 8, .check_relay = true},
|
{0x30C, 0, 8, .check_relay = true}}; // Bosch radarless w/ gas and brakes
|
||||||
{0xF31AA54, 0, 8, .check_relay = true}, {0x6CD5557, 0, 8, .check_relay = true}}; // Bosch radarless w/ gas and brakes
|
|
||||||
|
|
||||||
// 0x296 on bus 2: OP takes over SCM_BUTTONS towards the camera to auto-disable stock LKAS and to block
|
// 0x296 on bus 2: OP takes over SCM_BUTTONS towards the camera to auto-disable stock LKAS and to block
|
||||||
// the driver's LKAS button while engaged (the physical SCM_BUTTONS is blocked from forwarding, see fwd hook)
|
// the driver's LKAS button while engaged (the physical SCM_BUTTONS is blocked from forwarding, see fwd hook)
|
||||||
@@ -585,7 +582,7 @@ static bool honda_bosch_fwd_hook(int bus_num, int addr) {
|
|||||||
// actually flowing (honda_op_buttons_fresh): the camera needs SCM_BUTTONS content beyond the buttons
|
// actually flowing (honda_op_buttons_fresh): the camera needs SCM_BUTTONS content beyond the buttons
|
||||||
// (it raises an adaptive high beam error when the message goes missing), so a bare controls_allowed
|
// (it raises an adaptive high beam error when the message goes missing), so a bare controls_allowed
|
||||||
// gate would starve it whenever the panda allows controls but OP refuses to engage
|
// gate would starve it whenever the panda allows controls but OP refuses to engage
|
||||||
if ((honda_bosch_radarless || honda_bosch_canfd) && controls_allowed && (honda_op_buttons_fresh > 0) &&
|
if (honda_bosch_canfd && controls_allowed && (honda_op_buttons_fresh > 0) &&
|
||||||
(bus_num == 0) && (addr == 0x296)) {
|
(bus_num == 0) && (addr == 0x296)) {
|
||||||
block_msg = true;
|
block_msg = true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -39,6 +39,7 @@
|
|||||||
#define TOYOTA_COMMON_RX_CHECKS(lta) \
|
#define TOYOTA_COMMON_RX_CHECKS(lta) \
|
||||||
{.msg = {{ 0xaa, 0, 8, 83U, .ignore_checksum = true, .ignore_counter = true, .ignore_quality_flag = true}, { 0 }, { 0 }}}, \
|
{.msg = {{ 0xaa, 0, 8, 83U, .ignore_checksum = true, .ignore_counter = true, .ignore_quality_flag = true}, { 0 }, { 0 }}}, \
|
||||||
{.msg = {{0x260, 0, 8, 50U, .ignore_counter = true, .ignore_quality_flag=!(lta)}, { 0 }, { 0 }}}, \
|
{.msg = {{0x260, 0, 8, 50U, .ignore_counter = true, .ignore_quality_flag=!(lta)}, { 0 }, { 0 }}}, \
|
||||||
|
{.msg = {{0x412, 2, 8, .ignore_checksum = true, .ignore_counter = true, .ignore_quality_flag = true, .frequency = 1U}, { 0 }, { 0 }}}, \
|
||||||
|
|
||||||
#define TOYOTA_RX_CHECKS(lta) \
|
#define TOYOTA_RX_CHECKS(lta) \
|
||||||
TOYOTA_COMMON_RX_CHECKS(lta) \
|
TOYOTA_COMMON_RX_CHECKS(lta) \
|
||||||
@@ -98,6 +99,15 @@ static int TOYOTA_GET_INTERCEPTOR(const CANPacket_t *msg) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void toyota_rx_hook(const CANPacket_t *msg) {
|
static void toyota_rx_hook(const CANPacket_t *msg) {
|
||||||
|
if (msg->bus == 2U) {
|
||||||
|
// TSS2 LKAS/LDA button is only observable via the camera's LKAS_HUD; it reads 1 or 2 while
|
||||||
|
// pressed and rests at 0, and without this edge AOL can never be granted lateral on Toyota.
|
||||||
|
if (msg->addr == 0x412U) {
|
||||||
|
unsigned int lda_on_message = (msg->data[3] >> 6U) & 0x3U;
|
||||||
|
aol_button_press = (lda_on_message != 0U) ? AOL_BUTTON_PRESSED : AOL_BUTTON_NOT_PRESSED;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (msg->bus == 0U) {
|
if (msg->bus == 0U) {
|
||||||
|
|
||||||
// get eps motor torque (0.66 factor in dbc)
|
// get eps motor torque (0.66 factor in dbc)
|
||||||
|
|||||||
@@ -609,41 +609,14 @@ class TestHondaBoschRadarlessSafetyBase(TestHondaBoschSafetyBase):
|
|||||||
STEER_BUS = 0
|
STEER_BUS = 0
|
||||||
BUTTONS_BUS = 2 # camera controls ACC, need to send buttons on bus 2
|
BUTTONS_BUS = 2 # camera controls ACC, need to send buttons on bus 2
|
||||||
|
|
||||||
TX_MSGS = [[0xE4, 0], [0x296, 2], [0x33D, 0], [0x6CD5554, 0], [0xF31AA54, 0], [0x6CD5557, 0]]
|
TX_MSGS = [[0xE4, 0], [0x296, 2], [0x33D, 0]]
|
||||||
FWD_BLACKLISTED_ADDRS = {2: [0xE4, 0x33D, 0x6CD5554, 0xF31AA54, 0x6CD5557]}
|
FWD_BLACKLISTED_ADDRS = {2: [0xE4, 0x33D]}
|
||||||
# STEERING_CONTROL, LANE_PATH, LKAS_HUD_2, HUD_OBJECTS
|
RELAY_MALFUNCTION_ADDRS = {0: (0xE4, 0x33D)} # STEERING_CONTROL
|
||||||
RELAY_MALFUNCTION_ADDRS = {0: (0xE4, 0x33D, 0x6CD5554, 0xF31AA54, 0x6CD5557)}
|
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
self.packer = CANPackerSafety("honda_bosch_radarless_generated")
|
self.packer = CANPackerSafety("honda_bosch_radarless_generated")
|
||||||
self.safety = libsafety_py.libsafety
|
self.safety = libsafety_py.libsafety
|
||||||
|
|
||||||
def test_buttons_fwd(self):
|
|
||||||
# SCM_BUTTONS (0x296) forwards to the camera unless OP's replacement button stream is flowing
|
|
||||||
# (engaged + a recent OP SCM_BUTTONS tx on the camera bus). The camera needs the message content
|
|
||||||
# beyond the buttons, so the block fails safe back to forwarding when OP stops sending
|
|
||||||
self.safety.set_controls_allowed(False)
|
|
||||||
self.assertEqual(2, self.safety.safety_fwd_hook(0, 0x296))
|
|
||||||
|
|
||||||
# engaged but OP not sending buttons: keep forwarding
|
|
||||||
self.safety.set_controls_allowed(True)
|
|
||||||
self.assertEqual(2, self.safety.safety_fwd_hook(0, 0x296))
|
|
||||||
|
|
||||||
# OP button stream flowing: block the stock buttons
|
|
||||||
self.assertTrue(self._tx(self._button_msg(Btn.NONE, bus=2)))
|
|
||||||
self.assertEqual(-1, self.safety.safety_fwd_hook(0, 0x296))
|
|
||||||
|
|
||||||
# never blocked while disengaged
|
|
||||||
self.safety.set_controls_allowed(False)
|
|
||||||
self.assertEqual(2, self.safety.safety_fwd_hook(0, 0x296))
|
|
||||||
self.safety.set_controls_allowed(True)
|
|
||||||
self.assertEqual(-1, self.safety.safety_fwd_hook(0, 0x296))
|
|
||||||
|
|
||||||
# freshness decays after 10 stock button frames without an OP tx
|
|
||||||
for _ in range(10):
|
|
||||||
self._rx(self._button_msg(Btn.NONE, main_on=True))
|
|
||||||
self.assertEqual(2, self.safety.safety_fwd_hook(0, 0x296))
|
|
||||||
|
|
||||||
|
|
||||||
class TestHondaBoschRadarlessSafety(HondaPcmEnableBase, TestHondaBoschRadarlessSafetyBase):
|
class TestHondaBoschRadarlessSafety(HondaPcmEnableBase, TestHondaBoschRadarlessSafetyBase):
|
||||||
"""
|
"""
|
||||||
@@ -672,9 +645,9 @@ class TestHondaBoschRadarlessLongSafety(common.LongitudinalAccelSafetyTest, Hond
|
|||||||
"""
|
"""
|
||||||
Covers the Honda Bosch Radarless safety mode with longitudinal control
|
Covers the Honda Bosch Radarless safety mode with longitudinal control
|
||||||
"""
|
"""
|
||||||
TX_MSGS = [[0xE4, 0], [0x33D, 0], [0x1C8, 0], [0x30C, 0], [0x296, 2], [0x6CD5554, 0], [0xF31AA54, 0], [0x6CD5557, 0]]
|
TX_MSGS = [[0xE4, 0], [0x33D, 0], [0x1C8, 0], [0x30C, 0]]
|
||||||
FWD_BLACKLISTED_ADDRS = {2: [0xE4, 0x33D, 0x1C8, 0x30C, 0x6CD5554, 0xF31AA54, 0x6CD5557]}
|
FWD_BLACKLISTED_ADDRS = {2: [0xE4, 0x33D, 0x1C8, 0x30C]}
|
||||||
RELAY_MALFUNCTION_ADDRS = {0: (0xE4, 0x1C8, 0x30C, 0x33D, 0x6CD5554, 0xF31AA54, 0x6CD5557)}
|
RELAY_MALFUNCTION_ADDRS = {0: (0xE4, 0x1C8, 0x30C, 0x33D)}
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
super().setUp()
|
super().setUp()
|
||||||
|
|||||||
@@ -91,6 +91,35 @@ class TestToyotaSafetyBase(common.CarSafetyTest, common.LongitudinalAccelSafetyT
|
|||||||
values = {"MAIN_ON": enabled}
|
values = {"MAIN_ON": enabled}
|
||||||
return self.packer.make_can_msg_safety(msg, 0, values)
|
return self.packer.make_can_msg_safety(msg, 0, values)
|
||||||
|
|
||||||
|
def _lkas_button_msg(self, lkas_button=False, lda_value=None):
|
||||||
|
values = {"LDA_ON_MESSAGE": (1 if lkas_button else 0) if lda_value is None else lda_value}
|
||||||
|
return self.packer.make_can_msg_safety("LKAS_HUD", 2, values)
|
||||||
|
|
||||||
|
def test_enable_control_allowed_with_aol_button(self):
|
||||||
|
for enable_aol in (True, False):
|
||||||
|
with self.subTest("enable_aol", aol_enabled=enable_aol):
|
||||||
|
self.safety.set_aol_params(enable_aol, False, False)
|
||||||
|
|
||||||
|
self._rx(self._lkas_button_msg(False))
|
||||||
|
self.assertEqual(0, self.safety.get_aol_button_press())
|
||||||
|
self.assertFalse(self.safety.get_controls_allowed_lat())
|
||||||
|
|
||||||
|
self._rx(self._lkas_button_msg(True))
|
||||||
|
self.assertEqual(1, self.safety.get_aol_button_press())
|
||||||
|
self.assertEqual(enable_aol, self.safety.get_controls_allowed_lat())
|
||||||
|
|
||||||
|
self._rx(self._lkas_button_msg(False))
|
||||||
|
self.assertEqual(0, self.safety.get_aol_button_press())
|
||||||
|
self.assertEqual(enable_aol, self.safety.get_controls_allowed_lat())
|
||||||
|
|
||||||
|
self.safety.set_controls_allowed_lat(False)
|
||||||
|
self._rx(self._lkas_button_msg(False, lda_value=2))
|
||||||
|
self.assertEqual(1, self.safety.get_aol_button_press())
|
||||||
|
self.assertEqual(enable_aol, self.safety.get_controls_allowed_lat())
|
||||||
|
self._rx(self._lkas_button_msg(False))
|
||||||
|
self.safety.set_controls_allowed_lat(False)
|
||||||
|
self.safety.set_aol_params(False, False, False)
|
||||||
|
|
||||||
def test_diagnostics(self, stock_longitudinal: bool = False, ecu_disabled: bool = True):
|
def test_diagnostics(self, stock_longitudinal: bool = False, ecu_disabled: bool = True):
|
||||||
for should_tx, msg in ((False, b"\x6D\x02\x3E\x00\x00\x00\x00\x00"), # fwdCamera tester present
|
for should_tx, msg in ((False, b"\x6D\x02\x3E\x00\x00\x00\x00\x00"), # fwdCamera tester present
|
||||||
(False, b"\x0F\x03\xAA\xAA\x00\x00\x00\x00"), # non-tester present
|
(False, b"\x0F\x03\xAA\xAA\x00\x00\x00\x00"), # non-tester present
|
||||||
|
|||||||
@@ -161,13 +161,15 @@ def _resolve_object_url(session: requests.Session, url: str, headers: dict) -> t
|
|||||||
probe = session.get(url, headers={**headers, "Accept-Encoding": None}, stream=True,
|
probe = session.get(url, headers={**headers, "Accept-Encoding": None}, stream=True,
|
||||||
timeout=HTTP_TIMEOUT_S)
|
timeout=HTTP_TIMEOUT_S)
|
||||||
probe.raise_for_status()
|
probe.raise_for_status()
|
||||||
|
# A host that serves the bytes itself still needs the caller's auth on the real GET --
|
||||||
|
# returning {} here sends the download out anonymous and a private host answers 401.
|
||||||
if int(probe.headers.get("content-length") or 0) >= 1024:
|
if int(probe.headers.get("content-length") or 0) >= 1024:
|
||||||
probe.close()
|
probe.close()
|
||||||
return url, {}
|
return url, dict(headers)
|
||||||
body = probe.content
|
body = probe.content
|
||||||
probe.close()
|
probe.close()
|
||||||
if not body.startswith(LFS_POINTER_MAGIC):
|
if not body.startswith(LFS_POINTER_MAGIC):
|
||||||
return url, {}
|
return url, dict(headers)
|
||||||
|
|
||||||
meta = dict(line.split(" ", 1) for line in body.decode().strip().splitlines() if " " in line)
|
meta = dict(line.split(" ", 1) for line in body.decode().strip().splitlines() if " " in line)
|
||||||
oid = meta["oid"].split(":", 1)[1]
|
oid = meta["oid"].split(":", 1)[1]
|
||||||
|
|||||||
Reference in New Issue
Block a user