mirror of
https://github.com/sunnypilot/sunnypilot.git
synced 2026-08-22 15:33:45 +08:00
Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 93659e93b0 |
@@ -1,11 +0,0 @@
|
||||
* @sunnypilot/dev-internal
|
||||
/.github/ @devtekve @sunnyhaibin
|
||||
/release/ci/ @devtekve @sunnyhaibin
|
||||
/tinygrad_repo @devtekve @Discountchubbs
|
||||
/tinygrad/ @devtekve @Discountchubbs
|
||||
/selfdrive/controls/lib/longitudinal_planner.py @devtekve @Discountchubbs
|
||||
/selfdrive/controls/lib/longitudinal_mpc_lib/long_mpc.py @devtekve @Discountchubbs
|
||||
/selfdrive/modeld/ @devtekve @Discountchubbs
|
||||
/sunnypilot/model* @devtekve @Discountchubbs
|
||||
/sunnypilot/sunnylink/ @devtekve
|
||||
/system/athena/ @devtekve
|
||||
@@ -1,47 +0,0 @@
|
||||
name: Bug report
|
||||
description: For issues with running openpilot on your comma device
|
||||
labels: ["bug"]
|
||||
body:
|
||||
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: >
|
||||
Before creating a **bug report**, please check the following:
|
||||
* If the issue likely only affects your car model or make, go back and open a **car bug report** instead.
|
||||
* If the issue is related to the driving or driver monitoring models, you should open a [discussion](https://github.com/commaai/openpilot/discussions/categories/model-feedback) instead.
|
||||
* Ensure you're running the latest openpilot release.
|
||||
* Ensure you're using officially supported hardware. Issues running on PCs have a different issue template.
|
||||
* Ensure there isn't an existing issue for your bug. If there is, leave a comment on the existing issue.
|
||||
* Ensure you're running stock openpilot. We cannot look into bug reports from forks.
|
||||
|
||||
If you're unsure whether you've hit a bug, check out the #installation-help channel in the [community Discord server](https://discord.comma.ai).
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Describe the bug
|
||||
description: Also include a description of how to reproduce the bug
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: input
|
||||
id: route
|
||||
attributes:
|
||||
label: Provide a route where the issue occurs
|
||||
description: Ensure the route is fully uploaded at https://useradmin.comma.ai. We cannot look into issues without routes, or at least a Dongle ID.
|
||||
placeholder: 77611a1fac303767|2020-05-11--16-37-07
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: input
|
||||
id: version
|
||||
attributes:
|
||||
label: openpilot version
|
||||
description: If you're not on release, provide the commit hash
|
||||
placeholder: 0.8.10
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Additional info
|
||||
|
||||
@@ -1,14 +0,0 @@
|
||||
blank_issues_enabled: false
|
||||
contact_links:
|
||||
- name: Car bug report
|
||||
url: https://github.com/commaai/opendbc/issues/new
|
||||
about: For issues with a particular car make or model
|
||||
- name: Join the Discord
|
||||
url: https://discord.comma.ai
|
||||
about: The community Discord is for both openpilot development and experience discussion
|
||||
- name: Report driving behavior feedback
|
||||
url: https://discord.com/channels/469524606043160576/1254834193066623017
|
||||
about: Feedback for the driving and driver monitoring models goes in the #driving-feedback in Discord
|
||||
- name: Community Wiki
|
||||
url: https://github.com/commaai/openpilot/wiki
|
||||
about: Check out our community wiki
|
||||
@@ -1,42 +0,0 @@
|
||||
name: PC bug report
|
||||
description: For issues with running openpilot on PC
|
||||
labels: ["PC"]
|
||||
body:
|
||||
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: >
|
||||
Before creating a **bug report**, please check the following:
|
||||
* Ensure you're running the latest openpilot release.
|
||||
* Ensure there isn't an existing issue for your bug. If there is, leave a comment on the existing issue.
|
||||
* Ensure you're running stock openpilot. We cannot look into bug reports from forks.
|
||||
|
||||
If you're unsure whether you've hit a bug, check out the #installation-help channel in the [community Discord server](https://discord.comma.ai).
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Describe the bug
|
||||
description: Also include a description of how to reproduce the bug
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: input
|
||||
id: os-version
|
||||
attributes:
|
||||
label: OS Version
|
||||
placeholder: Ubuntu 24.04
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: input
|
||||
id: version
|
||||
attributes:
|
||||
label: openpilot version or commit
|
||||
placeholder: bd36f2ec8d3559909678eff2690c10a520938367
|
||||
validations:
|
||||
required: false
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Additional info
|
||||
|
||||
@@ -1,31 +0,0 @@
|
||||
ci:
|
||||
- changed-files:
|
||||
- any-glob-to-all-files: "{.github/**,**/test_*,**/test/**,Jenkinsfile}"
|
||||
|
||||
chore:
|
||||
- changed-files:
|
||||
- any-glob-to-all-files: "{.github/**}"
|
||||
|
||||
car:
|
||||
- changed-files:
|
||||
- any-glob-to-all-files: '{openpilot/selfdrive/car/**,opendbc_repo}'
|
||||
|
||||
simulation:
|
||||
- changed-files:
|
||||
- any-glob-to-all-files: 'openpilot/tools/sim/**'
|
||||
|
||||
ui:
|
||||
- changed-files:
|
||||
- any-glob-to-all-files: '{openpilot/selfdrive/assets/**,openpilot/selfdrive/ui/**,openpilot/system/ui/**}'
|
||||
|
||||
tools:
|
||||
- changed-files:
|
||||
- any-glob-to-all-files: 'openpilot/tools/**'
|
||||
|
||||
multilanguage:
|
||||
- changed-files:
|
||||
- any-glob-to-all-files: 'openpilot/selfdrive/ui/translations/**'
|
||||
|
||||
autonomy:
|
||||
- changed-files:
|
||||
- any-glob-to-all-files: "{openpilot/selfdrive/modeld/models/**,openpilot/selfdrive/test/process_replay/model_replay_ref_commit,openpilot/sunnypilot/modeld*/models/**}"
|
||||
@@ -1,43 +0,0 @@
|
||||
exclude-labels:
|
||||
- 'no-changelog'
|
||||
categories:
|
||||
- title: '🚀 Features'
|
||||
labels:
|
||||
- 'feature'
|
||||
- 'enhancement'
|
||||
- title: '🐛 Bug Fixes'
|
||||
collapse-after: 5
|
||||
labels:
|
||||
- 'fix'
|
||||
- 'bugfix'
|
||||
- 'bug'
|
||||
- title: '🧰 Maintenance'
|
||||
collapse-after: 5
|
||||
label: 'chore'
|
||||
change-template: '- $TITLE @$AUTHOR (#$NUMBER)'
|
||||
change-title-escapes: '\<*_&'
|
||||
replacers:
|
||||
- search: '/[Ss][Uu][Nn][Nn][Yy][Pp][Ii][Ll][Oo][Tt]/g'
|
||||
replace: 'sunnypilot'
|
||||
- search: '/\b[Ss][Pp]\b/g'
|
||||
replace: 'SP'
|
||||
version-resolver:
|
||||
major:
|
||||
labels:
|
||||
- 'major'
|
||||
minor:
|
||||
labels:
|
||||
- 'minor'
|
||||
patch:
|
||||
labels:
|
||||
- 'patch'
|
||||
default: patch
|
||||
name-template: 'v$RESOLVED_VERSION 🚀'
|
||||
tag-template: 'v$RESOLVED_VERSION'
|
||||
version-template: "0.$MAJOR.$MINOR.$PATCH" # The day OP becomes v1, we need to bump this
|
||||
tag-prefix: "v0." # The day OP becomes v1, we need to bump this
|
||||
prerelease-identifier: "staging"
|
||||
template: |
|
||||
## Changes
|
||||
|
||||
$CHANGES
|
||||
+11
-14
@@ -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.
|
||||
|
||||
# 345 Supported Cars
|
||||
# 342 Supported Cars
|
||||
|
||||
|Make|Model|Supported Package|ACC|No ACC accel below|No ALC below|Steering Torque|Resume from stop|<a href="##"><img width=2000></a>Hardware Needed<br> |Video|Setup Video|
|
||||
|---|---|---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|
|
||||
@@ -34,7 +34,6 @@ A supported vehicle is one that just works when you install a comma device. All
|
||||
|Chrysler|Pacifica Hybrid 2019-25|Adaptive Cruise Control (ACC)|Stock|0 mph|39 mph|[](##)|[](##)|<details><summary>Parts</summary><sub>- 1 FCA connector<br>- 1 OBD-C cable (2 ft)<br>- 1 comma four<br>- 1 comma power v3<br>- 1 harness box<br>- 1 mount<br><a href="https://comma.ai/shop/comma-3x?harness=Chrysler Pacifica Hybrid 2019-25">Buy Here</a></sub></details>|||
|
||||
|comma|body|All|openpilot|0 mph|0 mph|[](##)|[](##)|None|<a href="https://youtu.be/VT-i3yRsX2s?t=2736" target="_blank"><img height="18px" src="assets/icon-youtube.svg" /></a>||
|
||||
|CUPRA[<sup>12</sup>](#footnotes)|Ateca 2018-23|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[<sup>1,16</sup>](#footnotes)|0 mph|0 mph|[](##)|[](##)|<details><summary>Parts</summary><sub>- 1 OBD-C cable (2 ft)<br>- 1 VW J533 connector<br>- 1 comma four<br>- 1 harness box<br>- 1 long OBD-C cable (9.5 ft)<br>- 1 mount<br><a href="https://comma.ai/shop/comma-3x?harness=CUPRA Ateca 2018-23">Buy Here</a></sub></details>|||
|
||||
|CUPRA[<sup>12</sup>](#footnotes)|Born 2021-23|Adaptive Cruise Control (ACC) & Lane Assist|openpilot[<sup>16</sup>](#footnotes)|0 mph|0 mph|[](##)|[](##)|<details><summary>Parts</summary><sub>- 1 OBD-C cable (2 ft)<br>- 1 VW J533 connector<br>- 1 comma four<br>- 1 harness box<br>- 1 long OBD-C cable (9.5 ft)<br>- 1 mount<br><a href="https://comma.ai/shop/comma-3x?harness=CUPRA Born 2021-23">Buy Here</a></sub></details>|||
|
||||
|Dodge|Durango 2020-21|Adaptive Cruise Control (ACC)|Stock|0 mph|39 mph|[](##)|[](##)|<details><summary>Parts</summary><sub>- 1 FCA connector<br>- 1 OBD-C cable (2 ft)<br>- 1 comma four<br>- 1 comma power v3<br>- 1 harness box<br>- 1 mount<br><a href="https://comma.ai/shop/comma-3x?harness=Dodge Durango 2020-21">Buy Here</a></sub></details>|||
|
||||
|Ford|Bronco Sport 2021-24|Co-Pilot360 Assist+|openpilot|0 mph|0 mph|[](##)|[](##)|<details><summary>Parts</summary><sub>- 1 Ford Q3 connector<br>- 1 OBD-C cable (2 ft)<br>- 1 comma four<br>- 1 comma power v3<br>- 1 harness box<br>- 1 mount<br><a href="https://comma.ai/shop/comma-3x?harness=Ford Bronco Sport 2021-24">Buy Here</a></sub></details>|||
|
||||
|Ford|Escape 2020-22|Co-Pilot360 Assist+|openpilot|0 mph|0 mph|[](##)|[](##)|<details><summary>Parts</summary><sub>- 1 Ford Q3 connector<br>- 1 OBD-C cable (2 ft)<br>- 1 comma four<br>- 1 comma power v3<br>- 1 harness box<br>- 1 mount<br><a href="https://comma.ai/shop/comma-3x?harness=Ford Escape 2020-22">Buy Here</a></sub></details>|||
|
||||
@@ -83,7 +82,7 @@ A supported vehicle is one that just works when you install a comma device. All
|
||||
|Honda|City (Brazil only) 2023-25|All|openpilot available[<sup>1,5</sup>](#footnotes)|0 mph|14 mph|[](##)|[](##)|<details><summary>Parts</summary><sub>- 1 Honda Bosch B connector<br>- 1 OBD-C cable (2 ft)<br>- 1 comma four<br>- 1 comma power v3<br>- 1 harness box<br>- 1 mount<br><a href="https://comma.ai/shop/comma-3x?harness=Honda City (Brazil only) 2023-25">Buy Here</a></sub></details>|||
|
||||
|Honda|Civic 2016-18|Honda Sensing|openpilot|0 mph|12 mph|[](##)|[](##)|<details><summary>Parts</summary><sub>- 1 Honda Nidec connector<br>- 1 OBD-C cable (2 ft)<br>- 1 comma four<br>- 1 comma power v3<br>- 1 harness box<br>- 1 mount<br><a href="https://comma.ai/shop/comma-3x?harness=Honda Civic 2016-18">Buy Here</a></sub></details>|<a href="https://youtu.be/-IkImTe1NYE" target="_blank"><img height="18px" src="assets/icon-youtube.svg" /></a>||
|
||||
|Honda|Civic 2019-21|All|openpilot available[<sup>1,5</sup>](#footnotes)|0 mph|2 mph[<sup>4</sup>](#footnotes)|[](##)|[](##)|<details><summary>Parts</summary><sub>- 1 Honda Bosch A connector<br>- 1 OBD-C cable (2 ft)<br>- 1 comma four<br>- 1 comma power v3<br>- 1 harness box<br>- 1 mount<br><a href="https://comma.ai/shop/comma-3x?harness=Honda Civic 2019-21">Buy Here</a></sub></details>|<a href="https://www.youtube.com/watch?v=4Iz1Mz5LGF8" target="_blank"><img height="18px" src="assets/icon-youtube.svg" /></a>||
|
||||
|Honda|Civic 2022-26|All|openpilot available[<sup>1,5</sup>](#footnotes)|0 mph|0 mph|[](##)|[](##)|<details><summary>Parts</summary><sub>- 1 Honda Bosch B connector<br>- 1 OBD-C cable (2 ft)<br>- 1 comma four<br>- 1 comma power v3<br>- 1 harness box<br>- 1 mount<br><a href="https://comma.ai/shop/comma-3x?harness=Honda Civic 2022-26">Buy Here</a></sub></details>|<a href="https://youtu.be/ytiOT5lcp6Q" target="_blank"><img height="18px" src="assets/icon-youtube.svg" /></a>||
|
||||
|Honda|Civic 2022-24|All|openpilot available[<sup>1,5</sup>](#footnotes)|0 mph|0 mph|[](##)|[](##)|<details><summary>Parts</summary><sub>- 1 Honda Bosch B connector<br>- 1 OBD-C cable (2 ft)<br>- 1 comma four<br>- 1 comma power v3<br>- 1 harness box<br>- 1 mount<br><a href="https://comma.ai/shop/comma-3x?harness=Honda Civic 2022-24">Buy Here</a></sub></details>|<a href="https://youtu.be/ytiOT5lcp6Q" target="_blank"><img height="18px" src="assets/icon-youtube.svg" /></a>||
|
||||
|Honda|Civic Hatchback 2017-18|Honda Sensing|openpilot available[<sup>1,5</sup>](#footnotes)|0 mph|12 mph|[](##)|[](##)|<details><summary>Parts</summary><sub>- 1 Honda Bosch A connector<br>- 1 OBD-C cable (2 ft)<br>- 1 comma four<br>- 1 comma power v3<br>- 1 harness box<br>- 1 mount<br><a href="https://comma.ai/shop/comma-3x?harness=Honda Civic Hatchback 2017-18">Buy Here</a></sub></details>|||
|
||||
|Honda|Civic Hatchback 2019-21|All|openpilot available[<sup>1,5</sup>](#footnotes)|0 mph|12 mph|[](##)|[](##)|<details><summary>Parts</summary><sub>- 1 Honda Bosch A connector<br>- 1 OBD-C cable (2 ft)<br>- 1 comma four<br>- 1 comma power v3<br>- 1 harness box<br>- 1 mount<br><a href="https://comma.ai/shop/comma-3x?harness=Honda Civic Hatchback 2019-21">Buy Here</a></sub></details>|||
|
||||
|Honda|Civic Hatchback 2022-24|All|openpilot available[<sup>1,5</sup>](#footnotes)|0 mph|0 mph|[](##)|[](##)|<details><summary>Parts</summary><sub>- 1 Honda Bosch B connector<br>- 1 OBD-C cable (2 ft)<br>- 1 comma four<br>- 1 comma power v3<br>- 1 harness box<br>- 1 mount<br><a href="https://comma.ai/shop/comma-3x?harness=Honda Civic Hatchback 2022-24">Buy Here</a></sub></details>|<a href="https://youtu.be/ytiOT5lcp6Q" target="_blank"><img height="18px" src="assets/icon-youtube.svg" /></a>||
|
||||
@@ -159,7 +158,7 @@ A supported vehicle is one that just works when you install a comma device. All
|
||||
|Hyundai|Tucson Plug-in Hybrid 2024|All|openpilot available[<sup>1</sup>](#footnotes)|0 mph|0 mph|[](##)|[](##)|<details><summary>Parts</summary><sub>- 1 Hyundai N connector<br>- 1 OBD-C cable (2 ft)<br>- 1 comma four<br>- 1 comma power v3<br>- 1 harness box<br>- 1 mount<br><a href="https://comma.ai/shop/comma-3x?harness=Hyundai Tucson Plug-in Hybrid 2024">Buy Here</a></sub></details>|||
|
||||
|Hyundai|Veloster 2019-20|Smart Cruise Control (SCC)|Stock|5 mph|0 mph|[](##)|[](##)|<details><summary>Parts</summary><sub>- 1 Hyundai E connector<br>- 1 OBD-C cable (2 ft)<br>- 1 comma four<br>- 1 comma power v3<br>- 1 harness box<br>- 1 mount<br><a href="https://comma.ai/shop/comma-3x?harness=Hyundai Veloster 2019-20">Buy Here</a></sub></details>|||
|
||||
|Jeep|Grand Cherokee 2016-18|Adaptive Cruise Control (ACC)|Stock|0 mph|9 mph|[](##)|[](##)|<details><summary>Parts</summary><sub>- 1 FCA connector<br>- 1 OBD-C cable (2 ft)<br>- 1 comma four<br>- 1 comma power v3<br>- 1 harness box<br>- 1 mount<br><a href="https://comma.ai/shop/comma-3x?harness=Jeep Grand Cherokee 2016-18">Buy Here</a></sub></details>|<a href="https://www.youtube.com/watch?v=eLR9o2JkuRk" target="_blank"><img height="18px" src="assets/icon-youtube.svg" /></a>||
|
||||
|Jeep|Grand Cherokee 2019-21|Adaptive Cruise Control (ACC)|Stock|0 mph|39 mph|[](##)|[](##)|<details><summary>Parts</summary><sub>- 1 FCA connector<br>- 1 OBD-C cable (2 ft)<br>- 1 comma four<br>- 1 comma power v3<br>- 1 harness box<br>- 1 mount<br><a href="https://comma.ai/shop/comma-3x?harness=Jeep Grand Cherokee 2019-21">Buy Here</a></sub></details>|||
|
||||
|Jeep|Grand Cherokee 2019-21|Adaptive Cruise Control (ACC)|Stock|0 mph|39 mph|[](##)|[](##)|<details><summary>Parts</summary><sub>- 1 FCA connector<br>- 1 OBD-C cable (2 ft)<br>- 1 comma four<br>- 1 comma power v3<br>- 1 harness box<br>- 1 mount<br><a href="https://comma.ai/shop/comma-3x?harness=Jeep Grand Cherokee 2019-21">Buy Here</a></sub></details>|<a href="https://www.youtube.com/watch?v=jBe4lWnRSu4" target="_blank"><img height="18px" src="assets/icon-youtube.svg" /></a>||
|
||||
|Kia|Carnival 2022-24|Smart Cruise Control (SCC)|openpilot available[<sup>1</sup>](#footnotes)|0 mph|0 mph|[](##)|[](##)|<details><summary>Parts</summary><sub>- 1 Hyundai A connector<br>- 1 OBD-C cable (2 ft)<br>- 1 comma four<br>- 1 comma power v3<br>- 1 harness box<br>- 1 mount<br><a href="https://comma.ai/shop/comma-3x?harness=Kia Carnival 2022-24">Buy Here</a></sub></details>|||
|
||||
|Kia|Carnival (China only) 2023|Smart Cruise Control (SCC)|openpilot available[<sup>1</sup>](#footnotes)|0 mph|0 mph|[](##)|[](##)|<details><summary>Parts</summary><sub>- 1 Hyundai K connector<br>- 1 OBD-C cable (2 ft)<br>- 1 comma four<br>- 1 comma power v3<br>- 1 harness box<br>- 1 mount<br><a href="https://comma.ai/shop/comma-3x?harness=Kia Carnival (China only) 2023">Buy Here</a></sub></details>|||
|
||||
|Kia|Ceed 2019-21|Smart Cruise Control (SCC)|Stock|0 mph|0 mph|[](##)|[](##)|<details><summary>Parts</summary><sub>- 1 Hyundai E connector<br>- 1 OBD-C cable (2 ft)<br>- 1 comma four<br>- 1 comma power v3<br>- 1 harness box<br>- 1 mount<br><a href="https://comma.ai/shop/comma-3x?harness=Kia Ceed 2019-21">Buy Here</a></sub></details>|||
|
||||
@@ -243,20 +242,20 @@ A supported vehicle is one that just works when you install a comma device. All
|
||||
|Rivian|R1T 2025|All|openpilot|0 mph|0 mph|[](##)|[](##)|<details><summary>Parts</summary><sub>- 1 OBD-C cable (2 ft)<br>- 1 Rivian B connector<br>- 1 comma four<br>- 1 comma power v3<br>- 1 harness box<br>- 1 long OBD-C cable (9.5 ft)<br>- 1 mount<br><a href="https://comma.ai/shop/comma-3x?harness=Rivian R1T 2025">Buy Here</a></sub></details>|||
|
||||
|SEAT[<sup>12</sup>](#footnotes)|Ateca 2016-23|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[<sup>1,16</sup>](#footnotes)|0 mph|0 mph|[](##)|[](##)|<details><summary>Parts</summary><sub>- 1 OBD-C cable (2 ft)<br>- 1 VW J533 connector<br>- 1 comma four<br>- 1 harness box<br>- 1 long OBD-C cable (9.5 ft)<br>- 1 mount<br><a href="https://comma.ai/shop/comma-3x?harness=SEAT Ateca 2016-23">Buy Here</a></sub></details>|||
|
||||
|SEAT[<sup>12</sup>](#footnotes)|Leon 2014-20|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[<sup>1,16</sup>](#footnotes)|0 mph|0 mph|[](##)|[](##)|<details><summary>Parts</summary><sub>- 1 OBD-C cable (2 ft)<br>- 1 VW J533 connector<br>- 1 comma four<br>- 1 harness box<br>- 1 long OBD-C cable (9.5 ft)<br>- 1 mount<br><a href="https://comma.ai/shop/comma-3x?harness=SEAT Leon 2014-20">Buy Here</a></sub></details>|||
|
||||
|Subaru|Ascent 2019-21|All[<sup>7</sup>](#footnotes)|Stock|0 mph|0 mph|[](##)|[](##)|<details><summary>Parts</summary><sub>- 1 OBD-C cable (2 ft)<br>- 1 Subaru A connector<br>- 1 comma four<br>- 1 comma power v3<br>- 1 harness box<br>- 1 mount<br><a href="https://comma.ai/shop/comma-3x?harness=Subaru Ascent 2019-21">Buy Here</a></sub></details><details><summary>Tools</summary><sub>- 1 Pry Tool<br>- 1 Socket Wrench 8mm or 5/16" (deep)</sub></details>|||
|
||||
|Subaru|Crosstrek 2018-19|EyeSight Driver Assistance[<sup>7</sup>](#footnotes)|Stock|0 mph|0 mph|[](##)|[](##)|<details><summary>Parts</summary><sub>- 1 OBD-C cable (2 ft)<br>- 1 Subaru A connector<br>- 1 comma four<br>- 1 comma power v3<br>- 1 harness box<br>- 1 mount<br><a href="https://comma.ai/shop/comma-3x?harness=Subaru Crosstrek 2018-19">Buy Here</a></sub></details><details><summary>Tools</summary><sub>- 1 Pry Tool<br>- 1 Socket Wrench 8mm or 5/16" (deep)</sub></details>|<a href="https://youtu.be/Agww7oE1k-s?t=26" target="_blank"><img height="18px" src="assets/icon-youtube.svg" /></a>||
|
||||
|Subaru|Crosstrek 2020-23|EyeSight Driver Assistance[<sup>7</sup>](#footnotes)|Stock|0 mph|0 mph|[](##)|[](##)|<details><summary>Parts</summary><sub>- 1 OBD-C cable (2 ft)<br>- 1 Subaru A connector<br>- 1 comma four<br>- 1 comma power v3<br>- 1 harness box<br>- 1 mount<br><a href="https://comma.ai/shop/comma-3x?harness=Subaru Crosstrek 2020-23">Buy Here</a></sub></details><details><summary>Tools</summary><sub>- 1 Pry Tool<br>- 1 Socket Wrench 8mm or 5/16" (deep)</sub></details>|||
|
||||
|Subaru|Ascent 2019-21|All[<sup>7</sup>](#footnotes)|openpilot available[<sup>1,8</sup>](#footnotes)|0 mph|0 mph|[](##)|[](##)|<details><summary>Parts</summary><sub>- 1 OBD-C cable (2 ft)<br>- 1 Subaru A connector<br>- 1 comma four<br>- 1 comma power v3<br>- 1 harness box<br>- 1 mount<br><a href="https://comma.ai/shop/comma-3x?harness=Subaru Ascent 2019-21">Buy Here</a></sub></details><details><summary>Tools</summary><sub>- 1 Pry Tool<br>- 1 Socket Wrench 8mm or 5/16" (deep)</sub></details>|||
|
||||
|Subaru|Crosstrek 2018-19|EyeSight Driver Assistance[<sup>7</sup>](#footnotes)|openpilot available[<sup>1,8</sup>](#footnotes)|0 mph|0 mph|[](##)|[](##)|<details><summary>Parts</summary><sub>- 1 OBD-C cable (2 ft)<br>- 1 Subaru A connector<br>- 1 comma four<br>- 1 comma power v3<br>- 1 harness box<br>- 1 mount<br><a href="https://comma.ai/shop/comma-3x?harness=Subaru Crosstrek 2018-19">Buy Here</a></sub></details><details><summary>Tools</summary><sub>- 1 Pry Tool<br>- 1 Socket Wrench 8mm or 5/16" (deep)</sub></details>|<a href="https://youtu.be/Agww7oE1k-s?t=26" target="_blank"><img height="18px" src="assets/icon-youtube.svg" /></a>||
|
||||
|Subaru|Crosstrek 2020-23|EyeSight Driver Assistance[<sup>7</sup>](#footnotes)|openpilot available[<sup>1,8</sup>](#footnotes)|0 mph|0 mph|[](##)|[](##)|<details><summary>Parts</summary><sub>- 1 OBD-C cable (2 ft)<br>- 1 Subaru A connector<br>- 1 comma four<br>- 1 comma power v3<br>- 1 harness box<br>- 1 mount<br><a href="https://comma.ai/shop/comma-3x?harness=Subaru Crosstrek 2020-23">Buy Here</a></sub></details><details><summary>Tools</summary><sub>- 1 Pry Tool<br>- 1 Socket Wrench 8mm or 5/16" (deep)</sub></details>|||
|
||||
|Subaru|Forester 2017-18|EyeSight Driver Assistance[<sup>7</sup>](#footnotes)|Stock|0 mph|0 mph|[](##)|[](##)|<details><summary>Parts</summary><sub>- 1 OBD-C cable (2 ft)<br>- 1 Subaru A connector<br>- 1 comma four<br>- 1 comma power v3<br>- 1 harness box<br>- 1 mount<br><a href="https://comma.ai/shop/comma-3x?harness=Subaru Forester 2017-18">Buy Here</a></sub></details><details><summary>Tools</summary><sub>- 1 Pry Tool<br>- 1 Socket Wrench 8mm or 5/16" (deep)</sub></details>|||
|
||||
|Subaru|Forester 2019-21|All[<sup>7</sup>](#footnotes)|Stock|0 mph|0 mph|[](##)|[](##)|<details><summary>Parts</summary><sub>- 1 OBD-C cable (2 ft)<br>- 1 Subaru A connector<br>- 1 comma four<br>- 1 comma power v3<br>- 1 harness box<br>- 1 mount<br><a href="https://comma.ai/shop/comma-3x?harness=Subaru Forester 2019-21">Buy Here</a></sub></details><details><summary>Tools</summary><sub>- 1 Pry Tool<br>- 1 Socket Wrench 8mm or 5/16" (deep)</sub></details>|||
|
||||
|Subaru|Impreza 2017-19|EyeSight Driver Assistance[<sup>7</sup>](#footnotes)|Stock|0 mph|0 mph|[](##)|[](##)|<details><summary>Parts</summary><sub>- 1 OBD-C cable (2 ft)<br>- 1 Subaru A connector<br>- 1 comma four<br>- 1 comma power v3<br>- 1 harness box<br>- 1 mount<br><a href="https://comma.ai/shop/comma-3x?harness=Subaru Impreza 2017-19">Buy Here</a></sub></details><details><summary>Tools</summary><sub>- 1 Pry Tool<br>- 1 Socket Wrench 8mm or 5/16" (deep)</sub></details>|||
|
||||
|Subaru|Impreza 2020-22|EyeSight Driver Assistance[<sup>7</sup>](#footnotes)|Stock|0 mph|0 mph|[](##)|[](##)|<details><summary>Parts</summary><sub>- 1 OBD-C cable (2 ft)<br>- 1 Subaru A connector<br>- 1 comma four<br>- 1 comma power v3<br>- 1 harness box<br>- 1 mount<br><a href="https://comma.ai/shop/comma-3x?harness=Subaru Impreza 2020-22">Buy Here</a></sub></details><details><summary>Tools</summary><sub>- 1 Pry Tool<br>- 1 Socket Wrench 8mm or 5/16" (deep)</sub></details>|||
|
||||
|Subaru|Forester 2019-21|All[<sup>7</sup>](#footnotes)|openpilot available[<sup>1,8</sup>](#footnotes)|0 mph|0 mph|[](##)|[](##)|<details><summary>Parts</summary><sub>- 1 OBD-C cable (2 ft)<br>- 1 Subaru A connector<br>- 1 comma four<br>- 1 comma power v3<br>- 1 harness box<br>- 1 mount<br><a href="https://comma.ai/shop/comma-3x?harness=Subaru Forester 2019-21">Buy Here</a></sub></details><details><summary>Tools</summary><sub>- 1 Pry Tool<br>- 1 Socket Wrench 8mm or 5/16" (deep)</sub></details>|||
|
||||
|Subaru|Impreza 2017-19|EyeSight Driver Assistance[<sup>7</sup>](#footnotes)|openpilot available[<sup>1,8</sup>](#footnotes)|0 mph|0 mph|[](##)|[](##)|<details><summary>Parts</summary><sub>- 1 OBD-C cable (2 ft)<br>- 1 Subaru A connector<br>- 1 comma four<br>- 1 comma power v3<br>- 1 harness box<br>- 1 mount<br><a href="https://comma.ai/shop/comma-3x?harness=Subaru Impreza 2017-19">Buy Here</a></sub></details><details><summary>Tools</summary><sub>- 1 Pry Tool<br>- 1 Socket Wrench 8mm or 5/16" (deep)</sub></details>|||
|
||||
|Subaru|Impreza 2020-22|EyeSight Driver Assistance[<sup>7</sup>](#footnotes)|openpilot available[<sup>1,8</sup>](#footnotes)|0 mph|0 mph|[](##)|[](##)|<details><summary>Parts</summary><sub>- 1 OBD-C cable (2 ft)<br>- 1 Subaru A connector<br>- 1 comma four<br>- 1 comma power v3<br>- 1 harness box<br>- 1 mount<br><a href="https://comma.ai/shop/comma-3x?harness=Subaru Impreza 2020-22">Buy Here</a></sub></details><details><summary>Tools</summary><sub>- 1 Pry Tool<br>- 1 Socket Wrench 8mm or 5/16" (deep)</sub></details>|||
|
||||
|Subaru|Legacy 2015-18|EyeSight Driver Assistance[<sup>7</sup>](#footnotes)|Stock|0 mph|0 mph|[](##)|[](##)|<details><summary>Parts</summary><sub>- 1 OBD-C cable (2 ft)<br>- 1 Subaru A connector<br>- 1 comma four<br>- 1 comma power v3<br>- 1 harness box<br>- 1 mount<br><a href="https://comma.ai/shop/comma-3x?harness=Subaru Legacy 2015-18">Buy Here</a></sub></details><details><summary>Tools</summary><sub>- 1 Pry Tool<br>- 1 Socket Wrench 8mm or 5/16" (deep)</sub></details>|||
|
||||
|Subaru|Legacy 2020-22|All[<sup>7</sup>](#footnotes)|Stock|0 mph|0 mph|[](##)|[](##)|<details><summary>Parts</summary><sub>- 1 OBD-C cable (2 ft)<br>- 1 Subaru B connector<br>- 1 comma four<br>- 1 comma power v3<br>- 1 harness box<br>- 1 mount<br><a href="https://comma.ai/shop/comma-3x?harness=Subaru Legacy 2020-22">Buy Here</a></sub></details><details><summary>Tools</summary><sub>- 1 Pry Tool<br>- 1 Socket Wrench 8mm or 5/16" (deep)</sub></details>|||
|
||||
|Subaru|Outback 2015-17|EyeSight Driver Assistance[<sup>7</sup>](#footnotes)|Stock|0 mph|0 mph|[](##)|[](##)|<details><summary>Parts</summary><sub>- 1 OBD-C cable (2 ft)<br>- 1 Subaru A connector<br>- 1 comma four<br>- 1 comma power v3<br>- 1 harness box<br>- 1 mount<br><a href="https://comma.ai/shop/comma-3x?harness=Subaru Outback 2015-17">Buy Here</a></sub></details><details><summary>Tools</summary><sub>- 1 Pry Tool<br>- 1 Socket Wrench 8mm or 5/16" (deep)</sub></details>|||
|
||||
|Subaru|Outback 2018-19|EyeSight Driver Assistance[<sup>7</sup>](#footnotes)|Stock|0 mph|0 mph|[](##)|[](##)|<details><summary>Parts</summary><sub>- 1 OBD-C cable (2 ft)<br>- 1 Subaru A connector<br>- 1 comma four<br>- 1 comma power v3<br>- 1 harness box<br>- 1 mount<br><a href="https://comma.ai/shop/comma-3x?harness=Subaru Outback 2018-19">Buy Here</a></sub></details><details><summary>Tools</summary><sub>- 1 Pry Tool<br>- 1 Socket Wrench 8mm or 5/16" (deep)</sub></details>|||
|
||||
|Subaru|Outback 2020-22|All[<sup>7</sup>](#footnotes)|Stock|0 mph|0 mph|[](##)|[](##)|<details><summary>Parts</summary><sub>- 1 OBD-C cable (2 ft)<br>- 1 Subaru B connector<br>- 1 comma four<br>- 1 comma power v3<br>- 1 harness box<br>- 1 mount<br><a href="https://comma.ai/shop/comma-3x?harness=Subaru Outback 2020-22">Buy Here</a></sub></details><details><summary>Tools</summary><sub>- 1 Pry Tool<br>- 1 Socket Wrench 8mm or 5/16" (deep)</sub></details>|||
|
||||
|Subaru|XV 2018-19|EyeSight Driver Assistance[<sup>7</sup>](#footnotes)|Stock|0 mph|0 mph|[](##)|[](##)|<details><summary>Parts</summary><sub>- 1 OBD-C cable (2 ft)<br>- 1 Subaru A connector<br>- 1 comma four<br>- 1 comma power v3<br>- 1 harness box<br>- 1 mount<br><a href="https://comma.ai/shop/comma-3x?harness=Subaru XV 2018-19">Buy Here</a></sub></details><details><summary>Tools</summary><sub>- 1 Pry Tool<br>- 1 Socket Wrench 8mm or 5/16" (deep)</sub></details>|<a href="https://youtu.be/Agww7oE1k-s?t=26" target="_blank"><img height="18px" src="assets/icon-youtube.svg" /></a>||
|
||||
|Subaru|XV 2020-21|EyeSight Driver Assistance[<sup>7</sup>](#footnotes)|Stock|0 mph|0 mph|[](##)|[](##)|<details><summary>Parts</summary><sub>- 1 OBD-C cable (2 ft)<br>- 1 Subaru A connector<br>- 1 comma four<br>- 1 comma power v3<br>- 1 harness box<br>- 1 mount<br><a href="https://comma.ai/shop/comma-3x?harness=Subaru XV 2020-21">Buy Here</a></sub></details><details><summary>Tools</summary><sub>- 1 Pry Tool<br>- 1 Socket Wrench 8mm or 5/16" (deep)</sub></details>|||
|
||||
|Subaru|XV 2018-19|EyeSight Driver Assistance[<sup>7</sup>](#footnotes)|openpilot available[<sup>1,8</sup>](#footnotes)|0 mph|0 mph|[](##)|[](##)|<details><summary>Parts</summary><sub>- 1 OBD-C cable (2 ft)<br>- 1 Subaru A connector<br>- 1 comma four<br>- 1 comma power v3<br>- 1 harness box<br>- 1 mount<br><a href="https://comma.ai/shop/comma-3x?harness=Subaru XV 2018-19">Buy Here</a></sub></details><details><summary>Tools</summary><sub>- 1 Pry Tool<br>- 1 Socket Wrench 8mm or 5/16" (deep)</sub></details>|<a href="https://youtu.be/Agww7oE1k-s?t=26" target="_blank"><img height="18px" src="assets/icon-youtube.svg" /></a>||
|
||||
|Subaru|XV 2020-21|EyeSight Driver Assistance[<sup>7</sup>](#footnotes)|openpilot available[<sup>1,8</sup>](#footnotes)|0 mph|0 mph|[](##)|[](##)|<details><summary>Parts</summary><sub>- 1 OBD-C cable (2 ft)<br>- 1 Subaru A connector<br>- 1 comma four<br>- 1 comma power v3<br>- 1 harness box<br>- 1 mount<br><a href="https://comma.ai/shop/comma-3x?harness=Subaru XV 2020-21">Buy Here</a></sub></details><details><summary>Tools</summary><sub>- 1 Pry Tool<br>- 1 Socket Wrench 8mm or 5/16" (deep)</sub></details>|||
|
||||
|Škoda|Fabia 2022-23[<sup>15</sup>](#footnotes)|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[<sup>1,16</sup>](#footnotes)|0 mph|0 mph|[](##)|[](##)|<details><summary>Parts</summary><sub>- 1 OBD-C cable (2 ft)<br>- 1 VW J533 connector<br>- 1 comma four<br>- 1 harness box<br>- 1 long OBD-C cable (9.5 ft)<br>- 1 mount<br><a href="https://comma.ai/shop/comma-3x?harness=Škoda Fabia 2022-23">Buy Here</a></sub></details>[<sup>17</sup>](#footnotes)|||
|
||||
|Škoda|Kamiq 2021-23[<sup>13,15</sup>](#footnotes)|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[<sup>1,16</sup>](#footnotes)|0 mph|0 mph|[](##)|[](##)|<details><summary>Parts</summary><sub>- 1 OBD-C cable (2 ft)<br>- 1 VW J533 connector<br>- 1 comma four<br>- 1 harness box<br>- 1 long OBD-C cable (9.5 ft)<br>- 1 mount<br><a href="https://comma.ai/shop/comma-3x?harness=Škoda Kamiq 2021-23">Buy Here</a></sub></details>[<sup>17</sup>](#footnotes)|||
|
||||
|Škoda[<sup>12</sup>](#footnotes)|Karoq 2019-23[<sup>15</sup>](#footnotes)|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[<sup>1,16</sup>](#footnotes)|0 mph|0 mph|[](##)|[](##)|<details><summary>Parts</summary><sub>- 1 OBD-C cable (2 ft)<br>- 1 VW J533 connector<br>- 1 comma four<br>- 1 harness box<br>- 1 long OBD-C cable (9.5 ft)<br>- 1 mount<br><a href="https://comma.ai/shop/comma-3x?harness=Škoda Karoq 2019-23">Buy Here</a></sub></details>|||
|
||||
@@ -335,8 +334,6 @@ A supported vehicle is one that just works when you install a comma device. All
|
||||
|Volkswagen[<sup>12</sup>](#footnotes)|Golf R 2015-19|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[<sup>1,16</sup>](#footnotes)|0 mph|0 mph|[](##)|[](##)|<details><summary>Parts</summary><sub>- 1 OBD-C cable (2 ft)<br>- 1 VW J533 connector<br>- 1 comma four<br>- 1 harness box<br>- 1 long OBD-C cable (9.5 ft)<br>- 1 mount<br><a href="https://comma.ai/shop/comma-3x?harness=Volkswagen Golf R 2015-19">Buy Here</a></sub></details>|||
|
||||
|Volkswagen[<sup>12</sup>](#footnotes)|Golf SportsVan 2015-20|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[<sup>1,16</sup>](#footnotes)|0 mph|0 mph|[](##)|[](##)|<details><summary>Parts</summary><sub>- 1 OBD-C cable (2 ft)<br>- 1 VW J533 connector<br>- 1 comma four<br>- 1 harness box<br>- 1 long OBD-C cable (9.5 ft)<br>- 1 mount<br><a href="https://comma.ai/shop/comma-3x?harness=Volkswagen Golf SportsVan 2015-20">Buy Here</a></sub></details>|||
|
||||
|Volkswagen[<sup>12</sup>](#footnotes)|Grand California 2019-24|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[<sup>1,16</sup>](#footnotes)|0 mph|31 mph|[](##)|[](##)|<details><summary>Parts</summary><sub>- 1 OBD-C cable (2 ft)<br>- 1 VW J533 connector<br>- 1 comma four<br>- 1 harness box<br>- 1 long OBD-C cable (9.5 ft)<br>- 1 mount<br><a href="https://comma.ai/shop/comma-3x?harness=Volkswagen Grand California 2019-24">Buy Here</a></sub></details>|<a href="https://youtu.be/4100gLeabmo" target="_blank"><img height="18px" src="assets/icon-youtube.svg" /></a>||
|
||||
|Volkswagen[<sup>12</sup>](#footnotes)|ID.4 2021-23|Adaptive Cruise Control (ACC) & Lane Assist|openpilot[<sup>16</sup>](#footnotes)|0 mph|0 mph|[](##)|[](##)|<details><summary>Parts</summary><sub>- 1 OBD-C cable (2 ft)<br>- 1 VW J533 connector<br>- 1 comma four<br>- 1 harness box<br>- 1 long OBD-C cable (9.5 ft)<br>- 1 mount<br><a href="https://comma.ai/shop/comma-3x?harness=Volkswagen ID.4 2021-23">Buy Here</a></sub></details>|||
|
||||
|Volkswagen[<sup>12</sup>](#footnotes)|ID.4 2024-25|Adaptive Cruise Control (ACC) & Lane Assist|openpilot[<sup>16</sup>](#footnotes)|0 mph|0 mph|[](##)|[](##)|<details><summary>Parts</summary><sub>- 1 OBD-C cable (2 ft)<br>- 1 VW J533 connector<br>- 1 comma four<br>- 1 harness box<br>- 1 long OBD-C cable (9.5 ft)<br>- 1 mount<br><a href="https://comma.ai/shop/comma-3x?harness=Volkswagen ID.4 2024-25">Buy Here</a></sub></details>|||
|
||||
|Volkswagen[<sup>12</sup>](#footnotes)|Jetta 2019-23|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[<sup>1,16</sup>](#footnotes)|0 mph|0 mph|[](##)|[](##)|<details><summary>Parts</summary><sub>- 1 OBD-C cable (2 ft)<br>- 1 VW J533 connector<br>- 1 comma four<br>- 1 harness box<br>- 1 long OBD-C cable (9.5 ft)<br>- 1 mount<br><a href="https://comma.ai/shop/comma-3x?harness=Volkswagen Jetta 2019-23">Buy Here</a></sub></details>|||
|
||||
|Volkswagen[<sup>12</sup>](#footnotes)|Jetta GLI 2021-23|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[<sup>1,16</sup>](#footnotes)|0 mph|0 mph|[](##)|[](##)|<details><summary>Parts</summary><sub>- 1 OBD-C cable (2 ft)<br>- 1 VW J533 connector<br>- 1 comma four<br>- 1 harness box<br>- 1 long OBD-C cable (9.5 ft)<br>- 1 mount<br><a href="https://comma.ai/shop/comma-3x?harness=Volkswagen Jetta GLI 2021-23">Buy Here</a></sub></details>|||
|
||||
|Volkswagen|Passat 2015-22[<sup>14</sup>](#footnotes)|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[<sup>1,16</sup>](#footnotes)|0 mph|0 mph|[](##)|[](##)|<details><summary>Parts</summary><sub>- 1 OBD-C cable (2 ft)<br>- 1 VW J533 connector<br>- 1 comma four<br>- 1 harness box<br>- 1 long OBD-C cable (9.5 ft)<br>- 1 mount<br><a href="https://comma.ai/shop/comma-3x?harness=Volkswagen Passat 2015-22">Buy Here</a></sub></details>|||
|
||||
|
||||
@@ -0,0 +1,76 @@
|
||||
Metadata-Version: 2.4
|
||||
Name: msgq
|
||||
Version: 0.0.1
|
||||
Summary: Lock-free IPC pub/sub message queue
|
||||
Author: comma.ai
|
||||
License: MIT
|
||||
Classifier: Natural Language :: English
|
||||
Classifier: Programming Language :: Python :: 3
|
||||
Classifier: Topic :: System :: Hardware
|
||||
Requires-Python: >=3.11
|
||||
Description-Content-Type: text/markdown
|
||||
Provides-Extra: dev
|
||||
Requires-Dist: setuptools; extra == "dev"
|
||||
Requires-Dist: Cython; extra == "dev"
|
||||
Requires-Dist: scons; extra == "dev"
|
||||
Requires-Dist: ruff; extra == "dev"
|
||||
Requires-Dist: cppcheck; extra == "dev"
|
||||
Requires-Dist: cpplint; extra == "dev"
|
||||
Requires-Dist: codespell; extra == "dev"
|
||||
Requires-Dist: ty; extra == "dev"
|
||||
Requires-Dist: lefthook; extra == "dev"
|
||||
|
||||
# MSGQ: A lock free single producer multi consumer message queue
|
||||
|
||||
## What is this library?
|
||||
MSGQ is a generic high performance IPC pub sub system with a single publisher and multiple subscribers. It uses a ring buffer in shared memory to efficiently read and write data. Each read requires a copy. Writing can be done without a copy, as long as the size of the data is known in advance. This library also provides a spoofed implementation that can be used for deterministic testing, and visionipc, an IPC system specifically for large contiguous buffers (like images/video).
|
||||
|
||||
## Storage
|
||||
The storage for the queue consists of an area of metadata, and the actual buffer. The metadata contains:
|
||||
|
||||
1. A counter to the number of readers that are active
|
||||
2. A pointer to the head of the queue for writing. From now on referred to as *write pointer*
|
||||
3. A cycle counter for the writer. This counter is incremented when the writer wraps around
|
||||
4. N pointers, pointing to the current read position for all the readers. From now on referred to as *read pointer*
|
||||
5. N counters, counting the number of cycles for all the readers
|
||||
6. N booleans, indicating validity for all the readers. From now on referred to as *validity flag*
|
||||
|
||||
The counter and the pointer are both 32 bit values, packed into 64 bit so they can be read and written atomically.
|
||||
|
||||
The data buffer is a ring buffer. All messages are prefixed by an 8 byte size field, followed by the data. A size of -1 indicates a wrap-around, and means the next message is stored at the beginning of the buffer.
|
||||
|
||||
|
||||
## Writing
|
||||
Writing involves the following steps:
|
||||
|
||||
1. Check if the area that is to be written overlaps with any of the read pointers, mark those readers as invalid by clearing the validity flag.
|
||||
2. Write the message
|
||||
3. Increase the write pointer by the size of the message
|
||||
|
||||
In case there is not enough space at the end of the buffer, a special empty message with a prefix of -1 is written. The cycle counter is incremented by one. In this case step 1 will check there are no read pointers pointing to the remainder of the buffer. Then another write cycle will start with the actual message.
|
||||
|
||||
There always needs to be 8 bytes of empty space at the end of the buffer. By doing this there is always space to write the -1.
|
||||
|
||||
## Reset reader
|
||||
When the reader is lagging too much behind the read pointer becomes invalid and no longer points to the beginning of a valid message. To reset a reader to the current write pointer, the following steps are performed:
|
||||
|
||||
1. Set valid flag
|
||||
2. Set read cycle counter to that of the writer
|
||||
3. Set read pointer to write pointer
|
||||
|
||||
## Reading
|
||||
Reading involves the following steps:
|
||||
|
||||
1. Read the size field at the current read pointer
|
||||
2. Read the validity flag
|
||||
3. Copy the data out of the buffer
|
||||
4. Increase the read pointer by the size of the message
|
||||
5. Check the validity flag again
|
||||
|
||||
Before starting the copy, the valid flag is checked. This is to prevent a race condition where the size prefix was invalid, and the read could read outside of the buffer. Make sure that step 1 and 2 are not reordered by your compiler or CPU.
|
||||
|
||||
If a writer overwrites the data while it's being copied out, the data will be invalid. Therefore the validity flag is also checked after reading it. The order of step 4 and 5 does not matter.
|
||||
|
||||
If at steps 2 or 5 the validity flag is not set, the reader is reset. Any data that was already read is discarded. After the reader is reset, the reading starts from the beginning.
|
||||
|
||||
If a message with size -1 is encountered, step 3 and 4 are replaced by increasing the cycle counter and setting the read pointer to the beginning of the buffer. After that another read is performed.
|
||||
@@ -0,0 +1,17 @@
|
||||
README.md
|
||||
pyproject.toml
|
||||
msgq/__init__.py
|
||||
msgq/ipc_pyx.so
|
||||
msgq.egg-info/PKG-INFO
|
||||
msgq.egg-info/SOURCES.txt
|
||||
msgq.egg-info/dependency_links.txt
|
||||
msgq.egg-info/requires.txt
|
||||
msgq.egg-info/top_level.txt
|
||||
msgq/tests/__init__.py
|
||||
msgq/tests/test_fake.py
|
||||
msgq/tests/test_messaging.py
|
||||
msgq/tests/test_poller.py
|
||||
msgq/visionipc/__init__.py
|
||||
msgq/visionipc/visionipc_pyx.so
|
||||
msgq/visionipc/tests/__init__.py
|
||||
msgq/visionipc/tests/test_visionipc.py
|
||||
@@ -0,0 +1 @@
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
|
||||
[dev]
|
||||
setuptools
|
||||
Cython
|
||||
scons
|
||||
ruff
|
||||
cppcheck
|
||||
cpplint
|
||||
codespell
|
||||
ty
|
||||
lefthook
|
||||
@@ -0,0 +1 @@
|
||||
msgq
|
||||
+192
-345
@@ -1,9 +1,12 @@
|
||||
/* Generated by Cython 3.2.9 */
|
||||
/* Generated by Cython 3.2.4 */
|
||||
|
||||
/* BEGIN: Cython Metadata
|
||||
{
|
||||
"distutils": {
|
||||
"depends": [],
|
||||
"depends": [
|
||||
"msgq/impl_fake.h",
|
||||
"msgq/ipc.h"
|
||||
],
|
||||
"language": "c++",
|
||||
"name": "msgq.ipc_pyx",
|
||||
"sources": [
|
||||
@@ -36,8 +39,8 @@ END: Cython Metadata */
|
||||
#elif PY_VERSION_HEX < 0x03080000
|
||||
#error Cython requires Python 3.8+.
|
||||
#else
|
||||
#define __PYX_ABI_VERSION "3_2_9"
|
||||
#define CYTHON_HEX_VERSION 0x030209F0
|
||||
#define __PYX_ABI_VERSION "3_2_4"
|
||||
#define CYTHON_HEX_VERSION 0x030204F0
|
||||
#define CYTHON_FUTURE_DIVISION 1
|
||||
/* CModulePreamble */
|
||||
#include <stddef.h>
|
||||
@@ -919,39 +922,28 @@ enum __Pyx_ReferenceSharing {
|
||||
#else
|
||||
#define __Pyx_IS_UNIQUELY_REFERENCED(o, sharing) (((void)o), ((void)sharing), 0)
|
||||
#endif
|
||||
#if __PYX_LIMITED_VERSION_HEX >= 0x030d0000
|
||||
#define __Pyx_PyList_GetItemRef(o, i) PyList_GetItemRef(o, i)
|
||||
#elif CYTHON_AVOID_BORROWED_REFS || CYTHON_AVOID_THREAD_UNSAFE_BORROWED_REFS
|
||||
#if CYTHON_COMPILING_IN_LIMITED_API || !CYTHON_ASSUME_SAFE_MACROS
|
||||
#if CYTHON_AVOID_BORROWED_REFS || CYTHON_AVOID_THREAD_UNSAFE_BORROWED_REFS
|
||||
#if __PYX_LIMITED_VERSION_HEX >= 0x030d0000
|
||||
#define __Pyx_PyList_GetItemRef(o, i) PyList_GetItemRef(o, i)
|
||||
#elif CYTHON_COMPILING_IN_LIMITED_API || !CYTHON_ASSUME_SAFE_MACROS
|
||||
#define __Pyx_PyList_GetItemRef(o, i) (likely((i) >= 0) ? PySequence_GetItem(o, i) : (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL))
|
||||
#else
|
||||
#define __Pyx_PyList_GetItemRef(o, i) PySequence_ITEM(o, i)
|
||||
#endif
|
||||
#elif CYTHON_COMPILING_IN_LIMITED_API || !(CYTHON_ASSUME_SAFE_MACROS && CYTHON_ASSUME_SAFE_SIZE)
|
||||
#define __Pyx_PyList_GetItemRef(o, i) __Pyx_XNewRef(PyList_GetItem(o, i))
|
||||
#else
|
||||
#define __Pyx_PyList_GetItemRef(o, i) (likely(__Pyx_is_valid_index(i, PyList_GET_SIZE(o))) ?\
|
||||
__Pyx_NewRef(PyList_GET_ITEM(o, i)) : (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL))
|
||||
#endif
|
||||
#if CYTHON_AVOID_BORROWED_REFS || CYTHON_COMPILING_IN_LIMITED_API
|
||||
#define __Pyx_PyList_GET_ITEM_REF(o, i, unsafe_shared) ((void)(unsafe_shared),\
|
||||
__Pyx_PyList_GetItemRef(o, i))
|
||||
#elif CYTHON_AVOID_THREAD_UNSAFE_BORROWED_REFS
|
||||
#if CYTHON_ASSUME_SAFE_MACROS
|
||||
#define __Pyx_PyList_GET_ITEM_REF(o, i, unsafe_shared) (\
|
||||
__Pyx_IS_UNIQUELY_REFERENCED(o, unsafe_shared) ?\
|
||||
__Pyx_NewRef(PyList_GET_ITEM(o, i)) : __Pyx_PyList_GetItemRef(o, i))
|
||||
#elif CYTHON_COMPILING_IN_LIMITED_API || !CYTHON_ASSUME_SAFE_MACROS
|
||||
#if __PYX_LIMITED_VERSION_HEX >= 0x030d0000
|
||||
#define __Pyx_PyList_GetItemRef(o, i) PyList_GetItemRef(o, i)
|
||||
#else
|
||||
#define __Pyx_PyList_GET_ITEM_REF(o, i, unsafe_shared) (\
|
||||
__Pyx_IS_UNIQUELY_REFERENCED(o, unsafe_shared) ?\
|
||||
__Pyx_XNewRef(PyList_GetItem(o, i)) : __Pyx_PyList_GetItemRef(o, i))
|
||||
#define __Pyx_PyList_GetItemRef(o, i) __Pyx_XNewRef(PyList_GetItem(o, i))
|
||||
#endif
|
||||
#elif CYTHON_ASSUME_SAFE_MACROS
|
||||
#define __Pyx_PyList_GET_ITEM_REF(o, i, unsafe_shared) ((void)(unsafe_shared),\
|
||||
__Pyx_NewRef(PyList_GET_ITEM(o, i)))
|
||||
#else
|
||||
#define __Pyx_PyList_GET_ITEM_REF(o, i, unsafe_shared) ((void)(unsafe_shared),\
|
||||
__Pyx_XNewRef(PyList_GetItem(o, i)))
|
||||
#define __Pyx_PyList_GetItemRef(o, i) __Pyx_NewRef(PyList_GET_ITEM(o, i))
|
||||
#endif
|
||||
#if CYTHON_AVOID_THREAD_UNSAFE_BORROWED_REFS && !CYTHON_COMPILING_IN_LIMITED_API && CYTHON_ASSUME_SAFE_MACROS
|
||||
#define __Pyx_PyList_GetItemRefFast(o, i, unsafe_shared) (__Pyx_IS_UNIQUELY_REFERENCED(o, unsafe_shared) ?\
|
||||
__Pyx_NewRef(PyList_GET_ITEM(o, i)) : __Pyx_PyList_GetItemRef(o, i))
|
||||
#else
|
||||
#define __Pyx_PyList_GetItemRefFast(o, i, unsafe_shared) __Pyx_PyList_GetItemRef(o, i)
|
||||
#endif
|
||||
#if __PYX_LIMITED_VERSION_HEX >= 0x030d0000
|
||||
#define __Pyx_PyDict_GetItemRef(dict, key, result) PyDict_GetItemRef(dict, key, result)
|
||||
@@ -1873,10 +1865,10 @@ static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int
|
||||
#define __Pyx_KwargsAsDict_FASTCALL __Pyx_KwargsAsDict_VARARGS
|
||||
#endif
|
||||
#define __Pyx_ArgsSlice_VARARGS(args, start, stop) PyTuple_GetSlice(args, start, stop)
|
||||
#if CYTHON_METH_FASTCALL
|
||||
#if CYTHON_METH_FASTCALL || (CYTHON_COMPILING_IN_CPYTHON && CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS)
|
||||
#define __Pyx_ArgsSlice_FASTCALL(args, start, stop) __Pyx_PyTuple_FromArray(args + start, stop - start)
|
||||
#else
|
||||
#define __Pyx_ArgsSlice_FASTCALL __Pyx_ArgsSlice_VARARGS
|
||||
#define __Pyx_ArgsSlice_FASTCALL(args, start, stop) PyTuple_GetSlice(args, start, stop)
|
||||
#endif
|
||||
|
||||
/* py_dict_items.proto (used by OwnedDictNext) */
|
||||
@@ -2176,20 +2168,6 @@ void __Pyx_default_placement_construct(T* x) {
|
||||
new (static_cast<void*>(x)) T();
|
||||
}
|
||||
|
||||
/* DeallocKeepAlive.proto */
|
||||
#if CYTHON_COMPILING_IN_CPYTHON_FREETHREADING
|
||||
#define __Pyx_DeallocKeepAliveBegin(o) do {\
|
||||
_Py_atomic_store_uintptr_relaxed(&(o)->ob_tid, _Py_ThreadId());\
|
||||
_Py_atomic_store_uint32_relaxed(&(o)->ob_ref_local, 1);\
|
||||
_Py_atomic_store_ssize_relaxed(&(o)->ob_ref_shared, 0);\
|
||||
} while (0)
|
||||
#define __Pyx_DeallocKeepAliveEnd(o)\
|
||||
_Py_atomic_store_uint32_relaxed(&(o)->ob_ref_local, 0)
|
||||
#else
|
||||
#define __Pyx_DeallocKeepAliveBegin(o) __Pyx_SET_REFCNT(o, Py_REFCNT(o) + 1)
|
||||
#define __Pyx_DeallocKeepAliveEnd(o) __Pyx_SET_REFCNT(o, Py_REFCNT(o) - 1)
|
||||
#endif
|
||||
|
||||
/* CallTypeTraverse.proto */
|
||||
#if !CYTHON_USE_TYPE_SPECS || (!CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x03090000)
|
||||
#define __Pyx_call_type_traverse(o, always_call, visit, arg) 0
|
||||
@@ -2766,7 +2744,7 @@ typedef struct {
|
||||
std::string __pyx_k__3;
|
||||
PyObject *__pyx_tuple[5];
|
||||
PyObject *__pyx_codeobj_tab[32];
|
||||
PyObject *__pyx_string_tab[158];
|
||||
PyObject *__pyx_string_tab[157];
|
||||
PyObject *__pyx_number_tab[4];
|
||||
/* #### Code section: module_state_contents ### */
|
||||
/* CommonTypesMetaclass.module_state_decls */
|
||||
@@ -2864,108 +2842,107 @@ static __pyx_mstatetype * const __pyx_mstate_global = &__pyx_mstate_global_stati
|
||||
#define __pyx_n_u_SubSocket_setTimeout __pyx_string_tab[53]
|
||||
#define __pyx_n_u_address __pyx_string_tab[54]
|
||||
#define __pyx_n_u_all_readers_updated __pyx_string_tab[55]
|
||||
#define __pyx_n_u_annotate __pyx_string_tab[56]
|
||||
#define __pyx_n_u_asyncio_coroutines __pyx_string_tab[57]
|
||||
#define __pyx_n_u_clear __pyx_string_tab[58]
|
||||
#define __pyx_n_u_cline_in_traceback __pyx_string_tab[59]
|
||||
#define __pyx_n_u_conflate __pyx_string_tab[60]
|
||||
#define __pyx_n_u_connect __pyx_string_tab[61]
|
||||
#define __pyx_n_u_context __pyx_string_tab[62]
|
||||
#define __pyx_n_u_data __pyx_string_tab[63]
|
||||
#define __pyx_n_u_deadline __pyx_string_tab[64]
|
||||
#define __pyx_n_u_decode __pyx_string_tab[65]
|
||||
#define __pyx_n_u_delete_fake_prefix __pyx_string_tab[66]
|
||||
#define __pyx_n_u_doc __pyx_string_tab[67]
|
||||
#define __pyx_n_u_enabled __pyx_string_tab[68]
|
||||
#define __pyx_n_u_endpoint __pyx_string_tab[69]
|
||||
#define __pyx_n_u_event __pyx_string_tab[70]
|
||||
#define __pyx_n_u_events __pyx_string_tab[71]
|
||||
#define __pyx_n_u_func __pyx_string_tab[72]
|
||||
#define __pyx_n_u_get_fake_prefix __pyx_string_tab[73]
|
||||
#define __pyx_n_u_getstate __pyx_string_tab[74]
|
||||
#define __pyx_n_u_identifier __pyx_string_tab[75]
|
||||
#define __pyx_n_u_init __pyx_string_tab[76]
|
||||
#define __pyx_n_u_interval __pyx_string_tab[77]
|
||||
#define __pyx_n_u_is_coroutine __pyx_string_tab[78]
|
||||
#define __pyx_n_u_items __pyx_string_tab[79]
|
||||
#define __pyx_n_u_length __pyx_string_tab[80]
|
||||
#define __pyx_n_u_m __pyx_string_tab[81]
|
||||
#define __pyx_n_u_main __pyx_string_tab[82]
|
||||
#define __pyx_n_u_message __pyx_string_tab[83]
|
||||
#define __pyx_n_u_metaclass __pyx_string_tab[84]
|
||||
#define __pyx_n_u_module __pyx_string_tab[85]
|
||||
#define __pyx_n_u_monotonic __pyx_string_tab[86]
|
||||
#define __pyx_n_u_mro_entries __pyx_string_tab[87]
|
||||
#define __pyx_n_u_msg __pyx_string_tab[88]
|
||||
#define __pyx_n_u_msgq_ipc_pyx __pyx_string_tab[89]
|
||||
#define __pyx_n_u_name __pyx_string_tab[90]
|
||||
#define __pyx_n_u_non_blocking __pyx_string_tab[91]
|
||||
#define __pyx_n_u_override __pyx_string_tab[92]
|
||||
#define __pyx_n_u_peek __pyx_string_tab[93]
|
||||
#define __pyx_n_u_poll __pyx_string_tab[94]
|
||||
#define __pyx_n_u_pop __pyx_string_tab[95]
|
||||
#define __pyx_n_u_prefix __pyx_string_tab[96]
|
||||
#define __pyx_n_u_prepare __pyx_string_tab[97]
|
||||
#define __pyx_n_u_ptr __pyx_string_tab[98]
|
||||
#define __pyx_n_u_pyx_state __pyx_string_tab[99]
|
||||
#define __pyx_n_u_pyx_vtable __pyx_string_tab[100]
|
||||
#define __pyx_n_u_qualname __pyx_string_tab[101]
|
||||
#define __pyx_n_u_r __pyx_string_tab[102]
|
||||
#define __pyx_n_u_receive __pyx_string_tab[103]
|
||||
#define __pyx_n_u_reduce __pyx_string_tab[104]
|
||||
#define __pyx_n_u_reduce_cython __pyx_string_tab[105]
|
||||
#define __pyx_n_u_reduce_ex __pyx_string_tab[106]
|
||||
#define __pyx_n_u_registerSocket __pyx_string_tab[107]
|
||||
#define __pyx_n_u_result __pyx_string_tab[108]
|
||||
#define __pyx_n_u_s __pyx_string_tab[109]
|
||||
#define __pyx_n_u_segment_size __pyx_string_tab[110]
|
||||
#define __pyx_n_u_self __pyx_string_tab[111]
|
||||
#define __pyx_n_u_send __pyx_string_tab[112]
|
||||
#define __pyx_n_u_set __pyx_string_tab[113]
|
||||
#define __pyx_n_u_setTimeout __pyx_string_tab[114]
|
||||
#define __pyx_n_u_set_fake_prefix __pyx_string_tab[115]
|
||||
#define __pyx_n_u_set_name __pyx_string_tab[116]
|
||||
#define __pyx_n_u_setdefault __pyx_string_tab[117]
|
||||
#define __pyx_n_u_setstate __pyx_string_tab[118]
|
||||
#define __pyx_n_u_setstate_cython __pyx_string_tab[119]
|
||||
#define __pyx_n_u_sleep __pyx_string_tab[120]
|
||||
#define __pyx_n_u_socket __pyx_string_tab[121]
|
||||
#define __pyx_n_u_sockets __pyx_string_tab[122]
|
||||
#define __pyx_n_u_suffix __pyx_string_tab[123]
|
||||
#define __pyx_n_u_super __pyx_string_tab[124]
|
||||
#define __pyx_n_u_sz __pyx_string_tab[125]
|
||||
#define __pyx_n_u_t __pyx_string_tab[126]
|
||||
#define __pyx_n_u_term __pyx_string_tab[127]
|
||||
#define __pyx_n_u_test __pyx_string_tab[128]
|
||||
#define __pyx_n_u_time __pyx_string_tab[129]
|
||||
#define __pyx_n_u_timeout __pyx_string_tab[130]
|
||||
#define __pyx_n_u_toggle_fake_events __pyx_string_tab[131]
|
||||
#define __pyx_n_u_values __pyx_string_tab[132]
|
||||
#define __pyx_n_u_wait __pyx_string_tab[133]
|
||||
#define __pyx_n_u_wait_for_one_event __pyx_string_tab[134]
|
||||
#define __pyx_n_u_wait_for_readers __pyx_string_tab[135]
|
||||
#define __pyx_kp_b_ __pyx_string_tab[136]
|
||||
#define __pyx_kp_b_127_0_0_1 __pyx_string_tab[137]
|
||||
#define __pyx_kp_b_iso88591_4vU __pyx_string_tab[138]
|
||||
#define __pyx_kp_b_iso88591_4vV1 __pyx_string_tab[139]
|
||||
#define __pyx_kp_b_iso88591_4w __pyx_string_tab[140]
|
||||
#define __pyx_kp_b_iso88591_AQ __pyx_string_tab[141]
|
||||
#define __pyx_kp_b_iso88591_A_1 __pyx_string_tab[142]
|
||||
#define __pyx_kp_b_iso88591_A_iq_1L_85_awa __pyx_string_tab[143]
|
||||
#define __pyx_kp_b_iso88591_A_t_S_j_2Q_aq __pyx_string_tab[144]
|
||||
#define __pyx_kp_b_iso88591_EEaa_gXQgZz_FRS_r_A_gXQ_Qa_haq __pyx_string_tab[145]
|
||||
#define __pyx_kp_b_iso88591_G1A_avQ __pyx_string_tab[146]
|
||||
#define __pyx_kp_b_iso88591_J_G81G_ZvQ_r_A_gXQ_Qa_haq __pyx_string_tab[147]
|
||||
#define __pyx_kp_b_iso88591_Q __pyx_string_tab[148]
|
||||
#define __pyx_kp_b_iso88591_Q_WAXWA_XV7_9AQ __pyx_string_tab[149]
|
||||
#define __pyx_kp_b_iso88591_S_G5_a_r_A_gXQ_a_a __pyx_string_tab[150]
|
||||
#define __pyx_kp_b_iso88591__5 __pyx_string_tab[151]
|
||||
#define __pyx_kp_b_iso88591__6 __pyx_string_tab[152]
|
||||
#define __pyx_kp_b_iso88591_a_D_xq_t3a_Q_3ha_XRr_A_Q __pyx_string_tab[153]
|
||||
#define __pyx_kp_b_iso88591_a_e1A __pyx_string_tab[154]
|
||||
#define __pyx_kp_b_iso88591_a_t7_q_Q_y_G1A_WAQ_1 __pyx_string_tab[155]
|
||||
#define __pyx_kp_b_iso88591_aq __pyx_string_tab[156]
|
||||
#define __pyx_kp_b_iso88591_d __pyx_string_tab[157]
|
||||
#define __pyx_n_u_asyncio_coroutines __pyx_string_tab[56]
|
||||
#define __pyx_n_u_clear __pyx_string_tab[57]
|
||||
#define __pyx_n_u_cline_in_traceback __pyx_string_tab[58]
|
||||
#define __pyx_n_u_conflate __pyx_string_tab[59]
|
||||
#define __pyx_n_u_connect __pyx_string_tab[60]
|
||||
#define __pyx_n_u_context __pyx_string_tab[61]
|
||||
#define __pyx_n_u_data __pyx_string_tab[62]
|
||||
#define __pyx_n_u_deadline __pyx_string_tab[63]
|
||||
#define __pyx_n_u_decode __pyx_string_tab[64]
|
||||
#define __pyx_n_u_delete_fake_prefix __pyx_string_tab[65]
|
||||
#define __pyx_n_u_doc __pyx_string_tab[66]
|
||||
#define __pyx_n_u_enabled __pyx_string_tab[67]
|
||||
#define __pyx_n_u_endpoint __pyx_string_tab[68]
|
||||
#define __pyx_n_u_event __pyx_string_tab[69]
|
||||
#define __pyx_n_u_events __pyx_string_tab[70]
|
||||
#define __pyx_n_u_func __pyx_string_tab[71]
|
||||
#define __pyx_n_u_get_fake_prefix __pyx_string_tab[72]
|
||||
#define __pyx_n_u_getstate __pyx_string_tab[73]
|
||||
#define __pyx_n_u_identifier __pyx_string_tab[74]
|
||||
#define __pyx_n_u_init __pyx_string_tab[75]
|
||||
#define __pyx_n_u_interval __pyx_string_tab[76]
|
||||
#define __pyx_n_u_is_coroutine __pyx_string_tab[77]
|
||||
#define __pyx_n_u_items __pyx_string_tab[78]
|
||||
#define __pyx_n_u_length __pyx_string_tab[79]
|
||||
#define __pyx_n_u_m __pyx_string_tab[80]
|
||||
#define __pyx_n_u_main __pyx_string_tab[81]
|
||||
#define __pyx_n_u_message __pyx_string_tab[82]
|
||||
#define __pyx_n_u_metaclass __pyx_string_tab[83]
|
||||
#define __pyx_n_u_module __pyx_string_tab[84]
|
||||
#define __pyx_n_u_monotonic __pyx_string_tab[85]
|
||||
#define __pyx_n_u_mro_entries __pyx_string_tab[86]
|
||||
#define __pyx_n_u_msg __pyx_string_tab[87]
|
||||
#define __pyx_n_u_msgq_ipc_pyx __pyx_string_tab[88]
|
||||
#define __pyx_n_u_name __pyx_string_tab[89]
|
||||
#define __pyx_n_u_non_blocking __pyx_string_tab[90]
|
||||
#define __pyx_n_u_override __pyx_string_tab[91]
|
||||
#define __pyx_n_u_peek __pyx_string_tab[92]
|
||||
#define __pyx_n_u_poll __pyx_string_tab[93]
|
||||
#define __pyx_n_u_pop __pyx_string_tab[94]
|
||||
#define __pyx_n_u_prefix __pyx_string_tab[95]
|
||||
#define __pyx_n_u_prepare __pyx_string_tab[96]
|
||||
#define __pyx_n_u_ptr __pyx_string_tab[97]
|
||||
#define __pyx_n_u_pyx_state __pyx_string_tab[98]
|
||||
#define __pyx_n_u_pyx_vtable __pyx_string_tab[99]
|
||||
#define __pyx_n_u_qualname __pyx_string_tab[100]
|
||||
#define __pyx_n_u_r __pyx_string_tab[101]
|
||||
#define __pyx_n_u_receive __pyx_string_tab[102]
|
||||
#define __pyx_n_u_reduce __pyx_string_tab[103]
|
||||
#define __pyx_n_u_reduce_cython __pyx_string_tab[104]
|
||||
#define __pyx_n_u_reduce_ex __pyx_string_tab[105]
|
||||
#define __pyx_n_u_registerSocket __pyx_string_tab[106]
|
||||
#define __pyx_n_u_result __pyx_string_tab[107]
|
||||
#define __pyx_n_u_s __pyx_string_tab[108]
|
||||
#define __pyx_n_u_segment_size __pyx_string_tab[109]
|
||||
#define __pyx_n_u_self __pyx_string_tab[110]
|
||||
#define __pyx_n_u_send __pyx_string_tab[111]
|
||||
#define __pyx_n_u_set __pyx_string_tab[112]
|
||||
#define __pyx_n_u_setTimeout __pyx_string_tab[113]
|
||||
#define __pyx_n_u_set_fake_prefix __pyx_string_tab[114]
|
||||
#define __pyx_n_u_set_name __pyx_string_tab[115]
|
||||
#define __pyx_n_u_setdefault __pyx_string_tab[116]
|
||||
#define __pyx_n_u_setstate __pyx_string_tab[117]
|
||||
#define __pyx_n_u_setstate_cython __pyx_string_tab[118]
|
||||
#define __pyx_n_u_sleep __pyx_string_tab[119]
|
||||
#define __pyx_n_u_socket __pyx_string_tab[120]
|
||||
#define __pyx_n_u_sockets __pyx_string_tab[121]
|
||||
#define __pyx_n_u_suffix __pyx_string_tab[122]
|
||||
#define __pyx_n_u_super __pyx_string_tab[123]
|
||||
#define __pyx_n_u_sz __pyx_string_tab[124]
|
||||
#define __pyx_n_u_t __pyx_string_tab[125]
|
||||
#define __pyx_n_u_term __pyx_string_tab[126]
|
||||
#define __pyx_n_u_test __pyx_string_tab[127]
|
||||
#define __pyx_n_u_time __pyx_string_tab[128]
|
||||
#define __pyx_n_u_timeout __pyx_string_tab[129]
|
||||
#define __pyx_n_u_toggle_fake_events __pyx_string_tab[130]
|
||||
#define __pyx_n_u_values __pyx_string_tab[131]
|
||||
#define __pyx_n_u_wait __pyx_string_tab[132]
|
||||
#define __pyx_n_u_wait_for_one_event __pyx_string_tab[133]
|
||||
#define __pyx_n_u_wait_for_readers __pyx_string_tab[134]
|
||||
#define __pyx_kp_b_ __pyx_string_tab[135]
|
||||
#define __pyx_kp_b_127_0_0_1 __pyx_string_tab[136]
|
||||
#define __pyx_kp_b_iso88591_4vU __pyx_string_tab[137]
|
||||
#define __pyx_kp_b_iso88591_4vV1 __pyx_string_tab[138]
|
||||
#define __pyx_kp_b_iso88591_4w __pyx_string_tab[139]
|
||||
#define __pyx_kp_b_iso88591_AQ __pyx_string_tab[140]
|
||||
#define __pyx_kp_b_iso88591_A_1 __pyx_string_tab[141]
|
||||
#define __pyx_kp_b_iso88591_A_iq_1L_85_awa __pyx_string_tab[142]
|
||||
#define __pyx_kp_b_iso88591_A_t_S_j_2Q_aq __pyx_string_tab[143]
|
||||
#define __pyx_kp_b_iso88591_EEaa_gXQgZz_FRS_r_A_gXQ_Qa_haq __pyx_string_tab[144]
|
||||
#define __pyx_kp_b_iso88591_G1A_avQ __pyx_string_tab[145]
|
||||
#define __pyx_kp_b_iso88591_J_G81G_ZvQ_r_A_gXQ_Qa_haq __pyx_string_tab[146]
|
||||
#define __pyx_kp_b_iso88591_Q __pyx_string_tab[147]
|
||||
#define __pyx_kp_b_iso88591_Q_WAXWA_XV7_9AQ __pyx_string_tab[148]
|
||||
#define __pyx_kp_b_iso88591_S_G5_a_r_A_gXQ_a_a __pyx_string_tab[149]
|
||||
#define __pyx_kp_b_iso88591__5 __pyx_string_tab[150]
|
||||
#define __pyx_kp_b_iso88591__6 __pyx_string_tab[151]
|
||||
#define __pyx_kp_b_iso88591_a_D_xq_t3a_Q_3ha_XRr_A_Q __pyx_string_tab[152]
|
||||
#define __pyx_kp_b_iso88591_a_e1A __pyx_string_tab[153]
|
||||
#define __pyx_kp_b_iso88591_a_t7_q_Q_y_G1A_WAQ_1 __pyx_string_tab[154]
|
||||
#define __pyx_kp_b_iso88591_aq __pyx_string_tab[155]
|
||||
#define __pyx_kp_b_iso88591_d __pyx_string_tab[156]
|
||||
#define __pyx_float_1_0 __pyx_number_tab[0]
|
||||
#define __pyx_float_0_001 __pyx_number_tab[1]
|
||||
#define __pyx_int_0 __pyx_number_tab[2]
|
||||
@@ -2998,7 +2975,7 @@ static CYTHON_SMALL_CODE int __pyx_m_clear(PyObject *m) {
|
||||
Py_CLEAR(clear_module_state->__pyx_type_4msgq_7ipc_pyx_PubSocket);
|
||||
for (int i=0; i<5; ++i) { Py_CLEAR(clear_module_state->__pyx_tuple[i]); }
|
||||
for (int i=0; i<32; ++i) { Py_CLEAR(clear_module_state->__pyx_codeobj_tab[i]); }
|
||||
for (int i=0; i<158; ++i) { Py_CLEAR(clear_module_state->__pyx_string_tab[i]); }
|
||||
for (int i=0; i<157; ++i) { Py_CLEAR(clear_module_state->__pyx_string_tab[i]); }
|
||||
for (int i=0; i<4; ++i) { Py_CLEAR(clear_module_state->__pyx_number_tab[i]); }
|
||||
/* #### Code section: module_state_clear_contents ### */
|
||||
/* CommonTypesMetaclass.module_state_clear */
|
||||
@@ -3036,7 +3013,7 @@ static CYTHON_SMALL_CODE int __pyx_m_traverse(PyObject *m, visitproc visit, void
|
||||
Py_VISIT(traverse_module_state->__pyx_type_4msgq_7ipc_pyx_PubSocket);
|
||||
for (int i=0; i<5; ++i) { __Pyx_VISIT_CONST(traverse_module_state->__pyx_tuple[i]); }
|
||||
for (int i=0; i<32; ++i) { __Pyx_VISIT_CONST(traverse_module_state->__pyx_codeobj_tab[i]); }
|
||||
for (int i=0; i<158; ++i) { __Pyx_VISIT_CONST(traverse_module_state->__pyx_string_tab[i]); }
|
||||
for (int i=0; i<157; ++i) { __Pyx_VISIT_CONST(traverse_module_state->__pyx_string_tab[i]); }
|
||||
for (int i=0; i<4; ++i) { __Pyx_VISIT_CONST(traverse_module_state->__pyx_number_tab[i]); }
|
||||
/* #### Code section: module_state_traverse_contents ### */
|
||||
/* CommonTypesMetaclass.module_state_traverse */
|
||||
@@ -3480,7 +3457,7 @@ PyObject *__pyx_args, PyObject *__pyx_kwds
|
||||
{
|
||||
PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_self,&__pyx_mstate_global->__pyx_n_u_endpoint,0};
|
||||
const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
|
||||
if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 22, __pyx_L3_error)
|
||||
if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 22, __pyx_L3_error)
|
||||
if (__pyx_kwds_len > 0) {
|
||||
switch (__pyx_nargs) {
|
||||
case 2:
|
||||
@@ -3726,7 +3703,7 @@ PyObject *__pyx_args, PyObject *__pyx_kwds
|
||||
{
|
||||
PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_enabled,0};
|
||||
const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
|
||||
if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 32, __pyx_L3_error)
|
||||
if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 32, __pyx_L3_error)
|
||||
if (__pyx_kwds_len > 0) {
|
||||
switch (__pyx_nargs) {
|
||||
case 1:
|
||||
@@ -3848,7 +3825,7 @@ PyObject *__pyx_args, PyObject *__pyx_kwds
|
||||
{
|
||||
PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_prefix,0};
|
||||
const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
|
||||
if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 36, __pyx_L3_error)
|
||||
if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 36, __pyx_L3_error)
|
||||
if (__pyx_kwds_len > 0) {
|
||||
switch (__pyx_nargs) {
|
||||
case 1:
|
||||
@@ -4100,7 +4077,7 @@ PyObject *__pyx_args, PyObject *__pyx_kwds
|
||||
{
|
||||
PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_events,&__pyx_mstate_global->__pyx_n_u_timeout,0};
|
||||
const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
|
||||
if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 48, __pyx_L3_error)
|
||||
if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 48, __pyx_L3_error)
|
||||
if (__pyx_kwds_len > 0) {
|
||||
switch (__pyx_nargs) {
|
||||
case 2:
|
||||
@@ -4208,7 +4185,7 @@ static PyObject *__pyx_pf_4msgq_7ipc_pyx_8wait_for_one_event(CYTHON_UNUSED PyObj
|
||||
#endif
|
||||
if (__pyx_t_2 >= __pyx_temp) break;
|
||||
}
|
||||
__pyx_t_3 = __Pyx_PyList_GET_ITEM_REF(__pyx_t_1, __pyx_t_2, __Pyx_ReferenceSharing_OwnStrongReference);
|
||||
__pyx_t_3 = __Pyx_PyList_GetItemRefFast(__pyx_t_1, __pyx_t_2, __Pyx_ReferenceSharing_OwnStrongReference);
|
||||
++__pyx_t_2;
|
||||
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 50, __pyx_L1_error)
|
||||
__Pyx_GOTREF(__pyx_t_3);
|
||||
@@ -4539,7 +4516,7 @@ PyObject *__pyx_args, PyObject *__pyx_kwds
|
||||
{
|
||||
PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_timeout,0};
|
||||
const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
|
||||
if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 67, __pyx_L3_error)
|
||||
if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 67, __pyx_L3_error)
|
||||
if (__pyx_kwds_len > 0) {
|
||||
switch (__pyx_nargs) {
|
||||
case 1:
|
||||
@@ -4980,7 +4957,7 @@ PyObject *__pyx_args, PyObject *__pyx_kwds
|
||||
{
|
||||
PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_pyx_state,0};
|
||||
const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
|
||||
if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(1, 3, __pyx_L3_error)
|
||||
if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(1, 3, __pyx_L3_error)
|
||||
if (__pyx_kwds_len > 0) {
|
||||
switch (__pyx_nargs) {
|
||||
case 1:
|
||||
@@ -5090,7 +5067,7 @@ static int __pyx_pw_4msgq_7ipc_pyx_17SocketEventHandle_1__cinit__(PyObject *__py
|
||||
{
|
||||
PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_endpoint,&__pyx_mstate_global->__pyx_n_u_identifier,&__pyx_mstate_global->__pyx_n_u_override,0};
|
||||
const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_VARARGS(__pyx_kwds) : 0;
|
||||
if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 85, __pyx_L3_error)
|
||||
if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 85, __pyx_L3_error)
|
||||
if (__pyx_kwds_len > 0) {
|
||||
switch (__pyx_nargs) {
|
||||
case 3:
|
||||
@@ -5666,7 +5643,7 @@ PyObject *__pyx_args, PyObject *__pyx_kwds
|
||||
{
|
||||
PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_pyx_state,0};
|
||||
const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
|
||||
if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(1, 3, __pyx_L3_error)
|
||||
if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(1, 3, __pyx_L3_error)
|
||||
if (__pyx_kwds_len > 0) {
|
||||
switch (__pyx_nargs) {
|
||||
case 1:
|
||||
@@ -6042,7 +6019,7 @@ PyObject *__pyx_args, PyObject *__pyx_kwds
|
||||
{
|
||||
PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_pyx_state,0};
|
||||
const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
|
||||
if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(1, 3, __pyx_L3_error)
|
||||
if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(1, 3, __pyx_L3_error)
|
||||
if (__pyx_kwds_len > 0) {
|
||||
switch (__pyx_nargs) {
|
||||
case 1:
|
||||
@@ -6296,7 +6273,7 @@ PyObject *__pyx_args, PyObject *__pyx_kwds
|
||||
{
|
||||
PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_socket,0};
|
||||
const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
|
||||
if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 142, __pyx_L3_error)
|
||||
if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 142, __pyx_L3_error)
|
||||
if (__pyx_kwds_len > 0) {
|
||||
switch (__pyx_nargs) {
|
||||
case 1:
|
||||
@@ -6450,7 +6427,7 @@ PyObject *__pyx_args, PyObject *__pyx_kwds
|
||||
{
|
||||
PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_timeout,0};
|
||||
const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
|
||||
if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 146, __pyx_L3_error)
|
||||
if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 146, __pyx_L3_error)
|
||||
if (__pyx_kwds_len > 0) {
|
||||
switch (__pyx_nargs) {
|
||||
case 1:
|
||||
@@ -6798,7 +6775,7 @@ PyObject *__pyx_args, PyObject *__pyx_kwds
|
||||
{
|
||||
PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_pyx_state,0};
|
||||
const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
|
||||
if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(1, 3, __pyx_L3_error)
|
||||
if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(1, 3, __pyx_L3_error)
|
||||
if (__pyx_kwds_len > 0) {
|
||||
switch (__pyx_nargs) {
|
||||
case 1:
|
||||
@@ -7271,7 +7248,7 @@ PyObject *__pyx_args, PyObject *__pyx_kwds
|
||||
{
|
||||
PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_context,&__pyx_mstate_global->__pyx_n_u_endpoint,&__pyx_mstate_global->__pyx_n_u_address,&__pyx_mstate_global->__pyx_n_u_conflate,&__pyx_mstate_global->__pyx_n_u_segment_size,0};
|
||||
const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
|
||||
if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 186, __pyx_L3_error)
|
||||
if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 186, __pyx_L3_error)
|
||||
if (__pyx_kwds_len > 0) {
|
||||
switch (__pyx_nargs) {
|
||||
case 5:
|
||||
@@ -7616,7 +7593,7 @@ PyObject *__pyx_args, PyObject *__pyx_kwds
|
||||
{
|
||||
PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_timeout,0};
|
||||
const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
|
||||
if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 197, __pyx_L3_error)
|
||||
if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 197, __pyx_L3_error)
|
||||
if (__pyx_kwds_len > 0) {
|
||||
switch (__pyx_nargs) {
|
||||
case 1:
|
||||
@@ -7769,7 +7746,7 @@ PyObject *__pyx_args, PyObject *__pyx_kwds
|
||||
{
|
||||
PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_non_blocking,0};
|
||||
const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
|
||||
if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 201, __pyx_L3_error)
|
||||
if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 201, __pyx_L3_error)
|
||||
if (__pyx_kwds_len > 0) {
|
||||
switch (__pyx_nargs) {
|
||||
case 1:
|
||||
@@ -8124,7 +8101,7 @@ PyObject *__pyx_args, PyObject *__pyx_kwds
|
||||
{
|
||||
PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_pyx_state,0};
|
||||
const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
|
||||
if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(1, 3, __pyx_L3_error)
|
||||
if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(1, 3, __pyx_L3_error)
|
||||
if (__pyx_kwds_len > 0) {
|
||||
switch (__pyx_nargs) {
|
||||
case 1:
|
||||
@@ -8398,7 +8375,7 @@ PyObject *__pyx_args, PyObject *__pyx_kwds
|
||||
{
|
||||
PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_context,&__pyx_mstate_global->__pyx_n_u_endpoint,&__pyx_mstate_global->__pyx_n_u_segment_size,0};
|
||||
const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
|
||||
if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 228, __pyx_L3_error)
|
||||
if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 228, __pyx_L3_error)
|
||||
if (__pyx_kwds_len > 0) {
|
||||
switch (__pyx_nargs) {
|
||||
case 3:
|
||||
@@ -8686,7 +8663,7 @@ PyObject *__pyx_args, PyObject *__pyx_kwds
|
||||
{
|
||||
PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_data,0};
|
||||
const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
|
||||
if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 237, __pyx_L3_error)
|
||||
if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 237, __pyx_L3_error)
|
||||
if (__pyx_kwds_len > 0) {
|
||||
switch (__pyx_nargs) {
|
||||
case 1:
|
||||
@@ -9011,7 +8988,7 @@ PyObject *__pyx_args, PyObject *__pyx_kwds
|
||||
{
|
||||
PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_timeout,&__pyx_mstate_global->__pyx_n_u_interval,0};
|
||||
const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
|
||||
if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 250, __pyx_L3_error)
|
||||
if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 250, __pyx_L3_error)
|
||||
if (__pyx_kwds_len > 0) {
|
||||
switch (__pyx_nargs) {
|
||||
case 2:
|
||||
@@ -9418,7 +9395,7 @@ PyObject *__pyx_args, PyObject *__pyx_kwds
|
||||
{
|
||||
PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_pyx_state,0};
|
||||
const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
|
||||
if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(1, 3, __pyx_L3_error)
|
||||
if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(1, 3, __pyx_L3_error)
|
||||
if (__pyx_kwds_len > 0) {
|
||||
switch (__pyx_nargs) {
|
||||
case 1:
|
||||
@@ -9668,9 +9645,9 @@ static void __pyx_tp_dealloc_4msgq_7ipc_pyx_SocketEventHandle(PyObject *o) {
|
||||
{
|
||||
PyObject *etype, *eval, *etb;
|
||||
PyErr_Fetch(&etype, &eval, &etb);
|
||||
__Pyx_DeallocKeepAliveBegin(o);
|
||||
__Pyx_SET_REFCNT(o, Py_REFCNT(o) + 1);
|
||||
__pyx_pw_4msgq_7ipc_pyx_17SocketEventHandle_3__dealloc__(o);
|
||||
__Pyx_DeallocKeepAliveEnd(o);
|
||||
__Pyx_SET_REFCNT(o, Py_REFCNT(o) - 1);
|
||||
PyErr_Restore(etype, eval, etb);
|
||||
}
|
||||
PyTypeObject *tp = Py_TYPE(o);
|
||||
@@ -9833,9 +9810,9 @@ static void __pyx_tp_dealloc_4msgq_7ipc_pyx_Context(PyObject *o) {
|
||||
{
|
||||
PyObject *etype, *eval, *etb;
|
||||
PyErr_Fetch(&etype, &eval, &etb);
|
||||
__Pyx_DeallocKeepAliveBegin(o);
|
||||
__Pyx_SET_REFCNT(o, Py_REFCNT(o) + 1);
|
||||
__pyx_pw_4msgq_7ipc_pyx_7Context_5__dealloc__(o);
|
||||
__Pyx_DeallocKeepAliveEnd(o);
|
||||
__Pyx_SET_REFCNT(o, Py_REFCNT(o) - 1);
|
||||
PyErr_Restore(etype, eval, etb);
|
||||
}
|
||||
PyTypeObject *tp = Py_TYPE(o);
|
||||
@@ -9974,9 +9951,9 @@ static void __pyx_tp_dealloc_4msgq_7ipc_pyx_Poller(PyObject *o) {
|
||||
{
|
||||
PyObject *etype, *eval, *etb;
|
||||
PyErr_Fetch(&etype, &eval, &etb);
|
||||
__Pyx_DeallocKeepAliveBegin(o);
|
||||
__Pyx_SET_REFCNT(o, Py_REFCNT(o) + 1);
|
||||
__pyx_pw_4msgq_7ipc_pyx_6Poller_3__dealloc__(o);
|
||||
__Pyx_DeallocKeepAliveEnd(o);
|
||||
__Pyx_SET_REFCNT(o, Py_REFCNT(o) - 1);
|
||||
PyErr_Restore(etype, eval, etb);
|
||||
}
|
||||
Py_CLEAR(p->sub_sockets);
|
||||
@@ -10140,9 +10117,9 @@ static void __pyx_tp_dealloc_4msgq_7ipc_pyx_SubSocket(PyObject *o) {
|
||||
{
|
||||
PyObject *etype, *eval, *etb;
|
||||
PyErr_Fetch(&etype, &eval, &etb);
|
||||
__Pyx_DeallocKeepAliveBegin(o);
|
||||
__Pyx_SET_REFCNT(o, Py_REFCNT(o) + 1);
|
||||
__pyx_pw_4msgq_7ipc_pyx_9SubSocket_3__dealloc__(o);
|
||||
__Pyx_DeallocKeepAliveEnd(o);
|
||||
__Pyx_SET_REFCNT(o, Py_REFCNT(o) - 1);
|
||||
PyErr_Restore(etype, eval, etb);
|
||||
}
|
||||
PyTypeObject *tp = Py_TYPE(o);
|
||||
@@ -10278,9 +10255,9 @@ static void __pyx_tp_dealloc_4msgq_7ipc_pyx_PubSocket(PyObject *o) {
|
||||
{
|
||||
PyObject *etype, *eval, *etb;
|
||||
PyErr_Fetch(&etype, &eval, &etb);
|
||||
__Pyx_DeallocKeepAliveBegin(o);
|
||||
__Pyx_SET_REFCNT(o, Py_REFCNT(o) + 1);
|
||||
__pyx_pw_4msgq_7ipc_pyx_9PubSocket_3__dealloc__(o);
|
||||
__Pyx_DeallocKeepAliveEnd(o);
|
||||
__Pyx_SET_REFCNT(o, Py_REFCNT(o) - 1);
|
||||
PyErr_Restore(etype, eval, etb);
|
||||
}
|
||||
PyTypeObject *tp = Py_TYPE(o);
|
||||
@@ -11588,20 +11565,16 @@ static int __Pyx_InitCachedConstants(__pyx_mstatetype *__pyx_mstate) {
|
||||
{
|
||||
PyObject **table = __pyx_mstate->__pyx_tuple;
|
||||
for (Py_ssize_t i=0; i<5; ++i) {
|
||||
#if PY_VERSION_HEX >= 0x030F0000
|
||||
PyUnstable_SetImmortal(table[i]);
|
||||
#elif CYTHON_COMPILING_IN_CPYTHON_FREETHREADING
|
||||
if ((PY_SSIZE_T_MAX <= _Py_IMMORTAL_REFCNT_LOCAL)) break;
|
||||
#if CYTHON_COMPILING_IN_CPYTHON_FREETHREADING
|
||||
#if PY_VERSION_HEX < 0x030E0000
|
||||
if (_Py_IsOwnedByCurrentThread(table[i]) && Py_REFCNT(table[i]) == 1)
|
||||
#else
|
||||
if (PyUnstable_Object_IsUniquelyReferenced(table[i]))
|
||||
#endif
|
||||
{
|
||||
Py_SET_REFCNT(table[i], ((Py_ssize_t)_Py_IMMORTAL_REFCNT_LOCAL + 1));
|
||||
Py_SET_REFCNT(table[i], _Py_IMMORTAL_REFCNT_LOCAL);
|
||||
}
|
||||
#else
|
||||
if ((PY_SSIZE_T_MAX < _Py_IMMORTAL_INITIAL_REFCNT)) break;
|
||||
Py_SET_REFCNT(table[i], _Py_IMMORTAL_INITIAL_REFCNT);
|
||||
#endif
|
||||
}
|
||||
@@ -11618,31 +11591,31 @@ static int __Pyx_InitCachedConstants(__pyx_mstatetype *__pyx_mstate) {
|
||||
static int __Pyx_InitConstants(__pyx_mstatetype *__pyx_mstate) {
|
||||
CYTHON_UNUSED_VAR(__pyx_mstate);
|
||||
{
|
||||
const struct { const unsigned int length: 8; } index[] = {{0},{18},{4},{179},{2},{1},{8},{7},{6},{2},{9},{26},{50},{62},{14},{26},{5},{5},{7},{25},{27},{12},{5},{23},{25},{11},{10},{9},{10},{8},{17},{23},{6},{24},{26},{11},{21},{9},{27},{29},{29},{17},{14},{26},{20},{17},{35},{37},{9},{27},{29},{17},{17},{20},{7},{19},{12},{18},{5},{18},{8},{7},{7},{4},{8},{6},{18},{7},{7},{8},{5},{6},{8},{15},{12},{10},{8},{8},{13},{5},{6},{1},{8},{7},{13},{10},{9},{15},{3},{12},{8},{12},{8},{4},{4},{3},{6},{11},{3},{11},{14},{12},{1},{7},{10},{17},{13},{14},{6},{1},{12},{4},{4},{3},{10},{15},{12},{10},{12},{19},{5},{6},{7},{6},{5},{2},{1},{4},{8},{4},{7},{18},{6},{4},{18},{16},{0},{9},{13},{13},{14},{16},{16},{40},{65},{78},{26},{63},{9},{57},{56},{9},{9},{70},{16},{65},{9},{11}};
|
||||
#if (CYTHON_COMPRESS_STRINGS) == 2 /* compression: bz2 (1434 bytes) */
|
||||
const char* const cstring = "BZh91AY&SY\346\000:\002\000\000\313\377\377\177\377\277\273\177\277\376\365\257\367\177\325\277\377\377\366\300@@@@@@@@@@@@\000P\005>vU\206\200\001\245\0300h\204M)\371SO\023\323&S\rS\364\214P\332\201\2645\036\2204\3204\036\246\236\246F\207\251\246\032&\236Sm#\024\362C\200\000\000\000\000\000\0002\032\000\000\000\000\000\000\000\000i\222\021\030\251\241\342\206\010\320\321\243!\240\300\231\000\003&F\206\21522hh44\304\003\3248\000\000\000\000\000\000\003!\240\000\000\000\000\000\000\000\004\246\210&\221\223Bbh\231O(\302\236)\345\032\014\000h@\001\204\300\010di\261#\323H\375D\364\373\275\206>\263\303\321\341\035\037\364\361x\256I\210\234\202L\220\302L\035\000\230t$\315\236\t\342\017|\312$\"L\016\350|\226\247\035\010\326\023xM[\251 \366\251q\"SE\027b\021\t\023G\362\331\250[\024\\=,&\250S\035\364e\"w\365\370\242\275ak\334\027W_a\034\206#*(\274P\177#5\201\213\251\216\230\352V%\202\231a(\\\315v\233\2330\364f\350P0h@*\263J\233\t\t\255=\313\n\242\2604Bk\357I\225/\341\262\035y\340f\203$B ]\317\272\361\375$C<o\305}\342\265x\304\034\345\001\241\234\2326\374k\231\312\223\361\346\241=q>[3\326\0031{(\216\243%\033u\004aMS\250_\016\260\300\177\235=\006P\265Q\242\353H\\\243YM\034\312\004\254\372\324\360\030j\263\216j&g\221\242\271\264\025I;\226\275w\263Y\367\031\213\355\324\214\022\244\2057\272\377\3652\307\034\311\250c\227\025'\271\230\252\016\252\030\277\256\022A\304\202L<\210Z\326\272\361\321<\271\264\337\307|\312\335t%Uea\244\366wx\032\353Fb\025\25039\325v&\304\003\246\341L\320\260\3176\203\001\020Pv\016\262f*\260Fc1\030\316D\225\333e\361#;\0248r\350a\303\354\350\340\245n\025f\025y\027\t\306\353\310\030\304\302S\0176D\024\200\352sD0@T\005\001\236\205(\324fN0\332\021\257y\315\3471-Jz\311\356\254\022\323A\213\254Z\356\324\257a\213\337\230\344\344\315\177bC\341\265a*\315\257I4\206g\302\031-\327d`\322\3074\341\325\304\302\010\271\241\355\026P1;\265o\321\226~Myq\035,\034\234:\243l\216k\345H)\t$\222\020\226\333\242\262\2115CL\312A\024\350\253I\3365!\347XT\030\226\322\016\265\t\204#""\032^E\212LV4\354\224\324\325\2643\032\024\250\355\ri*\352\276\346\021\272\034\272\271\223h\211g\"\270\375\270w\361\271l\267\0030\220\310\330\212\254\236P\205$\315\305q\255\220}K\207\177z3n\343\270\034\307[\207\217\301J5T4\371 \314\360d\262\242db\034\330\261$\300Cp\354\317^\036\354\270\264>\225~\274\274\0043\3231\006\234\321\303j\034\253\201\356\371\370\237F\352\275/\316a\251\223n\353\275\360c\255\215\335\316y\357XX\020\314;\340\221\rv&\305v\354\250CgJ\346/\tWm6\347\020\311\352\367\234hw\266\\\353d\333\0324\013\270\355\033\361\265p\036\347\031\222\022v\256u\237\312\254\323\"\205xAoD&$\356\310&\335\271\332\256\207\235A\252'a0\267\223D\266\351\273\037\000\301\270\313w\221K\354yl-\306\010fXt\364\337r\013\373\340\345\272ZY4\027\205\221\267.\n\210\336\264\365\014\215\347<\336\324S\226\352r\356\337\264\326\212\246)\203rv{+\254\0364\365\311 _$K^&*\304\t\244\nmo\334\001P\270\002/e\325\212.Mb\331\316\2246%e\370Y\001\323mZ\"\334NY\236\"R\024\232:|1|\247\247\226f\250/*iL\332\364\205\240}t\337\260\301\241\304\350\242f\251\233\272\216\3665\352U\355\255j\340\337\033\231O\004\022LH$\022\222I\000Z\245\003\002\210.\322\257\000\354i\330~;\351z`V\276\2216a\326dB\276\2256\341\237Jf\317\\\203W0\004\361\256\233\214\037\013\006lx.\266\214\313\320\264K:\314\206#\265)\345,/\344\361\214\177?\340\353\244\204$\205\220\353\225\230\311\371\243a\333\227>\003\346\271nA\307-M\267\310\030A>\t[P\317\325\236\3206|\213/<G\006m\032\010\320\n\224\207#\276\320\355*h\"\201\006\003L\261^\263\371\027\261\007\231l\t\tQ\247\231>\375\260,\220\033P\221\215\302/\223\246\007\332\327\334\267I\002\326\351\201sl^9\003\221\004\022\211\326\305\2426\364\371vm\215\353'\340\355\337\270\362\0373\206\376\020\214\343\243\177\215\030\275c\324\002v\205\263\252[\217\340\326\372\325\316\303\301\212f\277/\365\321*_\021\227\354\371\272N+\037Nw\207\214U\213\037\227\242\352\034\251\250\310\245I\315.?\016hL\25494\361\351N\031(\345\201:;\364\333\341o\261\223[,\231=\227B\\\320N]\202\233\217\354\334\237C\020`RD,\004*1\212\002\242\204""\234\347\370\210\223\316\003\306]d\323\274\302SG\016\001\010A\255\231\177\305\334\221N\024$9\200\016\200\200";
|
||||
PyObject *data = __Pyx_DecompressString(cstring, 1434, 2);
|
||||
const struct { const unsigned int length: 8; } index[] = {{0},{18},{4},{179},{2},{1},{8},{7},{6},{2},{9},{26},{50},{62},{14},{26},{5},{5},{7},{25},{27},{12},{5},{23},{25},{11},{10},{9},{10},{8},{17},{23},{6},{24},{26},{11},{21},{9},{27},{29},{29},{17},{14},{26},{20},{17},{35},{37},{9},{27},{29},{17},{17},{20},{7},{19},{18},{5},{18},{8},{7},{7},{4},{8},{6},{18},{7},{7},{8},{5},{6},{8},{15},{12},{10},{8},{8},{13},{5},{6},{1},{8},{7},{13},{10},{9},{15},{3},{12},{8},{12},{8},{4},{4},{3},{6},{11},{3},{11},{14},{12},{1},{7},{10},{17},{13},{14},{6},{1},{12},{4},{4},{3},{10},{15},{12},{10},{12},{19},{5},{6},{7},{6},{5},{2},{1},{4},{8},{4},{7},{18},{6},{4},{18},{16},{0},{9},{13},{13},{14},{16},{16},{40},{65},{78},{26},{63},{9},{57},{56},{9},{9},{70},{16},{65},{9},{11}};
|
||||
#if (CYTHON_COMPRESS_STRINGS) == 2 /* compression: bz2 (1443 bytes) */
|
||||
const char* const cstring = "BZh91AY&SYP\223\323\246\000\000\313\377\377\177\377\277\273\177\277\376\365\257\367\177\325\277\377\377\366\300@@@@@@@@@@@@\000P\005>vU\250\024t\035wX\3520jz\204\324\312\236\325\017\023\323)\345=\023L\247\232Q\351\250\033H\036\2204\3204\032h\000z\232d\323F\236\221\355#$\362\201\251\242S\364\232j4z\236\210\364\201\2022d\311\210\0004\000\0001\006 4\003@\310\304d\032dB\021\252i\3456\240\332\200= 4h\000\000\000\032\000\000\000\000\032\000\365\016\000\000\000\000\000\000\000\310h\000\000\000\000\000\000\000\001)\242 \004\320\002\230OSD\321\241\220\006A\241\240\000\032i\241\240\001\2404\r\017P\323\375\352\261\374\035\276>\330\350\376\216\347r\244\230\211\310$\311\014$\301\306\t\207BL\327A<\001\354\231BB$\300\356\207\305fq\320\214\3417\204\324\325D\203\340\272\342d\246\222.\304\"\022&\347\363\031\264c\0272\036\353\nZ.\312\364\2472v\365we\340\272\327\006\345\3663Y?\202&.Y{5?S\035\302\335\3658\247\026\274m\005\315mIa,u\350\363N\214u\363\310)HE\270\321#j\n\271M\373\253\254\320)\252Y\265>\205\037>\270\202\030A)(D\"\006\032\276\357/\322D3\313\020\263@\260i\330\203\234\240u\363\223K\037Yflf\372\352\\V\200\247Fm6\200\3453a.,\241e\353\"`\221t\263\360\010\033lE\302\256\"\212\256\331u\034\271\314D\253T\227F\340\236O\215U\0035V\343j\211\243\314\334\260\340\n\324\235\313j\035\362k|\366b\312\373\250\275*$)\275V~\023+7\246MC\0348)=L\305(9\250b\316p \201\224@\206\n\003\233\363\303\"\243W\241\257\rr\024\252\247&\206\263XhU\244\240j\253\207\262\272\006g9\256\304\330\200t\333\0234-\227M\240\274D\024\016\301\335\246b\225z--#\t\310\222\253T\276T\\\305\006\314x\330p\376x\364Q\342\375\222\301\272X\366[WK!\306lm\265,\343\020\346\250\314qn\334\334\223\222s\036RRI\264\260\330#6\303w\222\304\267)\347'\256\230%\226\201\212\253+\253\237+\030b\307\334pp[g{!\357\324\257\2253k\022M!\231\357\206Z\336\254K\3320\266p\352\242a\004T\320\365\305j\006'Vm\2711\273\203><\203~\367'\016\2504\306\353%D\024BI$\204%\252\247\244<5\000\275!7\017?\335\032\022{\344)Q\314\303\010\321\207\033\t\211\000\344\302\213\010\254""\242b\254\313\246SSU\344f2)P\355\r\\\2259\254\251\204k\207*\246\324\331\"W\021N\037\345\375\254*Zk\320\314$24\242\225\213\312\020\244\231\271\025\031\331\007\350\266m\374\342\335{\325\003\230gp\342\321E\rJ\206\237\004\026\274\030\254hL\214\000\365\301\202\204`\002\014\323\253UZ\244\245\345\271\330&\354\334S\0101\322\270@at4\262F\0019;o\267\220\3715\322\364Yq~fM\257\234\366A\206v5\3659S\332\257\254\020\314;\336\221\rV\006\225V\274h!\256J\246,\tS\252\215W\010d\364\275\206\362\035\353\307\224\264\315\260\241\240]Gh\333\205t\336=N3$$\355M\312\357\036\231\246E\005;\001mD&$\356\310&t'].\236t\203R'a0\266\223D\265e\253\017\334`\326c\257\227E\225\235\026\026\262\3643+\371\231l\251\005\235\240r\275\374\254\232\013\032\264j\307E \210L\372\342p\204h4\227\030Z\\\014\247\004/\214\302&\024\006rQJ\325\243 5[\344\022Cs\272M\276\354\237<\222\270.\323\232\000\274\310\023\215\020\371\355\332\253Mq\277\r\200\244f1\000bk\371\017^R\025\262w\210\006\031\361i^\310\225\355L\205\367\026\n\013\305\214\313\000,\200vR\355\320\2662\016\010\344\022F2\241zD=\234+\204\251\326d\256n\336\223\264\266Q\004\223\022\t\004\244\222@\026\265A\202\210.\323\262\003\261\236\315a\262a\213+\262\210\230\303\253Q\n\312)5_vT\315u8\206m\300\023\302\234\265\027\275\365\205\270h\252\274\226\257.\270\225\312\3241\034\371O\031_g\007$\303\306\3579\311!\t!b:\341f1}\321\244\350K\225x\366\324\265\240\336\226f\325\313\030A=\022\2571\314\350\360\334+|\326\231L8\tt\245\005!\026'>\344N\213K\214!\025\022@vk}k\221de\332\235\326\260\250*J?X\366\272\341\3560ux\231\037\0037\275\255\007\307\326\371\033\260\316u\273\010;=s\264\261>\367aI\245xz\220^\323\337\327\2746\266\017_\237\203\357\nb&\256\014A9\306\266\r\344\343\361\017\010\n\331\027\215\264{b\303\251\357\267\235\213s\036n\256\377\356\001B\216\351G\344\377?\306[\276\356\030Gh[\227\217\271\305}/\331\352M\026,?\245\275\330\314\n\241\213&\237\036\225!\222\266Z\212\321\333\221\357\263\334\334\232\231g\317\347@\024\375ue\326D}_\256\026\366n\t\035\"4A\013L\244\200\264\2417=N\251\023z""\200yO\214\232\247\240\235%\233\001\010\206\306g\377\027rE8P\220P\223\323\246";
|
||||
PyObject *data = __Pyx_DecompressString(cstring, 1443, 2);
|
||||
if (unlikely(!data)) __PYX_ERR(0, 1, __pyx_L1_error)
|
||||
const char* const bytes = __Pyx_PyBytes_AsString(data);
|
||||
#if !CYTHON_ASSUME_SAFE_MACROS
|
||||
if (likely(bytes)); else { Py_DECREF(data); __PYX_ERR(0, 1, __pyx_L1_error) }
|
||||
#endif
|
||||
#elif (CYTHON_COMPRESS_STRINGS) != 0 /* compression: zlib (1327 bytes) */
|
||||
const char* const cstring = "x\332\215U\315o\023G\024o\334\324$\344\243r?\250\332\212j\322\002Q)\230\206\202HQEeAH\251\n\212q\013\010U\035\215w\337\256\207\254w63\263N\214\250\312q\216{\334\343\036s\3141G\216\034\367\350c\376\224\276\331\3358i\234Vu\344\335\347y_\277\367{\363^\036\202R\314\347\241O<\306\203X\002y$Bx$4\020\335c\232\334\035\352\236\010\tW\304\205\200wA2\r\301\220(-\271\243AZ\243\220l\254m\\\275\261z\203\260\320%\022^\200\243\025Qq\327\t\230R\240\210\360H7\346\201\346!\321\303\010T\223<\360\310P\304$\004p\211\026$B\273\343\016\272\007!Q\240\255@\226Y\030\n\3154\027!Ew\204\272L\\.1\t\037\200\365\276\317\002\005\315\333\344G\346\272\024M\301\345\212u\003\200\320>}\207\253Rr\373\312\337\242\022\"q\315J\327x\344\320h\270\323\304o(\260<\217\305\201&\024-\334\330\001J\211\033\027\361C\021^\305r\007\234\005\250ux\3105\245\n\002\257\t\003\0105q\n\200\244\013\304\021\341\000\244.\213bd\243\344Nt-#\304\023\222D\334\331\014\260\202\037,\177\241\257D,\035\270\203\225+GZr\2610\227\330`\030)D\247X{WW\267\271\356\221\273\"\324\260\243\253Ws\214\322)rPz\244@\336\024\3225\251\302v\365\327,\342\3421\031\342\360x\"@\251p\002`\262\024#\200\315RB\333R\330f\\?\210\2345)\205<|c\254\222\254\207H,\217\002\330\210\273\001W=\220\252\320o\210 \200\3529\tg|>\201\247\322D\370\252D\t>WX_G8\233\2401\315\t\341\224\350\307T\223\t\306J\026\004\350\311\\\204L\343\310E#\367HY5\351\350\000/\3321\265\245\204b\327\307\001\350\306p\007\277\367pr\350#\354\310c\360J\323\202\302\237pz\002\2308\230\204~\232\311D\t\235C\030\235\177\347\240\363_\034tN\226yt\200\263\0078{\235cu\353_y\037D\254q\004\245\335(\223\264QZ\3151N\026S\303\320\341\002#K\364\341!\250\342r98\032\200W\206j\311\034\3502g\023S{\001\272T\020\234\362&c<\014\315\\k\356\242\316\305g\000\030\330c\233@#\t\036\337\241\324\025\016\245\325\344c_\"\301\321\331\222V<\260\033^\034\242\205\017\372\237~\376!\023\224\243\237\346\036\007yx\221m\0109`\001\345\212\216\301s\r}\025@\350\353^\237\322>\303\002h\277X\253`\005\315\212\265F\361\323\027n\034\330C\201L\210\220c\372""\276\024\010\022\267\001\240\005\256%\273\231\232\325f\2424d}4\307\005D\273\001R\215+C\340\202\221\010\314\216\240\035\200HD\207\300\361\0351\211\366\221F\300\326\277\252\303\212\003m\211\260 \266b\026\224qe\325\310\243\2257qE\306\007\260c\305\343S\206}\306\261\306}\355\367\261\000\252\370K\260K\321\316\200\275L\343+\241N\022l\017J\000(Uk\367\330\005\244\247\\F\244\027\"U\244\255\236*\3660\230\212#\274b/\265]m\224jP\030HcZ]\246\326\302\367\203\352Z\224]\307\336\305\240\354d\216\247\023\377\335\225\312\223\363\272r\375V\363[\374[y\2754\232\23637\314 \371-]:\372\361$\035k\266\363s\227w\255j\366\354\250~\326,'\237\247\255\264m\2653f\332\264\354k.Y\311\337\271\220\265\016j\365\327\334l\215\246g\315g\311J\362K6\267\273\272ws\177jTk$\347S\226ng,\257]\311\257\264\3364F\323\357\033\235\334N;Y-\303Pg\315\005\363\"}7\275\236\266G\365Y\363Q\276\260\2245F3\2636\343\245d*iX\223+\tK\266\362\332Z\276\306r\366*\177\365\347A\t\351\202\361\223gi;\365\263\347\273/\367?}s\371\355\375\374q\347`\372\314ki>D\204\365\305\322`4\263\230/^\314\332\031;\230Y4=\033\255,c>YOW\322\242\2243\346/\004:\310\332y\355\347\267U\215\353\311*\252\327\263\333\273\317\367\006\373\355\377\027x\312\"\376&\3018\037'\355\321\364\202y\232\264\320\366i\326\312\376\330\273c\t@\237/\263%\214\372l\357\311\376\2557\313o\0336\341\254\371\300|\217\246\005\303\013\246S\026_\302\270\231N\245\237duLs\032\004Sdg\230\371\334\327\273\rl\031\362~>\375}\267\221\327.\241\213\345j\336\334K\316$;\351V6eCh\363\235a\243\372\202i\037\324\347PF\344\226\317\257\314\263\344q\"\323\306hn~43oZ\007\326$\257}\2212\213\244n\000\233\333\262\3700\335h\272\2214\212\340\266\241\267\322\213e\360\031\363\236i\333\263a:e\363\256[\027\233\312\322\200\024\316\231\025\013\024\201eU\023\352\306M\226\376\006\246\025\314\316";
|
||||
PyObject *data = __Pyx_DecompressString(cstring, 1327, 1);
|
||||
#elif (CYTHON_COMPRESS_STRINGS) != 0 /* compression: zlib (1321 bytes) */
|
||||
const char* const cstring = "x\332\215U\315o\023G\024o\334\324$\344\243r?\250\332\212j\322\002Q)\230\206\202HQEeAH\251\n\212q\013\010U\035\215w\337\256\207\254w63\263N\214\250\312q\216{\334\343\036s\3141G\216\034\367\350c\376\224\276\331\3358i\234Vu\344\335\361\274\257\337\373\275\217<\004\245\230\317C\237x\214\007\261\004\362H\204\360Hh \272\3074\271;\324=\021\022\256\210\013\001\357\202d\032\202!QZrG\203\264J!\331X\333\270zc\365\006a\241K$\274\000G+\242\342\256\0230\245@\021\341\221n\314\003\315C\242\207\021\250&y\340\221\241\210I\010\340\022-H\204z\307\rt\017B\242@\333\003Yfa(4\323\\\204\024\315\021\3522q\271\304 |\000\326\372>\013\0244o\223\037\231\353RT\005\227+\326\r\000B\373\364\035\256\312\223\333W\376\026\225\020\211k\366t\215G\016\215\206;M\374\206\002\323\363X\034hBQ\303\215\035\240\224\270q\341?\024\341ULw\300Y\200R\207\207\\S\252 \360\2320\200P\023\247\000H\272@\034\021\016@\3522)F6J\356D\3272B<!I\304\235\315\0003\370\301\362\027\372J\304\322\201;\230\271r\244%\027\023s\211u\206\236B4\212\265wuu\233\353\036\271+B\r;\272z5\307(\235\"\006\245G\002\344M!]\223\",W\177\315\".\036\223.\016\257'\034\224\002'\000&\313c\004\260Y\236P\267<l3\256\037D\316\232\224B\036\276\321WI\326C$\226G\001l\304\335\200\253\036HU\3107D\020@\365\234\2043\276\237\300SI\"|UG\t>W\230_G8\233\2401\314\211\303)\336\217\211&\003\214\205,\010\320\222\271\010\231\306\221\213J\356\221\260*\322\321\0056\3321\261\245\204b\325\307\016\350\306p\007\277\367pr\350#\254\310c\360J\325\202\302\237pz\002\230\270\230\204~\232\312D\n\235C\030\235\177\347\240\363_\034tN\246yt\201\263\0078{\235cy\353_y\037D\254q\004\245\335(\223\26415\014\035.\320\233D=\036\202*\032\312\301q\000l\023\252%s\240\313\234M\014\347\005hQ\205u\312\356E\037\350\216\271V\335E\231\213\317\000\020\257\3076\201F\022<\276C\251+\034J\253i\307ZD\202\243\261%\252x`\005\2748D\r\037\364?\355\374\303\354)G;\315=\016\362\260y\255\0139`\001\345\212\216\301s\r}\025@\350\353^\237\322>\303\004h\277X\245`\017\232\025\253\214\342\247/\3348\260\227\002\347Z\204\034\303\367""\245@\220\270\001\0005p\025\331m\324\254\266\021\245!\353\243:.\035\332\r\220^\\\023\002\227\212D`v\354l\323G\":\004\216\357\210I\324\2174\002\266\366U\036\3668\320\226\010\013b+fA\351WV\305;Zs\023m1\276\200\035{<>YX[\034e\334\321~\037\023\240\212\277\004\273\010m\337\333\006\032\267\201:I\260\275(\001\340\251Z\265\307\232\216\236\322\200H/D\252\010[=U\354\2413\025G\330V/\265]g\224jP\350HcX]\206\326\302\367\203\252-\312\252c\355bPv\032\307\023\211\377\342J\341\311\031]\271~\253\371-\376\255\274^\032M\317\231\033f\220\374\226.\035\375x\222\216%\333\371\271\313\273V4{vT?k\226\223\317\323V\332\266\322\0313mZ\3665\227\254\344\357\\\310Z\007\265\372kn\266F\323\263\346\263d%\371%\233\333]\335\273\271?5\2525\222\363)K\2673\226\327\256\344WZo\032\243\351\367\215Nn\247\235\254\226\241\253\263\346\202y\221\276\233^O\333\243\372\254\371(_X\312\032\243\231Y\033\361R2\2254\254\312\225\204%[ym-_c9{\225\277\372\363\240\204t\301\370\311\263\264\235\372\331\363\335\227\373\237\276\271\374\366~\376\270s0}\346\2654\037\"\302\372b\2510\232Y\314\027/f\355\214\035\314,\232\236\365V\2461\237\254\247+i\221\312\031\363\027\002\035d\355\274\366\363\333*\307\365d\025\305\353\331\355\335\347{\203\375\366\377s<e\021\177\223\240\237\217\223\366hz\301<MZ\250\3734ke\177\354\335\261\004\240\315\227\331\022z}\266\367d\377\326\233\345\267\r\033p\326|`\276G\325\202\341\005\323)\223/a\334L\247\322O\262:\2069\r\202)\2423\214|\356\353\335\006\226\014y?\237\376\276\333\310k\227\320\304r5o\356%g\222\235t+\233\262.\264\371\316\260Q}\301\264\017\352sxF\344\226\317\257\314\263\344q\"\323\306hn~43oZ\007V%\257}\2212\213\244n\000\213\333\262\3700\334h\272\2214\n\347\266\240\267\322\213\245\363\031\363\236i\333\273a:e\343\256[\023\033\312\322\200\024\316\231\025\013\024\201eU\021\352\306M\226\376\006\2378\307\370";
|
||||
PyObject *data = __Pyx_DecompressString(cstring, 1321, 1);
|
||||
if (unlikely(!data)) __PYX_ERR(0, 1, __pyx_L1_error)
|
||||
const char* const bytes = __Pyx_PyBytes_AsString(data);
|
||||
#if !CYTHON_ASSUME_SAFE_MACROS
|
||||
if (likely(bytes)); else { Py_DECREF(data); __PYX_ERR(0, 1, __pyx_L1_error) }
|
||||
#endif
|
||||
#else /* compression: none (2483 bytes) */
|
||||
const char* const bytes = "Messaging failure NoneNote that Cython is deliberately stricter than PEP-484 and rejects subclasses of builtin types. If you need to pass subclasses then set the 'annotation_typing' directive to False.: ?add_notedisableenablegcisenabledmsgq_repo/msgq/ipc_pyx.pyxno default __reduce__ due to non-trivial __cinit__self.event cannot be converted to a Python object for pickling<stringsource>subscriber did not connectutf-8with ContextContext.__reduce_cython__Context.__setstate_cython__Context.termEventEvent.__reduce_cython__Event.__setstate_cython__Event.clearEvent.peekEvent.setEvent.waitIpcErrorIpcError.__init__MultiplePublishersErrorPollerPoller.__reduce_cython__Poller.__setstate_cython__Poller.pollPoller.registerSocketPubSocketPubSocket.__reduce_cython__PubSocket.__setstate_cython__PubSocket.all_readers_updatedPubSocket.connectPubSocket.sendPubSocket.wait_for_readers__Pyx_PyDict_NextRefSocketEventHandleSocketEventHandle.__reduce_cython__SocketEventHandle.__setstate_cython__SubSocketSubSocket.__reduce_cython__SubSocket.__setstate_cython__SubSocket.connectSubSocket.receiveSubSocket.setTimeoutaddressall_readers_updated__annotate__asyncio.coroutinesclearcline_in_tracebackconflateconnectcontextdatadeadlinedecodedelete_fake_prefix__doc__enabledendpointeventevents__func__get_fake_prefix__getstate__identifier__init__interval_is_coroutineitemslengthm__main__message__metaclass____module__monotonic__mro_entries__msgmsgq.ipc_pyx__name__non_blockingoverridepeekpollpopprefix__prepare__ptr__pyx_state__pyx_vtable____qualname__rreceive__reduce____reduce_cython____reduce_ex__registerSocketresultssegment_sizeselfsendsetsetTimeoutset_fake_prefix__set_name__setdefault__setstate____setstate_cython__sleepsocketsocketssuffixsupersztterm__test__timetimeouttoggle_fake_eventsvalueswaitwait_for_one_eventwait_for_readers127.0.0.1\200!\330\004\013\2104\210v\220U\230!\200!\330\004\013\2104\210v\220V\2301\200!\330\004\013\2104\210w\320\026*\250!\200!\330\t\n\330\006\n\210'\220\033\230A\230Q\200!\330""\004\010\210\004\210A\330\004\010\210\013\2201\320\000$\240A\340\002\006\200i\210q\330\004\t\210\032\2201\220L\240\013\2508\2605\270\001\330\002\021\220\035\230a\230w\240a\320\002,\320,A\300\021\330\004\017\210t\220:\230S\240\002\240!\330\004\n\210$\210j\230\003\2302\230Q\330\006\t\210\024\320\r!\240\021\330\010\t\330\006\n\210&\220\001\220\021\330\004\n\210,\220a\220q\320\002E\320Ea\320a|\320|}\340\t\n\330\006\n\210$\210g\220X\230Q\230g\240Z\250z\270\031\300*\310F\320RS\340\004\007\200r\210\023\210A\330\006\016\210g\220X\230Q\330\010\016\320\016%\240Q\240a\340\010\016\210h\220a\220q\200!\330\004\010\210\014\220G\2301\230A\330\004\010\210\007\210\177\230a\230v\240Q\320\002J\310!\330\004\010\210\004\210G\2208\2301\230G\240:\250Z\260v\270Q\340\004\007\200r\210\023\210A\330\006\016\210g\220X\230Q\330\010\016\320\016%\240Q\240a\340\010\016\210h\220a\220q\200\001\330\004\n\210+\220Q\320\002\025\220Q\330\004\r\210W\220A\220X\230W\240A\240^\260>\300\021\330\004\016\320\016\"\240!\240:\250X\260V\2707\300'\310\021\310!\330\004\t\210\022\2109\220A\220Q\200!\330\004\r\210S\220\001\220\021\330\004\010\210\004\210G\2205\230\001\230\027\240\006\240a\340\004\007\200r\210\023\210A\330\006\016\210g\220X\230Q\330\010\016\210a\340\010\016\210a\200\001\330\026)\250\021\250!\200\001\330\002\035\230\\\250\021\320\002&\240a\340\t\n\330\006\014\210D\220\007\220x\230q\240\001\340\004\007\200t\2103\210a\330\006\r\210Q\340\006\013\2103\210h\220a\330\006\n\210#\210X\220R\220r\230\021\330\013\014\330\010\014\210A\340\006\r\210Q\320\002\036\230a\330\004\010\210\006\210e\2201\220A\200!\330\004\016\210a\330\004\021\220\021\340\t\n\330\006\017\210t\2207\230%\230q\240\001\340\004\010\210\005\210Q\330\006\017\210y\230\001\330\006\014\210G\2201\220A\330\006\r\210W\220A\220Q\340\004\013\2101\200\001\330\026&\240a\240q\200!\330\004\010\210\006\210d\220!";
|
||||
#else /* compression: none (2471 bytes) */
|
||||
const char* const bytes = "Messaging failure NoneNote that Cython is deliberately stricter than PEP-484 and rejects subclasses of builtin types. If you need to pass subclasses then set the 'annotation_typing' directive to False.: ?add_notedisableenablegcisenabledmsgq_repo/msgq/ipc_pyx.pyxno default __reduce__ due to non-trivial __cinit__self.event cannot be converted to a Python object for pickling<stringsource>subscriber did not connectutf-8with ContextContext.__reduce_cython__Context.__setstate_cython__Context.termEventEvent.__reduce_cython__Event.__setstate_cython__Event.clearEvent.peekEvent.setEvent.waitIpcErrorIpcError.__init__MultiplePublishersErrorPollerPoller.__reduce_cython__Poller.__setstate_cython__Poller.pollPoller.registerSocketPubSocketPubSocket.__reduce_cython__PubSocket.__setstate_cython__PubSocket.all_readers_updatedPubSocket.connectPubSocket.sendPubSocket.wait_for_readers__Pyx_PyDict_NextRefSocketEventHandleSocketEventHandle.__reduce_cython__SocketEventHandle.__setstate_cython__SubSocketSubSocket.__reduce_cython__SubSocket.__setstate_cython__SubSocket.connectSubSocket.receiveSubSocket.setTimeoutaddressall_readers_updatedasyncio.coroutinesclearcline_in_tracebackconflateconnectcontextdatadeadlinedecodedelete_fake_prefix__doc__enabledendpointeventevents__func__get_fake_prefix__getstate__identifier__init__interval_is_coroutineitemslengthm__main__message__metaclass____module__monotonic__mro_entries__msgmsgq.ipc_pyx__name__non_blockingoverridepeekpollpopprefix__prepare__ptr__pyx_state__pyx_vtable____qualname__rreceive__reduce____reduce_cython____reduce_ex__registerSocketresultssegment_sizeselfsendsetsetTimeoutset_fake_prefix__set_name__setdefault__setstate____setstate_cython__sleepsocketsocketssuffixsupersztterm__test__timetimeouttoggle_fake_eventsvalueswaitwait_for_one_eventwait_for_readers127.0.0.1\200!\330\004\013\2104\210v\220U\230!\200!\330\004\013\2104\210v\220V\2301\200!\330\004\013\2104\210w\320\026*\250!\200!\330\t\n\330\006\n\210'\220\033\230A\230Q\200!\330\004\010\210""\004\210A\330\004\010\210\013\2201\320\000$\240A\340\002\006\200i\210q\330\004\t\210\032\2201\220L\240\013\2508\2605\270\001\330\002\021\220\035\230a\230w\240a\320\002,\320,A\300\021\330\004\017\210t\220:\230S\240\002\240!\330\004\n\210$\210j\230\003\2302\230Q\330\006\t\210\024\320\r!\240\021\330\010\t\330\006\n\210&\220\001\220\021\330\004\n\210,\220a\220q\320\002E\320Ea\320a|\320|}\340\t\n\330\006\n\210$\210g\220X\230Q\230g\240Z\250z\270\031\300*\310F\320RS\340\004\007\200r\210\023\210A\330\006\016\210g\220X\230Q\330\010\016\320\016%\240Q\240a\340\010\016\210h\220a\220q\200!\330\004\010\210\014\220G\2301\230A\330\004\010\210\007\210\177\230a\230v\240Q\320\002J\310!\330\004\010\210\004\210G\2208\2301\230G\240:\250Z\260v\270Q\340\004\007\200r\210\023\210A\330\006\016\210g\220X\230Q\330\010\016\320\016%\240Q\240a\340\010\016\210h\220a\220q\200\001\330\004\n\210+\220Q\320\002\025\220Q\330\004\r\210W\220A\220X\230W\240A\240^\260>\300\021\330\004\016\320\016\"\240!\240:\250X\260V\2707\300'\310\021\310!\330\004\t\210\022\2109\220A\220Q\200!\330\004\r\210S\220\001\220\021\330\004\010\210\004\210G\2205\230\001\230\027\240\006\240a\340\004\007\200r\210\023\210A\330\006\016\210g\220X\230Q\330\010\016\210a\340\010\016\210a\200\001\330\026)\250\021\250!\200\001\330\002\035\230\\\250\021\320\002&\240a\340\t\n\330\006\014\210D\220\007\220x\230q\240\001\340\004\007\200t\2103\210a\330\006\r\210Q\340\006\013\2103\210h\220a\330\006\n\210#\210X\220R\220r\230\021\330\013\014\330\010\014\210A\340\006\r\210Q\320\002\036\230a\330\004\010\210\006\210e\2201\220A\200!\330\004\016\210a\330\004\021\220\021\340\t\n\330\006\017\210t\2207\230%\230q\240\001\340\004\010\210\005\210Q\330\006\017\210y\230\001\330\006\014\210G\2201\220A\330\006\r\210W\220A\220Q\340\004\013\2101\200\001\330\026&\240a\240q\200!\330\004\010\210\006\210d\220!";
|
||||
PyObject *data = NULL;
|
||||
CYTHON_UNUSED_VAR(__Pyx_DecompressString);
|
||||
#endif
|
||||
PyObject **stringtab = __pyx_mstate->__pyx_string_tab;
|
||||
Py_ssize_t pos = 0;
|
||||
for (int i = 0; i < 136; i++) {
|
||||
for (int i = 0; i < 135; i++) {
|
||||
Py_ssize_t bytes_length = index[i].length;
|
||||
PyObject *string = PyUnicode_DecodeUTF8(bytes + pos, bytes_length, NULL);
|
||||
if (likely(string) && i >= 18) PyUnicode_InternInPlace(&string);
|
||||
@@ -11653,7 +11626,7 @@ const char* const bytes = "Messaging failure NoneNote that Cython is deliberatel
|
||||
stringtab[i] = string;
|
||||
pos += bytes_length;
|
||||
}
|
||||
for (int i = 136; i < 158; i++) {
|
||||
for (int i = 135; i < 157; i++) {
|
||||
Py_ssize_t bytes_length = index[i].length;
|
||||
PyObject *string = PyBytes_FromStringAndSize(bytes + pos, bytes_length);
|
||||
stringtab[i] = string;
|
||||
@@ -11664,29 +11637,25 @@ const char* const bytes = "Messaging failure NoneNote that Cython is deliberatel
|
||||
}
|
||||
}
|
||||
Py_XDECREF(data);
|
||||
for (Py_ssize_t i = 0; i < 158; i++) {
|
||||
for (Py_ssize_t i = 0; i < 157; i++) {
|
||||
if (unlikely(PyObject_Hash(stringtab[i]) == -1)) {
|
||||
__PYX_ERR(0, 1, __pyx_L1_error)
|
||||
}
|
||||
}
|
||||
#if CYTHON_IMMORTAL_CONSTANTS
|
||||
{
|
||||
PyObject **table = stringtab + 136;
|
||||
PyObject **table = stringtab + 135;
|
||||
for (Py_ssize_t i=0; i<22; ++i) {
|
||||
#if PY_VERSION_HEX >= 0x030F0000
|
||||
PyUnstable_SetImmortal(table[i]);
|
||||
#elif CYTHON_COMPILING_IN_CPYTHON_FREETHREADING
|
||||
if ((PY_SSIZE_T_MAX <= _Py_IMMORTAL_REFCNT_LOCAL)) break;
|
||||
#if CYTHON_COMPILING_IN_CPYTHON_FREETHREADING
|
||||
#if PY_VERSION_HEX < 0x030E0000
|
||||
if (_Py_IsOwnedByCurrentThread(table[i]) && Py_REFCNT(table[i]) == 1)
|
||||
#else
|
||||
if (PyUnstable_Object_IsUniquelyReferenced(table[i]))
|
||||
#endif
|
||||
{
|
||||
Py_SET_REFCNT(table[i], ((Py_ssize_t)_Py_IMMORTAL_REFCNT_LOCAL + 1));
|
||||
Py_SET_REFCNT(table[i], _Py_IMMORTAL_REFCNT_LOCAL);
|
||||
}
|
||||
#else
|
||||
if ((PY_SSIZE_T_MAX < _Py_IMMORTAL_INITIAL_REFCNT)) break;
|
||||
Py_SET_REFCNT(table[i], _Py_IMMORTAL_INITIAL_REFCNT);
|
||||
#endif
|
||||
}
|
||||
@@ -11713,20 +11682,16 @@ const char* const bytes = "Messaging failure NoneNote that Cython is deliberatel
|
||||
{
|
||||
PyObject **table = __pyx_mstate->__pyx_number_tab;
|
||||
for (Py_ssize_t i=0; i<4; ++i) {
|
||||
#if PY_VERSION_HEX >= 0x030F0000
|
||||
PyUnstable_SetImmortal(table[i]);
|
||||
#elif CYTHON_COMPILING_IN_CPYTHON_FREETHREADING
|
||||
if ((PY_SSIZE_T_MAX <= _Py_IMMORTAL_REFCNT_LOCAL)) break;
|
||||
#if CYTHON_COMPILING_IN_CPYTHON_FREETHREADING
|
||||
#if PY_VERSION_HEX < 0x030E0000
|
||||
if (_Py_IsOwnedByCurrentThread(table[i]) && Py_REFCNT(table[i]) == 1)
|
||||
#else
|
||||
if (PyUnstable_Object_IsUniquelyReferenced(table[i]))
|
||||
#endif
|
||||
{
|
||||
Py_SET_REFCNT(table[i], ((Py_ssize_t)_Py_IMMORTAL_REFCNT_LOCAL + 1));
|
||||
Py_SET_REFCNT(table[i], _Py_IMMORTAL_REFCNT_LOCAL);
|
||||
}
|
||||
#else
|
||||
if ((PY_SSIZE_T_MAX < _Py_IMMORTAL_INITIAL_REFCNT)) break;
|
||||
Py_SET_REFCNT(table[i], _Py_IMMORTAL_INITIAL_REFCNT);
|
||||
#endif
|
||||
}
|
||||
@@ -12158,11 +12123,11 @@ __Pyx_PyTuple_FromArray(PyObject *const *src, Py_ssize_t n)
|
||||
res = PyTuple_New(n);
|
||||
if (unlikely(res == NULL)) return NULL;
|
||||
for (i = 0; i < n; i++) {
|
||||
Py_INCREF(src[i]);
|
||||
if (unlikely(__Pyx_PyTuple_SET_ITEM(res, i, src[i]) < (0))) {
|
||||
Py_DECREF(res);
|
||||
return NULL;
|
||||
}
|
||||
Py_INCREF(src[i]);
|
||||
}
|
||||
return res;
|
||||
}
|
||||
@@ -12448,7 +12413,7 @@ static PyObject* __Pyx_PyObject_FastCall_fallback(PyObject *func, PyObject * con
|
||||
#elif CYTHON_COMPILING_IN_CPYTHON
|
||||
static CYTHON_INLINE vectorcallfunc __Pyx_PyVectorcall_Function(PyObject *callable) {
|
||||
PyTypeObject *tp = Py_TYPE(callable);
|
||||
#if defined(__Pyx_CyFunction_USED) && CYTHON_METH_FASTCALL
|
||||
#if defined(__Pyx_CyFunction_USED)
|
||||
if (__Pyx_CyFunction_CheckExact(callable)) {
|
||||
return __Pyx_CyFunction_func_vectorcall(callable);
|
||||
}
|
||||
@@ -13295,8 +13260,8 @@ bad:
|
||||
CYTHON_UNUSED_VAR(max_char);
|
||||
CYTHON_UNUSED_VAR(result_ulength);
|
||||
for (i=0; i<value_count; i++) {
|
||||
Py_INCREF(values[i]);
|
||||
if (__Pyx_PyTuple_SET_ITEM(value_tuple, i, values[i]) != (0)) goto bad;
|
||||
Py_INCREF(values[i]);
|
||||
}
|
||||
result = PyUnicode_Join(__pyx_mstate_global->__pyx_empty_unicode, value_tuple);
|
||||
bad:
|
||||
@@ -15212,7 +15177,6 @@ __Pyx_CyFunction_get_kwdefaults(__pyx_CyFunctionObject *op, void *context) {
|
||||
__Pyx_END_CRITICAL_SECTION();
|
||||
return result;
|
||||
}
|
||||
static int __Pyx_CyFunction_set_annotate_in_dict_if_exists(PyObject *op_in, PyObject *value);
|
||||
static int
|
||||
__Pyx_CyFunction_set_annotations(__pyx_CyFunctionObject *op, PyObject* value, void *context) {
|
||||
CYTHON_UNUSED_VAR(context);
|
||||
@@ -15227,54 +15191,8 @@ __Pyx_CyFunction_set_annotations(__pyx_CyFunctionObject *op, PyObject* value, vo
|
||||
__Pyx_BEGIN_CRITICAL_SECTION(op);
|
||||
__Pyx_Py_XDECREF_SET(op->func_annotations, value);
|
||||
__Pyx_END_CRITICAL_SECTION();
|
||||
if (unlikely(__Pyx_CyFunction_set_annotate_in_dict_if_exists((PyObject*) op, Py_None) < 0)) return -1;
|
||||
return 0;
|
||||
}
|
||||
static int
|
||||
__Pyx_CyFunction_get_dict_if_exists(PyObject *op_in, PyObject **dict) {
|
||||
/* Return 1 if the function dict exists, 0 otherwise. This cannot fail:
|
||||
* _PyObject_GetDictPtr() may clear errors internally, but never reports them. */
|
||||
#if CYTHON_COMPILING_IN_PYPY
|
||||
*dict = PyObject_GenericGetDict(op_in, NULL);
|
||||
#elif CYTHON_COMPILING_IN_LIMITED_API || PY_VERSION_HEX < 0x030C0000
|
||||
*dict = ((__pyx_CyFunctionObject*) op_in)->func_dict;
|
||||
#else
|
||||
PyObject **dictptr = _PyObject_GetDictPtr(op_in);
|
||||
*dict = likely(dictptr) ? *dictptr : NULL;
|
||||
#endif
|
||||
return *dict ? 1 : 0;
|
||||
}
|
||||
static int
|
||||
__Pyx_CyFunction_get_annotate_from_dict_if_exists(PyObject *op_in, PyObject **annotate) {
|
||||
PyObject *dict;
|
||||
int dict_found;
|
||||
*annotate = NULL;
|
||||
dict_found = __Pyx_CyFunction_get_dict_if_exists(op_in, &dict);
|
||||
if (!dict_found) return 0;
|
||||
return __Pyx_PyDict_GetItemRef(dict, __pyx_mstate_global->__pyx_n_u_annotate, annotate);
|
||||
}
|
||||
static int
|
||||
__Pyx_CyFunction_set_annotate_in_dict_if_exists(PyObject *op_in, PyObject *value) {
|
||||
PyObject *dict;
|
||||
int dict_found;
|
||||
dict_found = __Pyx_CyFunction_get_dict_if_exists(op_in, &dict);
|
||||
if (!dict_found) return 0;
|
||||
return PyDict_SetItem(dict, __pyx_mstate_global->__pyx_n_u_annotate, value);
|
||||
}
|
||||
static int
|
||||
__Pyx_CyFunction_set_annotate_in_dict(PyObject *op_in, PyObject *value) {
|
||||
PyObject *dict;
|
||||
int result;
|
||||
#if CYTHON_COMPILING_IN_LIMITED_API && __PYX_LIMITED_VERSION_HEX < 0x030A0000
|
||||
dict = __Pyx_CyFunction_get_dict((__pyx_CyFunctionObject*) op_in, NULL);
|
||||
#else
|
||||
dict = PyObject_GenericGetDict(op_in, NULL);
|
||||
#endif
|
||||
if (unlikely(!dict)) return -1;
|
||||
result = PyDict_SetItem(dict, __pyx_mstate_global->__pyx_n_u_annotate, value);
|
||||
Py_DECREF(dict);
|
||||
return result;
|
||||
}
|
||||
static PyObject *
|
||||
__Pyx_CyFunction_get_annotations_locked(__pyx_CyFunctionObject *op) {
|
||||
PyObject* result = op->func_annotations;
|
||||
@@ -15287,88 +15205,14 @@ __Pyx_CyFunction_get_annotations_locked(__pyx_CyFunctionObject *op) {
|
||||
return result;
|
||||
}
|
||||
static PyObject *
|
||||
__Pyx_CyFunction_get_annotations(PyObject *op_in, void *context) {
|
||||
PyObject *annotate = NULL;
|
||||
PyObject *result = NULL;
|
||||
__pyx_CyFunctionObject *op = (__pyx_CyFunctionObject*) op_in;
|
||||
__Pyx_CyFunction_get_annotations(__pyx_CyFunctionObject *op, void *context) {
|
||||
PyObject *result;
|
||||
CYTHON_UNUSED_VAR(context);
|
||||
__Pyx_BEGIN_CRITICAL_SECTION(op_in);
|
||||
result = __Pyx_XNewRef(op->func_annotations);
|
||||
__Pyx_END_CRITICAL_SECTION();
|
||||
if (result) return result;
|
||||
if (unlikely(__Pyx_CyFunction_get_annotate_from_dict_if_exists(op_in, &annotate) < 0)) return NULL;
|
||||
if (!annotate || annotate == Py_None) {
|
||||
Py_XDECREF(annotate);
|
||||
__Pyx_BEGIN_CRITICAL_SECTION(op_in);
|
||||
result = __Pyx_CyFunction_get_annotations_locked(op);
|
||||
__Pyx_END_CRITICAL_SECTION();
|
||||
return result;
|
||||
}
|
||||
PyObject *format = PyLong_FromLong(1L); // annotationlib.Format.VALUE
|
||||
if (likely(format)) {
|
||||
result = __Pyx_PyObject_CallOneArg(annotate, format);
|
||||
Py_DECREF(format);
|
||||
}
|
||||
Py_DECREF(annotate);
|
||||
if (unlikely(!result)) return NULL;
|
||||
if (unlikely(!PyDict_Check(result))) {
|
||||
PyErr_SetString(PyExc_TypeError, "__annotate__ must return a dict");
|
||||
Py_DECREF(result);
|
||||
return NULL;
|
||||
}
|
||||
__Pyx_BEGIN_CRITICAL_SECTION(op_in);
|
||||
__Pyx_Py_XDECREF_SET(op->func_annotations, __Pyx_NewRef(result));
|
||||
__Pyx_BEGIN_CRITICAL_SECTION(op);
|
||||
result = __Pyx_CyFunction_get_annotations_locked(op);
|
||||
__Pyx_END_CRITICAL_SECTION();
|
||||
return result;
|
||||
}
|
||||
static PyObject *__Pyx_CyFunction_annotate_impl(PyObject *self, PyObject *args) {
|
||||
CYTHON_UNUSED_VAR(args);
|
||||
if (unlikely(!self)) {
|
||||
PyErr_SetString(PyExc_SystemError, "cython __annotate__ called without 'self' argument");
|
||||
}
|
||||
Py_XINCREF(self);
|
||||
return self;
|
||||
}
|
||||
static PyMethodDef __Pyx_CyFunction_annotate_method = {
|
||||
"__annotate__",
|
||||
(PyCFunction)(void (*)(void))__Pyx_CyFunction_annotate_impl,
|
||||
METH_VARARGS,
|
||||
"Placeholder __annotate__ function to allow 'functools.wraps' to work "
|
||||
"on Cython functions."
|
||||
};
|
||||
static PyObject *
|
||||
__Pyx_CyFunction_get_annotate(PyObject *op_in, void *context) {
|
||||
PyObject *annotate = NULL;
|
||||
CYTHON_UNUSED_VAR(context);
|
||||
if (unlikely(__Pyx_CyFunction_get_annotate_from_dict_if_exists(op_in, &annotate) < 0)) return NULL;
|
||||
if (annotate) return annotate;
|
||||
PyObject *annotations = __Pyx_CyFunction_get_annotations(op_in, NULL);
|
||||
if (unlikely(!annotations)) return NULL;
|
||||
PyObject *method = PyCFunction_New(
|
||||
&__Pyx_CyFunction_annotate_method,
|
||||
annotations);
|
||||
Py_DECREF(annotations);
|
||||
return method;
|
||||
}
|
||||
static int
|
||||
__Pyx_CyFunction_set_annotate(PyObject *op_in, PyObject* value, void *context) {
|
||||
CYTHON_UNUSED_VAR(context);
|
||||
if (value == NULL) {
|
||||
PyErr_SetString(PyExc_TypeError, "__annotate__ cannot be deleted");
|
||||
return -1;
|
||||
}
|
||||
if (unlikely(value != Py_None && !PyCallable_Check(value))) {
|
||||
PyErr_SetString(PyExc_TypeError, "__annotate__ must be callable or None");
|
||||
return -1;
|
||||
}
|
||||
if (value != Py_None) {
|
||||
__pyx_CyFunctionObject *op = (__pyx_CyFunctionObject*) op_in;
|
||||
__Pyx_BEGIN_CRITICAL_SECTION(op_in);
|
||||
Py_CLEAR(op->func_annotations);
|
||||
__Pyx_END_CRITICAL_SECTION();
|
||||
}
|
||||
return __Pyx_CyFunction_set_annotate_in_dict(op_in, value);
|
||||
}
|
||||
static PyObject *
|
||||
__Pyx_CyFunction_get_is_coroutine_value(__pyx_CyFunctionObject *op) {
|
||||
int is_coroutine = op->flags & __Pyx_CYFUNCTION_COROUTINE;
|
||||
@@ -15381,6 +15225,7 @@ __Pyx_CyFunction_get_is_coroutine_value(__pyx_CyFunctionObject *op) {
|
||||
PyList_SET_ITEM(fromlist, 0, marker);
|
||||
#else
|
||||
if (unlikely(PyList_SetItem(fromlist, 0, marker) < 0)) {
|
||||
Py_DECREF(marker);
|
||||
Py_DECREF(fromlist);
|
||||
return NULL;
|
||||
}
|
||||
@@ -15483,7 +15328,6 @@ static PyGetSetDef __pyx_CyFunction_getsets[] = {
|
||||
{"__defaults__", (getter)__Pyx_CyFunction_get_defaults, (setter)__Pyx_CyFunction_set_defaults, 0, 0},
|
||||
{"__kwdefaults__", (getter)__Pyx_CyFunction_get_kwdefaults, (setter)__Pyx_CyFunction_set_kwdefaults, 0, 0},
|
||||
{"__annotations__", (getter)__Pyx_CyFunction_get_annotations, (setter)__Pyx_CyFunction_set_annotations, 0, 0},
|
||||
{"__annotate__", (getter)__Pyx_CyFunction_get_annotate, (setter)__Pyx_CyFunction_set_annotate, 0, 0},
|
||||
{"_is_coroutine", (getter)__Pyx_CyFunction_get_is_coroutine, 0, 0, 0},
|
||||
#if CYTHON_COMPILING_IN_LIMITED_API
|
||||
{"__module__", (getter)__Pyx_CyFunction_get_module, (setter)__Pyx_CyFunction_set_module, 0, 0},
|
||||
@@ -15622,7 +15466,8 @@ __Pyx_CyFunction_clear(__pyx_CyFunctionObject *m)
|
||||
Py_CLEAR(m->func_doc);
|
||||
Py_CLEAR(m->func_globals);
|
||||
Py_CLEAR(m->func_code);
|
||||
#if PY_VERSION_HEX < 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API
|
||||
#if !CYTHON_COMPILING_IN_LIMITED_API
|
||||
#if PY_VERSION_HEX < 0x030900B1
|
||||
Py_CLEAR(__Pyx_CyFunction_GetClassObj(m));
|
||||
#else
|
||||
{
|
||||
@@ -15630,6 +15475,7 @@ __Pyx_CyFunction_clear(__pyx_CyFunctionObject *m)
|
||||
((PyCMethodObject *) (m))->mm_class = NULL;
|
||||
Py_XDECREF(cls);
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
Py_CLEAR(m->defaults_tuple);
|
||||
Py_CLEAR(m->defaults_kwdict);
|
||||
@@ -15681,10 +15527,11 @@ static int __Pyx_CyFunction_traverse(__pyx_CyFunctionObject *m, visitproc visit,
|
||||
Py_VISIT(m->func_doc);
|
||||
Py_VISIT(m->func_globals);
|
||||
__Pyx_VISIT_CONST(m->func_code);
|
||||
#if !CYTHON_COMPILING_IN_LIMITED_API
|
||||
Py_VISIT(__Pyx_CyFunction_GetClassObj(m));
|
||||
#endif
|
||||
Py_VISIT(m->defaults_tuple);
|
||||
Py_VISIT(m->defaults_kwdict);
|
||||
Py_VISIT(m->func_annotations);
|
||||
Py_VISIT(m->func_is_coroutine);
|
||||
Py_VISIT(m->defaults);
|
||||
return 0;
|
||||
@@ -16734,8 +16581,8 @@ raise_neg_overflow:
|
||||
#if CYTHON_VECTORCALL
|
||||
static int __Pyx_VectorcallBuilder_AddArg(PyObject *key, PyObject *value, PyObject *builder, PyObject **args, int n) {
|
||||
(void)__Pyx_PyObject_FastCallDict;
|
||||
Py_INCREF(key);
|
||||
if (__Pyx_PyTuple_SET_ITEM(builder, n, key) != (0)) return -1;
|
||||
Py_INCREF(key);
|
||||
args[n] = value;
|
||||
return 0;
|
||||
}
|
||||
|
||||
Binary file not shown.
+2331
-1836
File diff suppressed because it is too large
Load Diff
Binary file not shown.
@@ -1,49 +0,0 @@
|
||||
name: Car bug report
|
||||
description: For issues with a particular car make or model
|
||||
labels: ["car", "bug"]
|
||||
body:
|
||||
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: >
|
||||
Before creating a **car bug report**, please check the following:
|
||||
* If the issue likely isn't specific to your car model or make, go back and open an **openpilot bug report** instead.
|
||||
* If the issue is related to the driving or driver monitoring models, you should open a [discussion](https://github.com/commaai/openpilot/discussions/categories/model-feedback) instead.
|
||||
* If you are fingerprinting your car, refer to the [fingerprinting guide](https://github.com/commaai/openpilot/wiki/Fingerprinting) or visit the [community Discord server](https://discord.comma.ai) to request help.
|
||||
* If you are inquiring about future car support, check the [community Discord server](https://discord.comma.ai) for progress on your vehicle and help contribute. Issues simply requesting support for new vehicles will be closed.
|
||||
* Ensure you're running the latest openpilot release.
|
||||
* Ensure you're using officially supported hardware.
|
||||
* Ensure there isn't an existing issue for your bug. If there is, leave a comment on the existing issue.
|
||||
* Ensure you're running stock openpilot. We cannot look into bug reports from forks.
|
||||
|
||||
If you're unsure whether you've hit a bug, check out the #installation-help channel in the [community Discord server](https://discord.comma.ai).
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Describe the car bug
|
||||
description: Also include a description of how to reproduce the bug
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: input
|
||||
id: route
|
||||
attributes:
|
||||
label: Provide a route where the issue occurs
|
||||
description: Ensure the route is fully uploaded at https://useradmin.comma.ai. We cannot look into issues without routes, or at least a Dongle ID.
|
||||
placeholder: 77611a1fac303767|2020-05-11--16-37-07
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: input
|
||||
id: version
|
||||
attributes:
|
||||
label: openpilot version
|
||||
description: If you're not on release, provide the commit hash
|
||||
placeholder: 0.8.10
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Additional info
|
||||
|
||||
-14
@@ -1,14 +0,0 @@
|
||||
blank_issues_enabled: false
|
||||
contact_links:
|
||||
- name: openpilot bug report
|
||||
url: https://github.com/commaai/openpilot/issues/new
|
||||
about: For issues not limited to a particular car make or model, e.g. driving model performance or issues with your comma device.
|
||||
- name: Join the Discord
|
||||
url: https://discord.comma.ai
|
||||
about: The community Discord is for both car port development and experience discussion
|
||||
- name: Report driving behavior feedback
|
||||
url: https://discord.com/channels/469524606043160576/1254834193066623017
|
||||
about: Feedback for the driving and driver monitoring models goes in the #driving-feedback in Discord
|
||||
- name: Community Wiki
|
||||
url: https://github.com/commaai/openpilot/wiki
|
||||
about: Check out our community wiki
|
||||
-36
@@ -1,36 +0,0 @@
|
||||
name: Miscellaneous
|
||||
description: For tools or test bugs, or enhancements
|
||||
labels: ["bug"]
|
||||
body:
|
||||
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: >
|
||||
* If the issue likely only affects your car model or make, go back and open a **car bug report** instead.
|
||||
Before creating a **miscellaneous bug report**, please check the following:
|
||||
* Ensure there isn't an existing issue for your bug. If there is, leave a comment on the existing issue.
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Describe the bug or enhancement
|
||||
description: Also include a description of how to reproduce the bug or how the enhancement would work
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: input
|
||||
id: route
|
||||
attributes:
|
||||
label: Provide a route where the issue occurs if applicable
|
||||
description: Ensure the route is fully uploaded at https://useradmin.comma.ai
|
||||
placeholder: 77611a1fac303767|2020-05-11--16-37-07
|
||||
|
||||
- type: input
|
||||
id: version
|
||||
attributes:
|
||||
label: openpilot version if applicable
|
||||
description: If you're not on release, provide the commit hash
|
||||
placeholder: 0.8.10
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Additional info
|
||||
Vendored
-80
@@ -1,80 +0,0 @@
|
||||
CI / testing:
|
||||
- changed-files:
|
||||
- any-glob-to-any-file: '.github/**'
|
||||
|
||||
car:
|
||||
- changed-files:
|
||||
- any-glob-to-any-file: 'opendbc/car/**'
|
||||
|
||||
car safety:
|
||||
- changed-files:
|
||||
- any-glob-to-any-file: 'opendbc/safety/**'
|
||||
|
||||
can:
|
||||
- changed-files:
|
||||
- any-glob-to-any-file: 'opendbc/can/**'
|
||||
|
||||
DBC signals:
|
||||
- changed-files:
|
||||
- any-glob-to-any-file: 'opendbc/dbc/**'
|
||||
|
||||
|
||||
body:
|
||||
- changed-files:
|
||||
- any-glob-to-any-file: 'opendbc/car/body/**'
|
||||
|
||||
chrysler:
|
||||
- changed-files:
|
||||
- any-glob-to-any-file: 'opendbc/car/chrysler/**'
|
||||
|
||||
ford:
|
||||
- changed-files:
|
||||
- any-glob-to-any-file: 'opendbc/car/ford/**'
|
||||
|
||||
gm:
|
||||
- changed-files:
|
||||
- any-glob-to-any-file: 'opendbc/car/gm/**'
|
||||
|
||||
honda:
|
||||
- changed-files:
|
||||
- any-glob-to-any-file: 'opendbc/car/honda/**'
|
||||
|
||||
hyundai:
|
||||
- changed-files:
|
||||
- any-glob-to-any-file: 'opendbc/car/hyundai/**'
|
||||
|
||||
mazda:
|
||||
- changed-files:
|
||||
- any-glob-to-any-file: 'opendbc/car/mazda/**'
|
||||
|
||||
nissan:
|
||||
- changed-files:
|
||||
- any-glob-to-any-file: 'opendbc/car/nissan/**'
|
||||
|
||||
rivian:
|
||||
- changed-files:
|
||||
- any-glob-to-any-file: 'opendbc/car/rivian/**'
|
||||
|
||||
mg:
|
||||
- changed-files:
|
||||
- any-glob-to-any-file: 'opendbc/car/mg/**'
|
||||
|
||||
subaru:
|
||||
- changed-files:
|
||||
- any-glob-to-any-file: 'opendbc/car/subaru/**'
|
||||
|
||||
tesla:
|
||||
- changed-files:
|
||||
- any-glob-to-any-file: 'opendbc/car/tesla/**'
|
||||
|
||||
toyota:
|
||||
- changed-files:
|
||||
- any-glob-to-any-file: 'opendbc/car/toyota/**'
|
||||
|
||||
volkswagen:
|
||||
- changed-files:
|
||||
- any-glob-to-any-file: 'opendbc/car/volkswagen/**'
|
||||
|
||||
fingerprint:
|
||||
- changed-files:
|
||||
- any-glob-to-all-files: 'opendbc/car/*/fingerprints.py'
|
||||
-11
@@ -1,11 +0,0 @@
|
||||
<!--
|
||||
We need these details to verify your pull request.
|
||||
|
||||
Find your device's dongle ID and a route at https://connect.comma.ai.
|
||||
Ideally, the route is recorded with the exact branch of your pull request.
|
||||
|
||||
If you are porting a car with a new harness variant, please add it to https://github.com/commaai/opendbc/blob/master/opendbc/car/docs_definitions.py. Let us know and we can add it to the shop at the time of merge.
|
||||
-->
|
||||
Validation
|
||||
* Dongle ID:
|
||||
* Route:
|
||||
@@ -1,6 +1,6 @@
|
||||
<!--- AUTOGENERATED FROM selfdrive/car/CARS_template.md, DO NOT EDIT. --->
|
||||
|
||||
# Support Information for 402 Known Cars
|
||||
# Support Information for 401 Known Cars
|
||||
|
||||
|Make|Model|Package|Support Level|
|
||||
|---|---|---|:---:|
|
||||
@@ -257,7 +257,6 @@
|
||||
|Mazda|CX-5 2022-25|All|[Upstream](#upstream)|
|
||||
|Mazda|CX-9 2016-20|All|[Dashcam mode](#dashcam)|
|
||||
|Mazda|CX-9 2021-23|All|[Upstream](#upstream)|
|
||||
|MG|5 EV 2021|All|[Dashcam mode](#dashcam)|
|
||||
|Nissan|Altima 2019-24|ProPILOT Assist|[Upstream](#upstream)|
|
||||
|Nissan|Leaf 2018-23|ProPILOT Assist|[Upstream](#upstream)|
|
||||
|Nissan|Rogue 2018-20|ProPILOT Assist|[Upstream](#upstream)|
|
||||
|
||||
@@ -0,0 +1,240 @@
|
||||
Metadata-Version: 2.4
|
||||
Name: opendbc
|
||||
Version: 0.3.1
|
||||
Summary: a Python API for your car
|
||||
Author-email: Vehicle Researcher <user@comma.ai>
|
||||
License-Expression: MIT
|
||||
Project-URL: homepage, https://github.com/commaai/opendbc
|
||||
Requires-Python: <3.13,>=3.11
|
||||
Description-Content-Type: text/markdown
|
||||
License-File: LICENSE
|
||||
License-File: LICENSE.md
|
||||
Requires-Dist: numpy
|
||||
Requires-Dist: tqdm
|
||||
Requires-Dist: pycapnp
|
||||
Requires-Dist: pycryptodome
|
||||
Provides-Extra: testing
|
||||
Requires-Dist: cffi; extra == "testing"
|
||||
Requires-Dist: tree-sitter; extra == "testing"
|
||||
Requires-Dist: tree-sitter-c; extra == "testing"
|
||||
Requires-Dist: gcovr; extra == "testing"
|
||||
Requires-Dist: unittest-parallel; extra == "testing"
|
||||
Requires-Dist: zstandard; extra == "testing"
|
||||
Requires-Dist: ruff; extra == "testing"
|
||||
Requires-Dist: ty; extra == "testing"
|
||||
Requires-Dist: lefthook; extra == "testing"
|
||||
Requires-Dist: cpplint; extra == "testing"
|
||||
Requires-Dist: codespell; extra == "testing"
|
||||
Provides-Extra: examples
|
||||
Requires-Dist: inputs; extra == "examples"
|
||||
Dynamic: license-file
|
||||
|
||||
<div align="center" style="text-align: center;">
|
||||
|
||||
<h1>opendbc</h1>
|
||||
<p>
|
||||
<b>opendbc is a Python API for your car.</b>
|
||||
<br>
|
||||
Control the gas, brake, steering, and more. Read the speed, steering angle, and more.
|
||||
</p>
|
||||
|
||||
<h3>
|
||||
<a href="https://docs.comma.ai">Docs</a>
|
||||
<span> · </span>
|
||||
<a href="https://github.com/commaai/openpilot/blob/master/docs/CONTRIBUTING.md">Contribute</a>
|
||||
<span> · </span>
|
||||
<a href="https://discord.comma.ai">Discord</a>
|
||||
</h3>
|
||||
|
||||
[](LICENSE)
|
||||
[](https://x.com/comma_ai)
|
||||
[](https://discord.comma.ai)
|
||||
|
||||
<br>
|
||||
<h3><i>How to Port a Car — Jason Young, COMMA_CON 2023</i></h3>
|
||||
<a href="https://www.youtube.com/watch?v=XxPS5TpTUnI&t=142s">
|
||||
<img src="https://github.com/user-attachments/assets/ae89198e-561b-4210-a0d4-ccecd917577d" alt="▶ How to Port a Car - Jason Young, COMMA_CON 2023" width="800">
|
||||
</a>
|
||||
<br>
|
||||
|
||||
<h3><i>How Do We Control The Car? — Robbe Derks, COMMA_CON 2021</i></h3>
|
||||
<a href="https://www.youtube.com/watch?v=nNU6ipme878">
|
||||
<img src="https://github.com/user-attachments/assets/28c40bc0-7884-47e9-b392-f47f03190497" alt="▶ How Do We Control The Car? - Robbe Derks, COMMA_CON 2021" width="800">
|
||||
</a>
|
||||
<br>
|
||||
|
||||
</div>
|
||||
|
||||
---
|
||||
|
||||
Most cars since 2016 have electronically-actuatable steering, gas, and brakes thanks to [LKAS](https://en.wikipedia.org/wiki/Lane_departure_warning_system#Lane_keeping_and_next_technologies) and [ACC](https://en.wikipedia.org/wiki/Adaptive_cruise_control).
|
||||
The goal of this project is to support controlling the steering, gas, and brakes on every single one of those cars.
|
||||
|
||||
While the primary focus is on supporting ADAS interfaces for [openpilot](https://github.com/commaai/openpilot), we're also interested in reading and writing as many things as we can (EV charge status, lock/unlocking doors, etc) such that we can build the best vehicle management app ever.
|
||||
|
||||
---
|
||||
|
||||
This README and the [supported cars list](docs/CARS.md) are all the docs for the opendbc project.
|
||||
Everything you need to know to use, contribute, and extend opendbc are in these docs.
|
||||
|
||||
## Quick start
|
||||
|
||||
```bash
|
||||
git clone https://github.com/commaai/opendbc.git
|
||||
cd opendbc
|
||||
|
||||
# you probably just want to use this. it's an all-in-one for dependency
|
||||
# installation, compiling, linting, and tests. it's also what runs in CI
|
||||
./test.sh
|
||||
|
||||
# here are the individual commands it runs
|
||||
pip3 install -e .[testing] # install dependencies
|
||||
scons -j8 # build with 8 cores
|
||||
unittest-parallel # run the tests
|
||||
lefthook run lint # run the linter
|
||||
```
|
||||
|
||||
[`examples/`](examples/) contains small example programs that can read state from the car and control the steering, gas, and brakes.
|
||||
[`examples/joystick.py`](examples/joystick.py) allows you to control a car with a joystick.
|
||||
|
||||
### Project Structure
|
||||
* [`opendbc/dbc/`](opendbc/dbc/) is a repository of [DBC](https://en.wikipedia.org/wiki/CAN_bus#DBC_(CAN_Database_Files)) files
|
||||
* [`opendbc/can/`](opendbc/can/) is a library for parsing and building CAN messages from DBC files
|
||||
* [`opendbc/car/`](opendbc/car/) is a high-level library for interfacing with cars using Python
|
||||
* [`opendbc/safety/`](opendbc/safety/) is the functional safety for all the cars supported by `opendbc/car/`
|
||||
|
||||
## How to Port a Car
|
||||
|
||||
This guide covers everything from adding support to a new car all the way to improving existing cars (e.g. adding longitudinal control or radar parsing). If similar cars to yours are already compatible, most of this work is likely already done for you.
|
||||
|
||||
At its most basic, a car port will control the steering on a car. A "complete" car port will have all of: lateral control, longitudinal control, good tuning for both lateral and longitudinal, radar parsing (if equipped), fuzzy fingerprinting, and more. The new car support docs will clearly communicate each car's support level.
|
||||
|
||||
### Connect to the Car
|
||||
|
||||
The first step is to get connected to the car with a comma four and a car harness.
|
||||
The car harness gets you connected to two different CAN buses and splits one of those buses to send our own actuation messages.
|
||||
|
||||
If you're lucky, a harness compatible with your car will already be designed and sold on comma.ai/shop.
|
||||
If you're not so lucky, start with a "developer harness" from comma.ai/shop and crimp on whatever connector you need.
|
||||
|
||||
### Structure of a port
|
||||
|
||||
Depending on the brand, most of this basic structure will already be in place.
|
||||
|
||||
The entirety of a car port lives in `opendbc/car/<brand>/`:
|
||||
* `carstate.py`: parses out the relevant information from the CAN stream using the car's DBC file
|
||||
* `carcontroller.py`: outputs CAN messages to control the car
|
||||
* `<brand>can.py`: thin Python helpers around the DBC file to build CAN messages
|
||||
* `fingerprints.py`: database of ECU firmware versions for identifying car models
|
||||
* `interface.py`: high level class for interfacing with the car
|
||||
* `radar_interface.py`: parses out the radar
|
||||
* `values.py`: enumerates the brand's supported cars
|
||||
|
||||
### Reverse Engineer CAN messages
|
||||
|
||||
Start off by recording a route with lots of interesting events: enable LKAS and ACC, turn the steering wheel both extremes, etc. Then, load up that route in [cabana](https://github.com/commaai/openpilot/tree/master/tools/cabana).
|
||||
|
||||
### Tuning
|
||||
|
||||
#### Longitudinal
|
||||
|
||||
Use the [longitudinal maneuvers](https://github.com/commaai/openpilot/tree/master/tools/longitudinal_maneuvers) report to evaluate your car's longitudinal control and tune it.
|
||||
|
||||
## Contributing
|
||||
|
||||
All opendbc development is coordinated on GitHub and [Discord](https://discord.comma.ai). Check out the `#dev-opendbc-cars` channel and `Vehicle Specific` section.
|
||||
|
||||
### Roadmap
|
||||
|
||||
Short term
|
||||
- [ ] `pip install opendbc`
|
||||
- [ ] 100% type coverage
|
||||
- [ ] 100% line coverage
|
||||
- [ ] Make car ports easier: refactors, tools, tests, and docs
|
||||
- [ ] Expose the state of all supported cars better: https://github.com/commaai/opendbc/issues/1144
|
||||
|
||||
Longer term
|
||||
- [ ] Extend support to every car with LKAS + ACC interfaces
|
||||
- [ ] Automatic lateral and longitudinal control/tuning evaluation
|
||||
- [ ] Auto-tuning for [lateral](https://blog.comma.ai/090release/#torqued-an-auto-tuner-for-lateral-control) and longitudinal control
|
||||
- [ ] [Automatic Emergency Braking](https://en.wikipedia.org/wiki/Automated_emergency_braking_system)
|
||||
|
||||
Contributions towards anything here are welcome.
|
||||
|
||||
## Safety Model
|
||||
|
||||
When a [panda](https://comma.ai/shop/panda) powers up with [opendbc safety firmware](opendbc/safety), by default it's in `SAFETY_SILENT` mode. While in `SAFETY_SILENT` mode, the CAN buses are forced to be silent. In order to send messages, you have to select a safety mode. Some of safety modes (for example `SAFETY_ALLOUTPUT`) are disabled in release firmwares. In order to use them, compile and flash your own build.
|
||||
|
||||
Safety modes optionally support `controls_allowed`, which allows or blocks a subset of messages based on a customizable state in the board.
|
||||
|
||||
## Code Rigor
|
||||
|
||||
The opendbc safety firmware is written for its use in conjunction with [openpilot](https://github.com/commaai/openpilot) and [panda](https://github.com/commaai/panda). The safety firmware, through its safety model, provides and enforces the
|
||||
[openpilot safety](https://github.com/commaai/openpilot/blob/master/docs/SAFETY.md). Due to its critical function, it's important that the application code rigor within the `safety` folder is held to high standards.
|
||||
|
||||
These are the [CI regression tests](https://github.com/commaai/opendbc/actions) we have in place:
|
||||
* A generic static code analysis is performed by [cppcheck](https://github.com/danmar/cppcheck/).
|
||||
* In addition, [cppcheck](https://github.com/danmar/cppcheck/) has a specific addon to check for [MISRA C:2012](https://misra.org.uk/) violations. See [current coverage](opendbc/safety/tests/misra/coverage_table).
|
||||
* Compiler options are relatively strict: the flags `-Wall -Wextra -Wstrict-prototypes -Werror` are enforced.
|
||||
* The [safety logic](opendbc/safety) is tested and verified by [unit tests](opendbc/safety/tests) for each supported car variant.
|
||||
|
||||
The above tests are themselves tested by:
|
||||
* a [mutation test](opendbc/safety/tests/misra/test_mutation.py) on the MISRA coverage
|
||||
* 100% line coverage enforced on the safety unit tests
|
||||
|
||||
In addition, we run the [ruff linter](https://github.com/astral-sh/ruff) and [ty](https://github.com/astral-sh/ty) on the car interface library.
|
||||
|
||||
### Bounties
|
||||
|
||||
Every car port is eligible for a bounty:
|
||||
* $2000 - [Any car brand / platform port](https://github.com/orgs/commaai/projects/26/views/1?pane=issue&itemId=47913774)
|
||||
* $250 - [Any car model port](https://github.com/orgs/commaai/projects/26/views/1?pane=issue&itemId=47913790)
|
||||
* $300 - [Reverse Engineering a new Actuation Message](https://github.com/orgs/commaai/projects/26/views/1?pane=issue&itemId=73445563)
|
||||
|
||||
In addition to the standard bounties, we also offer higher value bounties for more popular cars. See those at [comma.ai/bounties](https://comma.ai/bounties).
|
||||
|
||||
## FAQ
|
||||
|
||||
***How do I use this?*** A [comma four](https://comma.ai/shop/comma-four) is custom-designed to be the best way to run and develop opendbc and openpilot.
|
||||
|
||||
***Which cars are supported?*** See the [supported cars list](docs/CARS.md).
|
||||
|
||||
***Can I add support for my car?*** Yes, most car support comes from the community. Read the guide [here](https://github.com/commaai/opendbc/blob/master/README.md#how-to-port-a-car).
|
||||
|
||||
***Which cars can be supported?*** Any car with LKAS and ACC. More info [here](https://github.com/commaai/openpilot/blob/master/docs/CARS.md#dont-see-your-car-here).
|
||||
|
||||
***How does this work?*** In short, we designed hardware to replace your car's built-in lane keep and adaptive cruise features. See [this talk](https://www.youtube.com/watch?v=FL8CxUSfipM) for an in-depth explanation.
|
||||
|
||||
***Is there a timeline or roadmap for adding car support?*** No, most car support comes from the community, with comma doing final safety and quality validation. The more complete the community car port is and the more popular the car is, the more likely we are to pick it up as the next one to validate.
|
||||
|
||||
### Terms
|
||||
|
||||
* **port**: refers to the integration and support of a specific car
|
||||
* **lateral control**: aka steering control
|
||||
* **longitudinal control**: aka gas/brakes control
|
||||
* **fingerprinting**: automatic process for identifying the car
|
||||
* **[LKAS](https://en.wikipedia.org/wiki/Lane_departure_warning_system)**: lane keeping assist
|
||||
* **[ACC](https://en.wikipedia.org/wiki/Adaptive_cruise_control)**: adaptive cruise control
|
||||
* **[harness](https://comma.ai/shop/car-harness)**: car-specific hardware to attach to the car and intercept the ADAS messages
|
||||
* **[panda](https://github.com/commaai/panda)**: hardware used to get on a car's CAN bus
|
||||
* **[ECU](https://en.wikipedia.org/wiki/Electronic_control_unit)**: computers or control modules inside the car
|
||||
* **[CAN bus](https://en.wikipedia.org/wiki/CAN_bus)**: a bus that connects the ECUs in a car
|
||||
* **[cabana](https://github.com/commaai/openpilot/tree/master/tools/cabana#readme)**: our tool for reverse engineering CAN messages
|
||||
* **[DBC file](https://en.wikipedia.org/wiki/CAN_bus#DBC)**: contains definitions for messages on a CAN bus
|
||||
* **[openpilot](https://github.com/commaai/openpilot)**: an ADAS system for cars supported by opendbc
|
||||
* **[comma](https://github.com/commaai)**: the company behind opendbc
|
||||
* **[comma four](https://comma.ai/shop/comma-four)**: the hardware used to run openpilot
|
||||
|
||||
### More resources
|
||||
|
||||
* [*How Do We Control The Car?*](https://www.youtube.com/watch?v=nNU6ipme878&pp=ygUoY29tbWEgY29uIDIwMjEgaG93IGRvIHdlIGNvbnRyb2wgdGhlIGNhcg%3D%3D) by [@robbederks](https://github.com/robbederks) from COMMA_CON 2021
|
||||
* [*How to Port a Car*](https://www.youtube.com/watch?v=XxPS5TpTUnI&t=142s&pp=ygUPamFzb24gY29tbWEgY29u) by [@jyoung8607](https://github.com/jyoung8607) from COMMA_CON 2023
|
||||
* [commaCarSegments](https://huggingface.co/datasets/commaai/commaCarSegments): a massive dataset of CAN data from 300 different car models
|
||||
* [cabana](https://github.com/commaai/openpilot/tree/master/tools/cabana#readme): our tool for reverse engineering CAN messages
|
||||
* [can_print_changes.py](https://github.com/commaai/openpilot/blob/master/selfdrive/debug/can_print_changes.py): diff the whole CAN bus across two drives, such as one without any LKAS and one with LKAS
|
||||
* [longitudinal maneuvers](https://github.com/commaai/openpilot/tree/master/tools/longitudinal_maneuvers): a tool for evaluating and tuning longitudinal control
|
||||
* [opendbc data](https://commaai.github.io/opendbc-data/): a repository of longitudinal maneuver evaluations
|
||||
|
||||
## Come work with us -- [comma.ai/jobs](https://comma.ai/jobs)
|
||||
|
||||
comma is hiring engineers to work on opendbc and [openpilot](https://github.com/commaai/openpilot). We love hiring contributors.
|
||||
@@ -0,0 +1,487 @@
|
||||
LICENSE
|
||||
LICENSE.md
|
||||
MANIFEST.in
|
||||
README.md
|
||||
pyproject.toml
|
||||
opendbc/__init__.py
|
||||
opendbc/testing.py
|
||||
opendbc.egg-info/PKG-INFO
|
||||
opendbc.egg-info/SOURCES.txt
|
||||
opendbc.egg-info/dependency_links.txt
|
||||
opendbc.egg-info/requires.txt
|
||||
opendbc.egg-info/top_level.txt
|
||||
opendbc/can/__init__.py
|
||||
opendbc/can/dbc.py
|
||||
opendbc/can/packer.py
|
||||
opendbc/can/parser.py
|
||||
opendbc/can/tests/__init__.py
|
||||
opendbc/can/tests/benchmark.py
|
||||
opendbc/can/tests/test_checksums.py
|
||||
opendbc/can/tests/test_dbc_exceptions.py
|
||||
opendbc/can/tests/test_dbc_parser.py
|
||||
opendbc/can/tests/test_define.py
|
||||
opendbc/can/tests/test_packer_parser.py
|
||||
opendbc/car/__init__.py
|
||||
opendbc/car/can_definitions.py
|
||||
opendbc/car/car.capnp
|
||||
opendbc/car/car_helpers.py
|
||||
opendbc/car/carlog.py
|
||||
opendbc/car/ccp.py
|
||||
opendbc/car/crc.py
|
||||
opendbc/car/disable_ecu.py
|
||||
opendbc/car/docs.py
|
||||
opendbc/car/docs_definitions.py
|
||||
opendbc/car/ecu_addrs.py
|
||||
opendbc/car/extra_cars.py
|
||||
opendbc/car/fingerprints.py
|
||||
opendbc/car/fw_query_definitions.py
|
||||
opendbc/car/fw_versions.py
|
||||
opendbc/car/interfaces.py
|
||||
opendbc/car/isotp.py
|
||||
opendbc/car/isotp_parallel_query.py
|
||||
opendbc/car/lateral.py
|
||||
opendbc/car/logreader.py
|
||||
opendbc/car/panda_runner.py
|
||||
opendbc/car/rlog.capnp
|
||||
opendbc/car/secoc.py
|
||||
opendbc/car/structs.py
|
||||
opendbc/car/uds.py
|
||||
opendbc/car/values.py
|
||||
opendbc/car/vehicle_model.py
|
||||
opendbc/car/vin.py
|
||||
opendbc/car/xcp.py
|
||||
opendbc/car/body/__init__.py
|
||||
opendbc/car/body/bodycan.py
|
||||
opendbc/car/body/carcontroller.py
|
||||
opendbc/car/body/carstate.py
|
||||
opendbc/car/body/fingerprints.py
|
||||
opendbc/car/body/interface.py
|
||||
opendbc/car/body/values.py
|
||||
opendbc/car/chrysler/__init__.py
|
||||
opendbc/car/chrysler/carcontroller.py
|
||||
opendbc/car/chrysler/carstate.py
|
||||
opendbc/car/chrysler/chryslercan.py
|
||||
opendbc/car/chrysler/fingerprints.py
|
||||
opendbc/car/chrysler/interface.py
|
||||
opendbc/car/chrysler/radar_interface.py
|
||||
opendbc/car/chrysler/values.py
|
||||
opendbc/car/common/__init__.py
|
||||
opendbc/car/common/basedir.py
|
||||
opendbc/car/common/conversions.py
|
||||
opendbc/car/common/filter_simple.py
|
||||
opendbc/car/common/pid.py
|
||||
opendbc/car/common/simple_kalman.py
|
||||
opendbc/car/ford/__init__.py
|
||||
opendbc/car/ford/carcontroller.py
|
||||
opendbc/car/ford/carstate.py
|
||||
opendbc/car/ford/fingerprints.py
|
||||
opendbc/car/ford/fordcan.py
|
||||
opendbc/car/ford/interface.py
|
||||
opendbc/car/ford/radar_interface.py
|
||||
opendbc/car/ford/values.py
|
||||
opendbc/car/ford/tests/__init__.py
|
||||
opendbc/car/ford/tests/print_platform_codes.py
|
||||
opendbc/car/ford/tests/test_ford.py
|
||||
opendbc/car/gm/__init__.py
|
||||
opendbc/car/gm/carcontroller.py
|
||||
opendbc/car/gm/carstate.py
|
||||
opendbc/car/gm/fingerprints.py
|
||||
opendbc/car/gm/gmcan.py
|
||||
opendbc/car/gm/interface.py
|
||||
opendbc/car/gm/radar_interface.py
|
||||
opendbc/car/gm/values.py
|
||||
opendbc/car/gm/tests/__init__.py
|
||||
opendbc/car/gm/tests/test_gm.py
|
||||
opendbc/car/honda/__init__.py
|
||||
opendbc/car/honda/carcontroller.py
|
||||
opendbc/car/honda/carstate.py
|
||||
opendbc/car/honda/fingerprints.py
|
||||
opendbc/car/honda/hondacan.py
|
||||
opendbc/car/honda/interface.py
|
||||
opendbc/car/honda/radar_interface.py
|
||||
opendbc/car/honda/values.py
|
||||
opendbc/car/honda/tests/__init__.py
|
||||
opendbc/car/honda/tests/test_honda.py
|
||||
opendbc/car/hyundai/__init__.py
|
||||
opendbc/car/hyundai/carcontroller.py
|
||||
opendbc/car/hyundai/carstate.py
|
||||
opendbc/car/hyundai/fingerprints.py
|
||||
opendbc/car/hyundai/hyundaican.py
|
||||
opendbc/car/hyundai/hyundaicanfd.py
|
||||
opendbc/car/hyundai/interface.py
|
||||
opendbc/car/hyundai/radar_interface.py
|
||||
opendbc/car/hyundai/values.py
|
||||
opendbc/car/hyundai/tests/__init__.py
|
||||
opendbc/car/hyundai/tests/print_platform_codes.py
|
||||
opendbc/car/hyundai/tests/test_hyundai.py
|
||||
opendbc/car/include/c++.capnp
|
||||
opendbc/car/mazda/__init__.py
|
||||
opendbc/car/mazda/carcontroller.py
|
||||
opendbc/car/mazda/carstate.py
|
||||
opendbc/car/mazda/fingerprints.py
|
||||
opendbc/car/mazda/interface.py
|
||||
opendbc/car/mazda/mazdacan.py
|
||||
opendbc/car/mazda/values.py
|
||||
opendbc/car/mock/__init__.py
|
||||
opendbc/car/mock/carcontroller.py
|
||||
opendbc/car/mock/carstate.py
|
||||
opendbc/car/mock/interface.py
|
||||
opendbc/car/mock/values.py
|
||||
opendbc/car/nissan/__init__.py
|
||||
opendbc/car/nissan/carcontroller.py
|
||||
opendbc/car/nissan/carstate.py
|
||||
opendbc/car/nissan/fingerprints.py
|
||||
opendbc/car/nissan/interface.py
|
||||
opendbc/car/nissan/nissancan.py
|
||||
opendbc/car/nissan/values.py
|
||||
opendbc/car/psa/__init__.py
|
||||
opendbc/car/psa/carcontroller.py
|
||||
opendbc/car/psa/carstate.py
|
||||
opendbc/car/psa/fingerprints.py
|
||||
opendbc/car/psa/interface.py
|
||||
opendbc/car/psa/psacan.py
|
||||
opendbc/car/psa/values.py
|
||||
opendbc/car/rivian/__init__.py
|
||||
opendbc/car/rivian/carcontroller.py
|
||||
opendbc/car/rivian/carstate.py
|
||||
opendbc/car/rivian/fingerprints.py
|
||||
opendbc/car/rivian/interface.py
|
||||
opendbc/car/rivian/radar_interface.py
|
||||
opendbc/car/rivian/riviancan.py
|
||||
opendbc/car/rivian/values.py
|
||||
opendbc/car/rivian/tests/__init__.py
|
||||
opendbc/car/rivian/tests/test_rivian.py
|
||||
opendbc/car/subaru/__init__.py
|
||||
opendbc/car/subaru/carcontroller.py
|
||||
opendbc/car/subaru/carstate.py
|
||||
opendbc/car/subaru/fingerprints.py
|
||||
opendbc/car/subaru/interface.py
|
||||
opendbc/car/subaru/subarucan.py
|
||||
opendbc/car/subaru/values.py
|
||||
opendbc/car/subaru/tests/__init__.py
|
||||
opendbc/car/subaru/tests/test_subaru.py
|
||||
opendbc/car/tesla/__init__.py
|
||||
opendbc/car/tesla/carcontroller.py
|
||||
opendbc/car/tesla/carstate.py
|
||||
opendbc/car/tesla/fingerprints.py
|
||||
opendbc/car/tesla/interface.py
|
||||
opendbc/car/tesla/radar_interface.py
|
||||
opendbc/car/tesla/teslacan.py
|
||||
opendbc/car/tesla/values.py
|
||||
opendbc/car/tesla/tests/__init__.py
|
||||
opendbc/car/tesla/tests/test_tesla.py
|
||||
opendbc/car/tests/__init__.py
|
||||
opendbc/car/tests/car_diff.py
|
||||
opendbc/car/tests/routes.py
|
||||
opendbc/car/tests/test_can_fingerprint.py
|
||||
opendbc/car/tests/test_car_interfaces.py
|
||||
opendbc/car/tests/test_docs.py
|
||||
opendbc/car/tests/test_fw_fingerprint.py
|
||||
opendbc/car/tests/test_lateral_limits.py
|
||||
opendbc/car/tests/test_models.py
|
||||
opendbc/car/tests/test_platform_configs.py
|
||||
opendbc/car/tests/test_routes.py
|
||||
opendbc/car/tests/test_vehicle_model.py
|
||||
opendbc/car/torque_data/override.toml
|
||||
opendbc/car/torque_data/params.toml
|
||||
opendbc/car/torque_data/substitute.toml
|
||||
opendbc/car/toyota/__init__.py
|
||||
opendbc/car/toyota/carcontroller.py
|
||||
opendbc/car/toyota/carstate.py
|
||||
opendbc/car/toyota/fingerprints.py
|
||||
opendbc/car/toyota/interface.py
|
||||
opendbc/car/toyota/radar_interface.py
|
||||
opendbc/car/toyota/toyotacan.py
|
||||
opendbc/car/toyota/values.py
|
||||
opendbc/car/toyota/tests/__init__.py
|
||||
opendbc/car/toyota/tests/print_platform_codes.py
|
||||
opendbc/car/toyota/tests/test_toyota.py
|
||||
opendbc/car/volkswagen/__init__.py
|
||||
opendbc/car/volkswagen/carcontroller.py
|
||||
opendbc/car/volkswagen/carstate.py
|
||||
opendbc/car/volkswagen/fingerprints.py
|
||||
opendbc/car/volkswagen/interface.py
|
||||
opendbc/car/volkswagen/mebcan.py
|
||||
opendbc/car/volkswagen/mlbcan.py
|
||||
opendbc/car/volkswagen/mqbcan.py
|
||||
opendbc/car/volkswagen/pqcan.py
|
||||
opendbc/car/volkswagen/radar_interface.py
|
||||
opendbc/car/volkswagen/values.py
|
||||
opendbc/car/volkswagen/tests/__init__.py
|
||||
opendbc/car/volkswagen/tests/test_volkswagen.py
|
||||
opendbc/dbc/ESR.dbc
|
||||
opendbc/dbc/FORD_CADS.dbc
|
||||
opendbc/dbc/FORD_CADS_64.dbc
|
||||
opendbc/dbc/__init__.py
|
||||
opendbc/dbc/acura_ilx_2016_nidec.dbc
|
||||
opendbc/dbc/bmw_e9x_e8x.dbc
|
||||
opendbc/dbc/cadillac_ct6_chassis.dbc
|
||||
opendbc/dbc/cadillac_ct6_object.dbc
|
||||
opendbc/dbc/cadillac_ct6_powertrain.dbc
|
||||
opendbc/dbc/chrysler_cusw.dbc
|
||||
opendbc/dbc/chrysler_pacifica_2017_hybrid_private_fusion.dbc
|
||||
opendbc/dbc/comma_body.dbc
|
||||
opendbc/dbc/fca_giorgio.dbc
|
||||
opendbc/dbc/ford_cgea1_2_bodycan_2011.dbc
|
||||
opendbc/dbc/ford_cgea1_2_ptcan_2011.dbc
|
||||
opendbc/dbc/ford_fusion_2018_adas.dbc
|
||||
opendbc/dbc/ford_fusion_2018_pt.dbc
|
||||
opendbc/dbc/ford_lincoln_base_pt.dbc
|
||||
opendbc/dbc/gm_global_a_chassis.dbc
|
||||
opendbc/dbc/gm_global_a_high_voltage_management.dbc
|
||||
opendbc/dbc/gm_global_a_lowspeed.dbc
|
||||
opendbc/dbc/gm_global_a_lowspeed_1818125.dbc
|
||||
opendbc/dbc/gm_global_a_object.dbc
|
||||
opendbc/dbc/gm_global_a_powertrain_expansion.dbc
|
||||
opendbc/dbc/gwm_haval_h6_phev_2024.dbc
|
||||
opendbc/dbc/hongqi_hs5.dbc
|
||||
opendbc/dbc/hyundai_2015_ccan.dbc
|
||||
opendbc/dbc/hyundai_2015_mcan.dbc
|
||||
opendbc/dbc/hyundai_i30_2014.dbc
|
||||
opendbc/dbc/hyundai_santafe_2007.dbc
|
||||
opendbc/dbc/luxgen_s5_2015.dbc
|
||||
opendbc/dbc/mazda_2017.dbc
|
||||
opendbc/dbc/mazda_3_2019.dbc
|
||||
opendbc/dbc/mazda_radar.dbc
|
||||
opendbc/dbc/mazda_rx8.dbc
|
||||
opendbc/dbc/mercedes_benz_e350_2010.dbc
|
||||
opendbc/dbc/nissan_xterra_2011.dbc
|
||||
opendbc/dbc/opel_omega_2001.dbc
|
||||
opendbc/dbc/psa_aee2010_r3.dbc
|
||||
opendbc/dbc/rivian_park_assist_can.dbc
|
||||
opendbc/dbc/rivian_primary_actuator.dbc
|
||||
opendbc/dbc/tesla_can.dbc
|
||||
opendbc/dbc/tesla_model3_party.dbc
|
||||
opendbc/dbc/tesla_model3_vehicle.dbc
|
||||
opendbc/dbc/tesla_powertrain.dbc
|
||||
opendbc/dbc/toyota_2017_ref_pt.dbc
|
||||
opendbc/dbc/toyota_adas.dbc
|
||||
opendbc/dbc/toyota_iQ_2009_can.dbc
|
||||
opendbc/dbc/toyota_prius_2010_pt.dbc
|
||||
opendbc/dbc/toyota_radar_dsu_tssp.dbc
|
||||
opendbc/dbc/toyota_tss2_adas.dbc
|
||||
opendbc/dbc/volvo_v40_2017_pt.dbc
|
||||
opendbc/dbc/volvo_v60_2015_pt.dbc
|
||||
opendbc/dbc/vw_mlb.dbc
|
||||
opendbc/dbc/vw_mqb.dbc
|
||||
opendbc/dbc/vw_mqbevo.dbc
|
||||
opendbc/dbc/vw_pq.dbc
|
||||
opendbc/dbc/generator/generator.py
|
||||
opendbc/dbc/generator/chrysler/_stellantis_common.dbc
|
||||
opendbc/dbc/generator/chrysler/_stellantis_common_ram.py
|
||||
opendbc/dbc/generator/chrysler/chrysler_pacifica_2017_hybrid.dbc
|
||||
opendbc/dbc/generator/chrysler/chrysler_ram_dt.dbc
|
||||
opendbc/dbc/generator/chrysler/chrysler_ram_hd.dbc
|
||||
opendbc/dbc/generator/gm/_community.dbc
|
||||
opendbc/dbc/generator/gm/gm_global_a_powertrain.dbc
|
||||
opendbc/dbc/generator/honda/_bosch_2018.dbc
|
||||
opendbc/dbc/generator/honda/_bosch_radar_acc.dbc
|
||||
opendbc/dbc/generator/honda/_bosch_standstill.dbc
|
||||
opendbc/dbc/generator/honda/_community.dbc
|
||||
opendbc/dbc/generator/honda/_gearbox_common.dbc
|
||||
opendbc/dbc/generator/honda/_honda_common.dbc
|
||||
opendbc/dbc/generator/honda/_lkas_hud_5byte.dbc
|
||||
opendbc/dbc/generator/honda/_lkas_hud_8byte.dbc
|
||||
opendbc/dbc/generator/honda/_nidec_common.dbc
|
||||
opendbc/dbc/generator/honda/_nidec_scm_group_a.dbc
|
||||
opendbc/dbc/generator/honda/_nidec_scm_group_b.dbc
|
||||
opendbc/dbc/generator/honda/_steering_control_a.dbc
|
||||
opendbc/dbc/generator/honda/_steering_control_b.dbc
|
||||
opendbc/dbc/generator/honda/_steering_control_c.dbc
|
||||
opendbc/dbc/generator/honda/_steering_control_d_ext.dbc
|
||||
opendbc/dbc/generator/honda/_steering_sensors_a.dbc
|
||||
opendbc/dbc/generator/honda/_steering_sensors_b.dbc
|
||||
opendbc/dbc/generator/honda/_steering_sensors_c.dbc
|
||||
opendbc/dbc/generator/honda/acura_ilx_2016_can.dbc
|
||||
opendbc/dbc/generator/honda/acura_rdx_2018_can.dbc
|
||||
opendbc/dbc/generator/honda/acura_rdx_2020_can.dbc
|
||||
opendbc/dbc/generator/honda/honda_accord_2017_can_ext.dbc
|
||||
opendbc/dbc/generator/honda/honda_bosch_radarless.dbc
|
||||
opendbc/dbc/generator/honda/honda_civic_hatchback_ex_2017_can.dbc
|
||||
opendbc/dbc/generator/honda/honda_civic_touring_2016_can.dbc
|
||||
opendbc/dbc/generator/honda/honda_clarity_hybrid_2018_can.dbc
|
||||
opendbc/dbc/generator/honda/honda_common_canfd.dbc
|
||||
opendbc/dbc/generator/honda/honda_crv_ex_2017_body.dbc
|
||||
opendbc/dbc/generator/honda/honda_crv_touring_2016_can.dbc
|
||||
opendbc/dbc/generator/honda/honda_e_advance_2020_can.dbc
|
||||
opendbc/dbc/generator/honda/honda_insight_ex_2019_can.dbc
|
||||
opendbc/dbc/generator/honda/honda_odyssey_exl_2018.dbc
|
||||
opendbc/dbc/generator/honda/honda_odyssey_twn_2018.dbc
|
||||
opendbc/dbc/generator/hyundai/_hyundai_canfd_common.dbc
|
||||
opendbc/dbc/generator/hyundai/hyundai_can.dbc
|
||||
opendbc/dbc/generator/hyundai/hyundai_canfd.dbc
|
||||
opendbc/dbc/generator/hyundai/hyundai_kia_mando_corner_radar.py
|
||||
opendbc/dbc/generator/hyundai/hyundai_kia_mando_front_radar.py
|
||||
opendbc/dbc/generator/hyundai/hyundai_palisade_2023.dbc
|
||||
opendbc/dbc/generator/nissan/_nissan_common.dbc
|
||||
opendbc/dbc/generator/nissan/nissan_leaf_2018.dbc
|
||||
opendbc/dbc/generator/nissan/nissan_x_trail_2017.dbc
|
||||
opendbc/dbc/generator/rivian/rivian_mando_front_radar.py
|
||||
opendbc/dbc/generator/subaru/_subaru_global.dbc
|
||||
opendbc/dbc/generator/subaru/_subaru_preglobal_2015.dbc
|
||||
opendbc/dbc/generator/subaru/subaru_forester_2017.dbc
|
||||
opendbc/dbc/generator/subaru/subaru_global_2017.dbc
|
||||
opendbc/dbc/generator/subaru/subaru_global_2020_hybrid.dbc
|
||||
opendbc/dbc/generator/subaru/subaru_outback_2015.dbc
|
||||
opendbc/dbc/generator/subaru/subaru_outback_2019.dbc
|
||||
opendbc/dbc/generator/tesla/_radar_common.py
|
||||
opendbc/dbc/generator/tesla/tesla_radar_bosch.py
|
||||
opendbc/dbc/generator/tesla/tesla_radar_continental.py
|
||||
opendbc/dbc/generator/toyota/_community.dbc
|
||||
opendbc/dbc/generator/toyota/_toyota_2017.dbc
|
||||
opendbc/dbc/generator/toyota/_toyota_adas_standard.dbc
|
||||
opendbc/dbc/generator/toyota/toyota_new_mc_pt.dbc
|
||||
opendbc/dbc/generator/toyota/toyota_nodsu_pt.dbc
|
||||
opendbc/dbc/generator/toyota/toyota_secoc_pt.dbc
|
||||
opendbc/dbc/generator/toyota/toyota_tnga_k_pt.dbc
|
||||
opendbc/dbc/generator/volkswagen/_vw_meb_common.dbc
|
||||
opendbc/dbc/generator/volkswagen/vw_meb.dbc
|
||||
opendbc/dbc/generator/volkswagen/vw_meb_2024.dbc
|
||||
opendbc/safety/__init__.py
|
||||
opendbc/safety/can.h
|
||||
opendbc/safety/declarations.h
|
||||
opendbc/safety/helpers.h
|
||||
opendbc/safety/ignition.h
|
||||
opendbc/safety/lateral.h
|
||||
opendbc/safety/longitudinal.h
|
||||
opendbc/safety/safety.h
|
||||
opendbc/safety/modes/body.h
|
||||
opendbc/safety/modes/chrysler.h
|
||||
opendbc/safety/modes/chrysler_common.h
|
||||
opendbc/safety/modes/chrysler_cusw.h
|
||||
opendbc/safety/modes/defaults.h
|
||||
opendbc/safety/modes/elm327.h
|
||||
opendbc/safety/modes/ford.h
|
||||
opendbc/safety/modes/gm.h
|
||||
opendbc/safety/modes/honda.h
|
||||
opendbc/safety/modes/hyundai.h
|
||||
opendbc/safety/modes/hyundai_canfd.h
|
||||
opendbc/safety/modes/hyundai_common.h
|
||||
opendbc/safety/modes/mazda.h
|
||||
opendbc/safety/modes/nissan.h
|
||||
opendbc/safety/modes/psa.h
|
||||
opendbc/safety/modes/rivian.h
|
||||
opendbc/safety/modes/subaru.h
|
||||
opendbc/safety/modes/subaru_common.h
|
||||
opendbc/safety/modes/subaru_preglobal.h
|
||||
opendbc/safety/modes/tesla.h
|
||||
opendbc/safety/modes/toyota.h
|
||||
opendbc/safety/modes/volkswagen_common.h
|
||||
opendbc/safety/modes/volkswagen_meb.h
|
||||
opendbc/safety/modes/volkswagen_mlb.h
|
||||
opendbc/safety/modes/volkswagen_mqb.h
|
||||
opendbc/safety/modes/volkswagen_pq.h
|
||||
opendbc/safety/sunnypilot/mads.h
|
||||
opendbc/safety/sunnypilot/mads_declarations.h
|
||||
opendbc/safety/tests/__init__.py
|
||||
opendbc/safety/tests/common.py
|
||||
opendbc/safety/tests/gas_interceptor_common.py
|
||||
opendbc/safety/tests/hyundai_common.py
|
||||
opendbc/safety/tests/mads_common.py
|
||||
opendbc/safety/tests/mutation.py
|
||||
opendbc/safety/tests/test_body.py
|
||||
opendbc/safety/tests/test_chrysler.py
|
||||
opendbc/safety/tests/test_chrysler_cusw.py
|
||||
opendbc/safety/tests/test_defaults.py
|
||||
opendbc/safety/tests/test_elm327.py
|
||||
opendbc/safety/tests/test_ford.py
|
||||
opendbc/safety/tests/test_gm.py
|
||||
opendbc/safety/tests/test_honda.py
|
||||
opendbc/safety/tests/test_hyundai.py
|
||||
opendbc/safety/tests/test_hyundai_canfd.py
|
||||
opendbc/safety/tests/test_mazda.py
|
||||
opendbc/safety/tests/test_nissan.py
|
||||
opendbc/safety/tests/test_psa.py
|
||||
opendbc/safety/tests/test_release_build.py
|
||||
opendbc/safety/tests/test_rivian.py
|
||||
opendbc/safety/tests/test_subaru.py
|
||||
opendbc/safety/tests/test_subaru_preglobal.py
|
||||
opendbc/safety/tests/test_tesla.py
|
||||
opendbc/safety/tests/test_toyota.py
|
||||
opendbc/safety/tests/test_volkswagen_meb.py
|
||||
opendbc/safety/tests/test_volkswagen_mlb.py
|
||||
opendbc/safety/tests/test_volkswagen_mqb.py
|
||||
opendbc/safety/tests/test_volkswagen_pq.py
|
||||
opendbc/safety/tests/libsafety/__init__.py
|
||||
opendbc/safety/tests/libsafety/fake_stm.h
|
||||
opendbc/safety/tests/libsafety/libsafety_py.py
|
||||
opendbc/safety/tests/misra/test_mutation.py
|
||||
opendbc/safety/tests/safety_replay/__init__.py
|
||||
opendbc/safety/tests/safety_replay/helpers.py
|
||||
opendbc/safety/tests/safety_replay/replay_drive.py
|
||||
opendbc/sunnypilot/__init__.py
|
||||
opendbc/sunnypilot/mads_base.py
|
||||
opendbc/sunnypilot/car/__init__.py
|
||||
opendbc/sunnypilot/car/fingerprints_ext.py
|
||||
opendbc/sunnypilot/car/intelligent_cruise_button_management_interface_base.py
|
||||
opendbc/sunnypilot/car/interfaces.py
|
||||
opendbc/sunnypilot/car/lateral_ext.py
|
||||
opendbc/sunnypilot/car/platform_list.py
|
||||
opendbc/sunnypilot/car/chrysler/__init__.py
|
||||
opendbc/sunnypilot/car/chrysler/carcontroller_ext.py
|
||||
opendbc/sunnypilot/car/chrysler/carstate_ext.py
|
||||
opendbc/sunnypilot/car/chrysler/fingerprints_ext.py
|
||||
opendbc/sunnypilot/car/chrysler/icbm.py
|
||||
opendbc/sunnypilot/car/chrysler/mads.py
|
||||
opendbc/sunnypilot/car/chrysler/values_ext.py
|
||||
opendbc/sunnypilot/car/ford/__init__.py
|
||||
opendbc/sunnypilot/car/ford/mads.py
|
||||
opendbc/sunnypilot/car/gm/__init__.py
|
||||
opendbc/sunnypilot/car/gm/carstate_ext.py
|
||||
opendbc/sunnypilot/car/gm/fingerprints_ext.py
|
||||
opendbc/sunnypilot/car/gm/interface_ext.py
|
||||
opendbc/sunnypilot/car/gm/values_ext.py
|
||||
opendbc/sunnypilot/car/honda/__init__.py
|
||||
opendbc/sunnypilot/car/honda/carstate_ext.py
|
||||
opendbc/sunnypilot/car/honda/fingerprints_ext.py
|
||||
opendbc/sunnypilot/car/honda/gas_interceptor.py
|
||||
opendbc/sunnypilot/car/honda/icbm.py
|
||||
opendbc/sunnypilot/car/honda/mads.py
|
||||
opendbc/sunnypilot/car/honda/test_honda.py
|
||||
opendbc/sunnypilot/car/honda/values_ext.py
|
||||
opendbc/sunnypilot/car/hyundai/__init__.py
|
||||
opendbc/sunnypilot/car/hyundai/carstate_ext.py
|
||||
opendbc/sunnypilot/car/hyundai/enable_radar_tracks.py
|
||||
opendbc/sunnypilot/car/hyundai/escc.py
|
||||
opendbc/sunnypilot/car/hyundai/fingerprints_ext.py
|
||||
opendbc/sunnypilot/car/hyundai/icbm.py
|
||||
opendbc/sunnypilot/car/hyundai/lead_data_ext.py
|
||||
opendbc/sunnypilot/car/hyundai/mads.py
|
||||
opendbc/sunnypilot/car/hyundai/radar_interface_ext.py
|
||||
opendbc/sunnypilot/car/hyundai/values.py
|
||||
opendbc/sunnypilot/car/hyundai/longitudinal/__init__.py
|
||||
opendbc/sunnypilot/car/hyundai/longitudinal/config.py
|
||||
opendbc/sunnypilot/car/hyundai/longitudinal/controller.py
|
||||
opendbc/sunnypilot/car/hyundai/longitudinal/helpers.py
|
||||
opendbc/sunnypilot/car/hyundai/tests/__init__.py
|
||||
opendbc/sunnypilot/car/hyundai/tests/test_escc_base.py
|
||||
opendbc/sunnypilot/car/hyundai/tests/test_lead_data_car_controller.py
|
||||
opendbc/sunnypilot/car/hyundai/tests/test_radar_interface_ext.py
|
||||
opendbc/sunnypilot/car/hyundai/tests/test_tuning_controller.py
|
||||
opendbc/sunnypilot/car/mazda/__init__.py
|
||||
opendbc/sunnypilot/car/mazda/icbm.py
|
||||
opendbc/sunnypilot/car/nissan/__init__.py
|
||||
opendbc/sunnypilot/car/nissan/carstate_ext.py
|
||||
opendbc/sunnypilot/car/nissan/nissancan_ext.py
|
||||
opendbc/sunnypilot/car/nissan/values.py
|
||||
opendbc/sunnypilot/car/rivian/__init__.py
|
||||
opendbc/sunnypilot/car/rivian/carstate_ext.py
|
||||
opendbc/sunnypilot/car/rivian/mads.py
|
||||
opendbc/sunnypilot/car/rivian/values.py
|
||||
opendbc/sunnypilot/car/subaru/__init__.py
|
||||
opendbc/sunnypilot/car/subaru/mads.py
|
||||
opendbc/sunnypilot/car/subaru/stop_and_go.py
|
||||
opendbc/sunnypilot/car/subaru/subarucan_ext.py
|
||||
opendbc/sunnypilot/car/subaru/values_ext.py
|
||||
opendbc/sunnypilot/car/tesla/__init__.py
|
||||
opendbc/sunnypilot/car/tesla/carstate_ext.py
|
||||
opendbc/sunnypilot/car/tesla/coop_steering.py
|
||||
opendbc/sunnypilot/car/tesla/fingerprints_ext.py
|
||||
opendbc/sunnypilot/car/tesla/values.py
|
||||
opendbc/sunnypilot/car/tests/__init__.py
|
||||
opendbc/sunnypilot/car/tests/test_car_list.py
|
||||
opendbc/sunnypilot/car/toyota/__init__.py
|
||||
opendbc/sunnypilot/car/toyota/carstate_ext.py
|
||||
opendbc/sunnypilot/car/toyota/fingerprints_ext.py
|
||||
opendbc/sunnypilot/car/toyota/gas_interceptor.py
|
||||
opendbc/sunnypilot/car/toyota/values.py
|
||||
@@ -0,0 +1 @@
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
numpy
|
||||
tqdm
|
||||
pycapnp
|
||||
pycryptodome
|
||||
|
||||
[examples]
|
||||
inputs
|
||||
|
||||
[testing]
|
||||
cffi
|
||||
tree-sitter
|
||||
tree-sitter-c
|
||||
gcovr
|
||||
unittest-parallel
|
||||
zstandard
|
||||
ruff
|
||||
ty
|
||||
lefthook
|
||||
cpplint
|
||||
codespell
|
||||
@@ -0,0 +1 @@
|
||||
opendbc
|
||||
@@ -568,6 +568,8 @@ struct CarParams {
|
||||
}
|
||||
|
||||
struct LongitudinalPIDTuning {
|
||||
kpBP @0 :List(Float32);
|
||||
kpV @1 :List(Float32);
|
||||
kiBP @2 :List(Float32);
|
||||
kiV @3 :List(Float32);
|
||||
|
||||
@@ -575,8 +577,6 @@ struct CarParams {
|
||||
kf @6 :Float32;
|
||||
deadzoneBP @4 :List(Float32);
|
||||
deadzoneV @5 :List(Float32);
|
||||
kpBP @0 :List(Float32);
|
||||
kpV @1 :List(Float32);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -648,10 +648,6 @@ struct CarParams {
|
||||
fcaGiorgio @32;
|
||||
rivian @33;
|
||||
volkswagenMeb @34;
|
||||
byd @35;
|
||||
volvo @36;
|
||||
bmw @37;
|
||||
mg @38;
|
||||
}
|
||||
|
||||
enum SteerControlType {
|
||||
|
||||
@@ -78,7 +78,7 @@ class CAR(Platforms):
|
||||
)
|
||||
|
||||
JEEP_GRAND_CHEROKEE_2019 = ChryslerPlatformConfig( # includes 2020 Trailhawk
|
||||
[ChryslerCarDocs("Jeep Grand Cherokee 2019-21")],
|
||||
[ChryslerCarDocs("Jeep Grand Cherokee 2019-21", video="https://www.youtube.com/watch?v=jBe4lWnRSu4")],
|
||||
JEEP_GRAND_CHEROKEE.specs,
|
||||
)
|
||||
|
||||
|
||||
@@ -130,6 +130,7 @@ class CarHarness(EnumBase):
|
||||
hyundai_p = BaseCarHarness("Hyundai P connector")
|
||||
hyundai_q = BaseCarHarness("Hyundai Q connector")
|
||||
hyundai_r = BaseCarHarness("Hyundai R connector")
|
||||
hyundai_s = BaseCarHarness("Hyundai S connector")
|
||||
custom = BaseCarHarness("Developer connector")
|
||||
obd_ii = BaseCarHarness("OBD-II connector", parts=[Cable.long_obdc_cable], has_connector=False)
|
||||
gm = BaseCarHarness("GM connector", parts=[Accessory.harness_box])
|
||||
|
||||
@@ -200,6 +200,7 @@ class CarController(CarControllerBase, EsccCarController, LeadDataCarController,
|
||||
|
||||
lka_steering = self.CP.flags & HyundaiFlags.CANFD_LKA_STEER_MSG
|
||||
lka_steering_long = lka_steering and self.CP.openpilotLongitudinalControl
|
||||
ccnc_non_hda2 = self.CP.flags & HyundaiFlags.CCNC and not lka_steering
|
||||
|
||||
# steering control
|
||||
can_sends.extend(hyundaicanfd.create_steering_messages(self.packer, self.CP, self.CAN, CC.enabled, apply_steer_req, apply_torque, self.lkas_icon))
|
||||
@@ -211,7 +212,12 @@ class CarController(CarControllerBase, EsccCarController, LeadDataCarController,
|
||||
|
||||
# LFA and HDA icons
|
||||
if self.frame % 5 == 0 and (not lka_steering or lka_steering_long):
|
||||
can_sends.append(hyundaicanfd.create_lfahda_cluster(self.packer, self.CAN, CC.enabled, self.lfa_icon))
|
||||
if ccnc_non_hda2:
|
||||
can_sends.extend(hyundaicanfd.create_ccnc(self.packer, self.CAN, self.CP.openpilotLongitudinalControl, CC.enabled, CC.hudControl, CC.leftBlinker,
|
||||
CC.rightBlinker, CS.msg_161, CS.msg_162, CS.msg_1b5, CS.is_metric, CS.out, CS.main_cruise_enabled,
|
||||
self.lfa_icon))
|
||||
else:
|
||||
can_sends.append(hyundaicanfd.create_lfahda_cluster(self.packer, self.CAN, CC.enabled, self.lfa_icon))
|
||||
|
||||
# blinkers
|
||||
if lka_steering and self.CP.flags & HyundaiFlags.CANFD_ENABLE_BLINKERS:
|
||||
@@ -220,11 +226,12 @@ class CarController(CarControllerBase, EsccCarController, LeadDataCarController,
|
||||
if self.CP.openpilotLongitudinalControl:
|
||||
if lka_steering:
|
||||
can_sends.extend(hyundaicanfd.create_adrv_messages(self.packer, self.CAN, self.frame))
|
||||
else:
|
||||
elif not ccnc_non_hda2:
|
||||
can_sends.extend(hyundaicanfd.create_fca_warning_light(self.packer, self.CAN, self.frame))
|
||||
if self.frame % 2 == 0:
|
||||
can_sends.append(hyundaicanfd.create_acc_control(self.packer, self.CAN, CC.enabled, self.accel_last, accel, stopping, CC.cruiseControl.override,
|
||||
set_speed_in_units, hud_control, self.lead_data, CS.main_cruise_enabled, self.tuning))
|
||||
set_speed_in_units, hud_control, self.lead_data, CS.main_cruise_enabled, self.tuning,
|
||||
CS.cruise_info if ccnc_non_hda2 else None))
|
||||
self.accel_last = accel
|
||||
else:
|
||||
# button presses
|
||||
|
||||
@@ -64,6 +64,7 @@ class CarState(CarStateBase, EsccCarStateBase, MadsCarState, CarStateExt):
|
||||
self.buttons_counter = 0
|
||||
|
||||
self.cruise_info = {}
|
||||
self.msg_161, self.msg_162, self.msg_1b5 = {}, {}, {}
|
||||
|
||||
# On some cars, CLU15->CF_Clu_VehicleSpeed can oscillate faster than the dash updates. Sample at 5 Hz
|
||||
self.cluster_speed = 0
|
||||
@@ -258,8 +259,11 @@ class CarState(CarStateBase, EsccCarStateBase, MadsCarState, CarStateExt):
|
||||
|
||||
# TODO: alt signal usage may be described by cp.vl['BLINKERS']['USE_ALT_LAMP']
|
||||
left_blinker_sig, right_blinker_sig = "LEFT_LAMP", "RIGHT_LAMP"
|
||||
if self.CP.carFingerprint == CAR.HYUNDAI_KONA_EV_2ND_GEN:
|
||||
if self.CP.flags & HyundaiFlags.CCNC:
|
||||
left_blinker_sig, right_blinker_sig = "LEFT_LAMP_ALT", "RIGHT_LAMP_ALT"
|
||||
if not self.CP.flags & HyundaiFlags.CANFD_LKA_STEER_MSG:
|
||||
self.msg_161, self.msg_162, self.msg_1b5 = map(copy.copy, (cp_cam.vl["CCNC_0x161"], cp_cam.vl["CCNC_0x162"], cp_cam.vl["FR_CMR_03_50ms"]))
|
||||
self.cruise_info = copy.copy((cp_cam if self.CP.flags & HyundaiFlags.CANFD_CAMERA_SCC else cp).vl["SCC_CONTROL"])
|
||||
ret.leftBlinker, ret.rightBlinker = self.update_blinker_from_lamp(50, cp.vl["BLINKERS"][left_blinker_sig],
|
||||
cp.vl["BLINKERS"][right_blinker_sig])
|
||||
if self.CP.enableBsm:
|
||||
|
||||
@@ -220,6 +220,16 @@ FW_VERSIONS = {
|
||||
b'\xf1\x00DN8 MFC AT USA LHD 1.00 1.07 99211-L1000 211223',
|
||||
],
|
||||
},
|
||||
CAR.HYUNDAI_SONATA_2024: {
|
||||
(Ecu.fwdCamera, 0x7c4, None): [
|
||||
b'\xf1\x00DN8 MFC AT KOR LHD 1.00 1.01 99211-L1800 230512',
|
||||
b'\xf1\x00DN8 MFC AT USA LHD 1.00 1.01 99211-L1800 230512',
|
||||
b'\xf1\x00DN8 MFC AT USA LHD 1.00 1.02 99211-L1800 250613',
|
||||
],
|
||||
(Ecu.fwdRadar, 0x7d0, None): [
|
||||
b'\xf1\x00DN8_ RDR ----- 1.00 1.00 99110-L1800 ',
|
||||
],
|
||||
},
|
||||
CAR.HYUNDAI_SONATA_LF: {
|
||||
(Ecu.fwdRadar, 0x7d0, None): [
|
||||
b'\xf1\x00LF__ SCC F-CUP 1.00 1.00 96401-C2200 ',
|
||||
@@ -570,6 +580,16 @@ FW_VERSIONS = {
|
||||
b'\xf1\x00OS9 LKAS AT USA LHD 1.00 1.00 95740-J9300 g21',
|
||||
],
|
||||
},
|
||||
CAR.HYUNDAI_KONA_2ND_GEN: {
|
||||
(Ecu.fwdCamera, 0x7c4, None): [
|
||||
b'\xf1\x00SX2 MFC AT USA LHD 1.00 1.03 99211-BE000 230517',
|
||||
b'\xf1\x00SX2 MFC AT USA LHD 1.00 1.07 99211-BE000 240611',
|
||||
],
|
||||
(Ecu.fwdRadar, 0x7d0, None): [
|
||||
b'\xf1\x00SX2_ RDR ----- 1.00 1.02 99110-BE000 ',
|
||||
b'\xf1\x00SX2_ RDR ----- 1.00 1.02 99110-BE500 ',
|
||||
],
|
||||
},
|
||||
CAR.KIA_CEED: {
|
||||
(Ecu.fwdRadar, 0x7d0, None): [
|
||||
b'\xf1\x00CD__ SCC F-CUP 1.00 1.00 99110-J7500 ',
|
||||
@@ -605,6 +625,17 @@ FW_VERSIONS = {
|
||||
b'\xf1\x00BD__ SCC H-CUP 1.00 1.02 99110-M6000 ',
|
||||
],
|
||||
},
|
||||
CAR.KIA_K4_2025: {
|
||||
(Ecu.fwdCamera, 0x7c4, None): [
|
||||
b'\xf1\x00CL4 MFC AT CAN LHD 1.00 1.02 99210-GG000 240708',
|
||||
b'\xf1\x00CL4 MFC AT USA LHD 1.00 1.02 99210-GG000 240708',
|
||||
b'\xf1\x00CL4 MFC AT USA LHD 1.00 1.04 99210-GG100 251205',
|
||||
],
|
||||
(Ecu.fwdRadar, 0x7d0, None): [
|
||||
b'\xf1\x00CL4_ RDR ----- 1.00 1.01 99110-GG000 ',
|
||||
b'\xf1\x00CL4_ RDR ----- 1.00 1.01 99110-GG100 ',
|
||||
],
|
||||
},
|
||||
CAR.KIA_K5_2021: {
|
||||
(Ecu.fwdRadar, 0x7d0, None): [
|
||||
b'\xf1\x00DL3_ SCC F-CUP 1.00 1.03 99110-L2100 ',
|
||||
@@ -637,6 +668,14 @@ FW_VERSIONS = {
|
||||
b'\xf1\x00DL ESC \t 102"\x08\x10 58910-L3800',
|
||||
],
|
||||
},
|
||||
CAR.KIA_K5_2025: {
|
||||
(Ecu.fwdCamera, 0x7c4, None): [
|
||||
b'\xf1\x00DL3 MFC AT USA LHD 1.00 1.04 99210-L2500 240117',
|
||||
],
|
||||
(Ecu.fwdRadar, 0x7d0, None): [
|
||||
b'\xf1\x00DL3_ RDR ----- 1.00 1.01 99110-L2500 ',
|
||||
],
|
||||
},
|
||||
CAR.KIA_K5_HEV_2020: {
|
||||
(Ecu.fwdRadar, 0x7d0, None): [
|
||||
b'\xf1\x00DLhe SCC FHCUP 1.00 1.02 99110-L7000 ',
|
||||
@@ -723,6 +762,7 @@ FW_VERSIONS = {
|
||||
],
|
||||
(Ecu.fwdCamera, 0x7c4, None): [
|
||||
b'\xf1\x00SX2EMFC AT KOR LHD 1.00 1.00 99211-BF000 230410',
|
||||
b'\xf1\x00SX2EMFC AT USA LHD 1.00 1.02 99211-BF000 230823',
|
||||
],
|
||||
},
|
||||
CAR.KIA_NIRO_EV: {
|
||||
@@ -981,6 +1021,18 @@ FW_VERSIONS = {
|
||||
b'\xf1\x00OSH LKAS AT KOR LHD 1.00 1.01 95740-CM000 l31',
|
||||
],
|
||||
},
|
||||
CAR.HYUNDAI_KONA_HEV_2ND_GEN: {
|
||||
(Ecu.fwdCamera, 0x7c4, None): [
|
||||
b'\xf1\x00SX2HMFC AT AUS RHD 1.00 1.00 99211-BE001 241015',
|
||||
b'\xf1\x00SX2HMFC AT AUS RHD 1.00 1.01 99211-BE001 250117',
|
||||
b'\xf1\x00SX2HMFC AT EUR LHD 1.00 1.01 99211-BE001 250117',
|
||||
b'\xf1\x00SX2HMFC AT EUR RHD 1.00 1.04 99211-BE000 231010',
|
||||
],
|
||||
(Ecu.fwdRadar, 0x7d0, None): [
|
||||
b'\xf1\x00SX2_ RDR ----- 1.00 1.02 99110-BE000 ',
|
||||
b'\xf1\x00SX2_ RDR ----- 1.00 1.02 99110-BE500 ',
|
||||
],
|
||||
},
|
||||
CAR.HYUNDAI_SONATA_HYBRID: {
|
||||
(Ecu.fwdRadar, 0x7d0, None): [
|
||||
b'\xf1\x00DNhe SCC F-CUP 1.00 1.02 99110-L5000 ',
|
||||
@@ -1002,6 +1054,15 @@ FW_VERSIONS = {
|
||||
b'\xf1\x00DN8HMFC AT USA LHD 1.00 1.07 99211-L1000 211223',
|
||||
],
|
||||
},
|
||||
CAR.HYUNDAI_SONATA_HEV_2024: {
|
||||
(Ecu.fwdCamera, 0x7c4, None): [
|
||||
b'\xf1\x00DN8HMFC AT KOR LHD 1.00 1.01 99211-L1800 230512',
|
||||
b'\xf1\x00DN8HMFC AT USA LHD 1.00 1.01 99211-L1800 230512',
|
||||
],
|
||||
(Ecu.fwdRadar, 0x7d0, None): [
|
||||
b'\xf1\x00DN8_ RDR ----- 1.00 1.00 99110-L1800 ',
|
||||
],
|
||||
},
|
||||
CAR.KIA_SORENTO: {
|
||||
(Ecu.fwdCamera, 0x7c4, None): [
|
||||
b'\xf1\x00UMP LKAS AT AUS RHD 1.00 1.00 96400-C6550 S30',
|
||||
@@ -1069,6 +1130,16 @@ FW_VERSIONS = {
|
||||
b'\xf1\x00NE1 MFC AT USA LHD 1.00 1.06 99211-GI010 230110',
|
||||
],
|
||||
},
|
||||
CAR.HYUNDAI_IONIQ_5_N: {
|
||||
(Ecu.fwdRadar, 0x7d0, None): [
|
||||
b'\xf1\x00NE1N RDR ----- 1.00 1.00 99110-NI000 ',
|
||||
],
|
||||
(Ecu.fwdCamera, 0x7c4, None): [
|
||||
b'\xf1\x00NE1NMFC AT KOR LHD 1.00 1.04 99211-NI000 231219',
|
||||
b'\xf1\x00NE1NMFC AT KOR LHD 1.00 1.00 99211-NI010 240712',
|
||||
b'\xf1\x00NE1NMFC AT USA LHD 1.00 1.04 99211-NI000 231219',
|
||||
],
|
||||
},
|
||||
CAR.HYUNDAI_IONIQ_6: {
|
||||
(Ecu.fwdRadar, 0x7d0, None): [
|
||||
b'\xf1\x00CE__ RDR ----- 1.00 1.01 99110-KL000 ',
|
||||
@@ -1107,6 +1178,38 @@ FW_VERSIONS = {
|
||||
b'\xf1\x00NX4__ 1.01 1.02 99110-N9000 ',
|
||||
],
|
||||
},
|
||||
CAR.HYUNDAI_TUCSON_2025: {
|
||||
(Ecu.fwdCamera, 0x7c4, None): [
|
||||
b'\xf1\x00NX4 FR_CMR AT GEN LHD 1.00 1.00 99211-N7030 C55',
|
||||
b'\xf1\x00NX4 FR_CMR AT GEN LHD 1.00 1.00 99211-N7035 C5C',
|
||||
b'\xf1\x00NX4 FR_CMR AT USA LHD 1.00 1.01 99211-N7050 C5A',
|
||||
],
|
||||
(Ecu.fwdRadar, 0x7d0, None): [
|
||||
b'\xf1\x00NX4__ 1.00 1.02 99110N7000 ',
|
||||
b'\xf1\x00NX4__ 1.00 1.03 99110N7100 ',
|
||||
],
|
||||
},
|
||||
CAR.HYUNDAI_TUCSON_HEV_2025: {
|
||||
(Ecu.fwdCamera, 0x7c4, None): [
|
||||
b'\xf1\x00NX4 FR_CMR AT EUR LHD 1.00 1.00 99211-N7030 C55',
|
||||
b'\xf1\x00NX4 FR_CMR AT USA LHD 1.00 1.00 99211-N7030 C55',
|
||||
b'\xf1\x00NX4 FR_CMR AT USA LHD 1.00 1.00 99211-N7035 C5C',
|
||||
b'\xf1\x00NX4 FR_CMR AT USA LHD 1.00 1.00 99211-N7060 C5B',
|
||||
],
|
||||
(Ecu.fwdRadar, 0x7d0, None): [
|
||||
b'\xf1\x00NX4__ 1.00 1.02 99110N7000 ',
|
||||
b'\xf1\x00NX4__ 1.00 1.02 99110N7100 ',
|
||||
b'\xf1\x00NX4__ 1.00 1.03 99110N7100 ',
|
||||
],
|
||||
},
|
||||
CAR.HYUNDAI_TUCSON_PHEV_2025: {
|
||||
(Ecu.fwdCamera, 0x7c4, None): [
|
||||
b'\xf1\x00NX4 FR_CMR AT CAN LHD 1.00 1.00 99211-N7030 C55',
|
||||
],
|
||||
(Ecu.fwdRadar, 0x7d0, None): [
|
||||
b'\xf1\x00NX4__ 1.00 1.02 99110N7100 ',
|
||||
],
|
||||
},
|
||||
CAR.HYUNDAI_SANTA_CRUZ_1ST_GEN: {
|
||||
(Ecu.fwdCamera, 0x7c4, None): [
|
||||
b'\xf1\x00NX4 FR_CMR AT USA LHD 1.00 1.00 99211-CW000 14M',
|
||||
@@ -1118,6 +1221,14 @@ FW_VERSIONS = {
|
||||
b'\xf1\x00NX4__ 1.01 1.00 99110-K5000 ',
|
||||
],
|
||||
},
|
||||
CAR.HYUNDAI_SANTA_CRUZ_2025: {
|
||||
(Ecu.fwdCamera, 0x7c4, None): [
|
||||
b'\xf1\x00NX4 FR_CMR AT USA LHD 1.00 1.00 99211-N7030 C55',
|
||||
],
|
||||
(Ecu.fwdRadar, 0x7d0, None): [
|
||||
b'\xf1\x00NX4__ 1.00 1.00 99110K5500 ',
|
||||
],
|
||||
},
|
||||
CAR.KIA_SPORTAGE_5TH_GEN: {
|
||||
(Ecu.fwdCamera, 0x7c4, None): [
|
||||
b'\xf1\x00NQ5 FR_CMR AT AUS RHD 1.00 1.00 99211-P1040 663',
|
||||
@@ -1190,6 +1301,16 @@ FW_VERSIONS = {
|
||||
b'\xf1\x00MQ4_ SCC FHCUP 1.00 1.08 99110-P2000 ',
|
||||
],
|
||||
},
|
||||
CAR.KIA_SORENTO_2024: {
|
||||
(Ecu.fwdCamera, 0x7c4, None): [
|
||||
b'\xf1\x00MQ4 MFC AT AUS RHD 1.01 1.04 99210-P2550 231127',
|
||||
b'\xf1\x00MQ4 MFC AT USA LHD 1.01 1.04 99210-R5500 231127',
|
||||
],
|
||||
(Ecu.fwdRadar, 0x7d0, None): [
|
||||
b'\xf1\x00MQ4_ RDR ----- 1.00 1.01 99110-P2500 ',
|
||||
b'\xf1\x00MQ4_ RDR ----- 1.00 1.01 99110-R5500 ',
|
||||
],
|
||||
},
|
||||
CAR.KIA_SORENTO_HEV_4TH_GEN: {
|
||||
(Ecu.fwdCamera, 0x7c4, None): [
|
||||
b'\xf1\x00MQ4HMFC AT KOR LHD 1.00 1.04 99210-P2000 200330',
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import numpy as np
|
||||
from opendbc.car import CanBusBase
|
||||
from opendbc.car.common.conversions import Conversions as CV
|
||||
from opendbc.car.crc import CRC16_XMODEM
|
||||
from opendbc.car.hyundai.values import HyundaiFlags
|
||||
from opendbc.sunnypilot.car.hyundai.lead_data_ext import CanFdLeadData
|
||||
@@ -125,8 +126,106 @@ def create_lfahda_cluster(packer, CAN, enabled, lfa_icon):
|
||||
return packer.make_can_msg("LFAHDA_CLUSTER", CAN.ECAN, values)
|
||||
|
||||
|
||||
def create_ccnc(packer, CAN, openpilot_longitudinal_control, enabled, hud, left_blinker, right_blinker, msg_161, msg_162, msg_1b5,
|
||||
is_metric, out, main_cruise_enabled, lfa_icon):
|
||||
for f in {"FAULT_LSS", "FAULT_HDA", "FAULT_DAS", "FAULT_LFA", "FAULT_DAW", "FAULT_ESS"}:
|
||||
msg_162[f] = 0
|
||||
if msg_161["ALERTS_2"] == 5:
|
||||
msg_161.update({"ALERTS_2": 0, "SOUNDS_2": 0})
|
||||
if msg_161["ALERTS_3"] == 17:
|
||||
msg_161["ALERTS_3"] = 0
|
||||
if msg_161["ALERTS_5"] in (2, 5):
|
||||
msg_161["ALERTS_5"] = 0
|
||||
if msg_161["SOUNDS_4"] == 2 and msg_161["LFA_ICON"] in (0, 3):
|
||||
msg_161["SOUNDS_4"] = 0
|
||||
|
||||
LANE_CHANGE_SPEED_MIN = 8.9408 # 20 mph
|
||||
any_blinker = left_blinker or right_blinker
|
||||
curvature = {i: (31 if i == -1 else 13 - abs(i + 15)) if i < 0 else 15 + i for i in range(-15, 16)}
|
||||
|
||||
msg_161.update({
|
||||
"DAW_ICON": 0,
|
||||
"LKA_ICON": 0,
|
||||
"LFA_ICON": 2 if lfa_icon else 0,
|
||||
"CENTERLINE": 1 if lfa_icon else 0,
|
||||
"LANELINE_CURVATURE": curvature[max(-15, min(int(out.steeringAngleDeg / 4.5), 15))] if lfa_icon and not any_blinker else 15,
|
||||
"LANELINE_LEFT": (0 if not lfa_icon else 1 if not hud.leftLaneVisible else 4 if hud.leftLaneDepart else 6 if any_blinker else 2),
|
||||
"LANELINE_RIGHT": (0 if not lfa_icon else 1 if not hud.rightLaneVisible else 4 if hud.rightLaneDepart else 6 if any_blinker else 2),
|
||||
"LCA_LEFT_ICON": (0 if not lfa_icon or out.vEgo < LANE_CHANGE_SPEED_MIN else 1 if out.leftBlindspot else 2 if any_blinker else 4),
|
||||
"LCA_RIGHT_ICON": (0 if not lfa_icon or out.vEgo < LANE_CHANGE_SPEED_MIN else 1 if out.rightBlindspot else 2 if any_blinker else 4),
|
||||
"LCA_LEFT_ARROW": 2 if left_blinker else 0,
|
||||
"LCA_RIGHT_ARROW": 2 if right_blinker else 0,
|
||||
})
|
||||
|
||||
if lfa_icon and any_blinker:
|
||||
left_lane_raw, right_lane_raw = msg_1b5["Info_LftLnPosVal"], msg_1b5["Info_RtLnPosVal"]
|
||||
|
||||
scale_per_m = 15 / 1.7
|
||||
left_lane = abs(int(round(15 + (left_lane_raw - 1.7) * scale_per_m)))
|
||||
right_lane = abs(int(round(15 + (right_lane_raw - 1.7) * scale_per_m)))
|
||||
|
||||
if msg_1b5["Info_LftLnQualSta"] not in (2, 3):
|
||||
left_lane = 0
|
||||
if msg_1b5["Info_RtLnQualSta"] not in (2, 3):
|
||||
right_lane = 0
|
||||
|
||||
if left_lane_raw == -2.0248375:
|
||||
left_lane = 30 - right_lane
|
||||
if right_lane_raw == 2.0248375:
|
||||
right_lane = 30 - left_lane
|
||||
|
||||
if left_lane_raw == right_lane_raw == 0:
|
||||
left_lane = right_lane = 15
|
||||
elif left_lane_raw == 0:
|
||||
left_lane = 30 - right_lane
|
||||
elif right_lane_raw == 0:
|
||||
right_lane = 30 - left_lane
|
||||
|
||||
total = left_lane + right_lane
|
||||
if total == 0:
|
||||
left_lane = right_lane = 15
|
||||
else:
|
||||
left_lane = round((left_lane / total) * 30)
|
||||
right_lane = 30 - left_lane
|
||||
|
||||
msg_161["LANELINE_LEFT_POSITION"] = left_lane
|
||||
msg_161["LANELINE_RIGHT_POSITION"] = right_lane
|
||||
|
||||
if hud.leftLaneDepart or hud.rightLaneDepart:
|
||||
msg_162["VIBRATE"] = 1
|
||||
|
||||
if openpilot_longitudinal_control:
|
||||
if msg_161["ALERTS_3"] in (1, 2, 3, 4, 7, 8, 9, 10):
|
||||
msg_161["ALERTS_3"] = 0
|
||||
if msg_161["ALERTS_5"] == 4:
|
||||
msg_161["ALERTS_5"] = 0
|
||||
if msg_161["SOUNDS_3"] == 5:
|
||||
msg_161["SOUNDS_3"] = 0
|
||||
|
||||
msg_161.update({
|
||||
"SETSPEED": 3 if enabled else 1,
|
||||
"SETSPEED_HUD": 0 if not main_cruise_enabled else 2 if enabled else 1,
|
||||
"SETSPEED_SPEED": (
|
||||
255 if not main_cruise_enabled else
|
||||
(40 if is_metric else 25) if (s := round(out.vCruiseCluster * (1 if is_metric else CV.KPH_TO_MPH))) > (145 if is_metric else 90) else s
|
||||
),
|
||||
"DISTANCE": hud.leadDistanceBars,
|
||||
"DISTANCE_SPACING": 0 if not main_cruise_enabled else 1 if enabled else 3,
|
||||
"DISTANCE_LEAD": 0 if not main_cruise_enabled else 2 if enabled and hud.leadVisible else 1 if hud.leadVisible else 0,
|
||||
"DISTANCE_CAR": 0 if not main_cruise_enabled else 2 if enabled else 1,
|
||||
"SLA_ICON": 0,
|
||||
"NAV_ICON": 0,
|
||||
"TARGET": 0,
|
||||
})
|
||||
|
||||
msg_162["LEAD"] = 0 if not main_cruise_enabled else 2 if enabled else 1
|
||||
msg_162["LEAD_DISTANCE"] = msg_1b5["Longitudinal_Distance"]
|
||||
|
||||
return [packer.make_can_msg(msg, CAN.ECAN, data) for msg, data in [("CCNC_0x161", msg_161), ("CCNC_0x162", msg_162)]]
|
||||
|
||||
|
||||
def create_acc_control(packer, CAN, enabled, accel_last, accel, stopping, gas_override, set_speed, hud_control,
|
||||
lead_data: CanFdLeadData, main_cruise_enabled, tuning):
|
||||
lead_data: CanFdLeadData, main_cruise_enabled, tuning, cruise_info=None):
|
||||
jerk = 5
|
||||
jn = jerk / 50
|
||||
if not enabled or gas_override:
|
||||
@@ -154,6 +253,8 @@ def create_acc_control(packer, CAN, enabled, accel_last, accel, stopping, gas_ov
|
||||
"SET_ME_TMP_64": 0x64,
|
||||
"DISTANCE_SETTING": hud_control.leadDistanceBars,
|
||||
}
|
||||
if cruise_info:
|
||||
values.update({s: cruise_info[s] for s in ["ACC_ObjDist", "ACC_ObjRelSpd"]})
|
||||
|
||||
return packer.make_can_msg("SCC_CONTROL", CAN.ECAN, values)
|
||||
|
||||
|
||||
@@ -85,6 +85,8 @@ class CarInterface(CarInterfaceBase):
|
||||
ret.safetyConfigs[-1].safetyParam |= HyundaiSafetyFlags.CANFD_ALT_BUTTONS.value
|
||||
if ret.flags & HyundaiFlags.CANFD_CAMERA_SCC:
|
||||
ret.safetyConfigs[-1].safetyParam |= HyundaiSafetyFlags.CAMERA_SCC.value
|
||||
if ret.flags & HyundaiFlags.CCNC and not ret.flags & HyundaiFlags.CANFD_LKA_STEER_MSG:
|
||||
ret.safetyConfigs[-1].safetyParam |= HyundaiSafetyFlags.CCNC.value
|
||||
|
||||
else:
|
||||
# Shared configuration for non CAN-FD cars
|
||||
|
||||
@@ -22,7 +22,11 @@ NO_DATES_PLATFORMS = {
|
||||
# CAN FD
|
||||
CAR.KIA_SPORTAGE_5TH_GEN,
|
||||
CAR.HYUNDAI_SANTA_CRUZ_1ST_GEN,
|
||||
CAR.HYUNDAI_SANTA_CRUZ_2025,
|
||||
CAR.HYUNDAI_TUCSON_4TH_GEN,
|
||||
CAR.HYUNDAI_TUCSON_2025,
|
||||
CAR.HYUNDAI_TUCSON_HEV_2025,
|
||||
CAR.HYUNDAI_TUCSON_PHEV_2025,
|
||||
# CAN
|
||||
CAR.HYUNDAI_ELANTRA,
|
||||
CAR.HYUNDAI_ELANTRA_GT_I30,
|
||||
|
||||
@@ -68,6 +68,7 @@ class HyundaiSafetyFlags(IntFlag):
|
||||
CANFD_LKA_STEER_MSG_ALT = 128
|
||||
FCEV_GAS = 256
|
||||
ALT_LIMITS_2 = 512
|
||||
CCNC = 1024
|
||||
|
||||
|
||||
# Hyundai/Kia/Genesis SCC (Smart Cruise Control) and steering architecture:
|
||||
@@ -149,6 +150,8 @@ class HyundaiFlags(IntFlag):
|
||||
|
||||
ALT_LIMITS_2 = 2 ** 26
|
||||
|
||||
CCNC = 2 ** 27
|
||||
|
||||
|
||||
@dataclass
|
||||
class HyundaiCarDocs(CarDocs):
|
||||
@@ -285,6 +288,16 @@ class CAR(Platforms):
|
||||
CarSpecs(mass=1491, wheelbase=2.6, steerRatio=13.42, tireStiffnessFactor=0.385),
|
||||
flags=HyundaiFlags.CAMERA_SCC | HyundaiFlags.ALT_LIMITS_2,
|
||||
)
|
||||
HYUNDAI_KONA_2ND_GEN = HyundaiCanFDPlatformConfig(
|
||||
[HyundaiCarDocs("Hyundai Kona (without HDA II) 2024-25", car_parts=CarParts.common([CarHarness.hyundai_l]))],
|
||||
CarSpecs(mass=1590, wheelbase=2.66, steerRatio=13.6, tireStiffnessFactor=0.385),
|
||||
flags=HyundaiFlags.CCNC,
|
||||
)
|
||||
HYUNDAI_KONA_HEV_2ND_GEN = HyundaiCanFDPlatformConfig(
|
||||
[HyundaiCarDocs("Hyundai Kona Hybrid (without HDA II) 2024-26", car_parts=CarParts.common([CarHarness.hyundai_l]))],
|
||||
CarSpecs(mass=1590, wheelbase=2.66, steerRatio=13.6, tireStiffnessFactor=0.385),
|
||||
flags=HyundaiFlags.CCNC,
|
||||
)
|
||||
HYUNDAI_KONA_EV = HyundaiPlatformConfig(
|
||||
[HyundaiCarDocs("Hyundai Kona Electric 2018-21", car_parts=CarParts.common([CarHarness.hyundai_g]))],
|
||||
CarSpecs(mass=1685, wheelbase=2.6, steerRatio=13.42, tireStiffnessFactor=0.385),
|
||||
@@ -296,10 +309,13 @@ class CAR(Platforms):
|
||||
flags=HyundaiFlags.CAMERA_SCC | HyundaiFlags.EV | HyundaiFlags.ALT_LIMITS,
|
||||
)
|
||||
HYUNDAI_KONA_EV_2ND_GEN = HyundaiCanFDPlatformConfig(
|
||||
[HyundaiCarDocs("Hyundai Kona Electric (with HDA II, Korea only) 2023", video="https://www.youtube.com/watch?v=U2fOCmcQ8hw",
|
||||
car_parts=CarParts.common([CarHarness.hyundai_r]))],
|
||||
[
|
||||
HyundaiCarDocs("Hyundai Kona Electric (with HDA II, Korea only) 2023", video="https://www.youtube.com/watch?v=U2fOCmcQ8hw",
|
||||
car_parts=CarParts.common([CarHarness.hyundai_r])),
|
||||
HyundaiCarDocs("Hyundai Kona Electric (without HDA II) 2024", car_parts=CarParts.common([CarHarness.hyundai_a])),
|
||||
],
|
||||
CarSpecs(mass=1740, wheelbase=2.66, steerRatio=13.6, tireStiffnessFactor=0.385),
|
||||
flags=HyundaiFlags.EV | HyundaiFlags.CANFD_NO_RADAR_DISABLE,
|
||||
flags=HyundaiFlags.EV | HyundaiFlags.CANFD_NO_RADAR_DISABLE | HyundaiFlags.CCNC,
|
||||
)
|
||||
HYUNDAI_KONA_HEV = HyundaiPlatformConfig(
|
||||
[HyundaiCarDocs("Hyundai Kona Hybrid 2020", car_parts=CarParts.common([CarHarness.hyundai_i]))], # TODO: check packages,
|
||||
@@ -339,6 +355,11 @@ class CAR(Platforms):
|
||||
CarSpecs(mass=1513, wheelbase=2.84, steerRatio=13.27 * 1.15, tireStiffnessFactor=0.65), # 15% higher at the center seems reasonable
|
||||
flags=HyundaiFlags.MANDO_RADAR | HyundaiFlags.CHECKSUM_CRC8,
|
||||
)
|
||||
HYUNDAI_SONATA_2024 = HyundaiCanFDPlatformConfig(
|
||||
[HyundaiCarDocs("Hyundai Sonata (without HDA II) 2024-26", car_parts=CarParts.common([CarHarness.hyundai_a]))],
|
||||
CarSpecs(mass=1556, wheelbase=2.84, steerRatio=12.81),
|
||||
flags=HyundaiFlags.CCNC,
|
||||
)
|
||||
HYUNDAI_SONATA_LF = HyundaiPlatformConfig(
|
||||
[HyundaiCarDocs("Hyundai Sonata 2018-19", car_parts=CarParts.common([CarHarness.hyundai_e]))],
|
||||
CarSpecs(mass=1536, wheelbase=2.804, steerRatio=13.27 * 1.15), # 15% higher at the center seems reasonable
|
||||
@@ -374,6 +395,11 @@ class CAR(Platforms):
|
||||
HYUNDAI_SONATA.specs,
|
||||
flags=HyundaiFlags.MANDO_RADAR | HyundaiFlags.CHECKSUM_CRC8 | HyundaiFlags.HYBRID,
|
||||
)
|
||||
HYUNDAI_SONATA_HEV_2024 = HyundaiCanFDPlatformConfig(
|
||||
[HyundaiCarDocs("Hyundai Sonata Hybrid (without HDA II) 2024-25", car_parts=CarParts.common([CarHarness.hyundai_a]))],
|
||||
CarSpecs(mass=1616, wheelbase=2.84, steerRatio=13.27),
|
||||
flags=HyundaiFlags.CCNC,
|
||||
)
|
||||
HYUNDAI_IONIQ_5 = HyundaiCanFDPlatformConfig(
|
||||
[
|
||||
HyundaiCarDocs("Hyundai Ioniq 5 (Southeast Asia and Europe only) 2022-24", "All", car_parts=CarParts.common([CarHarness.hyundai_q])),
|
||||
@@ -383,6 +409,11 @@ class CAR(Platforms):
|
||||
CarSpecs(mass=1948, wheelbase=2.97, steerRatio=14.26, tireStiffnessFactor=0.65),
|
||||
flags=HyundaiFlags.EV,
|
||||
)
|
||||
HYUNDAI_IONIQ_5_N = HyundaiCanFDPlatformConfig(
|
||||
[HyundaiCarDocs("Hyundai Ioniq 5 N (with HDA II) 2024", car_parts=CarParts.common([CarHarness.hyundai_s]))],
|
||||
CarSpecs(mass=2205, wheelbase=3.00, steerRatio=14.26, tireStiffnessFactor=1.3),
|
||||
flags=HyundaiFlags.EV | HyundaiFlags.CCNC,
|
||||
)
|
||||
HYUNDAI_IONIQ_6 = HyundaiCanFDPlatformConfig(
|
||||
[
|
||||
HyundaiCarDocs("Hyundai Ioniq 6 (without HDA II) 2023-24", "Highway Driving Assist", car_parts=CarParts.common([CarHarness.hyundai_l])),
|
||||
@@ -400,11 +431,31 @@ class CAR(Platforms):
|
||||
],
|
||||
CarSpecs(mass=1630, wheelbase=2.756, steerRatio=13.7, tireStiffnessFactor=0.385),
|
||||
)
|
||||
HYUNDAI_TUCSON_2025 = HyundaiCanFDPlatformConfig(
|
||||
[HyundaiCarDocs("Hyundai Tucson (without HDA II) 2025-26", car_parts=CarParts.common([CarHarness.hyundai_n]))],
|
||||
CarSpecs(mass=1630, wheelbase=2.756, steerRatio=13.7, tireStiffnessFactor=0.385),
|
||||
flags=HyundaiFlags.CCNC,
|
||||
)
|
||||
HYUNDAI_TUCSON_HEV_2025 = HyundaiCanFDPlatformConfig(
|
||||
[HyundaiCarDocs("Hyundai Tucson Hybrid (without HDA II) 2025-26", car_parts=CarParts.common([CarHarness.hyundai_n]))],
|
||||
CarSpecs(mass=1630, wheelbase=2.756, steerRatio=13.7, tireStiffnessFactor=0.385),
|
||||
flags=HyundaiFlags.CCNC,
|
||||
)
|
||||
HYUNDAI_TUCSON_PHEV_2025 = HyundaiCanFDPlatformConfig(
|
||||
[HyundaiCarDocs("Hyundai Tucson Plug-in Hybrid (without HDA II) 2025", car_parts=CarParts.common([CarHarness.hyundai_n]))],
|
||||
CarSpecs(mass=1630, wheelbase=2.756, steerRatio=13.7, tireStiffnessFactor=0.385),
|
||||
flags=HyundaiFlags.CCNC,
|
||||
)
|
||||
HYUNDAI_SANTA_CRUZ_1ST_GEN = HyundaiCanFDPlatformConfig(
|
||||
[HyundaiCarDocs("Hyundai Santa Cruz 2022-24", car_parts=CarParts.common([CarHarness.hyundai_n]))],
|
||||
# weight from Limited trim - the only supported trim, steering ratio according to Hyundai News https://www.hyundainews.com/assets/documents/original/48035-2022SantaCruzProductGuideSpecsv2081521.pdf
|
||||
CarSpecs(mass=1870, wheelbase=3, steerRatio=14.2),
|
||||
)
|
||||
HYUNDAI_SANTA_CRUZ_2025 = HyundaiCanFDPlatformConfig(
|
||||
[HyundaiCarDocs("Hyundai Santa Cruz (without HDA II) 2025", car_parts=CarParts.common([CarHarness.hyundai_n]))],
|
||||
CarSpecs(mass=1920, wheelbase=3, steerRatio=14.2),
|
||||
flags=HyundaiFlags.CCNC,
|
||||
)
|
||||
HYUNDAI_CUSTIN_1ST_GEN = HyundaiPlatformConfig(
|
||||
[HyundaiCarDocs("Hyundai Custin 2023", "All", car_parts=CarParts.common([CarHarness.hyundai_k]))],
|
||||
CarSpecs(mass=1690, wheelbase=3.055, steerRatio=17), # mass: from https://www.hyundai-motor.com.tw/clicktobuy/custin#spec_0, steerRatio: from learner
|
||||
@@ -419,11 +470,24 @@ class CAR(Platforms):
|
||||
],
|
||||
CarSpecs(mass=2878 * CV.LB_TO_KG, wheelbase=2.8, steerRatio=13.75, tireStiffnessFactor=0.5)
|
||||
)
|
||||
KIA_K4_2025 = HyundaiCanFDPlatformConfig(
|
||||
[
|
||||
HyundaiCarDocs("Kia K4 (without HDA II) 2025-26", car_parts=CarParts.common([CarHarness.hyundai_a])),
|
||||
HyundaiCarDocs("Kia K4 (with HDA II) 2025", car_parts=CarParts.common([CarHarness.hyundai_r])),
|
||||
],
|
||||
CarSpecs(mass=2987 * CV.LB_TO_KG, wheelbase=2.72, steerRatio=13.4),
|
||||
flags=HyundaiFlags.CCNC,
|
||||
)
|
||||
KIA_K5_2021 = HyundaiPlatformConfig(
|
||||
[HyundaiCarDocs("Kia K5 2021-24", car_parts=CarParts.common([CarHarness.hyundai_a]))],
|
||||
CarSpecs(mass=3381 * CV.LB_TO_KG, wheelbase=2.85, steerRatio=13.27, tireStiffnessFactor=0.5), # 2021 Kia K5 Steering Ratio (all trims)
|
||||
flags=HyundaiFlags.CHECKSUM_CRC8,
|
||||
)
|
||||
KIA_K5_2025 = HyundaiCanFDPlatformConfig(
|
||||
[HyundaiCarDocs("Kia K5 (without HDA II) 2025", car_parts=CarParts.common([CarHarness.hyundai_m]))],
|
||||
CarSpecs(mass=3230 * CV.LB_TO_KG, wheelbase=2.85, steerRatio=13.27),
|
||||
flags=HyundaiFlags.CCNC,
|
||||
)
|
||||
KIA_K5_HEV_2020 = HyundaiPlatformConfig(
|
||||
[HyundaiCarDocs("Kia K5 Hybrid 2020-22", car_parts=CarParts.common([CarHarness.hyundai_a]))],
|
||||
KIA_K5_2021.specs,
|
||||
@@ -534,6 +598,11 @@ class CAR(Platforms):
|
||||
CarSpecs(mass=3957 * CV.LB_TO_KG, wheelbase=2.81, steerRatio=13.5), # average of the platforms
|
||||
flags=HyundaiFlags.CANFD_RADAR_SCC,
|
||||
)
|
||||
KIA_SORENTO_2024 = HyundaiCanFDPlatformConfig(
|
||||
[HyundaiCarDocs("Kia Sorento (without HDA II) 2024-25", car_parts=CarParts.common([CarHarness.hyundai_a]))],
|
||||
CarSpecs(mass=3957 * CV.LB_TO_KG, wheelbase=2.81, steerRatio=13.5),
|
||||
flags=HyundaiFlags.CCNC,
|
||||
)
|
||||
KIA_SORENTO_HEV_4TH_GEN = HyundaiCanFDPlatformConfig(
|
||||
[
|
||||
HyundaiCarDocs("Kia Sorento Hybrid 2021-23", "All", car_parts=CarParts.common([CarHarness.hyundai_a])),
|
||||
|
||||
@@ -246,6 +246,8 @@ class CarInterfaceBase(ABC, CarInterfaceBaseSP):
|
||||
ret.steerRatioRear = 0. # no rear steering, at least on the listed cars aboveA
|
||||
ret.openpilotLongitudinalControl = False
|
||||
ret.stopAccel = -2.0
|
||||
ret.longitudinalTuning.kpBP = [0.]
|
||||
ret.longitudinalTuning.kpV = [0.]
|
||||
ret.longitudinalTuning.kiBP = [0.]
|
||||
ret.longitudinalTuning.kiV = [0.]
|
||||
# TODO estimate car specific lag, use .15s for now
|
||||
|
||||
@@ -1,36 +0,0 @@
|
||||
from opendbc.can.packer import CANPacker
|
||||
from opendbc.car import Bus
|
||||
from opendbc.car.lateral import apply_driver_steer_torque_limits
|
||||
from opendbc.car.interfaces import CarControllerBase
|
||||
from opendbc.car.mg.mgcan import create_lka_steering
|
||||
from opendbc.car.mg.values import CarControllerParams
|
||||
|
||||
|
||||
class CarController(CarControllerBase):
|
||||
def __init__(self, dbc_names, CP, CP_SP):
|
||||
super().__init__(dbc_names, CP, CP_SP)
|
||||
self.packer = CANPacker(dbc_names[Bus.pt])
|
||||
|
||||
self.apply_torque_last = 0
|
||||
|
||||
def update(self, CC, CC_SP, CS, now_nanos):
|
||||
actuators = CC.actuators
|
||||
can_sends = []
|
||||
|
||||
# steering command
|
||||
if self.frame % CarControllerParams.STEER_STEP == 0:
|
||||
if CC.latActive:
|
||||
new_torque = int(round(actuators.torque * CarControllerParams.STEER_MAX))
|
||||
apply_torque = apply_driver_steer_torque_limits(new_torque, self.apply_torque_last, CS.out.steeringTorque, CarControllerParams)
|
||||
else:
|
||||
apply_torque = 0
|
||||
|
||||
self.apply_torque_last = apply_torque
|
||||
can_sends.append(create_lka_steering(self.packer, (self.frame // CarControllerParams.STEER_STEP) % 16, apply_torque, CC.latActive))
|
||||
|
||||
new_actuators = actuators.as_builder()
|
||||
new_actuators.torque = self.apply_torque_last / CarControllerParams.STEER_MAX
|
||||
new_actuators.torqueOutputCan = self.apply_torque_last
|
||||
|
||||
self.frame += 1
|
||||
return new_actuators, can_sends
|
||||
@@ -1,76 +0,0 @@
|
||||
from opendbc.can.parser import CANParser
|
||||
from opendbc.car import Bus, structs
|
||||
from opendbc.car.interfaces import CarStateBase
|
||||
from opendbc.car.mg.values import DBC
|
||||
from opendbc.car.common.conversions import Conversions as CV
|
||||
|
||||
GearShifter = structs.CarState.GearShifter
|
||||
|
||||
GEAR_MAP = {
|
||||
0: GearShifter.unknown,
|
||||
15: GearShifter.park,
|
||||
14: GearShifter.reverse,
|
||||
13: GearShifter.neutral,
|
||||
**{i: GearShifter.drive for i in range(1, 9)},
|
||||
}
|
||||
|
||||
|
||||
class CarState(CarStateBase):
|
||||
def update(self, can_parsers) -> structs.CarState:
|
||||
cp = can_parsers[Bus.pt]
|
||||
cp_cam = can_parsers[Bus.cam]
|
||||
ret = structs.CarState()
|
||||
ret_sp = structs.CarStateSP()
|
||||
|
||||
# Vehicle speed
|
||||
ret.vEgoRaw = cp.vl["SCS_HSC2_FrP19"]["VehSpdAvgHSC2"] * CV.KPH_TO_MS
|
||||
ret.vEgo, ret.aEgo = self.update_speed_kf(ret.vEgoRaw)
|
||||
ret.standstill = cp.vl["SCS_HSC2_FrP24"]["VehSdslStsHSC2"] == 1
|
||||
|
||||
# Gas pedal
|
||||
ret.gasPressed = cp.vl["GW_HSC2_HCU_FrP00"]["EPTAccelActuPosHSC2"] > 0
|
||||
|
||||
# Brake pedal
|
||||
ret.brakePressed = cp.vl["EHBS_HSC2_FrP00"]["BrkPdlAppdHSC2"] == 1
|
||||
|
||||
# Steering wheel
|
||||
ret.steeringAngleDeg = cp.vl["SAS_HSC2_FrP00"]["StrgWhlAngHSC2"]
|
||||
ret.steeringRateDeg = cp.vl["SAS_HSC2_FrP00"]["StrgWhlAngGrdHSC2"]
|
||||
ret.steeringTorque = cp.vl["EPS_HSC2_FrP03"]["DrvrStrgDlvrdToqHSC2"]
|
||||
ret.steeringTorqueEps = cp.vl["EPS_HSC2_FrP03"]["ChLKARespToqHSC2"]
|
||||
ret.steeringPressed = self.update_steering_pressed(abs(ret.steeringTorque) > 1.0, 5)
|
||||
|
||||
ret.steerFaultTemporary = cp_cam.vl["FVCM_HSC2_FrP02"]["LDWSysFltStsHSC2"] != 0
|
||||
|
||||
# Cruise state
|
||||
ret.cruiseState.enabled = cp.vl["RADAR_HSC2_FrP00"]["ACCSysSts_RadarHSC2"] in (2, 3) # Active, Override
|
||||
ret.cruiseState.available = cp.vl["RADAR_HSC2_FrP00"]["ACCSysSts_RadarHSC2"] != 0
|
||||
ret.cruiseState.standstill = False
|
||||
ret.cruiseState.speed = cp.vl["RADAR_HSC2_FrP02"]["ACCDrvrSelTrgtSpd_RadarHSC2"] * CV.KPH_TO_MS
|
||||
|
||||
ret.accFaulted = cp.vl["RADAR_HSC2_FrP00"]["ACCSysFltSts_SCSHSC2"] != 0
|
||||
|
||||
# Gear
|
||||
ret.gearShifter = GEAR_MAP.get(int(cp.vl["GW_HSC2_ECM_FrP04"]["TrEstdGearHSC2"]), GearShifter.unknown)
|
||||
|
||||
# Doors
|
||||
ret.doorOpen = any([cp.vl["GW_HSC2_BCM_FrP04"]["DrvrDoorOpenStsHSC2"],
|
||||
cp.vl["GW_HSC2_BCM_FrP04"]["FrtPsngDoorOpenStsHSC2"],
|
||||
cp.vl["GW_HSC2_BCM_FrP04"]["RLDoorOpenStsHSC2"],
|
||||
cp.vl["GW_HSC2_BCM_FrP04"]["RRDoorOpenStsHSC2"]])
|
||||
|
||||
# Blinkers
|
||||
ret.leftBlinker = cp.vl["GW_HSC2_BCM_FrP04"]["DircnIndLampSwStsHSC2"] == 1
|
||||
ret.rightBlinker = cp.vl["GW_HSC2_BCM_FrP04"]["DircnIndLampSwStsHSC2"] == 2
|
||||
|
||||
# Seatbelt
|
||||
ret.seatbeltUnlatched = cp.vl["GW_HSC2_SDM_FrP00"]["DrvrSbltAtcHSC2"] != 1
|
||||
|
||||
return ret, ret_sp
|
||||
|
||||
@staticmethod
|
||||
def get_can_parsers(CP, CP_SP):
|
||||
return {
|
||||
Bus.pt: CANParser(DBC[CP.carFingerprint][Bus.pt], [], 0),
|
||||
Bus.cam: CANParser(DBC[CP.carFingerprint][Bus.pt], [], 2),
|
||||
}
|
||||
@@ -1,18 +0,0 @@
|
||||
from opendbc.car.structs import CarParams
|
||||
from opendbc.car.mg.values import CAR
|
||||
|
||||
Ecu = CarParams.Ecu
|
||||
|
||||
FW_VERSIONS = {
|
||||
CAR.MG_5_EV: {
|
||||
(Ecu.eps, 0x721, None): [
|
||||
b'\x10gs\x16\x01',
|
||||
],
|
||||
(Ecu.fwdCamera, 0x733, None): [
|
||||
b'\x10y\x00 \x01',
|
||||
],
|
||||
(Ecu.fwdRadar, 0x734, None): [
|
||||
b'\x10y\x000\x01',
|
||||
],
|
||||
},
|
||||
}
|
||||
@@ -1,25 +0,0 @@
|
||||
from opendbc.car import get_safety_config, structs
|
||||
from opendbc.car.interfaces import CarInterfaceBase
|
||||
from opendbc.car.mg.carcontroller import CarController
|
||||
from opendbc.car.mg.carstate import CarState
|
||||
|
||||
|
||||
class CarInterface(CarInterfaceBase):
|
||||
CarState = CarState
|
||||
CarController = CarController
|
||||
|
||||
@staticmethod
|
||||
def _get_params(ret: structs.CarParams, candidate, fingerprint, car_fw, alpha_long, is_release, docs) -> structs.CarParams:
|
||||
ret.brand = "mg"
|
||||
ret.dashcamOnly = True
|
||||
|
||||
ret.safetyConfigs = [get_safety_config(structs.CarParams.SafetyModel.mg)]
|
||||
|
||||
ret.steerActuatorDelay = 0.3
|
||||
CarInterfaceBase.configure_torque_tune(candidate, ret.lateralTuning)
|
||||
|
||||
ret.steerControlType = structs.CarParams.SteerControlType.torque
|
||||
ret.radarUnavailable = True
|
||||
ret.alphaLongitudinalAvailable = False
|
||||
|
||||
return ret
|
||||
@@ -1,28 +0,0 @@
|
||||
def calc_checksum(values):
|
||||
lka_req_toq = values['LKAReqToqHSC2'] + 0x400
|
||||
lka_req_toq_sts = values['LKAReqToqStsHSC2']
|
||||
lka_req_toq_v = values['LKAReqToqVHSC2']
|
||||
lka_alv_rc = values['LKAAlvRCHSC2']
|
||||
|
||||
combined = ((lka_req_toq << 1) | (lka_req_toq_sts << 12) | lka_req_toq_v) & 0x3FFF
|
||||
with_counter = (combined + lka_alv_rc) & 0x3FFF
|
||||
checksum = ((~with_counter) + 1) & 0x3FFF
|
||||
|
||||
return checksum
|
||||
|
||||
|
||||
def create_lka_steering(packer, counter, apply_torque, active):
|
||||
values = {
|
||||
"LKAReqToqHSC2": apply_torque,
|
||||
"LKAReqToqVHSC2": 0,
|
||||
"LKAAlvRCHSC2": counter,
|
||||
"LDWLKAVbnLvlReqHSC2": 0, # TODO: vibration level?
|
||||
"LKASysStsHSC2": 0,
|
||||
"LKAReqToqStsHSC2": active,
|
||||
"LKASysFltStsHSC2": 0,
|
||||
"LKADrvrTkovReqHSC2": 0,
|
||||
"LKAReqToqPVHSC2": 0
|
||||
}
|
||||
|
||||
values["LKAReqToqPVHSC2"] = calc_checksum(values)
|
||||
return packer.make_can_msg("FVCM_HSC2_FrP03", 0, values)
|
||||
@@ -1,47 +0,0 @@
|
||||
from dataclasses import dataclass, field
|
||||
|
||||
from opendbc.car import Bus, CarSpecs, DbcDict, PlatformConfig, Platforms
|
||||
from opendbc.car.docs_definitions import CarHarness, CarDocs, CarParts
|
||||
from opendbc.car.fw_query_definitions import FwQueryConfig, Request, StdQueries
|
||||
|
||||
|
||||
@dataclass
|
||||
class MgCarDocs(CarDocs):
|
||||
package: str = "All"
|
||||
car_parts: CarParts = field(default_factory=CarParts.common([CarHarness.vw_a]))
|
||||
|
||||
|
||||
@dataclass
|
||||
class MgPlatformConfig(PlatformConfig):
|
||||
dbc_dict: DbcDict = field(default_factory=lambda: {Bus.pt: 'mg'})
|
||||
|
||||
|
||||
class CAR(Platforms):
|
||||
MG_5_EV = MgPlatformConfig([MgCarDocs("MG 5 EV 2021")], CarSpecs(mass=1640., wheelbase=2.66, steerRatio=15.8))
|
||||
|
||||
|
||||
FW_QUERY_CONFIG = FwQueryConfig(
|
||||
fw_version_regex=br"\x10[\x00-\xff]{3}\x01",
|
||||
requests=[
|
||||
Request(
|
||||
[StdQueries.TESTER_PRESENT_REQUEST, StdQueries.MANUFACTURER_ECU_HARDWARE_NUMBER_REQUEST],
|
||||
[StdQueries.TESTER_PRESENT_RESPONSE, StdQueries.MANUFACTURER_ECU_HARDWARE_NUMBER_RESPONSE],
|
||||
bus=1,
|
||||
),
|
||||
],
|
||||
)
|
||||
|
||||
class CarControllerParams:
|
||||
STEER_STEP = 2 # FVCM_HSC2_FrP03 message frequency 50Hz
|
||||
STEER_MAX = 300
|
||||
STEER_DELTA_UP = 6 # Max torque reached in 1.00s (STEER_MAX / (50Hz * 1.00))
|
||||
STEER_DELTA_DOWN = 10 # Min torque reached in 0.60s (STEER_MAX / (50Hz * 0.60))
|
||||
STEER_DRIVER_ALLOWANCE = 100 # allowed driver torque before start limiting
|
||||
STEER_DRIVER_MULTIPLIER = 2 # weight driver torque
|
||||
STEER_DRIVER_FACTOR = 100
|
||||
|
||||
def __init__(self, CP):
|
||||
pass
|
||||
|
||||
|
||||
DBC = CAR.create_dbc_map()
|
||||
@@ -87,9 +87,8 @@ class CarInterface(CarInterfaceBase):
|
||||
else:
|
||||
raise ValueError(f"unknown car: {candidate}")
|
||||
|
||||
# TODO: the longitudinal limits need to be speed-dependent, so alpha long is disabled for now
|
||||
# revert this in the PR that re-enables Subaru longitudinal: https://github.com/commaai/opendbc/pull/3689
|
||||
ret.alphaLongitudinalAvailable = False
|
||||
ret.alphaLongitudinalAvailable = not (ret.flags & (SubaruFlags.GLOBAL_GEN2 | SubaruFlags.PREGLOBAL |
|
||||
SubaruFlags.LKAS_ANGLE | SubaruFlags.HYBRID))
|
||||
ret.openpilotLongitudinalControl = alpha_long and ret.alphaLongitudinalAvailable
|
||||
|
||||
if ret.flags & SubaruFlags.GLOBAL_GEN2 and ret.openpilotLongitudinalControl:
|
||||
|
||||
@@ -16,7 +16,6 @@ from opendbc.car.values import Platform
|
||||
from opendbc.car.volkswagen.values import CAR as VOLKSWAGEN
|
||||
from opendbc.car.body.values import CAR as COMMA
|
||||
from opendbc.car.psa.values import CAR as PSA
|
||||
from opendbc.car.mg.values import CAR as MG
|
||||
|
||||
# FIXME: add routes for these cars
|
||||
non_tested_cars = [
|
||||
@@ -29,6 +28,9 @@ non_tested_cars = [
|
||||
SUBARU.SUBARU_FORESTER_HYBRID,
|
||||
VOLKSWAGEN.PORSCHE_MACAN_MK1,
|
||||
HONDA.ACURA_TLX_2G,
|
||||
HYUNDAI.KIA_SORENTO_2024,
|
||||
HYUNDAI.HYUNDAI_IONIQ_5_N,
|
||||
HYUNDAI.HYUNDAI_TUCSON_PHEV_2025,
|
||||
|
||||
# These had their DSUs unplugged, need new routes
|
||||
# TOYOTA.LEXUS_ES # hybrid
|
||||
@@ -166,6 +168,7 @@ routes = [
|
||||
CarTestRoute("66eaa6c3b6b2afc6/00000009--3a5199aabe", HYUNDAI.GENESIS_G80_2ND_GEN_FL), # LKA steering
|
||||
CarTestRoute("0bbe367c98fa1538/2023-09-16--00-16-49", HYUNDAI.HYUNDAI_CUSTIN_1ST_GEN),
|
||||
CarTestRoute("f0709d2bc6ca451f/2022-10-15--08-13-54", HYUNDAI.HYUNDAI_SANTA_CRUZ_1ST_GEN),
|
||||
CarTestRoute("6e7904b03a4aafc2/00000010--31034184b6", HYUNDAI.HYUNDAI_SANTA_CRUZ_2025),
|
||||
CarTestRoute("4dbd55df87507948/2022-03-01--09-45-38", HYUNDAI.HYUNDAI_SANTA_FE),
|
||||
CarTestRoute("bf43d9df2b660eb0/2021-09-23--14-16-37", HYUNDAI.HYUNDAI_SANTA_FE_2022),
|
||||
CarTestRoute("37398f32561a23ad/2021-11-18--00-11-35", HYUNDAI.HYUNDAI_SANTA_FE_HEV_2022),
|
||||
@@ -179,11 +182,14 @@ routes = [
|
||||
CarTestRoute("6a42c1197b2a8179/2023-09-21--10-23-44", HYUNDAI.KIA_OPTIMA_H_G4_FL),
|
||||
CarTestRoute("c75a59efa0ecd502/2021-03-11--20-52-55", HYUNDAI.KIA_SELTOS),
|
||||
CarTestRoute("5b7c365c50084530/2020-04-15--16-13-24", HYUNDAI.HYUNDAI_SONATA),
|
||||
CarTestRoute("4267ea8a353cdb36/00000262--8a427003c7", HYUNDAI.HYUNDAI_SONATA_2024, segment=34),
|
||||
CarTestRoute("b2a38c712dcf90bd/2020-05-18--18-12-48", HYUNDAI.HYUNDAI_SONATA_LF),
|
||||
CarTestRoute("c344fd2492c7a9d2/2023-12-11--09-03-23", HYUNDAI.HYUNDAI_STARIA_4TH_GEN),
|
||||
CarTestRoute("fb3fd42f0baaa2f8/2022-03-30--15-25-05", HYUNDAI.HYUNDAI_TUCSON),
|
||||
CarTestRoute("db68bbe12250812c/2022-12-05--00-54-12", HYUNDAI.HYUNDAI_TUCSON_4TH_GEN), # 2023
|
||||
CarTestRoute("36e10531feea61a4/2022-07-25--13-37-42", HYUNDAI.HYUNDAI_TUCSON_4TH_GEN), # hybrid
|
||||
CarTestRoute("a01ca5d4f394c812/00000000--e98b7e4414", HYUNDAI.HYUNDAI_TUCSON_2025),
|
||||
CarTestRoute("22f9090014364a87/00000002--4cc739c0b2", HYUNDAI.HYUNDAI_TUCSON_HEV_2025),
|
||||
CarTestRoute("5875672fc1d4bf57/2020-07-23--21-33-28", HYUNDAI.KIA_SORENTO),
|
||||
CarTestRoute("1d0d000db3370fd0/2023-01-04--22-28-42", HYUNDAI.KIA_SORENTO_4TH_GEN, segment=5),
|
||||
CarTestRoute("fc19648042eb6896/2023-08-16--11-43-27", HYUNDAI.KIA_SORENTO_HEV_4TH_GEN, segment=14),
|
||||
@@ -201,6 +207,8 @@ routes = [
|
||||
CarTestRoute("ab59fe909f626921/2021-10-18--18-34-28", HYUNDAI.HYUNDAI_IONIQ_HEV_2022),
|
||||
CarTestRoute("22d955b2cd499c22/2020-08-10--19-58-21", HYUNDAI.HYUNDAI_KONA),
|
||||
CarTestRoute("0099bdb24d82951b/00000005--c38d940b04", HYUNDAI.HYUNDAI_KONA_2022),
|
||||
CarTestRoute("32025f26789d8fab/00000022--a499e8ffa3", HYUNDAI.HYUNDAI_KONA_2ND_GEN),
|
||||
CarTestRoute("97ca61196eb73e0d/00000052--4555329470", HYUNDAI.HYUNDAI_KONA_HEV_2ND_GEN),
|
||||
CarTestRoute("efc48acf44b1e64d/2021-05-28--21-05-04", HYUNDAI.HYUNDAI_KONA_EV),
|
||||
CarTestRoute("f90d3cd06caeb6fa/2023-09-06--17-15-47", HYUNDAI.HYUNDAI_KONA_EV), # openpilot longitudinal enabled
|
||||
CarTestRoute("ff973b941a69366f/2022-07-28--22-01-19", HYUNDAI.HYUNDAI_KONA_EV_2022, segment=11),
|
||||
@@ -214,7 +222,9 @@ routes = [
|
||||
CarTestRoute("d545129f3ca90f28/2022-10-19--09-22-54", HYUNDAI.KIA_EV6), # LKA steering
|
||||
CarTestRoute("68d6a96e703c00c9/2022-09-10--16-09-39", HYUNDAI.KIA_EV6), # LFA steering
|
||||
CarTestRoute("9b25e8c1484a1b67/2023-04-13--10-41-45", HYUNDAI.KIA_EV6),
|
||||
CarTestRoute("baf39eeaba1217ca/00000002--b36e3fa031", HYUNDAI.KIA_K4_2025),
|
||||
CarTestRoute("007d5e4ad9f86d13/2021-09-30--15-09-23", HYUNDAI.KIA_K5_2021),
|
||||
CarTestRoute("c4a804b067623789/0000007c--163f831540", HYUNDAI.KIA_K5_2025),
|
||||
CarTestRoute("c58dfc9fc16590e0/2023-01-14--13-51-48", HYUNDAI.KIA_K5_HEV_2020),
|
||||
CarTestRoute("74fbff45aa20fe9e/00000010--6f173d5799", HYUNDAI.KIA_K7_2017),
|
||||
CarTestRoute("78ad5150de133637/2023-09-13--16-15-57", HYUNDAI.KIA_K8_HEV_1ST_GEN),
|
||||
@@ -233,6 +243,7 @@ routes = [
|
||||
CarTestRoute("82e9cdd3f43bf83e/2021-05-15--02-42-51", HYUNDAI.HYUNDAI_ELANTRA_2021),
|
||||
CarTestRoute("715ac05b594e9c59/2021-06-20--16-21-07", HYUNDAI.HYUNDAI_ELANTRA_HEV_2021),
|
||||
CarTestRoute("7120aa90bbc3add7/2021-08-02--07-12-31", HYUNDAI.HYUNDAI_SONATA_HYBRID),
|
||||
CarTestRoute("bc40c72b728178f2/00000006--ee76ae8c42", HYUNDAI.HYUNDAI_SONATA_HEV_2024),
|
||||
CarTestRoute("715ac05b594e9c59/2021-10-27--23-24-56", HYUNDAI.GENESIS_G70_2020),
|
||||
CarTestRoute("6b0d44d22df18134/2023-05-06--10-36-55", HYUNDAI.GENESIS_GV80),
|
||||
|
||||
@@ -373,8 +384,6 @@ routes = [
|
||||
CarTestRoute("2c912ca5de3b1ee9/0000025d--6eb6bcbca4", TESLA.TESLA_MODEL_Y, segment=4),
|
||||
CarTestRoute("bdda168c0c35fad7/00000001--5c5a36ec06", TESLA.TESLA_MODEL_X), # openpilot longitudinal
|
||||
|
||||
CarTestRoute("5d61e2f6e1f247f3/00000054--d3dfb01b34", MG.MG_5_EV),
|
||||
|
||||
# Segments that test specific issues
|
||||
# Controls mismatch due to standstill threshold
|
||||
CarTestRoute("bec2dcfde6a64235/2022-04-08--14-21-32", HONDA.HONDA_CRV_HYBRID, segment=22),
|
||||
|
||||
@@ -53,6 +53,7 @@ def _make_car_test(car_name):
|
||||
assert car_params.maxLateralAccel > 0
|
||||
|
||||
# Longitudinal sanity checks
|
||||
assert len(car_params.longitudinalTuning.kpV) == len(car_params.longitudinalTuning.kpBP)
|
||||
assert len(car_params.longitudinalTuning.kiV) == len(car_params.longitudinalTuning.kiBP)
|
||||
|
||||
# If we're using the interceptor for gasPressed, we should be commanding gas with it
|
||||
|
||||
@@ -271,7 +271,7 @@ class TestFwFingerprintTiming(unittest.TestCase):
|
||||
print(f'get_vin {name} case, query time={self.total_time / self.N} seconds')
|
||||
|
||||
def test_fw_query_timing(self):
|
||||
total_ref_time = 8.3
|
||||
total_ref_time = 8.2
|
||||
brand_ref_times = {
|
||||
'gm': 1.0,
|
||||
'body': 0.1,
|
||||
@@ -287,7 +287,6 @@ class TestFwFingerprintTiming(unittest.TestCase):
|
||||
'volkswagen': 0.65,
|
||||
'rivian': 0.3,
|
||||
'psa': 0.1,
|
||||
'mg': 0.1,
|
||||
}
|
||||
|
||||
total_times = 0.0
|
||||
|
||||
@@ -79,7 +79,6 @@ legend = ["LAT_ACCEL_FACTOR", "MAX_LAT_ACCEL_MEASURED", "FRICTION"]
|
||||
"KIA_K8_HEV_1ST_GEN" = [2.5, 2.5, 0.1]
|
||||
"HYUNDAI_CUSTIN_1ST_GEN" = [2.5, 2.5, 0.1]
|
||||
"LEXUS_GS_F" = [2.5, 2.5, 0.08]
|
||||
"MG_5_EV" = [1.2, 2.5, 0.18]
|
||||
"HYUNDAI_STARIA_4TH_GEN" = [1.8, 2.0, 0.15]
|
||||
"GENESIS_GV70_ELECTRIFIED_1ST_GEN" = [1.9, 1.9, 0.09]
|
||||
"GENESIS_G80_2ND_GEN_FL" = [2.5819356441497803, 2.5, 0.11244568973779678]
|
||||
@@ -105,6 +104,13 @@ legend = ["LAT_ACCEL_FACTOR", "MAX_LAT_ACCEL_MEASURED", "FRICTION"]
|
||||
"JEEP_CHEROKEE_5TH_GEN" = [1.5, 1.5, 0.15]
|
||||
"ACURA_MDX_4G" = [1.4, 1.4, 0.17]
|
||||
"ACURA_RDX_3G_MMR" = [1.5, 1.5, 0.16]
|
||||
"HYUNDAI_KONA_2ND_GEN" = [2.5, 2.5, 0.1]
|
||||
"HYUNDAI_KONA_HEV_2ND_GEN" = [2.5, 2.5, 0.1]
|
||||
"KIA_SORENTO_2024" = [2.5, 2.5, 0.1]
|
||||
"KIA_K5_2025" = [2.5, 2.5, 0.1]
|
||||
"KIA_K4_2025" = [2.5, 2.5, 0.1]
|
||||
"HYUNDAI_SANTA_CRUZ_2025" = [2.5, 2.5, 0.1]
|
||||
"HYUNDAI_IONIQ_5_N" = [2.5, 2.5, 0.005]
|
||||
|
||||
# Dashcam or fallback configured as ideal car
|
||||
"MOCK" = [10.0, 10, 0.0]
|
||||
|
||||
@@ -45,6 +45,11 @@ legend = ["LAT_ACCEL_FACTOR", "MAX_LAT_ACCEL_MEASURED", "FRICTION"]
|
||||
"GENESIS_G90" = "GENESIS_G70"
|
||||
"GENESIS_G80" = "GENESIS_G70"
|
||||
"GENESIS_G70_2020" = "HYUNDAI_SONATA"
|
||||
"HYUNDAI_SONATA_2024" = "HYUNDAI_SONATA"
|
||||
"HYUNDAI_SONATA_HEV_2024" = "HYUNDAI_SONATA_HYBRID"
|
||||
"HYUNDAI_TUCSON_2025" = "HYUNDAI_TUCSON_4TH_GEN"
|
||||
"HYUNDAI_TUCSON_HEV_2025" = "HYUNDAI_TUCSON_4TH_GEN"
|
||||
"HYUNDAI_TUCSON_PHEV_2025" = "HYUNDAI_TUCSON_4TH_GEN"
|
||||
|
||||
"HONDA_FREED" = "HONDA_ODYSSEY"
|
||||
"HONDA_CRV_EU" = "HONDA_CRV"
|
||||
|
||||
@@ -65,6 +65,9 @@ class CarInterface(CarInterfaceBase):
|
||||
if fw.ecu == "eps" and not fw.fwVersion == b'8965B47060\x00\x00\x00\x00\x00\x00':
|
||||
ret.steerActuatorDelay = 0.25
|
||||
CarInterfaceBase.configure_torque_tune(candidate, ret.lateralTuning, steering_angle_deadzone_deg=0.2)
|
||||
# 2021+ TSS2 steering rack swapped into a TSS-P car, not supported
|
||||
if fw.ecu == "eps" and fw.fwVersion == b'8965B47070\x00\x00\x00\x00\x00\x00':
|
||||
ret.dashcamOnly = True
|
||||
|
||||
elif candidate in (CAR.LEXUS_RX, CAR.LEXUS_RX_TSS2):
|
||||
stop_and_go = True
|
||||
|
||||
@@ -10,13 +10,12 @@ from opendbc.car.mock.values import CAR as MOCK
|
||||
from opendbc.car.nissan.values import CAR as NISSAN
|
||||
from opendbc.car.psa.values import CAR as PSA
|
||||
from opendbc.car.rivian.values import CAR as RIVIAN
|
||||
from opendbc.car.mg.values import CAR as MG
|
||||
from opendbc.car.subaru.values import CAR as SUBARU
|
||||
from opendbc.car.tesla.values import CAR as TESLA
|
||||
from opendbc.car.toyota.values import CAR as TOYOTA
|
||||
from opendbc.car.volkswagen.values import CAR as VOLKSWAGEN
|
||||
|
||||
Platform = BODY | CHRYSLER | FORD | GM | HONDA | HYUNDAI | MAZDA | MOCK | MG | NISSAN | PSA | RIVIAN | SUBARU | TESLA | TOYOTA | VOLKSWAGEN
|
||||
Platform = BODY | CHRYSLER | FORD | GM | HONDA | HYUNDAI | MAZDA | MOCK | NISSAN | PSA | RIVIAN | SUBARU | TESLA | TOYOTA | VOLKSWAGEN
|
||||
BRANDS = get_args(Platform)
|
||||
|
||||
PLATFORMS: dict[str, Platform] = {str(platform): platform for brand in BRANDS for platform in brand}
|
||||
|
||||
@@ -118,6 +118,8 @@ class CarInterface(CarInterfaceBase):
|
||||
if ret.flags & VolkswagenFlags.MEB:
|
||||
ret.openpilotLongitudinalControl = True
|
||||
ret.longitudinalActuatorDelay = 0.3
|
||||
ret.longitudinalTuning.kiBP = [0., 30.]
|
||||
ret.longitudinalTuning.kiV = [0.4, 0.]
|
||||
else:
|
||||
ret.alphaLongitudinalAvailable = ret.networkLocation == NetworkLocation.gateway or docs
|
||||
if alpha_long:
|
||||
|
||||
@@ -34,8 +34,8 @@ CM_ SG_ 419 REGEN_STAGE_SELECTION "Driver-selected regenerative braking threshol
|
||||
CM_ SG_ 419 REGEN_MEMORY "Driver-selected persistence setting, M shown in instrument cluster";
|
||||
CM_ SG_ 419 REGEN_UNKNOWN "Both bits set when user enables regen, otherwise zero";
|
||||
|
||||
VAL_ 401 GEAR_SHIFTER 1 "P" 2 "R" 3 "N" 4 "D" 7 "L" 10 "S" 11 "B";
|
||||
VAL_ 419 GEAR_SHIFTER 1 "P" 2 "R" 3 "N" 4 "D" 7 "L" 10 "S" 11 "B";
|
||||
VAL_ 401 GEAR_SHIFTER 1 "P" 2 "R" 3 "N" 4 "D" 7 "L" 10 "S";
|
||||
VAL_ 419 GEAR_SHIFTER 1 "P" 2 "R" 3 "N" 4 "D" 7 "L" 10 "S";
|
||||
VAL_ 419 TRANS_TARGET_GEAR 0 "None / Neutral / Park" 1 "1st" 2 "2nd" 3 "3rd" 4 "4th" 5 "5th" 6 "6th" 7 "7th" 8 "8th" 9 "9th" 10 "10th" 13 "Reverse";
|
||||
VAL_ 419 REGEN_STAGE_SELECTION 0 "disabled" 1 "stage_1" 2 "stage_2" 3 "stage_3" 4 "stage_4" 5 "stage_5" 6 "stage_6";
|
||||
VAL_ 419 REGEN_MEMORY 0 "disabled" 1 "persistent";
|
||||
|
||||
@@ -951,7 +951,7 @@ CM_ SG_ 1041 COUNTER_ALT "only increments on change";
|
||||
CM_ BO_ 1043 "Lamp signals do not seem universal on cars that use LKAS_ALT, but stalk signals do.";
|
||||
CM_ SG_ 1043 COUNTER_ALT "only increments on change";
|
||||
CM_ SG_ 1043 USE_ALT_LAMP "likely 1 on cars that use alt lamp signals";
|
||||
VAL_ 53 GEAR 0 "P" 5 "D" 6 "N" 7 "R";
|
||||
VAL_ 53 GEAR 0 "P" 4 "S" 5 "D" 6 "N" 7 "R";
|
||||
VAL_ 64 GEAR 0 "P" 5 "D" 6 "N" 7 "R";
|
||||
VAL_ 69 GEAR 0 "P" 5 "D" 6 "N" 7 "R";
|
||||
VAL_ 96 TRACTION_AND_STABILITY_CONTROL 0 "On" 5 "Limited" 1 "Off";
|
||||
|
||||
@@ -1,327 +0,0 @@
|
||||
VERSION "HSCAN2"
|
||||
|
||||
|
||||
NS_ :
|
||||
NS_DESC_
|
||||
CM_
|
||||
BA_DEF_
|
||||
BA_
|
||||
VAL_
|
||||
CAT_DEF_
|
||||
CAT_
|
||||
FILTER
|
||||
BA_DEF_DEF_
|
||||
EV_DATA_
|
||||
ENVVAR_DATA_
|
||||
SGTYPE_
|
||||
SGTYPE_VAL_
|
||||
BA_DEF_SGTYPE_
|
||||
BA_SGTYPE_
|
||||
SIG_TYPE_REF_
|
||||
VAL_TABLE_
|
||||
SIG_GROUP_
|
||||
SIG_VALTYPE_
|
||||
SIGTYPE_VALTYPE_
|
||||
BO_TX_BU_
|
||||
BA_DEF_REL_
|
||||
BA_REL_
|
||||
BA_DEF_DEF_REL_
|
||||
BU_SG_REL_
|
||||
BU_EV_REL_
|
||||
BU_BO_REL_
|
||||
SG_MUL_VAL_
|
||||
|
||||
BS_:
|
||||
|
||||
BU_: FVCM GW Diagnostics EPS SCSABS Tester
|
||||
|
||||
BO_ 175 GW_HSC2_HCU_FrP00: 8 GW
|
||||
SG_ EPTAccelActuPosHSC2 : 7|8@0+ (0.392157,0) [0|100] "%" FVCM
|
||||
SG_ EPTAccelActuPosVHSC2 : 43|1@0+ (1,0) [0|1] "" FVCM
|
||||
SG_ EPTBrkPdlDscrtInptStsHSC2 : 31|1@0+ (1,0) [0|1] "" FVCM
|
||||
SG_ EPTBrkPdlDscrtInptStsVHSC2 : 16|1@0+ (1,0) [0|1] "" FVCM
|
||||
SG_ EPTStCmdOn_h1HSC2 : 17|1@0+ (1,0) [0|1] "" FVCM
|
||||
|
||||
BO_ 251 GW_HSC2_ECM_FrP27: 8 GW
|
||||
SG_ ACCStsHSC2 : 2|1@0+ (1,0) [0|1] "" XXX
|
||||
SG_ SpdAstMdECMHSC2 : 52|2@0+ (1,0) [0|3] "" FVCM
|
||||
SG_ SpdAstSysStsECMHSC2 : 18|3@0+ (1,0) [0|7] "" FVCM
|
||||
SG_ SpdAstSysTrgtSpdHSC2 : 30|15@0+ (0.015625,0) [0|511.984] "" FVCM
|
||||
SG_ TrgtSpdSrcStsHSC2 : 23|2@0+ (1,0) [0|3] "" FVCM
|
||||
|
||||
BO_ 355 GW_HSC2_SDM_FrP00: 8 GW
|
||||
SG_ AirbagDplHSC2 : 11|1@0+ (1,0) [0|1] "" FVCM
|
||||
SG_ AirbagDplInvsnHSC2 : 10|1@0+ (1,0) [0|1] "" FVCM
|
||||
SG_ DrvrSbltAtcHSC2 : 12|1@0+ (1,0) [0|1] "" FVCM
|
||||
SG_ DrvrSbltAtcVHSC2 : 13|1@0+ (1,0) [0|1] "" FVCM
|
||||
SG_ SDMRCHSC2 : 1|2@0+ (1,0) [0|3] "" FVCM
|
||||
|
||||
BO_ 359 FVCM_HSC2_FrP02: 8 FVCM
|
||||
SG_ AutoMainBeamLghtReqHSC2 : 15|2@0+ (1,0) [0|3] "" GW
|
||||
SG_ DistSinceTrgtCamrHSC2 : 7|8@0+ (8.235,-100) [-100|1999.92] "m" GW
|
||||
SG_ FVCMCalPrgsReqHSC2 : 36|3@0+ (1,0) [0|7] "" GW
|
||||
SG_ HandOffStrgWhlDetnStaHSC2 : 44|2@0+ (1,0) [0|3] "" GW
|
||||
SG_ HandOffStrgWhlDetnStaVHSC2 : 45|1@0+ (1,0) [0|1] "" GW
|
||||
SG_ LDWLKADspCmdHSC2 : 50|3@0+ (1,0) [0|7] "" GW
|
||||
SG_ LDWLKAHapticWrnngDspCmdHSC2 : 63|2@0+ (1,0) [0|3] "" GW
|
||||
SG_ LDWLKALVsulznReqHSC2 : 53|3@0+ (1,0) [0|7] "" GW
|
||||
SG_ LDWLKARVsulznReqHSC2 : 42|3@0+ (1,0) [0|7] "" GW
|
||||
SG_ LDWSysFltStsHSC2 : 39|3@0+ (1,0) [0|7] "" GW
|
||||
SG_ SpdAstReqStsCamrHSC2 : 13|2@0+ (1,0) [0|3] "" GW
|
||||
SG_ TJAICADspCmdHSC2 : 55|2@0+ (1,0) [0|3] "" GW
|
||||
SG_ TJAICASysFltStsHSC2 : 61|3@0+ (1,0) [0|7] "" GW,EPS
|
||||
SG_ TJAICASysStsHSC2 : 58|3@0+ (1,0) [0|7] "" GW,EPS
|
||||
SG_ TrgtSpdReqCamrHSC2 : 22|15@0+ (0.015625,0) [0|511.984] "" GW
|
||||
|
||||
BO_ 404 GW_HSC2_ECM_FrP04: 8 GW
|
||||
SG_ TrEstdGearHSC2 : 3|4@0+ (1,0) [0|15] "" FVCM
|
||||
SG_ TrEstdGearVHSC2 : 4|1@0+ (1,0) [0|1] "" FVCM
|
||||
SG_ TrShftLvrPosV_h1HSC2 : 28|1@0+ (1,0) [0|1] "" FVCM
|
||||
SG_ TrShftLvrPos_h1HSC2 : 27|4@0+ (1,0) [0|15] "" FVCM
|
||||
|
||||
BO_ 438 EHBS_HSC2_FrP00: 8 EHBS
|
||||
SG_ BrkPdlAppdChksmHSC2 : 63|8@0+ (1,0) [0|255] "" FVCM
|
||||
SG_ IbstrDiagMdAHSC2 : 55|1@0+ (1,0) [0|1] "" FVCM
|
||||
SG_ RnotPrsStsHSC2 : 53|2@0+ (1,0) [0|3] "" FVCM
|
||||
SG_ HydBstrCmpstnReqHSC2 : 54|1@0+ (1,0) [0|1] "" FVCM
|
||||
SG_ BrkPdlAppdRCHSC2 : 51|4@0+ (1,0) [0|15] "" FVCM
|
||||
SG_ RnotPrsHSC2 : 47|8@0+ (1,0) [0|250] "bar" FVCM
|
||||
SG_ BrkPdlAppdHSC2 : 10|1@0+ (1,0) [0|1] "" FVCM
|
||||
SG_ BrkPdlAppdVHSC2 : 9|2@0+ (1,0) [0|3] "" FVCM
|
||||
|
||||
BO_ 485 SAS_HSC2_FrP00: 8 EPS
|
||||
SG_ StrgWhlAngHSC2 : 15|16@0+ (0.0625,-2048) [-2048|2047.88] "degree" FVCM
|
||||
SG_ StrgWhlAngAlvRCHSC2 : 31|4@0+ (1,0) [0|15] "" FVCM
|
||||
SG_ StrgWhlAngExtdPVHSC2 : 47|16@0+ (1,0) [0|65535] "" FVCM
|
||||
SG_ StrgWhlAngGrdHSC2 : 27|12@0+ (1,-2048) [-2048|2046] "degree/s" FVCM
|
||||
SG_ StrgWhlAngSnsrCalStsHSC2 : 6|2@0+ (1,0) [0|3] "" FVCM
|
||||
SG_ StrgWhlAngSnsrChksmHSC2 : 63|8@0+ (1,0) [0|255] "" FVCM
|
||||
SG_ StrgWhlAngSnsrFltHSC2 : 0|1@0+ (1,0) [0|1] "" FVCM
|
||||
SG_ StrgWhlAngSnsrInidHSC2 : 2|1@0+ (1,0) [0|1] "" FVCM
|
||||
SG_ StrgWhlAngSnsrMultCapbHSC2 : 1|1@0+ (1,0) [0|1] "" FVCM
|
||||
SG_ StrgWhlAngVHSC2 : 7|1@0+ (1,0) [0|1] "" FVCM
|
||||
|
||||
BO_ 481 GW_HSC2_FrP04: 7 GW
|
||||
SG_ CCSwStsSwDataIntgty_h2HSC2 : 1|2@0+ (1,0) [0|3] "" FDR
|
||||
SG_ CCSwStsSpdDecSwA_h2HSC2 : 2|1@0+ (1,0) [0|1] "" FDR
|
||||
SG_ CCSwStsSpdIncSwA_h2HSC2 : 3|1@0+ (1,0) [0|1] "" FDR
|
||||
SG_ CCSwStsSetSwA_h2HSC2 : 4|1@0+ (1,0) [0|1] "" FDR
|
||||
SG_ CCSwStsRsmSwA_h2HSC2 : 5|1@0+ (1,0) [0|1] "" FDR
|
||||
SG_ CCSwStsOnSwA_h2HSC2 : 6|1@0+ (1,0) [0|1] "" FDR
|
||||
SG_ CCSwStsCanclSwA_h2HSC2 : 7|1@0+ (1,0) [0|1] "" FDR
|
||||
SG_ CCSwStsPV_h2HSC2 : 15|8@0+ (1,0) [0|255] "" FDR
|
||||
SG_ CCSwStsAlvRC_h2HSC2 : 17|2@0+ (1,0) [0|3] "" FDR
|
||||
SG_ CCSwStsDistDecSwA_h2HSC2 : 18|1@0+ (1,0) [0|1] "" FDR
|
||||
SG_ CCSwStsDistIncSwA_h2HSC2 : 19|1@0+ (1,0) [0|1] "" FDR
|
||||
|
||||
BO_ 492 EPS_HSC2_FrP03: 8 EPS
|
||||
SG_ ChLKAAlvRCHSC2 : 7|4@0+ (1,0) [0|15] "" FVCM
|
||||
SG_ ChLKACtrlStsHSC2 : 54|3@0+ (1,0) [0|7] "" FVCM
|
||||
SG_ ChLKARespToqHSC2 : 2|11@0+ (0.01,-10.24) [-10.24|10.23] "Nm" FVCM
|
||||
SG_ ChLKARespToqPVHSC2 : 22|15@0+ (1,0) [0|32767] "" FVCM
|
||||
SG_ ChLKARespToqVHSC2 : 3|1@0+ (1,0) [0|1] "" FVCM
|
||||
SG_ DrvrStrgDlvrdToqHSC2 : 34|11@0+ (0.01,-10.24) [-10.24|10.23] "Nm" FVCM
|
||||
SG_ DrvrStrgDlvrdToqVHSC2 : 55|1@0+ (1,0) [0|1] "" FVCM
|
||||
|
||||
BO_ 509 FVCM_HSC2_FrP03: 8 FVCM
|
||||
SG_ LDWLKAVbnLvlReqHSC2 : 23|2@0+ (1,0) [0|3] "" GW,EPS
|
||||
SG_ LKAAlvRCHSC2 : 7|4@0+ (1,0) [0|15] "" EPS
|
||||
SG_ LKADrvrTkovReqHSC2 : 46|1@0+ (1,0) [0|1] "" GW,EPS
|
||||
SG_ LKAReqToqHSC2 : 2|11@0+ (1,-1024) [-1024|1023] "Nm" EPS
|
||||
SG_ LKAReqToqPVHSC2 : 21|14@0+ (1,0) [0|16383] "" EPS
|
||||
SG_ LKAReqToqStsHSC2 : 36|2@0+ (1,0) [0|3] "" EPS
|
||||
SG_ LKAReqToqVHSC2 : 3|1@0+ (1,0) [0|1] "" EPS
|
||||
SG_ LKASysFltStsHSC2 : 39|3@0+ (1,0) [0|7] "" GW,EPS
|
||||
SG_ LKASysStsHSC2 : 34|3@0+ (1,0) [0|7] "" GW,EPS
|
||||
|
||||
BO_ 532 SCS_HSC2_FrP09: 6 SCSABS
|
||||
SG_ BrkPdlDrvrAppdPrsHSC2 : 15|8@0+ (75,0) [0|19125] "kPa" FVCM
|
||||
SG_ BrkPdlDrvrAppdPrsAlvRCHSC2 : 2|2@0+ (1,0) [0|3] "" FVCM
|
||||
SG_ BrkPdlDrvrAppdPrsVHSC2 : 0|1@0+ (1,0) [0|1] "" FVCM
|
||||
|
||||
BO_ 572 SCS_HSC2_FrP19: 8 SCSABS
|
||||
SG_ VehSpdAvgHSC2 : 22|15@0+ (0.015625,0) [0|511.984] "km/h" FVCM,FDR
|
||||
SG_ VehSpdAvgAlvRCHSC2 : 39|4@0+ (1,0) [0|15] "" FVCM,FDR
|
||||
SG_ VehSpdAvgPVHSC2 : 7|16@0+ (1,0) [0|65535] "" FVCM,FDR
|
||||
SG_ VehSpdAvgVHSC2 : 23|1@0+ (1,0) [0|1] "" FVCM,FDR
|
||||
|
||||
BO_ 578 RADAR_HSC2_FrP00: 8 FDR
|
||||
SG_ ACCAccReqValHSC2 : 2|11@0+ (0.005,-7.22) [-7.22|3.015] "" SCSABS
|
||||
SG_ ACCSysAlvRlngCtr_SCSHSC2 : 6|4@0+ (1,0) [0|15] "" SCSABS
|
||||
SG_ ACCMinBrkReqStsHSC2 : 7|1@0+ (1,0) [0|1] "" SCSABS
|
||||
SG_ ACCAccReqValTolMaxHSC2 : 22|7@0+ (0.025,0) [0|3.175] "" SCSABS
|
||||
SG_ ACCReqBrkPrfrdHSC2 : 23|1@0+ (1,0) [0|1] "" SCSABS
|
||||
SG_ ACCAccReqStsHSC2 : 29|2@0+ (1,0) [0|3] "" GW,SCSABS
|
||||
SG_ ACCGoReqHSC2 : 30|1@0+ (1,0) [0|1] "" SCSABS
|
||||
SG_ ACCSysFltSts_SCSHSC2 : 42|3@0+ (1,0) [0|7] "" SCSABS
|
||||
SG_ ACCSysSts_RadarHSC2 : 45|3@0+ (1,0) [0|7] "" GW,SCSABS
|
||||
SG_ ChACCShtdwnMdHSC2 : 47|2@0+ (1,0) [0|3] "" SCSABS
|
||||
SG_ ACCAccReqValTolMinHSC2 : 54|7@0+ (0.025,0) [0|3.175] "" SCSABS
|
||||
SG_ ACCSdslReq_RadarHSC2 : 55|1@0+ (1,0) [0|1] "" SCSABS
|
||||
SG_ ACCSysChksm_SCSHSC2 : 63|8@0+ (1,0) [0|255] "" SCSABS
|
||||
|
||||
BO_ 582 RADAR_HSC2_FrP02: 8 FDR
|
||||
SG_ ACCDrvrSelTrgtSpd_RadarHSC2 : 6|15@0+ (0.015625,0) [0|511.984] "" GW
|
||||
SG_ ACCObjDet_RadarHSC2 : 7|1@0+ (1,0) [0|1] "" GW
|
||||
SG_ AEBMsgReqHSC2 : 19|4@0+ (1,0) [0|15] "" GW
|
||||
SG_ ACCMsgReqHSC2 : 23|4@0+ (1,0) [0|15] "" GW
|
||||
SG_ ACCDetObjDistLvl_RadarHSC2 : 26|3@0+ (1,0) [0|7] "" GW
|
||||
SG_ ACCDrvrSeldTrgtDistLvl_RadarHSC2 : 29|3@0+ (1,0) [0|7] "" GW
|
||||
SG_ ACCSysCanclReq_RadarHSC2 : 31|2@0+ (1,0) [0|3] "" GW
|
||||
SG_ RdrCalPrgsReqHSC2 : 34|3@0+ (1,0) [0|7] "" GW
|
||||
SG_ ACCGoNotfr_RadarHSC2 : 35|1@0+ (1,0) [0|1] "" GW
|
||||
SG_ ACCSysFltSts_RadarHSC2 : 38|3@0+ (1,0) [0|7] "" GW
|
||||
SG_ ACCDrvrTkovReqHSC2 : 39|1@0+ (1,0) [0|1] "" GW
|
||||
SG_ FCWSysFltSts_RadarHSC2 : 42|3@0+ (1,0) [0|7] "" GW
|
||||
SG_ FCWSnstvtLvl_RadarHSC2 : 45|3@0+ (1,0) [0|7] "" GW
|
||||
SG_ AEBPedtrnDspCmdHSC2 : 47|2@0+ (1,0) [0|3] "" GW
|
||||
SG_ FCWrnngSts_RadarHSC2 : 51|3@0+ (1,0) [0|7] "" GW
|
||||
SG_ FCWDspCmd_RadarHSC2 : 53|2@0+ (1,0) [0|3] "" GW
|
||||
SG_ AEBDspCmd_RadarHSC2 : 55|2@0+ (1,0) [0|3] "" GW
|
||||
|
||||
BO_ 588 SCS_HSC2_FrP22: 8 SCSABS
|
||||
SG_ BrkDiscTemStsHSC2 : 6|1@0+ (1,0) [0|1] "" FDR
|
||||
SG_ BrkPdlDrvrAppdPrsAlvRC_RadarHSC2 : 13|2@0+ (1,0) [0|3] "" FDR
|
||||
SG_ BrkPdlDrvrAppdPrsV_RadarHSC2 : 7|1@0+ (1,0) [0|1] "" FDR
|
||||
SG_ BrkPdlDrvrAppdPrs_RadarHSC2 : 23|8@0+ (75,0) [0|19125] "kPa" FDR
|
||||
SG_ LDrvnWhlRotlDircnHSC2 : 15|2@0+ (1,0) [0|3] "" FDR,FVCM
|
||||
SG_ RDrvnWhlRotlDircnHSC2 : 2|2@0+ (1,0) [0|3] "" FDR,FVCM
|
||||
SG_ WhlBrkPrsStsHSC2 : 5|1@0+ (1,0) [0|1] "" FDR
|
||||
SG_ WhlGndVelDrvnChksm_RadarHSC2 : 63|8@0+ (1,0) [0|255] "" FDR
|
||||
SG_ WhlGndVelDrvnRC_RadarHSC2 : 11|4@0+ (1,0) [0|15] "" FDR
|
||||
SG_ WhlGndVelLDrvnV_RadarHSC2 : 3|1@0+ (1,0) [0|1] "" FDR
|
||||
SG_ WhlGndVelLDrvn_RadarHSC2 : 45|14@0+ (0.03125,0) [0|511.969] "km/h" FDR
|
||||
SG_ WhlGndVelRDrvnV_RadarHSC2 : 4|1@0+ (1,0) [0|1] "" FDR
|
||||
SG_ WhlGndVelRDrvn_RadarHSC2 : 29|14@0+ (0.03125,0) [0|511.969] "km/h" FDR
|
||||
|
||||
BO_ 593 SCS_HSC2_FrP24: 8 SCSABS
|
||||
SG_ ChACCAccReqRespHSC2 : 5|3@0+ (1,0) [0|7] "" FDR
|
||||
SG_ ChACCAEBAlvRlngCtr_RadarHSC2 : 20|4@0+ (1,0) [0|15] "" FDR
|
||||
SG_ ChACCAEBBrkJerkReqRespHSC2 : 10|3@0+ (1,0) [0|7] "" FDR
|
||||
SG_ ChACCAEBChksm_RadarHSC2 : 63|8@0+ (1,0) [0|255] "" FDR
|
||||
SG_ ChACCReqFlrStsHSC2 : 15|2@0+ (1,0) [0|3] "" FDR
|
||||
SG_ ChAEBDclReqRespHSC2 : 23|3@0+ (1,0) [0|7] "" FDR
|
||||
SG_ ChAEBHydBrkAstReqRespHSC2 : 2|3@0+ (1,0) [0|7] "" FDR
|
||||
SG_ ChAEBPrflReqRespHSC2 : 13|3@0+ (1,0) [0|7] "" FDR
|
||||
SG_ VehSdslStsHSC2 : 7|2@0+ (1,0) [0|3] "" FDR
|
||||
SG_ VehTrgtLongtAccHSC2 : 31|8@0+ (0.05,-7) [-7|5.75] "" FDR
|
||||
|
||||
BO_ 851 SCS_HSC2_FrP15: 8 SCSABS
|
||||
SG_ VehSpdAvgDrvnHSC2 : 6|15@0+ (0.015625,0) [0|511.984] "km/h" FVCM
|
||||
SG_ VehSpdAvgDrvnVHSC2 : 7|1@0+ (1,0) [0|1] "" FVCM
|
||||
SG_ VehSpdAvgNonDrvnHSC2 : 38|15@0+ (0.015625,0) [0|511.984] "km/h" FVCM
|
||||
SG_ VehSpdAvgNonDrvnVHSC2 : 39|1@0+ (1,0) [0|1] "" FVCM
|
||||
|
||||
BO_ 1130 GW_HSC2_BCM_FrP04: 8 GW
|
||||
SG_ BlinkerBulbLeft : 37|1@0+ (1,0) [0|1] "" XXX
|
||||
SG_ BlinkerBulbRight : 38|1@0+ (1,0) [0|1] "" XXX
|
||||
SG_ BlinkerLeft : 59|1@0+ (1,0) [0|1] "" XXX
|
||||
SG_ BlinkerRight : 60|1@0+ (1,0) [0|1] "" XXX
|
||||
SG_ BntOpenStsHSC2 : 47|2@0+ (1,0) [0|3] "" FVCM
|
||||
SG_ DipdBeamLghtOnHSC2 : 13|1@0+ (1,0) [0|1] "" FVCM
|
||||
SG_ DircnIndLampSwStsHSC2 : 3|2@0+ (1,0) [0|3] "" FVCM
|
||||
SG_ DrvrDoorOpenStsHSC2 : 1|2@0+ (1,0) [0|3] "" FVCM
|
||||
SG_ DspMeasSysHSC2 : 44|1@0+ (1,0) [0|1] "" FVCM
|
||||
SG_ FrtFogLghtOnHSC2 : 14|1@0+ (1,0) [0|1] "" FVCM
|
||||
SG_ FrtPsngDoorOpenStsHSC2 : 43|2@0+ (1,0) [0|3] "" FVCM
|
||||
SG_ FrtWiperParkPosAHSC2 : 52|1@0+ (1,0) [0|1] "" FVCM
|
||||
SG_ FrtWshrPumpAHSC2 : 55|1@0+ (1,0) [0|1] "" FVCM
|
||||
SG_ KeyDetIndxHSC2 : 51|3@0+ (1,0) [0|7] "" FVCM
|
||||
SG_ LDircnIndLghtFHSC2 : 10|1@0+ (1,0) [0|1] "" FVCM
|
||||
SG_ LDircnIOHSC2 : 11|1@0+ (1,0) [0|1] "" FVCM
|
||||
SG_ LdspcOpenStsHSC2 : 7|2@0+ (1,0) [0|3] "" FVCM
|
||||
SG_ MainBeamLghtOnHSC2 : 15|1@0+ (1,0) [0|1] "" FVCM
|
||||
SG_ RDircnIndLghtFHSC2 : 48|1@0+ (1,0) [0|1] "" FVCM
|
||||
SG_ RDircnIOHSC2 : 9|1@0+ (1,0) [0|1] "" FVCM
|
||||
SG_ RLDoorOpenStsHSC2 : 41|2@0+ (1,0) [0|3] "" FVCM
|
||||
SG_ RRDoorOpenStsHSC2 : 5|2@0+ (1,0) [0|3] "" FVCM
|
||||
SG_ RrFogLghtOnHSC2 : 8|1@0+ (1,0) [0|1] "" FVCM
|
||||
SG_ VehSideLghtStsHSC2 : 57|2@0+ (1,0) [0|3] "" FVCM
|
||||
|
||||
VAL_ 355 AirbagDplInvsnHSC2 1 "No Airbag Deployed" 0 "Airbag Deployed";
|
||||
VAL_ 355 AirbagDplHSC2 1 "True" 0 "False";
|
||||
VAL_ 355 DrvrSbltAtcHSC2 1 "True" 0 "False";
|
||||
VAL_ 355 DrvrSbltAtcVHSC2 1 "Invalid" 0 "Valid";
|
||||
VAL_ 404 TrEstdGearHSC2 15 "Park Gear" 14 "Reverse Gear" 13 "Neutral Gear" 8 "Eighth Gear" 7 "Seventh Gear" 6 "Sixth Gear" 5 "Fifth Gear" 4 "Fourth Gear" 3 "Third Gear" 2 "Second Gear" 1 "First Gear" 0 "Not Supported";
|
||||
VAL_ 404 TrEstdGearVHSC2 1 "Invalid" 0 "Valid";
|
||||
VAL_ 404 TrShftLvrPos_h1HSC2 15 "Lever Position Unknown" 11 "Forward Range H" 10 "Forward Range G" 9 "Forward Range F" 8 "Forward Range E" 7 "Forward Range D" 6 "Forward Range C" 5 "Forward Range B" 4 "Forward Range A" 3 "Neutral Range" 2 "Reverse Range" 1 "Park Range" 0 "Between Ranges";
|
||||
VAL_ 404 TrShftLvrPosV_h1HSC2 1 "Invalid" 0 "Valid";
|
||||
VAL_ 438 RnotPrsStsHSC2 2 "Faulty" 1 "Normal" 0 "Init" ;
|
||||
VAL_ 438 HydBstrCmpstnReqHSC2 1 "HBC active" 0 "HBC inactive" ;
|
||||
VAL_ 438 BrkPdlAppdHSC2 1 "brake pedal applied" 0 "brake pedal not applied" ;
|
||||
VAL_ 438 BrkPdlAppdVHSC2 2 "Faulty" 1 "Normal" 0 "Init" ;
|
||||
VAL_ 481 CCSwStsSwDataIntgty_h2HSC2 3 "Illegal Range" 2 "Failure Detected" 1 "Data Invalid" 0 "Data Valid";
|
||||
VAL_ 481 CCSwStsSpdDecSwA_h2HSC2 1 "True" 0 "False";
|
||||
VAL_ 481 CCSwStsSpdIncSwA_h2HSC2 1 "True" 0 "False";
|
||||
VAL_ 481 CCSwStsSetSwA_h2HSC2 1 "True" 0 "False";
|
||||
VAL_ 481 CCSwStsRsmSwA_h2HSC2 1 "True" 0 "False";
|
||||
VAL_ 481 CCSwStsOnSwA_h2HSC2 1 "True" 0 "False";
|
||||
VAL_ 481 CCSwStsCanclSwA_h2HSC2 1 "True" 0 "False";
|
||||
VAL_ 481 CCSwStsDistDecSwA_h2HSC2 1 "True" 0 "False";
|
||||
VAL_ 481 CCSwStsDistIncSwA_h2HSC2 1 "True" 0 "False";
|
||||
VAL_ 509 LKAReqToqVHSC2 1 "Invalid" 0 "Valid";
|
||||
VAL_ 509 LDWLKAVbnLvlReqHSC2 3 "Level 3" 2 "Level 2" 1 "Level 1" 0 "no request";
|
||||
VAL_ 509 LKASysStsHSC2 3 "Override" 2 "Active" 1 "Stand by" 0 "Off";
|
||||
VAL_ 509 LKAReqToqStsHSC2 3 "reserved" 2 "reserved" 1 "torque request" 0 "no request";
|
||||
VAL_ 509 LKASysFltStsHSC2 3 "service required" 2 "system temporary unavailable" 1 "performance degradation" 0 "no error";
|
||||
VAL_ 509 LKADrvrTkovReqHSC2 1 "True" 0 "False";
|
||||
VAL_ 578 ACCMinBrkReqStsHSC2 1 "no demand" 0 "demand";
|
||||
VAL_ 578 ACCReqBrkPrfrdHSC2 1 "no demand" 0 "demand";
|
||||
VAL_ 578 ACCAccReqStsHSC2 1 "ACC Acceleration Request" 0 "No Request";
|
||||
VAL_ 578 ACCGoReqHSC2 1 "Request" 0 "No Request";
|
||||
VAL_ 578 ACCSysFltSts_SCSHSC2 7 "Reserved" 6 "Reserved" 5 "Reserved" 4 "Reserved" 3 "Service Required" 2 "System Temporary Unvailable" 1 "Performance Degradation" 0 "No Error";
|
||||
VAL_ 578 ACCSysSts_RadarHSC2 7 "Reserved" 6 "Standstill Wait" 5 "Standstill Active" 4 "Brake Only" 3 "Override" 2 "Active" 1 "Stand By" 0 "Off";
|
||||
VAL_ 578 ChACCShtdwnMdHSC2 3 "immediate off" 2 "initial" 1 "fast off" 0 "soft off";
|
||||
VAL_ 578 ACCSdslReq_RadarHSC2 1 "request" 0 "no request";
|
||||
VAL_ 582 ACCObjDet_RadarHSC2 1 "TRUE" 0 "FALSE";
|
||||
VAL_ 582 AEBMsgReqHSC2 7 "reserved" 6 "Radar Error" 5 "AEB is switched off" 4 "AEB is switched on" 3 "AEB is in error mode" 2 "Active" 1 "unable to active AEB" 0 "No display";
|
||||
VAL_ 582 ACCMsgReqHSC2 15 "Reserved" 14 "Reserved" 13 "Reserved" 12 "Reserved" 11 "Reserved" 10 "Reserved" 9 "Radar Error" 8 "depress acceleration pedal or press resume switch to go" 7 "Driver Takeover Request" 6 "ACC is switched off" 5 "ACC is switched on" 4 "ACC is in error mode" 3 "Active" 2 "ACC is cancelled" 1 "unable to active ACC" 0 "No display";
|
||||
VAL_ 582 ACCDetObjDistLvl_RadarHSC2 7 "reserved" 6 "reserved" 5 "distance level5" 4 "distance level4" 3 "distance level3" 2 "distance level2" 1 "distance level1" 0 "no gap set";
|
||||
VAL_ 582 ACCDrvrSeldTrgtDistLvl_RadarHSC2 7 "reserved" 6 "reserved" 5 "distance level5" 4 "distance level4" 3 "distance level3" 2 "distance level2" 1 "distance level1" 0 "no gap set";
|
||||
VAL_ 582 ACCSysCanclReq_RadarHSC2 3 "Reserved" 2 "ACC Condition Dissatisfy" 1 "Manual Cancel" 0 "No Cancel";
|
||||
VAL_ 582 RdrCalPrgsReqHSC2 5 "calibration failure" 4 "Calibration Finished, need Adjust" 3 "Calibration Finished, Succesful" 2 "Calibration in progress" 1 "Calibration Started" 0 "no request";
|
||||
VAL_ 582 ACCGoNotfr_RadarHSC2 1 "TRUE" 0 "FALSE";
|
||||
VAL_ 582 ACCSysFltSts_RadarHSC2 7 "Reserved" 6 "Reserved" 5 "Reserved" 4 "Reserved" 3 "Service Required" 2 "System Temporary Unvailable" 1 "Performance Degradation" 0 "No Error";
|
||||
VAL_ 582 ACCDrvrTkovReqHSC2 1 "True" 0 "False";
|
||||
VAL_ 582 FCWSysFltSts_RadarHSC2 7 "Reserved" 6 "Reserved" 5 "Reserved" 4 "Reserved" 3 "Service required" 2 "System temporary unvailable" 1 "Performance degradation" 0 "No error";
|
||||
VAL_ 582 FCWSnstvtLvl_RadarHSC2 7 "reserved" 6 "reserved" 5 "reserved" 4 "reserved" 3 "level3" 2 "level2" 1 "level1" 0 "Unavailable";
|
||||
VAL_ 582 AEBPedtrnDspCmdHSC2 3 "reserved" 2 "on" 1 "off" 0 "unavailable";
|
||||
VAL_ 582 FCWrnngSts_RadarHSC2 7 "reserved" 6 "reserved" 5 "reserved" 4 "reserved" 3 "level 3" 2 "level 2" 1 "level 1" 0 "no request";
|
||||
VAL_ 582 FCWDspCmd_RadarHSC2 3 "reserved" 2 "on" 1 "off" 0 "unavailable";
|
||||
VAL_ 582 AEBDspCmd_RadarHSC2 3 "reserved" 2 "on" 1 "off" 0 "unavailable";
|
||||
VAL_ 588 BrkDiscTemStsHSC2 1 "Temperature too high" 0 "Not high" ;
|
||||
VAL_ 588 BrkPdlDrvrAppdPrsV_RadarHSC2 1 "Invalid" 0 "Valid" ;
|
||||
VAL_ 588 LDrvnWhlRotlDircnHSC2 3 "Initial/Invalid" 2 "Backward" 1 "Forward" 0 "Unknown" ;
|
||||
VAL_ 588 RDrvnWhlRotlDircnHSC2 3 "Initial/Invalid" 2 "Backward" 1 "Forward" 0 "Unknown" ;
|
||||
VAL_ 588 WhlBrkPrsStsHSC2 1 "No brake force" 0 "Exist brake force" ;
|
||||
VAL_ 588 WhlGndVelLDrvnV_RadarHSC2 1 "Invalid" 0 "Valid" ;
|
||||
VAL_ 588 WhlGndVelRDrvnV_RadarHSC2 1 "Invalid" 0 "Valid" ;
|
||||
VAL_ 593 ChACCAccReqRespHSC2 7 "reserved" 6 "reserved" 4 "pre-condition not satisfied" 3 "control not allowed for error" 2 "lost arbitration" 1 "request honored" 0 "no request" ;
|
||||
VAL_ 593 ChACCAEBBrkJerkReqRespHSC2 7 "reserve" 6 "reserve" 4 "pre-condition not satisfied" 3 "control not allowed for error" 2 "lost arbitration" 1 "request honored" 0 "no request" ;
|
||||
VAL_ 593 ChACCReqFlrStsHSC2 3 "not defined" 2 "irreversible error" 1 "reversible error" 0 "No error" ;
|
||||
VAL_ 593 ChAEBDclReqRespHSC2 7 "reserved" 6 "reserved" 4 "pre-condition not satisfied" 3 "control not allowed for error" 2 "lost arbitration" 1 "request honored" 0 "no request" ;
|
||||
VAL_ 593 ChAEBHydBrkAstReqRespHSC2 7 "reserve" 6 "reserve" 4 "pre-condition not satisfied" 3 "control not allowed for error" 2 "lost arbitration" 1 "request honored" 0 "no request" ;
|
||||
VAL_ 593 ChAEBPrflReqRespHSC2 7 "reserve" 6 "reserve" 4 "pre-condition not satisfied" 3 "control not allowed for error" 2 "lost arbitration" 1 "request honored" 0 "no request" ;
|
||||
VAL_ 593 VehSdslStsHSC2 3 "reserved" 2 "invalid (short unavailability, max 3s)" 1 "standstill" 0 "not standstill" ;
|
||||
VAL_ 851 VehSpdAvgDrvnVHSC2 1 "Invalid" 0 "Valid" ;
|
||||
VAL_ 851 VehSpdAvgNonDrvnVHSC2 1 "Invalid" 0 "Valid" ;
|
||||
VAL_ 1130 BntOpenStsHSC2 3 "Reserved" 2 "Bonnet Switch Disconnect" 1 "Bonnet Open" 0 "Bonnet Closed" ;
|
||||
VAL_ 1130 DipdBeamLghtOnHSC2 1 "True" 0 "False" ;
|
||||
VAL_ 1130 DircnIndLampSwStsHSC2 3 "reserve" 2 "Right on" 1 "Left on" 0 "off" ;
|
||||
VAL_ 1130 DrvrDoorOpenStsHSC2 3 "Driver Door Full Open" 2 "Driver Door Ajar" 1 "Driver Door Open" 0 "Driver Door Closed" ;
|
||||
VAL_ 1130 DspMeasSysHSC2 1 "mph" 0 "kph" ;
|
||||
VAL_ 1130 FrtFogLghtOnHSC2 1 "True" 0 "False" ;
|
||||
VAL_ 1130 FrtPsngDoorOpenStsHSC2 3 "Front Passenger Door Full Open" 2 "Front Passenger Door Ajar" 1 "Front Passenger Door Open" 0 "Front Passenger Door Closed" ;
|
||||
VAL_ 1130 FrtWiperParkPosAHSC2 1 "True" 0 "False" ;
|
||||
VAL_ 1130 FrtWshrPumpAHSC2 1 "True" 0 "False" ;
|
||||
VAL_ 1130 KeyDetIndxHSC2 7 "error" 6 "key 6 is detected" 5 "key 5 is detected" 4 "key 4 is detected" 3 "key 3 is detected" 2 "key 2 is detected" 1 "key 1 is detected" 0 "non key is detected" ;
|
||||
VAL_ 1130 LDircnIndLghtFHSC2 1 "True" 0 "False" ;
|
||||
VAL_ 1130 LDircnIOHSC2 1 "True" 0 "False" ;
|
||||
VAL_ 1130 LdspcOpenStsHSC2 3 "Reserved" 2 "Reserved" 1 "Load Space Open" 0 "Load Space Closed" ;
|
||||
VAL_ 1130 MainBeamLghtOnHSC2 1 "True" 0 "False" ;
|
||||
VAL_ 1130 RDircnIndLghtFHSC2 1 "True" 0 "False" ;
|
||||
VAL_ 1130 RDircnIOHSC2 1 "True" 0 "False" ;
|
||||
VAL_ 1130 RLDoorOpenStsHSC2 3 "Rear Left Door Full Open" 2 "Rear Left Door Ajar" 1 "Rear Left Door Open" 0 "Rear Left Door Closed" ;
|
||||
VAL_ 1130 RRDoorOpenStsHSC2 3 "Rear Right Door Full Open" 2 "Rear Right Door Ajar" 1 "Rear Right Door Open" 0 "Rear Right Door Closed" ;
|
||||
VAL_ 1130 RrFogLghtOnHSC2 1 "True" 0 "False" ;
|
||||
VAL_ 1130 VehSideLghtStsHSC2 3 "All side light and license plate light on" 2 "Right side light on only" 1 "Left side light on only" 0 "No side light on " ;
|
||||
@@ -34,7 +34,6 @@
|
||||
#define SAFETY_PSA 31U
|
||||
#define SAFETY_RIVIAN 33U
|
||||
#define SAFETY_VOLKSWAGEN_MEB 34U
|
||||
#define SAFETY_MG 38U
|
||||
|
||||
#define GET_BIT(msg, b) ((bool)!!(((msg)->data[((b) / 8U)] >> ((b) % 8U)) & 0x1U))
|
||||
#define GET_FLAG(value, mask) (((value) & (mask)) == (mask))
|
||||
@@ -248,6 +247,7 @@ bool steer_curvature_cmd_checks(int desired_curvature, int steer_power, bool ste
|
||||
bool longitudinal_accel_checks(int desired_accel, const LongitudinalLimits limits);
|
||||
bool longitudinal_speed_checks(int desired_speed, const LongitudinalLimits limits);
|
||||
bool longitudinal_gas_checks(int desired_gas, const LongitudinalLimits limits);
|
||||
bool longitudinal_transmission_rpm_checks(int desired_transmission_rpm, const LongitudinalLimits limits);
|
||||
bool longitudinal_brake_checks(int desired_brake, const LongitudinalLimits limits);
|
||||
bool longitudinal_interceptor_checks(const CANPacket_t *msg); // gas interceptor
|
||||
void pcm_cruise_check(bool cruise_engaged);
|
||||
@@ -368,4 +368,3 @@ extern const safety_hooks volkswagen_meb_hooks;
|
||||
extern const safety_hooks volkswagen_pq_hooks;
|
||||
extern const safety_hooks rivian_hooks;
|
||||
extern const safety_hooks psa_hooks;
|
||||
extern const safety_hooks mg_hooks;
|
||||
|
||||
@@ -15,6 +15,12 @@ bool longitudinal_speed_checks(int desired_speed, const LongitudinalLimits limit
|
||||
return !get_longitudinal_allowed() && (desired_speed != limits.inactive_speed);
|
||||
}
|
||||
|
||||
bool longitudinal_transmission_rpm_checks(int desired_transmission_rpm, const LongitudinalLimits limits) {
|
||||
bool transmission_rpm_valid = get_longitudinal_allowed() && !safety_max_limit_check(desired_transmission_rpm, limits.max_transmission_rpm, limits.min_transmission_rpm);
|
||||
bool transmission_rpm_inactive = desired_transmission_rpm == limits.inactive_transmission_rpm;
|
||||
return !(transmission_rpm_valid || transmission_rpm_inactive);
|
||||
}
|
||||
|
||||
bool longitudinal_gas_checks(int desired_gas, const LongitudinalLimits limits) {
|
||||
bool gas_valid = get_longitudinal_allowed() && !safety_max_limit_check(desired_gas, limits.max_gas, limits.min_gas);
|
||||
bool gas_inactive = desired_gas == limits.inactive_gas;
|
||||
|
||||
@@ -227,6 +227,7 @@ static bool hyundai_canfd_tx_hook(const CANPacket_t *msg) {
|
||||
static safety_config hyundai_canfd_init(uint16_t param) {
|
||||
const uint16_t HYUNDAI_PARAM_CANFD_LKA_STEER_MSG_ALT = 128;
|
||||
const uint16_t HYUNDAI_PARAM_CANFD_ALT_BUTTONS = 32;
|
||||
const uint16_t HYUNDAI_PARAM_CCNC = 1024;
|
||||
|
||||
static const CanMsg HYUNDAI_CANFD_LKA_STEER_MSG_TX_MSGS[] = {
|
||||
HYUNDAI_CANFD_LKA_STEER_MSG_COMMON_TX_MSGS(0, 1)
|
||||
@@ -271,11 +272,21 @@ static safety_config hyundai_canfd_init(uint16_t param) {
|
||||
HYUNDAI_CANFD_SCC_CONTROL_COMMON_TX_MSGS(0, (longitudinal)) \
|
||||
{0x160, 0, 16, .check_relay = (longitudinal)}, /* ADRV_0x160 */ \
|
||||
|
||||
#define HYUNDAI_CANFD_LFA_STEERING_CAMERA_SCC_CCNC_TX_MSGS(longitudinal) \
|
||||
HYUNDAI_CANFD_CRUISE_BUTTON_TX_MSGS(2) \
|
||||
HYUNDAI_CANFD_LFA_STEERING_COMMON_TX_MSGS(0) \
|
||||
HYUNDAI_CANFD_SCC_CONTROL_COMMON_TX_MSGS(0, (longitudinal)) \
|
||||
{0x161, 0, 32, .check_relay = true}, /* CCNC_0x161 */ \
|
||||
{0x162, 0, 32, .check_relay = true}, /* CCNC_0x162 */ \
|
||||
{0x7C4, 2, 8, .check_relay = true}, /* 0x7C4 */ \
|
||||
{0xEA, 2, 24, .check_relay = true}, /* MDPS */ \
|
||||
|
||||
hyundai_common_init(param);
|
||||
|
||||
gen_crc_lookup_table_16(0x1021, hyundai_canfd_crc_lut);
|
||||
hyundai_canfd_alt_buttons = GET_FLAG(param, HYUNDAI_PARAM_CANFD_ALT_BUTTONS);
|
||||
hyundai_canfd_lka_steer_msg_alt = GET_FLAG(param, HYUNDAI_PARAM_CANFD_LKA_STEER_MSG_ALT);
|
||||
const bool hyundai_ccnc = GET_FLAG(param, HYUNDAI_PARAM_CCNC);
|
||||
|
||||
safety_config ret;
|
||||
if (hyundai_longitudinal) {
|
||||
@@ -300,6 +311,10 @@ static safety_config hyundai_canfd_init(uint16_t param) {
|
||||
HYUNDAI_CANFD_LFA_STEERING_CAMERA_SCC_TX_MSGS(true)
|
||||
};
|
||||
|
||||
static CanMsg hyundai_canfd_lfa_steering_camera_scc_ccnc_tx_msgs[] = {
|
||||
HYUNDAI_CANFD_LFA_STEERING_CAMERA_SCC_CCNC_TX_MSGS(true)
|
||||
};
|
||||
|
||||
if (hyundai_canfd_alt_buttons) {
|
||||
SET_RX_CHECKS(hyundai_canfd_alt_buttons_long_rx_checks, ret);
|
||||
} else {
|
||||
@@ -307,7 +322,11 @@ static safety_config hyundai_canfd_init(uint16_t param) {
|
||||
}
|
||||
|
||||
if (hyundai_camera_scc) {
|
||||
SET_TX_MSGS(hyundai_canfd_lfa_steering_camera_scc_tx_msgs, ret);
|
||||
if (hyundai_ccnc) {
|
||||
SET_TX_MSGS(hyundai_canfd_lfa_steering_camera_scc_ccnc_tx_msgs, ret);
|
||||
} else {
|
||||
SET_TX_MSGS(hyundai_canfd_lfa_steering_camera_scc_tx_msgs, ret);
|
||||
}
|
||||
} else {
|
||||
SET_TX_MSGS(HYUNDAI_CANFD_LFA_STEERING_LONG_TX_MSGS, ret);
|
||||
}
|
||||
@@ -368,7 +387,15 @@ static safety_config hyundai_canfd_init(uint16_t param) {
|
||||
HYUNDAI_CANFD_LFA_STEERING_CAMERA_SCC_TX_MSGS(false)
|
||||
};
|
||||
|
||||
SET_TX_MSGS(hyundai_canfd_lfa_steering_camera_scc_tx_msgs, ret);
|
||||
static CanMsg hyundai_canfd_lfa_steering_camera_scc_ccnc_tx_msgs[] = {
|
||||
HYUNDAI_CANFD_LFA_STEERING_CAMERA_SCC_CCNC_TX_MSGS(false)
|
||||
};
|
||||
|
||||
if (hyundai_ccnc) {
|
||||
SET_TX_MSGS(hyundai_canfd_lfa_steering_camera_scc_ccnc_tx_msgs, ret);
|
||||
} else {
|
||||
SET_TX_MSGS(hyundai_canfd_lfa_steering_camera_scc_tx_msgs, ret);
|
||||
}
|
||||
|
||||
if (hyundai_canfd_alt_buttons) {
|
||||
SET_RX_CHECKS(hyundai_canfd_alt_buttons_rx_checks, ret);
|
||||
|
||||
@@ -1,128 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
#include "opendbc/safety/declarations.h"
|
||||
|
||||
static uint8_t mg_crc_lut[256];
|
||||
|
||||
static uint32_t mg_get_checksum(const CANPacket_t *msg) {
|
||||
return msg->data[7];
|
||||
}
|
||||
|
||||
static uint32_t mg_compute_checksum(const CANPacket_t *msg) {
|
||||
uint8_t checksum = 0xFFU;
|
||||
for (int i = 0; i < 7; i++) {
|
||||
checksum ^= msg->data[i];
|
||||
checksum = mg_crc_lut[checksum];
|
||||
}
|
||||
return checksum ^ 0xFFU;
|
||||
}
|
||||
|
||||
static uint8_t mg_get_counter(const CANPacket_t *msg) {
|
||||
uint8_t counter = 0U;
|
||||
if (msg->addr == 0x23cU) {
|
||||
counter = (msg->data[4] >> 4) & 0xFU;
|
||||
} else if (msg->addr == 0x1ecU) {
|
||||
counter = (msg->data[0] >> 4) & 0xFU;
|
||||
} else if (msg->addr == 0x242U) {
|
||||
counter = (msg->data[0] >> 3) & 0xFU;
|
||||
} else if (msg->addr == 0x1b6U) {
|
||||
counter = msg->data[6] & 0xFU;
|
||||
} else {
|
||||
// No counter for this message
|
||||
}
|
||||
return counter;
|
||||
}
|
||||
|
||||
static void mg_rx_hook(const CANPacket_t *msg) {
|
||||
if (msg->bus == 0U) {
|
||||
// Vehicle speed
|
||||
if (msg->addr == 0x23cU) {
|
||||
float speed = (((msg->data[2] & 0x7FU) << 8) | msg->data[3]) * 0.015625;
|
||||
vehicle_moving = speed > 0.0;
|
||||
UPDATE_VEHICLE_SPEED(speed * KPH_TO_MS);
|
||||
}
|
||||
|
||||
// Gas pressed
|
||||
if (msg->addr == 0xafU) {
|
||||
gas_pressed = msg->data[0] != 0U;
|
||||
}
|
||||
|
||||
// Driver torque
|
||||
if (msg->addr == 0x1ecU) {
|
||||
int torque_driver_new = (((msg->data[4] & 0x7U) << 8) | msg->data[5]) - 1024U;
|
||||
update_sample(&torque_driver, torque_driver_new);
|
||||
}
|
||||
|
||||
// Brake pressed
|
||||
if (msg->addr == 0x1b6U) {
|
||||
brake_pressed = GET_BIT(msg, 10U);
|
||||
}
|
||||
|
||||
// Cruise state
|
||||
if (msg->addr == 0x242U) {
|
||||
int cruise_state = (msg->data[5] & 0x38U) >> 3;
|
||||
bool cruise_engaged = (cruise_state == 2) || // Active
|
||||
(cruise_state == 3); // Override
|
||||
pcm_cruise_check(cruise_engaged);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static bool mg_tx_hook(const CANPacket_t *msg) {
|
||||
const TorqueSteeringLimits MG_STEERING_LIMITS = {
|
||||
.max_torque = 300,
|
||||
.max_rate_up = 6,
|
||||
.max_rate_down = 10,
|
||||
.max_rt_delta = 125,
|
||||
.driver_torque_multiplier = 2,
|
||||
.driver_torque_allowance = 100,
|
||||
.type = TorqueDriverLimited,
|
||||
};
|
||||
|
||||
bool tx = true;
|
||||
bool violation = false;
|
||||
|
||||
// Steering control
|
||||
if (msg->addr == 0x1fdU) {
|
||||
int desired_torque = (((msg->data[0] & 0x7U) << 8) | msg->data[1]) - 1024U;
|
||||
bool steer_req = GET_BIT(msg, 35U);
|
||||
|
||||
violation |= steer_torque_cmd_checks(desired_torque, steer_req, MG_STEERING_LIMITS);
|
||||
}
|
||||
|
||||
if (violation) {
|
||||
tx = false;
|
||||
}
|
||||
|
||||
return tx;
|
||||
}
|
||||
|
||||
static safety_config mg_init(uint16_t param) {
|
||||
SAFETY_UNUSED(param);
|
||||
|
||||
gen_crc_lookup_table_8(0x1DU, mg_crc_lut);
|
||||
|
||||
static const CanMsg MG_TX_MSGS[] = {{0x1fd, 0, 8, .check_relay = true}};
|
||||
|
||||
static RxCheck mg_rx_checks[] = {
|
||||
{.msg = {{0x23c, 0, 8, .frequency = 50U, .ignore_checksum = true, .max_counter = 15U, .ignore_quality_flag = true}, { 0 }, { 0 }}}, // SCS_HSC2_FrP19 (speed)
|
||||
{.msg = {{0xaf, 0, 8, .frequency = 100U, .ignore_checksum = true, .ignore_counter = true, .ignore_quality_flag = true}, { 0 }, { 0 }}}, // GW_HSC2_HCU_FrP00 (gas pedal)
|
||||
{.msg = {{0x1ec, 0, 8, .frequency = 50U, .ignore_checksum = true, .max_counter = 15U, .ignore_quality_flag = true}, { 0 }, { 0 }}}, // EPS_HSC2_FrP03 (driver torque)
|
||||
{.msg = {{0x242, 0, 8, .frequency = 50U, .max_counter = 15U, .ignore_quality_flag = true}, { 0 }, { 0 }}}, // RADAR_HSC2_FrP00 (cruise state)
|
||||
{.msg = {{0x1b6, 0, 8, .frequency = 50U, .max_counter = 15U, .ignore_quality_flag = true}, { 0 }, { 0 }}}, // EHBS_HSC2_FrP00 (brake pedal)
|
||||
};
|
||||
|
||||
safety_config ret;
|
||||
SET_RX_CHECKS(mg_rx_checks, ret);
|
||||
SET_TX_MSGS(MG_TX_MSGS, ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
const safety_hooks mg_hooks = {
|
||||
.init = mg_init,
|
||||
.rx = mg_rx_hook,
|
||||
.tx = mg_tx_hook,
|
||||
.get_checksum = mg_get_checksum,
|
||||
.compute_checksum = mg_compute_checksum,
|
||||
.get_counter = mg_get_counter,
|
||||
};
|
||||
@@ -28,11 +28,19 @@
|
||||
#define MSG_SUBARU_Brake_Pedal 0x139U
|
||||
|
||||
#define MSG_SUBARU_ES_LKAS 0x122U
|
||||
#define MSG_SUBARU_ES_Brake 0x220U
|
||||
#define MSG_SUBARU_ES_Distance 0x221U
|
||||
#define MSG_SUBARU_ES_Status 0x222U
|
||||
#define MSG_SUBARU_ES_DashStatus 0x321U
|
||||
#define MSG_SUBARU_ES_LKAS_State 0x322U
|
||||
#define MSG_SUBARU_ES_Infotainment 0x323U
|
||||
|
||||
#define MSG_SUBARU_ES_UDS_Request 0x787U
|
||||
|
||||
#define MSG_SUBARU_ES_HighBeamAssist 0x22AU
|
||||
#define MSG_SUBARU_ES_STATIC_1 0x325U
|
||||
#define MSG_SUBARU_ES_STATIC_2 0x121U
|
||||
|
||||
#define SUBARU_MAIN_BUS 0U
|
||||
#define SUBARU_ALT_BUS 1U
|
||||
#define SUBARU_CAM_BUS 2U
|
||||
@@ -46,6 +54,17 @@
|
||||
#define SUBARU_COMMON_TX_MSGS(alt_bus) \
|
||||
{MSG_SUBARU_ES_Distance, alt_bus, 8, .check_relay = false}, \
|
||||
|
||||
#define SUBARU_COMMON_LONG_TX_MSGS(alt_bus) \
|
||||
{MSG_SUBARU_ES_Distance, alt_bus, 8, .check_relay = true}, \
|
||||
{MSG_SUBARU_ES_Brake, alt_bus, 8, .check_relay = true}, \
|
||||
{MSG_SUBARU_ES_Status, alt_bus, 8, .check_relay = true}, \
|
||||
|
||||
#define SUBARU_GEN2_LONG_ADDITIONAL_TX_MSGS() \
|
||||
{MSG_SUBARU_ES_UDS_Request, SUBARU_CAM_BUS, 8, .check_relay = false}, \
|
||||
{MSG_SUBARU_ES_HighBeamAssist, SUBARU_MAIN_BUS, 8, .check_relay = false}, \
|
||||
{MSG_SUBARU_ES_STATIC_1, SUBARU_MAIN_BUS, 8, .check_relay = false}, \
|
||||
{MSG_SUBARU_ES_STATIC_2, SUBARU_MAIN_BUS, 8, .check_relay = false}, \
|
||||
|
||||
#define SUBARU_STOP_AND_GO_TX_MSGS \
|
||||
{MSG_SUBARU_Throttle, SUBARU_CAM_BUS, 8, .check_relay = true}, \
|
||||
{MSG_SUBARU_Brake_Pedal, SUBARU_CAM_BUS, 8, .check_relay = true}, \
|
||||
@@ -59,6 +78,7 @@
|
||||
{.msg = {{MSG_SUBARU_ES_LKAS_State, SUBARU_CAM_BUS, 8, 10U, .max_counter = 15U, .ignore_quality_flag = true}, { 0 }, { 0 }}}, \
|
||||
|
||||
static bool subaru_gen2 = false;
|
||||
static bool subaru_longitudinal = false;
|
||||
|
||||
static uint32_t subaru_get_checksum(const CANPacket_t *msg) {
|
||||
return (uint8_t)msg->data[0];
|
||||
@@ -150,15 +170,41 @@ static bool subaru_tx_hook(const CANPacket_t *msg) {
|
||||
violation |= steer_torque_cmd_checks(desired_torque, steer_req, limits);
|
||||
}
|
||||
|
||||
// check es_brake brake_pressure limits
|
||||
if (msg->addr == MSG_SUBARU_ES_Brake) {
|
||||
int es_brake_pressure = GET_BYTES(msg, 2, 2);
|
||||
violation |= longitudinal_brake_checks(es_brake_pressure, SUBARU_LONG_LIMITS);
|
||||
}
|
||||
|
||||
// check es_distance cruise_throttle limits
|
||||
if (msg->addr == MSG_SUBARU_ES_Distance) {
|
||||
int cruise_throttle = (GET_BYTES(msg, 2, 2) & 0x1FFFU);
|
||||
bool cruise_cancel = (msg->data[7] >> 0) & 1U;
|
||||
|
||||
// If openpilot is not controlling long, only allow ES_Distance for cruise cancel requests,
|
||||
// (when Cruise_Cancel is true, and Cruise_Throttle is inactive)
|
||||
violation |= (cruise_throttle != SUBARU_LONG_LIMITS.inactive_gas);
|
||||
violation |= (!cruise_cancel);
|
||||
if (subaru_longitudinal) {
|
||||
violation |= longitudinal_gas_checks(cruise_throttle, SUBARU_LONG_LIMITS);
|
||||
} else {
|
||||
// If openpilot is not controlling long, only allow ES_Distance for cruise cancel requests,
|
||||
// (when Cruise_Cancel is true, and Cruise_Throttle is inactive)
|
||||
violation |= (cruise_throttle != SUBARU_LONG_LIMITS.inactive_gas);
|
||||
violation |= (!cruise_cancel);
|
||||
}
|
||||
}
|
||||
|
||||
// check es_status transmission_rpm limits
|
||||
if (msg->addr == MSG_SUBARU_ES_Status) {
|
||||
int transmission_rpm = (GET_BYTES(msg, 2, 2) & 0x1FFFU);
|
||||
violation |= longitudinal_transmission_rpm_checks(transmission_rpm, SUBARU_LONG_LIMITS);
|
||||
}
|
||||
|
||||
if (msg->addr == MSG_SUBARU_ES_UDS_Request) {
|
||||
// tester present ('\x02\x3E\x80\x00\x00\x00\x00\x00') is allowed for gen2 longitudinal to keep eyesight disabled
|
||||
bool is_tester_present = (GET_BYTES(msg, 0, 4) == 0x00803E02U) && (GET_BYTES(msg, 4, 4) == 0x0U);
|
||||
|
||||
// reading ES button data by identifier (b'\x03\x22\x11\x30\x00\x00\x00\x00') is also allowed (DID 0x1130)
|
||||
bool is_button_rdbi = (GET_BYTES(msg, 0, 4) == 0x30112203U) && (GET_BYTES(msg, 4, 4) == 0x0U);
|
||||
|
||||
violation |= !(is_tester_present || is_button_rdbi);
|
||||
}
|
||||
|
||||
if (violation){
|
||||
@@ -173,38 +219,55 @@ static safety_config subaru_init(uint16_t param) {
|
||||
SUBARU_COMMON_TX_MSGS(SUBARU_MAIN_BUS)
|
||||
};
|
||||
|
||||
static const CanMsg SUBARU_LONG_TX_MSGS[] = {
|
||||
SUBARU_BASE_TX_MSGS(SUBARU_MAIN_BUS, MSG_SUBARU_ES_LKAS)
|
||||
SUBARU_COMMON_LONG_TX_MSGS(SUBARU_MAIN_BUS)
|
||||
};
|
||||
|
||||
static const CanMsg SUBARU_GEN2_TX_MSGS[] = {
|
||||
SUBARU_BASE_TX_MSGS(SUBARU_ALT_BUS, MSG_SUBARU_ES_LKAS)
|
||||
SUBARU_COMMON_TX_MSGS(SUBARU_ALT_BUS)
|
||||
};
|
||||
|
||||
static const CanMsg SUBARU_GEN2_LONG_TX_MSGS[] = {
|
||||
SUBARU_BASE_TX_MSGS(SUBARU_ALT_BUS, MSG_SUBARU_ES_LKAS)
|
||||
SUBARU_COMMON_LONG_TX_MSGS(SUBARU_ALT_BUS)
|
||||
SUBARU_GEN2_LONG_ADDITIONAL_TX_MSGS()
|
||||
};
|
||||
|
||||
static const CanMsg subaru_stop_and_go_tx_msgs[] = {
|
||||
SUBARU_BASE_TX_MSGS(SUBARU_MAIN_BUS, MSG_SUBARU_ES_LKAS)
|
||||
SUBARU_COMMON_TX_MSGS(SUBARU_MAIN_BUS)
|
||||
SUBARU_STOP_AND_GO_TX_MSGS
|
||||
};
|
||||
|
||||
static RxCheck subaru_rx_checks[] = {
|
||||
SUBARU_COMMON_RX_CHECKS(SUBARU_MAIN_BUS)
|
||||
};
|
||||
|
||||
static RxCheck subaru_gen2_rx_checks[] = {
|
||||
SUBARU_COMMON_RX_CHECKS(SUBARU_ALT_BUS)
|
||||
};
|
||||
|
||||
const uint16_t SUBARU_PARAM_GEN2 = 1;
|
||||
|
||||
subaru_gen2 = GET_FLAG(param, SUBARU_PARAM_GEN2);
|
||||
|
||||
subaru_common_init();
|
||||
|
||||
// TODO: re-enable once more work is done on the limits
|
||||
// revert this in the PR that re-enables Subaru longitudinal: https://github.com/commaai/opendbc/pull/3689
|
||||
#ifdef ALLOW_DEBUG
|
||||
const uint16_t SUBARU_PARAM_LONGITUDINAL = 2;
|
||||
subaru_longitudinal = GET_FLAG(param, SUBARU_PARAM_LONGITUDINAL);
|
||||
#endif
|
||||
|
||||
safety_config ret;
|
||||
if (subaru_gen2) {
|
||||
static RxCheck subaru_gen2_rx_checks[] = {
|
||||
SUBARU_COMMON_RX_CHECKS(SUBARU_ALT_BUS)
|
||||
};
|
||||
ret = BUILD_SAFETY_CFG(subaru_gen2_rx_checks, SUBARU_GEN2_TX_MSGS);
|
||||
ret = subaru_longitudinal ? BUILD_SAFETY_CFG(subaru_gen2_rx_checks, SUBARU_GEN2_LONG_TX_MSGS) : \
|
||||
BUILD_SAFETY_CFG(subaru_gen2_rx_checks, SUBARU_GEN2_TX_MSGS);
|
||||
} else {
|
||||
static RxCheck subaru_rx_checks[] = {
|
||||
SUBARU_COMMON_RX_CHECKS(SUBARU_MAIN_BUS)
|
||||
};
|
||||
ret = subaru_stop_and_go ? BUILD_SAFETY_CFG(subaru_rx_checks, subaru_stop_and_go_tx_msgs) : \
|
||||
BUILD_SAFETY_CFG(subaru_rx_checks, SUBARU_TX_MSGS);
|
||||
ret = subaru_longitudinal ? BUILD_SAFETY_CFG(subaru_rx_checks, SUBARU_LONG_TX_MSGS) : \
|
||||
subaru_stop_and_go ? BUILD_SAFETY_CFG(subaru_rx_checks, subaru_stop_and_go_tx_msgs) : \
|
||||
BUILD_SAFETY_CFG(subaru_rx_checks, SUBARU_TX_MSGS);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -17,7 +17,6 @@
|
||||
#include "opendbc/safety/modes/chrysler.h"
|
||||
#include "opendbc/safety/modes/chrysler_cusw.h"
|
||||
#include "opendbc/safety/modes/rivian.h"
|
||||
#include "opendbc/safety/modes/mg.h"
|
||||
#include "opendbc/safety/modes/subaru.h"
|
||||
#include "opendbc/safety/modes/subaru_preglobal.h"
|
||||
#include "opendbc/safety/modes/mazda.h"
|
||||
@@ -421,7 +420,6 @@ int set_safety_hooks(uint16_t mode, uint16_t param) {
|
||||
{SAFETY_TESLA, &tesla_hooks},
|
||||
{SAFETY_HYUNDAI_CANFD, &hyundai_canfd_hooks},
|
||||
#ifdef ALLOW_DEBUG
|
||||
{SAFETY_MG, &mg_hooks},
|
||||
{SAFETY_CHRYSLER_CUSW, &chrysler_cusw_hooks},
|
||||
{SAFETY_PSA, &psa_hooks},
|
||||
{SAFETY_SUBARU_PREGLOBAL, &subaru_preglobal_hooks},
|
||||
|
||||
@@ -1019,6 +1019,8 @@ class SafetyTest(SafetyTestBase):
|
||||
continue
|
||||
if attr.startswith('TestHyundaiCanfd') and current_test.startswith('TestHyundaiCanfd'):
|
||||
continue
|
||||
if attr == 'TestElm327' and current_test.startswith(('TestHyundaiCanfdLFASteeringCCNC', 'TestHyundaiCanfdLFASteeringLongCCNC')):
|
||||
tx = list(filter(lambda m: m[0] != 0x7C4, tx))
|
||||
if {attr, current_test}.issubset({'TestHyundaiLongitudinalSafety', 'TestHyundaiLongitudinalSafetyCameraSCC', 'TestHyundaiSafetyFCEVLong'}):
|
||||
continue
|
||||
base_tests = {'TestHyundaiLongitudinalSafety', 'TestHyundaiLongitudinalSafetyCameraSCC', 'TestHyundaiSafetyFCEVLong',
|
||||
|
||||
@@ -260,11 +260,11 @@ def enumerate_sites(input_source, preprocessed_file):
|
||||
def _build_core_tests(catalog):
|
||||
"""Build test ordering for core (non-mode) files.
|
||||
|
||||
Tests are ordered by how widely each method is shared. Methods inherited by
|
||||
many classes exercise the most fundamental safety logic and run first.
|
||||
|
||||
Keep every implementation of each method.
|
||||
One test per unique method name from evenly-spaced modules,
|
||||
ordered by how widely each method is shared. Methods inherited by many
|
||||
classes exercise the most fundamental safety logic and run first.
|
||||
"""
|
||||
MAX_PER_METHOD = 5
|
||||
method_freq = {}
|
||||
method_by_module = {}
|
||||
for name in sorted(catalog.keys()):
|
||||
@@ -275,14 +275,23 @@ def _build_core_tests(catalog):
|
||||
method_by_module[method] = {}
|
||||
if name not in method_by_module[method]:
|
||||
method_by_module[method][name] = test_id
|
||||
# Pick evenly-spaced modules for each method to maximize configuration diversity
|
||||
method_ids = {}
|
||||
for method, module_map in method_by_module.items():
|
||||
modules = sorted(module_map.keys())
|
||||
n = len(modules)
|
||||
if n <= MAX_PER_METHOD:
|
||||
method_ids[method] = [module_map[m] for m in modules]
|
||||
else:
|
||||
step = n / MAX_PER_METHOD
|
||||
method_ids[method] = [module_map[modules[int(i * step)]] for i in range(MAX_PER_METHOD)]
|
||||
# Round-robin: first instance of each method (by freq), then second, etc.
|
||||
# This ensures diverse early coverage with failfast.
|
||||
sorted_methods = sorted(method_freq, key=lambda m: -method_freq[m])
|
||||
ordered = []
|
||||
max_implementations = max(len(module_map) for module_map in method_by_module.values())
|
||||
for round_idx in range(max_implementations):
|
||||
for round_idx in range(MAX_PER_METHOD):
|
||||
for m in sorted_methods:
|
||||
ids = [method_by_module[m][module] for module in sorted(method_by_module[m])]
|
||||
ids = method_ids.get(m, [])
|
||||
if round_idx < len(ids):
|
||||
ordered.append(ids[round_idx])
|
||||
return ordered
|
||||
|
||||
@@ -21,6 +21,8 @@ ALL_GAS_EV_HYBRID_COMBOS = [
|
||||
{"GAS_MSG": ("ACCELERATOR_ALT", "ACCELERATOR_PEDAL"), "SCC_BUS": 2, "SAFETY_PARAM": HyundaiSafetyFlags.HYBRID_GAS | HyundaiSafetyFlags.CAMERA_SCC},
|
||||
]
|
||||
|
||||
CAMERA_SCC_COMBOS = ALL_GAS_EV_HYBRID_COMBOS[3:]
|
||||
|
||||
|
||||
class TestHyundaiCanfdBase(HyundaiButtonBase, common.CarSafetyTest, common.DriverTorqueSteeringSafetyTest, common.SteerRequestCutSafetyTest):
|
||||
|
||||
@@ -308,5 +310,48 @@ class TestHyundaiCanfdLFASteeringLongAltButtons(TestHyundaiCanfdLFASteeringLongB
|
||||
pass
|
||||
|
||||
|
||||
class HyundaiCanfdCCNCTest:
|
||||
|
||||
CCNC_SAFETY_PARAM = HyundaiSafetyFlags.CCNC
|
||||
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
if cls.__name__ in (
|
||||
"TestHyundaiCanfdLFASteeringCCNC",
|
||||
"TestHyundaiCanfdLFASteeringLongCCNC",
|
||||
):
|
||||
cls.safety = None
|
||||
raise unittest.SkipTest
|
||||
|
||||
def setUp(self):
|
||||
self.packer = CANPackerSafety("hyundai_canfd_generated")
|
||||
self.safety = libsafety_py.libsafety
|
||||
self.safety.set_safety_hooks(CarParams.SafetyModel.hyundaiCanfd, self.CCNC_SAFETY_PARAM | self.SAFETY_PARAM)
|
||||
self.safety.init_tests()
|
||||
|
||||
def test_ccnc_tx_msgs(self):
|
||||
for msg, bus in (("CCNC_0x161", 0), ("CCNC_0x162", 0), ("MDPS", 2)):
|
||||
self.assertTrue(self._tx(self.packer.make_can_msg_safety(msg, bus, {})))
|
||||
self.assertTrue(self._tx(common.make_msg(2, 0x7C4)))
|
||||
|
||||
|
||||
@parameterized_class(CAMERA_SCC_COMBOS)
|
||||
class TestHyundaiCanfdLFASteeringCCNC(HyundaiCanfdCCNCTest, TestHyundaiCanfdLFASteeringBase):
|
||||
|
||||
TX_MSGS = [[0x12A, 0], [0x1E0, 0], [0x1CF, 2], [0x7C4, 2]]
|
||||
RELAY_MALFUNCTION_ADDRS = {0: (0x12A, 0x1E0, 0x161, 0x162), 2: (0x7C4, 0xEA)}
|
||||
FWD_BLACKLISTED_ADDRS = {2: [0x12A, 0x1E0, 0x161, 0x162], 0: [0x7C4, 0xEA]}
|
||||
|
||||
|
||||
@parameterized_class(CAMERA_SCC_COMBOS)
|
||||
class TestHyundaiCanfdLFASteeringLongCCNC(HyundaiCanfdCCNCTest, TestHyundaiCanfdLFASteeringLongBase):
|
||||
|
||||
CCNC_SAFETY_PARAM = HyundaiSafetyFlags.CCNC | HyundaiSafetyFlags.LONG
|
||||
|
||||
TX_MSGS = [[0x12A, 0], [0x1E0, 0], [0x1CF, 2], [0x7C4, 2], [0x1A0, 0]]
|
||||
RELAY_MALFUNCTION_ADDRS = {0: (0x12A, 0x1E0, 0x161, 0x162, 0x1A0), 2: (0x7C4, 0xEA)}
|
||||
FWD_BLACKLISTED_ADDRS = {2: [0x12A, 0x1E0, 0x161, 0x162, 0x1A0], 0: [0x7C4, 0xEA]}
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
||||
@@ -1,77 +0,0 @@
|
||||
#!/usr/bin/env python3
|
||||
import unittest
|
||||
|
||||
from opendbc.car.structs import CarParams
|
||||
from opendbc.safety.tests.libsafety import libsafety_py
|
||||
import opendbc.safety.tests.common as common
|
||||
from opendbc.safety.tests.common import CANPackerSafety
|
||||
|
||||
|
||||
def checksum(msg):
|
||||
addr, dat, bus = msg
|
||||
ret = bytearray(dat)
|
||||
|
||||
if addr in (0x1b6, 0x242):
|
||||
crc = 0xFF
|
||||
for byte in ret[:-1]:
|
||||
crc ^= byte
|
||||
for _ in range(8):
|
||||
crc = ((crc << 1) ^ 0x1D) & 0xFF if crc & 0x80 else (crc << 1) & 0xFF
|
||||
ret[-1] = crc ^ 0xFF
|
||||
|
||||
return addr, ret, bus
|
||||
|
||||
|
||||
class TestMGSafety(common.CarSafetyTest, common.DriverTorqueSteeringSafetyTest):
|
||||
|
||||
TX_MSGS = [[0x1fd, 0], ]
|
||||
RELAY_MALFUNCTION_ADDRS = {0: (0x1fd,)}
|
||||
FWD_BLACKLISTED_ADDRS = {2: [0x1fd,]}
|
||||
|
||||
MAX_RATE_UP = 6
|
||||
MAX_RATE_DOWN = 10
|
||||
MAX_TORQUE_LOOKUP = [0], [300]
|
||||
MAX_RT_DELTA = 125
|
||||
|
||||
DRIVER_TORQUE_ALLOWANCE = 100
|
||||
DRIVER_TORQUE_FACTOR = 2
|
||||
|
||||
def setUp(self):
|
||||
self.packer = CANPackerSafety("mg")
|
||||
self.safety = libsafety_py.libsafety
|
||||
self.safety.set_safety_hooks(CarParams.SafetyModel.mg, 0)
|
||||
self.safety.init_tests()
|
||||
self.counters = {addr: 0 for addr in (0x1b6, 0x1ec, 0x23c, 0x242)}
|
||||
|
||||
def _counter(self, addr):
|
||||
counter = self.counters[addr]
|
||||
self.counters[addr] = (counter + 1) % 16
|
||||
return counter
|
||||
|
||||
def _torque_cmd_msg(self, torque, steer_req=1):
|
||||
values = {"LKAReqToqHSC2": torque, "LKAReqToqStsHSC2": steer_req}
|
||||
return self.packer.make_can_msg_safety("FVCM_HSC2_FrP03", 0, values)
|
||||
|
||||
def _speed_msg(self, speed):
|
||||
values = {"VehSpdAvgHSC2": speed * 3.6, "VehSpdAvgAlvRCHSC2": self._counter(0x23c)}
|
||||
return self.packer.make_can_msg_safety("SCS_HSC2_FrP19", 0, values)
|
||||
|
||||
def _torque_driver_msg(self, torque):
|
||||
values = {"DrvrStrgDlvrdToqHSC2": torque * 0.01, "ChLKAAlvRCHSC2": self._counter(0x1ec)}
|
||||
return self.packer.make_can_msg_safety("EPS_HSC2_FrP03", 0, values)
|
||||
|
||||
def _user_brake_msg(self, brake):
|
||||
values = {"BrkPdlAppdHSC2": 1 if brake else 0, "BrkPdlAppdRCHSC2": self._counter(0x1b6)}
|
||||
return self.packer.make_can_msg_safety("EHBS_HSC2_FrP00", 0, values, fix_checksum=checksum)
|
||||
|
||||
def _user_gas_msg(self, gas):
|
||||
values = {"EPTAccelActuPosHSC2": 100 if gas else 0}
|
||||
return self.packer.make_can_msg_safety("GW_HSC2_HCU_FrP00", 0, values)
|
||||
|
||||
def _pcm_status_msg(self, enable):
|
||||
values = {"ACCSysSts_RadarHSC2": 2 if enable else 1, "ACCSysAlvRlngCtr_SCSHSC2": self._counter(0x242)}
|
||||
return self.packer.make_can_msg_safety("RADAR_HSC2_FrP00", 0, values, fix_checksum=checksum)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
@@ -18,10 +18,16 @@ class SubaruMsg(enum.IntEnum):
|
||||
Wheel_Speeds = 0x13a
|
||||
ES_LKAS = 0x122
|
||||
ES_LKAS_ANGLE = 0x124
|
||||
ES_Brake = 0x220
|
||||
ES_Distance = 0x221
|
||||
ES_Status = 0x222
|
||||
ES_DashStatus = 0x321
|
||||
ES_LKAS_State = 0x322
|
||||
ES_Infotainment = 0x323
|
||||
ES_UDS_Request = 0x787
|
||||
ES_HighBeamAssist = 0x22A
|
||||
ES_STATIC_1 = 0x325
|
||||
ES_STATIC_2 = 0x121
|
||||
|
||||
|
||||
SUBARU_MAIN_BUS = 0
|
||||
@@ -37,6 +43,18 @@ def lkas_tx_msgs(alt_bus, lkas_msg=SubaruMsg.ES_LKAS):
|
||||
[SubaruMsg.ES_Infotainment, SUBARU_MAIN_BUS]]
|
||||
|
||||
|
||||
def long_tx_msgs(alt_bus):
|
||||
return [[SubaruMsg.ES_Brake, alt_bus],
|
||||
[SubaruMsg.ES_Status, alt_bus]]
|
||||
|
||||
|
||||
def gen2_long_additional_tx_msgs():
|
||||
return [[SubaruMsg.ES_UDS_Request, SUBARU_CAM_BUS],
|
||||
[SubaruMsg.ES_HighBeamAssist, SUBARU_MAIN_BUS],
|
||||
[SubaruMsg.ES_STATIC_1, SUBARU_MAIN_BUS],
|
||||
[SubaruMsg.ES_STATIC_2, SUBARU_MAIN_BUS]]
|
||||
|
||||
|
||||
def fwd_blacklisted_addr(lkas_msg=SubaruMsg.ES_LKAS):
|
||||
return {SUBARU_CAM_BUS: [lkas_msg, SubaruMsg.ES_DashStatus, SubaruMsg.ES_LKAS_State, SubaruMsg.ES_Infotainment]}
|
||||
|
||||
@@ -116,6 +134,40 @@ class TestSubaruStockLongitudinalSafetyBase(TestSubaruSafetyBase):
|
||||
self._generic_limit_safety_check(partial(self._cancel_msg, cancel), self.INACTIVE_GAS, self.INACTIVE_GAS, 0, 2**12, 1, self.INACTIVE_GAS, cancel)
|
||||
|
||||
|
||||
class TestSubaruLongitudinalSafetyBase(TestSubaruSafetyBase, common.LongitudinalGasBrakeSafetyTest):
|
||||
MIN_GAS = 808
|
||||
MAX_GAS = 3400
|
||||
INACTIVE_GAS = 1818
|
||||
MAX_POSSIBLE_GAS = 2**13
|
||||
|
||||
MIN_BRAKE = 0
|
||||
MAX_BRAKE = 600
|
||||
MAX_POSSIBLE_BRAKE = 2**16
|
||||
|
||||
MIN_RPM = 0
|
||||
MAX_RPM = 3600
|
||||
MAX_POSSIBLE_RPM = 2**13
|
||||
|
||||
FWD_BLACKLISTED_ADDRS = {2: [SubaruMsg.ES_LKAS, SubaruMsg.ES_Brake, SubaruMsg.ES_Distance,
|
||||
SubaruMsg.ES_Status, SubaruMsg.ES_DashStatus,
|
||||
SubaruMsg.ES_LKAS_State, SubaruMsg.ES_Infotainment]}
|
||||
|
||||
def test_rpm_safety_check(self):
|
||||
self._generic_limit_safety_check(self._send_rpm_msg, self.MIN_RPM, self.MAX_RPM, 0, self.MAX_POSSIBLE_RPM, 1)
|
||||
|
||||
def _send_brake_msg(self, brake):
|
||||
values = {"Brake_Pressure": brake}
|
||||
return self.packer.make_can_msg_safety("ES_Brake", self.ALT_MAIN_BUS, values)
|
||||
|
||||
def _send_gas_msg(self, gas):
|
||||
values = {"Cruise_Throttle": gas}
|
||||
return self.packer.make_can_msg_safety("ES_Distance", self.ALT_MAIN_BUS, values)
|
||||
|
||||
def _send_rpm_msg(self, rpm):
|
||||
values = {"Cruise_RPM": rpm}
|
||||
return self.packer.make_can_msg_safety("ES_Status", self.ALT_MAIN_BUS, values)
|
||||
|
||||
|
||||
class TestSubaruTorqueSafetyBase(TestSubaruSafetyBase, common.DriverTorqueSteeringSafetyTest, common.SteerRequestCutSafetyTest):
|
||||
MAX_RATE_UP = 50
|
||||
MAX_RATE_DOWN = 70
|
||||
@@ -150,5 +202,51 @@ class TestSubaruGen2TorqueStockLongitudinalSafety(TestSubaruStockLongitudinalSaf
|
||||
TX_MSGS = lkas_tx_msgs(SUBARU_ALT_BUS)
|
||||
|
||||
|
||||
class TestSubaruGen1LongitudinalSafety(TestSubaruLongitudinalSafetyBase, TestSubaruTorqueSafetyBase):
|
||||
FLAGS = SubaruSafetyFlags.LONG
|
||||
TX_MSGS = lkas_tx_msgs(SUBARU_MAIN_BUS) + long_tx_msgs(SUBARU_MAIN_BUS)
|
||||
RELAY_MALFUNCTION_ADDRS = {SUBARU_MAIN_BUS: (SubaruMsg.ES_LKAS, SubaruMsg.ES_DashStatus, SubaruMsg.ES_LKAS_State,
|
||||
SubaruMsg.ES_Infotainment, SubaruMsg.ES_Brake, SubaruMsg.ES_Status,
|
||||
SubaruMsg.ES_Distance)}
|
||||
|
||||
|
||||
class TestSubaruGen2LongitudinalSafety(TestSubaruLongitudinalSafetyBase, TestSubaruGen2TorqueSafetyBase):
|
||||
FLAGS = SubaruSafetyFlags.LONG | SubaruSafetyFlags.GEN2
|
||||
TX_MSGS = lkas_tx_msgs(SUBARU_ALT_BUS) + long_tx_msgs(SUBARU_ALT_BUS) + gen2_long_additional_tx_msgs()
|
||||
FWD_BLACKLISTED_ADDRS = {2: [SubaruMsg.ES_LKAS, SubaruMsg.ES_DashStatus, SubaruMsg.ES_LKAS_State,
|
||||
SubaruMsg.ES_Infotainment]}
|
||||
RELAY_MALFUNCTION_ADDRS = {SUBARU_MAIN_BUS: (SubaruMsg.ES_LKAS, SubaruMsg.ES_DashStatus, SubaruMsg.ES_LKAS_State,
|
||||
SubaruMsg.ES_Infotainment),
|
||||
SUBARU_ALT_BUS: (SubaruMsg.ES_Brake, SubaruMsg.ES_Status, SubaruMsg.ES_Distance)}
|
||||
|
||||
def _rdbi_msg(self, did: int):
|
||||
return b'\x03\x22' + did.to_bytes(2) + b'\x00\x00\x00\x00'
|
||||
|
||||
def _es_uds_msg(self, msg: bytes):
|
||||
return libsafety_py.make_CANPacket(SubaruMsg.ES_UDS_Request, 2, msg)
|
||||
|
||||
def test_es_uds_message(self):
|
||||
tester_present = b'\x02\x3E\x80\x00\x00\x00\x00\x00'
|
||||
not_tester_present = b"\x03\xAA\xAA\x00\x00\x00\x00\x00"
|
||||
|
||||
button_did = 0x1130
|
||||
|
||||
# Tester present is allowed for gen2 long to keep eyesight disabled
|
||||
self.assertTrue(self._tx(self._es_uds_msg(tester_present)))
|
||||
|
||||
# Non-Tester present is not allowed
|
||||
self.assertFalse(self._tx(self._es_uds_msg(not_tester_present)))
|
||||
|
||||
# Only button_did is allowed to be read via UDS
|
||||
for did in range(0xFFFF):
|
||||
should_tx = (did == button_did)
|
||||
self.assertEqual(self._tx(self._es_uds_msg(self._rdbi_msg(did))), should_tx)
|
||||
|
||||
# any other msg is not allowed
|
||||
for sid in range(0xFF):
|
||||
msg = b'\x03' + sid.to_bytes(1) + b'\x00' * 6
|
||||
self.assertFalse(self._tx(self._es_uds_msg(msg)))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
||||
@@ -1620,6 +1620,16 @@
|
||||
],
|
||||
"package": "Highway Driving Assist"
|
||||
},
|
||||
"Hyundai Ioniq 5 N (with HDA II) 2024": {
|
||||
"platform": "HYUNDAI_IONIQ_5_N",
|
||||
"make": "Hyundai",
|
||||
"brand": "hyundai",
|
||||
"model": "Ioniq 5 N (with HDA II)",
|
||||
"year": [
|
||||
"2024"
|
||||
],
|
||||
"package": "Smart Cruise Control (SCC)"
|
||||
},
|
||||
"Hyundai Ioniq 6 (with HDA II) 2023-24": {
|
||||
"platform": "HYUNDAI_IONIQ_6",
|
||||
"make": "Hyundai",
|
||||
@@ -1729,6 +1739,17 @@
|
||||
],
|
||||
"package": "Smart Cruise Control (SCC)"
|
||||
},
|
||||
"Hyundai Kona (without HDA II) 2024-25": {
|
||||
"platform": "HYUNDAI_KONA_2ND_GEN",
|
||||
"make": "Hyundai",
|
||||
"brand": "hyundai",
|
||||
"model": "Kona (without HDA II)",
|
||||
"year": [
|
||||
"2024",
|
||||
"2025"
|
||||
],
|
||||
"package": "Smart Cruise Control (SCC)"
|
||||
},
|
||||
"Hyundai Kona Electric 2018-21": {
|
||||
"platform": "HYUNDAI_KONA_EV",
|
||||
"make": "Hyundai",
|
||||
@@ -1763,6 +1784,16 @@
|
||||
],
|
||||
"package": "Smart Cruise Control (SCC)"
|
||||
},
|
||||
"Hyundai Kona Electric (without HDA II) 2024": {
|
||||
"platform": "HYUNDAI_KONA_EV_2ND_GEN",
|
||||
"make": "Hyundai",
|
||||
"brand": "hyundai",
|
||||
"model": "Kona Electric (without HDA II)",
|
||||
"year": [
|
||||
"2024"
|
||||
],
|
||||
"package": "Smart Cruise Control (SCC)"
|
||||
},
|
||||
"Hyundai Kona Electric Non-SCC 2019": {
|
||||
"platform": "HYUNDAI_KONA_EV_NON_SCC",
|
||||
"make": "Hyundai",
|
||||
@@ -1783,6 +1814,18 @@
|
||||
],
|
||||
"package": "Smart Cruise Control (SCC)"
|
||||
},
|
||||
"Hyundai Kona Hybrid (without HDA II) 2024-26": {
|
||||
"platform": "HYUNDAI_KONA_HEV_2ND_GEN",
|
||||
"make": "Hyundai",
|
||||
"brand": "hyundai",
|
||||
"model": "Kona Hybrid (without HDA II)",
|
||||
"year": [
|
||||
"2024",
|
||||
"2025",
|
||||
"2026"
|
||||
],
|
||||
"package": "Smart Cruise Control (SCC)"
|
||||
},
|
||||
"Hyundai Kona Non-SCC 2019": {
|
||||
"platform": "HYUNDAI_KONA_NON_SCC",
|
||||
"make": "Hyundai",
|
||||
@@ -1827,6 +1870,16 @@
|
||||
],
|
||||
"package": "Smart Cruise Control (SCC)"
|
||||
},
|
||||
"Hyundai Santa Cruz (without HDA II) 2025": {
|
||||
"platform": "HYUNDAI_SANTA_CRUZ_2025",
|
||||
"make": "Hyundai",
|
||||
"brand": "hyundai",
|
||||
"model": "Santa Cruz (without HDA II)",
|
||||
"year": [
|
||||
"2025"
|
||||
],
|
||||
"package": "Smart Cruise Control (SCC)"
|
||||
},
|
||||
"Hyundai Santa Fe 2019-20": {
|
||||
"platform": "HYUNDAI_SANTA_FE",
|
||||
"make": "Hyundai",
|
||||
@@ -1896,6 +1949,18 @@
|
||||
],
|
||||
"package": "All"
|
||||
},
|
||||
"Hyundai Sonata (without HDA II) 2024-26": {
|
||||
"platform": "HYUNDAI_SONATA_2024",
|
||||
"make": "Hyundai",
|
||||
"brand": "hyundai",
|
||||
"model": "Sonata (without HDA II)",
|
||||
"year": [
|
||||
"2024",
|
||||
"2025",
|
||||
"2026"
|
||||
],
|
||||
"package": "Smart Cruise Control (SCC)"
|
||||
},
|
||||
"Hyundai Sonata Hybrid 2020-23": {
|
||||
"platform": "HYUNDAI_SONATA_HYBRID",
|
||||
"make": "Hyundai",
|
||||
@@ -1909,6 +1974,17 @@
|
||||
],
|
||||
"package": "All"
|
||||
},
|
||||
"Hyundai Sonata Hybrid (without HDA II) 2024-25": {
|
||||
"platform": "HYUNDAI_SONATA_HEV_2024",
|
||||
"make": "Hyundai",
|
||||
"brand": "hyundai",
|
||||
"model": "Sonata Hybrid (without HDA II)",
|
||||
"year": [
|
||||
"2024",
|
||||
"2025"
|
||||
],
|
||||
"package": "Smart Cruise Control (SCC)"
|
||||
},
|
||||
"Hyundai Staria 2023": {
|
||||
"platform": "HYUNDAI_STARIA_4TH_GEN",
|
||||
"make": "Hyundai",
|
||||
@@ -1950,6 +2026,17 @@
|
||||
],
|
||||
"package": "All"
|
||||
},
|
||||
"Hyundai Tucson (without HDA II) 2025-26": {
|
||||
"platform": "HYUNDAI_TUCSON_2025",
|
||||
"make": "Hyundai",
|
||||
"brand": "hyundai",
|
||||
"model": "Tucson (without HDA II)",
|
||||
"year": [
|
||||
"2025",
|
||||
"2026"
|
||||
],
|
||||
"package": "Smart Cruise Control (SCC)"
|
||||
},
|
||||
"Hyundai Tucson Diesel 2019": {
|
||||
"platform": "HYUNDAI_TUCSON",
|
||||
"make": "Hyundai",
|
||||
@@ -1972,6 +2059,17 @@
|
||||
],
|
||||
"package": "All"
|
||||
},
|
||||
"Hyundai Tucson Hybrid (without HDA II) 2025-26": {
|
||||
"platform": "HYUNDAI_TUCSON_HEV_2025",
|
||||
"make": "Hyundai",
|
||||
"brand": "hyundai",
|
||||
"model": "Tucson Hybrid (without HDA II)",
|
||||
"year": [
|
||||
"2025",
|
||||
"2026"
|
||||
],
|
||||
"package": "Smart Cruise Control (SCC)"
|
||||
},
|
||||
"Hyundai Tucson Plug-in Hybrid 2024": {
|
||||
"platform": "HYUNDAI_TUCSON_4TH_GEN",
|
||||
"make": "Hyundai",
|
||||
@@ -1982,6 +2080,16 @@
|
||||
],
|
||||
"package": "All"
|
||||
},
|
||||
"Hyundai Tucson Plug-in Hybrid (without HDA II) 2025": {
|
||||
"platform": "HYUNDAI_TUCSON_PHEV_2025",
|
||||
"make": "Hyundai",
|
||||
"brand": "hyundai",
|
||||
"model": "Tucson Plug-in Hybrid (without HDA II)",
|
||||
"year": [
|
||||
"2025"
|
||||
],
|
||||
"package": "Smart Cruise Control (SCC)"
|
||||
},
|
||||
"Hyundai Veloster 2019-20": {
|
||||
"platform": "HYUNDAI_VELOSTER",
|
||||
"make": "Hyundai",
|
||||
@@ -2130,6 +2238,27 @@
|
||||
],
|
||||
"package": "No Smart Cruise Control (Non-SCC)"
|
||||
},
|
||||
"Kia K4 (with HDA II) 2025": {
|
||||
"platform": "KIA_K4_2025",
|
||||
"make": "Kia",
|
||||
"brand": "hyundai",
|
||||
"model": "K4 (with HDA II)",
|
||||
"year": [
|
||||
"2025"
|
||||
],
|
||||
"package": "Smart Cruise Control (SCC)"
|
||||
},
|
||||
"Kia K4 (without HDA II) 2025-26": {
|
||||
"platform": "KIA_K4_2025",
|
||||
"make": "Kia",
|
||||
"brand": "hyundai",
|
||||
"model": "K4 (without HDA II)",
|
||||
"year": [
|
||||
"2025",
|
||||
"2026"
|
||||
],
|
||||
"package": "Smart Cruise Control (SCC)"
|
||||
},
|
||||
"Kia K5 2021-24": {
|
||||
"platform": "KIA_K5_2021",
|
||||
"make": "Kia",
|
||||
@@ -2143,6 +2272,16 @@
|
||||
],
|
||||
"package": "Smart Cruise Control (SCC)"
|
||||
},
|
||||
"Kia K5 (without HDA II) 2025": {
|
||||
"platform": "KIA_K5_2025",
|
||||
"make": "Kia",
|
||||
"brand": "hyundai",
|
||||
"model": "K5 (without HDA II)",
|
||||
"year": [
|
||||
"2025"
|
||||
],
|
||||
"package": "Smart Cruise Control (SCC)"
|
||||
},
|
||||
"Kia K5 Hybrid 2020-22": {
|
||||
"platform": "KIA_K5_HEV_2020",
|
||||
"make": "Kia",
|
||||
@@ -2393,6 +2532,17 @@
|
||||
],
|
||||
"package": "Smart Cruise Control (SCC)"
|
||||
},
|
||||
"Kia Sorento (without HDA II) 2024-25": {
|
||||
"platform": "KIA_SORENTO_2024",
|
||||
"make": "Kia",
|
||||
"brand": "hyundai",
|
||||
"model": "Sorento (without HDA II)",
|
||||
"year": [
|
||||
"2024",
|
||||
"2025"
|
||||
],
|
||||
"package": "Smart Cruise Control (SCC)"
|
||||
},
|
||||
"Kia Sorento Hybrid 2021-23": {
|
||||
"platform": "KIA_SORENTO_HEV_4TH_GEN",
|
||||
"make": "Kia",
|
||||
|
||||
Generated
+115
-115
@@ -17,38 +17,38 @@ wheels = [
|
||||
|
||||
[[package]]
|
||||
name = "cffi"
|
||||
version = "2.1.1"
|
||||
version = "2.1.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "pycparser", marker = "implementation_name != 'PyPy'" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/9e/ef/008a1939e372c06329a3fce4279c02f328488f3526744906eeec3da7ad5f/cffi-2.1.1.tar.gz", hash = "sha256:dd31f52ea1086513bb9df30f8fcee9b8918323ae067a3d5b78bc826a000712be", size = 530807, upload-time = "2026-08-03T21:21:18.939Z" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/57/5f/ff100cae70ebe9d8df1c01a00e510e45d9adb5c1fdda84791b199141de97/cffi-2.1.0.tar.gz", hash = "sha256:efc1cdd798b1aaf39b4610bba7aad28c9bea9b910f25c784ccf9ec1fa719d1f9", size = 531036, upload-time = "2026-07-06T21:34:30.382Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/70/d2/16d99a0c4948febc0ebd133a13b2f688ff7f8cb04da971e1128872ce0c03/cffi-2.1.1-cp311-cp311-macosx_10_15_x86_64.whl", hash = "sha256:c8d2c9fd1f2d16f780d15127abb050d13d1a76c03a4bd87d7e4980e45e511e12", size = 183838, upload-time = "2026-08-03T21:19:29.637Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/cd/95/31b535a9f0220ae9f357de4a08d57ce89cb417653c2fd9f075f50822a388/cffi-2.1.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:398aff33cee2767e3e781d2554c54bd0dff386bb437581e0d8011fde1a942ec1", size = 184168, upload-time = "2026-08-03T21:19:30.764Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/ad/5a/4707a0dc1f203f5dde5a907b0d4e3c25d71120241048bd5bc6f1bb9d4e71/cffi-2.1.1-cp311-cp311-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:154852545011f779917b11c78db2358d095da62a9a172b78ad0a583ee5adc0d0", size = 211805, upload-time = "2026-08-03T21:19:31.867Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/ad/66/c19feabb28485b6e0bbaaafa90837a1ef5d302e90f2178bd33f17a49879b/cffi-2.1.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3311ed60d36f83378794e1009ac6258bafbf81f7888b4caa7b35a521e3f95813", size = 218716, upload-time = "2026-08-03T21:19:32.896Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/a7/92/500760486c8baab49a7a8a58ba7fc3355ec3974b454b8a09e528efde9e1d/cffi-2.1.1-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:6e192623c49c94421616a5778fba35cf0d5a8d000650c1967ef4448ee5cdd990", size = 205569, upload-time = "2026-08-03T21:19:34.142Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/a5/a7/a67c733254d6e7373f7822f8082d8d6beade791e0cf12a7611f376fa61c7/cffi-2.1.1-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:a6e721d4b0e45d5b65e87534470e67b18dcd092c83f68fba09f152b9cbc061af", size = 204907, upload-time = "2026-08-03T21:19:35.174Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/f7/a4/4399daaf8f7dfee9d7c3327fdb0426ee041cc63edc358b93911ceb2bfc7a/cffi-2.1.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:34e261f78cb6ceaaa36f42f2613f4380d94d9c759a9c73c769ee6e0247364632", size = 217807, upload-time = "2026-08-03T21:19:36.286Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/28/f7/dabe6da2466ecbd82dc62e7342dc6b1065dad990c06f00f0ede9ebf2a0ed/cffi-2.1.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:7225e4514edb64eb6740324353e0da0711954fd8d7da4576755b1c6e09b697cd", size = 221252, upload-time = "2026-08-03T21:19:37.416Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/ce/87/616202d8e51342c07d2534c510111c4cc37201775ce8f60802c9335d1edd/cffi-2.1.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:df913725b79db7bcf03448f36b7bf8815363417d5b58deecf9305e3e30f0f21a", size = 214214, upload-time = "2026-08-03T21:19:38.507Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/b4/c6/ab025d75d2c26c19b087c0124e75ee31cb65032f4fe345d356d8c507ab97/cffi-2.1.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f5cfbc5fe74540d335175b656c725d74d90e3730c626d92575eea35029d9afaa", size = 219408, upload-time = "2026-08-03T21:19:39.809Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/db/e2/7e8109f65445bdc673a7b54f02c677de462db75674220fd1335efc8eb598/cffi-2.1.1-cp311-cp311-win32.whl", hash = "sha256:f8ec5e643a9a937f64e1999eb9f75d072263751912dc5cd06d3c85f8f44be7c3", size = 174470, upload-time = "2026-08-03T21:19:41.246Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/73/c0/77ba02423c2f7d7091143c45cd49e0e6575c4c1967394bb542bd923a9b74/cffi-2.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:42f6930c31dc7f50732c9ae793c2786c7b6b044195967bbdde40bb9be81c4cc0", size = 185096, upload-time = "2026-08-03T21:19:42.615Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/7c/47/9f1f85f9672ceda4984dc6c4f8824e8558992a2972c3d3c81fb8eb28d4ba/cffi-2.1.1-cp311-cp311-win_arm64.whl", hash = "sha256:c7659f22557c5a0bc4855cd635f55edec690cc008a40768527762cb9fb263455", size = 179941, upload-time = "2026-08-03T21:19:43.747Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/10/69/43965eccfdead3b9220015fd1320e117be8c6ed01a62ffab76eeb752f5d5/cffi-2.1.1-cp312-cp312-macosx_10_15_x86_64.whl", hash = "sha256:c8c69575568085ba0b1b10c0249d779a214aea6f6522e949a0fc9fb0fcb449d0", size = 184821, upload-time = "2026-08-03T21:19:44.887Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/54/7d/16e5a096677b5e313ca80cd5e5170efa3ea44624a82bb111925522da64b1/cffi-2.1.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f81b3b8f3d4e343550fa4baa0e479bba9f2d29ce9c2e9b51d1ce1718d7442fcf", size = 184719, upload-time = "2026-08-03T21:19:46.129Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/56/e6/8941622732edec876dd17d0453dce07317ae96db34f2ec1436c9d3785986/cffi-2.1.1-cp312-cp312-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:811bd1e21d32de12efca32393a0ab3f5133b54fce9bd44b8bd77ab07da14bf6a", size = 214799, upload-time = "2026-08-03T21:19:47.218Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/44/de/f98430906df1545ffde0d543dd124a7a439bc2cd32b36b9c53f805df7333/cffi-2.1.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:68e62fe11f30d5ca8289242866f0a5291402d8529ca2178ab8afc5c9694ae890", size = 222389, upload-time = "2026-08-03T21:19:48.331Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/6a/5b/717f1526b9957b34456313c31645c5b82b8fb5c3fe9e4752999be7128bfc/cffi-2.1.1-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:4a7c934f7360e8cd64fe9efadcbd10c7c6364f531e432b9a4bf5ccbc9e0e8b50", size = 210249, upload-time = "2026-08-03T21:19:49.543Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/64/b3/f8aa4f3e34986c7e4ec45072d1b1b9dd295b6b18007b45518d79726dd725/cffi-2.1.1-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:3143d81e29e1e20a9ce10901ec369012947876596f75a222235965f2b7ae832e", size = 208775, upload-time = "2026-08-03T21:19:50.918Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/b1/db/dceb9dd5b231e1da801793f8acc9f3c52a7e1afe40bb1aae37e02b0faad5/cffi-2.1.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c1453022f490d2459a11819d83ad1d586e9ff65a12ac3e705ffebd46d3685dcf", size = 221822, upload-time = "2026-08-03T21:19:52.054Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/a0/d2/6cd24ae3be000a634109c247d1475d62e5616d0dc78c82770942ec384248/cffi-2.1.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:208f941bb9d18e768138677f0a6d2ce01f590df56043dda1df1535ac57c88517", size = 225232, upload-time = "2026-08-03T21:19:53.109Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/cb/52/3fa190537004dd7f0ab860a6dc7c0175b8667f68d1e618a46f5498d30250/cffi-2.1.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:210019b6c7cf07f081b4c54635c8cf744377001350e29cc0f81c4377b4797735", size = 223597, upload-time = "2026-08-03T21:19:54.515Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/80/fb/0bb75b7039588c074b37ae99f40d9bfddf990ecb2fbc346ebccd2e56b9be/cffi-2.1.1-cp312-cp312-win32.whl", hash = "sha256:046bfc24911b37851ee1b51aab8bffe713d89c68c6a057b09484ce9fd5f69b4e", size = 175292, upload-time = "2026-08-03T21:19:55.566Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/d9/79/615cc094e2fb508cade7de88d3b4f6c4ec2bab695c97bce9153dc65aadf5/cffi-2.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:f53e442b08449d42821fa4a4fba000095af9f62742a500f978a9f557ec44339a", size = 185919, upload-time = "2026-08-03T21:19:56.89Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/70/c6/d0ea84713fe46b243a436a18fcd47d639732747e21635c8a27191b06dc30/cffi-2.1.1-cp312-cp312-win_arm64.whl", hash = "sha256:7bde5e4cc5c10140859842b9d383af292b22639a4dffb725314baf45968cef80", size = 180093, upload-time = "2026-08-03T21:19:58.155Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/d3/67/85c89a59ba36a671e79638f44d466749f08179266a57e4f2ffdf92174072/cffi-2.1.0-cp311-cp311-macosx_10_15_x86_64.whl", hash = "sha256:02cb7ff33ded4f1532476731f89ede53e2e488a8e6205515a82144246ffa7dcc", size = 183845, upload-time = "2026-07-06T21:32:26.32Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/ea/dd/e3b0baa2d3d6a857ac72b7efbf18e32e487c9cdafcc13049ad765495b15e/cffi-2.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f5bce581e6b8c235e566a14768a943b172ada3ed73537bb0c0be1edee312d4e7", size = 184186, upload-time = "2026-07-06T21:32:28.025Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/65/68/9f3ef890cf3c6ab97bd531c5677f67613d302165d16f8142b2811782a614/cffi-2.1.0-cp311-cp311-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:30b65779d598c370374fefabf138d456fd6f3216bfa7bedfab1ba82025b0cd93", size = 211892, upload-time = "2026-07-06T21:32:29.565Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/22/d7/1a74539db16d8bfd839ff1515948948efbb162e574650fd3d846896eea95/cffi-2.1.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:88023dfe18799507b73f1dbb0d14326a17465de1bc9c9c7655c22845e9ddc3a2", size = 218793, upload-time = "2026-07-06T21:32:30.951Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/ec/d1/9a5b7169499e8e8d8e636de70b97ac7c9447104d2ff1a2cd94790cea5162/cffi-2.1.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:0a96b74cda968eebbad56d973efe5098974f0a9fb323865bf99ea1fd24e3e64c", size = 205737, upload-time = "2026-07-06T21:32:32.216Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/ba/b0/e131a9c41f10607926278453d9596163594fe1c4ebc46efe3b5e5b34eb84/cffi-2.1.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:a5781494d4d400a3f47f8f1da94b324f6e6b440a53387774002890a2a2f4b50f", size = 204909, upload-time = "2026-07-06T21:32:33.655Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/fb/d2/4398416cd699b35167947c6e22aca52c47e69ad5695073c9f1f2c52e04aa/cffi-2.1.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:aa7a1b53a2a4452ada2d1b5dade9960b2522f1e61293a811a077439e39029565", size = 217883, upload-time = "2026-07-06T21:32:35.173Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/a2/a5/d4fe77b589e5e82d43ebc809bf2e6474afe8e48e32ea050b9357645b6471/cffi-2.1.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:9d8272c0e483b024e1b9ad029821470ed8ec65631dbd90217469da0e7cd89f1c", size = 221251, upload-time = "2026-07-06T21:32:36.527Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/22/f0/a2fc43084c0433caf7f461bccc013e28f848d04ee1c5ed7fce71423cf4d9/cffi-2.1.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:7762faa47e8ff7eb80bd261d9a7d8eea2d8baa69de5e95b70c1f338bbe712f02", size = 214250, upload-time = "2026-07-06T21:32:37.852Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/04/8c/b925975448cf20634a9fbd5efceb807219db452653648d2897c0989cab2d/cffi-2.1.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:89095c1968b4ba8285840e131bf2891b09ae137fe2146905acae0354fbce1b5e", size = 219441, upload-time = "2026-07-06T21:32:39.146Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/eb/da/5c4918a2d61d86fa927d716cb3d8e4626ef8dc8f605a599d32f33897f59a/cffi-2.1.0-cp311-cp311-win32.whl", hash = "sha256:64c753a0f87a256020004f37a1c8c02c480e725f910f0b2a0f3f07debd1b2479", size = 174496, upload-time = "2026-07-06T21:32:40.467Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/f9/c8/6c2de1d55cf35ef8b92885d5ef280790f0fb9634d87ea1cc315176aecd61/cffi-2.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:4f26194e3d95e06501b942642855aed4f953d55e95d7d01b7c4483db3ecff458", size = 185113, upload-time = "2026-07-06T21:32:41.761Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/9e/4e/e8d7cb5783f1841a3c8fb3a7735838d7484d08ec08c9f984b14cac1ac0e9/cffi-2.1.0-cp311-cp311-win_arm64.whl", hash = "sha256:35aaea0c7ee0e58a5cd8c2fd1a48fdf7ece0d2699b7ecdda08194e9ce5dd9b3d", size = 179927, upload-time = "2026-07-06T21:32:42.961Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/1e/85/990925db5df586ec90beb97529c853497e7f85ba0234830447faf41c3057/cffi-2.1.0-cp312-cp312-macosx_10_15_x86_64.whl", hash = "sha256:df2b82571a1b30f58a87bf4e5a9e78d2b1eff6c6ce8fd3aa3757221f93f0863f", size = 184829, upload-time = "2026-07-06T21:32:44.324Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/4b/92/e7bb136ad6b5352603732cf907ef862ca103f20f2031c1735a46300c20c9/cffi-2.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:78474632761faa0fb96f30b1c928c84ebcf68713cbb80d15bab09dfe61640fde", size = 184728, upload-time = "2026-07-06T21:32:45.683Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/c3/c0/d1ec30ffb370f748f2fb54425972bfef9871e0132e82fb589c46b6676049/cffi-2.1.0-cp312-cp312-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:5972433ad71a9e46516584ef60a0fda12d9dc459938d1539c3ddecf9bdc1368d", size = 214815, upload-time = "2026-07-06T21:32:48.557Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/1b/dc/5620cf930688be01f2d673804291de757a934c90b946dbdc3d84130c2ea4/cffi-2.1.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:b6422532152adf4e59b110cb2808cee7a033800952f5c036b4af047ee43199e7", size = 222429, upload-time = "2026-07-06T21:32:49.848Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/4b/a4/77b53abbf7a1e0beb9637edbef2a94d15f9c822f591e85d439ffd91519a6/cffi-2.1.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:46b1c8db8f6122420f32d02fffb924c2fe9bc772d228c7c711748fff56aabb2b", size = 210315, upload-time = "2026-07-06T21:32:51.221Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/58/0c/f528df19cc94b675087324d4760d9e6d5bfae97d6217aa4fac43de4f5fcc/cffi-2.1.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:d9fafc5aa2e2a39aaf7f8cc0c1f044a9b07fca12e558dca53a3cc5c654ad67a7", size = 208859, upload-time = "2026-07-06T21:32:52.512Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/62/f2/c9522a81c32132799a1972c39f5c5f8b4c8b9f00488a23feaa6c06f07741/cffi-2.1.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:1e9f50d192a3e525b15a75ab5114e442d83d657b7ec29182a991bc9a88fd3a66", size = 221844, upload-time = "2026-07-06T21:32:53.704Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/6e/28/bd53988b9833e8f8ad539d26f4c07a6b3f6bcb1e9e02e7ca038250b3428d/cffi-2.1.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:98fff996e983a36d3aa2eca83af40c5821202e7e6f32d13ae94e3d2286f10cfe", size = 225287, upload-time = "2026-07-06T21:32:54.907Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/79/99/0d0fd37f055224085f42bbb2c022d002e17dde4a97972822327b07d84101/cffi-2.1.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:379de10ce1ba048b1448599d1b37b24caee16309d1ac98d3982fc997f768700b", size = 223681, upload-time = "2026-07-06T21:32:56.329Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/b0/80/c138990aa2a70b1a269f6e06348729836d733d6f970867943f61d367f8cc/cffi-2.1.0-cp312-cp312-win32.whl", hash = "sha256:9b8f0f26ca4e7513c534d351eca551947d053fac438f2a04ac96d882909b0d3a", size = 175269, upload-time = "2026-07-06T21:32:57.777Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/a8/eb/f636456ff21a83fc13c032b58cc5dde061691546ac79efa284b2989b7982/cffi-2.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:c97f080ea627e2863524c5af3836e2270b5f5dfff1f104392b959f8df0c5d384", size = 185881, upload-time = "2026-07-06T21:32:59.253Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/dd/2c/400ea43e721727dca8a65c4521390e9196757caba4a45643acb2b63271b8/cffi-2.1.0-cp312-cp312-win_arm64.whl", hash = "sha256:6d194185eabd279f1c05ebe3504265ddfc5ad2b58d0714f7db9f01da592e9eb6", size = 180088, upload-time = "2026-07-06T21:33:02.278Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -132,41 +132,41 @@ requires-dist = [{ name = "requests" }]
|
||||
|
||||
[[package]]
|
||||
name = "coverage"
|
||||
version = "7.15.4"
|
||||
version = "7.15.3"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/be/c3/4f2195f512fb172aa425a8803a874b2baa9ba7f80ff7b6080998761fc701/coverage-7.15.4.tar.gz", hash = "sha256:0548198fff07ccf4faf469520bce1c2eceb1ce3e62891921138dec10907f9d00", size = 936952, upload-time = "2026-08-06T13:50:24.442Z" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/f4/45/78dbf9604ee5b3db24efbf26bed1cb58862fb40480cba821963c69348751/coverage-7.15.3.tar.gz", hash = "sha256:ae7ea5a4614acf399ef0483c4cb34f8f8f01df848d8fcbe7d3ce0865733f1c4d", size = 935592, upload-time = "2026-08-02T18:50:17.006Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/2a/66/edcec7d7a0b524aa8923e22925fde6fe50ce005a113dca13ae1581455c4c/coverage-7.15.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:bbac5abad70df71019988f83f26ac7092ff2642975def4429e98dc7585ef3490", size = 222367, upload-time = "2026-08-06T13:47:15.578Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/e6/c6/ab8de429e2e8548faf58ec7e1674a4ce00414b4113942d3fe87109cf0f68/coverage-7.15.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:357a173465c7ce028d07a95cc2b63b5bf59f50ecdd5ad75c5cbb78ada984048e", size = 222874, upload-time = "2026-08-06T13:47:16.961Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/be/c4/3b7b49587e8a6b9af79b3eb468d443d6042b6d65b47aa26586846a0d6566/coverage-7.15.4-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:21b803935e2efc3acebe9697197a294fccf5dc4e5382bd6369542ff7a7d2a1d7", size = 253287, upload-time = "2026-08-06T13:47:18.291Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/fb/65/ec03b743a2a229c72cc1eff3e57be9d3564e9c6b4d5aba2d70744a3fc0d8/coverage-7.15.4-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:7a2b580774a4786c1053157c0165e04476e03ff293993d7c148eee784a94bae6", size = 255199, upload-time = "2026-08-06T13:47:19.765Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/41/4b/5163729e4b6582d61975cfd3ccab45b4ec53e21cf156d9941cb025188468/coverage-7.15.4-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a9464451c4efffe8d47ace5a540b10b0dc10e879066290f8600872b7f54a419d", size = 257308, upload-time = "2026-08-06T13:47:21.206Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/86/08/2167a0f08fb87d702fa423a48578a32865464b7c9e1db3911ad7812ab414/coverage-7.15.4-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:de602f34123c2f4af1c1869c6dbbbd60da6d5983bf01937367295d135cccbfce", size = 259268, upload-time = "2026-08-06T13:47:22.503Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/1e/e5/68eebae3053dbd48508edea559c21b23fbdf3460784f91370c83a86a6acd/coverage-7.15.4-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:6879ded16a27f3eeca19b900c147e81616e7054db451471a611b2755ee5249f7", size = 253392, upload-time = "2026-08-06T13:47:23.88Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/1a/46/fd4ced40a2b691c774e515c9b69500bfa64c7960b67fcee4b2f6fad97fc3/coverage-7.15.4-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:986be58c3ab54aae8d3496a6225eea74f760fdbe739b38bd442c7e8d133aa53b", size = 255001, upload-time = "2026-08-06T13:47:25.469Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/53/25/ae2e5fa710bb6957a9aadeb9e3598d3b3e4af6587ce857ad42e8639a3f30/coverage-7.15.4-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:c6103639613fe6c1e989082948419bc77a2d26b6c825c99d7fad25f7d3d87afc", size = 253061, upload-time = "2026-08-06T13:47:26.845Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/d7/31/67ddc0365db2c6e93ac8580bc4bbc50f65273262f973f63ebcdbc15c0495/coverage-7.15.4-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:d3af93dddb5659276c63bc16ac6466ac2033a70ca816097bbc06345b8ccdf571", size = 256831, upload-time = "2026-08-06T13:47:28.217Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/f6/78/82b8fd18f57fb13f12d98fe874995bb2c4f9f17be8aff762c426323fdb96/coverage-7.15.4-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:b10075e5421d04265766a6d1dac809bbeb8a946fbb23c8f82c227409b2190719", size = 252781, upload-time = "2026-08-06T13:47:29.712Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/0a/eb/6c74ef4dd12b252e573c49bdef9e2ac265bf3dbb79b8d7feb3266e084e9e/coverage-7.15.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a67a9f78b2942d87ba8ce3059c642164d2aedd65337377fb52fe9803656bc5c7", size = 253692, upload-time = "2026-08-06T13:47:31.192Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/5a/66/eb9aed1c3fd2d36ee00eb173f434b14fa607fc056739c9a89ff4244010ea/coverage-7.15.4-cp311-cp311-win32.whl", hash = "sha256:69484d1aca26e322e1c3ce03f09341e84524ababad2d7202161738d83cc9f82e", size = 224461, upload-time = "2026-08-06T13:47:32.572Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/e2/6d/81fa4161dfb3ed9d74e40d58647eff83a56b7612e78352581280fce2f477/coverage-7.15.4-cp311-cp311-win_amd64.whl", hash = "sha256:63fd6fcd1dd6e158f7eb78606e72933b3f6d01e7b747f99c6c12d764307a0fdc", size = 224937, upload-time = "2026-08-06T13:47:34.205Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/5b/c1/d8dacf683c6cad3cf85ce68fd3774a6774ec402128822fdfaed920f11e6a/coverage-7.15.4-cp311-cp311-win_arm64.whl", hash = "sha256:ea82116c9893fa89e929b7f197ee5a1950a76e91cc5c85ba503fc02379d04890", size = 224479, upload-time = "2026-08-06T13:47:36.118Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/1d/48/bc8d4ba7b37551a767bd863f15b3f80182b271c2f55975356f5f7dbe94c2/coverage-7.15.4-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d4fedd1f7f428f9fe83b1ead5e7cc87a43427be31aadafbac3ac0636dc7abb22", size = 222543, upload-time = "2026-08-06T13:47:37.562Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/20/dd/88d6f83f1fffc974a3691a34a97951c5b12df7512a6782c5963883cbc058/coverage-7.15.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:37e2f0cdf58e2e1fed4e4d5a8f8786ae2f7eb80b478016876667dc4a01d60a97", size = 222905, upload-time = "2026-08-06T13:47:38.927Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/bd/5c/54ee0d4748585bb0acab9891cd8d92f2d3593165b4e59fc9de113bfb3140/coverage-7.15.4-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:fb55d0e70bb15f2e81477613627286581414693d74ac7963c93a790dd453ca9d", size = 254407, upload-time = "2026-08-06T13:47:40.488Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/8c/3f/f0642a372f494bd0d7dad3b497083b910194a5f1c88be2c94fef707c3b59/coverage-7.15.4-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:899b9da30f3c6c336566e3707495bb23e8302d39d862f01fa78c48b99b9437e2", size = 257145, upload-time = "2026-08-06T13:47:41.931Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/71/17/8b46d0ed68251016002ec972c8fc0119961a765d0984cafb8bf317c43758/coverage-7.15.4-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d15715e8c46552827e5e4f30a35575a2dbcad14454cf3284c54483946bd16931", size = 258257, upload-time = "2026-08-06T13:47:43.527Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/30/b8/8498a0e72d0adbe15477dd07463d2b3bb2c9f6a4815e8589e50939e2c3ae/coverage-7.15.4-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:002a438859f7b430bc99afeaf01a6d187dad1d0dc907b64cdeffc632a5db8fd8", size = 260517, upload-time = "2026-08-06T13:47:45.121Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/41/e1/7dce19c3bdb1e3dd63e769508216500edad81bd5f69a26d724e32aceaf78/coverage-7.15.4-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e4193a04b518f7968f3099755f5509ee7cccc6dc2b92a6b14841934d22e222c9", size = 254785, upload-time = "2026-08-06T13:47:46.541Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/dd/b1/e1494703c675a2561723cd9b89f45c9168782c31280c611b1f767851e57c/coverage-7.15.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e98dcc55d572b38e69d117da7e8e8efb8500f1f5eaf81ecd460a63220790b839", size = 256176, upload-time = "2026-08-06T13:47:48.155Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/73/76/a5629d270fb638a43a4b10466f51e2f49d532c1aa4da2913cbbb150bbe0a/coverage-7.15.4-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:af6c538498ce66c10d3fd541c2a8d5b03da5850355add34e6cba564210cb9e72", size = 254321, upload-time = "2026-08-06T13:47:49.757Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/ff/4f/9c44447218435d5766b911534f9d798144a5560f85e9a54ebe5f3f5d19f9/coverage-7.15.4-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:1d10025d96ea89fc2f73714dbc4cbd433fe012c1ac9e23f895d7728b238b6e52", size = 258390, upload-time = "2026-08-06T13:47:51.248Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/de/36/c1e127616fb3fa18a9ff71e76c417f2fd7424332a4870015ac224ef4c039/coverage-7.15.4-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:d802e1947603162ded419bff83ac7489820355d2b856dfb09206574e3a37ac0c", size = 253894, upload-time = "2026-08-06T13:47:52.816Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/e9/b9/fdb92c8ae7a8bb9b850cc253b7b3b9c8526f68130002048b5671cd510d09/coverage-7.15.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c2de40895718f91951b86712b4c5b694acaf9a0a49be13874896f599a1eed3f4", size = 255763, upload-time = "2026-08-06T13:47:54.296Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/6f/c0/a7d51b2587c7bdb76e71b0896d2565bf7d60436b5122fc83e511adb1f7cd/coverage-7.15.4-cp312-cp312-win32.whl", hash = "sha256:5c3431b2161279b7db5c2a1aa58ae02e5cb8c3c42d93a5094be3f5537bd5b11b", size = 224597, upload-time = "2026-08-06T13:47:56.074Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/49/b9/5c5f80cc55f5acaaca6dee677626bfcec8c87204a7809b438b08e84f4571/coverage-7.15.4-cp312-cp312-win_amd64.whl", hash = "sha256:6befeab5fb2b51c958ca4ac6c5d141a1e8240f4f76e46350f1911963deda49cd", size = 225135, upload-time = "2026-08-06T13:47:57.52Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/47/e4/2a4561f89ff6bf7c925c287d0f2cce8bdf139c3a33735c87e3203401cf94/coverage-7.15.4-cp312-cp312-win_arm64.whl", hash = "sha256:67bc345491ab55b837277d76f5775d057e8c7f1ac44d890d8c2c82adde258c6f", size = 224515, upload-time = "2026-08-06T13:47:58.977Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/b4/d9/e70c286c979378f061d8266e279b686ab0b0b688e1fe0af864684f23a77d/coverage-7.15.4-py3-none-any.whl", hash = "sha256:964730a1e9de9c0cf11be6a1a3c79ce419c34882842abd256086ba4698705e84", size = 214332, upload-time = "2026-08-06T13:50:22.192Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/b3/9c/c8a3a923c24f631695cea2d5e2f02e776bc0af6e03800626e13a6c05a615/coverage-7.15.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5f3f854ab4599d98f7799ac9b91e34e8ec9ebc9a6372ee8c1f3413a68cc8b5e9", size = 222328, upload-time = "2026-08-02T18:47:49.228Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/92/51/dda77f34cbd2513d6ffb898c901d19e9ca55f48c0cbc4a1eb173a97d157a/coverage-7.15.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:75268348fee1f199653b8a846262aec5581c6bb008c4f58824959fb708cc688f", size = 222832, upload-time = "2026-08-02T18:47:51.219Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/78/59/e0faafc4c6e23bd76c76148875ee9ec5781b8f1cd62cea2bc4ca0f0f0e5d/coverage-7.15.3-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:21081739f6264cc594cad2d42b62befbd17633824022866c68720eb0c4b8d6b4", size = 253250, upload-time = "2026-08-02T18:47:52.737Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/14/e2/4b1e0eeb727ffb471e411c1bd3402184b5dd54a77a762b0e55e87cdf9ae3/coverage-7.15.3-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:718d366251b060c10731c7dd359de6caea72250036eb94576aa56dacbf830a11", size = 255160, upload-time = "2026-08-02T18:47:54.404Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/e9/9e/a602d2d48f9db9f795e578a86aa914f7b20008e9330902defcfb73d17b3a/coverage-7.15.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fa1bbaa502a6e877f3ee67cbac3eba2bb637f623e454e6c37b81b38896dbd48f", size = 257269, upload-time = "2026-08-02T18:47:56.157Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/22/fa/bf6db13df2fcee00d2671849fe58c99232ee79a01fec7478c2bf7839b9e1/coverage-7.15.3-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:494880c9e60782610683f4eb9b65cce4f886673596b8f3cb2dfa079fc551c743", size = 259231, upload-time = "2026-08-02T18:47:57.76Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/89/37/8118f13b17fa7d9a3aa2c301d93f2d5ffeef70fa7e27e639a74bdacd3fea/coverage-7.15.3-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3db264ea689f9e8f9fa4fb9005fee4048c3bff4a547f4cfa27f5086cb0804ec0", size = 253357, upload-time = "2026-08-02T18:47:59.261Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/97/6d/c7b94fb03962f4d6f0fe13d01c4eb9c4c6e2e714a20d074516ec7582b110/coverage-7.15.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:4e869d4799674d67778e76ddbe2e26cf1673369262e231a8ec259421b1015fea", size = 254961, upload-time = "2026-08-02T18:48:00.901Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/87/f9/fe0bd415fa56e36b62b649017c8fc98330858be4c7593789efb78cd24178/coverage-7.15.3-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:696fc7a28bbf717aba8d2c6963d26702945c7832cb313ba3b323aa5b1afb3156", size = 253024, upload-time = "2026-08-02T18:48:02.745Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/c1/7c/ffa53506d63ba8a77f5b9557dd6f5a5a5ad85adc680d7857410138f82bd9/coverage-7.15.3-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:3fe9be1c527497d047f770d88a0110189714c36383bb88384508f750c302bffa", size = 256792, upload-time = "2026-08-02T18:48:04.377Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/1f/c6/df42458e72c18a49fe87e40ccd3fb0314210915256cf4a5593e1b3250e04/coverage-7.15.3-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:2400591f4b2e33746c70846388f8bb4c7e33b820e31cb8c6cb2f25305310438b", size = 252744, upload-time = "2026-08-02T18:48:06.154Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/f1/14/8bf18a4b10a44f8ba5f604b00e102f37daf49d581d66a37dc33fa267e1a6/coverage-7.15.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:2e557178799282269412a672e5753f2179edfe1b3f0f19b0c98f8e72d482326a", size = 253652, upload-time = "2026-08-02T18:48:07.955Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/27/e6/e530c9bb94e4155817cbd149034105b062a6913bc356ae08f454d155de53/coverage-7.15.3-cp311-cp311-win32.whl", hash = "sha256:68ea6c947375982ae907e19e9d2ef156bd6e68e11f3566dd568d7f4ec974e715", size = 224428, upload-time = "2026-08-02T18:48:09.845Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/b4/98/0050c692d120988f1973a15196f52dee4ae221848b760281461a2005b613/coverage-7.15.3-cp311-cp311-win_amd64.whl", hash = "sha256:28743dad31622e8c474b17446118037361f5b1f4f2ecdf72d4f6fde246d64446", size = 224906, upload-time = "2026-08-02T18:48:11.611Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/b0/ae/c0ef3e2ba3f35fc1c6985811a40edd9331e5b8978c9ecf84699de3edacbe/coverage-7.15.3-cp311-cp311-win_arm64.whl", hash = "sha256:c4398918c4fda32718191239e451fd86ac5ad1e8979b592f1921ee2d1f038965", size = 224448, upload-time = "2026-08-02T18:48:13.304Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/d1/6c/bac99d9d4c6abe856e93bf3f5212982ac0bfac126dd4a042753bd53bc5af/coverage-7.15.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:79a3e32e83227d83d9684459ed579769b56c369ac2d7313099b2d9e031d2e10f", size = 222499, upload-time = "2026-08-02T18:48:15.018Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/aa/bc/cb9a39b083bc1aa70586482dab25c9be20bab0ec6c155340e50d9066bb1e/coverage-7.15.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:767feb87c5886d781d0a69fafd450a20826ddab7b79bce1665deb64d21441b60", size = 222866, upload-time = "2026-08-02T18:48:16.884Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/58/fb/beaa453d62000a0a5b39838bee2a137afe609a50a71f55e83c73461e513b/coverage-7.15.3-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:50951e37033c40548d777b8a8454a2cd622dba1136780065678dccaec307c47f", size = 254367, upload-time = "2026-08-02T18:48:18.507Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/66/64/43e72500ed6815cef189f9193f29d7af4b078830337c95ea976cd0c0d427/coverage-7.15.3-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:63a4ff67364afb2cac826b8bbd78a5c50ce656a7b7137436b44d7b96a9271088", size = 257103, upload-time = "2026-08-02T18:48:20.172Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/66/3a/2893e2937adfe02f45fd38e4a8a0a0d8b7a02ff9e012ac3d009bee3c4f16/coverage-7.15.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6e95e42856509675fe26560310313a6117640e96f9a1e19bb3d220116a27c94c", size = 258220, upload-time = "2026-08-02T18:48:21.963Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/30/b4/d5e6e2eb1a62961083734291304b1f85df72e2abe95c76eb88a7f472afd0/coverage-7.15.3-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:abad631cba27094b4631993f4c72e89ac0ca1b3a0236c7abaf8ca79aea619851", size = 260481, upload-time = "2026-08-02T18:48:23.682Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/dc/c9/9b72c5c6a9798a9a12cf65f66e077cc1fdd396e61915c862688f9afe1cae/coverage-7.15.3-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:2b0807f1f051dd82a234ad6acdb6f1425baede60be1e84e862496c8cc9262ab9", size = 254749, upload-time = "2026-08-02T18:48:25.32Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/92/20/e1c2f759e2dbce559ba85c40c0e4acfecc6cff4b740c294c88e41ccc6111/coverage-7.15.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d8d6df7aeb5bc464040bbc9ae173d875785d3677ebc4307817997d622d74225e", size = 256138, upload-time = "2026-08-02T18:48:27.064Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/a5/ab/48cc7e760f769e86ae290a125ea6e7209dfbdbbbb7ff4f5d9d1ee7a45d57/coverage-7.15.3-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:974471c506c9f5758808b47c1ebf7949ecd0848f5c1020e78675fefe5ff46866", size = 254283, upload-time = "2026-08-02T18:48:29.082Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/15/26/39529a68154f99b3a1829debd8b25eac384effeec890a293b5bbdcb49186/coverage-7.15.3-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:5cba0c9c13e35c86df7998f1afaf6b1da224a3a39e4da59bdabf60c148046dcb", size = 258352, upload-time = "2026-08-02T18:48:30.892Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/91/2f/55b82aa3d8d7dd8023a56e7c5c2a70e39a3c44b3353c6cf3faec9ad51566/coverage-7.15.3-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:4d608dc36a364dce33acbf4fc3a50f9d2054c945f233bb0a2cdb4b90bfa17646", size = 253852, upload-time = "2026-08-02T18:48:32.934Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/6a/6d/839f4045124cd3518ecf2c58967e58a911202834e7c5a03cfdf2ab0b29f6/coverage-7.15.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2395869280554a1941da904423c12660c39f721315e1c02d076a7fe0971382f0", size = 255725, upload-time = "2026-08-02T18:48:34.848Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/75/21/d25e3e2a9e327798078c877f469dfb6def860bf6e25036529046227d3e15/coverage-7.15.3-cp312-cp312-win32.whl", hash = "sha256:24f3b21840c3eb76cef3cc70b2bf6649010c64471a84a446538a39306e1ba04d", size = 224566, upload-time = "2026-08-02T18:48:36.661Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/b1/0f/df90cc1e8d095ce263968a93e04829821b2afb31ac2752c06a2e0a8e3c13/coverage-7.15.3-cp312-cp312-win_amd64.whl", hash = "sha256:fa7b17902c3c1dd8a7adb52679b7f6340bba08443d710c8838e04db8cf62be2a", size = 225098, upload-time = "2026-08-02T18:48:38.941Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/65/c7/ec49e43c58967a07163e2d1c6bbd58112b825b2772ab66784afd6a5400ba/coverage-7.15.3-cp312-cp312-win_arm64.whl", hash = "sha256:fcbe83fb7258eacd293bf5322d88807acb35ed12a5cfa99dd8215c083e3b0235", size = 224485, upload-time = "2026-08-02T18:48:40.682Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/37/e7/7069b3d6c018917f49ba2e1c5fb910e498c7fefa3a1b78cb1b79e61ff45d/coverage-7.15.3-py3-none-any.whl", hash = "sha256:da78fa6fc7dafe4212839173133ee85afcf42c5cd5f3e47fa7c1c210453b445e", size = 214297, upload-time = "2026-08-02T18:50:14.709Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -361,24 +361,24 @@ wheels = [
|
||||
|
||||
[[package]]
|
||||
name = "numpy"
|
||||
version = "2.5.2"
|
||||
version = "2.5.1"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
resolution-markers = [
|
||||
"python_full_version >= '3.12'",
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/9a/80/db0b4559e57ec36362bedbb05530a87fafbcb6067708c946967a41d449e7/numpy-2.5.2.tar.gz", hash = "sha256:d482d171c406ae88c5b19cad3b6a1c4c5209f886ab74bc44c2c865c23f52d860", size = 20773161, upload-time = "2026-08-09T13:48:27.962Z" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/22/fd/89965aa4ac08c74998539fcbf24fa3540f3e15237fbeb6bcf9c908f4aade/numpy-2.5.1.tar.gz", hash = "sha256:a48a113e6afea91f5608793bafa7ef2ad481fefbda87ec5069f483de61cb9fa3", size = 20755553, upload-time = "2026-07-04T17:08:00.933Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/69/72/dccb0aaf40972777283303919f613964227266d0c13adebb79ac124f1c3e/numpy-2.5.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:14e373cfc6387177e8409dac3c7159be8eb05cd77096cd7c950268b86f62831c", size = 16891693, upload-time = "2026-08-09T13:44:51.702Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/60/2e/b5aee50a1f74ac815cf8331812cb8251e29024025de462e0c047641c614c/numpy-2.5.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4bbd96c833ecc8cc069ce518078fc8c60cb9cbfb0fea5b7a803ad65035596d03", size = 11903109, upload-time = "2026-08-09T13:44:55.501Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/f3/f4/29e78102a80601cf034d4e9767022cffeca2c3b4c926e1754572ca95593d/numpy-2.5.2-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:6e8172ddfcf5cf74b811d372b570b83c60bd2de87a6fbfbebdadb4a9bd9c6cbb", size = 5350202, upload-time = "2026-08-09T13:44:58.401Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/11/4b/dcd3b7eadaf4035d2c7a4289d232523a6964f602598ef7674e4bd7291f93/numpy-2.5.2-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:65f188481f1669e26f62b701e8205d19e460fa4a9b52a1414ba382330e4a3414", size = 6687736, upload-time = "2026-08-09T13:45:00.813Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/e5/21/4947e0e9d6c9fc2e2ff15b8949049ee44f63adb9cacc729ab8793f97e712/numpy-2.5.2-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8ee9c4eeb8454b3660a8b53493563c3e121c2fc94fbd72b848ef814ed7b676a9", size = 15612696, upload-time = "2026-08-09T13:45:04.151Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/3a/5f/62d28cf019460c7f1394105b4d49d9911a9c444cb77ab0bd95a204c5a6de/numpy-2.5.2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3cdec01fa790a186d430433fdd4d4ffb70eed6f0eeb4bf05c8dbe2dce0a9bcb8", size = 16722264, upload-time = "2026-08-09T13:45:07.714Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/14/25/3f0be4c1b9fdf5dd5e708a6806978564d7c46a055c000496309ff2a2f8af/numpy-2.5.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:7999d4ddb0c4025018373fd787510d46e04c769467af22869707b3c1cfd459ab", size = 16974396, upload-time = "2026-08-09T13:45:11.316Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/22/72/6262cbdeeb45da9d971e40715f579d791603ba8ec0b5e2db1ac55454421d/numpy-2.5.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c1f017dc0875c9209d219f97feceb7d54c2661bb243deb4114478e1295808af7", size = 18476044, upload-time = "2026-08-09T13:45:14.869Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/36/33/29208b8b075bde62d26a81d14b358c42b0f69b6cabd98d4ff97f37f22b05/numpy-2.5.2-cp312-cp312-win32.whl", hash = "sha256:d6a48072864e3324e194a8fbb3c657bcc5b5c869dbc64c9537b1d5c862572c0a", size = 6072817, upload-time = "2026-08-09T13:45:17.867Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/7f/b9/87fea2769fe1c47c1b5b01d8310772c9d1a85d485de7cf386ef7a3332b02/numpy-2.5.2-cp312-cp312-win_amd64.whl", hash = "sha256:28ac63476ec7651484215ee7fa15a1f78b57c14621f01e392afe17b9a1390ce4", size = 12464674, upload-time = "2026-08-09T13:45:20.734Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/14/52/032b97e00461ab0809bbe4c588b035620e5a14b8cdee47ecddefc7b17d33/numpy-2.5.2-cp312-cp312-win_arm64.whl", hash = "sha256:27650bb0e7140fa3d37b9923b4803645e0b125d190f326eecfd3f4dad8e8ade1", size = 10397131, upload-time = "2026-08-09T13:45:23.73Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/62/7b/14687aa674250e5e546f616f486b0d56d3631cd5b2415739141ce40bdcea/numpy-2.5.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:2c889b56fe48b1018f764b0eec8df59ab654e9148aa91faa12596043500de277", size = 16801574, upload-time = "2026-07-04T17:06:12.423Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/e1/19/cc5bb2a3f2913d27d6dbb2c78d25921fabaedc6741d4a5a615a11f3c5bf3/numpy-2.5.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ab451b59c5643c570974c43aef780703ef1d3b4965d2be07afd530615a9358d1", size = 11772250, upload-time = "2026-07-04T17:06:15.726Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/42/77/fdf34a71dd30f54979b18603bee915e0aaf825b07afe79acd60b04b691e2/numpy-2.5.1-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:78798bd5b9ad744056af8efa90e3b9ddaa53272a0848a483084a1cc0a13b2dc0", size = 5331516, upload-time = "2026-07-04T17:06:17.913Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/ce/e2/eb7efa015b4cce41e2517bf182a7fce0d7d5b9d9ed76a29bfa0f4fe4505c/numpy-2.5.1-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:2ae0ca40bcb22d6ba59c1dfd5446f49940b0f2d821fde133f10dda11f816b84e", size = 6664863, upload-time = "2026-07-04T17:06:20.02Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/a9/4b/a2b32dd94ee9ffbeecb28152240042a3949db33b1c834d44090b80e1b3b8/numpy-2.5.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:61ac47e772e6b8ea489e1d2f441a34c5c3ac17327e7ce294cbdf535795ad4e75", size = 15167977, upload-time = "2026-07-04T17:06:21.621Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/b8/a9/6e73d68500f80773f65f0654ea932019d6694329a0eb0ed0533de38df376/numpy-2.5.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:59fda5e192b570217ec2580c96f00e9a7e12ef6866a900eb089b62c1a32545ca", size = 16672469, upload-time = "2026-07-04T17:06:24.064Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/24/7d/ad3e59015135f5261c95fd4cafeff159c955febd83a99a1d9250c4233815/numpy-2.5.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:f7119ebff1a9829e9f431a4f9d28e703023bb6b9fe7c8f724467dbfc27c94ab3", size = 16527531, upload-time = "2026-07-04T17:06:26.69Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/83/d0/a39b2fbcde9cb17a1dac678f254b33a6336298af9df338824c685425d5e8/numpy-2.5.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e824c2acf8862052246be5a44c15da1777940c60d010dd2aab897824d9c430f9", size = 18431940, upload-time = "2026-07-04T17:06:29.521Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/04/12/cff070947791c1ed425ff76413189adbdc2fbe215eba7ce7fa454a03c7f8/numpy-2.5.1-cp312-cp312-win32.whl", hash = "sha256:08d60c810432eb83360958dea0999ac4cfb94531ea8efcbf0b7f277c2068aeb2", size = 6066764, upload-time = "2026-07-04T17:06:32.571Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/65/66/53f31807a48a750f9d748da273bc3fcedd12b27ff1f3e373bfec55ef2dc0/numpy-2.5.1-cp312-cp312-win_amd64.whl", hash = "sha256:f7d60026c0bdb1380e83bfa7a0419c4577ee4b9a08880afcb6dadeb74c649fa2", size = 12430966, upload-time = "2026-07-04T17:06:34.926Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/2b/2a/d1a88066b1c14186f5d3c0d18c94f17b064511982bab0578d49ee9d43c29/numpy-2.5.1-cp312-cp312-win_arm64.whl", hash = "sha256:17a25e09640602e10bc8de0e6fa2b3fd68eedd84ba6d7842dc8f32f9ab87bd0b", size = 10350488, upload-time = "2026-07-04T17:06:37.785Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -387,7 +387,7 @@ version = "0.3.1"
|
||||
source = { editable = "." }
|
||||
dependencies = [
|
||||
{ name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.12'" },
|
||||
{ name = "numpy", version = "2.5.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" },
|
||||
{ name = "numpy", version = "2.5.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" },
|
||||
{ name = "pycapnp" },
|
||||
{ name = "pycryptodome" },
|
||||
{ name = "tqdm" },
|
||||
@@ -537,27 +537,27 @@ wheels = [
|
||||
|
||||
[[package]]
|
||||
name = "ruff"
|
||||
version = "0.16.2"
|
||||
version = "0.16.1"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/73/e1/4508a569211b35599016e84ba65c1a992b7a4004b4b6c4bea02a851cba1b/ruff-0.16.2.tar.gz", hash = "sha256:c3d7828d12e8927a6fc65fe38e2c2541b9e762d360a1786d752cb1b8883b3c9c", size = 4885811, upload-time = "2026-08-07T13:31:01.432Z" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/70/25/7113f6d5498888c5fb7db34081cba7d5971c4cb1bfb26819966eee68f003/ruff-0.16.1.tar.gz", hash = "sha256:fedad7c801dabd3fb9741d76aca39246e6ddd9ca446a015875207bf19f1e6bc7", size = 4877500, upload-time = "2026-07-30T19:37:01.379Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/14/57/db19951540f98859c956b50bdb4d31089b4d91e9f15e2968e7d5193806d5/ruff-0.16.2-py3-none-linux_armv6l.whl", hash = "sha256:3c8de4cf2181f01d57946d87d777aa52916976fc09942aed89938fab5e013318", size = 10847925, upload-time = "2026-08-07T13:30:14.468Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/13/5a/995fe85a8470d3e391ac0f7fa8054bb454eaf33ee138196d6172ed1079c0/ruff-0.16.2-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:9a48cc05c6fbc811ca81b5d7ba95375affea6582d1b8024e455e41afbbf55344", size = 11072662, upload-time = "2026-08-07T13:30:18.143Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/32/53/370d767c61c71a971a4ace36703a7ecd8c393956349a7325d7fab2b56827/ruff-0.16.2-py3-none-macosx_11_0_arm64.whl", hash = "sha256:a2c0d14fcbb26c91f0f867a6dc9bd71bbc30b1b6151829c884f23faeab2e5700", size = 10566771, upload-time = "2026-08-07T13:30:20.899Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/85/d6/9d96948caf5a632be62d62202d5ec914d6856f204fd79eb036e5915e79ea/ruff-0.16.2-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:335c621622c4650330be50842561c6586ac6971bb8ab5407fe34dcc9efb16bbe", size = 10975825, upload-time = "2026-08-07T13:30:23.517Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/3b/92/ea87129b3414acb0b5770563779c51804d37ac67675c7ba35447ddb14773/ruff-0.16.2-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:20e66910f2c37cc753f9ef6580c914a621b80c4fa3549d3e3521e29d0f5bfc3f", size = 10649437, upload-time = "2026-08-07T13:30:26.097Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/ac/43/f8f291dcd4af5bb7872b74fdfa41a7cd7c856ca1d4069670971cf1b9f5cb/ruff-0.16.2-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c7e36fbfba65510548156902bcf1350a979a958ce0347ce0f90d73894036b39f", size = 11446761, upload-time = "2026-08-07T13:30:28.752Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/71/4a/ef991fb2fcf516ab71f0808adcdd8da5e18c8cde447f4ceaf5f47a5132a5/ruff-0.16.2-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f0eab35f80df8f134aae5d1630e751901321d317cc8e50dc39e36fa3ed34cd12", size = 12336364, upload-time = "2026-08-07T13:30:31.468Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/f3/24/f615e74f307e6ca0e56a482872477b856c70d530aa356abfb6dfe5ca8a80/ruff-0.16.2-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:40ea8c0594feb894e89c8c61ab9c103d38b0ea72dfde6c594107147ca31b1140", size = 11630720, upload-time = "2026-08-07T13:30:34.426Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/c5/d3/8ef50149e8412a77f7ab409efdef0e2b23803707a3863da4fc64cb23d459/ruff-0.16.2-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ab3d62dde0b19facdd632008cc4827fc28ada7736c6bd35ab6f1050f0bfed53f", size = 11466130, upload-time = "2026-08-07T13:30:36.958Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/dd/a7/a19334985c4dea8c381981fa252cd854c7ee52dc4b1686dc16f4a911c702/ruff-0.16.2-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:e43e1f5b8388da9eca1b9e88328d47a5cec794633ccf6f7484ac2dd15eee92c0", size = 11523634, upload-time = "2026-08-07T13:30:39.822Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/6e/6c/96d192b0e742412ceda08c0a50f9669b253dde9fd6a60ea1a10c9fa79a63/ruff-0.16.2-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:c24788a980581e1d7ea3a0cbe4344c4fbeb0a6a9b1f4713aa46bb104f8294690", size = 10949807, upload-time = "2026-08-07T13:30:42.745Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/fa/51/e26599ceca11e79ee255c7df515995561edf87e9ca1893284e44d98f5a86/ruff-0.16.2-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:81806b08329130005dd4a8a8394a0c9da8c6f4cafb16ba438d2a2ee6a18bedf1", size = 10646891, upload-time = "2026-08-07T13:30:45.522Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/68/01/800c4b1f97bc8d7c6029e06b1f20473a3cf1e13c4933d8f3342add83fc55/ruff-0.16.2-py3-none-musllinux_1_2_i686.whl", hash = "sha256:4ce4e02bad779bef557f541a1b31f20d6abeae1cc05ed1b1ac019d4ffd1044c8", size = 11162063, upload-time = "2026-08-07T13:30:48.131Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/e4/d0/1477ea50fc5a0d4b0b71d1d63d50770bdd794d90b43e37a7618e63ec9894/ruff-0.16.2-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:e0422abdf70070255fc4073ce9dfc814cc03db577013761ddd09bc1e4a9a4fbd", size = 11556038, upload-time = "2026-08-07T13:30:50.686Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/b8/76/a7776f32048d991e16d4fa8ff91790b877342d3596cc3ed04acdbf1aaedc/ruff-0.16.2-py3-none-win32.whl", hash = "sha256:bf3a63d78fb39f4bf5ac8ae52051c5520505301abe19ba4e204c453b3f09bb0b", size = 10872850, upload-time = "2026-08-07T13:30:53.471Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/00/0d/929c800d920e61397d82a01b60bffc68da3052c17d31de59efaad2e4ed75/ruff-0.16.2-py3-none-win_amd64.whl", hash = "sha256:bcabe2f6d0fc7819f1431793005af4e4de7371927d037345bf941252b195b9fa", size = 12023338, upload-time = "2026-08-07T13:30:56.193Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/5b/6c/93e26c22c5f78ff87363e07da49c84955affbeb1098bd1936bf3b3f293bf/ruff-0.16.2-py3-none-win_arm64.whl", hash = "sha256:d614e95cedf38a2053fd351c55b103ba30d017d61688fdbfd40ee0412852a99f", size = 11374065, upload-time = "2026-08-07T13:30:58.775Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/1b/bd/694da69368e0973de65df2ddc73ab18d43c469d5963d9b150911de6bc513/ruff-0.16.1-py3-none-linux_armv6l.whl", hash = "sha256:58edb313b88f0c5460a26adf5f39a37a3be789494a15e3e411e35fa78b89f9a0", size = 10839126, upload-time = "2026-07-30T19:36:13.697Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/3f/f0/b626e5d5bd0dd9576263658ef12885e2288afd1029a48e26ffed65ec1ac1/ruff-0.16.1-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:fde5a99e2f97479af66edd6622c6d5a2a7592c77cf4153d9e4428f5eeb55b60c", size = 11070253, upload-time = "2026-07-30T19:36:17.14Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/83/63/f40acfb6b35b88623e71684942b552c3edd96035f5d98f313815f7b277de/ruff-0.16.1-py3-none-macosx_11_0_arm64.whl", hash = "sha256:e0d4c20532fca4f7fa609369161d968dd28f65d83dabbd61d8e9c7edbf7001f6", size = 10561425, upload-time = "2026-07-30T19:36:20.04Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/aa/dd/14ec0e9c2b4d315547dd38765004b4863e354e1b52cb308272215d9f6f6d/ruff-0.16.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:30affbcedf59ad5703d9c91f82266e02b47739f797e1a7b6e158e5526a6dae38", size = 10948879, upload-time = "2026-07-30T19:36:22.476Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/33/e9/9d870cbae575030fdef595f04b4b97573c525b5497cce4f4498cf2f85446/ruff-0.16.1-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:24e9c631573cbca9d20f1283f8f479b2afa4a8503504822bd71a293889f16743", size = 10643691, upload-time = "2026-07-30T19:36:24.914Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/c4/09/12743d544e2173f53ecd27217c65f90d2bc0f8424a66a60339e56bbc0457/ruff-0.16.1-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b41bdd48fb420987a9b5212e4957c26ad4abce401fa9ea9d4d85843727945f4f", size = 11435354, upload-time = "2026-07-30T19:36:28.447Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/7f/89/a1652b2daee52083c9554a6333b678a8b01d0400f976827bb87857f9449a/ruff-0.16.1-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b0d1e1393b7648079e13669de1c1f4fde06d4583e84d8fd5c1551e0a77a2aa75", size = 12259033, upload-time = "2026-07-30T19:36:31.326Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/16/96/ecdcb8c54ee7b123b487f807eb014e6e019155a0b81dfb669acd52f28ce3/ruff-0.16.1-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:07bf434b1c95f4e093be4532068ef4fcf00924eb2ade8796075980902d6fd54a", size = 11667981, upload-time = "2026-07-30T19:36:34.394Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/cd/90/c52e12e0d862e9572f2a33aa227409143520abe53111e9a6babbac7b4af8/ruff-0.16.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:39897739f112253ee4fdd2e8aa9a4f9ded99fb2be367d5f31dfa4ded6025584c", size = 11468183, upload-time = "2026-07-30T19:36:37.339Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/2c/6b/4ffb7ad1d83eb16cf8cbb3c8815d3f11c88460fd162d4b372a2059be1c2a/ruff-0.16.1-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:82ae3c0c0d74daf17b968a10b7b3bb3ef297ab7de0c1f749646b25e690ccb150", size = 11470071, upload-time = "2026-07-30T19:36:39.91Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/9c/72/32ae7db4c0b5e32ab611787caa19d1546800676d79f7483b7100a3561bf4/ruff-0.16.1-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:4d5f2ed10f8242d83fc08d521301089364e3375375705356f20c0e31606ef3ef", size = 10919503, upload-time = "2026-07-30T19:36:42.65Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/f7/ca/3d901ba6ad6fc38da39c3448fc6c59ac945679293a17c3ceb6d6c1cba13e/ruff-0.16.1-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:a4665b309891f83f3e3c25447935f1213e9abbd4b5640af7a1f2def9f8d413c1", size = 10649861, upload-time = "2026-07-30T19:36:45.18Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/92/79/894ef1ced26552d5f8c9cf6d85b0687840e1128c55aeab7b9c2d54a0d880/ruff-0.16.1-py3-none-musllinux_1_2_i686.whl", hash = "sha256:26e9ca5c9bc3971f20d3cf18a957f52ffd6a5f6564ff15c4912a144dcac22494", size = 11148137, upload-time = "2026-07-30T19:36:47.936Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/2d/69/3609a09fa1cb46cc28b762363e440a354204e5dff01bd0c8d7437874d6b9/ruff-0.16.1-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:67e1e1e3fa4f0c82f0e36d4cd61e661f6e7a6196cb1aa92fe0828fa7b8f257cd", size = 11559211, upload-time = "2026-07-30T19:36:50.448Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/fc/8a/fb22af2fd78a736e241fabf67e30ce1799a64244026377a49e133af90762/ruff-0.16.1-py3-none-win32.whl", hash = "sha256:d31765e131295b8445caf301e3e8a85b34d1b9b211b4109b7ba457888b051806", size = 10838258, upload-time = "2026-07-30T19:36:53.298Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/d4/35/e57fd9fb5d423961df087a00b12d42c0a830288dc2f3b45ecca299158b4f/ruff-0.16.1-py3-none-win_amd64.whl", hash = "sha256:09b05e8b90c2cb06ad63464350e7a45e8e44a2dfe52072ebfba6666ca8d3f596", size = 11961111, upload-time = "2026-07-30T19:36:56.107Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/cb/46/240ea004bf6dc4feb40e9832f2205a476a47dd5b8a3f8211a5fc5f95e20e/ruff-0.16.1-py3-none-win_arm64.whl", hash = "sha256:dbaadaac38c70239f056d306b7476f246b0bf000fa6b3876402acbf5b227eaf8", size = 11309414, upload-time = "2026-07-30T19:36:58.79Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -614,39 +614,39 @@ wheels = [
|
||||
|
||||
[[package]]
|
||||
name = "ty"
|
||||
version = "0.0.69"
|
||||
version = "0.0.65"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/8e/5b/7a618632dfe9373b7df572ecd7a08c8f799d772fbc317da82dd3aa363207/ty-0.0.69.tar.gz", hash = "sha256:b65106e9ff24fa76e25e1142fb09c85244e815c40450e3021d2bf652c231bb43", size = 6565094, upload-time = "2026-08-06T10:04:25.667Z" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/d6/54/cf561927e8e9ab5c1892a833b664aa9cd6f051a75f6280c66d8047246bda/ty-0.0.65.tar.gz", hash = "sha256:b7134bffcc00b715fa8291e84d845782ced810a998dc1f7f11d71c85c4046325", size = 6460098, upload-time = "2026-07-29T18:31:03.27Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/06/60/6534092f4d2c15e2491807edd609c2e50d527c1fed957acf40b9f110b64a/ty-0.0.69-py3-none-linux_armv6l.whl", hash = "sha256:98bfd383b273540829af673e7f98b9c1c4bcc8547d12a1a3806cd0bec7f0e087", size = 12364185, upload-time = "2026-08-06T10:03:47.137Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/34/2b/5c29689bd4f74c2e3394d983d85e4011b629f2ce3730c9442553b8554bf8/ty-0.0.69-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:964621ddd05771660017c51b4e74078d861d9fc863c21ef2a500db1ab62c9ccf", size = 12042510, upload-time = "2026-08-06T10:03:49.481Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/09/46/fa085bde4d23516d7ef14b24736fc5dd7dc498f60f52b3d077e59ffdea20/ty-0.0.69-py3-none-macosx_11_0_arm64.whl", hash = "sha256:3ffea4048dd0da4c9c97393b4be0901098a9065b06fa81be2477cbde65d8a151", size = 11549397, upload-time = "2026-08-06T10:03:51.747Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/25/cc/97b9efb2061dcab6fef1e94a4ad99df0bb45bd2cc15d4f5794c787ee0552/ty-0.0.69-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a8684d4a70aadd1eab0f41bdba835e3288ef49db8402a8e6ca81bab52ed5d610", size = 12115567, upload-time = "2026-08-06T10:03:53.79Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/e0/c1/a5e0404965093835f3e62544e661784ec0aa8ef0b006ed50af50b19c107e/ty-0.0.69-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:afaaba240ab4122e2069a796836d10be81b4ddb053ae268b3dff962a0b4ca5c7", size = 12149770, upload-time = "2026-08-06T10:03:55.993Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/e2/39/8cad6b205a4abe8a044ca0c84aea71e8ccda29b07a75a5f090e310605580/ty-0.0.69-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:11ea63ef07d4e33aeb1a775cf5f2c736b3ed22fa6f8b1b608591612c36795044", size = 12941278, upload-time = "2026-08-06T10:03:58.324Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/d6/8b/8766d96b732c2a060d70dc8ccafcc4d6a54109a2a95f1deb0705de88892b/ty-0.0.69-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cb3730b1268e92a2907d7aea3afe8dd1b360ae65862f0557080cf479d481b424", size = 13426509, upload-time = "2026-08-06T10:04:00.621Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/02/1f/e991b2cde953ea5b94d6a9a4c45c87937bd916bc09235f764407bf471c0a/ty-0.0.69-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a544ff57a752ef186ed40b5a2f44c17402af4cdefeb74a311ca02ebd57c4fca0", size = 13106582, upload-time = "2026-08-06T10:04:02.818Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/ea/bb/73538f1b99e3558fd9db87b98698426f0f60fc8666da0b1efd0e70e275eb/ty-0.0.69-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87ed2cbca20caddfdf8e3e14d213ce91b67e75feed78900f4aaf3ef884954028", size = 12708931, upload-time = "2026-08-06T10:04:05.233Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/87/cd/484a5208d74c4ad1155933906295ccdce9aa81a257d8df2ab9e41bd60133/ty-0.0.69-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:2684efcbce5b6fe45045faf610b377b50781b6d2aa7e61ea23ecf5b3d2bce421", size = 12985322, upload-time = "2026-08-06T10:04:07.587Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/6e/81/b75003f0d4da9ab3bc8fd4f4802f836cb9921ff7e70f460604f7b769a0b5/ty-0.0.69-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:da9aeb26fdac1d2214937542b59e0d4d1ba94ec7a3f45444f33c846de1eb1d63", size = 12063910, upload-time = "2026-08-06T10:04:09.835Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/8a/76/088469f547ef63dceefc4a75826aedee5014f9371dc5171cde931896a82c/ty-0.0.69-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:00e7677cd14ede381f705f71104ea7b8ea0ce217a8634e19a89781953de0e9ad", size = 12166823, upload-time = "2026-08-06T10:04:12.114Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/0a/c9/ce88a0bec0d46d8ae180b99c6ec014866fecc4cba1727b5feec8877b2765/ty-0.0.69-py3-none-musllinux_1_2_i686.whl", hash = "sha256:d91965eb799649833d0d6042db09cd03d15289125245337cc46a2606effb7bda", size = 12483136, upload-time = "2026-08-06T10:04:14.33Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/63/9e/6fae0ff225a0012642cf72c077e20f8f448c0a80771bc3360e8178fe2f32/ty-0.0.69-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:1f03359cd8e5c412aa0c181118fa9b9061a4dddaedbb61bac0a424fb0814d402", size = 12799025, upload-time = "2026-08-06T10:04:16.445Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/e4/43/78a658d18b2a4ccf35b053392f2213bf12e3c63b2abea512d3b6751d1f4c/ty-0.0.69-py3-none-win32.whl", hash = "sha256:ec460e01586b1eb91894c4a8403bee3e045a47e7a4ada943cc27ce8e348e88cf", size = 11787774, upload-time = "2026-08-06T10:04:18.622Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/3a/5e/88db1f674403f2b81316a853a44a81ed220621fa96f8f7ae586fb6ca7513/ty-0.0.69-py3-none-win_amd64.whl", hash = "sha256:18976ca26a4e28fc3249477f79a695d5502e670803f2e080d89ac905baef3c6e", size = 12864038, upload-time = "2026-08-06T10:04:20.748Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/4d/7b/6fc6efd00c69103d70f2bdbe824343089cd70b17b3079170057d3e5a3ac0/ty-0.0.69-py3-none-win_arm64.whl", hash = "sha256:7d4ca3bb74d91cb9947ba3f3b4cb131ad6a2b3ecc76d34040c4ec6092d2e411d", size = 12196693, upload-time = "2026-08-06T10:04:22.902Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/7b/4e/71e2d325d2b53a1afad81624ad076b2ede413213fc4a18cb05b78c568571/ty-0.0.65-py3-none-linux_armv6l.whl", hash = "sha256:dc556c9f05408bef4c4ef02b2cc382e4e5f797b4b20d64410289848f0d76705f", size = 12298466, upload-time = "2026-07-29T18:30:12.744Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/57/77/fec8f29647c55794efa430a7f365e44f5ce7ffb6459d9445a87fac569bec/ty-0.0.65-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:29d2e0d34cc0a28a17ef0cf81135c5ebabc3562131f9079138ba5e7bae0f56bd", size = 11942421, upload-time = "2026-07-29T18:30:16.076Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/13/09/7f3766aef9dc627e2698cf4e3e59cf53389dcae3812040d33c1aa931230f/ty-0.0.65-py3-none-macosx_11_0_arm64.whl", hash = "sha256:685f49a9312bbf69d5b65bbb66384fed1f927403ea030c217b9289092d7e46c4", size = 11451922, upload-time = "2026-07-29T18:30:19.155Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/cb/7b/1a77cd50e0befb50f55b8bf9bd3ed3eddf184bf28c61b56727039e0774fc/ty-0.0.65-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f564b5ebe78e2f3a8e7b8eacb1292eb88b7c0f3c8630671cfca31abc0709cd9", size = 11994999, upload-time = "2026-07-29T18:30:22.315Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/63/7b/feda16f3a4a0a99be27431e0c9598eeeec0db1eb2fec9a15976698209418/ty-0.0.65-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c983e156fe9e113fb56389e13d327b6b8549fe866de9b269684723a88e9b732d", size = 12090662, upload-time = "2026-07-29T18:30:24.93Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/ed/3e/3f69bf9c9307dbdc0771719f65ce5b556e7bdeeaccbdd599d4f57866d801/ty-0.0.65-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e3663b7396e8b1a9954e20e732de7ccb0192bf4118473069b4945920d6923921", size = 12822094, upload-time = "2026-07-29T18:30:28.012Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/90/38/8fa791b3bb503ee2b46ad81690cd1bdd54519582df6d805cee57fe143e85/ty-0.0.65-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:306ed01f29d6e108e98feb233dbbf5878a027603b71bd3743b343977933a9f16", size = 13357833, upload-time = "2026-07-29T18:30:31.122Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/c1/73/4dda396a201e1dd0ed3594a9b48e559cb41c4bc048c6cd4c4d1b39eb4313/ty-0.0.65-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28bcfc8898c94f079a9100e684bcf312b6a64ad3a7d4ebb35a4591546030a2cd", size = 12977303, upload-time = "2026-07-29T18:30:33.944Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/a5/26/c250c2c569adc53a8591716641388397bcb2a442e4a30b952ae81b50c0e0/ty-0.0.65-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5a75bd0c245c38802a8f488378e74f92feb7dd33db7d63fbdd6fdf82791ba730", size = 12579338, upload-time = "2026-07-29T18:30:37.199Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/d3/94/4a5647d44753ca218fc930d7e4d9bf468d0ed4a0ad4b3d57588bc1bbacf7/ty-0.0.65-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:9e5e1bdea9662d2b5312b4e99f319f4e6e2ea427511b5fbc546141b79ec53f76", size = 12957731, upload-time = "2026-07-29T18:30:39.937Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/36/b6/1e22fa11a1e0dfb20b1c7f3cbfd8170273aada2a82f9ecd3055275370c44/ty-0.0.65-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:03a88493d4842889f65280ae241e06b399d57eb3c63571054cad21a4c33b3b69", size = 11938625, upload-time = "2026-07-29T18:30:42.603Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/5c/0a/fe5f22ef62b193201bc5566762e22049762cd485bfafb5095a7050760054/ty-0.0.65-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:600b8bf6f4940cf7ffb2f43d3716faaf38dcb97cd8617c55771451bc0276408f", size = 12105592, upload-time = "2026-07-29T18:30:45.419Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/76/fd/922b3a6e9d697452cdbb4b7e3f636868add5ec652154518a736e4364f3b7/ty-0.0.65-py3-none-musllinux_1_2_i686.whl", hash = "sha256:0c28007bc79d648c1ddaf1e65885d07baec48eb87240da442f608e4107c1b7d8", size = 12387335, upload-time = "2026-07-29T18:30:48.405Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/77/22/a1a08ebc84c083db2fb55e3b5cd186db0c067692f4921146f601360231e2/ty-0.0.65-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:c852da96091ad22361e6586b7c7ba98e1334dcd4d8ffb67e47f4fb673de33f77", size = 12682710, upload-time = "2026-07-29T18:30:51.364Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/81/14/eaaa410a25bbdea19722109b5422380a0e211b3afcf3071d15953ddbd5db/ty-0.0.65-py3-none-win32.whl", hash = "sha256:cf529d538f1403b14b0511e6ec3cdb95d3d974adabf24cc76cedc533368c3edc", size = 11692341, upload-time = "2026-07-29T18:30:54.35Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/bc/0f/6d48f206dce9d7e53fe3b5ea0f0ab5800dd9d2365b2b48f736783436c43f/ty-0.0.65-py3-none-win_amd64.whl", hash = "sha256:234a321e33c7cbbfbd67bfa0b01b685dd9c21f1841781a21e5ca1fa0b25f1d5d", size = 12729355, upload-time = "2026-07-29T18:30:57.275Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/96/aa/7446f7725e303cf78e058c893af1f0552b9451895454908706f4c6c3494b/ty-0.0.65-py3-none-win_arm64.whl", hash = "sha256:b9424be1ec56d93ff18609fb1c0a0a2283fe1282cd6d1c7604f97d73b94d61f2", size = 12051375, upload-time = "2026-07-29T18:31:00.579Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "unittest-parallel"
|
||||
version = "1.8.3"
|
||||
version = "1.8.2"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "coverage" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/c2/14/700a77c9cad91daeb74bb8139cd8cb6116a8da5a334f6c9c675ae625190f/unittest_parallel-1.8.3.tar.gz", hash = "sha256:5e5935126fb8245bb8322eb3d63c35a72603b67c2dabe98a3a026fa339e2cc3a", size = 10485, upload-time = "2026-08-06T18:19:23.514Z" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/4c/a8/ef232e095e36b131891f12442063c24da81e455ca8db9304494993d6bb24/unittest_parallel-1.8.2.tar.gz", hash = "sha256:42238ad1f93ef5cc88600b6bb6b8052512c591c9ba2bd57b7cdcf57ce196c01b", size = 10392, upload-time = "2026-05-01T17:30:19.738Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/ef/06/c6d57ed486239dcba509ff87322a30429c9aeb49013c1119a09762dd9926/unittest_parallel-1.8.3-py3-none-any.whl", hash = "sha256:3fe121f5d70f681038aabe9573ad46da943615945459515c4a4f8af4fc3005f1", size = 9612, upload-time = "2026-08-06T18:19:22.581Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/7c/e6/ce66604ea5de192913ce8d4825565cf5ba1d97439f49b39ddecd4ec373c8/unittest_parallel-1.8.2-py3-none-any.whl", hash = "sha256:b86bb180d509f2b280cc96a5332fda6324c8cbd59de28be88dea78db3329743d", size = 9571, upload-time = "2026-05-01T17:30:18.4Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
||||
@@ -5631,7 +5631,7 @@ const ::capnp::_::RawSchema s_af977a6cea924390 = {
|
||||
1, 5, i_af977a6cea924390, nullptr, nullptr, { &s_af977a6cea924390, nullptr, nullptr, 0, 0, nullptr }, false
|
||||
};
|
||||
#endif // !CAPNP_LITE
|
||||
static const ::capnp::_::AlignedData<67> b_c342cefc303e9b8e = {
|
||||
static const ::capnp::_::AlignedData<105> b_c342cefc303e9b8e = {
|
||||
{ 0, 0, 0, 0, 5, 0, 6, 0,
|
||||
142, 155, 62, 48, 252, 206, 66, 195,
|
||||
20, 0, 0, 0, 1, 0, 1, 0,
|
||||
@@ -5641,7 +5641,7 @@ static const ::capnp::_::AlignedData<67> b_c342cefc303e9b8e = {
|
||||
21, 0, 0, 0, 82, 1, 0, 0,
|
||||
41, 0, 0, 0, 7, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
37, 0, 0, 0, 175, 0, 0, 0,
|
||||
37, 0, 0, 0, 31, 1, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
99, 97, 114, 46, 99, 97, 112, 110,
|
||||
@@ -5651,123 +5651,42 @@ static const ::capnp::_::AlignedData<67> b_c342cefc303e9b8e = {
|
||||
80, 73, 68, 84, 117, 110, 105, 110,
|
||||
103, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 1, 0, 1, 0,
|
||||
12, 0, 0, 0, 3, 0, 4, 0,
|
||||
2, 0, 0, 0, 0, 0, 0, 0,
|
||||
1, 0, 0, 0, 0, 0, 0, 0,
|
||||
62, 205, 96, 248, 164, 226, 54, 141,
|
||||
69, 0, 0, 0, 90, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 2, 0, 0, 0,
|
||||
0, 0, 1, 0, 2, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
49, 0, 0, 0, 42, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
44, 0, 0, 0, 3, 0, 1, 0,
|
||||
72, 0, 0, 0, 2, 0, 1, 0,
|
||||
1, 0, 0, 0, 3, 0, 0, 0,
|
||||
0, 0, 1, 0, 3, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
69, 0, 0, 0, 34, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
64, 0, 0, 0, 3, 0, 1, 0,
|
||||
92, 0, 0, 0, 2, 0, 1, 0,
|
||||
100, 101, 112, 114, 101, 99, 97, 116,
|
||||
101, 100, 0, 0, 0, 0, 0, 0,
|
||||
107, 105, 66, 80, 0, 0, 0, 0,
|
||||
14, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 3, 0, 1, 0,
|
||||
10, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
14, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
107, 105, 86, 0, 0, 0, 0, 0,
|
||||
14, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 3, 0, 1, 0,
|
||||
10, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
14, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, }
|
||||
};
|
||||
::capnp::word const* const bp_c342cefc303e9b8e = b_c342cefc303e9b8e.words;
|
||||
#if !CAPNP_LITE
|
||||
static const ::capnp::_::RawSchema* const d_c342cefc303e9b8e[] = {
|
||||
&s_8d36e2a4f860cd3e,
|
||||
};
|
||||
static const uint16_t m_c342cefc303e9b8e[] = {0, 1, 2};
|
||||
static const uint16_t i_c342cefc303e9b8e[] = {0, 1, 2};
|
||||
const ::capnp::_::RawSchema s_c342cefc303e9b8e = {
|
||||
0xc342cefc303e9b8e, b_c342cefc303e9b8e.words, 67, d_c342cefc303e9b8e, m_c342cefc303e9b8e,
|
||||
1, 3, i_c342cefc303e9b8e, nullptr, nullptr, { &s_c342cefc303e9b8e, nullptr, nullptr, 0, 0, nullptr }, false
|
||||
};
|
||||
#endif // !CAPNP_LITE
|
||||
static const ::capnp::_::AlignedData<113> b_8d36e2a4f860cd3e = {
|
||||
{ 0, 0, 0, 0, 5, 0, 6, 0,
|
||||
62, 205, 96, 248, 164, 226, 54, 141,
|
||||
42, 0, 0, 0, 1, 0, 1, 0,
|
||||
142, 155, 62, 48, 252, 206, 66, 195,
|
||||
6, 0, 7, 0, 1, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
21, 0, 0, 0, 170, 1, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
37, 0, 0, 0, 31, 1, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
99, 97, 114, 46, 99, 97, 112, 110,
|
||||
112, 58, 67, 97, 114, 80, 97, 114,
|
||||
97, 109, 115, 46, 76, 111, 110, 103,
|
||||
105, 116, 117, 100, 105, 110, 97, 108,
|
||||
80, 73, 68, 84, 117, 110, 105, 110,
|
||||
103, 46, 100, 101, 112, 114, 101, 99,
|
||||
97, 116, 101, 100, 0, 0, 0, 0,
|
||||
20, 0, 0, 0, 3, 0, 4, 0,
|
||||
3, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 1, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
125, 0, 0, 0, 42, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
120, 0, 0, 0, 3, 0, 1, 0,
|
||||
148, 0, 0, 0, 2, 0, 1, 0,
|
||||
4, 0, 0, 0, 1, 0, 0, 0,
|
||||
1, 0, 0, 0, 1, 0, 0, 0,
|
||||
0, 0, 1, 0, 1, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
145, 0, 0, 0, 34, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
140, 0, 0, 0, 3, 0, 1, 0,
|
||||
168, 0, 0, 0, 2, 0, 1, 0,
|
||||
1, 0, 0, 0, 4, 0, 0, 0,
|
||||
0, 0, 1, 0, 4, 0, 0, 0,
|
||||
2, 0, 0, 0, 2, 0, 0, 0,
|
||||
0, 0, 1, 0, 2, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
165, 0, 0, 0, 90, 0, 0, 0,
|
||||
165, 0, 0, 0, 42, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
164, 0, 0, 0, 3, 0, 1, 0,
|
||||
192, 0, 0, 0, 2, 0, 1, 0,
|
||||
2, 0, 0, 0, 5, 0, 0, 0,
|
||||
0, 0, 1, 0, 5, 0, 0, 0,
|
||||
160, 0, 0, 0, 3, 0, 1, 0,
|
||||
188, 0, 0, 0, 2, 0, 1, 0,
|
||||
3, 0, 0, 0, 3, 0, 0, 0,
|
||||
0, 0, 1, 0, 3, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
189, 0, 0, 0, 82, 0, 0, 0,
|
||||
185, 0, 0, 0, 34, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
188, 0, 0, 0, 3, 0, 1, 0,
|
||||
216, 0, 0, 0, 2, 0, 1, 0,
|
||||
180, 0, 0, 0, 3, 0, 1, 0,
|
||||
208, 0, 0, 0, 2, 0, 1, 0,
|
||||
4, 0, 0, 0, 0, 0, 0, 0,
|
||||
1, 0, 0, 0, 0, 0, 0, 0,
|
||||
46, 77, 85, 159, 41, 13, 28, 196,
|
||||
205, 0, 0, 0, 90, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 1, 0, 6, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
213, 0, 0, 0, 26, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
208, 0, 0, 0, 3, 0, 1, 0,
|
||||
220, 0, 0, 0, 2, 0, 1, 0,
|
||||
107, 112, 66, 80, 0, 0, 0, 0,
|
||||
14, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
@@ -5792,6 +5711,87 @@ static const ::capnp::_::AlignedData<113> b_8d36e2a4f860cd3e = {
|
||||
14, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
107, 105, 66, 80, 0, 0, 0, 0,
|
||||
14, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 3, 0, 1, 0,
|
||||
10, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
14, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
107, 105, 86, 0, 0, 0, 0, 0,
|
||||
14, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 3, 0, 1, 0,
|
||||
10, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
14, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
100, 101, 112, 114, 101, 99, 97, 116,
|
||||
101, 100, 0, 0, 0, 0, 0, 0, }
|
||||
};
|
||||
::capnp::word const* const bp_c342cefc303e9b8e = b_c342cefc303e9b8e.words;
|
||||
#if !CAPNP_LITE
|
||||
static const ::capnp::_::RawSchema* const d_c342cefc303e9b8e[] = {
|
||||
&s_c41c0d299f554d2e,
|
||||
};
|
||||
static const uint16_t m_c342cefc303e9b8e[] = {4, 2, 3, 0, 1};
|
||||
static const uint16_t i_c342cefc303e9b8e[] = {0, 1, 2, 3, 4};
|
||||
const ::capnp::_::RawSchema s_c342cefc303e9b8e = {
|
||||
0xc342cefc303e9b8e, b_c342cefc303e9b8e.words, 105, d_c342cefc303e9b8e, m_c342cefc303e9b8e,
|
||||
1, 5, i_c342cefc303e9b8e, nullptr, nullptr, { &s_c342cefc303e9b8e, nullptr, nullptr, 0, 0, nullptr }, false
|
||||
};
|
||||
#endif // !CAPNP_LITE
|
||||
static const ::capnp::_::AlignedData<75> b_c41c0d299f554d2e = {
|
||||
{ 0, 0, 0, 0, 5, 0, 6, 0,
|
||||
46, 77, 85, 159, 41, 13, 28, 196,
|
||||
42, 0, 0, 0, 1, 0, 1, 0,
|
||||
142, 155, 62, 48, 252, 206, 66, 195,
|
||||
6, 0, 7, 0, 1, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
21, 0, 0, 0, 170, 1, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
37, 0, 0, 0, 175, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
99, 97, 114, 46, 99, 97, 112, 110,
|
||||
112, 58, 67, 97, 114, 80, 97, 114,
|
||||
97, 109, 115, 46, 76, 111, 110, 103,
|
||||
105, 116, 117, 100, 105, 110, 97, 108,
|
||||
80, 73, 68, 84, 117, 110, 105, 110,
|
||||
103, 46, 100, 101, 112, 114, 101, 99,
|
||||
97, 116, 101, 100, 0, 0, 0, 0,
|
||||
12, 0, 0, 0, 3, 0, 4, 0,
|
||||
1, 0, 0, 0, 4, 0, 0, 0,
|
||||
0, 0, 1, 0, 4, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
69, 0, 0, 0, 90, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
68, 0, 0, 0, 3, 0, 1, 0,
|
||||
96, 0, 0, 0, 2, 0, 1, 0,
|
||||
2, 0, 0, 0, 5, 0, 0, 0,
|
||||
0, 0, 1, 0, 5, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
93, 0, 0, 0, 82, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
92, 0, 0, 0, 3, 0, 1, 0,
|
||||
120, 0, 0, 0, 2, 0, 1, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 1, 0, 6, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
117, 0, 0, 0, 26, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
112, 0, 0, 0, 3, 0, 1, 0,
|
||||
124, 0, 0, 0, 2, 0, 1, 0,
|
||||
100, 101, 97, 100, 122, 111, 110, 101,
|
||||
66, 80, 0, 0, 0, 0, 0, 0,
|
||||
14, 0, 0, 0, 0, 0, 0, 0,
|
||||
@@ -5827,16 +5827,16 @@ static const ::capnp::_::AlignedData<113> b_8d36e2a4f860cd3e = {
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, }
|
||||
};
|
||||
::capnp::word const* const bp_8d36e2a4f860cd3e = b_8d36e2a4f860cd3e.words;
|
||||
::capnp::word const* const bp_c41c0d299f554d2e = b_c41c0d299f554d2e.words;
|
||||
#if !CAPNP_LITE
|
||||
static const ::capnp::_::RawSchema* const d_8d36e2a4f860cd3e[] = {
|
||||
static const ::capnp::_::RawSchema* const d_c41c0d299f554d2e[] = {
|
||||
&s_c342cefc303e9b8e,
|
||||
};
|
||||
static const uint16_t m_8d36e2a4f860cd3e[] = {2, 3, 4, 0, 1};
|
||||
static const uint16_t i_8d36e2a4f860cd3e[] = {0, 1, 2, 3, 4};
|
||||
const ::capnp::_::RawSchema s_8d36e2a4f860cd3e = {
|
||||
0x8d36e2a4f860cd3e, b_8d36e2a4f860cd3e.words, 113, d_8d36e2a4f860cd3e, m_8d36e2a4f860cd3e,
|
||||
1, 5, i_8d36e2a4f860cd3e, nullptr, nullptr, { &s_8d36e2a4f860cd3e, nullptr, nullptr, 0, 0, nullptr }, false
|
||||
static const uint16_t m_c41c0d299f554d2e[] = {0, 1, 2};
|
||||
static const uint16_t i_c41c0d299f554d2e[] = {0, 1, 2};
|
||||
const ::capnp::_::RawSchema s_c41c0d299f554d2e = {
|
||||
0xc41c0d299f554d2e, b_c41c0d299f554d2e.words, 75, d_c41c0d299f554d2e, m_c41c0d299f554d2e,
|
||||
1, 3, i_c41c0d299f554d2e, nullptr, nullptr, { &s_c41c0d299f554d2e, nullptr, nullptr, 0, 0, nullptr }, false
|
||||
};
|
||||
#endif // !CAPNP_LITE
|
||||
static const ::capnp::_::AlignedData<191> b_caa441291b152efd = {
|
||||
@@ -6315,7 +6315,7 @@ const ::capnp::_::RawSchema s_a1adf400915718e5 = {
|
||||
0, 8, i_a1adf400915718e5, nullptr, nullptr, { &s_a1adf400915718e5, nullptr, nullptr, 0, 0, nullptr }, false
|
||||
};
|
||||
#endif // !CAPNP_LITE
|
||||
static const ::capnp::_::AlignedData<197> b_95551e5b1edaf451 = {
|
||||
static const ::capnp::_::AlignedData<181> b_95551e5b1edaf451 = {
|
||||
{ 0, 0, 0, 0, 5, 0, 6, 0,
|
||||
81, 244, 218, 30, 91, 30, 85, 149,
|
||||
20, 0, 0, 0, 2, 0, 0, 0,
|
||||
@@ -6325,7 +6325,7 @@ static const ::capnp::_::AlignedData<197> b_95551e5b1edaf451 = {
|
||||
21, 0, 0, 0, 2, 1, 0, 0,
|
||||
33, 0, 0, 0, 7, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
29, 0, 0, 0, 175, 3, 0, 0,
|
||||
29, 0, 0, 0, 79, 3, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
99, 97, 114, 46, 99, 97, 112, 110,
|
||||
@@ -6333,123 +6333,111 @@ static const ::capnp::_::AlignedData<197> b_95551e5b1edaf451 = {
|
||||
97, 109, 115, 46, 83, 97, 102, 101,
|
||||
116, 121, 77, 111, 100, 101, 108, 0,
|
||||
0, 0, 0, 0, 1, 0, 1, 0,
|
||||
156, 0, 0, 0, 1, 0, 2, 0,
|
||||
140, 0, 0, 0, 1, 0, 2, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
205, 1, 0, 0, 58, 0, 0, 0,
|
||||
157, 1, 0, 0, 58, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
1, 0, 0, 0, 0, 0, 0, 0,
|
||||
197, 1, 0, 0, 90, 0, 0, 0,
|
||||
149, 1, 0, 0, 90, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
2, 0, 0, 0, 0, 0, 0, 0,
|
||||
193, 1, 0, 0, 58, 0, 0, 0,
|
||||
145, 1, 0, 0, 58, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
3, 0, 0, 0, 0, 0, 0, 0,
|
||||
185, 1, 0, 0, 58, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
4, 0, 0, 0, 0, 0, 0, 0,
|
||||
177, 1, 0, 0, 26, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
5, 0, 0, 0, 0, 0, 0, 0,
|
||||
169, 1, 0, 0, 146, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
6, 0, 0, 0, 0, 0, 0, 0,
|
||||
169, 1, 0, 0, 42, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
7, 0, 0, 0, 0, 0, 0, 0,
|
||||
161, 1, 0, 0, 74, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
8, 0, 0, 0, 0, 0, 0, 0,
|
||||
157, 1, 0, 0, 66, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
9, 0, 0, 0, 0, 0, 0, 0,
|
||||
149, 1, 0, 0, 74, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
10, 0, 0, 0, 0, 0, 0, 0,
|
||||
145, 1, 0, 0, 50, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
11, 0, 0, 0, 0, 0, 0, 0,
|
||||
137, 1, 0, 0, 58, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
4, 0, 0, 0, 0, 0, 0, 0,
|
||||
129, 1, 0, 0, 26, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
5, 0, 0, 0, 0, 0, 0, 0,
|
||||
121, 1, 0, 0, 146, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
6, 0, 0, 0, 0, 0, 0, 0,
|
||||
121, 1, 0, 0, 42, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
7, 0, 0, 0, 0, 0, 0, 0,
|
||||
113, 1, 0, 0, 74, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
8, 0, 0, 0, 0, 0, 0, 0,
|
||||
109, 1, 0, 0, 66, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
9, 0, 0, 0, 0, 0, 0, 0,
|
||||
101, 1, 0, 0, 74, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
10, 0, 0, 0, 0, 0, 0, 0,
|
||||
97, 1, 0, 0, 50, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
11, 0, 0, 0, 0, 0, 0, 0,
|
||||
89, 1, 0, 0, 58, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
12, 0, 0, 0, 0, 0, 0, 0,
|
||||
129, 1, 0, 0, 82, 0, 0, 0,
|
||||
81, 1, 0, 0, 82, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
13, 0, 0, 0, 0, 0, 0, 0,
|
||||
125, 1, 0, 0, 50, 0, 0, 0,
|
||||
77, 1, 0, 0, 50, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
14, 0, 0, 0, 0, 0, 0, 0,
|
||||
117, 1, 0, 0, 58, 0, 0, 0,
|
||||
69, 1, 0, 0, 58, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
15, 0, 0, 0, 0, 0, 0, 0,
|
||||
109, 1, 0, 0, 90, 0, 0, 0,
|
||||
61, 1, 0, 0, 90, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
16, 0, 0, 0, 0, 0, 0, 0,
|
||||
105, 1, 0, 0, 90, 0, 0, 0,
|
||||
57, 1, 0, 0, 90, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
17, 0, 0, 0, 0, 0, 0, 0,
|
||||
101, 1, 0, 0, 82, 0, 0, 0,
|
||||
53, 1, 0, 0, 82, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
18, 0, 0, 0, 0, 0, 0, 0,
|
||||
97, 1, 0, 0, 58, 0, 0, 0,
|
||||
49, 1, 0, 0, 58, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
19, 0, 0, 0, 0, 0, 0, 0,
|
||||
89, 1, 0, 0, 74, 0, 0, 0,
|
||||
41, 1, 0, 0, 74, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
20, 0, 0, 0, 0, 0, 0, 0,
|
||||
85, 1, 0, 0, 90, 0, 0, 0,
|
||||
37, 1, 0, 0, 90, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
21, 0, 0, 0, 0, 0, 0, 0,
|
||||
81, 1, 0, 0, 106, 0, 0, 0,
|
||||
33, 1, 0, 0, 106, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
22, 0, 0, 0, 0, 0, 0, 0,
|
||||
77, 1, 0, 0, 130, 0, 0, 0,
|
||||
29, 1, 0, 0, 130, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
23, 0, 0, 0, 0, 0, 0, 0,
|
||||
73, 1, 0, 0, 114, 0, 0, 0,
|
||||
25, 1, 0, 0, 114, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
24, 0, 0, 0, 0, 0, 0, 0,
|
||||
69, 1, 0, 0, 138, 0, 0, 0,
|
||||
21, 1, 0, 0, 138, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
25, 0, 0, 0, 0, 0, 0, 0,
|
||||
69, 1, 0, 0, 114, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
26, 0, 0, 0, 0, 0, 0, 0,
|
||||
65, 1, 0, 0, 58, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
27, 0, 0, 0, 0, 0, 0, 0,
|
||||
57, 1, 0, 0, 42, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
28, 0, 0, 0, 0, 0, 0, 0,
|
||||
49, 1, 0, 0, 106, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
29, 0, 0, 0, 0, 0, 0, 0,
|
||||
45, 1, 0, 0, 138, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
30, 0, 0, 0, 0, 0, 0, 0,
|
||||
45, 1, 0, 0, 106, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
31, 0, 0, 0, 0, 0, 0, 0,
|
||||
41, 1, 0, 0, 34, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
32, 0, 0, 0, 0, 0, 0, 0,
|
||||
33, 1, 0, 0, 90, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
33, 0, 0, 0, 0, 0, 0, 0,
|
||||
29, 1, 0, 0, 58, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
34, 0, 0, 0, 0, 0, 0, 0,
|
||||
21, 1, 0, 0, 114, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
35, 0, 0, 0, 0, 0, 0, 0,
|
||||
17, 1, 0, 0, 34, 0, 0, 0,
|
||||
26, 0, 0, 0, 0, 0, 0, 0,
|
||||
17, 1, 0, 0, 58, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
36, 0, 0, 0, 0, 0, 0, 0,
|
||||
9, 1, 0, 0, 50, 0, 0, 0,
|
||||
27, 0, 0, 0, 0, 0, 0, 0,
|
||||
9, 1, 0, 0, 42, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
37, 0, 0, 0, 0, 0, 0, 0,
|
||||
1, 1, 0, 0, 34, 0, 0, 0,
|
||||
28, 0, 0, 0, 0, 0, 0, 0,
|
||||
1, 1, 0, 0, 106, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
38, 0, 0, 0, 0, 0, 0, 0,
|
||||
249, 0, 0, 0, 26, 0, 0, 0,
|
||||
29, 0, 0, 0, 0, 0, 0, 0,
|
||||
253, 0, 0, 0, 138, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
30, 0, 0, 0, 0, 0, 0, 0,
|
||||
253, 0, 0, 0, 106, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
31, 0, 0, 0, 0, 0, 0, 0,
|
||||
249, 0, 0, 0, 34, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
32, 0, 0, 0, 0, 0, 0, 0,
|
||||
241, 0, 0, 0, 90, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
33, 0, 0, 0, 0, 0, 0, 0,
|
||||
237, 0, 0, 0, 58, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
34, 0, 0, 0, 0, 0, 0, 0,
|
||||
229, 0, 0, 0, 114, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
115, 105, 108, 101, 110, 116, 0, 0,
|
||||
104, 111, 110, 100, 97, 78, 105, 100,
|
||||
@@ -6508,18 +6496,14 @@ static const ::capnp::_::AlignedData<197> b_95551e5b1edaf451 = {
|
||||
105, 111, 0, 0, 0, 0, 0, 0,
|
||||
114, 105, 118, 105, 97, 110, 0, 0,
|
||||
118, 111, 108, 107, 115, 119, 97, 103,
|
||||
101, 110, 77, 101, 98, 0, 0, 0,
|
||||
98, 121, 100, 0, 0, 0, 0, 0,
|
||||
118, 111, 108, 118, 111, 0, 0, 0,
|
||||
98, 109, 119, 0, 0, 0, 0, 0,
|
||||
109, 103, 0, 0, 0, 0, 0, 0, }
|
||||
101, 110, 77, 101, 98, 0, 0, 0, }
|
||||
};
|
||||
::capnp::word const* const bp_95551e5b1edaf451 = b_95551e5b1edaf451.words;
|
||||
#if !CAPNP_LITE
|
||||
static const uint16_t m_95551e5b1edaf451[] = {17, 37, 27, 35, 7, 9, 30, 3, 32, 6, 4, 18, 12, 20, 5, 1, 26, 8, 28, 24, 23, 13, 38, 14, 19, 31, 33, 0, 11, 22, 10, 2, 16, 15, 34, 25, 29, 21, 36};
|
||||
static const uint16_t m_95551e5b1edaf451[] = {17, 27, 7, 9, 30, 3, 32, 6, 4, 18, 12, 20, 5, 1, 26, 8, 28, 24, 23, 13, 14, 19, 31, 33, 0, 11, 22, 10, 2, 16, 15, 34, 25, 29, 21};
|
||||
const ::capnp::_::RawSchema s_95551e5b1edaf451 = {
|
||||
0x95551e5b1edaf451, b_95551e5b1edaf451.words, 197, nullptr, m_95551e5b1edaf451,
|
||||
0, 39, nullptr, nullptr, nullptr, { &s_95551e5b1edaf451, nullptr, nullptr, 0, 0, nullptr }, false
|
||||
0x95551e5b1edaf451, b_95551e5b1edaf451.words, 181, nullptr, m_95551e5b1edaf451,
|
||||
0, 35, nullptr, nullptr, nullptr, { &s_95551e5b1edaf451, nullptr, nullptr, 0, 0, nullptr }, false
|
||||
};
|
||||
#endif // !CAPNP_LITE
|
||||
CAPNP_DEFINE_ENUM(SafetyModel_95551e5b1edaf451, 95551e5b1edaf451);
|
||||
|
||||
@@ -245,7 +245,7 @@ CAPNP_DECLARE_SCHEMA(9622723fcbd14c2e);
|
||||
CAPNP_DECLARE_SCHEMA(80366e0e804ecc1d);
|
||||
CAPNP_DECLARE_SCHEMA(af977a6cea924390);
|
||||
CAPNP_DECLARE_SCHEMA(c342cefc303e9b8e);
|
||||
CAPNP_DECLARE_SCHEMA(8d36e2a4f860cd3e);
|
||||
CAPNP_DECLARE_SCHEMA(c41c0d299f554d2e);
|
||||
CAPNP_DECLARE_SCHEMA(caa441291b152efd);
|
||||
CAPNP_DECLARE_SCHEMA(c1110421b4c850e6);
|
||||
CAPNP_DECLARE_SCHEMA(a1adf400915718e5);
|
||||
@@ -286,10 +286,6 @@ enum class SafetyModel_95551e5b1edaf451: uint16_t {
|
||||
FCA_GIORGIO,
|
||||
RIVIAN,
|
||||
VOLKSWAGEN_MEB,
|
||||
BYD,
|
||||
VOLVO,
|
||||
BMW,
|
||||
MG,
|
||||
};
|
||||
CAPNP_DECLARE_ENUM(SafetyModel, 95551e5b1edaf451);
|
||||
CAPNP_DECLARE_SCHEMA(d661512be2def77f);
|
||||
@@ -825,7 +821,7 @@ struct CarParams::LongitudinalPIDTuning::Deprecated {
|
||||
class Pipeline;
|
||||
|
||||
struct _capnpPrivate {
|
||||
CAPNP_DECLARE_STRUCT_HEADER(8d36e2a4f860cd3e, 1, 6)
|
||||
CAPNP_DECLARE_STRUCT_HEADER(c41c0d299f554d2e, 1, 6)
|
||||
#if !CAPNP_LITE
|
||||
static constexpr ::capnp::_::RawBrandedSchema const* brand() { return &schema->defaultBrand; }
|
||||
#endif // !CAPNP_LITE
|
||||
@@ -4076,7 +4072,11 @@ public:
|
||||
}
|
||||
#endif // !CAPNP_LITE
|
||||
|
||||
inline typename Deprecated::Reader getDeprecated() const;
|
||||
inline bool hasKpBP() const;
|
||||
inline ::capnp::List<float, ::capnp::Kind::PRIMITIVE>::Reader getKpBP() const;
|
||||
|
||||
inline bool hasKpV() const;
|
||||
inline ::capnp::List<float, ::capnp::Kind::PRIMITIVE>::Reader getKpV() const;
|
||||
|
||||
inline bool hasKiBP() const;
|
||||
inline ::capnp::List<float, ::capnp::Kind::PRIMITIVE>::Reader getKiBP() const;
|
||||
@@ -4084,6 +4084,8 @@ public:
|
||||
inline bool hasKiV() const;
|
||||
inline ::capnp::List<float, ::capnp::Kind::PRIMITIVE>::Reader getKiV() const;
|
||||
|
||||
inline typename Deprecated::Reader getDeprecated() const;
|
||||
|
||||
private:
|
||||
::capnp::_::StructReader _reader;
|
||||
template <typename, ::capnp::Kind>
|
||||
@@ -4112,8 +4114,21 @@ public:
|
||||
inline ::kj::StringTree toString() const { return asReader().toString(); }
|
||||
#endif // !CAPNP_LITE
|
||||
|
||||
inline typename Deprecated::Builder getDeprecated();
|
||||
inline typename Deprecated::Builder initDeprecated();
|
||||
inline bool hasKpBP();
|
||||
inline ::capnp::List<float, ::capnp::Kind::PRIMITIVE>::Builder getKpBP();
|
||||
inline void setKpBP( ::capnp::List<float, ::capnp::Kind::PRIMITIVE>::Reader value);
|
||||
inline void setKpBP(::kj::ArrayPtr<const float> value);
|
||||
inline ::capnp::List<float, ::capnp::Kind::PRIMITIVE>::Builder initKpBP(unsigned int size);
|
||||
inline void adoptKpBP(::capnp::Orphan< ::capnp::List<float, ::capnp::Kind::PRIMITIVE>>&& value);
|
||||
inline ::capnp::Orphan< ::capnp::List<float, ::capnp::Kind::PRIMITIVE>> disownKpBP();
|
||||
|
||||
inline bool hasKpV();
|
||||
inline ::capnp::List<float, ::capnp::Kind::PRIMITIVE>::Builder getKpV();
|
||||
inline void setKpV( ::capnp::List<float, ::capnp::Kind::PRIMITIVE>::Reader value);
|
||||
inline void setKpV(::kj::ArrayPtr<const float> value);
|
||||
inline ::capnp::List<float, ::capnp::Kind::PRIMITIVE>::Builder initKpV(unsigned int size);
|
||||
inline void adoptKpV(::capnp::Orphan< ::capnp::List<float, ::capnp::Kind::PRIMITIVE>>&& value);
|
||||
inline ::capnp::Orphan< ::capnp::List<float, ::capnp::Kind::PRIMITIVE>> disownKpV();
|
||||
|
||||
inline bool hasKiBP();
|
||||
inline ::capnp::List<float, ::capnp::Kind::PRIMITIVE>::Builder getKiBP();
|
||||
@@ -4131,6 +4146,9 @@ public:
|
||||
inline void adoptKiV(::capnp::Orphan< ::capnp::List<float, ::capnp::Kind::PRIMITIVE>>&& value);
|
||||
inline ::capnp::Orphan< ::capnp::List<float, ::capnp::Kind::PRIMITIVE>> disownKiV();
|
||||
|
||||
inline typename Deprecated::Builder getDeprecated();
|
||||
inline typename Deprecated::Builder initDeprecated();
|
||||
|
||||
private:
|
||||
::capnp::_::StructBuilder _builder;
|
||||
template <typename, ::capnp::Kind>
|
||||
@@ -4175,12 +4193,6 @@ public:
|
||||
}
|
||||
#endif // !CAPNP_LITE
|
||||
|
||||
inline bool hasKpBP() const;
|
||||
inline ::capnp::List<float, ::capnp::Kind::PRIMITIVE>::Reader getKpBP() const;
|
||||
|
||||
inline bool hasKpV() const;
|
||||
inline ::capnp::List<float, ::capnp::Kind::PRIMITIVE>::Reader getKpV() const;
|
||||
|
||||
inline bool hasDeadzoneBP() const;
|
||||
inline ::capnp::List<float, ::capnp::Kind::PRIMITIVE>::Reader getDeadzoneBP() const;
|
||||
|
||||
@@ -4217,22 +4229,6 @@ public:
|
||||
inline ::kj::StringTree toString() const { return asReader().toString(); }
|
||||
#endif // !CAPNP_LITE
|
||||
|
||||
inline bool hasKpBP();
|
||||
inline ::capnp::List<float, ::capnp::Kind::PRIMITIVE>::Builder getKpBP();
|
||||
inline void setKpBP( ::capnp::List<float, ::capnp::Kind::PRIMITIVE>::Reader value);
|
||||
inline void setKpBP(::kj::ArrayPtr<const float> value);
|
||||
inline ::capnp::List<float, ::capnp::Kind::PRIMITIVE>::Builder initKpBP(unsigned int size);
|
||||
inline void adoptKpBP(::capnp::Orphan< ::capnp::List<float, ::capnp::Kind::PRIMITIVE>>&& value);
|
||||
inline ::capnp::Orphan< ::capnp::List<float, ::capnp::Kind::PRIMITIVE>> disownKpBP();
|
||||
|
||||
inline bool hasKpV();
|
||||
inline ::capnp::List<float, ::capnp::Kind::PRIMITIVE>::Builder getKpV();
|
||||
inline void setKpV( ::capnp::List<float, ::capnp::Kind::PRIMITIVE>::Reader value);
|
||||
inline void setKpV(::kj::ArrayPtr<const float> value);
|
||||
inline ::capnp::List<float, ::capnp::Kind::PRIMITIVE>::Builder initKpV(unsigned int size);
|
||||
inline void adoptKpV(::capnp::Orphan< ::capnp::List<float, ::capnp::Kind::PRIMITIVE>>&& value);
|
||||
inline ::capnp::Orphan< ::capnp::List<float, ::capnp::Kind::PRIMITIVE>> disownKpV();
|
||||
|
||||
inline bool hasDeadzoneBP();
|
||||
inline ::capnp::List<float, ::capnp::Kind::PRIMITIVE>::Builder getDeadzoneBP();
|
||||
inline void setDeadzoneBP( ::capnp::List<float, ::capnp::Kind::PRIMITIVE>::Reader value);
|
||||
@@ -9034,25 +9030,82 @@ inline void CarParams::LateralTorqueTuning::Deprecated::Builder::setKd(float val
|
||||
::capnp::bounded<8>() * ::capnp::ELEMENTS, value);
|
||||
}
|
||||
|
||||
inline typename CarParams::LongitudinalPIDTuning::Deprecated::Reader CarParams::LongitudinalPIDTuning::Reader::getDeprecated() const {
|
||||
return typename CarParams::LongitudinalPIDTuning::Deprecated::Reader(_reader);
|
||||
inline bool CarParams::LongitudinalPIDTuning::Reader::hasKpBP() const {
|
||||
return !_reader.getPointerField(
|
||||
::capnp::bounded<0>() * ::capnp::POINTERS).isNull();
|
||||
}
|
||||
inline typename CarParams::LongitudinalPIDTuning::Deprecated::Builder CarParams::LongitudinalPIDTuning::Builder::getDeprecated() {
|
||||
return typename CarParams::LongitudinalPIDTuning::Deprecated::Builder(_builder);
|
||||
inline bool CarParams::LongitudinalPIDTuning::Builder::hasKpBP() {
|
||||
return !_builder.getPointerField(
|
||||
::capnp::bounded<0>() * ::capnp::POINTERS).isNull();
|
||||
}
|
||||
#if !CAPNP_LITE
|
||||
inline typename CarParams::LongitudinalPIDTuning::Deprecated::Pipeline CarParams::LongitudinalPIDTuning::Pipeline::getDeprecated() {
|
||||
return typename CarParams::LongitudinalPIDTuning::Deprecated::Pipeline(_typeless.noop());
|
||||
inline ::capnp::List<float, ::capnp::Kind::PRIMITIVE>::Reader CarParams::LongitudinalPIDTuning::Reader::getKpBP() const {
|
||||
return ::capnp::_::PointerHelpers< ::capnp::List<float, ::capnp::Kind::PRIMITIVE>>::get(_reader.getPointerField(
|
||||
::capnp::bounded<0>() * ::capnp::POINTERS));
|
||||
}
|
||||
#endif // !CAPNP_LITE
|
||||
inline typename CarParams::LongitudinalPIDTuning::Deprecated::Builder CarParams::LongitudinalPIDTuning::Builder::initDeprecated() {
|
||||
_builder.setDataField< ::uint32_t>(::capnp::bounded<0>() * ::capnp::ELEMENTS, 0);
|
||||
_builder.getPointerField(::capnp::bounded<0>() * ::capnp::POINTERS).clear();
|
||||
_builder.getPointerField(::capnp::bounded<1>() * ::capnp::POINTERS).clear();
|
||||
_builder.getPointerField(::capnp::bounded<4>() * ::capnp::POINTERS).clear();
|
||||
_builder.getPointerField(::capnp::bounded<5>() * ::capnp::POINTERS).clear();
|
||||
return typename CarParams::LongitudinalPIDTuning::Deprecated::Builder(_builder);
|
||||
inline ::capnp::List<float, ::capnp::Kind::PRIMITIVE>::Builder CarParams::LongitudinalPIDTuning::Builder::getKpBP() {
|
||||
return ::capnp::_::PointerHelpers< ::capnp::List<float, ::capnp::Kind::PRIMITIVE>>::get(_builder.getPointerField(
|
||||
::capnp::bounded<0>() * ::capnp::POINTERS));
|
||||
}
|
||||
inline void CarParams::LongitudinalPIDTuning::Builder::setKpBP( ::capnp::List<float, ::capnp::Kind::PRIMITIVE>::Reader value) {
|
||||
::capnp::_::PointerHelpers< ::capnp::List<float, ::capnp::Kind::PRIMITIVE>>::set(_builder.getPointerField(
|
||||
::capnp::bounded<0>() * ::capnp::POINTERS), value);
|
||||
}
|
||||
inline void CarParams::LongitudinalPIDTuning::Builder::setKpBP(::kj::ArrayPtr<const float> value) {
|
||||
::capnp::_::PointerHelpers< ::capnp::List<float, ::capnp::Kind::PRIMITIVE>>::set(_builder.getPointerField(
|
||||
::capnp::bounded<0>() * ::capnp::POINTERS), value);
|
||||
}
|
||||
inline ::capnp::List<float, ::capnp::Kind::PRIMITIVE>::Builder CarParams::LongitudinalPIDTuning::Builder::initKpBP(unsigned int size) {
|
||||
return ::capnp::_::PointerHelpers< ::capnp::List<float, ::capnp::Kind::PRIMITIVE>>::init(_builder.getPointerField(
|
||||
::capnp::bounded<0>() * ::capnp::POINTERS), size);
|
||||
}
|
||||
inline void CarParams::LongitudinalPIDTuning::Builder::adoptKpBP(
|
||||
::capnp::Orphan< ::capnp::List<float, ::capnp::Kind::PRIMITIVE>>&& value) {
|
||||
::capnp::_::PointerHelpers< ::capnp::List<float, ::capnp::Kind::PRIMITIVE>>::adopt(_builder.getPointerField(
|
||||
::capnp::bounded<0>() * ::capnp::POINTERS), kj::mv(value));
|
||||
}
|
||||
inline ::capnp::Orphan< ::capnp::List<float, ::capnp::Kind::PRIMITIVE>> CarParams::LongitudinalPIDTuning::Builder::disownKpBP() {
|
||||
return ::capnp::_::PointerHelpers< ::capnp::List<float, ::capnp::Kind::PRIMITIVE>>::disown(_builder.getPointerField(
|
||||
::capnp::bounded<0>() * ::capnp::POINTERS));
|
||||
}
|
||||
|
||||
inline bool CarParams::LongitudinalPIDTuning::Reader::hasKpV() const {
|
||||
return !_reader.getPointerField(
|
||||
::capnp::bounded<1>() * ::capnp::POINTERS).isNull();
|
||||
}
|
||||
inline bool CarParams::LongitudinalPIDTuning::Builder::hasKpV() {
|
||||
return !_builder.getPointerField(
|
||||
::capnp::bounded<1>() * ::capnp::POINTERS).isNull();
|
||||
}
|
||||
inline ::capnp::List<float, ::capnp::Kind::PRIMITIVE>::Reader CarParams::LongitudinalPIDTuning::Reader::getKpV() const {
|
||||
return ::capnp::_::PointerHelpers< ::capnp::List<float, ::capnp::Kind::PRIMITIVE>>::get(_reader.getPointerField(
|
||||
::capnp::bounded<1>() * ::capnp::POINTERS));
|
||||
}
|
||||
inline ::capnp::List<float, ::capnp::Kind::PRIMITIVE>::Builder CarParams::LongitudinalPIDTuning::Builder::getKpV() {
|
||||
return ::capnp::_::PointerHelpers< ::capnp::List<float, ::capnp::Kind::PRIMITIVE>>::get(_builder.getPointerField(
|
||||
::capnp::bounded<1>() * ::capnp::POINTERS));
|
||||
}
|
||||
inline void CarParams::LongitudinalPIDTuning::Builder::setKpV( ::capnp::List<float, ::capnp::Kind::PRIMITIVE>::Reader value) {
|
||||
::capnp::_::PointerHelpers< ::capnp::List<float, ::capnp::Kind::PRIMITIVE>>::set(_builder.getPointerField(
|
||||
::capnp::bounded<1>() * ::capnp::POINTERS), value);
|
||||
}
|
||||
inline void CarParams::LongitudinalPIDTuning::Builder::setKpV(::kj::ArrayPtr<const float> value) {
|
||||
::capnp::_::PointerHelpers< ::capnp::List<float, ::capnp::Kind::PRIMITIVE>>::set(_builder.getPointerField(
|
||||
::capnp::bounded<1>() * ::capnp::POINTERS), value);
|
||||
}
|
||||
inline ::capnp::List<float, ::capnp::Kind::PRIMITIVE>::Builder CarParams::LongitudinalPIDTuning::Builder::initKpV(unsigned int size) {
|
||||
return ::capnp::_::PointerHelpers< ::capnp::List<float, ::capnp::Kind::PRIMITIVE>>::init(_builder.getPointerField(
|
||||
::capnp::bounded<1>() * ::capnp::POINTERS), size);
|
||||
}
|
||||
inline void CarParams::LongitudinalPIDTuning::Builder::adoptKpV(
|
||||
::capnp::Orphan< ::capnp::List<float, ::capnp::Kind::PRIMITIVE>>&& value) {
|
||||
::capnp::_::PointerHelpers< ::capnp::List<float, ::capnp::Kind::PRIMITIVE>>::adopt(_builder.getPointerField(
|
||||
::capnp::bounded<1>() * ::capnp::POINTERS), kj::mv(value));
|
||||
}
|
||||
inline ::capnp::Orphan< ::capnp::List<float, ::capnp::Kind::PRIMITIVE>> CarParams::LongitudinalPIDTuning::Builder::disownKpV() {
|
||||
return ::capnp::_::PointerHelpers< ::capnp::List<float, ::capnp::Kind::PRIMITIVE>>::disown(_builder.getPointerField(
|
||||
::capnp::bounded<1>() * ::capnp::POINTERS));
|
||||
}
|
||||
|
||||
inline bool CarParams::LongitudinalPIDTuning::Reader::hasKiBP() const {
|
||||
return !_reader.getPointerField(
|
||||
::capnp::bounded<2>() * ::capnp::POINTERS).isNull();
|
||||
@@ -9129,82 +9182,23 @@ inline ::capnp::Orphan< ::capnp::List<float, ::capnp::Kind::PRIMITIVE>> CarPara
|
||||
::capnp::bounded<3>() * ::capnp::POINTERS));
|
||||
}
|
||||
|
||||
inline bool CarParams::LongitudinalPIDTuning::Deprecated::Reader::hasKpBP() const {
|
||||
return !_reader.getPointerField(
|
||||
::capnp::bounded<0>() * ::capnp::POINTERS).isNull();
|
||||
inline typename CarParams::LongitudinalPIDTuning::Deprecated::Reader CarParams::LongitudinalPIDTuning::Reader::getDeprecated() const {
|
||||
return typename CarParams::LongitudinalPIDTuning::Deprecated::Reader(_reader);
|
||||
}
|
||||
inline bool CarParams::LongitudinalPIDTuning::Deprecated::Builder::hasKpBP() {
|
||||
return !_builder.getPointerField(
|
||||
::capnp::bounded<0>() * ::capnp::POINTERS).isNull();
|
||||
inline typename CarParams::LongitudinalPIDTuning::Deprecated::Builder CarParams::LongitudinalPIDTuning::Builder::getDeprecated() {
|
||||
return typename CarParams::LongitudinalPIDTuning::Deprecated::Builder(_builder);
|
||||
}
|
||||
inline ::capnp::List<float, ::capnp::Kind::PRIMITIVE>::Reader CarParams::LongitudinalPIDTuning::Deprecated::Reader::getKpBP() const {
|
||||
return ::capnp::_::PointerHelpers< ::capnp::List<float, ::capnp::Kind::PRIMITIVE>>::get(_reader.getPointerField(
|
||||
::capnp::bounded<0>() * ::capnp::POINTERS));
|
||||
#if !CAPNP_LITE
|
||||
inline typename CarParams::LongitudinalPIDTuning::Deprecated::Pipeline CarParams::LongitudinalPIDTuning::Pipeline::getDeprecated() {
|
||||
return typename CarParams::LongitudinalPIDTuning::Deprecated::Pipeline(_typeless.noop());
|
||||
}
|
||||
inline ::capnp::List<float, ::capnp::Kind::PRIMITIVE>::Builder CarParams::LongitudinalPIDTuning::Deprecated::Builder::getKpBP() {
|
||||
return ::capnp::_::PointerHelpers< ::capnp::List<float, ::capnp::Kind::PRIMITIVE>>::get(_builder.getPointerField(
|
||||
::capnp::bounded<0>() * ::capnp::POINTERS));
|
||||
#endif // !CAPNP_LITE
|
||||
inline typename CarParams::LongitudinalPIDTuning::Deprecated::Builder CarParams::LongitudinalPIDTuning::Builder::initDeprecated() {
|
||||
_builder.setDataField< ::uint32_t>(::capnp::bounded<0>() * ::capnp::ELEMENTS, 0);
|
||||
_builder.getPointerField(::capnp::bounded<4>() * ::capnp::POINTERS).clear();
|
||||
_builder.getPointerField(::capnp::bounded<5>() * ::capnp::POINTERS).clear();
|
||||
return typename CarParams::LongitudinalPIDTuning::Deprecated::Builder(_builder);
|
||||
}
|
||||
inline void CarParams::LongitudinalPIDTuning::Deprecated::Builder::setKpBP( ::capnp::List<float, ::capnp::Kind::PRIMITIVE>::Reader value) {
|
||||
::capnp::_::PointerHelpers< ::capnp::List<float, ::capnp::Kind::PRIMITIVE>>::set(_builder.getPointerField(
|
||||
::capnp::bounded<0>() * ::capnp::POINTERS), value);
|
||||
}
|
||||
inline void CarParams::LongitudinalPIDTuning::Deprecated::Builder::setKpBP(::kj::ArrayPtr<const float> value) {
|
||||
::capnp::_::PointerHelpers< ::capnp::List<float, ::capnp::Kind::PRIMITIVE>>::set(_builder.getPointerField(
|
||||
::capnp::bounded<0>() * ::capnp::POINTERS), value);
|
||||
}
|
||||
inline ::capnp::List<float, ::capnp::Kind::PRIMITIVE>::Builder CarParams::LongitudinalPIDTuning::Deprecated::Builder::initKpBP(unsigned int size) {
|
||||
return ::capnp::_::PointerHelpers< ::capnp::List<float, ::capnp::Kind::PRIMITIVE>>::init(_builder.getPointerField(
|
||||
::capnp::bounded<0>() * ::capnp::POINTERS), size);
|
||||
}
|
||||
inline void CarParams::LongitudinalPIDTuning::Deprecated::Builder::adoptKpBP(
|
||||
::capnp::Orphan< ::capnp::List<float, ::capnp::Kind::PRIMITIVE>>&& value) {
|
||||
::capnp::_::PointerHelpers< ::capnp::List<float, ::capnp::Kind::PRIMITIVE>>::adopt(_builder.getPointerField(
|
||||
::capnp::bounded<0>() * ::capnp::POINTERS), kj::mv(value));
|
||||
}
|
||||
inline ::capnp::Orphan< ::capnp::List<float, ::capnp::Kind::PRIMITIVE>> CarParams::LongitudinalPIDTuning::Deprecated::Builder::disownKpBP() {
|
||||
return ::capnp::_::PointerHelpers< ::capnp::List<float, ::capnp::Kind::PRIMITIVE>>::disown(_builder.getPointerField(
|
||||
::capnp::bounded<0>() * ::capnp::POINTERS));
|
||||
}
|
||||
|
||||
inline bool CarParams::LongitudinalPIDTuning::Deprecated::Reader::hasKpV() const {
|
||||
return !_reader.getPointerField(
|
||||
::capnp::bounded<1>() * ::capnp::POINTERS).isNull();
|
||||
}
|
||||
inline bool CarParams::LongitudinalPIDTuning::Deprecated::Builder::hasKpV() {
|
||||
return !_builder.getPointerField(
|
||||
::capnp::bounded<1>() * ::capnp::POINTERS).isNull();
|
||||
}
|
||||
inline ::capnp::List<float, ::capnp::Kind::PRIMITIVE>::Reader CarParams::LongitudinalPIDTuning::Deprecated::Reader::getKpV() const {
|
||||
return ::capnp::_::PointerHelpers< ::capnp::List<float, ::capnp::Kind::PRIMITIVE>>::get(_reader.getPointerField(
|
||||
::capnp::bounded<1>() * ::capnp::POINTERS));
|
||||
}
|
||||
inline ::capnp::List<float, ::capnp::Kind::PRIMITIVE>::Builder CarParams::LongitudinalPIDTuning::Deprecated::Builder::getKpV() {
|
||||
return ::capnp::_::PointerHelpers< ::capnp::List<float, ::capnp::Kind::PRIMITIVE>>::get(_builder.getPointerField(
|
||||
::capnp::bounded<1>() * ::capnp::POINTERS));
|
||||
}
|
||||
inline void CarParams::LongitudinalPIDTuning::Deprecated::Builder::setKpV( ::capnp::List<float, ::capnp::Kind::PRIMITIVE>::Reader value) {
|
||||
::capnp::_::PointerHelpers< ::capnp::List<float, ::capnp::Kind::PRIMITIVE>>::set(_builder.getPointerField(
|
||||
::capnp::bounded<1>() * ::capnp::POINTERS), value);
|
||||
}
|
||||
inline void CarParams::LongitudinalPIDTuning::Deprecated::Builder::setKpV(::kj::ArrayPtr<const float> value) {
|
||||
::capnp::_::PointerHelpers< ::capnp::List<float, ::capnp::Kind::PRIMITIVE>>::set(_builder.getPointerField(
|
||||
::capnp::bounded<1>() * ::capnp::POINTERS), value);
|
||||
}
|
||||
inline ::capnp::List<float, ::capnp::Kind::PRIMITIVE>::Builder CarParams::LongitudinalPIDTuning::Deprecated::Builder::initKpV(unsigned int size) {
|
||||
return ::capnp::_::PointerHelpers< ::capnp::List<float, ::capnp::Kind::PRIMITIVE>>::init(_builder.getPointerField(
|
||||
::capnp::bounded<1>() * ::capnp::POINTERS), size);
|
||||
}
|
||||
inline void CarParams::LongitudinalPIDTuning::Deprecated::Builder::adoptKpV(
|
||||
::capnp::Orphan< ::capnp::List<float, ::capnp::Kind::PRIMITIVE>>&& value) {
|
||||
::capnp::_::PointerHelpers< ::capnp::List<float, ::capnp::Kind::PRIMITIVE>>::adopt(_builder.getPointerField(
|
||||
::capnp::bounded<1>() * ::capnp::POINTERS), kj::mv(value));
|
||||
}
|
||||
inline ::capnp::Orphan< ::capnp::List<float, ::capnp::Kind::PRIMITIVE>> CarParams::LongitudinalPIDTuning::Deprecated::Builder::disownKpV() {
|
||||
return ::capnp::_::PointerHelpers< ::capnp::List<float, ::capnp::Kind::PRIMITIVE>>::disown(_builder.getPointerField(
|
||||
::capnp::bounded<1>() * ::capnp::POINTERS));
|
||||
}
|
||||
|
||||
inline bool CarParams::LongitudinalPIDTuning::Deprecated::Reader::hasDeadzoneBP() const {
|
||||
return !_reader.getPointerField(
|
||||
::capnp::bounded<4>() * ::capnp::POINTERS).isNull();
|
||||
|
||||
Binary file not shown.
@@ -15,7 +15,7 @@ public:
|
||||
|
||||
static std::string get_serial() { return "cccccc"; }
|
||||
|
||||
static std::map<std::string, std::string> get_init_logs(bool route_log = false) {
|
||||
static std::map<std::string, std::string> get_init_logs() {
|
||||
return {};
|
||||
}
|
||||
|
||||
|
||||
@@ -59,7 +59,7 @@ public:
|
||||
std::ofstream("/sys/class/leds/led:switch_2/brightness") << value << "\n";
|
||||
}
|
||||
|
||||
static std::map<std::string, std::string> get_init_logs(bool route_log = false) {
|
||||
static std::map<std::string, std::string> get_init_logs() {
|
||||
std::map<std::string, std::string> ret = {
|
||||
{"/BUILD", util::read_file("/BUILD")},
|
||||
{"lsblk", util::check_output("lsblk -o NAME,SIZE,STATE,VENDOR,MODEL,REV,SERIAL")},
|
||||
@@ -73,14 +73,12 @@ public:
|
||||
temp.erase(temp.find_last_not_of(std::string("\0\r\n", 3))+1);
|
||||
ret["boot temp"] = temp;
|
||||
|
||||
// TODO: these are too slow to do on route log inits. need to do it async?
|
||||
if (!route_log) {
|
||||
for (std::string part : {"xbl", "abl", "aop", "devcfg", "xbl_config"}) {
|
||||
for (std::string slot : {"a", "b"}) {
|
||||
std::string partition = part + "_" + slot;
|
||||
std::string hash = util::check_output("sha256sum /dev/disk/by-partlabel/" + partition);
|
||||
ret[partition] = hash.substr(0, hash.find_first_of(" "));
|
||||
}
|
||||
// TODO: log something from system and boot
|
||||
for (std::string part : {"xbl", "abl", "aop", "devcfg", "xbl_config"}) {
|
||||
for (std::string slot : {"a", "b"}) {
|
||||
std::string partition = part + "_" + slot;
|
||||
std::string hash = util::check_output("sha256sum /dev/disk/by-partlabel/" + partition);
|
||||
ret[partition] = hash.substr(0, hash.find_first_of(" "));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Binary file not shown.
@@ -91,10 +91,10 @@ inline static std::unordered_map<std::string, ParamKeyAttributes> keys = {
|
||||
{"ObdMultiplexingChanged", {CLEAR_ON_MANAGER_START | CLEAR_ON_ONROAD_TRANSITION, BOOL}},
|
||||
{"ObdMultiplexingEnabled", {CLEAR_ON_MANAGER_START | CLEAR_ON_ONROAD_TRANSITION, BOOL}},
|
||||
{"Offroad_CarUnrecognized", {CLEAR_ON_MANAGER_START | CLEAR_ON_ONROAD_TRANSITION, JSON}},
|
||||
{"Offroad_ChestnutBranch", {CLEAR_ON_MANAGER_START, JSON}},
|
||||
{"Offroad_ConnectivityNeeded", {CLEAR_ON_MANAGER_START, JSON}},
|
||||
{"Offroad_ConnectivityNeededPrompt", {CLEAR_ON_MANAGER_START, JSON}},
|
||||
{"Offroad_ExcessiveActuation", {PERSISTENT, JSON}},
|
||||
{"Offroad_NeosUpdate", {CLEAR_ON_MANAGER_START, JSON}},
|
||||
{"Offroad_NoFirmware", {CLEAR_ON_MANAGER_START | CLEAR_ON_ONROAD_TRANSITION, JSON}},
|
||||
{"Offroad_Recalibration", {CLEAR_ON_MANAGER_START | CLEAR_ON_ONROAD_TRANSITION, JSON}},
|
||||
{"Offroad_TemperatureTooHigh", {CLEAR_ON_MANAGER_START, JSON}},
|
||||
@@ -195,14 +195,11 @@ inline static std::unordered_map<std::string, ParamKeyAttributes> keys = {
|
||||
|
||||
// Model Manager params
|
||||
{"ModelManager_ActiveBundle", {PERSISTENT, JSON}},
|
||||
{"ModelManager_ActiveJson", {CLEAR_ON_MANAGER_START, STRING}},
|
||||
{"ModelManager_ClearCache", {CLEAR_ON_MANAGER_START, BOOL}},
|
||||
{"ModelManager_DownloadIndex", {CLEAR_ON_MANAGER_START | CLEAR_ON_ONROAD_TRANSITION, INT}},
|
||||
{"ModelManager_Favs", {PERSISTENT | BACKUP, STRING}},
|
||||
{"ModelManager_LastSyncTime", {CLEAR_ON_MANAGER_START | CLEAR_ON_OFFROAD_TRANSITION, INT, "0"}},
|
||||
{"ModelManager_LastSyncTime_USBGPU", {CLEAR_ON_MANAGER_START | CLEAR_ON_OFFROAD_TRANSITION, INT, "0"}},
|
||||
{"ModelManager_ModelsCache", {PERSISTENT | BACKUP, JSON}},
|
||||
{"ModelManager_ModelsCache_USBGPU", {PERSISTENT | BACKUP, JSON}},
|
||||
|
||||
// Neural Network Lateral Control
|
||||
{"NeuralNetworkLateralControl", {PERSISTENT | BACKUP, BOOL, "0"}},
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 1.5 KiB |
@@ -44,7 +44,8 @@ class LongControl:
|
||||
self.CP = CP
|
||||
self.CP_SP = CP_SP
|
||||
self.long_control_state = LongCtrlState.off
|
||||
self.pid = PIDController(0.0, (CP.longitudinalTuning.kiBP, CP.longitudinalTuning.kiV),
|
||||
self.pid = PIDController((CP.longitudinalTuning.kpBP, CP.longitudinalTuning.kpV),
|
||||
(CP.longitudinalTuning.kiBP, CP.longitudinalTuning.kiV),
|
||||
rate=1 / DT_CTRL)
|
||||
self.last_output_accel = 0.0
|
||||
|
||||
|
||||
@@ -1,524 +0,0 @@
|
||||
{
|
||||
"acados_include_path": "/usr/local/venv/lib/python3.12/site-packages/acados/install/include",
|
||||
"acados_lib_path": "/usr/local/venv/lib/python3.12/site-packages/acados/install/lib",
|
||||
"code_export_directory": "/data/openpilot/openpilot/selfdrive/controls/lib/longitudinal_mpc_lib/c_generated_code",
|
||||
"constraints": {
|
||||
"C": [],
|
||||
"C_e": [],
|
||||
"D": [],
|
||||
"constr_type": "BGH",
|
||||
"constr_type_e": "BGH",
|
||||
"idxbu": [],
|
||||
"idxbx": [],
|
||||
"idxbx_0": [
|
||||
0,
|
||||
1,
|
||||
2
|
||||
],
|
||||
"idxbx_e": [],
|
||||
"idxbxe_0": [
|
||||
0,
|
||||
1,
|
||||
2
|
||||
],
|
||||
"idxsbu": [],
|
||||
"idxsbx": [],
|
||||
"idxsbx_e": [],
|
||||
"idxsg": [],
|
||||
"idxsg_e": [],
|
||||
"idxsh": [
|
||||
0,
|
||||
1,
|
||||
2,
|
||||
3
|
||||
],
|
||||
"idxsh_e": [],
|
||||
"idxsphi": [],
|
||||
"idxsphi_e": [],
|
||||
"lbu": [],
|
||||
"lbx": [],
|
||||
"lbx_0": [
|
||||
0.0,
|
||||
0.0,
|
||||
0.0
|
||||
],
|
||||
"lbx_e": [],
|
||||
"lg": [],
|
||||
"lg_e": [],
|
||||
"lh": [
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0
|
||||
],
|
||||
"lh_e": [],
|
||||
"lphi": [],
|
||||
"lphi_e": [],
|
||||
"lsbu": [],
|
||||
"lsbx": [],
|
||||
"lsbx_e": [],
|
||||
"lsg": [],
|
||||
"lsg_e": [],
|
||||
"lsh": [
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0
|
||||
],
|
||||
"lsh_e": [],
|
||||
"lsphi": [],
|
||||
"lsphi_e": [],
|
||||
"ubu": [],
|
||||
"ubx": [],
|
||||
"ubx_0": [
|
||||
0.0,
|
||||
0.0,
|
||||
0.0
|
||||
],
|
||||
"ubx_e": [],
|
||||
"ug": [],
|
||||
"ug_e": [],
|
||||
"uh": [
|
||||
10000.0,
|
||||
10000.0,
|
||||
10000.0,
|
||||
10000.0
|
||||
],
|
||||
"uh_e": [],
|
||||
"uphi": [],
|
||||
"uphi_e": [],
|
||||
"usbu": [],
|
||||
"usbx": [],
|
||||
"usbx_e": [],
|
||||
"usg": [],
|
||||
"usg_e": [],
|
||||
"ush": [
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0
|
||||
],
|
||||
"ush_e": [],
|
||||
"usphi": [],
|
||||
"usphi_e": []
|
||||
},
|
||||
"cost": {
|
||||
"Vu": [],
|
||||
"Vu_0": [],
|
||||
"Vx": [],
|
||||
"Vx_0": [],
|
||||
"Vx_e": [],
|
||||
"Vz": [],
|
||||
"Vz_0": [],
|
||||
"W": [
|
||||
[
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0
|
||||
],
|
||||
[
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0
|
||||
],
|
||||
[
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0
|
||||
],
|
||||
[
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0
|
||||
],
|
||||
[
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0
|
||||
],
|
||||
[
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0
|
||||
]
|
||||
],
|
||||
"W_0": [
|
||||
[
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0
|
||||
],
|
||||
[
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0
|
||||
],
|
||||
[
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0
|
||||
],
|
||||
[
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0
|
||||
],
|
||||
[
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0
|
||||
],
|
||||
[
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0
|
||||
]
|
||||
],
|
||||
"W_e": [
|
||||
[
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0
|
||||
],
|
||||
[
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0
|
||||
],
|
||||
[
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0
|
||||
],
|
||||
[
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0
|
||||
],
|
||||
[
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0
|
||||
]
|
||||
],
|
||||
"Zl": [
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0
|
||||
],
|
||||
"Zl_e": [],
|
||||
"Zu": [
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0
|
||||
],
|
||||
"Zu_e": [],
|
||||
"cost_ext_fun_type": "casadi",
|
||||
"cost_ext_fun_type_0": "casadi",
|
||||
"cost_ext_fun_type_e": "casadi",
|
||||
"cost_type": "NONLINEAR_LS",
|
||||
"cost_type_0": "NONLINEAR_LS",
|
||||
"cost_type_e": "NONLINEAR_LS",
|
||||
"yref": [
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0
|
||||
],
|
||||
"yref_0": [
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0
|
||||
],
|
||||
"yref_e": [
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0
|
||||
],
|
||||
"zl": [
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0
|
||||
],
|
||||
"zl_e": [],
|
||||
"zu": [
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0
|
||||
],
|
||||
"zu_e": []
|
||||
},
|
||||
"cython_include_dirs": [
|
||||
"/usr/local/venv/lib/python3.12/site-packages/numpy/_core/include",
|
||||
"/usr/include/python3.12"
|
||||
],
|
||||
"dims": {
|
||||
"N": 12,
|
||||
"nbu": 0,
|
||||
"nbx": 0,
|
||||
"nbx_0": 3,
|
||||
"nbx_e": 0,
|
||||
"nbxe_0": 3,
|
||||
"ng": 0,
|
||||
"ng_e": 0,
|
||||
"nh": 4,
|
||||
"nh_e": 0,
|
||||
"np": 6,
|
||||
"nphi": 0,
|
||||
"nphi_e": 0,
|
||||
"nr": 0,
|
||||
"nr_e": 0,
|
||||
"ns": 4,
|
||||
"ns_e": 0,
|
||||
"nsbu": 0,
|
||||
"nsbx": 0,
|
||||
"nsbx_e": 0,
|
||||
"nsg": 0,
|
||||
"nsg_e": 0,
|
||||
"nsh": 4,
|
||||
"nsh_e": 0,
|
||||
"nsphi": 0,
|
||||
"nsphi_e": 0,
|
||||
"nu": 1,
|
||||
"nx": 3,
|
||||
"ny": 6,
|
||||
"ny_0": 6,
|
||||
"ny_e": 5,
|
||||
"nz": 0
|
||||
},
|
||||
"json_file": "/data/openpilot/openpilot/selfdrive/controls/lib/longitudinal_mpc_lib/acados_ocp_long.json",
|
||||
"model": {
|
||||
"con_h_expr": "jhpnnagiieahaaaadaaaaaaaaaaaaaaaaaegiaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaacaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaegpcaaaaaaaaaaaaaafaaaaaaaghpffghgpgegcaaaaaaaaaaaaaaaegpcaaaaaaaaaaaaaafaaaaaaabgpffghgpgegpcaaaaaaaaaaaaaafaaaaaaabgpfngjgogegcaaaaaaaaaaaaaaaegpcaaaaaaaaaaaaaafaaaaaaabgpfngbgihchcaaaaaaaaaaaaaaaegeaaaaaaaaaaaaaaaegcaaaaaaaaaaaaaaaegcaaaaaaaaaaaaaaaegpcaaaaaaaaaaaaaakaaaaaaaihpfpgcgdhehbgdgmgfgegpcaaaaaaaaaaaaaafaaaaaaaihpffghgpgegdaaaaaaaaaaaaaaaegpcaaaaaaaaaaaaaacbaaaaaamgfgbgegpfegbgoghgfgchpfggbgdgehpgchegbaaaaaaaaaaaaaaaegbaaaaaaaaaaaaaaaegeaaaaaaaaaaaaaaaeglaaaaaaaaaaaaaaachbaaaaaaaaaaaaaaaegmcaaaaaaaaaaaaaajgfaaaaaaaegdaaaaaaaaaaaaaaaegpcaaaaaaaaaaaaaanaaaaaaamgfgbgegpfehpfggpgmgmgpghhchbaaaaaaaaaaaaaaaegmcaaaaaaaaaaaaaajggaaaaaaaegbaaaaaaaaaaaaaaachbaaaaaaaaaaaaaaaegmcaaaaaaaaaaaaaajgkaaaaaaa",
|
||||
"con_h_expr_e": null,
|
||||
"con_phi_expr": null,
|
||||
"con_phi_expr_e": null,
|
||||
"con_r_expr": null,
|
||||
"con_r_expr_e": null,
|
||||
"con_r_in_phi": null,
|
||||
"con_r_in_phi_e": null,
|
||||
"cost_conl_custom_outer_hess": null,
|
||||
"cost_conl_custom_outer_hess_0": null,
|
||||
"cost_conl_custom_outer_hess_e": null,
|
||||
"cost_expr_ext_cost": null,
|
||||
"cost_expr_ext_cost_0": null,
|
||||
"cost_expr_ext_cost_custom_hess": null,
|
||||
"cost_expr_ext_cost_custom_hess_0": null,
|
||||
"cost_expr_ext_cost_custom_hess_e": null,
|
||||
"cost_expr_ext_cost_e": null,
|
||||
"cost_psi_expr": null,
|
||||
"cost_psi_expr_0": null,
|
||||
"cost_psi_expr_e": null,
|
||||
"cost_r_in_psi_expr": null,
|
||||
"cost_r_in_psi_expr_0": null,
|
||||
"cost_r_in_psi_expr_e": null,
|
||||
"cost_y_expr": "jhpnnagiieahaaaadaaaaaaaaaaaaaaaaaegkaaaaaaaaaaaaaaagaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaacaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaafaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaegeaaaaaaaaaaaaaaaegcaaaaaaaaaaaaaaaegcaaaaaaaaaaaaaaaegpcaaaaaaaaaaaaaakaaaaaaaihpfpgcgdhehbgdgmgfgegpcaaaaaaaaaaaaaafaaaaaaaihpffghgpgegbaaaaaaaaaaaaaaaegbaaaaaaaaaaaaaaaegeaaaaaaaaaaaaaaaeglaaaaaaaaaaaaaaaegpcaaaaaaaaaaaaaafaaaaaaaghpffghgpgegmcaaaaaaaaaaaaaajgfaaaaaaaegdaaaaaaaaaaaaaaaegpcaaaaaaaaaaaaaanaaaaaaamgfgbgegpfehpfggpgmgmgpghhcheaaaaaaaaaaaaaaaegmcaaaaaaaaaaaaaajggaaaaaaaegbaaaaaaaaaaaaaaacheaaaaaaaaaaaaaaaegmcaaaaaaaaaaaaaajgkaaaaaaachcaaaaaaaaaaaaaaacheaaaaaaaaaaaaaaaegpcaaaaaaaaaaaaaafaaaaaaabgpffghgpgegcaaaaaaaaaaaaaaachbbaaaaaaaaaaaaaaegpcaaaaaaaaaaaaaagaaaaaaabgpfahchfgghegpcaaaaaaaaaaaaaafaaaaaaakgpffghgpg",
|
||||
"cost_y_expr_0": "jhpnnagiieahaaaadaaaaaaaaaaaaaaaaaegkaaaaaaaaaaaaaaagaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaacaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaafaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaegeaaaaaaaaaaaaaaaegcaaaaaaaaaaaaaaaegcaaaaaaaaaaaaaaaegpcaaaaaaaaaaaaaakaaaaaaaihpfpgcgdhehbgdgmgfgegpcaaaaaaaaaaaaaafaaaaaaaihpffghgpgegbaaaaaaaaaaaaaaaegbaaaaaaaaaaaaaaaegeaaaaaaaaaaaaaaaeglaaaaaaaaaaaaaaaegpcaaaaaaaaaaaaaafaaaaaaaghpffghgpgegmcaaaaaaaaaaaaaajgfaaaaaaaegdaaaaaaaaaaaaaaaegpcaaaaaaaaaaaaaanaaaaaaamgfgbgegpfehpfggpgmgmgpghhcheaaaaaaaaaaaaaaaegmcaaaaaaaaaaaaaajggaaaaaaaegbaaaaaaaaaaaaaaacheaaaaaaaaaaaaaaaegmcaaaaaaaaaaaaaajgkaaaaaaachcaaaaaaaaaaaaaaacheaaaaaaaaaaaaaaaegpcaaaaaaaaaaaaaafaaaaaaabgpffghgpgegcaaaaaaaaaaaaaaachbbaaaaaaaaaaaaaaegpcaaaaaaaaaaaaaagaaaaaaabgpfahchfgghegpcaaaaaaaaaaaaaafaaaaaaakgpffghgpg",
|
||||
"cost_y_expr_e": "jhpnnagiieahaaaadaaaaaaaaaaaaaaaaaegjaaaaaaaaaaaaaaafaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaacaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaegeaaaaaaaaaaaaaaaegcaaaaaaaaaaaaaaaegcaaaaaaaaaaaaaaaegpcaaaaaaaaaaaaaakaaaaaaaihpfpgcgdhehbgdgmgfgegpcaaaaaaaaaaaaaafaaaaaaaihpffghgpgegbaaaaaaaaaaaaaaaegbaaaaaaaaaaaaaaaegeaaaaaaaaaaaaaaaeglaaaaaaaaaaaaaaaegpcaaaaaaaaaaaaaafaaaaaaaghpffghgpgegmcaaaaaaaaaaaaaajgfaaaaaaaegdaaaaaaaaaaaaaaaegpcaaaaaaaaaaaaaanaaaaaaamgfgbgegpfehpfggpgmgmgpghhcheaaaaaaaaaaaaaaaegmcaaaaaaaaaaaaaajggaaaaaaaegbaaaaaaaaaaaaaaacheaaaaaaaaaaaaaaaegmcaaaaaaaaaaaaaajgkaaaaaaachcaaaaaaaaaaaaaaacheaaaaaaaaaaaaaaaegpcaaaaaaaaaaaaaafaaaaaaabgpffghgpgegcaaaaaaaaaaaaaaachbbaaaaaaaaaaaaaaegpcaaaaaaaaaaaaaagaaaaaaabgpfahchfggh",
|
||||
"disc_dyn_expr": null,
|
||||
"dyn_disc_fun": null,
|
||||
"dyn_disc_fun_jac": null,
|
||||
"dyn_disc_fun_jac_hess": null,
|
||||
"dyn_ext_fun_type": "casadi",
|
||||
"dyn_generic_source": null,
|
||||
"f_expl_expr": "jhpnnagiieahaaaadaaaaaaaaaaaaaaaaaeghaaaaaaaaaaaaaaadaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaacaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaegpcaaaaaaaaaaaaaafaaaaaaaghpffghgpgegpcaaaaaaaaaaaaaafaaaaaaabgpffghgpgegpcaaaaaaaaaaaaaafaaaaaaakgpffghgpg",
|
||||
"f_impl_expr": "jhpnnagiieahaaaadaaaaaaaaaaaaaaaaaeghaaaaaaaaaaaaaaadaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaacaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaegcaaaaaaaaaaaaaaaegpcaaaaaaaaaaaaaajaaaaaaaihpffghgpgpfegpgehegpcaaaaaaaaaaaaaafaaaaaaaghpffghgpgegcaaaaaaaaaaaaaaaegpcaaaaaaaaaaaaaajaaaaaaaghpffghgpgpfegpgehegpcaaaaaaaaaaaaaafaaaaaaabgpffghgpgegcaaaaaaaaaaaaaaaegpcaaaaaaaaaaaaaajaaaaaaabgpffghgpgpfegpgehegpcaaaaaaaaaaaaaafaaaaaaakgpffghgpg",
|
||||
"gnsf": {
|
||||
"nontrivial_f_LO": 1,
|
||||
"purely_linear": 0
|
||||
},
|
||||
"name": "long",
|
||||
"p": "jhpnnagiieahaaaadaaaaaaaaaaaaaaaaaegkaaaaaaaaaaaaaaagaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaacaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaafaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaegpcaaaaaaaaaaaaaafaaaaaaabgpfngjgogegpcaaaaaaaaaaaaaafaaaaaaabgpfngbgihegpcaaaaaaaaaaaaaakaaaaaaaihpfpgcgdhehbgdgmgfgegpcaaaaaaaaaaaaaagaaaaaaabgpfahchfgghegpcaaaaaaaaaaaaaanaaaaaaamgfgbgegpfehpfggpgmgmgpghhegpcaaaaaaaaaaaaaacbaaaaaamgfgbgegpfegbgoghgfgchpfggbgdgehpgch",
|
||||
"u": "jhpnnagiieahaaaadaaaaaaaaaaaaaaaaaegfaaaaaaaaaaaaaaabaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaegpcaaaaaaaaaaaaaafaaaaaaakgpffghgpg",
|
||||
"x": "jhpnnagiieahaaaadaaaaaaaaaaaaaaaaaeghaaaaaaaaaaaaaaadaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaacaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaegpcaaaaaaaaaaaaaafaaaaaaaihpffghgpgegpcaaaaaaaaaaaaaafaaaaaaaghpffghgpgegpcaaaaaaaaaaaaaafaaaaaaabgpffghgpg",
|
||||
"xdot": "jhpnnagiieahaaaadaaaaaaaaaaaaaaaaaeghaaaaaaaaaaaaaaadaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaacaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaegpcaaaaaaaaaaaaaajaaaaaaaihpffghgpgpfegpgehegpcaaaaaaaaaaaaaajaaaaaaaghpffghgpgpfegpgehegpcaaaaaaaaaaaaaajaaaaaaabgpffghgpgpfegpgeh",
|
||||
"z": "jhpnnagiieahaaaadaaaaaaaaaaaaaaaaaegdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
||||
},
|
||||
"parameter_values": [
|
||||
-1.2,
|
||||
1.2,
|
||||
0.0,
|
||||
0.0,
|
||||
1.45,
|
||||
0.75
|
||||
],
|
||||
"problem_class": "OCP",
|
||||
"shared_lib_ext": ".so",
|
||||
"solver_options": {
|
||||
"Tsim": 0.06944444444444445,
|
||||
"alpha_min": 0.05,
|
||||
"alpha_reduction": 0.7,
|
||||
"collocation_type": "GAUSS_LEGENDRE",
|
||||
"custom_templates": [],
|
||||
"custom_update_copy": true,
|
||||
"custom_update_filename": "",
|
||||
"custom_update_header_filename": "",
|
||||
"eps_sufficient_descent": 0.0001,
|
||||
"exact_hess_constr": 1,
|
||||
"exact_hess_cost": 1,
|
||||
"exact_hess_dyn": 1,
|
||||
"ext_cost_num_hess": 0,
|
||||
"ext_fun_compile_flags": "-O2",
|
||||
"full_step_dual": 0,
|
||||
"globalization": "FIXED_STEP",
|
||||
"globalization_use_SOC": 0,
|
||||
"hessian_approx": "GAUSS_NEWTON",
|
||||
"hpipm_mode": "BALANCE",
|
||||
"initialize_t_slacks": 0,
|
||||
"integrator_type": "ERK",
|
||||
"levenberg_marquardt": 0.0,
|
||||
"line_search_use_sufficient_descent": 0,
|
||||
"model_external_shared_lib_dir": null,
|
||||
"model_external_shared_lib_name": null,
|
||||
"nlp_solver_ext_qp_res": 0,
|
||||
"nlp_solver_max_iter": 100,
|
||||
"nlp_solver_step_length": 1.0,
|
||||
"nlp_solver_tol_comp": 1e-06,
|
||||
"nlp_solver_tol_eq": 1e-06,
|
||||
"nlp_solver_tol_ineq": 1e-06,
|
||||
"nlp_solver_tol_stat": 1e-06,
|
||||
"nlp_solver_type": "SQP_RTI",
|
||||
"print_level": 0,
|
||||
"qp_solver": "PARTIAL_CONDENSING_HPIPM",
|
||||
"qp_solver_cond_N": 1,
|
||||
"qp_solver_cond_ric_alg": 1,
|
||||
"qp_solver_iter_max": 10,
|
||||
"qp_solver_ric_alg": 1,
|
||||
"qp_solver_tol_comp": 0.001,
|
||||
"qp_solver_tol_eq": 0.001,
|
||||
"qp_solver_tol_ineq": 0.001,
|
||||
"qp_solver_tol_stat": 0.001,
|
||||
"qp_solver_warm_start": 0,
|
||||
"regularize_method": null,
|
||||
"shooting_nodes": [
|
||||
0.0,
|
||||
0.06944444444444445,
|
||||
0.2777777777777778,
|
||||
0.625,
|
||||
1.1111111111111112,
|
||||
1.7361111111111114,
|
||||
2.5,
|
||||
3.4027777777777786,
|
||||
4.444444444444445,
|
||||
5.625,
|
||||
6.9444444444444455,
|
||||
8.402777777777777,
|
||||
10.0
|
||||
],
|
||||
"sim_method_jac_reuse": [
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"sim_method_newton_iter": 3,
|
||||
"sim_method_newton_tol": 0.0,
|
||||
"sim_method_num_stages": [
|
||||
4,
|
||||
4,
|
||||
4,
|
||||
4,
|
||||
4,
|
||||
4,
|
||||
4,
|
||||
4,
|
||||
4,
|
||||
4,
|
||||
4,
|
||||
4
|
||||
],
|
||||
"sim_method_num_steps": [
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
1
|
||||
],
|
||||
"tf": 10.0,
|
||||
"time_steps": [
|
||||
0.06944444444444445,
|
||||
0.20833333333333334,
|
||||
0.3472222222222222,
|
||||
0.48611111111111116,
|
||||
0.6250000000000002,
|
||||
0.7638888888888886,
|
||||
0.9027777777777786,
|
||||
1.041666666666666,
|
||||
1.1805555555555554,
|
||||
1.3194444444444455,
|
||||
1.4583333333333313,
|
||||
1.5972222222222232
|
||||
]
|
||||
}
|
||||
}
|
||||
+2843
-2914
File diff suppressed because one or more lines are too long
BIN
Binary file not shown.
BIN
Binary file not shown.
@@ -49,8 +49,9 @@ def get_cruise_accel(e2e, v_cruise, v_ego, a_cruise_prev, angle_steers, CP, dt,
|
||||
max_accel = min(max_accel, coast_limit)
|
||||
|
||||
target_accel = np.clip(v_cruise - v_ego, A_CRUISE_MIN, max_accel)
|
||||
j_cruise = np.interp(v_ego, A_CRUISE_MAX_BP, J_CRUISE_VALS)
|
||||
target_accel = float(np.clip(target_accel, a_cruise_prev - j_cruise * dt, a_cruise_prev + j_cruise * dt))
|
||||
if not e2e:
|
||||
j_cruise = np.interp(v_ego, A_CRUISE_MAX_BP, J_CRUISE_VALS)
|
||||
target_accel = float(np.clip(target_accel, a_cruise_prev - j_cruise * dt, a_cruise_prev + j_cruise * dt))
|
||||
|
||||
return target_accel
|
||||
|
||||
@@ -64,9 +65,10 @@ class LongitudinalPlanner(LongitudinalPlannerSP):
|
||||
self.dt = dt
|
||||
self.allow_throttle = True
|
||||
|
||||
self.a_desired = init_a
|
||||
self.v_desired_filter = FirstOrderFilter(init_v, 2.0, self.dt)
|
||||
self.a_cruise = init_a
|
||||
self.output_a_target = init_a
|
||||
self.a_cruise = 0.0
|
||||
self.output_a_target = 0.0
|
||||
self.output_should_stop = False
|
||||
|
||||
self.v_desired_trajectory = np.zeros(CONTROL_N)
|
||||
@@ -103,8 +105,7 @@ class LongitudinalPlanner(LongitudinalPlannerSP):
|
||||
|
||||
if reset_state:
|
||||
self.v_desired_filter.x = v_ego
|
||||
self.output_a_target = np.clip(sm['carState'].aEgo, ACCEL_MIN, ACCEL_MAX)
|
||||
self.a_cruise = self.output_a_target
|
||||
self.a_desired = np.clip(sm['carState'].aEgo, ACCEL_MIN, ACCEL_MAX)
|
||||
|
||||
# Prevent divergence, smooth in current v_ego
|
||||
self.v_desired_filter.x = max(0.0, self.v_desired_filter.update(v_ego))
|
||||
@@ -112,11 +113,11 @@ class LongitudinalPlanner(LongitudinalPlannerSP):
|
||||
# No change cost when user is controlling the speed, or when standstill
|
||||
prev_accel_constraint = not (reset_state or sm['carState'].standstill)
|
||||
|
||||
# Get new v_cruise and a_target from Smart Cruise Control and Speed Limit Assist
|
||||
v_cruise, self.output_a_target = LongitudinalPlannerSP.update_targets(self, sm, self.v_desired_filter.x, self.output_a_target, v_cruise)
|
||||
# Get new v_cruise and a_desired from Smart Cruise Control and Speed Limit Assist
|
||||
v_cruise, self.a_desired = LongitudinalPlannerSP.update_targets(self, sm, self.v_desired_filter.x, self.a_desired, v_cruise)
|
||||
|
||||
self.mpc.set_weights(prev_accel_constraint, personality=sm['selfdriveState'].personality)
|
||||
self.mpc.set_cur_state(self.v_desired_filter.x, self.output_a_target)
|
||||
self.mpc.set_cur_state(self.v_desired_filter.x, self.a_desired)
|
||||
self.mpc.update(sm['radarState'], personality=sm['selfdriveState'].personality)
|
||||
|
||||
self.v_desired_trajectory = np.interp(CONTROL_N_T_IDX, T_IDXS_MPC, self.mpc.v_solution)
|
||||
@@ -129,7 +130,7 @@ class LongitudinalPlanner(LongitudinalPlannerSP):
|
||||
cloudlog.info("FCW triggered")
|
||||
|
||||
# Save starting point for next iteration
|
||||
a_prev = self.output_a_target
|
||||
a_prev = self.a_desired
|
||||
|
||||
action_t = self.CP.longitudinalActuatorDelay + DT_MDL
|
||||
output_a_target_mpc = get_accel_from_plan(self.v_desired_trajectory, self.a_desired_trajectory, CONTROL_N_T_IDX,
|
||||
@@ -138,22 +139,30 @@ class LongitudinalPlanner(LongitudinalPlannerSP):
|
||||
output_a_target_e2e = sm['modelV2'].action.desiredAcceleration
|
||||
output_should_stop_e2e = sm['modelV2'].action.shouldStop
|
||||
|
||||
is_e2e = self.is_e2e(sm)
|
||||
if self.is_e2e(sm):
|
||||
output_a_target = min(output_a_target_e2e, output_a_target_mpc)
|
||||
self.output_should_stop = output_should_stop_e2e or output_should_stop_mpc
|
||||
if output_a_target < output_a_target_mpc:
|
||||
self.mpc.source = LongitudinalPlanSource.e2e
|
||||
else:
|
||||
output_a_target = output_a_target_mpc
|
||||
self.output_should_stop = output_should_stop_mpc
|
||||
|
||||
self.a_cruise = get_cruise_accel(is_e2e, v_cruise, v_ego,
|
||||
self.a_cruise = get_cruise_accel(sm['selfdriveState'].experimentalMode, v_cruise, v_ego,
|
||||
self.a_cruise, steer_angle_without_offset, self.CP, self.dt,
|
||||
accel_coast, self.allow_throttle)
|
||||
cruise_should_stop = should_stop(v_ego, self.a_cruise)
|
||||
|
||||
candidates = [(output_a_target_mpc, self.mpc.source, output_should_stop_mpc),
|
||||
(self.a_cruise, LongitudinalPlanSource.cruise, cruise_should_stop)]
|
||||
if is_e2e:
|
||||
if sm['selfdriveState'].experimentalMode:
|
||||
candidates.append((output_a_target_e2e, LongitudinalPlanSource.e2e, output_should_stop_e2e))
|
||||
|
||||
output_a_target, self.mpc.source, _ = min(candidates, key=lambda c: c[0])
|
||||
self.output_should_stop = any(should_stop for _, _, should_stop in candidates)
|
||||
self.output_a_target = np.clip(output_a_target, ACCEL_MIN, ACCEL_MAX)
|
||||
|
||||
self.a_desired = float(self.output_a_target)
|
||||
self.v_desired_filter.x = self.v_desired_filter.x + self.dt * (self.output_a_target + a_prev) / 2.0
|
||||
|
||||
def publish(self, sm, pm):
|
||||
|
||||
@@ -45,326 +45,326 @@ const static double MAHA_THRESH_31 = 3.8414588206941227;
|
||||
* *
|
||||
* This file is part of 'ekf' *
|
||||
******************************************************************************/
|
||||
void err_fun(double *nom_x, double *delta_x, double *out_5070392900769873758) {
|
||||
out_5070392900769873758[0] = delta_x[0] + nom_x[0];
|
||||
out_5070392900769873758[1] = delta_x[1] + nom_x[1];
|
||||
out_5070392900769873758[2] = delta_x[2] + nom_x[2];
|
||||
out_5070392900769873758[3] = delta_x[3] + nom_x[3];
|
||||
out_5070392900769873758[4] = delta_x[4] + nom_x[4];
|
||||
out_5070392900769873758[5] = delta_x[5] + nom_x[5];
|
||||
out_5070392900769873758[6] = delta_x[6] + nom_x[6];
|
||||
out_5070392900769873758[7] = delta_x[7] + nom_x[7];
|
||||
out_5070392900769873758[8] = delta_x[8] + nom_x[8];
|
||||
void err_fun(double *nom_x, double *delta_x, double *out_3066078453041735876) {
|
||||
out_3066078453041735876[0] = delta_x[0] + nom_x[0];
|
||||
out_3066078453041735876[1] = delta_x[1] + nom_x[1];
|
||||
out_3066078453041735876[2] = delta_x[2] + nom_x[2];
|
||||
out_3066078453041735876[3] = delta_x[3] + nom_x[3];
|
||||
out_3066078453041735876[4] = delta_x[4] + nom_x[4];
|
||||
out_3066078453041735876[5] = delta_x[5] + nom_x[5];
|
||||
out_3066078453041735876[6] = delta_x[6] + nom_x[6];
|
||||
out_3066078453041735876[7] = delta_x[7] + nom_x[7];
|
||||
out_3066078453041735876[8] = delta_x[8] + nom_x[8];
|
||||
}
|
||||
void inv_err_fun(double *nom_x, double *true_x, double *out_3742760733154016051) {
|
||||
out_3742760733154016051[0] = -nom_x[0] + true_x[0];
|
||||
out_3742760733154016051[1] = -nom_x[1] + true_x[1];
|
||||
out_3742760733154016051[2] = -nom_x[2] + true_x[2];
|
||||
out_3742760733154016051[3] = -nom_x[3] + true_x[3];
|
||||
out_3742760733154016051[4] = -nom_x[4] + true_x[4];
|
||||
out_3742760733154016051[5] = -nom_x[5] + true_x[5];
|
||||
out_3742760733154016051[6] = -nom_x[6] + true_x[6];
|
||||
out_3742760733154016051[7] = -nom_x[7] + true_x[7];
|
||||
out_3742760733154016051[8] = -nom_x[8] + true_x[8];
|
||||
void inv_err_fun(double *nom_x, double *true_x, double *out_7998306431651746749) {
|
||||
out_7998306431651746749[0] = -nom_x[0] + true_x[0];
|
||||
out_7998306431651746749[1] = -nom_x[1] + true_x[1];
|
||||
out_7998306431651746749[2] = -nom_x[2] + true_x[2];
|
||||
out_7998306431651746749[3] = -nom_x[3] + true_x[3];
|
||||
out_7998306431651746749[4] = -nom_x[4] + true_x[4];
|
||||
out_7998306431651746749[5] = -nom_x[5] + true_x[5];
|
||||
out_7998306431651746749[6] = -nom_x[6] + true_x[6];
|
||||
out_7998306431651746749[7] = -nom_x[7] + true_x[7];
|
||||
out_7998306431651746749[8] = -nom_x[8] + true_x[8];
|
||||
}
|
||||
void H_mod_fun(double *state, double *out_5758456641177717920) {
|
||||
out_5758456641177717920[0] = 1.0;
|
||||
out_5758456641177717920[1] = 0.0;
|
||||
out_5758456641177717920[2] = 0.0;
|
||||
out_5758456641177717920[3] = 0.0;
|
||||
out_5758456641177717920[4] = 0.0;
|
||||
out_5758456641177717920[5] = 0.0;
|
||||
out_5758456641177717920[6] = 0.0;
|
||||
out_5758456641177717920[7] = 0.0;
|
||||
out_5758456641177717920[8] = 0.0;
|
||||
out_5758456641177717920[9] = 0.0;
|
||||
out_5758456641177717920[10] = 1.0;
|
||||
out_5758456641177717920[11] = 0.0;
|
||||
out_5758456641177717920[12] = 0.0;
|
||||
out_5758456641177717920[13] = 0.0;
|
||||
out_5758456641177717920[14] = 0.0;
|
||||
out_5758456641177717920[15] = 0.0;
|
||||
out_5758456641177717920[16] = 0.0;
|
||||
out_5758456641177717920[17] = 0.0;
|
||||
out_5758456641177717920[18] = 0.0;
|
||||
out_5758456641177717920[19] = 0.0;
|
||||
out_5758456641177717920[20] = 1.0;
|
||||
out_5758456641177717920[21] = 0.0;
|
||||
out_5758456641177717920[22] = 0.0;
|
||||
out_5758456641177717920[23] = 0.0;
|
||||
out_5758456641177717920[24] = 0.0;
|
||||
out_5758456641177717920[25] = 0.0;
|
||||
out_5758456641177717920[26] = 0.0;
|
||||
out_5758456641177717920[27] = 0.0;
|
||||
out_5758456641177717920[28] = 0.0;
|
||||
out_5758456641177717920[29] = 0.0;
|
||||
out_5758456641177717920[30] = 1.0;
|
||||
out_5758456641177717920[31] = 0.0;
|
||||
out_5758456641177717920[32] = 0.0;
|
||||
out_5758456641177717920[33] = 0.0;
|
||||
out_5758456641177717920[34] = 0.0;
|
||||
out_5758456641177717920[35] = 0.0;
|
||||
out_5758456641177717920[36] = 0.0;
|
||||
out_5758456641177717920[37] = 0.0;
|
||||
out_5758456641177717920[38] = 0.0;
|
||||
out_5758456641177717920[39] = 0.0;
|
||||
out_5758456641177717920[40] = 1.0;
|
||||
out_5758456641177717920[41] = 0.0;
|
||||
out_5758456641177717920[42] = 0.0;
|
||||
out_5758456641177717920[43] = 0.0;
|
||||
out_5758456641177717920[44] = 0.0;
|
||||
out_5758456641177717920[45] = 0.0;
|
||||
out_5758456641177717920[46] = 0.0;
|
||||
out_5758456641177717920[47] = 0.0;
|
||||
out_5758456641177717920[48] = 0.0;
|
||||
out_5758456641177717920[49] = 0.0;
|
||||
out_5758456641177717920[50] = 1.0;
|
||||
out_5758456641177717920[51] = 0.0;
|
||||
out_5758456641177717920[52] = 0.0;
|
||||
out_5758456641177717920[53] = 0.0;
|
||||
out_5758456641177717920[54] = 0.0;
|
||||
out_5758456641177717920[55] = 0.0;
|
||||
out_5758456641177717920[56] = 0.0;
|
||||
out_5758456641177717920[57] = 0.0;
|
||||
out_5758456641177717920[58] = 0.0;
|
||||
out_5758456641177717920[59] = 0.0;
|
||||
out_5758456641177717920[60] = 1.0;
|
||||
out_5758456641177717920[61] = 0.0;
|
||||
out_5758456641177717920[62] = 0.0;
|
||||
out_5758456641177717920[63] = 0.0;
|
||||
out_5758456641177717920[64] = 0.0;
|
||||
out_5758456641177717920[65] = 0.0;
|
||||
out_5758456641177717920[66] = 0.0;
|
||||
out_5758456641177717920[67] = 0.0;
|
||||
out_5758456641177717920[68] = 0.0;
|
||||
out_5758456641177717920[69] = 0.0;
|
||||
out_5758456641177717920[70] = 1.0;
|
||||
out_5758456641177717920[71] = 0.0;
|
||||
out_5758456641177717920[72] = 0.0;
|
||||
out_5758456641177717920[73] = 0.0;
|
||||
out_5758456641177717920[74] = 0.0;
|
||||
out_5758456641177717920[75] = 0.0;
|
||||
out_5758456641177717920[76] = 0.0;
|
||||
out_5758456641177717920[77] = 0.0;
|
||||
out_5758456641177717920[78] = 0.0;
|
||||
out_5758456641177717920[79] = 0.0;
|
||||
out_5758456641177717920[80] = 1.0;
|
||||
void H_mod_fun(double *state, double *out_8410823161376016702) {
|
||||
out_8410823161376016702[0] = 1.0;
|
||||
out_8410823161376016702[1] = 0.0;
|
||||
out_8410823161376016702[2] = 0.0;
|
||||
out_8410823161376016702[3] = 0.0;
|
||||
out_8410823161376016702[4] = 0.0;
|
||||
out_8410823161376016702[5] = 0.0;
|
||||
out_8410823161376016702[6] = 0.0;
|
||||
out_8410823161376016702[7] = 0.0;
|
||||
out_8410823161376016702[8] = 0.0;
|
||||
out_8410823161376016702[9] = 0.0;
|
||||
out_8410823161376016702[10] = 1.0;
|
||||
out_8410823161376016702[11] = 0.0;
|
||||
out_8410823161376016702[12] = 0.0;
|
||||
out_8410823161376016702[13] = 0.0;
|
||||
out_8410823161376016702[14] = 0.0;
|
||||
out_8410823161376016702[15] = 0.0;
|
||||
out_8410823161376016702[16] = 0.0;
|
||||
out_8410823161376016702[17] = 0.0;
|
||||
out_8410823161376016702[18] = 0.0;
|
||||
out_8410823161376016702[19] = 0.0;
|
||||
out_8410823161376016702[20] = 1.0;
|
||||
out_8410823161376016702[21] = 0.0;
|
||||
out_8410823161376016702[22] = 0.0;
|
||||
out_8410823161376016702[23] = 0.0;
|
||||
out_8410823161376016702[24] = 0.0;
|
||||
out_8410823161376016702[25] = 0.0;
|
||||
out_8410823161376016702[26] = 0.0;
|
||||
out_8410823161376016702[27] = 0.0;
|
||||
out_8410823161376016702[28] = 0.0;
|
||||
out_8410823161376016702[29] = 0.0;
|
||||
out_8410823161376016702[30] = 1.0;
|
||||
out_8410823161376016702[31] = 0.0;
|
||||
out_8410823161376016702[32] = 0.0;
|
||||
out_8410823161376016702[33] = 0.0;
|
||||
out_8410823161376016702[34] = 0.0;
|
||||
out_8410823161376016702[35] = 0.0;
|
||||
out_8410823161376016702[36] = 0.0;
|
||||
out_8410823161376016702[37] = 0.0;
|
||||
out_8410823161376016702[38] = 0.0;
|
||||
out_8410823161376016702[39] = 0.0;
|
||||
out_8410823161376016702[40] = 1.0;
|
||||
out_8410823161376016702[41] = 0.0;
|
||||
out_8410823161376016702[42] = 0.0;
|
||||
out_8410823161376016702[43] = 0.0;
|
||||
out_8410823161376016702[44] = 0.0;
|
||||
out_8410823161376016702[45] = 0.0;
|
||||
out_8410823161376016702[46] = 0.0;
|
||||
out_8410823161376016702[47] = 0.0;
|
||||
out_8410823161376016702[48] = 0.0;
|
||||
out_8410823161376016702[49] = 0.0;
|
||||
out_8410823161376016702[50] = 1.0;
|
||||
out_8410823161376016702[51] = 0.0;
|
||||
out_8410823161376016702[52] = 0.0;
|
||||
out_8410823161376016702[53] = 0.0;
|
||||
out_8410823161376016702[54] = 0.0;
|
||||
out_8410823161376016702[55] = 0.0;
|
||||
out_8410823161376016702[56] = 0.0;
|
||||
out_8410823161376016702[57] = 0.0;
|
||||
out_8410823161376016702[58] = 0.0;
|
||||
out_8410823161376016702[59] = 0.0;
|
||||
out_8410823161376016702[60] = 1.0;
|
||||
out_8410823161376016702[61] = 0.0;
|
||||
out_8410823161376016702[62] = 0.0;
|
||||
out_8410823161376016702[63] = 0.0;
|
||||
out_8410823161376016702[64] = 0.0;
|
||||
out_8410823161376016702[65] = 0.0;
|
||||
out_8410823161376016702[66] = 0.0;
|
||||
out_8410823161376016702[67] = 0.0;
|
||||
out_8410823161376016702[68] = 0.0;
|
||||
out_8410823161376016702[69] = 0.0;
|
||||
out_8410823161376016702[70] = 1.0;
|
||||
out_8410823161376016702[71] = 0.0;
|
||||
out_8410823161376016702[72] = 0.0;
|
||||
out_8410823161376016702[73] = 0.0;
|
||||
out_8410823161376016702[74] = 0.0;
|
||||
out_8410823161376016702[75] = 0.0;
|
||||
out_8410823161376016702[76] = 0.0;
|
||||
out_8410823161376016702[77] = 0.0;
|
||||
out_8410823161376016702[78] = 0.0;
|
||||
out_8410823161376016702[79] = 0.0;
|
||||
out_8410823161376016702[80] = 1.0;
|
||||
}
|
||||
void f_fun(double *state, double dt, double *out_730595102125265078) {
|
||||
out_730595102125265078[0] = state[0];
|
||||
out_730595102125265078[1] = state[1];
|
||||
out_730595102125265078[2] = state[2];
|
||||
out_730595102125265078[3] = state[3];
|
||||
out_730595102125265078[4] = state[4];
|
||||
out_730595102125265078[5] = dt*((-state[4] + (-center_to_front*stiffness_front*state[0] + center_to_rear*stiffness_rear*state[0])/(mass*state[4]))*state[6] - 9.8100000000000005*state[8] + stiffness_front*(-state[2] - state[3] + state[7])*state[0]/(mass*state[1]) + (-stiffness_front*state[0] - stiffness_rear*state[0])*state[5]/(mass*state[4])) + state[5];
|
||||
out_730595102125265078[6] = dt*(center_to_front*stiffness_front*(-state[2] - state[3] + state[7])*state[0]/(rotational_inertia*state[1]) + (-center_to_front*stiffness_front*state[0] + center_to_rear*stiffness_rear*state[0])*state[5]/(rotational_inertia*state[4]) + (-pow(center_to_front, 2)*stiffness_front*state[0] - pow(center_to_rear, 2)*stiffness_rear*state[0])*state[6]/(rotational_inertia*state[4])) + state[6];
|
||||
out_730595102125265078[7] = state[7];
|
||||
out_730595102125265078[8] = state[8];
|
||||
void f_fun(double *state, double dt, double *out_8406538155675584278) {
|
||||
out_8406538155675584278[0] = state[0];
|
||||
out_8406538155675584278[1] = state[1];
|
||||
out_8406538155675584278[2] = state[2];
|
||||
out_8406538155675584278[3] = state[3];
|
||||
out_8406538155675584278[4] = state[4];
|
||||
out_8406538155675584278[5] = dt*((-state[4] + (-center_to_front*stiffness_front*state[0] + center_to_rear*stiffness_rear*state[0])/(mass*state[4]))*state[6] - 9.8100000000000005*state[8] + stiffness_front*(-state[2] - state[3] + state[7])*state[0]/(mass*state[1]) + (-stiffness_front*state[0] - stiffness_rear*state[0])*state[5]/(mass*state[4])) + state[5];
|
||||
out_8406538155675584278[6] = dt*(center_to_front*stiffness_front*(-state[2] - state[3] + state[7])*state[0]/(rotational_inertia*state[1]) + (-center_to_front*stiffness_front*state[0] + center_to_rear*stiffness_rear*state[0])*state[5]/(rotational_inertia*state[4]) + (-pow(center_to_front, 2)*stiffness_front*state[0] - pow(center_to_rear, 2)*stiffness_rear*state[0])*state[6]/(rotational_inertia*state[4])) + state[6];
|
||||
out_8406538155675584278[7] = state[7];
|
||||
out_8406538155675584278[8] = state[8];
|
||||
}
|
||||
void F_fun(double *state, double dt, double *out_7198115545780111359) {
|
||||
out_7198115545780111359[0] = 1;
|
||||
out_7198115545780111359[1] = 0;
|
||||
out_7198115545780111359[2] = 0;
|
||||
out_7198115545780111359[3] = 0;
|
||||
out_7198115545780111359[4] = 0;
|
||||
out_7198115545780111359[5] = 0;
|
||||
out_7198115545780111359[6] = 0;
|
||||
out_7198115545780111359[7] = 0;
|
||||
out_7198115545780111359[8] = 0;
|
||||
out_7198115545780111359[9] = 0;
|
||||
out_7198115545780111359[10] = 1;
|
||||
out_7198115545780111359[11] = 0;
|
||||
out_7198115545780111359[12] = 0;
|
||||
out_7198115545780111359[13] = 0;
|
||||
out_7198115545780111359[14] = 0;
|
||||
out_7198115545780111359[15] = 0;
|
||||
out_7198115545780111359[16] = 0;
|
||||
out_7198115545780111359[17] = 0;
|
||||
out_7198115545780111359[18] = 0;
|
||||
out_7198115545780111359[19] = 0;
|
||||
out_7198115545780111359[20] = 1;
|
||||
out_7198115545780111359[21] = 0;
|
||||
out_7198115545780111359[22] = 0;
|
||||
out_7198115545780111359[23] = 0;
|
||||
out_7198115545780111359[24] = 0;
|
||||
out_7198115545780111359[25] = 0;
|
||||
out_7198115545780111359[26] = 0;
|
||||
out_7198115545780111359[27] = 0;
|
||||
out_7198115545780111359[28] = 0;
|
||||
out_7198115545780111359[29] = 0;
|
||||
out_7198115545780111359[30] = 1;
|
||||
out_7198115545780111359[31] = 0;
|
||||
out_7198115545780111359[32] = 0;
|
||||
out_7198115545780111359[33] = 0;
|
||||
out_7198115545780111359[34] = 0;
|
||||
out_7198115545780111359[35] = 0;
|
||||
out_7198115545780111359[36] = 0;
|
||||
out_7198115545780111359[37] = 0;
|
||||
out_7198115545780111359[38] = 0;
|
||||
out_7198115545780111359[39] = 0;
|
||||
out_7198115545780111359[40] = 1;
|
||||
out_7198115545780111359[41] = 0;
|
||||
out_7198115545780111359[42] = 0;
|
||||
out_7198115545780111359[43] = 0;
|
||||
out_7198115545780111359[44] = 0;
|
||||
out_7198115545780111359[45] = dt*(stiffness_front*(-state[2] - state[3] + state[7])/(mass*state[1]) + (-stiffness_front - stiffness_rear)*state[5]/(mass*state[4]) + (-center_to_front*stiffness_front + center_to_rear*stiffness_rear)*state[6]/(mass*state[4]));
|
||||
out_7198115545780111359[46] = -dt*stiffness_front*(-state[2] - state[3] + state[7])*state[0]/(mass*pow(state[1], 2));
|
||||
out_7198115545780111359[47] = -dt*stiffness_front*state[0]/(mass*state[1]);
|
||||
out_7198115545780111359[48] = -dt*stiffness_front*state[0]/(mass*state[1]);
|
||||
out_7198115545780111359[49] = dt*((-1 - (-center_to_front*stiffness_front*state[0] + center_to_rear*stiffness_rear*state[0])/(mass*pow(state[4], 2)))*state[6] - (-stiffness_front*state[0] - stiffness_rear*state[0])*state[5]/(mass*pow(state[4], 2)));
|
||||
out_7198115545780111359[50] = dt*(-stiffness_front*state[0] - stiffness_rear*state[0])/(mass*state[4]) + 1;
|
||||
out_7198115545780111359[51] = dt*(-state[4] + (-center_to_front*stiffness_front*state[0] + center_to_rear*stiffness_rear*state[0])/(mass*state[4]));
|
||||
out_7198115545780111359[52] = dt*stiffness_front*state[0]/(mass*state[1]);
|
||||
out_7198115545780111359[53] = -9.8100000000000005*dt;
|
||||
out_7198115545780111359[54] = dt*(center_to_front*stiffness_front*(-state[2] - state[3] + state[7])/(rotational_inertia*state[1]) + (-center_to_front*stiffness_front + center_to_rear*stiffness_rear)*state[5]/(rotational_inertia*state[4]) + (-pow(center_to_front, 2)*stiffness_front - pow(center_to_rear, 2)*stiffness_rear)*state[6]/(rotational_inertia*state[4]));
|
||||
out_7198115545780111359[55] = -center_to_front*dt*stiffness_front*(-state[2] - state[3] + state[7])*state[0]/(rotational_inertia*pow(state[1], 2));
|
||||
out_7198115545780111359[56] = -center_to_front*dt*stiffness_front*state[0]/(rotational_inertia*state[1]);
|
||||
out_7198115545780111359[57] = -center_to_front*dt*stiffness_front*state[0]/(rotational_inertia*state[1]);
|
||||
out_7198115545780111359[58] = dt*(-(-center_to_front*stiffness_front*state[0] + center_to_rear*stiffness_rear*state[0])*state[5]/(rotational_inertia*pow(state[4], 2)) - (-pow(center_to_front, 2)*stiffness_front*state[0] - pow(center_to_rear, 2)*stiffness_rear*state[0])*state[6]/(rotational_inertia*pow(state[4], 2)));
|
||||
out_7198115545780111359[59] = dt*(-center_to_front*stiffness_front*state[0] + center_to_rear*stiffness_rear*state[0])/(rotational_inertia*state[4]);
|
||||
out_7198115545780111359[60] = dt*(-pow(center_to_front, 2)*stiffness_front*state[0] - pow(center_to_rear, 2)*stiffness_rear*state[0])/(rotational_inertia*state[4]) + 1;
|
||||
out_7198115545780111359[61] = center_to_front*dt*stiffness_front*state[0]/(rotational_inertia*state[1]);
|
||||
out_7198115545780111359[62] = 0;
|
||||
out_7198115545780111359[63] = 0;
|
||||
out_7198115545780111359[64] = 0;
|
||||
out_7198115545780111359[65] = 0;
|
||||
out_7198115545780111359[66] = 0;
|
||||
out_7198115545780111359[67] = 0;
|
||||
out_7198115545780111359[68] = 0;
|
||||
out_7198115545780111359[69] = 0;
|
||||
out_7198115545780111359[70] = 1;
|
||||
out_7198115545780111359[71] = 0;
|
||||
out_7198115545780111359[72] = 0;
|
||||
out_7198115545780111359[73] = 0;
|
||||
out_7198115545780111359[74] = 0;
|
||||
out_7198115545780111359[75] = 0;
|
||||
out_7198115545780111359[76] = 0;
|
||||
out_7198115545780111359[77] = 0;
|
||||
out_7198115545780111359[78] = 0;
|
||||
out_7198115545780111359[79] = 0;
|
||||
out_7198115545780111359[80] = 1;
|
||||
void F_fun(double *state, double dt, double *out_9168420830296677739) {
|
||||
out_9168420830296677739[0] = 1;
|
||||
out_9168420830296677739[1] = 0;
|
||||
out_9168420830296677739[2] = 0;
|
||||
out_9168420830296677739[3] = 0;
|
||||
out_9168420830296677739[4] = 0;
|
||||
out_9168420830296677739[5] = 0;
|
||||
out_9168420830296677739[6] = 0;
|
||||
out_9168420830296677739[7] = 0;
|
||||
out_9168420830296677739[8] = 0;
|
||||
out_9168420830296677739[9] = 0;
|
||||
out_9168420830296677739[10] = 1;
|
||||
out_9168420830296677739[11] = 0;
|
||||
out_9168420830296677739[12] = 0;
|
||||
out_9168420830296677739[13] = 0;
|
||||
out_9168420830296677739[14] = 0;
|
||||
out_9168420830296677739[15] = 0;
|
||||
out_9168420830296677739[16] = 0;
|
||||
out_9168420830296677739[17] = 0;
|
||||
out_9168420830296677739[18] = 0;
|
||||
out_9168420830296677739[19] = 0;
|
||||
out_9168420830296677739[20] = 1;
|
||||
out_9168420830296677739[21] = 0;
|
||||
out_9168420830296677739[22] = 0;
|
||||
out_9168420830296677739[23] = 0;
|
||||
out_9168420830296677739[24] = 0;
|
||||
out_9168420830296677739[25] = 0;
|
||||
out_9168420830296677739[26] = 0;
|
||||
out_9168420830296677739[27] = 0;
|
||||
out_9168420830296677739[28] = 0;
|
||||
out_9168420830296677739[29] = 0;
|
||||
out_9168420830296677739[30] = 1;
|
||||
out_9168420830296677739[31] = 0;
|
||||
out_9168420830296677739[32] = 0;
|
||||
out_9168420830296677739[33] = 0;
|
||||
out_9168420830296677739[34] = 0;
|
||||
out_9168420830296677739[35] = 0;
|
||||
out_9168420830296677739[36] = 0;
|
||||
out_9168420830296677739[37] = 0;
|
||||
out_9168420830296677739[38] = 0;
|
||||
out_9168420830296677739[39] = 0;
|
||||
out_9168420830296677739[40] = 1;
|
||||
out_9168420830296677739[41] = 0;
|
||||
out_9168420830296677739[42] = 0;
|
||||
out_9168420830296677739[43] = 0;
|
||||
out_9168420830296677739[44] = 0;
|
||||
out_9168420830296677739[45] = dt*(stiffness_front*(-state[2] - state[3] + state[7])/(mass*state[1]) + (-stiffness_front - stiffness_rear)*state[5]/(mass*state[4]) + (-center_to_front*stiffness_front + center_to_rear*stiffness_rear)*state[6]/(mass*state[4]));
|
||||
out_9168420830296677739[46] = -dt*stiffness_front*(-state[2] - state[3] + state[7])*state[0]/(mass*pow(state[1], 2));
|
||||
out_9168420830296677739[47] = -dt*stiffness_front*state[0]/(mass*state[1]);
|
||||
out_9168420830296677739[48] = -dt*stiffness_front*state[0]/(mass*state[1]);
|
||||
out_9168420830296677739[49] = dt*((-1 - (-center_to_front*stiffness_front*state[0] + center_to_rear*stiffness_rear*state[0])/(mass*pow(state[4], 2)))*state[6] - (-stiffness_front*state[0] - stiffness_rear*state[0])*state[5]/(mass*pow(state[4], 2)));
|
||||
out_9168420830296677739[50] = dt*(-stiffness_front*state[0] - stiffness_rear*state[0])/(mass*state[4]) + 1;
|
||||
out_9168420830296677739[51] = dt*(-state[4] + (-center_to_front*stiffness_front*state[0] + center_to_rear*stiffness_rear*state[0])/(mass*state[4]));
|
||||
out_9168420830296677739[52] = dt*stiffness_front*state[0]/(mass*state[1]);
|
||||
out_9168420830296677739[53] = -9.8100000000000005*dt;
|
||||
out_9168420830296677739[54] = dt*(center_to_front*stiffness_front*(-state[2] - state[3] + state[7])/(rotational_inertia*state[1]) + (-center_to_front*stiffness_front + center_to_rear*stiffness_rear)*state[5]/(rotational_inertia*state[4]) + (-pow(center_to_front, 2)*stiffness_front - pow(center_to_rear, 2)*stiffness_rear)*state[6]/(rotational_inertia*state[4]));
|
||||
out_9168420830296677739[55] = -center_to_front*dt*stiffness_front*(-state[2] - state[3] + state[7])*state[0]/(rotational_inertia*pow(state[1], 2));
|
||||
out_9168420830296677739[56] = -center_to_front*dt*stiffness_front*state[0]/(rotational_inertia*state[1]);
|
||||
out_9168420830296677739[57] = -center_to_front*dt*stiffness_front*state[0]/(rotational_inertia*state[1]);
|
||||
out_9168420830296677739[58] = dt*(-(-center_to_front*stiffness_front*state[0] + center_to_rear*stiffness_rear*state[0])*state[5]/(rotational_inertia*pow(state[4], 2)) - (-pow(center_to_front, 2)*stiffness_front*state[0] - pow(center_to_rear, 2)*stiffness_rear*state[0])*state[6]/(rotational_inertia*pow(state[4], 2)));
|
||||
out_9168420830296677739[59] = dt*(-center_to_front*stiffness_front*state[0] + center_to_rear*stiffness_rear*state[0])/(rotational_inertia*state[4]);
|
||||
out_9168420830296677739[60] = dt*(-pow(center_to_front, 2)*stiffness_front*state[0] - pow(center_to_rear, 2)*stiffness_rear*state[0])/(rotational_inertia*state[4]) + 1;
|
||||
out_9168420830296677739[61] = center_to_front*dt*stiffness_front*state[0]/(rotational_inertia*state[1]);
|
||||
out_9168420830296677739[62] = 0;
|
||||
out_9168420830296677739[63] = 0;
|
||||
out_9168420830296677739[64] = 0;
|
||||
out_9168420830296677739[65] = 0;
|
||||
out_9168420830296677739[66] = 0;
|
||||
out_9168420830296677739[67] = 0;
|
||||
out_9168420830296677739[68] = 0;
|
||||
out_9168420830296677739[69] = 0;
|
||||
out_9168420830296677739[70] = 1;
|
||||
out_9168420830296677739[71] = 0;
|
||||
out_9168420830296677739[72] = 0;
|
||||
out_9168420830296677739[73] = 0;
|
||||
out_9168420830296677739[74] = 0;
|
||||
out_9168420830296677739[75] = 0;
|
||||
out_9168420830296677739[76] = 0;
|
||||
out_9168420830296677739[77] = 0;
|
||||
out_9168420830296677739[78] = 0;
|
||||
out_9168420830296677739[79] = 0;
|
||||
out_9168420830296677739[80] = 1;
|
||||
}
|
||||
void h_25(double *state, double *unused, double *out_5441109048213736058) {
|
||||
out_5441109048213736058[0] = state[6];
|
||||
void h_25(double *state, double *unused, double *out_6925664705835598268) {
|
||||
out_6925664705835598268[0] = state[6];
|
||||
}
|
||||
void H_25(double *state, double *unused, double *out_4766949399557973891) {
|
||||
out_4766949399557973891[0] = 0;
|
||||
out_4766949399557973891[1] = 0;
|
||||
out_4766949399557973891[2] = 0;
|
||||
out_4766949399557973891[3] = 0;
|
||||
out_4766949399557973891[4] = 0;
|
||||
out_4766949399557973891[5] = 0;
|
||||
out_4766949399557973891[6] = 1;
|
||||
out_4766949399557973891[7] = 0;
|
||||
out_4766949399557973891[8] = 0;
|
||||
void H_25(double *state, double *unused, double *out_842732686421297677) {
|
||||
out_842732686421297677[0] = 0;
|
||||
out_842732686421297677[1] = 0;
|
||||
out_842732686421297677[2] = 0;
|
||||
out_842732686421297677[3] = 0;
|
||||
out_842732686421297677[4] = 0;
|
||||
out_842732686421297677[5] = 0;
|
||||
out_842732686421297677[6] = 1;
|
||||
out_842732686421297677[7] = 0;
|
||||
out_842732686421297677[8] = 0;
|
||||
}
|
||||
void h_24(double *state, double *unused, double *out_2797667639827089179) {
|
||||
out_2797667639827089179[0] = state[4];
|
||||
out_2797667639827089179[1] = state[5];
|
||||
void h_24(double *state, double *unused, double *out_611774507479316058) {
|
||||
out_611774507479316058[0] = state[4];
|
||||
out_611774507479316058[1] = state[5];
|
||||
}
|
||||
void H_24(double *state, double *unused, double *out_4461115786511221334) {
|
||||
out_4461115786511221334[0] = 0;
|
||||
out_4461115786511221334[1] = 0;
|
||||
out_4461115786511221334[2] = 0;
|
||||
out_4461115786511221334[3] = 0;
|
||||
out_4461115786511221334[4] = 1;
|
||||
out_4461115786511221334[5] = 0;
|
||||
out_4461115786511221334[6] = 0;
|
||||
out_4461115786511221334[7] = 0;
|
||||
out_4461115786511221334[8] = 0;
|
||||
out_4461115786511221334[9] = 0;
|
||||
out_4461115786511221334[10] = 0;
|
||||
out_4461115786511221334[11] = 0;
|
||||
out_4461115786511221334[12] = 0;
|
||||
out_4461115786511221334[13] = 0;
|
||||
out_4461115786511221334[14] = 1;
|
||||
out_4461115786511221334[15] = 0;
|
||||
out_4461115786511221334[16] = 0;
|
||||
out_4461115786511221334[17] = 0;
|
||||
void H_24(double *state, double *unused, double *out_7496938144529483434) {
|
||||
out_7496938144529483434[0] = 0;
|
||||
out_7496938144529483434[1] = 0;
|
||||
out_7496938144529483434[2] = 0;
|
||||
out_7496938144529483434[3] = 0;
|
||||
out_7496938144529483434[4] = 1;
|
||||
out_7496938144529483434[5] = 0;
|
||||
out_7496938144529483434[6] = 0;
|
||||
out_7496938144529483434[7] = 0;
|
||||
out_7496938144529483434[8] = 0;
|
||||
out_7496938144529483434[9] = 0;
|
||||
out_7496938144529483434[10] = 0;
|
||||
out_7496938144529483434[11] = 0;
|
||||
out_7496938144529483434[12] = 0;
|
||||
out_7496938144529483434[13] = 0;
|
||||
out_7496938144529483434[14] = 1;
|
||||
out_7496938144529483434[15] = 0;
|
||||
out_7496938144529483434[16] = 0;
|
||||
out_7496938144529483434[17] = 0;
|
||||
}
|
||||
void h_30(double *state, double *unused, double *out_1188271489450022901) {
|
||||
out_1188271489450022901[0] = state[4];
|
||||
void h_30(double *state, double *unused, double *out_7082851374186727413) {
|
||||
out_7082851374186727413[0] = state[4];
|
||||
}
|
||||
void H_30(double *state, double *unused, double *out_9152098344023969527) {
|
||||
out_9152098344023969527[0] = 0;
|
||||
out_9152098344023969527[1] = 0;
|
||||
out_9152098344023969527[2] = 0;
|
||||
out_9152098344023969527[3] = 0;
|
||||
out_9152098344023969527[4] = 1;
|
||||
out_9152098344023969527[5] = 0;
|
||||
out_9152098344023969527[6] = 0;
|
||||
out_9152098344023969527[7] = 0;
|
||||
out_9152098344023969527[8] = 0;
|
||||
void H_30(double *state, double *unused, double *out_3684963643706310521) {
|
||||
out_3684963643706310521[0] = 0;
|
||||
out_3684963643706310521[1] = 0;
|
||||
out_3684963643706310521[2] = 0;
|
||||
out_3684963643706310521[3] = 0;
|
||||
out_3684963643706310521[4] = 1;
|
||||
out_3684963643706310521[5] = 0;
|
||||
out_3684963643706310521[6] = 0;
|
||||
out_3684963643706310521[7] = 0;
|
||||
out_3684963643706310521[8] = 0;
|
||||
}
|
||||
void h_26(double *state, double *unused, double *out_6530138725336053464) {
|
||||
out_6530138725336053464[0] = state[7];
|
||||
void h_26(double *state, double *unused, double *out_6139341521285064978) {
|
||||
out_6139341521285064978[0] = state[7];
|
||||
}
|
||||
void H_26(double *state, double *unused, double *out_8508452718432030115) {
|
||||
out_8508452718432030115[0] = 0;
|
||||
out_8508452718432030115[1] = 0;
|
||||
out_8508452718432030115[2] = 0;
|
||||
out_8508452718432030115[3] = 0;
|
||||
out_8508452718432030115[4] = 0;
|
||||
out_8508452718432030115[5] = 0;
|
||||
out_8508452718432030115[6] = 0;
|
||||
out_8508452718432030115[7] = 1;
|
||||
out_8508452718432030115[8] = 0;
|
||||
void H_26(double *state, double *unused, double *out_2898770632452758547) {
|
||||
out_2898770632452758547[0] = 0;
|
||||
out_2898770632452758547[1] = 0;
|
||||
out_2898770632452758547[2] = 0;
|
||||
out_2898770632452758547[3] = 0;
|
||||
out_2898770632452758547[4] = 0;
|
||||
out_2898770632452758547[5] = 0;
|
||||
out_2898770632452758547[6] = 0;
|
||||
out_2898770632452758547[7] = 1;
|
||||
out_2898770632452758547[8] = 0;
|
||||
}
|
||||
void h_27(double *state, double *unused, double *out_8003961757834969913) {
|
||||
out_8003961757834969913[0] = state[3];
|
||||
void h_27(double *state, double *unused, double *out_8484293316429620663) {
|
||||
out_8484293316429620663[0] = state[3];
|
||||
}
|
||||
void H_27(double *state, double *unused, double *out_6977335032223544616) {
|
||||
out_6977335032223544616[0] = 0;
|
||||
out_6977335032223544616[1] = 0;
|
||||
out_6977335032223544616[2] = 0;
|
||||
out_6977335032223544616[3] = 1;
|
||||
out_6977335032223544616[4] = 0;
|
||||
out_6977335032223544616[5] = 0;
|
||||
out_6977335032223544616[6] = 0;
|
||||
out_6977335032223544616[7] = 0;
|
||||
out_6977335032223544616[8] = 0;
|
||||
void H_27(double *state, double *unused, double *out_5859726955506735432) {
|
||||
out_5859726955506735432[0] = 0;
|
||||
out_5859726955506735432[1] = 0;
|
||||
out_5859726955506735432[2] = 0;
|
||||
out_5859726955506735432[3] = 1;
|
||||
out_5859726955506735432[4] = 0;
|
||||
out_5859726955506735432[5] = 0;
|
||||
out_5859726955506735432[6] = 0;
|
||||
out_5859726955506735432[7] = 0;
|
||||
out_5859726955506735432[8] = 0;
|
||||
}
|
||||
void h_29(double *state, double *unused, double *out_1416133831358674750) {
|
||||
out_1416133831358674750[0] = state[1];
|
||||
void h_29(double *state, double *unused, double *out_2081178106525881768) {
|
||||
out_2081178106525881768[0] = state[1];
|
||||
}
|
||||
void H_29(double *state, double *unused, double *out_8784414385371189905) {
|
||||
out_8784414385371189905[0] = 0;
|
||||
out_8784414385371189905[1] = 1;
|
||||
out_8784414385371189905[2] = 0;
|
||||
out_8784414385371189905[3] = 0;
|
||||
out_8784414385371189905[4] = 0;
|
||||
out_8784414385371189905[5] = 0;
|
||||
out_8784414385371189905[6] = 0;
|
||||
out_8784414385371189905[7] = 0;
|
||||
out_8784414385371189905[8] = 0;
|
||||
void H_29(double *state, double *unused, double *out_3174732299391918337) {
|
||||
out_3174732299391918337[0] = 0;
|
||||
out_3174732299391918337[1] = 1;
|
||||
out_3174732299391918337[2] = 0;
|
||||
out_3174732299391918337[3] = 0;
|
||||
out_3174732299391918337[4] = 0;
|
||||
out_3174732299391918337[5] = 0;
|
||||
out_3174732299391918337[6] = 0;
|
||||
out_3174732299391918337[7] = 0;
|
||||
out_3174732299391918337[8] = 0;
|
||||
}
|
||||
void h_28(double *state, double *unused, double *out_7400645873158492396) {
|
||||
out_7400645873158492396[0] = state[0];
|
||||
void h_28(double *state, double *unused, double *out_9087609201106098180) {
|
||||
out_9087609201106098180[0] = state[0];
|
||||
}
|
||||
void H_28(double *state, double *unused, double *out_6820784113805863654) {
|
||||
out_6820784113805863654[0] = 1;
|
||||
out_6820784113805863654[1] = 0;
|
||||
out_6820784113805863654[2] = 0;
|
||||
out_6820784113805863654[3] = 0;
|
||||
out_6820784113805863654[4] = 0;
|
||||
out_6820784113805863654[5] = 0;
|
||||
out_6820784113805863654[6] = 0;
|
||||
out_6820784113805863654[7] = 0;
|
||||
out_6820784113805863654[8] = 0;
|
||||
void H_28(double *state, double *unused, double *out_8257131316461448911) {
|
||||
out_8257131316461448911[0] = 1;
|
||||
out_8257131316461448911[1] = 0;
|
||||
out_8257131316461448911[2] = 0;
|
||||
out_8257131316461448911[3] = 0;
|
||||
out_8257131316461448911[4] = 0;
|
||||
out_8257131316461448911[5] = 0;
|
||||
out_8257131316461448911[6] = 0;
|
||||
out_8257131316461448911[7] = 0;
|
||||
out_8257131316461448911[8] = 0;
|
||||
}
|
||||
void h_31(double *state, double *unused, double *out_1803659519959713708) {
|
||||
out_1803659519959713708[0] = state[8];
|
||||
void h_31(double *state, double *unused, double *out_7580923347048146882) {
|
||||
out_7580923347048146882[0] = state[8];
|
||||
}
|
||||
void H_31(double *state, double *unused, double *out_9134660820665381591) {
|
||||
out_9134660820665381591[0] = 0;
|
||||
out_9134660820665381591[1] = 0;
|
||||
out_9134660820665381591[2] = 0;
|
||||
out_9134660820665381591[3] = 0;
|
||||
out_9134660820665381591[4] = 0;
|
||||
out_9134660820665381591[5] = 0;
|
||||
out_9134660820665381591[6] = 0;
|
||||
out_9134660820665381591[7] = 0;
|
||||
out_9134660820665381591[8] = 1;
|
||||
void H_31(double *state, double *unused, double *out_3524978734686110023) {
|
||||
out_3524978734686110023[0] = 0;
|
||||
out_3524978734686110023[1] = 0;
|
||||
out_3524978734686110023[2] = 0;
|
||||
out_3524978734686110023[3] = 0;
|
||||
out_3524978734686110023[4] = 0;
|
||||
out_3524978734686110023[5] = 0;
|
||||
out_3524978734686110023[6] = 0;
|
||||
out_3524978734686110023[7] = 0;
|
||||
out_3524978734686110023[8] = 1;
|
||||
}
|
||||
#include <eigen3/Eigen/Dense>
|
||||
#include <iostream>
|
||||
@@ -518,68 +518,68 @@ void car_update_28(double *in_x, double *in_P, double *in_z, double *in_R, doubl
|
||||
void car_update_31(double *in_x, double *in_P, double *in_z, double *in_R, double *in_ea) {
|
||||
update<1, 3, 0>(in_x, in_P, h_31, H_31, NULL, in_z, in_R, in_ea, MAHA_THRESH_31);
|
||||
}
|
||||
void car_err_fun(double *nom_x, double *delta_x, double *out_5070392900769873758) {
|
||||
err_fun(nom_x, delta_x, out_5070392900769873758);
|
||||
void car_err_fun(double *nom_x, double *delta_x, double *out_3066078453041735876) {
|
||||
err_fun(nom_x, delta_x, out_3066078453041735876);
|
||||
}
|
||||
void car_inv_err_fun(double *nom_x, double *true_x, double *out_3742760733154016051) {
|
||||
inv_err_fun(nom_x, true_x, out_3742760733154016051);
|
||||
void car_inv_err_fun(double *nom_x, double *true_x, double *out_7998306431651746749) {
|
||||
inv_err_fun(nom_x, true_x, out_7998306431651746749);
|
||||
}
|
||||
void car_H_mod_fun(double *state, double *out_5758456641177717920) {
|
||||
H_mod_fun(state, out_5758456641177717920);
|
||||
void car_H_mod_fun(double *state, double *out_8410823161376016702) {
|
||||
H_mod_fun(state, out_8410823161376016702);
|
||||
}
|
||||
void car_f_fun(double *state, double dt, double *out_730595102125265078) {
|
||||
f_fun(state, dt, out_730595102125265078);
|
||||
void car_f_fun(double *state, double dt, double *out_8406538155675584278) {
|
||||
f_fun(state, dt, out_8406538155675584278);
|
||||
}
|
||||
void car_F_fun(double *state, double dt, double *out_7198115545780111359) {
|
||||
F_fun(state, dt, out_7198115545780111359);
|
||||
void car_F_fun(double *state, double dt, double *out_9168420830296677739) {
|
||||
F_fun(state, dt, out_9168420830296677739);
|
||||
}
|
||||
void car_h_25(double *state, double *unused, double *out_5441109048213736058) {
|
||||
h_25(state, unused, out_5441109048213736058);
|
||||
void car_h_25(double *state, double *unused, double *out_6925664705835598268) {
|
||||
h_25(state, unused, out_6925664705835598268);
|
||||
}
|
||||
void car_H_25(double *state, double *unused, double *out_4766949399557973891) {
|
||||
H_25(state, unused, out_4766949399557973891);
|
||||
void car_H_25(double *state, double *unused, double *out_842732686421297677) {
|
||||
H_25(state, unused, out_842732686421297677);
|
||||
}
|
||||
void car_h_24(double *state, double *unused, double *out_2797667639827089179) {
|
||||
h_24(state, unused, out_2797667639827089179);
|
||||
void car_h_24(double *state, double *unused, double *out_611774507479316058) {
|
||||
h_24(state, unused, out_611774507479316058);
|
||||
}
|
||||
void car_H_24(double *state, double *unused, double *out_4461115786511221334) {
|
||||
H_24(state, unused, out_4461115786511221334);
|
||||
void car_H_24(double *state, double *unused, double *out_7496938144529483434) {
|
||||
H_24(state, unused, out_7496938144529483434);
|
||||
}
|
||||
void car_h_30(double *state, double *unused, double *out_1188271489450022901) {
|
||||
h_30(state, unused, out_1188271489450022901);
|
||||
void car_h_30(double *state, double *unused, double *out_7082851374186727413) {
|
||||
h_30(state, unused, out_7082851374186727413);
|
||||
}
|
||||
void car_H_30(double *state, double *unused, double *out_9152098344023969527) {
|
||||
H_30(state, unused, out_9152098344023969527);
|
||||
void car_H_30(double *state, double *unused, double *out_3684963643706310521) {
|
||||
H_30(state, unused, out_3684963643706310521);
|
||||
}
|
||||
void car_h_26(double *state, double *unused, double *out_6530138725336053464) {
|
||||
h_26(state, unused, out_6530138725336053464);
|
||||
void car_h_26(double *state, double *unused, double *out_6139341521285064978) {
|
||||
h_26(state, unused, out_6139341521285064978);
|
||||
}
|
||||
void car_H_26(double *state, double *unused, double *out_8508452718432030115) {
|
||||
H_26(state, unused, out_8508452718432030115);
|
||||
void car_H_26(double *state, double *unused, double *out_2898770632452758547) {
|
||||
H_26(state, unused, out_2898770632452758547);
|
||||
}
|
||||
void car_h_27(double *state, double *unused, double *out_8003961757834969913) {
|
||||
h_27(state, unused, out_8003961757834969913);
|
||||
void car_h_27(double *state, double *unused, double *out_8484293316429620663) {
|
||||
h_27(state, unused, out_8484293316429620663);
|
||||
}
|
||||
void car_H_27(double *state, double *unused, double *out_6977335032223544616) {
|
||||
H_27(state, unused, out_6977335032223544616);
|
||||
void car_H_27(double *state, double *unused, double *out_5859726955506735432) {
|
||||
H_27(state, unused, out_5859726955506735432);
|
||||
}
|
||||
void car_h_29(double *state, double *unused, double *out_1416133831358674750) {
|
||||
h_29(state, unused, out_1416133831358674750);
|
||||
void car_h_29(double *state, double *unused, double *out_2081178106525881768) {
|
||||
h_29(state, unused, out_2081178106525881768);
|
||||
}
|
||||
void car_H_29(double *state, double *unused, double *out_8784414385371189905) {
|
||||
H_29(state, unused, out_8784414385371189905);
|
||||
void car_H_29(double *state, double *unused, double *out_3174732299391918337) {
|
||||
H_29(state, unused, out_3174732299391918337);
|
||||
}
|
||||
void car_h_28(double *state, double *unused, double *out_7400645873158492396) {
|
||||
h_28(state, unused, out_7400645873158492396);
|
||||
void car_h_28(double *state, double *unused, double *out_9087609201106098180) {
|
||||
h_28(state, unused, out_9087609201106098180);
|
||||
}
|
||||
void car_H_28(double *state, double *unused, double *out_6820784113805863654) {
|
||||
H_28(state, unused, out_6820784113805863654);
|
||||
void car_H_28(double *state, double *unused, double *out_8257131316461448911) {
|
||||
H_28(state, unused, out_8257131316461448911);
|
||||
}
|
||||
void car_h_31(double *state, double *unused, double *out_1803659519959713708) {
|
||||
h_31(state, unused, out_1803659519959713708);
|
||||
void car_h_31(double *state, double *unused, double *out_7580923347048146882) {
|
||||
h_31(state, unused, out_7580923347048146882);
|
||||
}
|
||||
void car_H_31(double *state, double *unused, double *out_9134660820665381591) {
|
||||
H_31(state, unused, out_9134660820665381591);
|
||||
void car_H_31(double *state, double *unused, double *out_3524978734686110023) {
|
||||
H_31(state, unused, out_3524978734686110023);
|
||||
}
|
||||
void car_predict(double *in_x, double *in_P, double *in_Q, double dt) {
|
||||
predict(in_x, in_P, in_Q, dt);
|
||||
|
||||
@@ -9,27 +9,27 @@ void car_update_27(double *in_x, double *in_P, double *in_z, double *in_R, doubl
|
||||
void car_update_29(double *in_x, double *in_P, double *in_z, double *in_R, double *in_ea);
|
||||
void car_update_28(double *in_x, double *in_P, double *in_z, double *in_R, double *in_ea);
|
||||
void car_update_31(double *in_x, double *in_P, double *in_z, double *in_R, double *in_ea);
|
||||
void car_err_fun(double *nom_x, double *delta_x, double *out_5070392900769873758);
|
||||
void car_inv_err_fun(double *nom_x, double *true_x, double *out_3742760733154016051);
|
||||
void car_H_mod_fun(double *state, double *out_5758456641177717920);
|
||||
void car_f_fun(double *state, double dt, double *out_730595102125265078);
|
||||
void car_F_fun(double *state, double dt, double *out_7198115545780111359);
|
||||
void car_h_25(double *state, double *unused, double *out_5441109048213736058);
|
||||
void car_H_25(double *state, double *unused, double *out_4766949399557973891);
|
||||
void car_h_24(double *state, double *unused, double *out_2797667639827089179);
|
||||
void car_H_24(double *state, double *unused, double *out_4461115786511221334);
|
||||
void car_h_30(double *state, double *unused, double *out_1188271489450022901);
|
||||
void car_H_30(double *state, double *unused, double *out_9152098344023969527);
|
||||
void car_h_26(double *state, double *unused, double *out_6530138725336053464);
|
||||
void car_H_26(double *state, double *unused, double *out_8508452718432030115);
|
||||
void car_h_27(double *state, double *unused, double *out_8003961757834969913);
|
||||
void car_H_27(double *state, double *unused, double *out_6977335032223544616);
|
||||
void car_h_29(double *state, double *unused, double *out_1416133831358674750);
|
||||
void car_H_29(double *state, double *unused, double *out_8784414385371189905);
|
||||
void car_h_28(double *state, double *unused, double *out_7400645873158492396);
|
||||
void car_H_28(double *state, double *unused, double *out_6820784113805863654);
|
||||
void car_h_31(double *state, double *unused, double *out_1803659519959713708);
|
||||
void car_H_31(double *state, double *unused, double *out_9134660820665381591);
|
||||
void car_err_fun(double *nom_x, double *delta_x, double *out_3066078453041735876);
|
||||
void car_inv_err_fun(double *nom_x, double *true_x, double *out_7998306431651746749);
|
||||
void car_H_mod_fun(double *state, double *out_8410823161376016702);
|
||||
void car_f_fun(double *state, double dt, double *out_8406538155675584278);
|
||||
void car_F_fun(double *state, double dt, double *out_9168420830296677739);
|
||||
void car_h_25(double *state, double *unused, double *out_6925664705835598268);
|
||||
void car_H_25(double *state, double *unused, double *out_842732686421297677);
|
||||
void car_h_24(double *state, double *unused, double *out_611774507479316058);
|
||||
void car_H_24(double *state, double *unused, double *out_7496938144529483434);
|
||||
void car_h_30(double *state, double *unused, double *out_7082851374186727413);
|
||||
void car_H_30(double *state, double *unused, double *out_3684963643706310521);
|
||||
void car_h_26(double *state, double *unused, double *out_6139341521285064978);
|
||||
void car_H_26(double *state, double *unused, double *out_2898770632452758547);
|
||||
void car_h_27(double *state, double *unused, double *out_8484293316429620663);
|
||||
void car_H_27(double *state, double *unused, double *out_5859726955506735432);
|
||||
void car_h_29(double *state, double *unused, double *out_2081178106525881768);
|
||||
void car_H_29(double *state, double *unused, double *out_3174732299391918337);
|
||||
void car_h_28(double *state, double *unused, double *out_9087609201106098180);
|
||||
void car_H_28(double *state, double *unused, double *out_8257131316461448911);
|
||||
void car_h_31(double *state, double *unused, double *out_7580923347048146882);
|
||||
void car_H_31(double *state, double *unused, double *out_3524978734686110023);
|
||||
void car_predict(double *in_x, double *in_P, double *in_Q, double dt);
|
||||
void car_set_mass(double x);
|
||||
void car_set_rotational_inertia(double x);
|
||||
|
||||
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large
Load Diff
@@ -5,18 +5,18 @@ void pose_update_4(double *in_x, double *in_P, double *in_z, double *in_R, doubl
|
||||
void pose_update_10(double *in_x, double *in_P, double *in_z, double *in_R, double *in_ea);
|
||||
void pose_update_13(double *in_x, double *in_P, double *in_z, double *in_R, double *in_ea);
|
||||
void pose_update_14(double *in_x, double *in_P, double *in_z, double *in_R, double *in_ea);
|
||||
void pose_err_fun(double *nom_x, double *delta_x, double *out_8299703332077589328);
|
||||
void pose_inv_err_fun(double *nom_x, double *true_x, double *out_4608058237383429265);
|
||||
void pose_H_mod_fun(double *state, double *out_7885453398379249088);
|
||||
void pose_f_fun(double *state, double dt, double *out_1688144950946873165);
|
||||
void pose_F_fun(double *state, double dt, double *out_4851283621730691038);
|
||||
void pose_h_4(double *state, double *unused, double *out_2329133011647763937);
|
||||
void pose_H_4(double *state, double *unused, double *out_8639614400433961695);
|
||||
void pose_h_10(double *state, double *unused, double *out_3294648635274985008);
|
||||
void pose_H_10(double *state, double *unused, double *out_3780608178453222524);
|
||||
void pose_h_13(double *state, double *unused, double *out_8905113933939181200);
|
||||
void pose_H_13(double *state, double *unused, double *out_6594855847943257120);
|
||||
void pose_h_14(double *state, double *unused, double *out_8324071568749841126);
|
||||
void pose_H_14(double *state, double *unused, double *out_5843888816936105392);
|
||||
void pose_err_fun(double *nom_x, double *delta_x, double *out_5688174754372622748);
|
||||
void pose_inv_err_fun(double *nom_x, double *true_x, double *out_598026621986152539);
|
||||
void pose_H_mod_fun(double *state, double *out_2381892679141553073);
|
||||
void pose_f_fun(double *state, double dt, double *out_1702484166209795754);
|
||||
void pose_F_fun(double *state, double dt, double *out_2610723520316632485);
|
||||
void pose_h_4(double *state, double *unused, double *out_1625499965422042150);
|
||||
void pose_H_4(double *state, double *unused, double *out_5582302580243023097);
|
||||
void pose_h_10(double *state, double *unused, double *out_2139046532052679128);
|
||||
void pose_H_10(double *state, double *unused, double *out_280379430924529525);
|
||||
void pose_h_13(double *state, double *unused, double *out_4130601663238522497);
|
||||
void pose_H_13(double *state, double *unused, double *out_2028328628073677832);
|
||||
void pose_h_14(double *state, double *unused, double *out_5394061988893492228);
|
||||
void pose_H_14(double *state, double *unused, double *out_8665091012538395393);
|
||||
void pose_predict(double *in_x, double *in_P, double *in_Q, double dt);
|
||||
}
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -102,6 +102,7 @@ class TestBoarddSpi(OpenpilotTestCase):
|
||||
edt = 1e3 / SERVICE_LIST[service].frequency
|
||||
assert edt*0.9 < np.mean(dts) < edt*1.1
|
||||
assert np.max(dts) < edt*8
|
||||
assert np.min(dts) < edt
|
||||
assert len(dts) >= ((et-0.5)*SERVICE_LIST[service].frequency*0.8)
|
||||
|
||||
with subtests.test(msg="CAN traffic"):
|
||||
|
||||
@@ -17,8 +17,8 @@
|
||||
"severity": 1,
|
||||
"_comment": "Set extra field to the failed reason."
|
||||
},
|
||||
"Offroad_ChestnutBranch": {
|
||||
"text": "Chestnut detected! Switch to the release-chestnut branch to use chestnut-class models.",
|
||||
"Offroad_NeosUpdate": {
|
||||
"text": "An update to your device's operating system is downloading in the background. You will be prompted to update when it's ready to install.",
|
||||
"severity": 0
|
||||
},
|
||||
"Offroad_UnregisteredHardware": {
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user