mirror of
https://gitlvb.teallvbs.xyz/IQ.Lvbs/IQ.Pilot.git
synced 2026-09-08 23:03:43 +08:00
IQ.Pilot Release Commit @ 3b7bebf
This commit is contained in:
@@ -1,8 +1,8 @@
|
||||
{
|
||||
"python/_iqclosure/_vendored.json": {
|
||||
"mode": 420,
|
||||
"sha256": "4971aeda24749e9b8554757d9655115369b1764789afc80d8b4639dba812cba6",
|
||||
"size": 1950
|
||||
"sha256": "5f2ed2b7705f64acb637ab4f4b0c61a4c0267dcb9bba478a22b8059a529dffaf",
|
||||
"size": 1911
|
||||
},
|
||||
"python/_iqclosure/iqpilot/__init__.py": {
|
||||
"mode": 420,
|
||||
@@ -156,8 +156,8 @@
|
||||
},
|
||||
"python/_iqclosure/iqpilot/selfdrive/iqmodeld/egpu_helpers.py": {
|
||||
"mode": 420,
|
||||
"sha256": "0b8f118dc45ad0c3809855800960b47c893ee121ea75d94e8569dcce46d58ce5",
|
||||
"size": 7312
|
||||
"sha256": "07b3ace231d9912f1926ffe7cef0f2a5d9649f75b7ebac2b9f296957d98be166",
|
||||
"size": 7681
|
||||
},
|
||||
"python/_iqclosure/iqpilot/selfdrive/iqmodeld/egpu_model.py": {
|
||||
"mode": 420,
|
||||
@@ -171,8 +171,8 @@
|
||||
},
|
||||
"python/_iqclosure/iqpilot/selfdrive/iqmodeld/models/__init__.py": {
|
||||
"mode": 420,
|
||||
"sha256": "5865243a95ca4557d2a960302124a9898545cc3a8387e88ef569308e3d0f7077",
|
||||
"size": 119
|
||||
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
|
||||
"size": 0
|
||||
},
|
||||
"python/_iqclosure/iqpilot/selfdrive/iqmodeld/models/fetcher.py": {
|
||||
"mode": 420,
|
||||
@@ -181,8 +181,8 @@
|
||||
},
|
||||
"python/_iqclosure/iqpilot/selfdrive/iqmodeld/models/helpers.py": {
|
||||
"mode": 420,
|
||||
"sha256": "e4f524c7595754fd9db86724a7bd9b67524c630275ac78599ab6838d1aa7d809",
|
||||
"size": 11037
|
||||
"sha256": "da08ff891f57bc808d78104e21bb788553973f9e775d26ab4024f24969835e34",
|
||||
"size": 11793
|
||||
},
|
||||
"python/_iqclosure/iqpilot/selfdrive/locationd/__init__.py": {
|
||||
"mode": 420,
|
||||
@@ -291,8 +291,8 @@
|
||||
},
|
||||
"python/_iqclosure/iqpilot/system/hardware/usb.py": {
|
||||
"mode": 420,
|
||||
"sha256": "7c2cd7c6d5a859fb8454059da1b36e3b5ce4639aca6fea296b4f91096b46c1ba",
|
||||
"size": 7257
|
||||
"sha256": "8c5b26f3967100ce0e5af7043a47a852fb5e8311f00ac95e7a263934c38e4ec0",
|
||||
"size": 8069
|
||||
},
|
||||
"python/_iqclosure/iqpilot/system/loggerd/__init__.py": {
|
||||
"mode": 420,
|
||||
@@ -311,13 +311,13 @@
|
||||
},
|
||||
"python/_iqclosure/iqpilot/system/manager/process.py": {
|
||||
"mode": 420,
|
||||
"sha256": "d036d82e2163a249186238375fb82f8dca250fae2272428ea47a46e4d6a8649d",
|
||||
"size": 11519
|
||||
"sha256": "de8956b214d5856547f8ce37eb37b76f53aff515b7f63ebccb7aa60ea5bb1dd0",
|
||||
"size": 11515
|
||||
},
|
||||
"python/_iqclosure/iqpilot/system/manager/process_config.py": {
|
||||
"mode": 420,
|
||||
"sha256": "8b8de3f4d266213530dbc37248cf86c6a36241ec9b2f04afe0389e126fd2282f",
|
||||
"size": 13597
|
||||
"sha256": "85f02ace1b82abaec47c3e0979040b47995fd61a7aa7f41f336fff58d555cad5",
|
||||
"size": 13919
|
||||
},
|
||||
"python/_iqclosure/iqpilot/system/micd.py": {
|
||||
"mode": 420,
|
||||
@@ -376,28 +376,28 @@
|
||||
},
|
||||
"python/iqpilot_private/konn3kt/backups/archive_codec.cpython-312-aarch64-linux-gnu.so": {
|
||||
"mode": 493,
|
||||
"sha256": "8d8808534c26b97369f5a69da3afbb2f6bdb2e2708c2479ff55a07574eab3cbd",
|
||||
"size": 135552
|
||||
"sha256": "08cfd2deac71129329be99bdec41e95fe410cf4c7a267d41d887ce0513101ac9",
|
||||
"size": 135480
|
||||
},
|
||||
"python/iqpilot_private/konn3kt/backups/backup_keys.cpython-312-aarch64-linux-gnu.so": {
|
||||
"mode": 493,
|
||||
"sha256": "5ec7c8dc4e4d21f47b9e949a8960baacb470ab267752681ae840ea537646d29a",
|
||||
"size": 67664
|
||||
"sha256": "1be18fb3404dac99d098e817a70282403660d27647ca3a0614e7161f38b439b1",
|
||||
"size": 67680
|
||||
},
|
||||
"python/iqpilot_private/konn3kt/backups/backup_orchestrator.cpython-312-aarch64-linux-gnu.so": {
|
||||
"mode": 493,
|
||||
"sha256": "91e0fab17809c6a7231a956ef082033c906a8e5e44972a10bd32f9b653d634ea",
|
||||
"size": 204640
|
||||
"sha256": "4c2f37d82ff5e3c18db3139195ea682784f441639b4eb89e3caec876cc52b819",
|
||||
"size": 204616
|
||||
},
|
||||
"python/iqpilot_private/konn3kt/backups/cbc_vault.cpython-312-aarch64-linux-gnu.so": {
|
||||
"mode": 493,
|
||||
"sha256": "d7356d8cb1ef60ac025ec806f6fe1c1c734c234f5fe5256f17c1bfd3ff36052f",
|
||||
"size": 69768
|
||||
"sha256": "7428c579a0c1ae1f3897ed99d3fe5313f90653b4756b78706d8f84914e391e01",
|
||||
"size": 69752
|
||||
},
|
||||
"python/iqpilot_private/konn3kt/backups/imahelper.cpython-312-aarch64-linux-gnu.so": {
|
||||
"mode": 493,
|
||||
"sha256": "58c1601759b2f61b942d18bf7a07d16050c53424337882e040afb6d083dbd4a4",
|
||||
"size": 203088
|
||||
"sha256": "12d27312a6aecdfdaec3315443b1102b811f86048de60d6d1e4e82aa29f8dafb",
|
||||
"size": 203064
|
||||
},
|
||||
"python/iqpilot_private/konn3kt/flockd/__init__.py": {
|
||||
"mode": 420,
|
||||
@@ -406,13 +406,13 @@
|
||||
},
|
||||
"python/iqpilot_private/konn3kt/flockd/flockd.cpython-312-aarch64-linux-gnu.so": {
|
||||
"mode": 493,
|
||||
"sha256": "3dea6e1a02a92a5cbebda37b768bcb4ba65224b4920307cded9247f738e6bdfe",
|
||||
"size": 202184
|
||||
"sha256": "2e3a6754f46fc68dec0e08f771f7a2eb4744c11cb340b25e5686bf450c5c2ac8",
|
||||
"size": 202128
|
||||
},
|
||||
"python/iqpilot_private/konn3kt/flockd/signatures.cpython-312-aarch64-linux-gnu.so": {
|
||||
"mode": 493,
|
||||
"sha256": "34a58774d1243add0c0dc5cc95d78e0b17b13ede3bbfb8f0de63dd47a4c6a39f",
|
||||
"size": 68080
|
||||
"sha256": "0d6abae6ca2e0b62faf4261de60e45aeff23bc940707e2c6c3f39a6fa89f25b3",
|
||||
"size": 68104
|
||||
},
|
||||
"python/iqpilot_private/konn3kt/hephaestus/__init__.py": {
|
||||
"mode": 420,
|
||||
@@ -421,68 +421,68 @@
|
||||
},
|
||||
"python/iqpilot_private/konn3kt/hephaestus/_vendor/localapi_runtime.zip": {
|
||||
"mode": 420,
|
||||
"sha256": "60ce72178566082562ceeeeb84693f04640a2436d5d6c88657ee10fbf570adaa",
|
||||
"sha256": "b0edbfc70a08e87a2be5b5d7be447eb5b566a25383122b48acb1cd25042d3cd4",
|
||||
"size": 1379342
|
||||
},
|
||||
"python/iqpilot_private/konn3kt/hephaestus/ble_auth.cpython-312-aarch64-linux-gnu.so": {
|
||||
"mode": 493,
|
||||
"sha256": "c83f7947d210eee887750ca5e494e859cd6a099371eede6740282ee5f95fc725",
|
||||
"size": 268080
|
||||
"sha256": "aac079fe0de7cf33ab7a1f136d19b02c63a5809c3b3e45ffb685028000b2abd7",
|
||||
"size": 268024
|
||||
},
|
||||
"python/iqpilot_private/konn3kt/hephaestus/ble_gatt.cpython-312-aarch64-linux-gnu.so": {
|
||||
"mode": 493,
|
||||
"sha256": "f7e0c6471e5ae85e4bdb7225d60cdd67e2a54bd7e9386436e6f9eef7249354b3",
|
||||
"size": 406176
|
||||
"sha256": "91f673f51b7761e353d84eb7039b4cc14aa3bd170800727062e7d500e8c700b2",
|
||||
"size": 406144
|
||||
},
|
||||
"python/iqpilot_private/konn3kt/hephaestus/ble_rpc_dispatch.cpython-312-aarch64-linux-gnu.so": {
|
||||
"mode": 493,
|
||||
"sha256": "83e7f6f18984c947811e2a17707def76fc2e563aea9eb37e9f37f5e09e377548",
|
||||
"size": 68048
|
||||
"sha256": "05f12cf01d326d61f4ba2398ef935f03cd08062bf20232d744e2f669331eda5f",
|
||||
"size": 68064
|
||||
},
|
||||
"python/iqpilot_private/konn3kt/hephaestus/ble_transportd.cpython-312-aarch64-linux-gnu.so": {
|
||||
"mode": 493,
|
||||
"sha256": "20f4505b5c0a320c2bab7f5026f55a0a405d85840b40f89a624b417f764f8a07",
|
||||
"size": 335848
|
||||
"sha256": "bf098ea52b1e6b4fad5cd103cdfcf688e52545ad12f13566fd25b90ef8c74aa6",
|
||||
"size": 401368
|
||||
},
|
||||
"python/iqpilot_private/konn3kt/hephaestus/bt_gamepad.cpython-312-aarch64-linux-gnu.so": {
|
||||
"mode": 493,
|
||||
"sha256": "b1a14c8534fc8b20bef3661b9390db53a3f39086337d241f931af72a368f7da2",
|
||||
"size": 272112
|
||||
"sha256": "2f8e0ba2693d72f454827a1fbe8db83cca04156ea2f971d0307452ec44b66bba",
|
||||
"size": 337616
|
||||
},
|
||||
"python/iqpilot_private/konn3kt/hephaestus/cloud_routes.cpython-312-aarch64-linux-gnu.so": {
|
||||
"mode": 493,
|
||||
"sha256": "cf3c6b74668adb6f8830e52c25aa17f4211c5fe4cbea88e50dbd3c077e92bd84",
|
||||
"size": 134408
|
||||
"sha256": "ce5fb5f9def24c2f99001973ed8b0a3fff7c00a090e1b4ddcbf86af300a2f088",
|
||||
"size": 134424
|
||||
},
|
||||
"python/iqpilot_private/konn3kt/hephaestus/hephaestusd.cpython-312-aarch64-linux-gnu.so": {
|
||||
"mode": 493,
|
||||
"sha256": "2f30fe07926a2b6d51c6ec88ee4d57d0895d841e080bd3866a8750b5f9608aa1",
|
||||
"size": 3915272
|
||||
"sha256": "0fbcd4812d5ea2ac7285b759fa7ba7ec692714405966d2a5a31b3e2e243c27d0",
|
||||
"size": 4177424
|
||||
},
|
||||
"python/iqpilot_private/konn3kt/hephaestus/kwp2000.cpython-312-aarch64-linux-gnu.so": {
|
||||
"mode": 493,
|
||||
"sha256": "823b330d38eac09dbc22a01d1abe00d110f9d2cf8c5dc489ce58b05050db3dbe",
|
||||
"size": 136472
|
||||
"sha256": "dd266157fe507279f572e72fccbeafab32e7c49fcac45ae184084bf0133a0b47",
|
||||
"size": 136384
|
||||
},
|
||||
"python/iqpilot_private/konn3kt/hephaestus/manage_hephaestusd.cpython-312-aarch64-linux-gnu.so": {
|
||||
"mode": 493,
|
||||
"sha256": "02b76b8792b8f62ec4278dad6e63e5c8574479b8e714538c2cc73ebc216872eb",
|
||||
"size": 68208
|
||||
"sha256": "a8de0bb91395a4ea8f10b576bc7f2eca979c11785207203f134d5747835d4d6f",
|
||||
"size": 133752
|
||||
},
|
||||
"python/iqpilot_private/konn3kt/hephaestus/motd.cpython-312-aarch64-linux-gnu.so": {
|
||||
"mode": 493,
|
||||
"sha256": "46197da34eed0bf10c17baf32081b6a9871ddc9f3807f5de376e41699286e38c",
|
||||
"size": 67840
|
||||
"sha256": "e67cbd9a0b46d4b4c431644f30f6db4b89ed40382ce2691a1011b8d24d27314f",
|
||||
"size": 67872
|
||||
},
|
||||
"python/iqpilot_private/konn3kt/hephaestus/tp20.cpython-312-aarch64-linux-gnu.so": {
|
||||
"mode": 493,
|
||||
"sha256": "144af2138c5e8f90c8432d9b90a8acafe995c1a030eb864aeb4e1b210b53b871",
|
||||
"size": 135664
|
||||
"sha256": "32d3179e4fb31c10dced19f6a4dc8f3b40cc68faeddba8b7a28a95973b600cba",
|
||||
"size": 135584
|
||||
},
|
||||
"python/iqpilot_private/konn3kt/hephaestus/vw_pq_flasher.cpython-312-aarch64-linux-gnu.so": {
|
||||
"mode": 493,
|
||||
"sha256": "3918430ba6f7dd7b654c73222bb7444afa2ef78be7bf595092b0813cebd61606",
|
||||
"size": 269600
|
||||
"sha256": "146d4f34cd6f4ef296582c6f33e057895f9a8775539114a26377c5fc748ab7ad",
|
||||
"size": 269536
|
||||
},
|
||||
"python/iqpilot_private/konn3kt/uploaderd/__init__.py": {
|
||||
"mode": 420,
|
||||
@@ -491,8 +491,8 @@
|
||||
},
|
||||
"python/iqpilot_private/konn3kt/uploaderd/iquploaderd.cpython-312-aarch64-linux-gnu.so": {
|
||||
"mode": 493,
|
||||
"sha256": "77a0da7cf61eaa05df08c448460cb2e563929ee7c41257d9b5f0814d6d32016f",
|
||||
"size": 336280
|
||||
"sha256": "dbd6a531b202f51124cf206e0e799452ab225947ca55e283fe8ffee70fce5bf0",
|
||||
"size": 336264
|
||||
},
|
||||
"runtime": {
|
||||
"entries": {
|
||||
@@ -535,25 +535,25 @@
|
||||
}
|
||||
},
|
||||
"signatures": {
|
||||
"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": "H0GqhuuUrSJYyT4UXbf7GujRXxGx/zgIn+ZDaiyjPghcYdy64bGH2fVWwEm69OC409ZtVB0sI69GlqGPMKF/Dg==",
|
||||
"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": "FcuWnfFQt7EWTRH5Lev1PhNpQposz/8d6p8DK6Jg7Zi+Rf93GUDgg3/t74IjHTq+aPSvR1J1ArKAUGRstGmpDw==",
|
||||
"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": "VLvLBhbqm6+V8udYUKpv7hXQygiu3scB6FXmfjyRVKLvGcCsVUA2LKLNtH8Ff+TPsdEXRp7wCBMrVBVUslCiBA==",
|
||||
"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": "IovyDAeYBOAC8yv67H+UqiicwOd210iwDXMvNuTXbU4lbq0xuqa1uy7t/oCClt4P0BhZLgvJQ0KI/jqMRsbxBA==",
|
||||
"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": "Zbj2hW+Z5TMeXrXOVd7htJ1KAOkEOX7W4jqj1hulsO/hsUEzcIBFEYkCTGzEJ7jkU7QO1LzUjT04WyqlRAgOAA==",
|
||||
"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": "Tu14xhw8hc5vgg0oJ4vYZSwuml+k80ZrWjf8VgTefxvG8JGvm4ZwZ34lVdesUfvZCAVCszkEUustAXVhTLu0Cw==",
|
||||
"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": "qMi6U7oxlcOf9s3O+o2mFRorOYNxjK/MPrw0JxRJ2cVgG64hbzXou1yw/LZTVTAjun/EGCJgfXC313G/nGP9Cg==",
|
||||
"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": "/eUDZy8k0jVHALTMabHt3f9Va3xGc2FnXUX0ly7oSqaWPsoB/CivrxP+jlc5NcKNsigwqox97lDye291B1LOBg==",
|
||||
"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": "2vqBy+02ldRHcVMlKUT+Vk6Hz7diGSxVct+FK/LcMCpXg5N51YqhvX5YdBgtZWnQpbvIPi1wyr9Zqs3oIT5hAw==",
|
||||
"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": "No8Xim23VntTR9aceGofLd/vNC3jVQSZ9PmB3qwS5osNqdUrEh/5Y5RpXWKU2/azhsOMqnlbT0ppARqNGVDKCQ=="
|
||||
"python/iqpilot_private/konn3kt/backups/archive_codec.cpython-312-aarch64-linux-gnu.so": "y6NAdtid8XIXYz19YyYB0ZqOcd/9FIaxGYVjVZrs+Yalzm/P6lIpgZOZieRlviu0K0YDOrz/2uygyxv4h0OQAg==",
|
||||
"python/iqpilot_private/konn3kt/backups/backup_keys.cpython-312-aarch64-linux-gnu.so": "DUhrNXdMydpJMxMbwk85ryVeNrkBs+JGJn5XqtrtzACo4lRjVWzOAE1gWq5UKu5Z5DuJMt6BW+MQIoEmq2KbDQ==",
|
||||
"python/iqpilot_private/konn3kt/backups/backup_orchestrator.cpython-312-aarch64-linux-gnu.so": "7E8GaN5p2akJ82aeVR0aUmurEbL1J8N9YW0pKApvruDbj3ATtPnRDmdIyS3ZixPzmETxVoLa5Rk6XmKCnc5HBw==",
|
||||
"python/iqpilot_private/konn3kt/backups/cbc_vault.cpython-312-aarch64-linux-gnu.so": "jeH1BFTZ3VWdQiyQoMiyGTJUprgFsAUdg+m8AhEo5kughfk9vTQ2piRopyyHulpJnHeCzoJDxifLSdQzr3SMAA==",
|
||||
"python/iqpilot_private/konn3kt/backups/imahelper.cpython-312-aarch64-linux-gnu.so": "OQ2qXMzMut3gpoGMoo2dwdre7D3bL4LoPZq5QbCrJRUJbqYh7Ij4MEjxXHrt2ntENlIhkS7v+Zxqxq6D7JokDg==",
|
||||
"python/iqpilot_private/konn3kt/flockd/flockd.cpython-312-aarch64-linux-gnu.so": "VPZFE07FZXF6iO0avqEzUqsbsmkz6plCKsKjKuHQeqHtaftnuzBIPo4qwFsWAWEKhtAktxis5Znd6V6SOELgCQ==",
|
||||
"python/iqpilot_private/konn3kt/flockd/signatures.cpython-312-aarch64-linux-gnu.so": "CFosySDGDob1lFFPUViC/JN3cdrHEhm+XVTZ/X7273xAWtlraudLVBk+0hfZM4F8ttHf5Z/ZhyaqZhObzh4QDw==",
|
||||
"python/iqpilot_private/konn3kt/hephaestus/ble_auth.cpython-312-aarch64-linux-gnu.so": "94SKt2vBgc81LpyLyWv/U2iiLTLHoDUBQk34Gnpo2CcW+v2Pj528rcAWfgnSkDYiBcCQsqmt0jJZ+5iIwqLvDA==",
|
||||
"python/iqpilot_private/konn3kt/hephaestus/ble_gatt.cpython-312-aarch64-linux-gnu.so": "/jtkUnNzMotTZ56+9qn77D+1zp24cq8zRAzJZFfWQDKjoQQsOIinLmnnShIssu8F6duQHJR75VN9PTz69A4FBQ==",
|
||||
"python/iqpilot_private/konn3kt/hephaestus/ble_rpc_dispatch.cpython-312-aarch64-linux-gnu.so": "znyD7IW4vmmChAQkJOt5+p2tJkR2IHh6l72XjCO6pr1M++hhG37jocFMCol0xQn8qiLUJNo8ghavl0AT1n3EDg==",
|
||||
"python/iqpilot_private/konn3kt/hephaestus/ble_transportd.cpython-312-aarch64-linux-gnu.so": "nZxtx830u7TqiYF4UOYwIw2UhZ9jqWd/Ru2Yj9J752YRdN2kNxzT5oomCofID+hZrQJSTGqgmm6FsSDgXs7nAw==",
|
||||
"python/iqpilot_private/konn3kt/hephaestus/bt_gamepad.cpython-312-aarch64-linux-gnu.so": "u8ekcMetg7aIfZ+dfcvubabAzoISmiKkFHESRIJ/58xcQId6dCiKMbUQq7uq+yjqTJsSlnb6PvMYfKDbbQa1AA==",
|
||||
"python/iqpilot_private/konn3kt/hephaestus/cloud_routes.cpython-312-aarch64-linux-gnu.so": "9Def0TAfWPk5us2l/mZlT6nYodkSuh5t4r4yDfNDdMtnvid5ZvnhciorDY1EjpN+LMEkatSrDNuIQRMA4AKOCg==",
|
||||
"python/iqpilot_private/konn3kt/hephaestus/hephaestusd.cpython-312-aarch64-linux-gnu.so": "kEzv4qu4BDyAhv0trjxPFN5Y/DYTVh8eRY4XR+XCg42Wl76WGJKk6/0tfM7t7ReV3ucwFJC71uLswvcynOxRDg==",
|
||||
"python/iqpilot_private/konn3kt/hephaestus/kwp2000.cpython-312-aarch64-linux-gnu.so": "CWAClei3CTMzJWBGrh64nshzRplFU0r8LIIGlQOK+hOTLwQSc3/ULzhnp/sog8SFhfznU6aytN2td+WxImJdAQ==",
|
||||
"python/iqpilot_private/konn3kt/hephaestus/manage_hephaestusd.cpython-312-aarch64-linux-gnu.so": "rZsFrQp4hpAt+iZY9NO3O+HX/A5QF67qJf1XJms5UKJhlbNlBokD3UGn5fDzgeH1KfA600BqnnZ6CwmRTUkSAQ==",
|
||||
"python/iqpilot_private/konn3kt/hephaestus/motd.cpython-312-aarch64-linux-gnu.so": "cim1skYYn7MiEaBFLdroUrNHE+AVoCbWhgoSeIhBZTJDoms9KiQznZPOhb1KRizepLxoazKGpaEdfOfm0lYCAA==",
|
||||
"python/iqpilot_private/konn3kt/hephaestus/tp20.cpython-312-aarch64-linux-gnu.so": "C5VaMh5+7/cO6lMoxfaBb35iExodnfGr2t7MT63F87fRMFFcCYLgCvOtAutdBVcIzxhmqzkDPKngqkW3peaqAw==",
|
||||
"python/iqpilot_private/konn3kt/hephaestus/vw_pq_flasher.cpython-312-aarch64-linux-gnu.so": "iN/aUvUyIC7JbB0hsoF3t3XdcIIkB0t+XlJA37SkVX2Af2MrI1h32ef1oHUX/LQCfUmEkpX876CE+/l3HrMEAg==",
|
||||
"python/iqpilot_private/konn3kt/uploaderd/iquploaderd.cpython-312-aarch64-linux-gnu.so": "wLjiYrvkAbwNEYKQOCbowpx8Aa1KszadC8Gz/5PuvPvwub9n+VspqxACFDc1ntGLjjzFzy2tL/F4aTgCbldnCw=="
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1 +1 @@
|
||||
Li23uJ7UFsHmYsNYtk8ZvF7oFHZoV8tl9yuzsFSkEzPBnX5MQJwpihQtEwVC1mn1EAHwyjj7nJ/uaZww1o9wCg==
|
||||
ELqO/Kj66aU/CxO4q45RX59wSIVRVBgUtHng23ivUUi1Vivm77ZeOBE4lqc9n6ibjM0lNiye30lDYN5hnt/jAA==
|
||||
|
||||
@@ -25,7 +25,6 @@
|
||||
"iqpilot.selfdrive.iqmodeld.egpu_helpers",
|
||||
"iqpilot.selfdrive.iqmodeld.egpu_model",
|
||||
"iqpilot.selfdrive.iqmodeld.model_bundle_downloader",
|
||||
"iqpilot.selfdrive.iqmodeld.models",
|
||||
"iqpilot.selfdrive.iqmodeld.models.fetcher",
|
||||
"iqpilot.selfdrive.iqmodeld.models.helpers",
|
||||
"iqpilot.selfdrive.locationd.calibrationd",
|
||||
|
||||
+16
-3
@@ -71,6 +71,11 @@ def egpu_oob_pkl_path(meta: dict) -> str:
|
||||
return os.path.join(Paths.model_root(), f"egpu_{meta['key']}_{meta['sha256'][:8]}_amd_policy_oob.pkl")
|
||||
|
||||
|
||||
def egpu_model_oob_pkl_path(meta: dict) -> str:
|
||||
from iqpilot.system.hardware.hw import Paths
|
||||
return os.path.join(Paths.model_root(), f"egpu_{meta['key']}_{meta['sha256'][:8]}_amd_model_oob.pkl")
|
||||
|
||||
|
||||
def onnx_cache_path(meta: dict) -> str:
|
||||
from iqpilot.system.hardware.hw import Paths
|
||||
return os.path.join(Paths.model_root(), f"{meta['model_name']}_{meta['sha256'][:8]}.onnx")
|
||||
@@ -156,13 +161,21 @@ def download_onnx(meta: dict, progress_cb=None) -> str:
|
||||
return path
|
||||
|
||||
|
||||
def download_precompiled(meta: dict, progress_cb=None, policy: bool = False, oob: bool = False) -> str | None:
|
||||
field = "egpu_oob_artifact" if oob else "egpu_policy_artifact" if policy else "egpu_artifact"
|
||||
ARTIFACT_PATHS = {
|
||||
"egpu_model_oob_artifact": egpu_model_oob_pkl_path,
|
||||
"egpu_oob_artifact": egpu_oob_pkl_path,
|
||||
"egpu_policy_artifact": egpu_policy_pkl_path,
|
||||
"egpu_artifact": egpu_pkl_path,
|
||||
}
|
||||
|
||||
|
||||
def download_precompiled(meta: dict, progress_cb=None, policy: bool = False, oob: bool = False, field: str | None = None) -> str | None:
|
||||
field = field or ("egpu_oob_artifact" if oob else "egpu_policy_artifact" if policy else "egpu_artifact")
|
||||
art = meta.get(field)
|
||||
if not art or not (art.get("objects") or art.get("hf_path")):
|
||||
return None
|
||||
from iqpilot.selfdrive.iqmodeld.model_bundle_downloader import download_hf_file, download_lfs_bundle
|
||||
dest = egpu_oob_pkl_path(meta) if oob else egpu_policy_pkl_path(meta) if policy else egpu_pkl_path(meta)
|
||||
dest = ARTIFACT_PATHS[field](meta)
|
||||
if art.get("hf_path"):
|
||||
try:
|
||||
return download_hf_file(art["hf_path"], dest, art["sha256"], int(art.get("size", 0)), progress_cb=progress_cb)
|
||||
|
||||
-3
@@ -1,3 +0,0 @@
|
||||
"""
|
||||
Copyright © IQ.Lvbs, apart of Project Teal Lvbs, All Rights Reserved, licensed under https://konn3kt.com/tos/
|
||||
"""
|
||||
|
||||
+23
@@ -311,3 +311,26 @@ def get_active_model_runner(params: Params = None, force_check=False):
|
||||
params.put(_RUNNER_CACHE_KEY, int(runner_type))
|
||||
|
||||
return runner_type
|
||||
|
||||
|
||||
def get_selected_model_name(params: Params = None) -> str:
|
||||
params = Params() if params is None else params
|
||||
try:
|
||||
stored = params.get(_ACTIVE_BUNDLE_KEY)
|
||||
if not stored:
|
||||
return "Default (CD210)"
|
||||
if not isinstance(stored, dict) or not stored.get("ref"):
|
||||
return "Model unavailable"
|
||||
if stored["ref"] == _DEFAULT_BUNDLE_REF:
|
||||
return stored.get("displayName") or "Default (CD210)"
|
||||
return stored.get("internalName") or stored.get("displayName") or "Model unavailable"
|
||||
except Exception:
|
||||
return "Model unavailable"
|
||||
|
||||
|
||||
def get_cached_model_bundles(params: Params = None) -> list:
|
||||
params = Params() if params is None else params
|
||||
try:
|
||||
return _load_cached_manifest_bundles(params)
|
||||
except Exception:
|
||||
return []
|
||||
|
||||
+21
@@ -13,6 +13,7 @@ The USB eGPU dock is identified by VID/PID only. comma's internal codename for
|
||||
it is deliberately not used here: IQ.Pilot runs these models on several
|
||||
backends (eGPU dock, eMac), so the naming stays about the role, not the vendor.
|
||||
"""
|
||||
import subprocess
|
||||
from pathlib import Path
|
||||
|
||||
# comma's USB eGPU dock, both shipped USB IDs. The ROM ids are the same board
|
||||
@@ -124,6 +125,26 @@ def get_link_error_count(soc: Path = SOC_PLATFORM_PATH) -> int:
|
||||
return sum(link_errors(c) for c in usb_controllers(soc))
|
||||
|
||||
|
||||
def host_role_controller(soc: Path = SOC_PLATFORM_PATH, udc_root: Path = UDC_PATH) -> Path | None:
|
||||
ctrl = link_controller(udc_root)
|
||||
return (soc / ctrl / "mode") if ctrl else None
|
||||
|
||||
|
||||
def ensure_host_role(mode_path: Path | None = None) -> bool:
|
||||
"""A usbpd blip mid-drive can leave the Type-C controller in 'none'/'peripheral', and the
|
||||
dock can never re-enumerate until something puts the port back into host mode."""
|
||||
path = mode_path if mode_path is not None else host_role_controller()
|
||||
if path is None:
|
||||
return False
|
||||
current = read(path)
|
||||
if current == "host":
|
||||
return True
|
||||
if current is None:
|
||||
return False
|
||||
rc = subprocess.run(["sudo", "-n", "sh", "-c", f"echo host > {path}"], check=False, capture_output=True)
|
||||
return rc.returncode == 0 and read(path) == "host"
|
||||
|
||||
|
||||
def egpu_dock_present(root: Path = USB_DEVICES_PATH) -> bool:
|
||||
"""A dock in ROM/bootloader state is deliberately NOT counted as present: it
|
||||
enumerates but cannot serve a GPU until vendor firmware is flashed."""
|
||||
|
||||
+1
-1
@@ -221,7 +221,6 @@ class BundleProcess(NativeProcess):
|
||||
def __init__(self, name, bundle, entry, should_run, enabled=True, sigkill=False, restart_if_crash=False):
|
||||
self.bundle = bundle
|
||||
self.entry = entry
|
||||
self.restart_if_crash = restart_if_crash
|
||||
runner_path = preferred_runner_path()
|
||||
runner_cmd = str(runner_path) if runner_path.is_absolute() else "./iqpilot_bundle_runner"
|
||||
runner_cwd = ".iqpilot/runtime_root" if runner_path.is_absolute() else "system/proprietary_runtime"
|
||||
@@ -238,6 +237,7 @@ class BundleProcess(NativeProcess):
|
||||
should_run=should_run,
|
||||
enabled=enabled,
|
||||
sigkill=sigkill,
|
||||
restart_if_crash=restart_if_crash,
|
||||
)
|
||||
|
||||
def start(self) -> None:
|
||||
|
||||
+5
-1
@@ -67,6 +67,9 @@ def qcomgps(started: bool, params: Params, CP: car.CarParams) -> bool:
|
||||
def always_run(started: bool, params: Params, CP: car.CarParams) -> bool:
|
||||
return True
|
||||
|
||||
def nav_assist(started: bool, params: Params, CP: car.CarParams) -> bool:
|
||||
return params.get_bool("IQNavAssistDev") and params.get_bool("IQAndroidNav")
|
||||
|
||||
def only_onroad(started: bool, params: Params, CP: car.CarParams) -> bool:
|
||||
return started
|
||||
|
||||
@@ -176,6 +179,7 @@ procs = [
|
||||
PythonProcess("journald", "iqpilot.system.journald", only_onroad, platform.system() != "Darwin"),
|
||||
PythonProcess("micd", "iqpilot.system.micd", or_(iscar, livestream)),
|
||||
PythonProcess("timed", "iqpilot.system.timed", always_run, enabled=not PC),
|
||||
BundleProcess("navassistd", "iqpilot_navassist_private", "iqpilot_private.navassist.daemon", nav_assist, enabled=TICI, restart_if_crash=True),
|
||||
|
||||
PythonProcess("dmonitoringmodeld", "iqpilot.selfdrive.dmonitoringmodeld.dmonitoringmodeld", driver_monitoring, enabled=not PC),
|
||||
|
||||
@@ -248,7 +252,7 @@ procs += [
|
||||
PythonProcess("mapd_manager", "iqpilot.iq_maps.orchestrator", and_(only_offroad, not_low_power)),
|
||||
|
||||
# locationd
|
||||
NativeProcess("iqlocd", "iqpilot/selfdrive/iqlocd", ["./iqlocd"], only_onroad),
|
||||
NativeProcess("iqlocd", "iqpilot/selfdrive/iqlocd", ["./iqlocd"], only_onroad, restart_if_crash=True),
|
||||
]
|
||||
|
||||
managed_processes = {p.name: p for p in procs}
|
||||
|
||||
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
@@ -1,8 +1,8 @@
|
||||
{
|
||||
"python/_iqclosure/_vendored.json": {
|
||||
"mode": 420,
|
||||
"sha256": "870f5bc6aa5d8b528dc8e54bbaf03088193a5e764da6d7eb59706e1535dfd766",
|
||||
"size": 868
|
||||
"sha256": "4028da084b0134130e996cf62c37b9f18b04a45f0fb79e68d50cfff5274a9a03",
|
||||
"size": 829
|
||||
},
|
||||
"python/_iqclosure/iqpilot/__init__.py": {
|
||||
"mode": 420,
|
||||
@@ -91,8 +91,8 @@
|
||||
},
|
||||
"python/_iqclosure/iqpilot/selfdrive/iqmodeld/models/__init__.py": {
|
||||
"mode": 420,
|
||||
"sha256": "5865243a95ca4557d2a960302124a9898545cc3a8387e88ef569308e3d0f7077",
|
||||
"size": 119
|
||||
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
|
||||
"size": 0
|
||||
},
|
||||
"python/_iqclosure/iqpilot/selfdrive/iqmodeld/models/fetcher.py": {
|
||||
"mode": 420,
|
||||
@@ -101,8 +101,8 @@
|
||||
},
|
||||
"python/_iqclosure/iqpilot/selfdrive/iqmodeld/models/helpers.py": {
|
||||
"mode": 420,
|
||||
"sha256": "e4f524c7595754fd9db86724a7bd9b67524c630275ac78599ab6838d1aa7d809",
|
||||
"size": 11037
|
||||
"sha256": "da08ff891f57bc808d78104e21bb788553973f9e775d26ab4024f24969835e34",
|
||||
"size": 11793
|
||||
},
|
||||
"python/_iqclosure/iqpilot/system/__init__.py": {
|
||||
"mode": 420,
|
||||
@@ -176,7 +176,7 @@
|
||||
},
|
||||
"python/iqpilot_private/models/__init__.cpython-312-aarch64-linux-gnu.so": {
|
||||
"mode": 493,
|
||||
"sha256": "6a43103927cc37690f78758c36db0fcc3bf97ce05f94acd3f5a84ebf914d2a50",
|
||||
"sha256": "c3278b4461b846f8e126a7683f0167ad45c83a10fabbafcbe47fe63e1afb0438",
|
||||
"size": 67640
|
||||
},
|
||||
"python/iqpilot_private/models/__init__.py": {
|
||||
@@ -186,38 +186,38 @@
|
||||
},
|
||||
"python/iqpilot_private/models/big_catalog.cpython-312-aarch64-linux-gnu.so": {
|
||||
"mode": 493,
|
||||
"sha256": "f3e34dd9c64d25bd2f5b729ae94e9bedd63f9b585f772f35d94f382bef4f864c",
|
||||
"sha256": "ab6e34a85b4af3002f69115f3cded0e3340f29a3af37c43b7322dd76d0305d77",
|
||||
"size": 133864
|
||||
},
|
||||
"python/iqpilot_private/models/egpu_model.cpython-312-aarch64-linux-gnu.so": {
|
||||
"mode": 493,
|
||||
"sha256": "469cb16c85db9ec1f66d614039706e8243612abdb44e578fbc964009fb598608",
|
||||
"sha256": "5de802e8a3f7b1ea0e89c100c87d692731e25e428f6ff49466f6c6311f88fd36",
|
||||
"size": 68144
|
||||
},
|
||||
"python/iqpilot_private/models/emac_model_meta.cpython-312-aarch64-linux-gnu.so": {
|
||||
"mode": 493,
|
||||
"sha256": "8c977c4fa77753b7ab325f3988ed8535a11a0f269c1f3a8d74b4ebf3fa951d33",
|
||||
"sha256": "b2d02947f269bb1b13ceab9c822d350f6335e34c1111460acd8b4821fadaa7f9",
|
||||
"size": 134056
|
||||
},
|
||||
"python/iqpilot_private/models/fetcher.cpython-312-aarch64-linux-gnu.so": {
|
||||
"mode": 493,
|
||||
"sha256": "f499359e1c4f0e7ca0b495991267d3ec96813862bc098e7cbb62afc59bb8a306",
|
||||
"size": 136128
|
||||
"sha256": "fa6acc2bbfaf099dc0d0676aa59ccb37c0788c07ca99ae8d12ef8c24c11102ea",
|
||||
"size": 201712
|
||||
},
|
||||
"python/iqpilot_private/models/git_auth.cpython-312-aarch64-linux-gnu.so": {
|
||||
"mode": 493,
|
||||
"sha256": "92e357d4c38827dd85373fe231e33f67a6a139ceae13f1031696ccb82dd0e872",
|
||||
"sha256": "fc15899a920fa29e26e3a6992b33ae73d7795e4758634301494c3671933e28a1",
|
||||
"size": 68080
|
||||
},
|
||||
"python/iqpilot_private/models/helpers.cpython-312-aarch64-linux-gnu.so": {
|
||||
"mode": 493,
|
||||
"sha256": "a5c874def693b474f2f834efb7c35041bc5b9ae94c95d8eed70119591dfebcb2",
|
||||
"sha256": "e7232d83a28707b604c8f602414ea3f450b1f4d1a81ef536eddb318553198c8c",
|
||||
"size": 203576
|
||||
},
|
||||
"python/iqpilot_private/models/manager.cpython-312-aarch64-linux-gnu.so": {
|
||||
"mode": 493,
|
||||
"sha256": "8cd40e577d35d9f6d263b82cd3538de9cbec1cfefb937eee62d8610fab1a55d8",
|
||||
"size": 340016
|
||||
"sha256": "4ea2460b166a57f4b85c13a2875abbfd16166ddf23fffb267f5962c30ec0120b",
|
||||
"size": 339984
|
||||
},
|
||||
"runtime": {
|
||||
"entries": {
|
||||
@@ -228,13 +228,13 @@
|
||||
}
|
||||
},
|
||||
"signatures": {
|
||||
"python/iqpilot_private/models/__init__.cpython-312-aarch64-linux-gnu.so": "gLnDq3G09ay0HyWUBNAUwdsG5UBZoVZB9WGa37xLga9AJa3Z36XI9orNi5/gdKFArIkjZXNk8RkRHfXauLQeBw==",
|
||||
"python/iqpilot_private/models/big_catalog.cpython-312-aarch64-linux-gnu.so": "45g/h58OcdFMdfN2qL3qEgAjHDlCpgl6asqg5iC7uudqQ+hkhd5snuNG7k0mCrQJZGQQ8RoRITMUUxqi+P50CQ==",
|
||||
"python/iqpilot_private/models/egpu_model.cpython-312-aarch64-linux-gnu.so": "2l6hQ1qK+k/rYrcnci9NwsZMXzhb+tdWkSrc8cIDgs0cvfPpzOmzTCDW9W2oKZpjmvV6fvKtIvc1mOutqc/NCA==",
|
||||
"python/iqpilot_private/models/emac_model_meta.cpython-312-aarch64-linux-gnu.so": "ui3uSKS2m9PyKJOeFE5W8K6Qgzrl94JAig4eBGGJJjFcJ74r0fkdwj7Xft7g/DOjfNq0/1K5eynO41sRXGOWDw==",
|
||||
"python/iqpilot_private/models/fetcher.cpython-312-aarch64-linux-gnu.so": "tcwYHuntp8+uT3+T6Yt6JcPNehom6gHoYHFs8vNtiXZ+ihYTUSCPx20apn+WdGKjwj7xZIsEgBzfpSBQgiKCAA==",
|
||||
"python/iqpilot_private/models/git_auth.cpython-312-aarch64-linux-gnu.so": "RjXxVhDtSo/sqt3J5Ab6JZOqsYZUce9MltRBQ6VSEEnHXcJS/NhIrEOfodXJminO1EQxTw7nW/afbMUGM3FFBw==",
|
||||
"python/iqpilot_private/models/helpers.cpython-312-aarch64-linux-gnu.so": "73KWi0yqKZPYwNMztjWYUY5GbD3B+flzrlmxrCo8NgDNA4q/flsjG4lhEdq6y0Q2UBSl0u3hRSsF/aSLKZeeBA==",
|
||||
"python/iqpilot_private/models/manager.cpython-312-aarch64-linux-gnu.so": "k4ZfRTRE1kiKmwVclS2wa3ylNzt1XVuWkZS9AKuajtHkQc/08tQaIDcjAsVfKYJk5diHZICkMp5lX1fyOqdPCQ=="
|
||||
"python/iqpilot_private/models/__init__.cpython-312-aarch64-linux-gnu.so": "zg9OPSoUt3mdQw41+dWL8IIYA/SRdGTgnB3iSbyoPXnbMGTv3PWFyugPQUilRiWKEeAgfkpSeDccm1LzWnLZAA==",
|
||||
"python/iqpilot_private/models/big_catalog.cpython-312-aarch64-linux-gnu.so": "ykk9ja8+jHrbO7Pq7LbNAXYQ1Ij5XnICV6v45QO9I7YMPwqxrSkxC7JNUNR1g/YxKhzrSiit/7ReJ42HQGIsBw==",
|
||||
"python/iqpilot_private/models/egpu_model.cpython-312-aarch64-linux-gnu.so": "Z3w0t85Glo48qHbqmq0KjTVNuX+/7dwPRTVQd/zQEkWf6jVkORxbIJS97lFaEb/QiBrpis9LG8qRS0EXCSAGAg==",
|
||||
"python/iqpilot_private/models/emac_model_meta.cpython-312-aarch64-linux-gnu.so": "8u38cdxd9SIORVaUuil48bxaqTlwlBb3YV3NVYX7QNjyaBK+LrAVhQvv+2VqpX49Vs0AMXgtbfBo8hKlFLukDA==",
|
||||
"python/iqpilot_private/models/fetcher.cpython-312-aarch64-linux-gnu.so": "ll6Y2W7YFaJFucFcS9i5aDv4HAlUdnqEGT0CpjRTcri5Euyq+8hf2j2GHBJ17ag2T2Z+SwwnN9U4BCLy9oJoAQ==",
|
||||
"python/iqpilot_private/models/git_auth.cpython-312-aarch64-linux-gnu.so": "pNuaWCTWnXjksG6wmu6BjHFvu+I5QOzXAnfAb24BThtEGQIHGGU/FRf1Kekf5Exi73SfLnaB4wxEOuGPH0zKAA==",
|
||||
"python/iqpilot_private/models/helpers.cpython-312-aarch64-linux-gnu.so": "S5UzFxouWi78V0ppT1BzLc/iWObNPme+kgN9mB1yuPSOnldI6QIAf3yc8T5p0hk3CqHxR1CUYJJqJ4qCiceHBQ==",
|
||||
"python/iqpilot_private/models/manager.cpython-312-aarch64-linux-gnu.so": "ELzpErId/IAkfiVr31UJyjFHxWWfNy3DUrtqGCfngpGoOUbBRatGtXtA8ZosG/cAZGXXnScZnrpKDVLImZCVBQ=="
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1 +1 @@
|
||||
VKaSq35mXT1Nv9JNxFhrAse02ZheQGYFKtULc85QsP/MMkDHngMcXXA3NCtPaQ6D+jnrHIzHNdQpgz88UHfRCg==
|
||||
uX7Iom4jkeTc0G6lDWiznX0NTnUk98IpYuqOrYMALAhujzS/cXqquWEWOMlIPjcONh0g2ACV/ltYFidA9E+OBQ==
|
||||
|
||||
@@ -10,7 +10,6 @@
|
||||
"iqpilot.common.utils",
|
||||
"iqpilot.konn3kt.cloud_client",
|
||||
"iqpilot.selfdrive.iqmodeld.config",
|
||||
"iqpilot.selfdrive.iqmodeld.models",
|
||||
"iqpilot.selfdrive.iqmodeld.models.fetcher",
|
||||
"iqpilot.selfdrive.iqmodeld.models.helpers",
|
||||
"iqpilot.system.hardware",
|
||||
|
||||
-3
@@ -1,3 +0,0 @@
|
||||
"""
|
||||
Copyright © IQ.Lvbs, apart of Project Teal Lvbs, All Rights Reserved, licensed under https://konn3kt.com/tos/
|
||||
"""
|
||||
|
||||
+23
@@ -311,3 +311,26 @@ def get_active_model_runner(params: Params = None, force_check=False):
|
||||
params.put(_RUNNER_CACHE_KEY, int(runner_type))
|
||||
|
||||
return runner_type
|
||||
|
||||
|
||||
def get_selected_model_name(params: Params = None) -> str:
|
||||
params = Params() if params is None else params
|
||||
try:
|
||||
stored = params.get(_ACTIVE_BUNDLE_KEY)
|
||||
if not stored:
|
||||
return "Default (CD210)"
|
||||
if not isinstance(stored, dict) or not stored.get("ref"):
|
||||
return "Model unavailable"
|
||||
if stored["ref"] == _DEFAULT_BUNDLE_REF:
|
||||
return stored.get("displayName") or "Default (CD210)"
|
||||
return stored.get("internalName") or stored.get("displayName") or "Model unavailable"
|
||||
except Exception:
|
||||
return "Model unavailable"
|
||||
|
||||
|
||||
def get_cached_model_bundles(params: Params = None) -> list:
|
||||
params = Params() if params is None else params
|
||||
try:
|
||||
return _load_cached_manifest_bundles(params)
|
||||
except Exception:
|
||||
return []
|
||||
|
||||
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
@@ -311,3 +311,26 @@ def get_active_model_runner(params: Params = None, force_check=False):
|
||||
params.put(_RUNNER_CACHE_KEY, int(runner_type))
|
||||
|
||||
return runner_type
|
||||
|
||||
|
||||
def get_selected_model_name(params: Params = None) -> str:
|
||||
params = Params() if params is None else params
|
||||
try:
|
||||
stored = params.get(_ACTIVE_BUNDLE_KEY)
|
||||
if not stored:
|
||||
return "Default (CD210)"
|
||||
if not isinstance(stored, dict) or not stored.get("ref"):
|
||||
return "Model unavailable"
|
||||
if stored["ref"] == _DEFAULT_BUNDLE_REF:
|
||||
return stored.get("displayName") or "Default (CD210)"
|
||||
return stored.get("internalName") or stored.get("displayName") or "Model unavailable"
|
||||
except Exception:
|
||||
return "Model unavailable"
|
||||
|
||||
|
||||
def get_cached_model_bundles(params: Params = None) -> list:
|
||||
params = Params() if params is None else params
|
||||
try:
|
||||
return _load_cached_manifest_bundles(params)
|
||||
except Exception:
|
||||
return []
|
||||
|
||||
@@ -20,7 +20,7 @@ from iqpilot.selfdrive.ui.mici.widgets.stock_button import BigButton, BigParamCo
|
||||
from iqpilot.selfdrive.ui.mici.widgets.stock_dialog import BigConfirmationDialog
|
||||
from iqpilot.selfdrive.ui.mici.layouts.settings.iq_widgets import MappedParamToggle
|
||||
|
||||
from iqpilot.selfdrive.iqmodeld.models.helpers import select_default_model, is_default_bundle
|
||||
from iqpilot.selfdrive.iqmodeld.models.helpers import select_default_model, is_default_bundle, get_selected_model_name, get_cached_model_bundles
|
||||
from iqpilot.selfdrive.iqmodeld.models.runners.model_runner import CUSTOM_MODEL_PATH
|
||||
from iqpilot.system.ui.lib.multilang import tr
|
||||
|
||||
@@ -328,7 +328,7 @@ class ModelsLayoutMici(NavScroller):
|
||||
gui_app.push_widget(BigConfirmationDialog(tr("slide to\nredownload"), self._redownload_icon, _redownload, red=True))
|
||||
|
||||
def _show_folders(self):
|
||||
bundles = list(self.model_manager.availableBundles)
|
||||
bundles = list(self.model_manager.availableBundles) or get_cached_model_bundles(ui_state.params)
|
||||
favorites = self._read_favorites()
|
||||
btns = []
|
||||
|
||||
@@ -567,18 +567,7 @@ class ModelsLayoutMici(NavScroller):
|
||||
self._steer_delay.set_value(f"+{sw:.2f} s offset")
|
||||
|
||||
def _active_model_name(self) -> str:
|
||||
if not self._has_active_bundle_param():
|
||||
return "Default (CD210)"
|
||||
|
||||
try:
|
||||
active = self.model_manager.activeBundle
|
||||
if is_default_bundle(active):
|
||||
return active.displayName or "Default (CD210)"
|
||||
if active and active.ref:
|
||||
return _display_model_name(active)
|
||||
except Exception:
|
||||
pass
|
||||
return "Default (CD210)"
|
||||
return tr(get_selected_model_name(ui_state.params))
|
||||
|
||||
def _download_progress_text(self, bundle=None) -> str:
|
||||
bundle = bundle or getattr(self.model_manager, "selectedBundle", None)
|
||||
|
||||
@@ -0,0 +1,67 @@
|
||||
"""
|
||||
Copyright © IQ.Lvbs, apart of Project Teal Lvbs, All Rights Reserved, licensed under https://konn3kt.com/tos
|
||||
"""
|
||||
import ast
|
||||
import copy
|
||||
from pathlib import Path
|
||||
from types import SimpleNamespace
|
||||
|
||||
import pytest
|
||||
|
||||
from iqpilot.selfdrive.iqmodeld.models import helpers
|
||||
|
||||
|
||||
class Params:
|
||||
def __init__(self, values=None):
|
||||
self.values = values or {}
|
||||
|
||||
def get(self, key):
|
||||
return self.values.get(key)
|
||||
|
||||
def put(self, key, value):
|
||||
self.values[key] = value
|
||||
|
||||
def remove(self, key):
|
||||
self.values.pop(key, None)
|
||||
|
||||
def get_bool(self, key):
|
||||
return bool(self.get(key))
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def saved():
|
||||
bundle = helpers._load_default_bundle_dict()
|
||||
bundle.update(ref="custom", internalName="Saved custom", displayName="Saved Custom Model")
|
||||
return Params({"ModelManager_ActiveBundle": bundle})
|
||||
|
||||
|
||||
def test_both_ui_names_without_manager(saved):
|
||||
before = copy.deepcopy(saved.values)
|
||||
for relative, cls, method in [
|
||||
("ui/layouts/settings/iq_panels.py", "ModelsLayout", "_update_state"),
|
||||
("selfdrive/ui/mici/layouts/settings/models.py", "ModelsLayoutMici", "_active_model_name"),
|
||||
]:
|
||||
path = Path(__file__).resolve().parents[3] / relative
|
||||
tree = ast.parse(path.read_text())
|
||||
node = next(n for c in tree.body if isinstance(c, ast.ClassDef) and c.name == cls
|
||||
for n in c.body if isinstance(n, ast.FunctionDef) and n.name == method)
|
||||
env = {"tr": lambda text: text, "get_selected_model_name": helpers.get_selected_model_name,
|
||||
"ui_state": SimpleNamespace(params=saved, sm={"iqModelManager": None}, is_offroad=lambda: True)}
|
||||
exec(compile(ast.Module(body=[node], type_ignores=[]), str(path), "exec"), env)
|
||||
values = []
|
||||
item = SimpleNamespace(set_value=values.append, set_enabled=lambda value: None)
|
||||
ui = SimpleNamespace(_update_refresh_state=lambda: None, _handle_bundle_download_progress=lambda: None,
|
||||
current_model_item=SimpleNamespace(action_item=item, set_description=lambda value: None),
|
||||
redownload_item=SimpleNamespace(action_item=item), _can_redownload=lambda: False,
|
||||
_redownload_target_bundle=lambda: None)
|
||||
result = env[method](ui)
|
||||
assert (result if method == "_active_model_name" else values[0]) == "Saved custom"
|
||||
assert saved.values == before
|
||||
|
||||
|
||||
@pytest.mark.parametrize("stored,expected", [(None, "Default (CD210)"), ({"ref": "default"}, "Default (CD210)"),
|
||||
({"internalName": "Broken"}, "Model unavailable"), ("bad", "Model unavailable")])
|
||||
def test_saved_name_states(stored, expected):
|
||||
assert helpers.get_selected_model_name(Params({"ModelManager_ActiveBundle": stored})) == expected
|
||||
|
||||
|
||||
@@ -55,7 +55,7 @@ import time
|
||||
from iqpilot.cereal import custom
|
||||
from dataclasses import dataclass
|
||||
from iqpilot.selfdrive.car.vehicle_catalog import load_catalog
|
||||
from iqpilot.selfdrive.iqmodeld.models.helpers import select_default_model, is_default_bundle
|
||||
from iqpilot.selfdrive.iqmodeld.models.helpers import select_default_model, is_default_bundle, get_selected_model_name, get_cached_model_bundles
|
||||
from iqpilot.selfdrive.iqmodeld.models.runners.model_runner import CUSTOM_MODEL_PATH
|
||||
from iqpilot.selfdrive.ui.layouts.settings import settings as OP
|
||||
from iqpilot.selfdrive.ui.layouts.settings.toggles import TogglesLayout
|
||||
@@ -1908,7 +1908,7 @@ class ModelsLayout(Widget):
|
||||
return PickerItem(bundle.ref, {'display_name': bundle.displayName, 'short_name': bundle.internalName})
|
||||
|
||||
def _get_folders(self, favorites):
|
||||
bundles = self.model_manager.availableBundles
|
||||
bundles = self.model_manager.availableBundles or get_cached_model_bundles(ui_state.params)
|
||||
folders = {}
|
||||
for bundle in bundles:
|
||||
folders.setdefault(next((ov_ride.value for ov_ride in bundle.overrides if ov_ride.key == "folder"), ""), []).append(bundle)
|
||||
@@ -2000,14 +2000,7 @@ class ModelsLayout(Widget):
|
||||
self._update_refresh_state()
|
||||
self.model_manager = ui_state.sm["iqModelManager"]
|
||||
self._handle_bundle_download_progress()
|
||||
active = self.model_manager.activeBundle if self.model_manager else None
|
||||
if is_default_bundle(active):
|
||||
active_name = active.displayName or tr("Default (CD210)")
|
||||
elif self._has_active_bundle_param() and active and active.ref:
|
||||
active_name = active.internalName
|
||||
else:
|
||||
active_name = tr("Default (CD210)")
|
||||
self.current_model_item.action_item.set_value(active_name)
|
||||
self.current_model_item.action_item.set_value(tr(get_selected_model_name(ui_state.params)))
|
||||
self.redownload_item.action_item.set_enabled(self._can_redownload())
|
||||
target = self._redownload_target_bundle()
|
||||
self.redownload_item.action_item.set_value(target.internalName if target else "")
|
||||
|
||||
Reference in New Issue
Block a user