Compare commits

..

11 Commits

Author SHA1 Message Date
Willem Melching abfe469d95 interrupt number different on EON 2020-05-12 15:15:27 -07:00
Willem Melching a39e33b9d0 add latest revision of the model 2020-05-11 10:14:46 -07:00
Willem Melching c9c66ce21a Fix counter in HKG clu11 message (#1484)
* fix counter in clu11 message

* update ref
2020-05-10 20:14:15 -07:00
Vehicle Researcher ddee718536 openpilot v0.7.5 release 2020-05-09 13:01:35 -07:00
Vehicle Researcher 7e908db510 Merge opendbc subtree 2020-05-09 13:01:32 -07:00
Vehicle Researcher e0ab166ed3 Squashed 'opendbc/' changes from a62d5dd84..f1e69a6cf
f1e69a6cf Fix wrong message size in Chrysler
54482cfb0 Fix GM message signal sizes
4e796e06d Fix wrong message sizes in Nissan
fb6c1ee2b Better GEAR signal tracking the gear stick rather than the gear box (#257)
d7a2efbbd Raw angle signal data for easy checksum calc, and one less gear bit (#254)
7456061a7 add checksum check to can parser for subaru
7f3b1774d Chrysler: calculate checksum in can packer/parser (#255)
0c0215516 Rename BYTE_ to SET_ME_X (#253)
1efe437cf Add values for a static 0xe5 (honda bosch) (#250)
7dffe0bd9 Create DBC for HRV (#248)
b69398525 Add LFAHDA message to hyundai
a57e7ddbd CANPacker: Subaru checksum support  (#241)
36c471e59 Fixed signals order and added new signals for subaru global (#221)
7b5a1fcc1 BMW 2008-2013 (#230)
cc09af763 Add RPM signal (#216)
47db9238f Add SWA_01 message detail and CRC support for VW MQB (#236)
c98fe2ab9 Fixed signal unknown1 overlapping the button bits (#239)
572261ee3 Rear Cross Traffic Alert
044730aeb Speed limit signs
87b1a21fb Pedals/gear, gas pedal scale value
ce78044d8 Tracking the steer angle with LKAS signal
7f19ab415 Introduce the new  mazda 3  2019/2020 dbc
e58520619 traffic sign speed limit
00bad5ee7 Speed Auto High Beam Traffic signs
9d080ea42 Nissan leaf (#238)
50fbbe739 nissan x trail cleanup (#237)

git-subtree-dir: opendbc
git-subtree-split: f1e69a6cf91cdaf1b8008d73f6fbb6634fbbeb42
2020-05-09 13:01:32 -07:00
Vehicle Researcher d1aff96611 Merge panda subtree 2020-05-09 13:01:28 -07:00
Vehicle Researcher eb0dff8438 Squashed 'panda/' changes from 0696730c1..869f12321
869f12321 Hyundai: counter check (#530)
a4390713e gitignore for route logs
ac1b64e62 Fix CAN Ignition for Black Panda and Uno (#526)
273e3882f When initializing all the CAN busses, make sure the are also cleared (#527)
c2bea78f6 Fix python library on Windows (#523)
0a123b181 that too
ba6355d4c unused lines
c9102c00e Chrysler: use can packer in safety tests (#522)
9874e7335 Abstract steering safety tests for Toyota and Chrysler (#520)
2299ecffc Block 0xe5 (Honda Bosch) at the panda/uno. Only allow static values. (#515)
351730611 Subaru: fix steer torque scaling (#501)
0bc864b3d Make torque-based steering state global (#518)
d9355c414 Make cruise_engaged_prev a global + test case for it (#519)
211537641 Abstract sample speed test (#516)
11dc9054f remove unused function
e5a586eea Abstract gas interceptor tests (#517)
1dbed65e3 Safety Test Refactor: Honda (#495)
0632710ac base class for different panda safety tests
bd98fe603 safety tests: use shorter function name
ba59ada0e No ESP in non-white (#514)
c3336180b Fix the CAN init fix (#513)
884afa0ef Safety Test Refactor: Chrysler and Volkswagen PQ (#508)
d77b72d16 Safety Test Refactor: Nissan (#510)
4c7755c47 Match Panda DFU entry fix in "make recover" process (#509)
0336f625d Pedal gas pressed safety limits (#507)
715b1a169 Hyundai-Kia-Genesis (HKG) (#503)
6f105e827 Safety Test Refactor: Subaru (#502)
57cc954f2 Safety Test Refactor: GM (#504)
dd01c3b9c Safety Test Refactor: Hyundai (#505)
592c2c864 add support to can_unique.py for Cabana CSV format. (#506)
ccf13b7af No more infinite while loops in CAN init (#499)
6c442b4c3 Safety Test Refactor: Volkswagen MQB (#493)
f07a6ee7c panda recover should go through bootstub first (#498)
8cc3a3570 remove cadillac (#496)
62e4d3c36 Chrysler: fix missing button signal on TX (#490)
abce8f32b Safety Test Refactor: Toyota + support code (#491)
500370aec Make sure relay faults make it to the health packet (#492)
bc90b60f9 toyota: use universal gas pressed bit (#488)
74d10ccd3 Fixed possible race condition (#487)
a05361ebc cleanup safety_replay dockerfile (#486)
fe73dcc91 Openpilot-tools is deprecated (#484)
da8e00f11 TX message guaranteed delivery (#421)
d8f618492 Add ISO number for longitudinal limits flag comment
6a60b7811 touch ups
2ce65361d comments on unsafe flags
d88013450 remove from there as well
055ea07ee remove that unsafe flag since it isn't implemented and it's unclear how to
4e98bbe8c Apply unsafe allow gas mode to all cars. (#480)
0c2c14949 Fixing libusb busy error (#174)
753c42cf5 Update Board Mac SDK Install script to work on clean mac (#146)
b9a9ea395 Unsafe gas disengage mods, fix test compile warning (#481)
08ef92d58 Safety model for Volkswagen PQ35/PQ46/NMS (#474)
51e0a55d6 Support code for unsafe mode unit tests (#478)
5325b62bb current_safety_mode
7908b7224 update updating unsafe mode
98503e866 disable stock honda AEB in unsafe mode (#477)
01b2ccbed one more
9a30265a8 weak steering while not engaged
577f10b1a added options for unsafe mode
83cf7bf4c update comment
4556e7494 enable unsafe mode, toggle for use by forks that so choose
de89fcdc4 Nissan leaf (#473)

git-subtree-dir: panda
git-subtree-split: 869f1232186f440eb388df82b85b88d346899199
2020-05-09 13:01:28 -07:00
Vehicle Researcher d692982601 Merge cereal subtree 2020-05-09 13:01:20 -07:00
Vehicle Researcher 5bfae8d806 Squashed 'cereal/' changes from 65119906..12aad06e
12aad06e no more c capnp
0050e0ac stockFcw event
2c325ed3 gasPressed event
8573a24d don't duplicate ordinals
3f384efa add carState.steerWarning and carState.steerError
8b347b0a add repeated warning2
3adb8991 add sharpness metric
65af4368 Add relayMalfunction alert
442e914d add preview driver flag
c8e5db83 Add comment to faulttype
975a633b Add all panda fault types to health
93ccbcb7 UiLayoutState: add mockEngaged for onboarding
9dbbb545 UiLayoutState: add 'none' app
c820f83d Add offroadLayout service
e370f795 Add the laneChangeBlocked Event (#40)
35040fe6 Update service documentation (#39)
8f13dfca Additional car params auto-detection in support of VW (#38)
22986de4 add speedTooHigh alert
f515e4db Add invalid lkas setting alert
59087620 gnustl_shared is only for android
b0c746b1 solve by renaming event name instead of service
df82a53c the service is called androidLogEntry

git-subtree-dir: cereal
git-subtree-split: 12aad06e12f249e57abda1664fb0c85e484a0c5d
2020-05-09 13:01:20 -07:00
robbederks cc6358d983 Power monitoring fix (#1269)
* Release lock after exceptions

* No pulsed measurement on uno

* Fix last_measurement_time=None while integrating when going offroad

* Also clear next pulsed measurement time

* Move around locks

* Locks are good now?
2020-03-23 18:03:15 -07:00
338 changed files with 20815 additions and 8522 deletions
+3
View File
@@ -20,7 +20,9 @@ a.out
.*.un~
*.tmp
*.o
*.o-*
*.os
*.os-*
*.so
*.a
*.clb
@@ -54,6 +56,7 @@ xx
panda_jungle
.coverage*
coverage.xml
htmlcov
pandaextra
+94 -70
View File
@@ -57,106 +57,125 @@ openpilot should preserve all other vehicle's stock features, including, but are
Supported Hardware
------
At the moment, openpilot supports the [EON DevKit](https://comma.ai/shop/products/eon-dashcam-devkit) and the [comma two](https://comma.ai/shop/products/comma-two-devkit). A [car harness](https://comma.ai/shop/products/car-harness) is recommended to connect the EON or comma two to the car. In the future, we'd like to support other platforms as well, like gaming PCs.
At the moment, openpilot supports the [EON DevKit](https://comma.ai/shop/products/eon-dashcam-devkit) and the [comma two](https://comma.ai/shop/products/comma-two-devkit). A [car harness](https://comma.ai/shop/products/car-harness) is recommended to connect the EON or comma two to the car. For experimental purposes, openpilot can also run on an Ubuntu computer with external [webcams](https://github.com/commaai/openpilot/tree/master/tools/webcam).
Supported Cars
------
| Make | Model (US Market Reference) | Supported Package | ACC | No ACC accel below | No ALC below |
| ----------| ------------------------------| ------------------| -----------------| -------------------| ------------------|
| Acura | ILX 2016-18 | AcuraWatch Plus | openpilot | 25mph<sup>6</sup> | 25mph |
| Acura | RDX 2016-18 | AcuraWatch Plus | openpilot | 25mph<sup>6</sup> | 12mph |
| Chrysler | Pacifica 2017-18 | Adaptive Cruise | Stock | 0mph | 9mph |
| Chrysler | Pacifica Hybrid 2017-18 | Adaptive Cruise | Stock | 0mph | 9mph |
| Chrysler | Pacifica Hybrid 2019-20 | Adaptive Cruise | Stock | 0mph | 39mph |
| Acura | ILX 2016-18 | AcuraWatch Plus | openpilot | 25mph<sup>1</sup> | 25mph |
| Acura | RDX 2016-18 | AcuraWatch Plus | openpilot | 25mph<sup>1</sup> | 12mph |
| Honda | Accord 2018-19 | All | Stock | 0mph | 3mph |
| Honda | Accord Hybrid 2018-19 | All | Stock | 0mph | 3mph |
| Honda | Civic Hatchback 2017-19 | Honda Sensing | Stock | 0mph | 12mph |
| Honda | Civic Sedan/Coupe 2016-18 | Honda Sensing | openpilot | 0mph | 12mph |
| Honda | Civic Sedan/Coupe 2019 | Honda Sensing | Stock | 0mph | 2mph<sup>4</sup> |
| Honda | CR-V 2015-16 | Touring | openpilot | 25mph<sup>6</sup> | 12mph |
| Honda | Civic Sedan/Coupe 2019-20 | Honda Sensing | Stock | 0mph | 2mph<sup>2</sup> |
| Honda | CR-V 2015-16 | Touring | openpilot | 25mph<sup>1</sup> | 12mph |
| Honda | CR-V 2017-19 | Honda Sensing | Stock | 0mph | 12mph |
| Honda | CR-V Hybrid 2017-2019 | Honda Sensing | Stock | 0mph | 12mph |
| Honda | Fit 2018-19 | Honda Sensing | openpilot | 25mph<sup>6</sup> | 12mph |
| Honda | Fit 2018-19 | Honda Sensing | openpilot | 25mph<sup>1</sup> | 12mph |
| Honda | HR-V 2019 | Honda Sensing | openpilot | 25mph<sup>1</sup> | 12mph |
| Honda | Insight 2019 | Honda Sensing | Stock | 0mph | 3mph |
| Honda | Odyssey 2018-20 | Honda Sensing | openpilot | 25mph<sup>6</sup> | 0mph |
| Honda | Passport 2019 | All | openpilot | 25mph<sup>6</sup> | 12mph |
| Honda | Pilot 2016-18 | Honda Sensing | openpilot | 25mph<sup>6</sup> | 12mph |
| Honda | Pilot 2019 | All | openpilot | 25mph<sup>6</sup> | 12mph |
| Honda | Ridgeline 2017-19 | Honda Sensing | openpilot | 25mph<sup>6</sup> | 12mph |
| Hyundai | Elantra 2017-19<sup>1</sup> | SCC + LKAS | Stock | 19mph | 34mph |
| Hyundai | Genesis 2018<sup>1</sup> | All | Stock | 19mph | 34mph |
| Hyundai | Santa Fe 2019<sup>1</sup> | All | Stock | 0mph | 0mph |
| Jeep | Grand Cherokee 2016-18 | Adaptive Cruise | Stock | 0mph | 9mph |
| Jeep | Grand Cherokee 2019 | Adaptive Cruise | Stock | 0mph | 39mph |
| Kia | Optima 2019<sup>1</sup> | SCC + LKAS | Stock | 0mph | 0mph |
| Kia | Sorento 2018<sup>1</sup> | All | Stock | 0mph | 0mph |
| Kia | Stinger 2018<sup>1</sup> | SCC + LKAS | Stock | 0mph | 0mph |
| Lexus | CT Hybrid 2017-18 | All | Stock<sup>5</sup>| 0mph | 0mph |
| Honda | Odyssey 2018-20 | Honda Sensing | openpilot | 25mph<sup>1</sup> | 0mph |
| Honda | Passport 2019 | All | openpilot | 25mph<sup>1</sup> | 12mph |
| Honda | Pilot 2016-18 | Honda Sensing | openpilot | 25mph<sup>1</sup> | 12mph |
| Honda | Pilot 2019 | All | openpilot | 25mph<sup>1</sup> | 12mph |
| Honda | Ridgeline 2017-20 | Honda Sensing | openpilot | 25mph<sup>1</sup> | 12mph |
| Lexus | CT Hybrid 2017-18 | All | Stock<sup>3</sup>| 0mph | 0mph |
| Lexus | ES 2019 | All | openpilot | 0mph | 0mph |
| Lexus | ES Hybrid 2019 | All | openpilot | 0mph | 0mph |
| Lexus | IS 2017-2019 | All | Stock | 22mph | 0mph |
| Lexus | IS Hybrid 2017 | All | Stock | 0mph | 0mph |
| Lexus | NX Hybrid 2018 | All | Stock<sup>5</sup>| 0mph | 0mph |
| Lexus | RX 2016-17 | All | Stock<sup>5</sup>| 0mph | 0mph |
| Lexus | NX Hybrid 2018 | All | Stock<sup>3</sup>| 0mph | 0mph |
| Lexus | RX 2016-17 | All | Stock<sup>3</sup>| 0mph | 0mph |
| Lexus | RX 2020 | All | openpilot | 0mph | 0mph |
| Lexus | RX Hybrid 2016-19 | All | Stock<sup>5</sup>| 0mph | 0mph |
| Subaru | Crosstrek 2018-19 | EyeSight | Stock | 0mph | 0mph |
| Subaru | Impreza 2019-20 | EyeSight | Stock | 0mph | 0mph |
| Toyota | Avalon 2016 | TSS-P | Stock<sup>5</sup>| 20mph<sup>6</sup> | 0mph |
| Toyota | Avalon 2017-18 | All | Stock<sup>5</sup>| 20mph<sup>6</sup> | 0mph |
| Toyota | Camry 2018-19 | All | Stock | 0mph<sup>2</sup> | 0mph |
| Toyota | Camry Hybrid 2018-19 | All | Stock | 0mph<sup>2</sup> | 0mph |
| Lexus | RX Hybrid 2016-19 | All | Stock<sup>3</sup>| 0mph | 0mph |
| Toyota | Avalon 2016 | TSS-P | Stock<sup>3</sup>| 20mph<sup>1</sup> | 0mph |
| Toyota | Avalon 2017-18 | All | Stock<sup>3</sup>| 20mph<sup>1</sup> | 0mph |
| Toyota | Camry 2018-20 | All | Stock | 0mph<sup>4</sup> | 0mph |
| Toyota | Camry Hybrid 2018-19 | All | Stock | 0mph<sup>4</sup> | 0mph |
| Toyota | C-HR 2017-19 | All | Stock | 0mph | 0mph |
| Toyota | C-HR Hybrid 2017-19 | All | Stock | 0mph | 0mph |
| Toyota | Corolla 2017-19 | All | Stock<sup>5</sup>| 20mph<sup>6</sup> | 0mph |
| Toyota | Corolla 2017-19 | All | Stock<sup>3</sup>| 20mph<sup>1</sup> | 0mph |
| Toyota | Corolla 2020 | All | openpilot | 0mph | 0mph |
| Toyota | Corolla Hatchback 2019-20 | All | openpilot | 0mph | 0mph |
| Toyota | Corolla Hybrid 2020 | All | openpilot | 0mph | 0mph |
| Toyota | Highlander 2017-19 | All | Stock<sup>5</sup>| 0mph | 0mph |
| Toyota | Highlander Hybrid 2017-19 | All | Stock<sup>5</sup>| 0mph | 0mph |
| Toyota | Highlander 2017-19 | All | Stock<sup>3</sup>| 0mph | 0mph |
| Toyota | Highlander Hybrid 2017-19 | All | Stock<sup>3</sup>| 0mph | 0mph |
| Toyota | Highlander 2020 | All | openpilot | 0mph | 0mph |
| Toyota | Prius 2016 | TSS-P | Stock<sup>5</sup>| 0mph | 0mph |
| Toyota | Prius 2017-19 | All | Stock<sup>5</sup>| 0mph | 0mph |
| Toyota | Prius Prime 2017-20 | All | Stock<sup>5</sup>| 0mph | 0mph |
| Toyota | Rav4 2016 | TSS-P | Stock<sup>5</sup>| 20mph<sup>6</sup> | 0mph |
| Toyota | Rav4 2017-18 | All | Stock<sup>5</sup>| 20mph<sup>6</sup> | 0mph |
| Toyota | Rav4 2019 | All | openpilot | 0mph | 0mph |
| Toyota | Rav4 Hybrid 2016 | TSS-P | Stock<sup>5</sup>| 0mph | 0mph |
| Toyota | Rav4 Hybrid 2017-18 | All | Stock<sup>5</sup>| 0mph | 0mph |
| Toyota | Highlander Hybrid 2020 | All | openpilot | 0mph | 0mph |
| Toyota | Prius 2016 | TSS-P | Stock<sup>3</sup>| 0mph | 0mph |
| Toyota | Prius 2017-19 | All | Stock<sup>3</sup>| 0mph | 0mph |
| Toyota | Prius Prime 2017-20 | All | Stock<sup>3</sup>| 0mph | 0mph |
| Toyota | Rav4 2016 | TSS-P | Stock<sup>3</sup>| 20mph<sup>1</sup> | 0mph |
| Toyota | Rav4 2017-18 | All | Stock<sup>3</sup>| 20mph<sup>1</sup> | 0mph |
| Toyota | Rav4 2019-20 | All | openpilot | 0mph | 0mph |
| Toyota | Rav4 Hybrid 2016 | TSS-P | Stock<sup>3</sup>| 0mph | 0mph |
| Toyota | Rav4 Hybrid 2017-18 | All | Stock<sup>3</sup>| 0mph | 0mph |
| Toyota | Rav4 Hybrid 2019-20 | All | openpilot | 0mph | 0mph |
| Toyota | Sienna 2018 | All | Stock<sup>5</sup>| 0mph | 0mph |
| Volkswagen| Golf 2016-19<sup>3</sup> | Driver Assistance | Stock | 0mph | 0mph |
| Toyota | Sienna 2018 | All | Stock<sup>3</sup>| 0mph | 0mph |
<sup>1</sup>Requires a [panda](https://comma.ai/shop/products/panda-obd-ii-dongle) and open sourced [Hyundai giraffe](https://github.com/commaai/neo/tree/master/giraffe/hyundai), designed for the 2019 Sante Fe; pinout may differ for other Hyundai and Kia models. <br />
<sup>2</sup>28mph for Camry 4CYL L, 4CYL LE and 4CYL SE which don't have Full-Speed Range Dynamic Radar Cruise Control. <br />
<sup>3</sup>Requires a [custom connector](https://community.comma.ai/wiki/index.php/Volkswagen#Integration_at_R242_Camera) for the [car harness](https://comma.ai/shop/products/car-harness) <br />
<sup>4</sup>2019 Honda Civic 1.6L Diesel Sedan does not have ALC below 12mph. <br />
<sup>1</sup>[Comma Pedal](https://community.comma.ai/wiki/index.php/Comma_Pedal) is used to provide stop-and-go capability to some of the openpilot-supported cars that don't currently support stop-and-go. Here is how to [build a Comma Pedal](https://medium.com/@jfrux/comma-pedal-building-with-macrofab-6328bea791e8). ***NOTE: The Comma Pedal is not officially supported by [comma](https://comma.ai).*** <br />
<sup>2</sup>2019 Honda Civic 1.6L Diesel Sedan does not have ALC below 12mph. <br />
<sup>3</sup>When disconnecting the Driver Support Unit (DSU), openpilot ACC will replace stock ACC. For DSU locations, see [Toyota Wiki page](https://community.comma.ai/wiki/index.php/Toyota). ***NOTE: disconnecting the DSU disables Automatic Emergency Braking (AEB).*** <br />
<sup>4</sup>28mph for Camry 4CYL L, 4CYL LE and 4CYL SE which don't have Full-Speed Range Dynamic Radar Cruise Control. <br />
Community Maintained Cars and Features
------
| Make | Model (US Market Reference) | Supported Package | ACC | No ACC accel below | No ALC below |
| ----------| ------------------------------| ------------------| -----------------| -------------------| -------------|
| Buick | Regal 2018<sup>7</sup> | Adaptive Cruise | openpilot | 0mph | 7mph |
| Cadillac | ATS 2018<sup>7</sup> | Adaptive Cruise | openpilot | 0mph | 7mph |
| Chevrolet | Malibu 2017<sup>7</sup> | Adaptive Cruise | openpilot | 0mph | 7mph |
| Chevrolet | Volt 2017-18<sup>7</sup> | Adaptive Cruise | openpilot | 0mph | 7mph |
| GMC | Acadia Denali 2018<sup>7</sup>| Adaptive Cruise | openpilot | 0mph | 7mph |
| Holden | Astra 2017<sup>7</sup> | Adaptive Cruise | openpilot | 0mph | 7mph |
| Buick | Regal 2018<sup>1</sup> | Adaptive Cruise | openpilot | 0mph | 7mph |
| Cadillac | ATS 2018<sup>1</sup> | Adaptive Cruise | openpilot | 0mph | 7mph |
| Chevrolet | Malibu 2017<sup>1</sup> | Adaptive Cruise | openpilot | 0mph | 7mph |
| Chevrolet | Volt 2017-18<sup>1</sup> | Adaptive Cruise | openpilot | 0mph | 7mph |
| Chrysler | Pacifica 2017-18 | Adaptive Cruise | Stock | 0mph | 9mph |
| Chrysler | Pacifica 2020 | Adaptive Cruise | Stock | 0mph | 39mph |
| Chrysler | Pacifica Hybrid 2017-18 | Adaptive Cruise | Stock | 0mph | 9mph |
| Chrysler | Pacifica Hybrid 2019-20 | Adaptive Cruise | Stock | 0mph | 39mph |
| Genesis | G80 2018<sup>2</sup> | All | Stock | 0mph | 0mph |
| Genesis | G90 2018<sup>2</sup> | All | Stock | 0mph | 0mph |
| GMC | Acadia Denali 2018<sup>3</sup>| Adaptive Cruise | openpilot | 0mph | 7mph |
| Holden | Astra 2017<sup>1</sup> | Adaptive Cruise | openpilot | 0mph | 7mph |
| Hyundai | Elantra 2017-19<sup>2</sup> | SCC + LKAS | Stock | 19mph | 34mph |
| Hyundai | Genesis 2015-16<sup>2</sup> | SCC + LKAS | Stock | 19mph | 37mph |
| Hyundai | Ioniq 2017<sup>2</sup> | SCC + LKAS | Stock | 0mph | 32mph |
| Hyundai | Ioniq 2019 EV<sup>2</sup> | SCC + LKAS | Stock | 0mph | 32mph |
| Hyundai | Kona 2017-19<sup>2</sup> | SCC + LKAS | Stock | 22mph | 0mph |
| Hyundai | Kona 2019 EV<sup>2</sup> | SCC + LKAS | Stock | 0mph | 0mph |
| Hyundai | Palisade 2020<sup>2</sup> | All | Stock | 0mph | 0mph |
| Hyundai | Santa Fe 2019<sup>2</sup> | All | Stock | 0mph | 0mph |
| Hyundai | Sonata 2020<sup>2</sup> | All | Stock | 0mph | 0mph |
| Jeep | Grand Cherokee 2016-18 | Adaptive Cruise | Stock | 0mph | 9mph |
| Jeep | Grand Cherokee 2019 | Adaptive Cruise | Stock | 0mph | 39mph |
| Kia | Forte 2018<sup>2</sup> | SCC + LKAS | Stock | 0mph | 0mph |
| Kia | Optima 2017<sup>2</sup> | SCC + LKAS/LDWS | Stock | 0mph | 32mph |
| Kia | Optima 2019<sup>2</sup> | SCC + LKAS | Stock | 0mph | 0mph |
| Kia | Sorento 2018<sup>2</sup> | SCC + LKAS | Stock | 0mph | 0mph |
| Kia | Stinger 2018<sup>2</sup> | SCC + LKAS | Stock | 0mph | 0mph |
| Nissan | Leaf 2019 | Propilot | Stock | 0mph | 0mph |
| Nissan | X-Trail 2018 | Propilot | Stock | 0mph | 0mph |
| Subaru | Crosstrek 2018-19 | EyeSight | Stock | 0mph | 0mph |
| Subaru | Impreza 2018-20 | EyeSight | Stock | 0mph | 0mph |
| Volkswagen| Golf 2016-19<sup>3</sup> | Driver Assistance | Stock | 0mph | 0mph |
<sup>5</sup>When disconnecting the Driver Support Unit (DSU), openpilot ACC will replace stock ACC. For DSU locations, see [Toyota Wiki page](https://community.comma.ai/wiki/index.php/Toyota). ***NOTE: disconnecting the DSU disables Automatic Emergency Braking (AEB).*** <br />
<sup>6</sup>[Comma Pedal](https://community.comma.ai/wiki/index.php/Comma_Pedal) is used to provide stop-and-go capability to some of the openpilot-supported cars that don't currently support stop-and-go. Here is how to [build a Comma Pedal](https://medium.com/@jfrux/comma-pedal-building-with-macrofab-6328bea791e8). ***NOTE: The Comma Pedal is not officially supported by [comma](https://comma.ai).*** <br />
<sup>7</sup>Requires a [panda](https://comma.ai/shop/products/panda-obd-ii-dongle) and [community built giraffe](https://zoneos.com/volt/). ***NOTE: disconnecting the ASCM disables Automatic Emergency Braking (AEB).*** <br />
<sup>1</sup>Requires a [panda](https://comma.ai/shop/products/panda-obd-ii-dongle) and [community built giraffe](https://zoneos.com/volt/). ***NOTE: disconnecting the ASCM disables Automatic Emergency Braking (AEB).*** <br />
<sup>2</sup>Requires a [panda](https://comma.ai/shop/products/panda-obd-ii-dongle) and open sourced [Hyundai giraffe](https://github.com/commaai/neo/tree/master/giraffe/hyundai), designed for the 2019 Sante Fe; pinout may differ for other Hyundai and Kia models. <br />
<sup>3</sup>Requires a [custom connector](https://community.comma.ai/wiki/index.php/Volkswagen#Integration_at_R242_Camera) for the [car harness](https://comma.ai/shop/products/car-harness) <br />
Although it's not upstream, there's a community of people getting openpilot to run on Tesla's [here](https://tinkla.us/)
Community Maintained Cars and Features are not verified by comma to meet our [safety model](SAFETY.md). Be extra cautious using them. They are only available after enabling the toggle in `Settings->Developer->Enable Community Features`.
To promote a car from community maintained, it must meet a few requirements. We must own one from the brand, we must sell the harness for it, has full ISO26262 in both panda and openpilot, there must be a path forward for longitudinal control, it must have AEB still enabled, and it must support fingerprinting 2.0
Installation Instructions
------
Install openpilot on a EON by entering ``https://openpilot.comma.ai`` during the installer setup.
Install openpilot on an EON or comma two by entering ``https://openpilot.comma.ai`` during the installer setup.
Follow this [video instructions](https://youtu.be/3nlkomHathI) to properly mount the EON on the windshield. Note: openpilot features an automatic pose calibration routine and openpilot performance should not be affected by small pitch and yaw misalignments caused by imprecise EON mounting.
Follow these [video instructions](https://youtu.be/3nlkomHathI) to properly mount the device on the windshield. Note: openpilot features an automatic pose calibration routine and openpilot performance should not be affected by small pitch and yaw misalignments caused by imprecise device mounting.
Before placing the device on your windshield, check the state and local laws and ordinances where you drive. Some state laws prohibit or restrict the placement of objects on the windshield of a motor vehicle.
@@ -174,7 +193,7 @@ Many factors can impact the performance of openpilot ALC and openpilot LDW, caus
* Poor visibility (heavy rain, snow, fog, etc.) or weather conditions that may interfere with sensor operation.
* The road facing camera is obstructed, covered or damaged by mud, ice, snow, etc.
* Obstruction caused by applying excessive paint or adhesive products (such as wraps, stickers, rubber coating, etc.) onto the vehicle.
* The EON is mounted incorrectly.
* The device is mounted incorrectly.
* When in sharp curves, like on-off ramps, intersections etc...; openpilot is designed to be limited in the amount of steering torque it can produce.
* In the presence of restricted lanes or construction zones.
* When driving on highly banked roads or in presence of strong cross-wind.
@@ -194,7 +213,7 @@ Many factors can impact the performance of openpilot ACC and openpilot FCW, caus
* Poor visibility (heavy rain, snow, fog, etc.) or weather conditions that may interfere with sensor operation.
* The road facing camera or radar are obstructed, covered, or damaged by mud, ice, snow, etc.
* Obstruction caused by applying excessive paint or adhesive products (such as wraps, stickers, rubber coating, etc.) onto the vehicle.
* The EON is mounted incorrectly.
* The device is mounted incorrectly.
* Approaching a toll booth, a bridge or a large metal plate.
* When driving on roads with pedestrians, cyclists, etc...
* In presence of traffic signs or stop lights, which are not detected by openpilot at this time.
@@ -212,13 +231,13 @@ The list above does not represent an exhaustive list of situations that may inte
Limitations of openpilot DM
------
openpilot DM should not be considered an exact measurements of the status of alertness of the driver.
openpilot DM should not be considered an exact measurement of the alertness of the driver.
Many factors can impact the performance of openpilot DM, causing it to be unable to function as intended. These include, but are not limited to:
* Low light conditions, such as driving at night or in dark tunnels.
* Bright light (due to oncoming headlights, direct sunlight, etc.).
* The driver face is partially or completely outside field of view of the driver facing camera.
* The driver's face is partially or completely outside field of view of the driver facing camera.
* Right hand driving vehicles.
* The driver facing camera is obstructed, covered, or damaged.
@@ -240,7 +259,7 @@ Safety and Testing
----
* openpilot observes ISO26262 guidelines, see [SAFETY.md](SAFETY.md) for more detail.
* openpilot has software in the loop [tests](run_docker_tests.sh) that run on every commit.
* openpilot has software in the loop [tests](.github/workflows/test.yaml) that run on every commit.
* The safety model code lives in panda and is written in C, see [code rigor](https://github.com/commaai/panda#code-rigor) for more details.
* panda has software in the loop [safety tests](https://github.com/commaai/panda/tree/master/tests/safety).
* Internally, we have a hardware in the loop Jenkins test suite that builds and unit tests the various processes.
@@ -267,15 +286,15 @@ Directory Structure
------
.
├── apk # The apk files used for the UI
├── cereal # The messaging spec and libs used for all logs on EON
├── cereal # The messaging spec and libs used for all logs
├── common # Library like functionality we've developed here
├── installer/updater # Manages auto-updates of openpilot
├── opendbc # Files showing how to interpret data from cars
├── panda # Code used to communicate on CAN
├── phonelibs # Libraries used on EON
├── pyextra # Libraries used on EON
├── phonelibs # Libraries used on NEOS devices
├── pyextra # Libraries used on NEOS devices
└── selfdrive # Code needed to drive the car
├── assets # Fonts and images for UI
├── assets # Fonts, images, and sounds for UI
├── athena # Allows communication with the app
├── boardd # Daemon to talk to the board
├── camerad # Driver to capture images from the camera sensors
@@ -289,7 +308,7 @@ Directory Structure
├── modeld # Driving and monitoring model runners
├── proclogd # Logs information from proc
├── sensord # IMU / GPS interface code
├── tests # Unit tests, system tests and a car simulator
├── test # Unit tests, system tests and a car simulator
└── ui # The UI
To understand how the services interact, see `cereal/service_list.yaml`.
@@ -308,3 +327,8 @@ NO WARRANTY EXPRESSED OR IMPLIED.**
---
<img src="https://d1qb2nb5cznatu.cloudfront.net/startups/i/1061157-bc7e9bf3b246ece7322e6ffe653f6af8-medium_jpg.jpg?buster=1458363130" width="75"></img> <img src="https://cdn-images-1.medium.com/max/1600/1*C87EjxGeMPrkTuVRVWVg4w.png" width="225"></img>
[![Total alerts](https://img.shields.io/lgtm/alerts/g/commaai/openpilot.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/commaai/openpilot/alerts/)
[![Language grade: Python](https://img.shields.io/lgtm/grade/python/g/commaai/openpilot.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/commaai/openpilot/context:python)
[![Language grade: C/C++](https://img.shields.io/lgtm/grade/cpp/g/commaai/openpilot.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/commaai/openpilot/context:cpp)
[![codecov](https://codecov.io/gh/commaai/openpilot/branch/master/graph/badge.svg)](https://codecov.io/gh/commaai/openpilot)
+10
View File
@@ -1,3 +1,13 @@
Version 0.7.5 (2020-05-13)
========================
* Right-Hand Drive support for both driving and driver monitoring!
* New driving model: improved at sharp turns and lead speed estimation
* New driver monitoring model: overall improvement on comma two
* Driver camera preview in settings to improve mounting position
* Added support for many Hyundai, Kia, Genesis models thanks to xx979xx!
* 2019 Nissan X-Trail and 2018 Nissan Leaf support thanks to avolmensky!
* Improved lateral tuning for 2020 Toyota Rav 4 (hybrid)
Version 0.7.4 (2020-03-20)
========================
* New driving model: improved lane changes and lead car detection
+34 -19
View File
@@ -14,39 +14,55 @@ AddOption('--asan',
arch = subprocess.check_output(["uname", "-m"], encoding='utf8').rstrip()
if platform.system() == "Darwin":
arch = "Darwin"
if arch == "aarch64" and not os.path.isdir("/system"):
arch = "larch64"
if arch == "aarch64":
webcam = bool(ARGUMENTS.get("use_webcam", 0))
if arch == "aarch64" or arch == "larch64":
lenv = {
"LD_LIBRARY_PATH": '/data/data/com.termux/files/usr/lib',
"PATH": os.environ['PATH'],
"ANDROID_DATA": os.environ['ANDROID_DATA'],
"ANDROID_ROOT": os.environ['ANDROID_ROOT'],
}
if arch == "aarch64":
# android
lenv["ANDROID_DATA"] = os.environ['ANDROID_DATA']
lenv["ANDROID_ROOT"] = os.environ['ANDROID_ROOT']
cpppath = [
"#phonelibs/opencl/include",
]
libpath = [
"#phonelibs/snpe/aarch64-android-clang3.8",
"/usr/lib",
"/data/data/com.termux/files/usr/lib",
"/system/vendor/lib64",
"/system/comma/usr/lib",
"#phonelibs/nanovg",
"#phonelibs/libyuv/lib",
]
cflags = ["-DQCOM", "-mcpu=cortex-a57"]
cxxflags = ["-DQCOM", "-mcpu=cortex-a57"]
if arch == "larch64":
cpppath += ["#phonelibs/capnp-cpp/include"]
libpath += ["#phonelibs/snpe/larch64"]
libpath += ["#phonelibs/libyuv/larch64/lib"]
libpath += ["#external/capnparm/lib", "/usr/lib/aarch64-linux-gnu"]
cflags = ["-DQCOM2", "-mcpu=cortex-a57"]
cxxflags = ["-DQCOM2", "-mcpu=cortex-a57"]
rpath = ["/usr/local/lib"]
else:
libpath += ["#phonelibs/snpe/aarch64"]
libpath += ["#phonelibs/libyuv/lib"]
cflags = ["-DQCOM", "-mcpu=cortex-a57"]
cxxflags = ["-DQCOM", "-mcpu=cortex-a57"]
rpath = ["/system/vendor/lib64"]
rpath = ["/system/vendor/lib64"]
else:
lenv = {
"PATH": "#external/bin:" + os.environ['PATH'],
}
cpppath = [
"#phonelibs/capnp-cpp/include",
"#phonelibs/capnp-c/include",
"#phonelibs/zmq/x64/include",
"#external/tensorflow/include",
]
@@ -54,7 +70,6 @@ else:
if arch == "Darwin":
libpath = [
"#phonelibs/capnp-cpp/mac/lib",
"#phonelibs/capnp-c/mac/lib",
"#phonelibs/libyuv/mac/lib",
"#cereal",
"#selfdrive/common",
@@ -64,7 +79,6 @@ else:
else:
libpath = [
"#phonelibs/capnp-cpp/x64/lib",
"#phonelibs/capnp-c/x64/lib",
"#phonelibs/snpe/x86_64-linux-clang",
"#phonelibs/zmq/x64/lib",
"#phonelibs/libyuv/x64/lib",
@@ -113,11 +127,10 @@ env = Environment(
"#phonelibs/bzip2",
"#phonelibs/libyuv/include",
"#phonelibs/openmax/include",
"#phonelibs/json/src",
"#phonelibs/json11",
"#phonelibs/eigen",
"#phonelibs/curl/include",
"#phonelibs/opencv/include",
#"#phonelibs/opencv/include", # use opencv4 instead
"#phonelibs/libgralloc/include",
"#phonelibs/android_frameworks_native/include",
"#phonelibs/android_hardware_libhardware/include",
@@ -175,10 +188,12 @@ def abspath(x):
# rpath works elsewhere
return x[0].path.rsplit("/", 1)[1][:-3]
#zmq = 'zmq'
# still needed for apks
zmq = FindFile("libzmq.a", libpath)
Export('env', 'arch', 'zmq', 'SHARED')
if arch == 'larch64':
zmq = 'zmq'
else:
zmq = FindFile("libzmq.a", libpath)
Export('env', 'arch', 'zmq', 'SHARED', 'webcam')
# cereal and messaging are shared with the system
SConscript(['cereal/SConscript'])
@@ -196,7 +211,7 @@ Import('_common', '_visionipc', '_gpucommon', '_gpu_libs')
if SHARED:
common, visionipc, gpucommon = abspath(common), abspath(visionipc), abspath(gpucommon)
else:
common = [_common, 'json']
common = [_common, 'json11']
visionipc = _visionipc
gpucommon = [_gpucommon] + _gpu_libs
@@ -215,6 +230,7 @@ if arch != "Darwin":
SConscript(['selfdrive/controls/lib/cluster/SConscript'])
SConscript(['selfdrive/controls/lib/lateral_mpc/SConscript'])
SConscript(['selfdrive/controls/lib/longitudinal_mpc/SConscript'])
SConscript(['selfdrive/controls/lib/longitudinal_mpc_model/SConscript'])
SConscript(['selfdrive/boardd/SConscript'])
SConscript(['selfdrive/proclogd/SConscript'])
@@ -229,5 +245,4 @@ if arch == "aarch64":
SConscript(['selfdrive/locationd/SConscript'])
SConscript(['selfdrive/locationd/kalman/SConscript'])
# TODO: finish cereal, dbcbuilder, MPC
SConscript(['tools/lib/index_log/SConscript'])
Binary file not shown.
+1 -7
View File
@@ -5,10 +5,6 @@ messaging_dir = Dir('messaging')
# TODO: remove src-prefix and cereal from command string. can we set working directory?
env.Command(["gen/c/include/c++.capnp.h", "gen/c/include/java.capnp.h"], [], "mkdir -p " + gen_dir.path + "/c/include && touch $TARGETS")
env.Command(
['gen/c/car.capnp.c', 'gen/c/log.capnp.c', 'gen/c/car.capnp.h', 'gen/c/log.capnp.h'],
['car.capnp', 'log.capnp'],
'capnpc $SOURCES --src-prefix=cereal -o c:' + gen_dir.path + '/c/')
env.Command(
['gen/cpp/car.capnp.c++', 'gen/cpp/log.capnp.c++', 'gen/cpp/car.capnp.h', 'gen/cpp/log.capnp.h'],
['car.capnp', 'log.capnp'],
@@ -22,14 +18,12 @@ if shutil.which('capnpc-java'):
# TODO: remove non shared cereal and messaging
cereal_objects = env.SharedObject([
'gen/c/car.capnp.c',
'gen/c/log.capnp.c',
'gen/cpp/car.capnp.c++',
'gen/cpp/log.capnp.c++',
])
env.Library('cereal', cereal_objects)
env.SharedLibrary('cereal_shared', cereal_objects, LIBS=["capnp_c"])
env.SharedLibrary('cereal_shared', cereal_objects)
cereal_dir = Dir('.')
services_h = env.Command(
+24 -8
View File
@@ -91,6 +91,12 @@ struct CarEvent @0x9b1657f34caf3ad3 {
carUnrecognized @66;
radarCommIssue @67;
driverMonitorLowAcc @68;
invalidLkasSetting @69;
speedTooHigh @70;
laneChangeBlocked @71;
relayMalfunction @72;
gasPressed @73;
stockFcw @74;
}
}
@@ -119,12 +125,14 @@ struct CarState {
brakeLights @19 :Bool;
# steering wheel
steeringAngle @7 :Float32; # deg
steeringRate @15 :Float32; # deg/s
steeringTorque @8 :Float32; # TODO: standardize units
steeringAngle @7 :Float32; # deg
steeringRate @15 :Float32; # deg/s
steeringTorque @8 :Float32; # TODO: standardize units
steeringTorqueEps @27 :Float32; # TODO: standardize units
steeringPressed @9 :Bool; # if the user is using the steering wheel
steeringRateLimited @29 :Bool; # if the torque is limited by the rate limiter
steeringPressed @9 :Bool; # if the user is using the steering wheel
steeringRateLimited @29 :Bool; # if the torque is limited by the rate limiter
steerWarning @35 :Bool; # temporary steer unavailble
steerError @36 :Bool; # permanent steer error
stockAeb @30 :Bool;
stockFcw @31 :Bool;
espDisabled @32 :Bool;
@@ -151,7 +159,7 @@ struct CarState {
# which packets this state came from
canMonoTimes @12: List(UInt64);
# blindspot sensors
leftBlindspot @33 :Bool; # Is there something blocking the left lane change
rightBlindspot @34 :Bool; # Is there something blocking the right lane change
@@ -309,6 +317,7 @@ struct CarControl {
chimeWarning2 @5;
chimeWarningRepeat @6;
chimePrompt @7;
chimeWarning2Repeat @8;
}
}
}
@@ -379,6 +388,7 @@ struct CarParams {
radarTimeStep @45: Float32 = 0.05; # time delta between radar updates, 20Hz is very standard
communityFeature @46: Bool; # true if a community maintained feature is detected
fingerprintSource @49: FingerprintSource;
networkLocation @50 :NetworkLocation; # Where Panda/C2 is integrated into the car's CAN network
struct LateralParams {
torqueBP @0 :List(Int32);
@@ -456,8 +466,9 @@ struct CarParams {
enum TransmissionType {
unknown @0;
automatic @1;
manual @2;
automatic @1; # Traditional auto, including DSG
manual @2; # True "stick shift" only
direct @3; # Electric vehicle or other direct drive
}
struct CarFw {
@@ -496,4 +507,9 @@ struct CarParams {
fw @1;
fixed @2;
}
enum NetworkLocation {
fwdCamera @0; # Standard/default integration at LKAS camera
gateway @1; # Integration at vehicle's CAN gateway
}
}
+28 -5
View File
@@ -129,6 +129,7 @@ struct FrameData {
gainFrac @15 :Float32;
focusVal @16 :List(Int16);
focusConf @17 :List(UInt8);
sharpnessScore @18 :List(UInt16);
frameType @7 :FrameType;
timestampSof @8 :UInt64;
@@ -352,6 +353,25 @@ struct HealthData {
enum FaultType {
relayMalfunction @0;
unusedInterruptHandled @1;
interruptRateCan1 @2;
interruptRateCan2 @3;
interruptRateCan3 @4;
interruptRateTach @5;
interruptRateGmlan @6;
interruptRateInterrupts @7;
interruptRateSpiDma @8;
interruptRateSpiCs @9;
interruptRateUart1 @10;
interruptRateUart2 @11;
interruptRateUart3 @12;
interruptRateUart5 @13;
interruptRateUartDma @14;
interruptRateUsb @15;
interruptRateTim1 @16;
interruptRateTim3 @17;
registerDivergent @18;
# Update max fault type in boardd when adding faults
}
enum HwType {
@@ -805,7 +825,7 @@ struct PathPlan {
struct LiveLocationKalman {
# More info on reference frames:
# More info on reference frames:
# https://github.com/commaai/openpilot/tree/master/common/transformations
positionECEF @0 : Measurement;
@@ -821,10 +841,10 @@ struct LiveLocationKalman {
orientationECEF @6 : Measurement;
orientationNED @7 : Measurement;
angularVelocityDevice @8 : Measurement;
# orientationNEDCalibrated transforms to rot matrix: NED_from_calibrated
orientationNEDCalibrated @9 : Measurement;
# Calibrated frame is simply device frame
# aligned with the vehicle
velocityCalibrated @10 : Measurement;
@@ -835,7 +855,7 @@ struct LiveLocationKalman {
gpsTimeOfWeek @14 :Float64;
status @15 :Status;
unixTimestampMillis @16 :Int64;
enum Status {
uninitialized @0;
uncalibrated @1;
@@ -1775,12 +1795,14 @@ struct UiLayoutState {
activeApp @0 :App;
sidebarCollapsed @1 :Bool;
mapEnabled @2 :Bool;
mockEngaged @3 :Bool;
enum App {
home @0;
music @1;
nav @2;
settings @3;
none @4;
}
}
@@ -1879,6 +1901,7 @@ struct DMonitoringState {
awarenessPassive @12 :Float32;
isLowStd @13 :Bool;
hiStdCount @14 :UInt32;
isPreview @15 :Bool;
}
struct Boot {
@@ -1971,7 +1994,7 @@ struct Event {
sendcan @17 :List(CanData);
logMessage @18 :Text;
liveCalibration @19 :LiveCalibrationData;
androidLogEntry @20 :AndroidLogEntry;
androidLog @20 :AndroidLogEntry;
gpsLocation @21 :GpsLocationData;
carState @22 :Car.CarState;
carControl @23 :Car.CarControl;
+2 -1
View File
@@ -34,7 +34,8 @@ extra_compile_args = ["-std=c++11"]
libraries = ['zmq']
ARCH = subprocess.check_output(["uname", "-m"], encoding='utf8').rstrip() # pylint: disable=unexpected-keyword-arg
if ARCH == "aarch64":
if ARCH == "aarch64" and os.path.isdir("/system"):
# android
extra_compile_args += ["-Wno-deprecated-register"]
libraries += ['gnustl_shared']
+16 -3
View File
@@ -76,6 +76,7 @@ carEvents: [8070, true, 1., 1]
carParams: [8071, true, 0.02, 1]
frontFrame: [8072, true, 10.]
dMonitoringState: [8073, true, 5., 1]
offroadLayout: [8074, false, 0.]
testModel: [8040, false, 0.]
testLiveLocation: [8045, false, 0.]
@@ -103,19 +104,31 @@ testJoystick: [8056, false, 0.]
# gpsd -- publishes EON's gps
# publishes: gpsNMEA
# visiond -- talks to the cameras, runs the model, saves the videos
# publishes: frame, model, driverMonitoring, cameraOdometry, thumbnail
# camerad -- publishes camera frames
# publishes: frame, frontFrame, thumbnail
# subscribes: driverState
# dmonitoringmodeld -- runs face detection on camera frames
# publishes: driverState
# **** stateful data transformers ****
# modeld -- runs & publishes the model
# publishes: model, cameraOdometry
# subscribes: liveCalibration, pathPlan
# plannerd -- decides where to drive the car
# subscribes: carState, model, radarState, controlsState, liveParameters
# publishes: plan, pathPlan, liveMpc, liveLongitudinalMpc
# controlsd -- drives the car by sending CAN messages to panda
# subscribes: can, thermal, health, plan, pathPlan, driverMonitoring, liveCalibration
# subscribes: can, thermal, health, plan, pathPlan, dMonitoringState, liveCalibration, model
# publishes: carState, carControl, sendcan, controlsState, carEvents, carParams
# dmonitoringd -- processes driver monitoring data and publishes driver awareness
# subscribes: driverState, liveCalibration, carState, model, gpsLocation
# publishes: dMonitoringState
# radard -- processes the radar and vision data
# subscribes: can, controlsState, model, liveParameters
# publishes: radarState, liveTracks
+7
View File
@@ -0,0 +1,7 @@
coverage:
status:
project:
default:
informational: true
patch: off
+2 -5
View File
@@ -135,8 +135,6 @@ def get_network_strength(network_type):
# from SignalStrength.java
def get_lte_level(rsrp, rssnr):
INT_MAX = 2147483647
lvl_rsrp = NetworkStrength.unknown
lvl_rssnr = NetworkStrength.unknown
if rsrp == INT_MAX:
lvl_rsrp = NetworkStrength.unknown
elif rsrp >= -95:
@@ -174,7 +172,6 @@ def get_network_strength(network_type):
return lvl
def get_gsm_level(asu):
lvl = NetworkStrength.unknown
if asu <= 2 or asu == 99:
lvl = NetworkStrength.unknown
elif asu >= 12:
@@ -232,7 +229,7 @@ def get_network_strength(network_type):
if network_type == NetworkType.none:
return network_strength
if network_type == NetworkType.wifi:
out = subprocess.check_output('dumpsys connectivity', shell=True).decode('ascii')
out = subprocess.check_output('dumpsys connectivity', shell=True).decode('utf-8')
network_strength = NetworkStrength.unknown
for line in out.split('\n'):
signal_str = "SignalStrength: "
@@ -251,7 +248,7 @@ def get_network_strength(network_type):
return network_strength
else:
# check cell strength
out = subprocess.check_output('dumpsys telephony.registry', shell=True).decode('ascii')
out = subprocess.check_output('dumpsys telephony.registry', shell=True).decode('utf-8')
for line in out.split('\n'):
if "mSignalStrength" in line:
arr = line.split(' ')
+1 -2
View File
@@ -6,5 +6,4 @@ class FirstOrderFilter():
def update(self, x):
self.x = (1. - self.k) * self.x + self.k * x
return self.x
+3 -1
View File
@@ -52,7 +52,7 @@ class UnknownKeyName(Exception):
keys = {
"AccessToken": [TxType.PERSISTENT],
"AccessToken": [TxType.CLEAR_ON_MANAGER_START],
"AthenadPid": [TxType.PERSISTENT],
"CalibrationParams": [TxType.PERSISTENT],
"CarParams": [TxType.CLEAR_ON_MANAGER_START, TxType.CLEAR_ON_PANDA_DISCONNECT],
@@ -70,6 +70,7 @@ keys = {
"GithubSshKeys": [TxType.PERSISTENT],
"HasAcceptedTerms": [TxType.PERSISTENT],
"HasCompletedSetup": [TxType.PERSISTENT],
"IsDriverViewEnabled": [TxType.CLEAR_ON_MANAGER_START],
"IsLdwEnabled": [TxType.PERSISTENT],
"IsGeofenceEnabled": [TxType.PERSISTENT],
"IsMetric": [TxType.PERSISTENT],
@@ -78,6 +79,7 @@ keys = {
"IsTakingSnapshot": [TxType.CLEAR_ON_MANAGER_START],
"IsUpdateAvailable": [TxType.CLEAR_ON_MANAGER_START],
"IsUploadRawEnabled": [TxType.PERSISTENT],
"LastAthenaPingTime": [TxType.PERSISTENT],
"LastUpdateTime": [TxType.PERSISTENT],
"LimitSetSpeed": [TxType.PERSISTENT],
"LimitSetSpeedNeural": [TxType.PERSISTENT],
+2 -2
View File
@@ -39,8 +39,8 @@ class Profiler():
print("******* Profiling *******")
for n, ms in sorted(self.cp.items(), key=lambda x: -x[1]):
if n in self.cp_ignored:
print("%30s: %7.2f percent: %3.0f IGNORED" % (n, ms*1000.0, ms/self.tot*100))
print("%30s: %9.2f percent: %3.0f IGNORED" % (n, ms*1000.0, ms/self.tot*100))
else:
print("%30s: %7.2f percent: %3.0f" % (n, ms*1000.0, ms/self.tot*100))
print("%30s: %9.2f percent: %3.0f" % (n, ms*1000.0, ms/self.tot*100))
print("Iter clock: %2.6f TOTAL: %2.2f" % (self.tot/self.iter, self.tot))
+3
View File
@@ -50,6 +50,9 @@ class FakeSpinner():
def update(self, _):
pass
def close(self):
pass
def __exit__(self, type, value, traceback):
pass
+1 -1
View File
@@ -53,7 +53,7 @@ class RunningStat():
class RunningStatFilter():
def __init__(self, raw_priors=None, filtered_priors=None, max_trackable=-1):
self.raw_stat = RunningStat(raw_priors, max_trackable)
self.raw_stat = RunningStat(raw_priors, -1)
self.filtered_stat = RunningStat(filtered_priors, max_trackable)
def reset(self):
+83
View File
@@ -0,0 +1,83 @@
#!/usr/bin/env python3
import os
import time
import subprocess
from common.basedir import BASEDIR
class TextWindow():
def __init__(self, s):
try:
self.text_proc = subprocess.Popen(["./text", s],
stdin=subprocess.PIPE,
cwd=os.path.join(BASEDIR, "selfdrive", "ui", "text"),
close_fds=True)
except OSError:
self.text_proc = None
def get_status(self):
if self.text_proc is not None:
self.text_proc.poll()
return self.text_proc.returncode
return None
def __enter__(self):
return self
def close(self):
if self.text_proc is not None:
self.text_proc.terminate()
self.text_proc = None
def wait_for_exit(self):
while True:
if self.get_status() == 1:
return
time.sleep(0.1)
def __del__(self):
self.close()
def __exit__(self, type, value, traceback):
self.close()
class FakeTextWindow():
def __init__(self, s):
pass
def get_status(self):
return 1
def wait_for_exit(self):
return
def __enter__(self):
return self
def update(self, _):
pass
def __exit__(self, type, value, traceback):
pass
if __name__ == "__main__":
text = """Traceback (most recent call last):
File "./controlsd.py", line 608, in <module>
main()
File "./controlsd.py", line 604, in main
controlsd_thread(sm, pm, logcan)
File "./controlsd.py", line 455, in controlsd_thread
1/0
ZeroDivisionError: division by zero"""
print(text)
with TextWindow(text) as s:
for _ in range(100):
if s.get_status() == 1:
print("Got exit button")
break
time.sleep(0.1)
print("gone")
-79
View File
@@ -1,6 +1,5 @@
import numpy as np
import common.transformations.orientation as orient
import math
FULL_FRAME_SIZE = (1164, 874)
W, H = FULL_FRAME_SIZE[0], FULL_FRAME_SIZE[1]
@@ -147,81 +146,3 @@ def pretransform_from_calib(calib):
camera_frame_from_calib_frame = get_camera_frame_from_calib_frame(camera_frame_from_road_frame)
return np.linalg.inv(camera_frame_from_calib_frame)
def transform_img(base_img,
augment_trans=np.array([0,0,0]),
augment_eulers=np.array([0,0,0]),
from_intr=eon_intrinsics,
to_intr=eon_intrinsics,
output_size=None,
pretransform=None,
top_hacks=False,
yuv=False,
alpha=1.0,
beta=0,
blur=0):
import cv2 # pylint: disable=import-error
cv2.setNumThreads(1)
if yuv:
base_img = cv2.cvtColor(base_img, cv2.COLOR_YUV2RGB_I420)
size = base_img.shape[:2]
if not output_size:
output_size = size[::-1]
cy = from_intr[1,2]
def get_M(h=1.22):
quadrangle = np.array([[0, cy + 20],
[size[1]-1, cy + 20],
[0, size[0]-1],
[size[1]-1, size[0]-1]], dtype=np.float32)
quadrangle_norm = np.hstack((normalize(quadrangle, intrinsics=from_intr), np.ones((4,1))))
quadrangle_world = np.column_stack((h*quadrangle_norm[:,0]/quadrangle_norm[:,1],
h*np.ones(4),
h/quadrangle_norm[:,1]))
rot = orient.rot_from_euler(augment_eulers)
to_extrinsics = np.hstack((rot.T, -augment_trans[:,None]))
to_KE = to_intr.dot(to_extrinsics)
warped_quadrangle_full = np.einsum('jk,ik->ij', to_KE, np.hstack((quadrangle_world, np.ones((4,1)))))
warped_quadrangle = np.column_stack((warped_quadrangle_full[:,0]/warped_quadrangle_full[:,2],
warped_quadrangle_full[:,1]/warped_quadrangle_full[:,2])).astype(np.float32)
M = cv2.getPerspectiveTransform(quadrangle, warped_quadrangle.astype(np.float32))
return M
M = get_M()
if pretransform is not None:
M = M.dot(pretransform)
augmented_rgb = cv2.warpPerspective(base_img, M, output_size, borderMode=cv2.BORDER_REPLICATE)
if top_hacks:
cyy = int(math.ceil(to_intr[1,2]))
M = get_M(1000)
if pretransform is not None:
M = M.dot(pretransform)
augmented_rgb[:cyy] = cv2.warpPerspective(base_img, M, (output_size[0], cyy), borderMode=cv2.BORDER_REPLICATE)
# brightness and contrast augment
augmented_rgb = np.clip((float(alpha)*augmented_rgb + beta), 0, 255).astype(np.uint8)
# gaussian blur
if blur > 0:
augmented_rgb = cv2.GaussianBlur(augmented_rgb,(blur*2+1,blur*2+1),cv2.BORDER_DEFAULT)
if yuv:
augmented_img = cv2.cvtColor(augmented_rgb, cv2.COLOR_RGB2YUV_I420)
else:
augmented_img = augmented_rgb
return augmented_img
def yuv_crop(frame, output_size, center=None):
# output_size in camera coordinates so u,v
# center in array coordinates so row, column
import cv2 # pylint: disable=import-error
rgb = cv2.cvtColor(frame, cv2.COLOR_YUV2RGB_I420)
if not center:
center = (rgb.shape[0]/2, rgb.shape[1]/2)
rgb_crop = rgb[center[0] - output_size[1]/2: center[0] + output_size[1]/2,
center[1] - output_size[0]/2: center[1] + output_size[0]/2]
return cv2.cvtColor(rgb_crop, cv2.COLOR_RGB2YUV_I420)
+3 -11
View File
@@ -44,24 +44,15 @@ medmodel_intrinsics = np.array(
# BIG model
BIGMODEL_INPUT_SIZE = (864, 288)
BIGMODEL_INPUT_SIZE = (1024, 512)
BIGMODEL_YUV_SIZE = (BIGMODEL_INPUT_SIZE[0], BIGMODEL_INPUT_SIZE[1] * 3 // 2)
bigmodel_zoom = 1.
bigmodel_intrinsics = np.array(
[[ eon_focal_length / bigmodel_zoom, 0. , 0.5 * BIGMODEL_INPUT_SIZE[0]],
[ 0. , eon_focal_length / bigmodel_zoom, 0.2 * BIGMODEL_INPUT_SIZE[1]],
[ 0. , eon_focal_length / bigmodel_zoom, 256+MEDMODEL_CY],
[ 0. , 0. , 1.]])
bigmodel_border = np.array([
[0,0,1],
[BIGMODEL_INPUT_SIZE[0], 0, 1],
[BIGMODEL_INPUT_SIZE[0], BIGMODEL_INPUT_SIZE[1], 1],
[0, BIGMODEL_INPUT_SIZE[1], 1],
])
model_frame_from_road_frame = np.dot(model_intrinsics,
get_view_frame_from_road_frame(0, 0, 0, model_height))
@@ -72,6 +63,7 @@ medmodel_frame_from_road_frame = np.dot(medmodel_intrinsics,
get_view_frame_from_road_frame(0, 0, 0, model_height))
model_frame_from_bigmodel_frame = np.dot(model_intrinsics, np.linalg.inv(bigmodel_intrinsics))
medmodel_frame_from_bigmodel_frame = np.dot(medmodel_intrinsics, np.linalg.inv(bigmodel_intrinsics))
# 'camera from model camera'
def get_model_height_transform(camera_frame_from_road_frame, height):
+45
View File
@@ -0,0 +1,45 @@
import os
from cffi import FFI
# Workaround for the EON/termux build of Python having os.*xattr removed.
ffi = FFI()
ffi.cdef("""
int setxattr(const char *path, const char *name, const void *value, size_t size, int flags);
ssize_t getxattr(const char *path, const char *name, void *value, size_t size);
ssize_t listxattr(const char *path, char *list, size_t size);
int removexattr(const char *path, const char *name);
""")
libc = ffi.dlopen(None)
def setxattr(path, name, value, flags=0):
path = path.encode()
name = name.encode()
if libc.setxattr(path, name, value, len(value), flags) == -1:
raise OSError(ffi.errno, f"{os.strerror(ffi.errno)}: setxattr({path}, {name}, {value}, {flags})")
def getxattr(path, name, size=128):
path = path.encode()
name = name.encode()
value = ffi.new(f"char[{size}]")
l = libc.getxattr(path, name, value, size)
if l == -1:
# errno 61 means attribute hasn't been set
if ffi.errno == 61:
return None
raise OSError(ffi.errno, f"{os.strerror(ffi.errno)}: getxattr({path}, {name}, {size})")
return ffi.buffer(value)[:l]
def listxattr(path, size=128):
path = path.encode()
attrs = ffi.new(f"char[{size}]")
l = libc.listxattr(path, attrs, size)
if l == -1:
raise OSError(ffi.errno, f"{os.strerror(ffi.errno)}: listxattr({path}, {size})")
# attrs is b'\0' delimited values (so chop off trailing empty item)
return [a.decode() for a in ffi.buffer(attrs)[:l].split(b"\0")[0:-1]]
def removexattr(path, name):
path = path.encode()
name = name.encode()
if libc.removexattr(path, name) == -1:
raise OSError(ffi.errno, f"{os.strerror(ffi.errno)}: removexattr({path}, {name})")
+6
View File
@@ -62,6 +62,12 @@ function launch {
echo 0-3 > /dev/cpuset/foreground/cpus
echo 0-3 > /dev/cpuset/android/cpus
# change interrupt affinity
echo 3 > /proc/irq/6/smp_affinity_list # MDSS
echo 1 > /proc/irq/78/smp_affinity_list # Modem, can potentially lock up
echo 2 > /proc/irq/733/smp_affinity_list # USB
echo 2 > /proc/irq/736/smp_affinity_list # USB
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )"
# Remove old NEOS update file
+14
View File
@@ -0,0 +1,14 @@
path_classifiers:
library:
- external
- phonelibs
- pyextra
- tools/lib/mkvparse
extraction:
cpp:
after_prepare:
- "pip3 install jinja2 pyyaml cython pycapnp numpy sympy tqdm cffi logentries zmq"
- "export PATH=$PWD/external/bin:$PATH"
index:
build_command: "python3 $(which scons)"
Binary file not shown.
Binary file not shown.
+291
View File
@@ -0,0 +1,291 @@
VERSION ""
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_: XXX EON Vector__XXX
BO_ 170 AccPedal: 8 XXX
SG_ KickDownPressed : 53|1@0+ (1,0) [0|3] "" XXX
SG_ CruisePedalActive : 54|1@0+ (1,0) [0|1] "" XXX
SG_ CruisePedalInactive : 55|1@0+ (1,0) [0|1] "" XXX
SG_ ThrottlelPressed : 50|1@0+ (1,0) [0|1] "" XXX
SG_ AcceleratorPedalPressed : 52|1@0+ (1,0) [0|7] "" XXX
SG_ AcceleratorPedalPercentage : 16|16@1+ (0.01,0) [0|100] "" XXX
SG_ Counter1 : 8|4@1+ (1,0) [0|15] "" XXX
SG_ EngineSpeed : 32|16@1- (1,0) [0|65535] "" XXX
SG_ uknown : 7|8@0- (1,0) [0|65535] "" XXX
BO_ 404 CruiseControl: 4 XXX
SG_ plus1mph_request : 16|1@0+ (1,0) [0|1] "" XXX
SG_ minus1mph_request : 18|1@0+ (1,0) [0|1] "" XXX
SG_ Cancel_request_up_stalk : 23|1@0+ (1,0) [0|1] "" XXX
SG_ Cancel_request_up_or_down_stalk : 20|1@0+ (1,0) [0|1] "" XXX
SG_ Resume_request : 22|1@0+ (1,0) [0|1] "" XXX
SG_ Counter1 : 3|4@0+ (1,0) [0|15] "" XXX
SG_ Counter2 : 11|4@0+ (1,0) [0|15] "" XXX
SG_ notCancel_0xF : 7|4@0+ (1,0) [0|15] "" XXX
SG_ setMe_0xFC : 31|8@0+ (1,0) [0|255] "" XXX
SG_ requests_0xF : 15|4@0+ (1,0) [0|15] "" XXX
SG_ plus5mph_request : 17|1@0+ (1,0) [0|0] "" Vector__XXX
SG_ minus5mph_request : 19|1@0+ (1,0) [0|0] "" Vector__XXX
BO_ 512 CruiseControlStatus: 8 XXX
SG_ CruiseControlInactiveFlag : 12|1@0+ (1,0) [0|1] "" XXX
SG_ CruiseCoontrolActiveFlag : 13|1@0+ (1,0) [0|1] "" XXX
SG_ CruiseControlSetpointSpeed : 7|8@0+ (0.25,0) [0|255] "mph" XXX
BO_ 168 EngineAndBrake: 8 XXX
SG_ Brake_active2 : 62|1@0+ (1,0) [0|1] "" XXX
SG_ BrakePressed : 61|1@0+ (1,0) [0|1] "" XXX
SG_ EngineTorque : 8|16@1- (1,0) [0|65535] "" XXX
SG_ EngineTorqueWoInterv : 24|16@1- (1,0) [0|65535] "" XXX
BO_ 470 SteeringButtons: 2 XXX
SG_ Volume_DOWN : 2|1@0+ (1,0) [0|1] "" XXX
SG_ Volume_UP : 3|1@0+ (1,0) [0|1] "" XXX
SG_ VoiceControl : 8|1@0+ (1,0) [0|1] "" XXX
SG_ Telephone : 0|1@0+ (1,0) [0|1] "" XXX
SG_ Next_up : 5|1@0+ (1,0) [0|1] "" XXX
SG_ Previous_down : 4|1@0+ (1,0) [0|1] "" XXX
BO_ 403 DynamicCruiseControlStatus: 8 XXX
SG_ Counter : 7|8@0+ (1,0) [0|255] "" XXX
SG_ CruiseActive : 43|1@0+ (1,0) [0|1] "" XXX
SG_ CruiseSpeedChangeRequest : 48|1@0+ (1,0) [0|1] "" XXX
SG_ CruiseControlSetpointSpeed : 15|8@0+ (1,-2) [0|255] "mph" XXX
BO_ 201 SteeringWheelAngle_DSC: 8 XXX
SG_ Counter1 : 23|4@0+ (1,0) [0|15] "" XXX
SG_ WeirdCounter : 44|4@1+ (1,0) [0|3] "" XXX
SG_ SteeringPositionComplementLow : 24|11@1- (1,0) [0|1] "" XXX
SG_ SteeringPosition : 0|16@1- (0.0439453125,0) [-600|600] "deg" XXX
BO_ 206 WheelSpeeds: 8 XXX
SG_ Wheel1 : 0|16@1- (0.0643699,0) [0|255] "kph" XXX
SG_ Wheel2 : 16|16@1- (0.0643699,0) [0|255] "kph" XXX
SG_ Wheel4 : 48|16@1- (0.0643699,0) [0|255] "kph" XXX
SG_ Wheel3 : 32|16@1- (0.0643699,0) [0|255] "kph" XXX
BO_ 884 WheelToleranceAdjustment: 8 XXX
BO_ 678 WiperSwitch: 8 XXX
SG_ AutoWipersOn : 0|1@1+ (1,0) [0|3] "" XXX
BO_ 304 TerminalStatus: 8 XXX
SG_ AccOn : 23|1@0+ (1,0) [0|255] "" XXX
SG_ IgnitionOff : 22|1@0+ (1,0) [0|3] "" XXX
BO_ 169 Torque2: 8 XXX
BO_ 184 TorqueTransmisionRequest: 8 XXX
BO_ 196 SteeringWheelAngle: 7 XXX
SG_ SteeringPosition : 0|16@1- (0.0439453125,0) [-600|600] "degree" XXX
SG_ SteeringSpeed : 24|16@1- (0.0439453125,0) [0|255] "degree/s" XXX
BO_ 180 WheelTorqueDriveTrain1: 8 XXX
BO_ 182 DynamicCruiseControlTorqueDemand: 8 XXX
BO_ 186 TransmissionData: 8 XXX
BO_ 191 RequestedWheelTorqueDriveTrainActiveCruiseControl: 8 XXX
SG_ Counter : 11|4@0- (1,0) [0|255] "" XXX
SG_ TorqueReq : 16|11@1+ (1,0) [0|65535] "" XXX
BO_ 414 Status_DSC: 8 XXX
BO_ 416 Speed: 8 XXX
SG_ VehicleSpeed : 0|12@1+ (0.103,0) [0|255] "kph" XXX
BO_ 418 TransimissionData2: 8 XXX
BO_ 690 WheelPressure: 8 XXX
BO_ 691 AccelerationData: 8 XXX
BO_ 408 GearSelectorSwitch: 8 XXX
SG_ Gear : 0|8@1+ (1,0) [0|0] "" Vector__XXX
BO_ 422 Distance: 8 XXX
BO_ 436 InstrumentClusterStatus_KOMBI: 8 XXX
BO_ 464 EngineData: 8 XXX
BO_ 945 TransmissionData3: 8 XXX
BO_ 200 SteeringWheelAngle_slow: 8 XXX
SG_ SteeringPosition : 0|16@1- (0.0439453125,0) [-600|600] "degree" XXX
SG_ SteeringSpeed : 24|16@1- (0.0439453125,0) [-65535|65535] "degree/s" XXX
BO_ 466 TransmissionDataDisplay: 8 XXX
BO_ 437 HeatFlow_LoadMomentClimate: 8 XXX
BO_ 1152 NetworkManagment1: 8 XXX
BO_ 1170 NetworkManagment2: 8 XXX
BO_ 1175 NetworkManagment3: 8 XXX
BO_ 1176 NetworkManagment4: 8 XXX
BO_ 1193 NetworkManagment5: 8 XXX
BO_ 1246 NetworkManagment6: 8 XXX
BO_ 438 HeatFlowEngine: 8 XXX
BO_ 784 AmbientTemperature: 8 XXX
BO_ 821 ElectricFuelPumpStatus: 8 XXX
BO_ 1007 EngineOBD_data: 8 XXX
BO_ 1432 ServicesDKG: 8 XXX
BO_ 309 CrashDisconnectControl: 8 XXX
BO_ 502 TurnSignals: 2 XXX
SG_ TurnSignalIdle : 9|1@0+ (1,0) [0|1] "" XXX
SG_ TurnSignalActive : 8|1@0+ (1,0) [0|1] "" XXX
SG_ RightTurn : 5|1@0+ (1,0) [0|1] "" XXX
SG_ LeftTurn : 4|1@1+ (1,0) [0|1] "" XXX
SG_ HoldActivated : 0|1@1+ (1,0) [0|1] "" XXX
BO_ 514 Dimming: 8 XXX
BO_ 538 LampsCondition: 8 XXX
BO_ 550 RainSensorWiperSpeed: 8 XXX
BO_ 578 ClimateFrontStatus: 8 XXX
BO_ 704 LCD_lighting: 8 XXX
BO_ 758 LightControl: 8 XXX
BO_ 760 Time_Date: 8 XXX
BO_ 762 SeatBeltContact: 8 XXX
BO_ 764 TrunkStatus: 8 XXX
BO_ 797 TirePressureStatus: 8 XXX
BO_ 816 Range_Mileage: 8 XXX
BO_ 823 StatusFuelControl: 8 XXX
BO_ 897 EngineOilLevelStatus: 8 XXX
BO_ 940 Terminal30Eerror: 8 XXX
BO_ 947 PowerManagmentConsumptionControl: 8 XXX
BO_ 948 PowerBatteryVoltage: 8 XXX
SG_ BatteryVoltage : 7|24@0+ (0.001,0) [0|65535] "" XXX
BO_ 958 PowerRunningTime: 8 XXX
BO_ 1408 ServicesKGM: 8 XXX
BO_ 1426 ServicesDME: 8 XXX
BO_ 1449 ServicesDSC: 8 XXX
BO_ 1504 ServicesKOMBI: 8 XXX
BO_ 1522 ServicesKBM: 8 XXX
BO_ 209 Accelerometer: 8 XXX
SG_ LateralAcceleration : 0|16@1- (1,0) [0|7] "" XXX
SG_ LongitudalAcceleration : 32|16@1- (1,0) [0|65535] "" XXX
BO_ 172 WheelTorqueDrivetrain2: 8 XXX
BO_ 128 Unknown80: 5 XXX
SG_ State2 : 24|4@1+ (1,0) [0|15] "" XXX
SG_ State1 : 23|8@0+ (1,0) [0|255] "" XXX
SG_ Counter1 : 31|4@0+ (1,0) [0|15] "" XXX
BO_ 320 Unknown140: 2 XXX
SG_ State : 7|8@0+ (1,0) [0|255] "" XXX
BO_ 212 Unknown_d4: 8 XXX
SG_ State1 : 47|8@0+ (1,0) [0|255] "" XXX
SG_ Counter1 : 55|8@0+ (1,0) [0|255] "" XXX
SG_ Counter2 : 63|8@0+ (1,0) [0|255] "" XXX
BO_ 205 Unknown_cd: 8 XXX
SG_ NEW_SIGNAL_2 : 15|8@0+ (1,0) [0|255] "" XXX
SG_ NEW_SIGNAL_3 : 23|8@0+ (1,0) [0|255] "" XXX
SG_ NEW_SIGNAL_4 : 31|8@0+ (1,0) [0|255] "" XXX
SG_ NEW_SIGNAL_5 : 39|8@0- (1,0) [0|255] "" XXX
SG_ NEW_SIGNAL_6 : 47|8@0+ (1,0) [0|255] "" XXX
SG_ Counter1 : 55|4@0+ (1,0) [0|255] "" XXX
SG_ NEW_SIGNAL_1 : 7|8@0+ (1,0) [0|255] "" XXX
SG_ NEW_SIGNAL_7 : 63|8@0- (1,0) [0|255] "" XXX
BO_ 1577 NEW_MSG_1: 8 XXX
CM_ SG_ 170 ThrottlelPressed "Active when accelerator pedal pressed or cruise control drives";
CM_ SG_ 170 AcceleratorPedalPressed "Active only when driver actually presses the pedal";
CM_ SG_ 170 AcceleratorPedalPercentage "ToDo Factor to be adjusted";
CM_ SG_ 170 EngineSpeed "It's hard to say that is even a rate";
CM_ SG_ 404 plus1mph_request "Appears when +1mph/kph stalk is depressed";
CM_ SG_ 404 minus1mph_request "Appears when -1mph/kph stalk is depressed";
CM_ SG_ 404 Cancel_request_up_stalk "Appears when cancel stalk (up) is depressed";
CM_ SG_ 404 Cancel_request_up_or_down_stalk "Appears when cancel stalk (up or down) is depressed";
CM_ SG_ 404 Resume_request "It appears when resume stalk button is depressed";
CM_ SG_ 404 Counter1 "It accelerates when requests are being sent";
CM_ SG_ 404 Counter2 "It accelerates when requests are being sent";
CM_ SG_ 404 notCancel_0xF "0xF unless cancel is requested then 0x0";
CM_ SG_ 168 Brake_active2 "";
CM_ SG_ 168 BrakePressed "Brake when driver presses the brake";
CM_ SG_ 168 EngineTorque "Engine torque without inertia - combustion torque";
CM_ SG_ 168 EngineTorqueWoInterv "Engine torque without inertia and without shift intervention";
CM_ SG_ 403 CruiseControlSetpointSpeed "Speed target";
CM_ SG_ 408 Gear "This is just provision, needs to be reverse engineered";
CM_ SG_ 502 TurnSignalIdle "Turn signal off";
CM_ SG_ 502 TurnSignalActive "Turn signal on or transitioning";
CM_ SG_ 502 RightTurn "Indicates right blinker or when steering returning right clears left blinker";
CM_ SG_ 502 LeftTurn "Indicates left blinker or when steering returning left clears right blinker";
CM_ SG_ 502 HoldActivated "Spikes down if blinker cleared with timeout or turn. Stays off if blinker cleared with stalk";
VAL_ 408 Gear 1 "D" 2 "S" 3 "N" 4 "R" 5 "P" ;
+48 -2
View File
@@ -18,12 +18,55 @@ unsigned int toyota_checksum(unsigned int address, uint64_t d, int l) {
d >>= 8; // remove checksum
unsigned int s = l;
while (address) { s += address & 0xff; address >>= 8; }
while (d) { s += d & 0xff; d >>= 8; }
while (address) { s += address & 0xFF; address >>= 8; }
while (d) { s += d & 0xFF; d >>= 8; }
return s & 0xFF;
}
unsigned int subaru_checksum(unsigned int address, uint64_t d, int l) {
d >>= ((8-l)*8); // remove padding
unsigned int s = 0;
while (address) { s += address & 0xFF; address >>= 8; }
l -= 1; // checksum is first byte
while (l) { s += d & 0xFF; d >>= 8; l -= 1; }
return s & 0xFF;
}
unsigned int chrysler_checksum(unsigned int address, uint64_t d, int l) {
/* This function does not want the checksum byte in the input data.
jeep chrysler canbus checksum from http://illmatics.com/Remote%20Car%20Hacking.pdf */
uint8_t checksum = 0xFF;
for (int j = 0; j < (l - 1); j++) {
uint8_t shift = 0x80;
uint8_t curr = (d >> 8*j) & 0xFF;
for (int i=0; i<8; i++) {
uint8_t bit_sum = curr & shift;
uint8_t temp_chk = checksum & 0x80U;
if (bit_sum != 0U) {
bit_sum = 0x1C;
if (temp_chk != 0U) {
bit_sum = 1;
}
checksum = checksum << 1;
temp_chk = checksum | 1U;
bit_sum ^= temp_chk;
} else {
if (temp_chk != 0U) {
bit_sum = 0x1D;
}
checksum = checksum << 1;
bit_sum ^= checksum;
}
checksum = bit_sum;
shift = shift >> 1;
}
}
return ~checksum & 0xFF;
}
// Static lookup table for fast computation of CRC8 poly 0x2F, aka 8H2F/AUTOSAR
uint8_t crc8_lut_8h2f[256];
@@ -106,6 +149,9 @@ unsigned int volkswagen_crc(unsigned int address, uint64_t d, int l) {
case 0x30C: // ACC_02 Automatic Cruise Control
crc ^= (uint8_t[]){0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F}[counter];
break;
case 0x30F: // SWA_01 Lane Change Assist (SpurWechselAssistent)
crc ^= (uint8_t[]){0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C}[counter];
break;
case 0x3C0: // Klemmen_Status_01 ignition and starting status
crc ^= (uint8_t[]){0xC3,0xC3,0xC3,0xC3,0xC3,0xC3,0xC3,0xC3,0xC3,0xC3,0xC3,0xC3,0xC3,0xC3,0xC3,0xC3}[counter];
break;
+2
View File
@@ -13,6 +13,8 @@
// Helper functions
unsigned int honda_checksum(unsigned int address, uint64_t d, int l);
unsigned int toyota_checksum(unsigned int address, uint64_t d, int l);
unsigned int subaru_checksum(unsigned int address, uint64_t d, int l);
unsigned int chrysler_checksum(unsigned int address, uint64_t d, int l);
void init_crc_lookup_tables();
unsigned int volkswagen_crc(unsigned int address, uint64_t d, int l);
unsigned int pedal_checksum(uint64_t d, int l);
+3 -1
View File
@@ -18,7 +18,9 @@ cdef extern from "common_dbc.h":
PEDAL_CHECKSUM,
PEDAL_COUNTER,
VOLKSWAGEN_CHECKSUM,
VOLKSWAGEN_COUNTER
VOLKSWAGEN_COUNTER,
SUBARU_CHECKSUM,
CHRYSLER_CHECKSUM
cdef struct Signal:
const char* name
+2
View File
@@ -38,6 +38,8 @@ enum SignalType {
PEDAL_COUNTER,
VOLKSWAGEN_CHECKSUM,
VOLKSWAGEN_COUNTER,
SUBARU_CHECKSUM,
CHRYSLER_CHECKSUM,
};
struct Signal {
+4
View File
@@ -29,6 +29,10 @@ const Signal sigs_{{address}}[] = {
.type = SignalType::VOLKSWAGEN_CHECKSUM,
{% elif checksum_type == "volkswagen" and sig.name == "COUNTER" %}
.type = SignalType::VOLKSWAGEN_COUNTER,
{% elif checksum_type == "subaru" and sig.name == "CHECKSUM" %}
.type = SignalType::SUBARU_CHECKSUM,
{% elif checksum_type == "chrysler" and sig.name == "CHECKSUM" %}
.type = SignalType::CHRYSLER_CHECKSUM,
{% elif address in [512, 513] and sig.name == "CHECKSUM_PEDAL" %}
.type = SignalType::PEDAL_CHECKSUM,
{% elif address in [512, 513] and sig.name == "COUNTER_PEDAL" %}
+6
View File
@@ -99,6 +99,12 @@ uint64_t CANPacker::pack(uint32_t address, const std::vector<SignalPackValue> &s
// The correct fix is unclear but this works for the moment.
unsigned int chksm = volkswagen_crc(address, ReverseBytes(ret), message_lookup[address].size);
ret = set_value(ret, sig, chksm);
} else if (sig.type == SignalType::SUBARU_CHECKSUM) {
unsigned int chksm = subaru_checksum(address, ret, message_lookup[address].size);
ret = set_value(ret, sig, chksm);
} else if (sig.type == SignalType::CHRYSLER_CHECKSUM) {
unsigned int chksm = chrysler_checksum(address, ReverseBytes(ret), message_lookup[address].size);
ret = set_value(ret, sig, chksm);
} else {
//WARN("CHECKSUM signal type not valid\n");
}
+10
View File
@@ -57,6 +57,16 @@ bool MessageState::parse(uint64_t sec, uint16_t ts_, uint8_t * dat) {
if (!update_counter_generic(tmp, sig.b2)) {
return false;
}
} else if (sig.type == SignalType::SUBARU_CHECKSUM) {
if (subaru_checksum(address, dat_be, size) != tmp) {
INFO("0x%X CHECKSUM FAIL\n", address);
return false;
}
} else if (sig.type == SignalType::CHRYSLER_CHECKSUM) {
if (chrysler_checksum(address, dat_le, size) != tmp) {
INFO("0x%X CHECKSUM FAIL\n", address);
return false;
}
} else if (sig.type == SignalType::PEDAL_CHECKSUM) {
if (pedal_checksum(dat_be, size) != tmp) {
INFO("0x%X PEDAL CHECKSUM FAIL\n", address);
+14
View File
@@ -46,6 +46,20 @@ def process(in_fn, out_fn):
checksum_start_bit = 0
counter_start_bit = 0
little_endian = True
elif can_dbc.name.startswith(("subaru_")):
checksum_type = "subaru"
checksum_size = 8
counter_size = None
checksum_start_bit = 0
counter_start_bit = None
little_endian = True
elif can_dbc.name.startswith(("chrysler_")):
checksum_type = "chrysler"
checksum_size = 8
counter_size = None
checksum_start_bit = 7
counter_start_bit = None
little_endian = False
else:
checksum_type = None
checksum_size = None
+1 -1
View File
@@ -43,7 +43,7 @@ BO_ 258 STEERING: 8 XXX
SG_ STEERING_RATE : 20|13@0+ (0.3187251,-1305.498) [0|8191] "deg/s" XXX
SG_ STEER_ANGLE : 4|13@0+ (0.3187251,-1307.888) [-360|360] "deg" XXX
BO_ 514 SPEED_1: 4 XXX
BO_ 514 SPEED_1: 8 XXX
SG_ SPEED_LEFT : 7|12@0+ (0.071028,0) [0|65535] "m/s" XXX
SG_ SPEED_RIGHT : 23|12@0+ (0.071028,0) [0|1023] "m/s" XXX
+9 -1
View File
@@ -47,6 +47,14 @@ BO_ 228 STEERING_CONTROL: 5 EON
SG_ COUNTER : 37|2@0+ (1,0) [0|3] "" EPS
SG_ CHECKSUM : 35|4@0+ (1,0) [0|15] "" EPS
BO_ 229 BOSCH_SUPPLEMENTAL_1: 8 XXX
SG_ SET_ME_X04 : 0|8@1+ (1,0) [0|255] "" XXX
SG_ SET_ME_X00 : 8|8@1+ (1,0) [0|255] "" XXX
SG_ SET_ME_X80 : 16|8@1+ (1,0) [0|255] "" XXX
SG_ SET_ME_X10 : 24|8@1+ (1,0) [0|255] "" XXX
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
BO_ 232 BRAKE_HOLD: 7 XXX
SG_ XMISSION_SPEED : 7|14@0- (1,0) [1|0] "" XXX
SG_ COMPUTER_BRAKE : 39|16@0+ (1,0) [0|0] "" XXX
@@ -178,7 +186,7 @@ BO_ 577 LEFT_LANE_LINE_2: 8 CAM
SG_ FRAME_INDEX : 7|4@0+ (1,0) [0|15] "" XXX
SG_ COUNTER : 61|2@0+ (1,0) [0|1] "" XXX
SG_ CHECKSUM : 59|4@0+ (1,0) [0|1] "" XXX
BO_ 579 RIGHT_LANE_LINE_1: 8 CAM
SG_ LINE_DISTANCE_VISIBLE : 39|9@0+ (1,0) [0|1] "" XXX
SG_ LINE_PROBABILITY : 46|6@0+ (0.015625,0) [0|1] "" XXX
@@ -0,0 +1,91 @@
CM_ "IMPORT _honda_2017.dbc"
CM_ "IMPORT _comma.dbc"
BO_ 145 KINEMATICS: 8 XXX
SG_ LAT_ACCEL : 7|10@0+ (0.02,-512) [-20|20] "m/s2" EON
BO_ 228 STEERING_CONTROL: 5 ADAS
SG_ STEER_TORQUE : 7|16@0- (1,0) [-3840|3840] "" EPS
SG_ STEER_TORQUE_REQUEST : 23|1@0+ (1,0) [0|1] "" EPS
SG_ SET_ME_X00 : 22|7@0+ (1,0) [0|127] "" EPS
SG_ SET_ME_X00_2 : 31|8@0+ (1,0) [0|0] "" EPS
SG_ COUNTER : 37|2@0+ (1,0) [0|3] "" EPS
SG_ CHECKSUM : 35|4@0+ (1,0) [0|15] "" EPS
BO_ 304 GAS_PEDAL_2: 8 PCM
SG_ ENGINE_TORQUE_ESTIMATE : 7|16@0- (1,0) [-1000|1000] "Nm" EON
SG_ ENGINE_TORQUE_REQUEST : 23|16@0- (1,0) [-1000|1000] "Nm" EON
SG_ CAR_GAS : 39|8@0+ (1,0) [0|255] "" EON
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
BO_ 342 STEERING_SENSORS: 6 EPS
SG_ STEER_ANGLE : 7|16@0- (-0.1,0) [-500|500] "deg" EON
SG_ STEER_ANGLE_RATE : 23|16@0- (1,0) [-3000|3000] "deg/s" EON
SG_ COUNTER : 45|2@0+ (1,0) [0|3] "" EON
SG_ CHECKSUM : 43|4@0+ (1,0) [0|3] "" EON
BO_ 399 STEER_STATUS: 7 EPS
SG_ STEER_TORQUE_SENSOR : 7|16@0- (-1,0) [-31000|31000] "tbd" EON
SG_ STEER_ANGLE_RATE : 23|16@0- (-0.1,0) [-31000|31000] "deg/s" EON
SG_ STEER_STATUS : 39|4@0+ (1,0) [0|15] "" EON
SG_ STEER_CONTROL_ACTIVE : 35|1@0+ (1,0) [0|1] "" EON
SG_ STEER_CONFIG_INDEX : 43|4@0+ (1,0) [0|15] "" EON
SG_ COUNTER : 53|2@0+ (1,0) [0|3] "" EON
SG_ CHECKSUM : 51|4@0+ (1,0) [0|3] "" EON
BO_ 401 GEARBOX: 8 PCM
SG_ GEAR_SHIFTER : 5|6@0+ (1,0) [0|63] "" EON
SG_ GEAR : 43|4@0+ (1,0) [0|15] "" EON
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
BO_ 422 SCM_BUTTONS: 8 SCM
SG_ CRUISE_BUTTONS : 7|3@0+ (1,0) [0|7] "" EON
SG_ LIGHTS_SETTING : 1|2@0+ (1,0) [0|3] "" EON
SG_ MAIN_ON : 47|1@0+ (1,0) [0|1] "" EON
SG_ CRUISE_SETTING : 43|2@0+ (1,0) [0|3] "" EON
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
SG_ DRIVERS_DOOR_OPEN : 63|1@0+ (1,0) [0|1] "" EON
SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
BO_ 487 BRAKE_PRESSURE: 4 VSA
SG_ BRAKE_PRESSURE1 : 7|10@0+ (0.015625,-103) [0|1000] "" EON
SG_ BRAKE_PRESSURE2 : 9|10@0+ (0.015625,-103) [0|1000] "" EON
SG_ CHECKSUM : 27|4@0+ (1,0) [0|3] "" EON
SG_ COUNTER : 29|2@0+ (1,0) [0|3] "" EON
BO_ 660 SCM_FEEDBACK: 8 SCM
SG_ RIGHT_BLINKER : 6|1@0+ (1,0) [0|1] "" EON
SG_ LEFT_BLINKER : 5|1@0+ (1,0) [0|1] "" EON
SG_ WIPERS_SPEED : 4|2@0+ (1,0) [0|3] "" EON
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON
BO_ 862 HIGHBEAM_CONTROL: 8 ADAS
SG_ ZEROS_BOH : 7|50@0+ (1,0) [0|127] "" BDY
SG_ ZEROS_BOH_2 : 48|4@1+ (1,0) [0|15] "" XXX
SG_ HIGHBEAMS_ON : 52|1@0+ (1,0) [0|1] "" XXX
SG_ AUTO_HIGHBEAMS_ACTIVE : 53|1@0+ (1,0) [0|1] "" XXX
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
BO_ 884 STALK_STATUS: 8 XXX
SG_ AUTO_HEADLIGHTS : 46|1@0+ (1,0) [0|1] "" EON
SG_ HIGH_BEAM_HOLD : 47|1@0+ (1,0) [0|1] "" EON
SG_ HIGH_BEAM_FLASH : 45|1@0+ (1,0) [0|1] "" EON
SG_ HEADLIGHTS_ON : 54|1@0+ (1,0) [0|1] "" EON
SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
CM_ SG_ 401 GEAR "10 = reverse, 11 = transition";
CM_ SG_ 420 BRAKE_HOLD_RELATED "On when Brake Hold engaged";
VAL_ 399 STEER_STATUS 6 "tmp_fault" 5 "fault_1" 4 "no_torque_alert_2" 3 "low_speed_lockout" 2 "no_torque_alert_1" 0 "normal" ;
VAL_ 401 GEAR_SHIFTER 32 "L" 16 "S" 8 "D" 4 "N" 2 "R" 1 "P" ;
VAL_ 401 GEAR 7 "L" 10 "S" 4 "D" 3 "N" 2 "R" 1 "P" ;
VAL_ 422 CRUISE_BUTTONS 7 "tbd" 6 "tbd" 5 "tbd" 4 "accel_res" 3 "decel_set" 2 "cancel" 1 "main" 0 "none" ;
VAL_ 422 LIGHTS_SETTING 3 "high_beam" 2 "low_beam" 1 "position" 0 "no_lights" ;
VAL_ 422 CRUISE_SETTING 3 "distance_adj" 2 "tbd" 1 "lkas_button" 0 "none" ;
CM_ "CHFFR_METRIC 342 STEER_ANGLE STEER_ANGLE 0.36 180; CHFFR_METRIC 380 ENGINE_RPM ENGINE_RPM 1 0; CHFFR_METRIC 804 ENGINE_TEMPERATURE ENGINE_TEMPERATURE 1 0";
+4 -1
View File
@@ -62,7 +62,10 @@ BO_ 180 SPEED: 8 XXX
BO_ 353 DSU_SPEED: 8 XXX
SG_ FORWARD_SPEED : 15|16@0- (0.00390625,-30) [0|255] "kph" XXX
BO_ 452 ENGINE_RPM: 8 CGW
SG_ RPM : 7|16@0- (0.78125,0) [0|0] "rpm" SCS
BO_ 466 PCM_CRUISE: 8 XXX
SG_ GAS_RELEASED : 4|1@0+ (1,0) [0|1] "" XXX
SG_ CRUISE_ACTIVE : 5|1@0+ (1,0) [0|1] "" XXX
+2 -2
View File
@@ -116,7 +116,7 @@ BO_ 388 PSCMStatus: 8 K43_PSCM
SG_ LKATorqueDelivered : 18|11@0- (0.01,0) [0|1] "" NEO
SG_ LKATotalTorqueDelivered : 2|11@0- (0.01,0) [-10.24|10.23] "Nm" NEO
BO_ 417 AcceleratorPedal: 8 XXX
BO_ 417 AcceleratorPedal: 7 XXX
SG_ AcceleratorPedal : 55|8@0+ (1,0) [0|0] "" NEO
BO_ 451 GasAndAcc: 8 XXX
@@ -170,7 +170,7 @@ BO_ 840 EBCMWheelSpdFront: 4 K17_EBCM
SG_ FLWheelSpd : 7|16@0+ (0.0311,0) [0|255] "km/h" NEO
SG_ FRWheelSpd : 23|16@0+ (0.0311,0) [0|255] "km/h" NEO
BO_ 842 EBCMWheelSpdRear: 4 K17_EBCM
BO_ 842 EBCMWheelSpdRear: 5 K17_EBCM
SG_ RLWheelSpd : 7|16@0+ (0.0311,0) [0|255] "km/h" NEO
SG_ RRWheelSpd : 23|16@0+ (0.0311,0) [0|255] "km/h" NEO
@@ -51,6 +51,14 @@ BO_ 228 STEERING_CONTROL: 5 EON
SG_ COUNTER : 37|2@0+ (1,0) [0|3] "" EPS
SG_ CHECKSUM : 35|4@0+ (1,0) [0|15] "" EPS
BO_ 229 BOSCH_SUPPLEMENTAL_1: 8 XXX
SG_ SET_ME_X04 : 0|8@1+ (1,0) [0|255] "" XXX
SG_ SET_ME_X00 : 8|8@1+ (1,0) [0|255] "" XXX
SG_ SET_ME_X80 : 16|8@1+ (1,0) [0|255] "" XXX
SG_ SET_ME_X10 : 24|8@1+ (1,0) [0|255] "" XXX
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
BO_ 232 BRAKE_HOLD: 7 XXX
SG_ XMISSION_SPEED : 7|14@0- (1,0) [1|0] "" XXX
SG_ COMPUTER_BRAKE : 39|16@0+ (1,0) [0|0] "" XXX
@@ -182,7 +190,7 @@ BO_ 577 LEFT_LANE_LINE_2: 8 CAM
SG_ FRAME_INDEX : 7|4@0+ (1,0) [0|15] "" XXX
SG_ COUNTER : 61|2@0+ (1,0) [0|1] "" XXX
SG_ CHECKSUM : 59|4@0+ (1,0) [0|1] "" XXX
BO_ 579 RIGHT_LANE_LINE_1: 8 CAM
SG_ LINE_DISTANCE_VISIBLE : 39|9@0+ (1,0) [0|1] "" XXX
SG_ LINE_PROBABILITY : 46|6@0+ (0.015625,0) [0|1] "" XXX
@@ -51,6 +51,14 @@ BO_ 228 STEERING_CONTROL: 5 EON
SG_ COUNTER : 37|2@0+ (1,0) [0|3] "" EPS
SG_ CHECKSUM : 35|4@0+ (1,0) [0|15] "" EPS
BO_ 229 BOSCH_SUPPLEMENTAL_1: 8 XXX
SG_ SET_ME_X04 : 0|8@1+ (1,0) [0|255] "" XXX
SG_ SET_ME_X00 : 8|8@1+ (1,0) [0|255] "" XXX
SG_ SET_ME_X80 : 16|8@1+ (1,0) [0|255] "" XXX
SG_ SET_ME_X10 : 24|8@1+ (1,0) [0|255] "" XXX
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
BO_ 232 BRAKE_HOLD: 7 XXX
SG_ XMISSION_SPEED : 7|14@0- (1,0) [1|0] "" XXX
SG_ COMPUTER_BRAKE : 39|16@0+ (1,0) [0|0] "" XXX
@@ -182,7 +190,7 @@ BO_ 577 LEFT_LANE_LINE_2: 8 CAM
SG_ FRAME_INDEX : 7|4@0+ (1,0) [0|15] "" XXX
SG_ COUNTER : 61|2@0+ (1,0) [0|1] "" XXX
SG_ CHECKSUM : 59|4@0+ (1,0) [0|1] "" XXX
BO_ 579 RIGHT_LANE_LINE_1: 8 CAM
SG_ LINE_DISTANCE_VISIBLE : 39|9@0+ (1,0) [0|1] "" XXX
SG_ LINE_PROBABILITY : 46|6@0+ (0.015625,0) [0|1] "" XXX
@@ -51,6 +51,14 @@ BO_ 228 STEERING_CONTROL: 5 EON
SG_ COUNTER : 37|2@0+ (1,0) [0|3] "" EPS
SG_ CHECKSUM : 35|4@0+ (1,0) [0|15] "" EPS
BO_ 229 BOSCH_SUPPLEMENTAL_1: 8 XXX
SG_ SET_ME_X04 : 0|8@1+ (1,0) [0|255] "" XXX
SG_ SET_ME_X00 : 8|8@1+ (1,0) [0|255] "" XXX
SG_ SET_ME_X80 : 16|8@1+ (1,0) [0|255] "" XXX
SG_ SET_ME_X10 : 24|8@1+ (1,0) [0|255] "" XXX
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
BO_ 232 BRAKE_HOLD: 7 XXX
SG_ XMISSION_SPEED : 7|14@0- (1,0) [1|0] "" XXX
SG_ COMPUTER_BRAKE : 39|16@0+ (1,0) [0|0] "" XXX
@@ -182,7 +190,7 @@ BO_ 577 LEFT_LANE_LINE_2: 8 CAM
SG_ FRAME_INDEX : 7|4@0+ (1,0) [0|15] "" XXX
SG_ COUNTER : 61|2@0+ (1,0) [0|1] "" XXX
SG_ CHECKSUM : 59|4@0+ (1,0) [0|1] "" XXX
BO_ 579 RIGHT_LANE_LINE_1: 8 CAM
SG_ LINE_DISTANCE_VISIBLE : 39|9@0+ (1,0) [0|1] "" XXX
SG_ LINE_PROBABILITY : 46|6@0+ (0.015625,0) [0|1] "" XXX
@@ -51,6 +51,14 @@ BO_ 228 STEERING_CONTROL: 5 EON
SG_ COUNTER : 37|2@0+ (1,0) [0|3] "" EPS
SG_ CHECKSUM : 35|4@0+ (1,0) [0|15] "" EPS
BO_ 229 BOSCH_SUPPLEMENTAL_1: 8 XXX
SG_ SET_ME_X04 : 0|8@1+ (1,0) [0|255] "" XXX
SG_ SET_ME_X00 : 8|8@1+ (1,0) [0|255] "" XXX
SG_ SET_ME_X80 : 16|8@1+ (1,0) [0|255] "" XXX
SG_ SET_ME_X10 : 24|8@1+ (1,0) [0|255] "" XXX
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
BO_ 232 BRAKE_HOLD: 7 XXX
SG_ XMISSION_SPEED : 7|14@0- (1,0) [1|0] "" XXX
SG_ COMPUTER_BRAKE : 39|16@0+ (1,0) [0|0] "" XXX
@@ -182,7 +190,7 @@ BO_ 577 LEFT_LANE_LINE_2: 8 CAM
SG_ FRAME_INDEX : 7|4@0+ (1,0) [0|15] "" XXX
SG_ COUNTER : 61|2@0+ (1,0) [0|1] "" XXX
SG_ CHECKSUM : 59|4@0+ (1,0) [0|1] "" XXX
BO_ 579 RIGHT_LANE_LINE_1: 8 CAM
SG_ LINE_DISTANCE_VISIBLE : 39|9@0+ (1,0) [0|1] "" XXX
SG_ LINE_PROBABILITY : 46|6@0+ (0.015625,0) [0|1] "" XXX
+9 -1
View File
@@ -51,6 +51,14 @@ BO_ 228 STEERING_CONTROL: 5 EON
SG_ COUNTER : 37|2@0+ (1,0) [0|3] "" EPS
SG_ CHECKSUM : 35|4@0+ (1,0) [0|15] "" EPS
BO_ 229 BOSCH_SUPPLEMENTAL_1: 8 XXX
SG_ SET_ME_X04 : 0|8@1+ (1,0) [0|255] "" XXX
SG_ SET_ME_X00 : 8|8@1+ (1,0) [0|255] "" XXX
SG_ SET_ME_X80 : 16|8@1+ (1,0) [0|255] "" XXX
SG_ SET_ME_X10 : 24|8@1+ (1,0) [0|255] "" XXX
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
BO_ 232 BRAKE_HOLD: 7 XXX
SG_ XMISSION_SPEED : 7|14@0- (1,0) [1|0] "" XXX
SG_ COMPUTER_BRAKE : 39|16@0+ (1,0) [0|0] "" XXX
@@ -182,7 +190,7 @@ BO_ 577 LEFT_LANE_LINE_2: 8 CAM
SG_ FRAME_INDEX : 7|4@0+ (1,0) [0|15] "" XXX
SG_ COUNTER : 61|2@0+ (1,0) [0|1] "" XXX
SG_ CHECKSUM : 59|4@0+ (1,0) [0|1] "" XXX
BO_ 579 RIGHT_LANE_LINE_1: 8 CAM
SG_ LINE_DISTANCE_VISIBLE : 39|9@0+ (1,0) [0|1] "" XXX
SG_ LINE_PROBABILITY : 46|6@0+ (0.015625,0) [0|1] "" XXX
@@ -51,6 +51,14 @@ BO_ 228 STEERING_CONTROL: 5 EON
SG_ COUNTER : 37|2@0+ (1,0) [0|3] "" EPS
SG_ CHECKSUM : 35|4@0+ (1,0) [0|15] "" EPS
BO_ 229 BOSCH_SUPPLEMENTAL_1: 8 XXX
SG_ SET_ME_X04 : 0|8@1+ (1,0) [0|255] "" XXX
SG_ SET_ME_X00 : 8|8@1+ (1,0) [0|255] "" XXX
SG_ SET_ME_X80 : 16|8@1+ (1,0) [0|255] "" XXX
SG_ SET_ME_X10 : 24|8@1+ (1,0) [0|255] "" XXX
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
BO_ 232 BRAKE_HOLD: 7 XXX
SG_ XMISSION_SPEED : 7|14@0- (1,0) [1|0] "" XXX
SG_ COMPUTER_BRAKE : 39|16@0+ (1,0) [0|0] "" XXX
@@ -182,7 +190,7 @@ BO_ 577 LEFT_LANE_LINE_2: 8 CAM
SG_ FRAME_INDEX : 7|4@0+ (1,0) [0|15] "" XXX
SG_ COUNTER : 61|2@0+ (1,0) [0|1] "" XXX
SG_ CHECKSUM : 59|4@0+ (1,0) [0|1] "" XXX
BO_ 579 RIGHT_LANE_LINE_1: 8 CAM
SG_ LINE_DISTANCE_VISIBLE : 39|9@0+ (1,0) [0|1] "" XXX
SG_ LINE_PROBABILITY : 46|6@0+ (0.015625,0) [0|1] "" XXX
@@ -0,0 +1,345 @@
CM_ "AUTOGENERATED FILE, DO NOT EDIT"
CM_ "Imported file _comma.dbc starts here"
BO_ 512 GAS_COMMAND: 6 EON
SG_ GAS_COMMAND : 7|16@0+ (0.253984064,-83.3) [0|1] "" INTERCEPTOR
SG_ GAS_COMMAND2 : 23|16@0+ (0.126992032,-83.3) [0|1] "" INTERCEPTOR
SG_ ENABLE : 39|1@0+ (1,0) [0|1] "" INTERCEPTOR
SG_ COUNTER_PEDAL : 35|4@0+ (1,0) [0|15] "" INTERCEPTOR
SG_ CHECKSUM_PEDAL : 47|8@0+ (1,0) [0|255] "" INTERCEPTOR
BO_ 513 GAS_SENSOR: 6 INTERCEPTOR
SG_ INTERCEPTOR_GAS : 7|16@0+ (0.253984064,-83.3) [0|1] "" EON
SG_ INTERCEPTOR_GAS2 : 23|16@0+ (0.126992032,-83.3) [0|1] "" EON
SG_ STATE : 39|4@0+ (1,0) [0|15] "" EON
SG_ COUNTER_PEDAL : 35|4@0+ (1,0) [0|15] "" EON
SG_ CHECKSUM_PEDAL : 47|8@0+ (1,0) [0|255] "" EON
VAL_ 513 STATE 5 "FAULT_TIMEOUT" 4 "FAULT_STARTUP" 3 "FAULT_SCE" 2 "FAULT_SEND" 1 "FAULT_BAD_CHECKSUM" 0 "NO_FAULT" ;
CM_ "Imported file _honda_2017.dbc starts here"
VERSION ""
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_
BU_: EBCM ADAS PCM EPS VSA SCM BDY XXX EPB EON
BO_ 344 ENGINE_DATA: 8 PCM
SG_ XMISSION_SPEED : 7|16@0+ (0.01,0) [0|250] "kph" EON
SG_ ENGINE_RPM : 23|16@0+ (1,0) [0|15000] "rpm" EON
SG_ XMISSION_SPEED2 : 39|16@0+ (0.01,0) [0|250] "kph" EON
SG_ ODOMETER : 55|8@0+ (10,0) [0|2550] "m" XXX
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON
BO_ 380 POWERTRAIN_DATA: 8 PCM
SG_ PEDAL_GAS : 7|8@0+ (1,0) [0|255] "" EON
SG_ ENGINE_RPM : 23|16@0+ (1,0) [0|15000] "rpm" EON
SG_ GAS_PRESSED : 39|1@0+ (1,0) [0|1] "" EON
SG_ ACC_STATUS : 38|1@0+ (1,0) [0|1] "rpm" EON
SG_ BOH_17C : 37|5@0+ (1,0) [0|1] "rpm" EON
SG_ BRAKE_SWITCH : 32|1@0+ (1,0) [0|1] "rpm" EON
SG_ BOH2_17C : 47|10@0+ (1,0) [0|1] "rpm" EON
SG_ BRAKE_PRESSED : 53|1@0+ (1,0) [0|1] "" EON
SG_ BOH3_17C : 52|5@0+ (1,0) [0|1] "rpm" EON
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
BO_ 420 VSA_STATUS: 8 VSA
SG_ USER_BRAKE : 7|16@0+ (0.015625,-1.609375) [0|1000] "" EON
SG_ COMPUTER_BRAKING : 23|1@0+ (1,0) [0|1] "" EON
SG_ ESP_DISABLED : 28|1@0+ (1,0) [0|1] "" EON
SG_ BRAKE_HOLD_RELATED : 52|1@0+ (1,0) [0|1] "" XXX
SG_ BRAKE_HOLD_ACTIVE : 46|1@0+ (1,0) [0|1] "" EON
SG_ BRAKE_HOLD_ENABLED : 45|1@0+ (1,0) [0|1] "" EON
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON
BO_ 427 STEER_MOTOR_TORQUE: 3 EPS
SG_ CONFIG_VALID : 7|1@0+ (1,0) [0|1] "" EON
SG_ MOTOR_TORQUE : 1|10@0+ (1,0) [0|256] "" EON
SG_ OUTPUT_DISABLED : 22|1@0+ (1,0) [0|1] "" EON
SG_ COUNTER : 21|2@0+ (1,0) [0|3] "" EON
SG_ CHECKSUM : 19|4@0+ (1,0) [0|15] "" EON
BO_ 432 STANDSTILL: 7 VSA
SG_ CONTROLLED_STANDSTILL : 0|1@0+ (1,0) [0|1] "" EON
SG_ WHEELS_MOVING : 12|1@0+ (1,0) [0|1] "" EON
SG_ BRAKE_ERROR_1 : 11|1@0+ (1,0) [0|1] "" EON
SG_ BRAKE_ERROR_2 : 9|1@0+ (1,0) [0|1] "" EON
SG_ COUNTER : 53|2@0+ (1,0) [0|3] "" EON
SG_ CHECKSUM : 51|4@0+ (1,0) [0|3] "" EON
BO_ 464 WHEEL_SPEEDS: 8 VSA
SG_ WHEEL_SPEED_FL : 7|15@0+ (0.01,0) [0|250] "kph" EON
SG_ WHEEL_SPEED_FR : 8|15@0+ (0.01,0) [0|250] "kph" EON
SG_ WHEEL_SPEED_RL : 25|15@0+ (0.01,0) [0|250] "kph" EON
SG_ WHEEL_SPEED_RR : 42|15@0+ (0.01,0) [0|250] "kph" EON
SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
BO_ 490 VEHICLE_DYNAMICS: 8 VSA
SG_ LONG_ACCEL : 23|16@0- (0.0015384,0) [-20|20] "m/s2" EON
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
BO_ 506 BRAKE_COMMAND: 8 ADAS
SG_ COMPUTER_BRAKE : 7|10@0+ (1,0) [0|1] "" EBCM
SG_ SET_ME_X00 : 13|5@0+ (1,0) [0|1] "" EBCM
SG_ BRAKE_PUMP_REQUEST : 8|1@0+ (1,0) [0|1] "" EBCM
SG_ SET_ME_X00_2 : 23|3@0+ (1,0) [0|1] "" EBCM
SG_ CRUISE_OVERRIDE : 20|1@0+ (1,0) [0|1] "" EBCM
SG_ SET_ME_X00_3 : 19|1@0+ (1,0) [0|1] "" EBCM
SG_ CRUISE_FAULT_CMD : 18|1@0+ (1,0) [0|1] "" EBCM
SG_ CRUISE_CANCEL_CMD : 17|1@0+ (1,0) [0|1] "" EBCM
SG_ COMPUTER_BRAKE_REQUEST : 16|1@0+ (1,0) [0|1] "" EBCM
SG_ SET_ME_1 : 31|1@0+ (1,0) [0|1] "" EBCM
SG_ AEB_REQ_1 : 29|1@0+ (1,0) [0|1] "" XXX
SG_ AEB_REQ_2 : 26|3@0+ (1,0) [0|7] "" XXX
SG_ BRAKE_LIGHTS : 39|1@0+ (1,0) [0|1] "" EBCM
SG_ CRUISE_STATES : 38|7@0+ (1,0) [0|1] "" EBCM
SG_ CHIME : 47|3@0+ (1,0) [0|7] "" EBCM
SG_ SET_ME_X00_4 : 44|1@0+ (1,0) [0|1] "" EBCM
SG_ FCW : 43|2@0+ (1,0) [0|3] "" EBCM
SG_ AEB_STATUS : 41|2@0+ (1,0) [0|3] "" XXX
SG_ SET_ME_X00_5 : 55|8@0+ (1,0) [0|0] "" EBCM
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EBCM
SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EBCM
BO_ 597 ROUGH_WHEEL_SPEED: 8 VSA
SG_ WHEEL_SPEED_FL : 7|8@0+ (1,0) [0|255] "mph" EON
SG_ WHEEL_SPEED_FR : 15|8@0+ (1,0) [0|255] "mph" EON
SG_ WHEEL_SPEED_RL : 23|8@0+ (1,0) [0|255] "mph" EON
SG_ WHEEL_SPEED_RR : 31|8@0+ (1,0) [0|255] "mph" EON
SG_ SET_TO_X55 : 39|8@0+ (1,0) [0|255] "" EON
SG_ SET_TO_X55_2 : 47|8@0+ (1,0) [0|255] "" EON
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON
BO_ 773 SEATBELT_STATUS: 7 BDY
SG_ SEATBELT_DRIVER_LAMP : 7|1@0+ (1,0) [0|1] "" EON
SG_ SEATBELT_PASS_UNLATCHED : 10|1@0+ (1,0) [0|1] "" EON
SG_ SEATBELT_PASS_LATCHED : 11|1@0+ (1,0) [0|1] "" EON
SG_ SEATBELT_DRIVER_UNLATCHED : 12|1@0+ (1,0) [0|1] "" EON
SG_ SEATBELT_DRIVER_LATCHED : 13|1@0+ (1,0) [0|1] "" EON
SG_ PASS_AIRBAG_OFF : 14|1@0+ (1,0) [0|1] "" EON
SG_ PASS_AIRBAG_ON : 15|1@0+ (1,0) [0|1] "" EON
SG_ COUNTER : 53|2@0+ (1,0) [0|3] "" EON
SG_ CHECKSUM : 51|4@0+ (1,0) [0|3] "" EON
BO_ 777 LOCK_STATUS: 8 XXX
SG_ DOORS_UNLOCKED : 54|1@0+ (1,0) [0|1] "" EON
SG_ DOORS_LOCKED : 55|1@0+ (1,0) [0|1] "" EON
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
BO_ 780 ACC_HUD: 8 ADAS
SG_ PCM_SPEED : 7|16@0+ (0.01,0) [0|250] "kph" BDY
SG_ PCM_GAS : 23|8@0+ (1,0) [0|127] "" BDY
SG_ CRUISE_SPEED : 31|8@0+ (1,0) [0|255] "" BDY
SG_ DTC_MODE : 39|1@0+ (1,0) [0|1] "" BDY
SG_ BOH : 38|1@0+ (1,0) [0|1] "" BDY
SG_ ACC_PROBLEM : 37|1@0+ (1,0) [0|1] "" BDY
SG_ FCM_OFF : 36|1@0+ (1,0) [0|1] "" BDY
SG_ FCM_OFF_2 : 35|1@0+ (1,0) [0|1] "" BDY
SG_ FCM_PROBLEM : 34|1@0+ (1,0) [0|1] "" BDY
SG_ RADAR_OBSTRUCTED : 33|1@0+ (1,0) [0|1] "" BDY
SG_ ENABLE_MINI_CAR : 32|1@0+ (1,0) [0|1] "" BDY
SG_ HUD_DISTANCE : 47|2@0+ (1,0) [0|3] "" BDY
SG_ HUD_LEAD : 45|2@0+ (1,0) [0|3] "" BDY
SG_ BOH_3 : 43|1@0+ (1,0) [0|3] "" BDY
SG_ BOH_4 : 42|1@0+ (1,0) [0|3] "" BDY
SG_ BOH_5 : 41|1@0+ (1,0) [0|3] "" BDY
SG_ CRUISE_CONTROL_LABEL : 40|1@0+ (1,0) [0|3] "" BDY
SG_ SET_ME_X01_2 : 55|1@0+ (1,0) [0|1] "" BDY
SG_ IMPERIAL_UNIT : 54|1@0+ (1,0) [0|1] "" BDY
SG_ HUD_DISTANCE_3 : 52|1@0+ (1,0) [0|1] "" BDY
SG_ CHIME : 51|3@0+ (1,0) [0|1] "" BDY
SG_ SET_ME_X01 : 48|1@0+ (1,0) [0|1] "" BDY
SG_ ICONS : 63|2@0+ (1,0) [0|1] "" BDY
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" BDY
SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" BDY
BO_ 804 CRUISE: 8 PCM
SG_ HUD_SPEED_KPH : 7|8@0+ (1,0) [0|255] "kph" EON
SG_ HUD_SPEED_MPH : 15|8@0+ (1,0) [0|255] "mph" EON
SG_ TRIP_FUEL_CONSUMED : 23|16@0+ (1,0) [0|255] "" EON
SG_ CRUISE_SPEED_PCM : 39|8@0+ (1,0) [0|255] "" EON
SG_ BOH2 : 47|8@0- (1,0) [0|255] "" EON
SG_ BOH3 : 55|8@0+ (1,0) [0|255] "" EON
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
BO_ 829 LKAS_HUD: 5 ADAS
SG_ CAM_TEMP_HIGH : 7|1@0+ (1,0) [0|255] "" BDY
SG_ SET_ME_X41 : 6|7@0+ (1,0) [0|127] "" BDY
SG_ BOH : 6|7@0+ (1,0) [0|127] "" BDY
SG_ DASHED_LANES : 14|1@0+ (1,0) [0|1] "" BDY
SG_ DTC : 13|1@0+ (1,0) [0|1] "" BDY
SG_ LKAS_PROBLEM : 12|1@0+ (1,0) [0|1] "" BDY
SG_ LKAS_OFF : 11|1@0+ (1,0) [0|1] "" BDY
SG_ SOLID_LANES : 10|1@0+ (1,0) [0|1] "" BDY
SG_ LDW_RIGHT : 9|1@0+ (1,0) [0|1] "" BDY
SG_ STEERING_REQUIRED : 8|1@0+ (1,0) [0|1] "" BDY
SG_ BOH : 23|2@0+ (1,0) [0|4] "" BDY
SG_ LDW_PROBLEM : 21|1@0+ (1,0) [0|1] "" BDY
SG_ BEEP : 17|2@0+ (1,0) [0|1] "" BDY
SG_ LDW_ON : 28|1@0+ (1,0) [0|1] "" BDY
SG_ LDW_OFF : 27|1@0+ (1,0) [0|1] "" BDY
SG_ CLEAN_WINDSHIELD : 26|1@0+ (1,0) [0|1] "" BDY
SG_ SET_ME_X48 : 31|8@0+ (1,0) [0|255] "" BDY
SG_ COUNTER : 37|2@0+ (1,0) [0|3] "" BDY
SG_ CHECKSUM : 35|4@0+ (1,0) [0|15] "" BDY
BO_ 892 CRUISE_PARAMS: 8 PCM
SG_ CRUISE_SPEED_OFFSET : 31|8@0- (0.1,0) [-128|127] "kph" EON
SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
BO_ 1029 DOORS_STATUS: 8 BDY
SG_ DOOR_OPEN_FL : 37|1@0+ (1,0) [0|1] "" EON
SG_ DOOR_OPEN_FR : 38|1@0+ (1,0) [0|1] "" EON
SG_ DOOR_OPEN_RL : 39|1@0+ (1,0) [0|1] "" EON
SG_ DOOR_OPEN_RR : 40|1@0+ (1,0) [0|1] "" EON
SG_ TRUNK_OPEN : 41|1@0+ (1,0) [0|1] "" EON
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
CM_ SG_ 490 LONG_ACCEL "wheel speed derivative, noisy and zero snapping";
CM_ SG_ 506 AEB_REQ_1 "set for duration of suspected AEB event";
CM_ SG_ 773 PASS_AIRBAG_ON "Might just be indicator light";
CM_ SG_ 773 PASS_AIRBAG_OFF "Might just be indicator light";
CM_ SG_ 780 CRUISE_SPEED "255 = no speed";
CM_ SG_ 804 CRUISE_SPEED_PCM "255 = no speed";
CM_ SG_ 829 BEEP "beeps are pleasant, chimes are for warnngs etc...";
VAL_ 506 FCW 3 "fcw" 2 "fcw" 1 "fcw" 0 "no_fcw" ;
VAL_ 506 CHIME 4 "double_chime" 3 "single_chime" 2 "continuous_chime" 1 "repeating_chime" 0 "no_chime" ;
VAL_ 506 AEB_STATUS 3 "aeb_prepare" 2 "aeb_ready" 1 "aeb_braking" 0 "no_aeb" ;
VAL_ 780 CRUISE_SPEED 255 "no_speed" 252 "stopped" ;
VAL_ 780 HUD_LEAD 3 "acc_off" 2 "solid_car" 1 "dashed_car" 0 "no_car" ;
VAL_ 829 BEEP 3 "single_beep" 2 "triple_beep" 1 "repeated_beep" 0 "no_beep" ;
CM_ "honda_hrv_touring_2019_can.dbc starts here"
BO_ 145 KINEMATICS: 8 XXX
SG_ LAT_ACCEL : 7|10@0+ (0.02,-512) [-20|20] "m/s2" EON
BO_ 228 STEERING_CONTROL: 5 ADAS
SG_ STEER_TORQUE : 7|16@0- (1,0) [-3840|3840] "" EPS
SG_ STEER_TORQUE_REQUEST : 23|1@0+ (1,0) [0|1] "" EPS
SG_ SET_ME_X00 : 22|7@0+ (1,0) [0|127] "" EPS
SG_ SET_ME_X00_2 : 31|8@0+ (1,0) [0|0] "" EPS
SG_ COUNTER : 37|2@0+ (1,0) [0|3] "" EPS
SG_ CHECKSUM : 35|4@0+ (1,0) [0|15] "" EPS
BO_ 304 GAS_PEDAL_2: 8 PCM
SG_ ENGINE_TORQUE_ESTIMATE : 7|16@0- (1,0) [-1000|1000] "Nm" EON
SG_ ENGINE_TORQUE_REQUEST : 23|16@0- (1,0) [-1000|1000] "Nm" EON
SG_ CAR_GAS : 39|8@0+ (1,0) [0|255] "" EON
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
BO_ 342 STEERING_SENSORS: 6 EPS
SG_ STEER_ANGLE : 7|16@0- (-0.1,0) [-500|500] "deg" EON
SG_ STEER_ANGLE_RATE : 23|16@0- (1,0) [-3000|3000] "deg/s" EON
SG_ COUNTER : 45|2@0+ (1,0) [0|3] "" EON
SG_ CHECKSUM : 43|4@0+ (1,0) [0|3] "" EON
BO_ 399 STEER_STATUS: 7 EPS
SG_ STEER_TORQUE_SENSOR : 7|16@0- (-1,0) [-31000|31000] "tbd" EON
SG_ STEER_ANGLE_RATE : 23|16@0- (-0.1,0) [-31000|31000] "deg/s" EON
SG_ STEER_STATUS : 39|4@0+ (1,0) [0|15] "" EON
SG_ STEER_CONTROL_ACTIVE : 35|1@0+ (1,0) [0|1] "" EON
SG_ STEER_CONFIG_INDEX : 43|4@0+ (1,0) [0|15] "" EON
SG_ COUNTER : 53|2@0+ (1,0) [0|3] "" EON
SG_ CHECKSUM : 51|4@0+ (1,0) [0|3] "" EON
BO_ 401 GEARBOX: 8 PCM
SG_ GEAR_SHIFTER : 5|6@0+ (1,0) [0|63] "" EON
SG_ GEAR : 43|4@0+ (1,0) [0|15] "" EON
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
BO_ 422 SCM_BUTTONS: 8 SCM
SG_ CRUISE_BUTTONS : 7|3@0+ (1,0) [0|7] "" EON
SG_ LIGHTS_SETTING : 1|2@0+ (1,0) [0|3] "" EON
SG_ MAIN_ON : 47|1@0+ (1,0) [0|1] "" EON
SG_ CRUISE_SETTING : 43|2@0+ (1,0) [0|3] "" EON
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
SG_ DRIVERS_DOOR_OPEN : 63|1@0+ (1,0) [0|1] "" EON
SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
BO_ 487 BRAKE_PRESSURE: 4 VSA
SG_ BRAKE_PRESSURE1 : 7|10@0+ (0.015625,-103) [0|1000] "" EON
SG_ BRAKE_PRESSURE2 : 9|10@0+ (0.015625,-103) [0|1000] "" EON
SG_ CHECKSUM : 27|4@0+ (1,0) [0|3] "" EON
SG_ COUNTER : 29|2@0+ (1,0) [0|3] "" EON
BO_ 660 SCM_FEEDBACK: 8 SCM
SG_ RIGHT_BLINKER : 6|1@0+ (1,0) [0|1] "" EON
SG_ LEFT_BLINKER : 5|1@0+ (1,0) [0|1] "" EON
SG_ WIPERS_SPEED : 4|2@0+ (1,0) [0|3] "" EON
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON
BO_ 862 HIGHBEAM_CONTROL: 8 ADAS
SG_ ZEROS_BOH : 7|50@0+ (1,0) [0|127] "" BDY
SG_ ZEROS_BOH_2 : 48|4@1+ (1,0) [0|15] "" XXX
SG_ HIGHBEAMS_ON : 52|1@0+ (1,0) [0|1] "" XXX
SG_ AUTO_HIGHBEAMS_ACTIVE : 53|1@0+ (1,0) [0|1] "" XXX
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
BO_ 884 STALK_STATUS: 8 XXX
SG_ AUTO_HEADLIGHTS : 46|1@0+ (1,0) [0|1] "" EON
SG_ HIGH_BEAM_HOLD : 47|1@0+ (1,0) [0|1] "" EON
SG_ HIGH_BEAM_FLASH : 45|1@0+ (1,0) [0|1] "" EON
SG_ HEADLIGHTS_ON : 54|1@0+ (1,0) [0|1] "" EON
SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
CM_ SG_ 401 GEAR "10 = reverse, 11 = transition";
CM_ SG_ 420 BRAKE_HOLD_RELATED "On when Brake Hold engaged";
VAL_ 399 STEER_STATUS 6 "tmp_fault" 5 "fault_1" 4 "no_torque_alert_2" 3 "low_speed_lockout" 2 "no_torque_alert_1" 0 "normal" ;
VAL_ 401 GEAR_SHIFTER 32 "L" 16 "S" 8 "D" 4 "N" 2 "R" 1 "P" ;
VAL_ 401 GEAR 7 "L" 10 "S" 4 "D" 3 "N" 2 "R" 1 "P" ;
VAL_ 422 CRUISE_BUTTONS 7 "tbd" 6 "tbd" 5 "tbd" 4 "accel_res" 3 "decel_set" 2 "cancel" 1 "main" 0 "none" ;
VAL_ 422 LIGHTS_SETTING 3 "high_beam" 2 "low_beam" 1 "position" 0 "no_lights" ;
VAL_ 422 CRUISE_SETTING 3 "distance_adj" 2 "tbd" 1 "lkas_button" 0 "none" ;
CM_ "CHFFR_METRIC 342 STEER_ANGLE STEER_ANGLE 0.36 180; CHFFR_METRIC 380 ENGINE_RPM ENGINE_RPM 1 0; CHFFR_METRIC 804 ENGINE_TEMPERATURE ENGINE_TEMPERATURE 1 0";
@@ -51,6 +51,14 @@ BO_ 228 STEERING_CONTROL: 5 EON
SG_ COUNTER : 37|2@0+ (1,0) [0|3] "" EPS
SG_ CHECKSUM : 35|4@0+ (1,0) [0|15] "" EPS
BO_ 229 BOSCH_SUPPLEMENTAL_1: 8 XXX
SG_ SET_ME_X04 : 0|8@1+ (1,0) [0|255] "" XXX
SG_ SET_ME_X00 : 8|8@1+ (1,0) [0|255] "" XXX
SG_ SET_ME_X80 : 16|8@1+ (1,0) [0|255] "" XXX
SG_ SET_ME_X10 : 24|8@1+ (1,0) [0|255] "" XXX
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
BO_ 232 BRAKE_HOLD: 7 XXX
SG_ XMISSION_SPEED : 7|14@0- (1,0) [1|0] "" XXX
SG_ COMPUTER_BRAKE : 39|16@0+ (1,0) [0|0] "" XXX
@@ -182,7 +190,7 @@ BO_ 577 LEFT_LANE_LINE_2: 8 CAM
SG_ FRAME_INDEX : 7|4@0+ (1,0) [0|15] "" XXX
SG_ COUNTER : 61|2@0+ (1,0) [0|1] "" XXX
SG_ CHECKSUM : 59|4@0+ (1,0) [0|1] "" XXX
BO_ 579 RIGHT_LANE_LINE_1: 8 CAM
SG_ LINE_DISTANCE_VISIBLE : 39|9@0+ (1,0) [0|1] "" XXX
SG_ LINE_PROBABILITY : 46|6@0+ (0.015625,0) [0|1] "" XXX
+7
View File
@@ -1446,3 +1446,10 @@ BO_ 905 SCC14: 8 SCC
BO_ 882 ELECT_GEAR: 8 XXX
SG_ Elect_Gear_Shifter : 16|3@1+ (1,0) [0|7] "" CLU
BO_ 1157 LFAHDA_MFC: 4 XXX
SG_ LFA_USM : 28|2@1+ (1,0) [0|3] "" XXX
SG_ LFA_SysWarning : 16|2@1+ (1,0) [0|3] "" XXX
SG_ ACTIVE2 : 4|2@0+ (1,0) [0|3] "" XXX
SG_ HDA_USM : 0|2@1+ (1,0) [0|3] "" XXX
SG_ ACTIVE : 25|1@1+ (1,0) [0|3] "" XXX
+4 -1
View File
@@ -96,7 +96,10 @@ BO_ 180 SPEED: 8 XXX
BO_ 353 DSU_SPEED: 8 XXX
SG_ FORWARD_SPEED : 15|16@0- (0.00390625,-30) [0|255] "kph" XXX
BO_ 452 ENGINE_RPM: 8 CGW
SG_ RPM : 7|16@0- (0.78125,0) [0|0] "rpm" SCS
BO_ 466 PCM_CRUISE: 8 XXX
SG_ GAS_RELEASED : 4|1@0+ (1,0) [0|1] "" XXX
SG_ CRUISE_ACTIVE : 5|1@0+ (1,0) [0|1] "" XXX
+4 -1
View File
@@ -96,7 +96,10 @@ BO_ 180 SPEED: 8 XXX
BO_ 353 DSU_SPEED: 8 XXX
SG_ FORWARD_SPEED : 15|16@0- (0.00390625,-30) [0|255] "kph" XXX
BO_ 452 ENGINE_RPM: 8 CGW
SG_ RPM : 7|16@0- (0.78125,0) [0|0] "rpm" SCS
BO_ 466 PCM_CRUISE: 8 XXX
SG_ GAS_RELEASED : 4|1@0+ (1,0) [0|1] "" XXX
SG_ CRUISE_ACTIVE : 5|1@0+ (1,0) [0|1] "" XXX
+4 -1
View File
@@ -96,7 +96,10 @@ BO_ 180 SPEED: 8 XXX
BO_ 353 DSU_SPEED: 8 XXX
SG_ FORWARD_SPEED : 15|16@0- (0.00390625,-30) [0|255] "kph" XXX
BO_ 452 ENGINE_RPM: 8 CGW
SG_ RPM : 7|16@0- (0.78125,0) [0|0] "rpm" SCS
BO_ 466 PCM_CRUISE: 8 XXX
SG_ GAS_RELEASED : 4|1@0+ (1,0) [0|1] "" XXX
SG_ CRUISE_ACTIVE : 5|1@0+ (1,0) [0|1] "" XXX
+4 -1
View File
@@ -96,7 +96,10 @@ BO_ 180 SPEED: 8 XXX
BO_ 353 DSU_SPEED: 8 XXX
SG_ FORWARD_SPEED : 15|16@0- (0.00390625,-30) [0|255] "kph" XXX
BO_ 452 ENGINE_RPM: 8 CGW
SG_ RPM : 7|16@0- (0.78125,0) [0|0] "rpm" SCS
BO_ 466 PCM_CRUISE: 8 XXX
SG_ GAS_RELEASED : 4|1@0+ (1,0) [0|1] "" XXX
SG_ CRUISE_ACTIVE : 5|1@0+ (1,0) [0|1] "" XXX
+4 -1
View File
@@ -96,7 +96,10 @@ BO_ 180 SPEED: 8 XXX
BO_ 353 DSU_SPEED: 8 XXX
SG_ FORWARD_SPEED : 15|16@0- (0.00390625,-30) [0|255] "kph" XXX
BO_ 452 ENGINE_RPM: 8 CGW
SG_ RPM : 7|16@0- (0.78125,0) [0|0] "rpm" SCS
BO_ 466 PCM_CRUISE: 8 XXX
SG_ GAS_RELEASED : 4|1@0+ (1,0) [0|1] "" XXX
SG_ CRUISE_ACTIVE : 5|1@0+ (1,0) [0|1] "" XXX
@@ -96,7 +96,10 @@ BO_ 180 SPEED: 8 XXX
BO_ 353 DSU_SPEED: 8 XXX
SG_ FORWARD_SPEED : 15|16@0- (0.00390625,-30) [0|255] "kph" XXX
BO_ 452 ENGINE_RPM: 8 CGW
SG_ RPM : 7|16@0- (0.78125,0) [0|0] "rpm" SCS
BO_ 466 PCM_CRUISE: 8 XXX
SG_ GAS_RELEASED : 4|1@0+ (1,0) [0|1] "" XXX
SG_ CRUISE_ACTIVE : 5|1@0+ (1,0) [0|1] "" XXX
+308
View File
@@ -0,0 +1,308 @@
VERSION ""
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_: XXX
BO_ 256 CAM_Start: 8 XXX
SG_ NEW_SIGNAL_1 : 15|8@0+ (1,0) [0|255] "" XXX
SG_ NEW_SIGNAL_3 : 20|12@0+ (1,0) [0|7] "" XXX
SG_ NEW_SIGNAL_5 : 24|13@0+ (1,0) [0|255] "" XXX
SG_ NEW_SIGNAL_7 : 56|4@1+ (1,0) [0|15] "" XXX
SG_ NEW_SIGNAL_8 : 61|2@0+ (1,0) [0|15] "" XXX
SG_ NEW_SIGNAL_10 : 43|12@0+ (1,0) [0|15] "" XXX
SG_ NEW_SIGNAL_6 : 7|8@0+ (1,0) [0|255] "" XXX
SG_ NEW_SIGNAL_2 : 63|2@0+ (1,0) [0|3] "" XXX
SG_ NEW_SIGNAL_4 : 23|3@0+ (1,0) [0|15] "" XXX
BO_ 358 CAM_End: 8 XXX
SG_ NEW_SIGNAL_2 : 61|2@0+ (1,0) [0|3] "" XXX
SG_ NEW_SIGNAL_3 : 59|4@0+ (1,0) [0|15] "" XXX
SG_ NEW_SIGNAL_1 : 7|32@0+ (1,0) [0|255] "" XXX
BO_ 1216 CAM_69: 8 XXX
SG_ NEW_SIGNAL_1 : 56|4@1+ (1,0) [0|15] "" XXX
SG_ NEW_SIGNAL_2 : 7|16@0+ (1,0) [0|65535] "" XXX
SG_ NEW_SIGNAL_3 : 23|16@0+ (1,0) [0|65535] "" XXX
SG_ NEW_SIGNAL_4 : 39|16@0+ (1,0) [0|65535] "" XXX
SG_ NEW_SIGNAL_5 : 55|12@0+ (1,0) [0|7] "" XXX
BO_ 1120 CAM_KEEP_ALIVE_2: 8 XXX
SG_ NEW_SIGNAL_1 : 7|16@0+ (1,0) [0|65535] "" XXX
SG_ NEW_SIGNAL_2 : 23|16@0+ (1,0) [0|65535] "" XXX
SG_ NEW_SIGNAL_3 : 39|16@0+ (1,0) [0|65535] "" XXX
SG_ NEW_SIGNAL_4 : 55|16@0+ (1,0) [0|65535] "" XXX
BO_ 1436 CAM_71: 8 XXX
SG_ NEW_SIGNAL_1 : 7|16@0+ (1,0) [0|255] "" XXX
SG_ NEW_SIGNAL_2 : 23|16@0+ (1,0) [0|65535] "" XXX
SG_ NEW_SIGNAL_3 : 39|16@0+ (1,0) [0|65535] "" XXX
SG_ NEW_SIGNAL_4 : 55|16@0+ (1,0) [0|65535] "" XXX
BO_ 18 STEER: 8 XXX
SG_ NEW_SIGNAL_5 : 42|1@0+ (1,0) [0|63] "" XXX
SG_ NEW_SIGNAL_6 : 63|4@0+ (1,0) [0|3] "" XXX
SG_ NEW_SIGNAL_3 : 55|4@0+ (1,0) [0|15] "" XXX
SG_ NEW_SIGNAL_1 : 59|4@0+ (1,0) [0|255] "" XXX
SG_ NEW_SIGNAL_2 : 51|4@0+ (1,0) [0|15] "" XXX
SG_ CTR : 41|2@0+ (1,0) [0|3] "" XXX
SG_ STEER_ANGLE : 26|16@0+ (0.05,-1600) [-500|500] "" XXX
BO_ 257 LKAS: 8 XXX
SG_ CTR : 59|4@0+ (1,0) [0|255] "" XXX
SG_ CTR_ACT : 61|2@0+ (1,0) [0|3] "" XXX
SG_ LEAD_DIST : 0|12@0+ (1,0) [0|255] "" XXX
SG_ SET_19 : 7|7@0+ (1,0) [0|255] "" XXX
SG_ SET_0 : 48|3@1+ (1,0) [0|3] "" XXX
SG_ SET_0_1 : 63|2@0+ (1,0) [0|3] "" XXX
SG_ UNKNOWN : 24|11@0+ (1,0) [0|4095] "" XXX
SG_ MAX_TORQUE__ : 45|11@0+ (-1,1000) [0|4095] "" XXX
SG_ ANGLE_TARGET : 20|12@0+ (0.1,-200) [0|4095] "" XXX
BO_ 258 NEW_MSG_3: 8 XXX
SG_ NEW_SIGNAL_2 : 16|8@1+ (1,0) [0|255] "" XXX
SG_ NEW_SIGNAL_1 : 8|8@1+ (1,0) [0|255] "" XXX
BO_ 28 WHEEL_SPEEDS: 8 XXX
SG_ RR : 55|16@0+ (0.01,-100) [0|65535] "" XXX
SG_ RL : 39|16@0+ (0.01,-102) [0|65535] "" XXX
SG_ FL : 7|16@0+ (0.01,-100) [0|65535] "" XXX
SG_ FR : 23|16@0+ (0.01,-100) [0|65535] "" XXX
BO_ 259 NEW_MSG_5: 8 XXX
SG_ NEW_SIGNAL_1 : 15|8@0+ (1,0) [0|255] "" XXX
BO_ 260 NEW_MSG_6: 8 XXX
SG_ NEW_SIGNAL_1 : 15|8@0+ (1,0) [0|255] "" XXX
BO_ 261 NEW_MSG_7: 8 XXX
SG_ NEW_SIGNAL_1 : 15|8@0+ (1,0) [0|255] "" XXX
BO_ 262 NEW_MSG_8: 8 XXX
SG_ NEW_SIGNAL_1 : 15|8@0+ (1,0) [0|255] "" XXX
BO_ 263 NEW_MSG_9: 8 XXX
SG_ NEW_SIGNAL_1 : 15|8@0+ (1,0) [0|255] "" XXX
BO_ 310 NEW_MSG_10: 8 XXX
SG_ NEW_SIGNAL_1 : 56|4@1+ (1,0) [0|255] "" XXX
SG_ NEW_SIGNAL_2 : 15|8@0+ (1,0) [0|255] "" XXX
SG_ NEW_SIGNAL_3 : 61|2@0+ (1,0) [0|3] "" XXX
BO_ 308 NEW_MSG_11: 8 XXX
SG_ NEW_SIGNAL_1 : 63|8@0+ (1,0) [0|255] "" XXX
SG_ NEW_SIGNAL_2 : 15|8@0+ (1,0) [0|255] "" XXX
SG_ NEW_SIGNAL_3 : 48|8@1+ (1,0) [0|15] "" XXX
SG_ NEW_SIGNAL_4 : 19|8@0+ (1,0) [0|15] "" XXX
BO_ 304 NEW_MSG_12: 8 XXX
SG_ NEW_SIGNAL_1 : 15|8@0+ (1,0) [0|255] "" XXX
SG_ NEW_SIGNAL_3 : 59|4@0+ (1,0) [0|255] "" XXX
SG_ NEW_SIGNAL_4 : 61|2@0+ (1,0) [0|3] "" XXX
SG_ NEW_SIGNAL_5 : 23|12@0+ (1,0) [0|2047] "" XXX
SG_ NEW_SIGNAL_6 : 27|8@0+ (1,0) [0|4095] "" XXX
SG_ NEW_SIGNAL_7 : 27|4@0+ (1,0) [0|15] "" XXX
SG_ NEW_SIGNAL_2 : 35|6@0+ (1,0) [0|15] "" XXX
SG_ NEW_SIGNAL_8 : 0|8@1+ (1,0) [0|255] "" XXX
BO_ 305 NEW_MSG_13: 8 XXX
SG_ NEW_SIGNAL_1 : 3|12@0+ (1,0) [0|255] "" XXX
SG_ NEW_SIGNAL_2 : 23|12@0+ (1,0) [0|4095] "" XXX
SG_ NEW_SIGNAL_3 : 27|14@0+ (1,0) [0|15] "" XXX
SG_ NEW_SIGNAL_5 : 56|4@1+ (1,0) [0|15] "" XXX
SG_ NEW_SIGNAL_6 : 61|2@0+ (1,0) [0|3] "" XXX
BO_ 352 NEW_MSG_14: 8 XXX
SG_ NEW_SIGNAL_1 : 7|16@0+ (1,0) [0|255] "" XXX
SG_ NEW_SIGNAL_2 : 23|16@0+ (1,0) [0|65535] "" XXX
SG_ NEW_SIGNAL_3 : 39|16@0+ (1,0) [0|65535] "" XXX
SG_ NEW_SIGNAL_4 : 55|16@0+ (1,0) [0|65535] "" XXX
BO_ 355 NEW_MSG_15: 8 XXX
SG_ NEW_SIGNAL_1 : 7|8@0+ (1,0) [0|127] "" XXX
BO_ 356 NEW_MSG_16: 8 XXX
SG_ NEW_SIGNAL_1 : 56|4@1+ (1,0) [0|15] "" XXX
SG_ NEW_SIGNAL_2 : 61|2@0+ (1,0) [0|3] "" XXX
BO_ 357 NEW_MSG_17: 8 XXX
SG_ NEW_SIGNAL_1 : 61|2@0+ (1,0) [0|3] "" XXX
SG_ NEW_SIGNAL_2 : 7|32@0+ (1,0) [0|4294967295] "" XXX
SG_ NEW_SIGNAL_3 : 56|4@1+ (1,0) [0|15] "" XXX
BO_ 59 STEER_RATE: 8 XXX
SG_ NEW_SIGNAL_2 : 47|4@0+ (1,0) [0|15] "" XXX
SG_ STEER_ANGLE_RATE : 55|16@0+ (0.05,0) [0|65535] "" XXX
SG_ NEW_SIGNAL_1 : 43|4@0+ (1,0) [0|15] "" XXX
SG_ STEER_ANGLE : 23|16@0+ (0.05,-1600) [-500|500] "" XXX
SG_ CHKSUM : 39|8@0+ (1,0) [0|15] "" XXX
BO_ 24 NEW_MSG_1: 8 XXX
SG_ NEW_SIGNAL_3 : 15|1@0+ (1,0) [0|7] "" XXX
SG_ NEW_SIGNAL_2 : 7|1@0+ (1,0) [0|65535] "" XXX
SG_ NEW_SIGNAL_1 : 6|1@0+ (1,0) [0|3] "" XXX
SG_ NEW_SIGNAL_5 : 0|1@0+ (1,0) [0|3] "" XXX
BO_ 26 ENGINE_DATA: 8 XXX
SG_ NEW_SIGNAL_3 : 55|4@0+ (1,0) [0|15] "" XXX
SG_ PEDAL_GAS : 39|12@0+ (1,0) [0|15] "" XXX
SG_ CHKSUM : 63|8@0- (1,0) [0|15] "" XXX
SG_ RPM : 7|13@0+ (1,0) [0|15] "" XXX
SG_ NEW_SIGNAL_1 : 10|19@0+ (1,0) [0|524287] "" XXX
SG_ NEW_SIGNAL_4 : 43|4@0+ (1,0) [0|255] "" XXX
SG_ NEW_SIGNAL_2 : 51|4@0+ (1,0) [0|15] "" XXX
BO_ 145 BLINK_INFO: 8 XXX
SG_ RIGHT_BLINK : 12|1@0+ (1,0) [0|3] "" XXX
SG_ LEFT_BLINK : 13|1@0+ (1,0) [0|3] "" XXX
SG_ Speed : 27|12@0+ (1,0) [0|255] "" XXX
SG_ CTR : 51|4@0+ (1,0) [0|15] "" XXX
SG_ CHKSUM : 63|8@0+ (1,0) [0|15] "" XXX
BO_ 16 STEER_TORQUE: 8 XXX
SG_ NEW_SIGNAL_12 : 7|2@0+ (1,0) [0|15] "" XXX
SG_ NEW_SIGNAL_7 : 27|4@0+ (1,0) [0|255] "" XXX
SG_ NEW_SIGNAL_6 : 39|8@0+ (1,0) [0|15] "" XXX
SG_ NEW_SIGNAL_1 : 43|4@0+ (1,0) [0|15] "" XXX
SG_ NEW_SIGNAL_5 : 47|4@0+ (1,0) [0|15] "" XXX
SG_ NEW_SIGNAL_3 : 51|4@0+ (1,0) [0|15] "" XXX
SG_ NEW_SIGNAL_4 : 55|4@0+ (1,0) [0|15] "" XXX
SG_ CHKSUM : 63|8@0+ (1,0) [0|15] "" XXX
SG_ STEER_TORQUE_MOTOR : 8|13@0+ (0.05,-205) [0|15] "" XXX
SG_ STEER_TORQUE_SENSOR : 5|13@0+ (1,-4000) [0|15] "" XXX
BO_ 17 STEER_TORQUE_2: 8 XXX
SG_ CTR : 51|4@0+ (1,0) [0|15] "" XXX
SG_ NEW_SIGNAL_5 : 55|4@0+ (1,0) [0|15] "" XXX
SG_ CHKSUM : 63|8@0+ (1,0) [0|255] "" XXX
SG_ STEER_TORQUE_MOTOR : 7|16@0+ (1,0) [0|255] "" XXX
SG_ NEW_SIGNAL_1 : 27|16@0+ (1,0) [0|255] "" XXX
SG_ NEW_SIGNAL_2 : 43|4@0+ (1,0) [0|15] "" XXX
BO_ 29 WHEEL: 8 XXX
SG_ STANDSTILL : 52|1@0+ (1,0) [0|15] "" XXX
SG_ SPEED : 39|16@0+ (1,0) [0|127] "" XXX
SG_ ENCODER_1 : 7|16@0+ (1,0) [0|65535] "" XXX
SG_ ENCODER_2 : 23|16@0+ (1,0) [0|65535] "" XXX
SG_ NEW_SIGNAL_6 : 55|3@0+ (1,0) [0|7] "" XXX
SG_ NEW_SIGNAL_1 : 63|8@0+ (1,0) [0|255] "" XXX
SG_ NEW_SIGNAL_2 : 51|4@0+ (1,0) [0|15] "" XXX
BO_ 31 NEW_MSG_4: 8 XXX
SG_ NEW_SIGNAL_1 : 7|16@0+ (1,0) [0|65535] "" XXX
SG_ NEW_SIGNAL_2 : 23|16@0+ (1,0) [0|65535] "" XXX
SG_ NEW_SIGNAL_3 : 39|16@0+ (1,0) [0|65535] "" XXX
SG_ NEW_SIGNAL_4 : 55|16@0+ (1,0) [0|65535] "" XXX
BO_ 96 STEER2: 8 XXX
SG_ NEW_SIGNAL_3 : 23|4@0+ (1,0) [0|15] "" XXX
SG_ SPEED : 19|20@0+ (1,0) [0|65535] "" XXX
SG_ NEW_SIGNAL_4 : 47|8@0+ (1,0) [0|15] "" XXX
SG_ NEW_SIGNAL_5 : 48|4@1+ (1,0) [0|15] "" XXX
SG_ CTR : 55|4@0+ (1,0) [0|15] "" XXX
SG_ CHKSUM : 63|8@0+ (1,0) [0|255] "" XXX
SG_ STEER__ : 7|16@0+ (1,0) [0|255] "" XXX
BO_ 1209 KEEP_ALIVE_1: 8 XXX
SG_ NEW_SIGNAL_1 : 63|8@0+ (1,0) [0|255] "" XXX
SG_ NEW_SIGNAL_2 : 55|8@0+ (1,0) [0|255] "" XXX
SG_ NEW_SIGNAL_3 : 47|8@0+ (1,0) [0|255] "" XXX
SG_ NEW_SIGNAL_5 : 31|8@0+ (1,0) [0|255] "" XXX
SG_ NEW_SIGNAL_6 : 23|8@0+ (1,0) [0|255] "" XXX
SG_ NEW_SIGNAL_7 : 15|8@0+ (1,0) [0|255] "" XXX
SG_ NEW_SIGNAL_4 : 39|8@0+ (1,0) [0|255] "" XXX
SG_ NEW_SIGNAL_8 : 4|5@0+ (1,0) [0|127] "" XXX
BO_ 37 BLANK_1: 8 XXX
SG_ NEW_SIGNAL_1 : 7|16@0+ (1,0) [0|65535] "" XXX
SG_ NEW_SIGNAL_2 : 23|16@0+ (1,0) [0|65535] "" XXX
SG_ NEW_SIGNAL_3 : 39|16@0+ (1,0) [0|65535] "" XXX
SG_ NEW_SIGNAL_4 : 55|16@0+ (1,0) [0|65535] "" XXX
BO_ 44 BLANK_2: 8 XXX
SG_ NEW_SIGNAL_1 : 7|16@0+ (1,0) [0|16777215] "" XXX
SG_ NEW_SIGNAL_3 : 55|16@0+ (1,0) [0|65535] "" XXX
SG_ NEW_SIGNAL_4 : 23|16@0+ (1,0) [0|65535] "" XXX
SG_ NEW_SIGNAL_2 : 39|16@0+ (1,0) [0|16777215] "" XXX
BO_ 128 NEW_MSG_18: 8 XXX
SG_ NEW_SIGNAL_1 : 59|4@0+ (1,0) [0|255] "" XXX
SG_ NEW_SIGNAL_2 : 23|8@0+ (1,0) [0|255] "" XXX
SG_ NEW_SIGNAL_3 : 7|8@0+ (1,0) [0|255] "" XXX
SG_ NEW_SIGNAL_4 : 15|8@0+ (1,0) [0|255] "" XXX
BO_ 129 NEW_MSG_19: 8 XXX
SG_ NEW_SIGNAL_2 : 7|12@0+ (1,0) [0|65535] "" XXX
SG_ NEW_SIGNAL_3 : 31|16@0+ (1,0) [0|65535] "" XXX
SG_ NEW_SIGNAL_4 : 47|16@0+ (1,0) [0|65535] "" XXX
SG_ NEW_SIGNAL_5 : 56|8@1+ (1,0) [0|15] "" XXX
BO_ 1034 KEEP_ALIVE_2: 8 XXX
SG_ NEW_SIGNAL_1 : 7|16@0+ (1,0) [0|255] "" XXX
SG_ NEW_SIGNAL_3 : 23|16@0+ (1,0) [0|255] "" XXX
SG_ NEW_SIGNAL_4 : 39|16@0+ (1,0) [0|255] "" XXX
SG_ NEW_SIGNAL_5 : 55|16@0+ (1,0) [0|255] "" XXX
BO_ 1200 KEEP_ALIVE_3: 8 XXX
SG_ NEW_SIGNAL_1 : 7|16@0+ (1,0) [0|255] "" XXX
SG_ NEW_SIGNAL_2 : 55|16@0+ (1,0) [0|255] "" XXX
SG_ NEW_SIGNAL_3 : 23|16@0+ (1,0) [0|65535] "" XXX
SG_ NEW_SIGNAL_4 : 39|16@0+ (1,0) [0|65535] "" XXX
BO_ 354 CAM_KEEP_ALIVE_1: 8 XXX
SG_ NEW_SIGNAL_1 : 7|16@0+ (1,0) [0|65535] "" XXX
SG_ NEW_SIGNAL_2 : 23|16@0+ (1,0) [0|65535] "" XXX
SG_ NEW_SIGNAL_3 : 39|16@0+ (1,0) [0|65535] "" XXX
SG_ NEW_SIGNAL_4 : 55|30@0+ (1,0) [0|65535] "" XXX
BO_ 336 NEW_MSG_20: 8 XXX
SG_ NEW_SIGNAL_2 : 7|8@0+ (1,0) [0|4095] "" XXX
SG_ NEW_SIGNAL_1 : 11|12@0+ (1,0) [0|127] "" XXX
SG_ NEW_SIGNAL_3 : 31|8@0+ (1,0) [0|255] "" XXX
SG_ NEW_SIGNAL_4 : 39|8@0+ (1,0) [0|255] "" XXX
SG_ NEW_SIGNAL_5 : 47|8@0+ (1,0) [0|255] "" XXX
BO_ 342 NEW_MSG_21: 8 XXX
SG_ NEW_SIGNAL_1 : 56|4@1+ (1,0) [0|15] "" XXX
SG_ NEW_SIGNAL_2 : 63|4@0+ (1,0) [0|15] "" XXX
SG_ NEW_SIGNAL_4 : 55|4@0+ (1,0) [0|15] "" XXX
SG_ NEW_SIGNAL_5 : 39|16@0+ (1,0) [0|15] "" XXX
SG_ NEW_SIGNAL_3 : 48|4@1+ (1,0) [0|15] "" XXX
SG_ NEW_SIGNAL_7 : 7|16@0+ (1,0) [0|255] "" XXX
SG_ NEW_SIGNAL_8 : 23|16@0+ (1,0) [0|65535] "" XXX
SG_ NEW_SIGNAL_6 : 40|4@1+ (1,0) [0|15] "" XXX
BO_ 264 NEW_MSG_2: 8 XXX
SG_ NEW_SIGNAL_1 : 56|8@1+ (1,0) [0|15] "" XXX
+32 -19
View File
@@ -51,10 +51,10 @@ BO_ 118 RPM_RELATED: 8 XXX
SG_ NEW_SIGNAL_2 : 19|12@0+ (1,0) [0|4095] "" XXX
BO_ 514 ENGINE_DATA: 8 XXX
SG_ PEDAL_GAS : 39|12@0+ (0.002778,0) [0|255] "%" XXX
SG_ CHKSUM : 63|8@0+ (1,0) [0|127] "" XXX
SG_ RPM : 7|16@0+ (0.25,0) [0|8500] "rpm" XXX
SG_ SPEED : 23|16@0+ (0.01,0) [0|32767] "kph" XXX
SG_ PEDAL_GAS : 39|12@0+ (1,0) [0|255] "%" XXX
BO_ 357 PEDALS: 8 XXX
SG_ NEW_SIGNAL_6 : 31|4@0+ (1,0) [0|1] "" XXX
@@ -64,11 +64,11 @@ BO_ 357 PEDALS: 8 XXX
SG_ CHKSUM : 63|8@0+ (1,0) [0|15] "" XXX
SG_ STANDSTILL : 26|1@0+ (1,0) [0|16777215] "" XXX
SG_ NEW_SIGNAL_3 : 23|8@0+ (1,0) [0|3] "" XXX
SG_ GEAR : 48|5@1+ (1,0) [0|255] "" XXX
SG_ BRAKE_ON : 4|1@0+ (1,0) [0|1] "" XXX
SG_ NO_BRAKE : 6|1@0+ (1,0) [0|7] "" XXX
SG_ BRAKE_ON_2 : 7|1@1+ (1,0) [0|255] "" XXX
SG_ NO_BRAKE_2 : 15|1@0+ (1,0) [0|7] "" XXX
SG_ GEAR : 48|5@1+ (1,0) [0|255] "" XXX
BO_ 533 WHEEL_SPEEDS: 8 XXX
SG_ FL : 7|16@0+ (0.01,-100) [0|16383] "kph" XXX
@@ -111,6 +111,7 @@ BO_ 582 CAM_LANEMAYBE: 8 XXX
SG_ NEW_SIGNAL_1 : 31|16@0- (1,0) [0|65535] "" XXX
SG_ NEW_SIGNAL_2 : 55|16@0+ (1,0) [0|65535] "" XXX
SG_ CTR : 7|2@0+ (1,0) [0|3] "" XXX
SG_ NEW_SIGNAL_3 : 15|16@0+ (1,0) [0|65535] "" XXX
BO_ 541 CAM_EMPTY: 8 XXX
@@ -139,11 +140,12 @@ BO_ 579 CAM_LKAS: 8 XXX
SG_ ERR_BIT_1 : 16|1@0+ (1,0) [0|1] "" XXX
SG_ CHKSUM : 63|8@0+ (1,0) [0|15] "" XXX
SG_ LINE_NOT_VISIBLE : 19|1@0+ (1,0) [0|1] "" XXX
SG_ BIT_2 : 33|1@0+ (1,0) [0|1] "" XXX
SG_ ERR_BIT_2 : 30|1@0+ (1,0) [0|1] "" XXX
SG_ BIT_1 : 29|1@0+ (1,0) [0|1] "" XXX
SG_ LDW : 23|1@0+ (1,0) [0|1] "" XXX
SG_ LKAS_REQUEST : 3|12@0+ (1,-2048) [0|2048] "" XXX
SG_ ERR_BIT_2 : 30|1@0+ (1,0) [0|1] "" XXX
SG_ ANGLE_ENABLED : 52|1@0+ (1,0) [0|1] "" XXX
SG_ STEERING_ANGLE : 33|12@0+ (1,-2048) [-2048|2047] "" XXX
BO_ 580 CAM_DISTANCE: 8 XXX
SG_ S1 : 0|8@1+ (1,0) [0|127] "" XXX
@@ -165,14 +167,15 @@ BO_ 581 CAM_IDK3: 8 XXX
SG_ S8 : 48|8@1+ (1,0) [0|255] "" XXX
SG_ S9 : 56|8@1+ (1,0) [0|255] "" XXX
BO_ 863 CAM_STATUS: 8 XXX
SG_ NEW_SIGNAL_1 : 32|1@0+ (1,0) [0|32767] "" XXX
SG_ NEW_SIGNAL_5 : 4|2@0+ (1,0) [0|32767] "" XXX
SG_ NEW_SIGNAL_4 : 15|4@0+ (1,0) [0|15] "" XXX
BO_ 863 CAM_TRAFFIC_SIGNS: 8 XXX
SG_ STOP_SIGN : 31|4@0+ (1,0) [0|1] "" XXX
SG_ NEW_SIGNAL_3 : 55|1@0+ (1,0) [0|127] "" XXX
SG_ NEW_SIGNAL_6 : 0|3@1+ (1,0) [0|7] "" XXX
SG_ FORWARD_COLLISION : 40|8@1+ (1,0) [0|7] "" XXX
SG_ SPEED_SIGN : 4|7@0+ (1,0) [0|15] "" XXX
SG_ NEW_SIGNAL_2 : 52|5@0+ (1,0) [0|31] "" XXX
SG_ NEW_SIGNAL_4 : 33|1@0+ (1,0) [0|1] "" XXX
SG_ NEW_SIGNAL_1 : 13|2@0+ (1,0) [0|3] "" XXX
SG_ SPEED_SIGN_CAM : 32|1@0+ (1,0) [0|32767] "" XXX
BO_ 1157 CAM_SETTINGS: 8 XXX
SG_ NEW_SIGNAL_2 : 14|1@0+ (1,0) [0|1] "" XXX
@@ -193,7 +196,7 @@ BO_ 1088 CAM_LANEINFO: 8 XXX
SG_ BIT3 : 62|1@0+ (1,0) [0|3] "" XXX
SG_ HANDS_ON_STEER_WARN_2 : 59|1@0+ (1,0) [0|1] "" XXX
SG_ HANDS_ON_STEER_WARN : 56|1@0+ (1,0) [0|3] "" XXX
SG_ S1_NOT : 54|1@0+ (1,0) [0|31] "" XXX
SG_ S1_HBEAM : 54|1@0+ (1,0) [0|31] "" XXX
SG_ S1 : 52|1@0+ (1,0) [0|1] "" XXX
SG_ HANDS_WARN_3_BITS : 51|3@0+ (1,0) [0|7] "" XXX
SG_ ERR_BIT : 40|1@0+ (1,0) [0|1] "" XXX
@@ -482,14 +485,13 @@ BO_ 606 SPEED_TBD: 8 XXX
SG_ NEW_SIGNAL_1 : 23|12@0- (1,0) [0|65535] "" XXX
BO_ 552 GEAR: 8 XXX
SG_ NEW_SIGNAL_2 : 8|1@0+ (1,0) [0|255] "" XXX
SG_ NEW_SIGNAL_3 : 11|1@0+ (1,0) [0|1] "" XXX
SG_ NEW_SIGNAL_4 : 18|3@0+ (1,0) [0|255] "" XXX
SG_ NEW_SIGNAL_5 : 26|3@0+ (1,0) [0|255] "" XXX
SG_ NEW_SIGNAL_6 : 31|5@0+ (1,0) [0|31] "" XXX
SG_ NEW_SIGNAL_7 : 39|1@0+ (1,0) [0|255] "" XXX
SG_ GEAR : 35|4@0+ (1,0) [0|15] "" XXX
SG_ MORE_GEAR : 7|4@0+ (1,0) [0|255] "" XXX
SG_ MORE_GEAR : 7|4@0+ (1,0) [0|15] "" XXX
SG_ GEAR : 2|3@0+ (1,0) [0|7] "" XXX
SG_ GEAR_BOX : 36|4@0+ (1,0) [0|15] "" XXX
BO_ 543 CRZ_EVENTS: 8 XXX
SG_ NEW_SIGNAL_3 : 34|1@0+ (1,0) [0|1] "" XXX
@@ -545,7 +547,7 @@ BO_ 535 CURVE_CTRS: 8 XXX
SG_ CTR_C_2 : 23|3@0+ (1,0) [0|255] "" XXX
SG_ CTR_D_2 : 31|3@0+ (1,0) [0|7] "" XXX
SG_ CTR_D_1 : 28|3@0+ (1,0) [0|7] "" XXX
SG_ CURVE : 39|16@0+ (1,0) [0|7] "" XXX
SG_ SPEED : 39|16@0+ (0.01,0) [0|7] "kph" XXX
SG_ CTR : 55|8@0+ (1,0) [0|255] "" XXX
SG_ CHK_MAYBE : 63|8@0+ (1,0) [0|255] "" XXX
SG_ NEW_SIGNAL_1 : 0|1@0+ (1,0) [0|1] "" XXX
@@ -570,6 +572,9 @@ BO_ 540 CRZ_CTRL: 8 XXX
SG_ CRZ_ACTIVE : 3|1@0+ (1,0) [0|1] "" XXX
SG_ HANDS_OFF_STEERING : 48|1@0+ (1,0) [0|1] "" XXX
SG_ HANDS_ON_STEER_WARN : 59|4@0+ (1,0) [0|255] "" XXX
SG_ NEW_SIGNAL_1 : 52|1@0+ (1,0) [0|1] "" XXX
SG_ NEW_SIGNAL_2 : 45|3@0+ (1,0) [0|255] "" XXX
SG_ NEW_SIGNAL_8 : 0|1@0+ (1,0) [0|1] "" XXX
BO_ 539 CRZ_INFO: 8 XXX
SG_ NEW_SIGNAL_1 : 17|1@0+ (1,0) [0|255] "" XXX
@@ -614,14 +619,14 @@ BO_ 1179 2017_7: 8 XXX
BO_ 1435 2017_8: 8 XXX
BO_ 253 NEW_MSG_7: 8 XXX
BO_ 253 GAS: 8 XXX
SG_ NEW_SIGNAL_1 : 16|1@0+ (1,0) [0|65535] "" XXX
SG_ CTR : 23|4@0+ (1,0) [0|15] "" XXX
SG_ NEW_SIGNAL_2 : 41|1@0+ (1,0) [0|255] "" XXX
SG_ NEW_SIGNAL_3 : 55|8@0+ (1,0) [0|255] "" XXX
SG_ CRZ_NOT_ACTIVE : 61|1@0+ (1,0) [0|255] "" XXX
SG_ GAS_CMD : 55|8@0+ (1,0) [0|255] "" XXX
BO_ 359 NEW_MSG_11: 8 XXX
BO_ 359 MORE_GAS: 8 XXX
SG_ NEW_SIGNAL_1 : 15|1@0+ (1,0) [0|255] "" XXX
SG_ NEW_SIGNAL_2 : 7|8@0+ (1,0) [0|255] "" XXX
SG_ CTR : 31|4@0+ (1,0) [0|255] "" XXX
@@ -700,6 +705,7 @@ BO_ 1143 BSM: 8 XXX
SG_ RIGHT_BS1 : 14|1@0+ (1,0) [0|63] "" XXX
SG_ RIGHT_BS_DISTANCE : 35|3@0+ (1,0) [0|1] "" XXX
SG_ NEW_SIGNAL_1 : 32|1@0+ (1,0) [0|1] "" XXX
SG_ REAR_CT_ALERT : 23|5@0+ (1,0) [0|63] "" XXX
BO_ 1361 KEY_POSITION: 8 XXX
@@ -744,8 +750,12 @@ BO_ 1248 MOB4: 8 XXX
CM_ SG_ 357 GEAR "13P, 26R, 13N, 24D";
CM_ SG_ 605 PED_BRAKE "3: no brake, 4: brake";
CM_ SG_ 605 BRAKE_WARNING "Flashing brake warning and audible alert for potential forward collision";
CM_ SG_ 579 STEERING_ANGLE "steering angle aligns with 0.022 factor and -45.06 offset";
CM_ SG_ 863 SPEED_SIGN "speed limit in MPH";
CM_ SG_ 863 SPEED_SIGN_CAM "1: The speed limit is recognized by the camera. 0: speed limit is map based or is not available";
CM_ SG_ 1157 SBS_WARNING_DISTANCE "1 far, 2 mid, 3 near";
CM_ SG_ 1157 SBS_SCBC "1 off, 2 on";
CM_ SG_ 1157 LKAS_ASSIT_TIMING "1 at, 0 before";
@@ -755,6 +765,9 @@ CM_ SG_ 1157 WARNING "1 Rare, 0 often";
CM_ SG_ 1088 LANE_LINES "0 LKAS disabled, 1 no lines, 2 two lines, 3 left line, 4 right line";
CM_ SG_ 1045 ABS_MALFUNCTION "off: 0, solid: 1, slow blink: 2, fast blink: 3";
CM_ SG_ 157 CAN_OFF "Disengage Cruise if enabled, if already disabled TURN it OFF ";
CM_ SG_ 552 GEAR "0 P/N, 12 R, 2 D M1, 4 M2, 14 Shift";
CM_ SG_ 552 MORE_GEAR "";
CM_ SG_ 552 GEAR "0 Shifting, 1 P, 2 R, 3 N, 4 D";
CM_ SG_ 552 GEAR_BOX "0 P, 14 R, 1 though 6 D for speeds, 15 Shift";
CM_ SG_ 540 HANDS_ON_STEER_WARN "0 no warning, b warning";
CM_ SG_ 1143 REAR_CT_ALERT "Rear Cross Traffic Alert";
VAL_ 552 GEAR 1 "P" 2 "R" 3 "N" 4 "D";
+211
View File
@@ -0,0 +1,211 @@
VERSION ""
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_: XXX
BO_ 2 STEER_ANGLE_SENSOR: 5 XXX
SG_ STEER_ANGLE_RATE : 16|8@1+ (1,0) [0|255] "" XXX
SG_ SET_ME_X07 : 24|8@1+ (1,0) [0|255] "" XXX
SG_ STEER_ANGLE : 0|16@1- (-0.1,0) [0|65535] "" XXX
SG_ COUNTER : 32|4@1+ (1,0) [0|15] "" XXX
BO_ 42 SEATBELT: 8 XXX
SG_ SEATBELT_DRIVER_LATCHED : 27|1@1+ (1,0) [0|3] "" XXX
SG_ SEATBELT_DRIVER_UNLATCHED : 26|1@0+ (1,0) [0|1] "" XXX
SG_ unknown2 : 31|4@0+ (1,0) [0|15] "" XXX
SG_ unknown3 : 24|2@1+ (1,0) [0|3] "" XXX
SG_ unknown1 : 7|24@0+ (1,0) [0|16777215] "" XXX
SG_ unknown4 : 39|16@0+ (1,0) [0|65535] "" XXX
BO_ 361 LKAS: 8 XXX
SG_ MAX_TORQUE : 39|8@0+ (0.01,0) [0|255] "Nm" XXX
SG_ SET_0x80 : 47|8@0+ (1,0) [0|255] "" XXX
SG_ LKA_ACTIVE : 52|1@0+ (1,0) [0|15] "" XXX
SG_ SET_0x80_2 : 31|8@0+ (1,0) [0|255] "" XXX
SG_ COUNTER : 51|4@0+ (1,0) [0|15] "" XXX
SG_ DESIRED_ANGLE : 7|18@0+ (-0.01,1310) [0|255] "" XXX
SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
BO_ 389 STEER_TORQUE_SENSOR: 8 XXX
SG_ LKAS_ACTIVE : 37|1@0+ (1,0) [0|3] "" XXX
SG_ STEER_TORQUE_LKAS : 47|8@0+ (1,0) [0|255] "" XXX
SG_ STEER_ANGLE : 23|18@0+ (-0.01,1310) [0|262143] "" XXX
SG_ STEER_TORQUE_DRIVER : 7|12@0+ (-0.01,20.47) [0|4095] "Nm" XXX
SG_ COUNTER : 51|4@0+ (1,0) [0|15] "" XXX
SG_ CHECKSUM : 63|8@0+ (1,0) [0|127] "" XXX
BO_ 460 BRAKE_PEDAL: 8 XXX
SG_ BRAKE_PEDAL : 7|8@0+ (1,0) [0|256] "" XXX
BO_ 569 CRUISE_THROTTLE: 8 XXX
SG_ GAS_PEDAL_INVERTED : 15|8@0+ (1,0) [0|255] "" XXX
SG_ GAS_PEDAL : 7|8@0+ (1,0) [0|255] "" XXX
SG_ CRUISE_AVAILABLE : 17|1@0+ (1,0) [0|1] "" XXX
SG_ unsure1 : 23|6@0+ (1,0) [0|63] "" XXX
SG_ unsure2 : 16|1@0+ (1,0) [0|1] "" XXX
SG_ unsure3 : 31|2@0+ (1,0) [0|3] "" XXX
SG_ NO_BUTTON_PRESSED : 29|1@0+ (1,0) [0|1] "" XXX
SG_ RES_BUTTON : 28|1@0+ (1,0) [0|1] "" XXX
SG_ SET_BUTTON : 27|1@0+ (1,0) [0|1] "" XXX
SG_ FOLLOW_DISTANCE_BUTTON : 26|1@0+ (1,0) [0|1] "" XXX
SG_ CANCEL_BUTTON : 25|1@0+ (1,0) [0|1] "" XXX
SG_ PROPILOT_BUTTON : 24|1@0+ (1,0) [0|1] "" XXX
SG_ unsure4 : 39|6@0+ (1,0) [0|63] "" XXX
SG_ COUNTER : 32|2@1+ (1,0) [0|3] "" XXX
SG_ unsure5 : 47|8@0+ (1,0) [0|255] "" XXX
SG_ unsure6 : 55|8@0+ (1,0) [0|255] "" XXX
SG_ unsure7 : 63|8@0+ (1,0) [0|255] "" XXX
BO_ 640 CANCEL_MSG: 8 XXX
SG_ CANCEL_SEATBELT : 1|1@0+ (1,0) [0|1] "" XXX
SG_ NEW_SIGNAL_1 : 7|6@0+ (1,0) [0|63] "" XXX
SG_ NEW_SIGNAL_2 : 0|1@0+ (1,0) [0|1] "" XXX
SG_ NEW_SIGNAL_3 : 15|56@0+ (1,0) [0|72057594037927940] "" XXX
BO_ 644 WHEEL_SPEEDS_FRONT: 8 XXX
SG_ WHEEL_SPEED_FR : 7|16@0+ (0.005,0) [0|65535] "KPH" XXX
SG_ WHEEL_SPEED_FL : 23|16@0+ (0.005,0) [0|65535] "KPH" XXX
BO_ 645 WHEEL_SPEEDS_REAR: 8 XXX
SG_ WHEEL_SPEED_RR : 7|16@0+ (0.005,0) [0|65535] "KPH" XXX
SG_ WHEEL_SPEED_RL : 23|16@0+ (0.005,0) [0|65535] "KPH" XXX
BO_ 689 PROPILOT_HUD: 8 XXX
SG_ LARGE_WARNING_FLASHING : 9|1@0+ (1,0) [0|1] "" XXX
SG_ SIDE_RADAR_ERROR_FLASHING1 : 10|1@0+ (1,0) [0|1] "" XXX
SG_ SIDE_RADAR_ERROR_FLASHING2 : 11|1@0+ (1,0) [0|1] "" XXX
SG_ RIGHT_LANE_YELLOW_FLASH : 12|1@0+ (1,0) [0|1] "" XXX
SG_ LEFT_LANE_YELLOW_FLASH : 13|1@0+ (1,0) [0|1] "" XXX
SG_ LEAD_CAR : 14|1@0+ (1,0) [0|1] "" XXX
SG_ LEAD_CAR_ERROR : 15|1@0+ (1,0) [0|1] "" XXX
SG_ FRONT_RADAR_ERROR : 16|1@0+ (1,0) [0|1] "" XXX
SG_ FRONT_RADAR_ERROR_FLASHING : 17|1@0+ (1,0) [0|1] "" XXX
SG_ RIGHT_LANE_GREEN : 24|1@0+ (1,0) [0|1] "" XXX
SG_ LEFT_LANE_GREEN : 25|1@0+ (1,0) [0|1] "" XXX
SG_ SIDE_RADAR_ERROR_FLASHING3 : 27|1@0+ (1,0) [0|1] "" XXX
SG_ LKAS_ERROR_FLASHING : 29|1@0+ (1,0) [0|1] "" XXX
SG_ SAFETY_SHIELD_ACTIVE : 44|1@0+ (1,0) [0|1] "" XXX
SG_ LARGE_STEERING_WHEEL_ICON : 61|2@0+ (1,0) [0|3] "" XXX
SG_ RIGHT_LANE_GREEN_FLASH : 62|1@0+ (1,0) [0|1] "" XXX
SG_ LEFT_LANE_GREEN_FLASH : 63|1@0+ (1,0) [0|1] "" XXX
SG_ FOLLOW_DISTANCE : 3|2@0+ (1,0) [0|3] "" XXX
SG_ AUDIBLE_TONE : 47|3@0+ (1,0) [0|8] "" XXX
SG_ SPEED_SET_ICON : 7|2@0+ (1,0) [0|3] "" XXX
SG_ SMALL_STEERING_WHEEL_ICON : 42|3@0+ (1,0) [0|7] "" XXX
SG_ SET_SPEED : 39|8@0+ (1,0) [0|255] "" XXX
SG_ unknown02 : 1|2@0+ (1,0) [0|3] "" XXX
SG_ unknown05 : 5|2@0+ (1,0) [0|3] "" XXX
SG_ unknown08 : 8|7@0+ (1,0) [0|63] "" XXX
SG_ unknown26 : 26|1@0+ (1,0) [0|1] "" XXX
SG_ unknown28 : 28|1@0+ (1,0) [0|1] "" XXX
SG_ unknown31 : 31|2@0+ (1,0) [0|3] "" XXX
SG_ unknown43 : 43|1@0+ (1,0) [0|1] "" XXX
SG_ unknown55 : 55|8@0+ (1,0) [0|63] "" XXX
SG_ unknown59 : 59|4@0+ (1,0) [0|15] "" XXX
BO_ 783 CRUISE_STATE: 3 XXX
SG_ CRUISE_ENABLED : 3|1@0+ (1,0) [0|1] "" XXX
BO_ 852 ESP: 8 XXX
SG_ ESP_DISABLED : 38|1@0+ (1,0) [0|1] "" XXX
BO_ 853 HUD_SETTINGS: 8 XXX
SG_ SPEED_MPH : 37|1@0+ (1,0) [0|1] "" XXX
BO_ 856 LIGHTS: 8 XXX
SG_ LEFT_BLINKER : 17|1@0+ (1,0) [0|1] "" XXX
SG_ RIGHT_BLINKER : 18|1@0+ (1,0) [0|1] "" XXX
BO_ 1057 GEARBOX: 3 XXX
SG_ GEAR_SHIFTER : 5|3@0+ (1,0) [0|255] "" XXX
BO_ 1228 PROPILOT_HUD_INFO_MSG: 8 XXX
SG_ NA_HIGH_ACCEL_TEMP : 0|1@0+ (1,0) [0|1] "" XXX
SG_ SIDE_RADAR_NA_HIGH_CABIN_TEMP : 8|1@0+ (1,0) [0|1] "" XXX
SG_ SIDE_RADAR_MALFUNCTION : 11|1@0+ (1,0) [0|1] "" XXX
SG_ LKAS_MALFUNCTION : 12|1@0+ (1,0) [0|1] "" XXX
SG_ FRONT_RADAR_MALFUNCTION : 13|1@0+ (1,0) [0|1] "" XXX
SG_ SIDE_RADAR_NA_CLEAN_REAR_CAMERA : 14|1@0+ (1,0) [0|1] "" XXX
SG_ NA_POOR_ROAD_CONDITIONS : 16|1@0+ (1,0) [0|1] "" XXX
SG_ CURRENTLY_UNAVAILABLE : 17|1@0+ (1,0) [0|1] "" XXX
SG_ SAFETY_SHIELD_OFF : 18|1@0+ (1,0) [0|1] "" XXX
SG_ FRONT_COLLISION_NA_FRONT_RADAR_OBSTRUCTION : 20|1@0+ (1,0) [0|1] "" XXX
SG_ PEDAL_MISSAPPLICATION_SYSTEM_ACTIVATED : 24|1@0+ (1,0) [0|1] "" XXX
SG_ SIDE_IMPACT_NA_RADAR_OBSTRUCTION : 25|1@0+ (1,0) [0|1] "" XXX
SG_ WARNING_DO_NOT_ENTER : 33|1@0+ (1,0) [0|1] "" XXX
SG_ SIDE_IMPACT_SYSTEM_OFF : 34|1@0+ (1,0) [0|1] "" XXX
SG_ SIDE_IMPACT_MALFUNCTION : 35|1@0+ (1,0) [0|1] "" XXX
SG_ FRONT_COLLISION_MALFUNCTION : 36|1@0+ (1,0) [0|1] "" XXX
SG_ SIDE_RADAR_MALFUNCTION2 : 37|1@0+ (1,0) [0|1] "" XXX
SG_ LKAS_MALFUNCTION2 : 38|1@0+ (1,0) [0|1] "" XXX
SG_ FRONT_RADAR_MALFUNCTION2 : 39|1@0+ (1,0) [0|1] "" XXX
SG_ PROPILOT_NA_MSGS : 42|3@0+ (1,0) [0|7] "" XXX
SG_ BOTTOM_MSG : 45|3@0+ (1,0) [0|7] "" XXX
SG_ HANDS_ON_WHEEL_WARNING : 47|1@0+ (1,0) [0|1] "" XXX
SG_ WARNING_STEP_ON_BRAKE_NOW : 51|1@0+ (1,0) [0|1] "" XXX
SG_ PROPILOT_NA_FRONT_CAMERA_OBSTRUCTED : 52|1@0+ (1,0) [0|1] "" XXX
SG_ PROPILOT_NA_HIGH_CABIN_TEMP : 53|1@0+ (1,0) [0|1] "" XXX
SG_ WARNING_PROPILOT_MALFUNCTION : 54|1@0+ (1,0) [0|3] "" XXX
SG_ ACC_UNAVAILABLE_HIGH_CABIN_TEMP : 62|1@0+ (1,0) [0|1] "" XXX
SG_ ACC_NA_FRONT_CAMERA_IMPARED : 63|1@0+ (1,0) [0|1] "" XXX
SG_ unknown07 : 7|7@0+ (1,0) [0|127] "" XXX
SG_ unknown10 : 10|2@0+ (1,0) [0|3] "" XXX
SG_ unknown15 : 15|1@0+ (1,0) [0|1] "" XXX
SG_ unknown23 : 23|3@0+ (1,0) [0|7] "" XXX
SG_ unknown19 : 19|1@0+ (1,0) [0|1] "" XXX
SG_ unknown31 : 31|6@0+ (1,0) [0|63] "" XXX
SG_ unknown32 : 32|1@0+ (1,0) [0|1] "" XXX
SG_ unknown46 : 46|1@0+ (1,0) [0|1] "" XXX
SG_ unknown50 : 50|3@0+ (1,0) [0|7] "" XXX
SG_ unknown55 : 55|1@0+ (1,0) [0|1] "" XXX
SG_ unknown61 : 61|6@0+ (1,0) [0|63] "" XXX
BO_ 1549 DOORS_LIGHTS: 8 XXX
SG_ DOOR_OPEN_FL : 3|1@0+ (1,0) [0|1] "" XXX
SG_ DOOR_OPEN_FR : 4|1@0+ (1,0) [0|1] "" XXX
SG_ DOOR_OPEN_RL : 5|1@0+ (1,0) [0|1] "" XXX
SG_ DOOR_OPEN_RR : 6|1@0+ (1,0) [0|1] "" XXX
BO_ 1227 LKAS_SETTINGS: 8 XXX
SG_ LKAS_ENABLED : 51|1@0+ (1,0) [0|1] "" XXX
VAL_ 1057 GEAR_SHIFTER 7 "B" 4 "D" 3 "N" 2 "R" 1 "P" ;
VAL_ 1228 PROPILOT_NA_MSGS 0 "NO_MSG" 1 "NA_FRONT_CAMERA_IMPARED" 2 "STEERING_ASSIST_ON_STANDBY" 3 "NA_PARKING_ASSIST_ENABLED" 4 "STEER_ASSIST_CURRENTLY_NA" 5 "NA_BAD_WEATHER" 6 "NA_PARK_BRAKE_ON" 7 "NA_SEATBELT_NOT_FASTENED" ;
VAL_ 1228 BOTTOM_MSG 0 "OK_STEER_ASSIST_SETTINGS" 1 "NO_MSG" 2 "PRESS_SET_TO_SET_SPEED" 3 "PRESS_RES_SET_TO_CHANGE_SPEED" 4 "PRESS_RES_TO_RESTART" 5 "NO_MSG" 6 "CRUISE_NOT_AVAIL" 7 "NO_MSG" ;
VAL_ 689 FOLLOW_DISTANCE 0 "NO_FOLLOW_DISTANCE" 1 "FOLLOW_DISTANCE_1" 2 "FOLLOW_DISTANCE_2" 3 "FOLLOW_DISANCE_3" ;
VAL_ 689 AUDIBLE_TONE 0 "NO_TONE" 1 "CONT" 2 "FAST_BEEP_CONT" 3 "TRIPLE_FAST_BEEP_CONT" 4 "SLOW_BEEP_CONT" 5 "QUAD_SLOW_BEEP_CONT" 6 "SINGLE_BEEP_ONCE" 7 "DOUBLE_BEEP_ONCE" ;
VAL_ 689 SMALL_STEERING_WHEEL_ICON 0 "NO_ICON" 1 "GRAY_ICON" 2 "GRAY_ICON_FLASHING" 3 "GREEN_ICON" 4 "GREEN_ICON_FLASHING" 5 "RED_ICON" 6 "RED_ICON_FLASHING" 7 "YELLOW_ICON" ;
VAL_ 689 LARGE_STEERING_WHEEL_ICON 0 "NO_STEERINGWHEEL" 1 "GRAY_STEERINGWHEEL" 2 "GREEN_STEERINGWHEEL" 3 "GREEN_STEERINGWHEEL_FLASHING" ;
@@ -36,70 +36,41 @@ BS_:
BU_: XXX
BO_ 644 Speed_1: 8 XXX
SG_ Speed_FR : 7|16@0+ (0.0118,0) [0|65535] "" XXX
SG_ Speed_FL : 23|16@0+ (0.0118,0) [0|65535] "" XXX
SG_ Speed_Vehicle : 39|16@0+ (0.0245,0) [0|65535] "" XXX
BO_ 2 STEER_ANGLE_SENSOR: 5 XXX
SG_ STEER_ANGLE_RATE : 16|8@1+ (1,0) [0|255] "" XXX
SG_ SET_ME_X07 : 24|8@1+ (1,0) [0|255] "" XXX
SG_ STEER_ANGLE : 0|16@1- (-0.1,0) [0|65535] "" XXX
SG_ COUNTER : 32|4@1+ (1,0) [0|15] "" XXX
BO_ 645 WheelspeedRear: 8 XXX
SG_ RR : 7|16@0+ (0.00555,0) [0|65535] "KPH" XXX
SG_ RL : 23|16@0+ (0.00555,0) [0|65535] "KPH" XXX
BO_ 348 GAS_PEDAL: 8 XXX
SG_ GAS_PEDAL_RAW : 26|11@0+ (1,0) [0|2047] "" XXX
SG_ GAS_PEDAL : 47|10@0+ (1,0) [0|1023] "" XXX
BO_ 768 STEER_TORQUE: 2 XXX
SG_ STEERING_TORQUE : 6|7@0+ (1,0) [0|127] "" XXX
SG_ DriverTouchingWheel : 15|1@0+ (-1,1) [0|7] "" XXX
BO_ 459 Maybe_RegenBraking: 8 XXX
BO_ 372 Maybe_Gear_Selector: 8 XXX
SG_ Counter : 35|4@0+ (1,0) [0|15] "" XXX
BO_ 374 Maybe_Motor_RPM_or_Speed: 8 XXX
SG_ Counter : 51|4@0+ (1,0) [0|15] "" XXX
BO_ 460 Maybe_Brake_Related: 8 XXX
BO_ 2 SteeringWheel: 8 XXX
SG_ Steering_RateChange : 16|8@1+ (1,0) [0|255] "" XXX
SG_ Always_07 : 24|8@1+ (1,0) [0|255] "" XXX
SG_ Steering_Angle : 0|16@1- (-0.1,0) [0|65535] "" XXX
SG_ Counter : 32|4@1+ (1,0) [0|15] "" XXX
BO_ 384 Maybe_PowerInfo: 8 XXX
SG_ Unknown_Timer_PowerInfo : 51|4@0+ (1,0) [0|15] "" XXX
SG_ EnginePower : 27|12@0- (1,0) [0|1] "" XXX
SG_ RequestedAccel : 23|12@0- (1,0) [0|4294967295] "" XXX
BO_ 1107 Lights: 8 XXX
SG_ RIGHT_BLINKER : 12|1@0+ (1,0) [0|1] "" XXX
SG_ LEFT_BLINKER : 11|1@0+ (1,0) [0|1] "" XXX
SG_ _HEADLIGHTS : 5|1@0+ (1,0) [0|1] "" XXX
BO_ 666 WheelspeedFront: 8 XXX
SG_ _FL_WHEELSPEED : 39|16@0+ (0.01014,0) [0|65535] "" XXX
SG_ FR : 7|16@0+ (0.00555,0) [0|65535] "KPH" XXX
SG_ FL : 23|16@0+ (0.00555,0) [0|65535] "KPH" XXX
BO_ 389 Steering: 8 XXX
BO_ 361 LKAS: 8 XXX
SG_ MAX_TORQUE : 39|8@0+ (0.01,0) [0|255] "Nm" XXX
SG_ SET_0x80 : 47|8@0+ (1,0) [0|255] "" XXX
SG_ LKA_ACTIVE : 52|1@0+ (1,0) [0|15] "" XXX
SG_ SET_0x80_2 : 31|8@0+ (1,0) [0|255] "" XXX
SG_ COUNTER : 51|4@0+ (1,0) [0|15] "" XXX
SG_ DESIRED_ANGLE : 7|18@0+ (-0.01,1310) [0|255] "" XXX
SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
BO_ 389 STEER_TORQUE_SENSOR: 8 XXX
SG_ LKAS_ACTIVE : 37|1@0+ (1,0) [0|3] "" XXX
SG_ LKAS_Torque : 47|8@0+ (1,0) [0|255] "" XXX
SG_ CRC : 63|8@0+ (1,0) [0|127] "" XXX
SG_ Angle : 23|18@0+ (-0.01,1310) [0|262143] "" XXX
SG_ DriverTorque : 7|12@0+ (-0.01,20.47) [0|4095] "Nm" XXX
SG_ STEER_TORQUE_LKAS : 47|8@0+ (1,0) [0|255] "" XXX
SG_ STEER_ANGLE : 23|18@0+ (-0.01,1310) [0|262143] "" XXX
SG_ STEER_TORQUE_DRIVER : 7|12@0+ (-0.01,20.47) [0|4095] "Nm" XXX
SG_ COUNTER : 51|4@0+ (1,0) [0|15] "" XXX
SG_ CHECKSUM : 63|8@0+ (1,0) [0|127] "" XXX
BO_ 851 SPEED_RELATED: 8 XXX
SG_ SPEED_RELATED : 7|16@0+ (0.01014,0) [0|65535] "" XXX
BO_ 438 PRO_PILOT: 8 XXX
SG_ COUNTER : 55|4@0+ (1,0) [0|255] "" XXX
SG_ SET_ME_X03 : 33|2@0+ (1,0) [0|15] "" XXX
SG_ CRUISE_ACTIVATED : 38|1@0+ (1,0) [0|3] "" XXX
SG_ CRUISE_ON : 36|1@0+ (1,0) [0|255] "" XXX
SG_ STEER_STATUS : 51|1@0+ (1,0) [0|3] "" XXX
BO_ 386 Accelerator: 8 XXX
SG_ Accelerator : 38|7@0+ (1,0) [0|127] "" XXX
BO_ 348 Throttle: 8 XXX
SG_ NEW_SIGNAL_1 : 7|8@0+ (1,0) [0|255] "" XXX
SG_ Throttle : 26|11@0+ (1,0) [0|2047] "" XXX
SG_ ThrottlePedal : 47|10@0+ (1,0) [0|1023] "" XXX
BO_ 523 CruiseThrottle: 6 XXX
BO_ 523 CRUISE_THROTTLE: 6 XXX
SG_ PROPILOT_BUTTON : 8|1@0+ (1,0) [0|1] "" XXX
SG_ CANCEL_BUTTON : 9|1@0+ (1,0) [0|1] "" XXX
SG_ GAS_PEDAL_INVERTED : 37|10@0+ (1,0) [0|1023] "" XXX
@@ -111,13 +82,73 @@ BO_ 523 CruiseThrottle: 6 XXX
SG_ USER_BRAKE_PRESSED : 21|1@0+ (1,0) [0|1] "" XXX
SG_ USER_BRAKE_PRESSED_INVERTED : 22|1@0+ (1,0) [0|3] "" XXX
SG_ NEW_SIGNAL_2 : 23|1@0+ (1,0) [0|1] "" XXX
SG_ unsure2 : 43|4@0+ (1,0) [0|1] "" XXX
SG_ unsure1 : 7|16@0+ (1,0) [0|15] "" XXX
SG_ GAS_PRESSED_INVERTED : 20|1@0+ (1,0) [0|255] "" XXX
SG_ COUNTER : 17|2@0+ (1,0) [0|3] "" XXX
SG_ unsure1 : 7|10@0+ (1,0) [0|1023] "" XXX
SG_ unsure2 : 43|4@0+ (1,0) [0|1] "" XXX
SG_ unsure3 : 19|2@0+ (1,0) [0|3] "" XXX
BO_ 1108 DoorsLights: 8 XXX
BO_ 645 WHEEL_SPEEDS_REAR: 8 XXX
SG_ WHEEL_SPEED_RR : 7|16@0+ (0.005,0) [0|65535] "KPH" XXX
SG_ WHEEL_SPEED_RL : 23|16@0+ (0.005,0) [0|65535] "KPH" XXX
BO_ 665 ESP: 8 XXX
SG_ ESP_DISABLED : 24|1@0+ (1,0) [0|1] "" XXX
BO_ 666 WHEEL_SPEEDS_FRONT: 8 XXX
SG_ WHEEL_SPEED_FR : 7|16@0+ (0.005,0) [0|65535] "KPH" XXX
SG_ WHEEL_SPEED_FL : 23|16@0+ (0.005,0) [0|65535] "KPH" XXX
BO_ 689 PROPILOT_HUD: 8 XXX
SG_ LARGE_WARNING_FLASHING : 9|1@0+ (1,0) [0|1] "" XXX
SG_ SIDE_RADAR_ERROR_FLASHING1 : 10|1@0+ (1,0) [0|1] "" XXX
SG_ SIDE_RADAR_ERROR_FLASHING2 : 11|1@0+ (1,0) [0|1] "" XXX
SG_ RIGHT_LANE_YELLOW_FLASH : 12|1@0+ (1,0) [0|1] "" XXX
SG_ LEFT_LANE_YELLOW_FLASH : 13|1@0+ (1,0) [0|1] "" XXX
SG_ LEAD_CAR : 14|1@0+ (1,0) [0|1] "" XXX
SG_ LEAD_CAR_ERROR : 15|1@0+ (1,0) [0|1] "" XXX
SG_ FRONT_RADAR_ERROR : 16|1@0+ (1,0) [0|1] "" XXX
SG_ FRONT_RADAR_ERROR_FLASHING : 17|1@0+ (1,0) [0|1] "" XXX
SG_ RIGHT_LANE_GREEN : 24|1@0+ (1,0) [0|1] "" XXX
SG_ LEFT_LANE_GREEN : 25|1@0+ (1,0) [0|1] "" XXX
SG_ SIDE_RADAR_ERROR_FLASHING3 : 27|1@0+ (1,0) [0|1] "" XXX
SG_ LKAS_ERROR_FLASHING : 29|1@0+ (1,0) [0|1] "" XXX
SG_ SAFETY_SHIELD_ACTIVE : 44|1@0+ (1,0) [0|1] "" XXX
SG_ LARGE_STEERING_WHEEL_ICON : 61|2@0+ (1,0) [0|3] "" XXX
SG_ RIGHT_LANE_GREEN_FLASH : 62|1@0+ (1,0) [0|1] "" XXX
SG_ LEFT_LANE_GREEN_FLASH : 63|1@0+ (1,0) [0|1] "" XXX
SG_ FOLLOW_DISTANCE : 3|2@0+ (1,0) [0|3] "" XXX
SG_ AUDIBLE_TONE : 47|3@0+ (1,0) [0|8] "" XXX
SG_ SPEED_SET_ICON : 7|2@0+ (1,0) [0|3] "" XXX
SG_ SMALL_STEERING_WHEEL_ICON : 42|3@0+ (1,0) [0|7] "" XXX
SG_ SET_SPEED : 39|8@0+ (1,0) [0|255] "" XXX
SG_ unknown02 : 1|2@0+ (1,0) [0|3] "" XXX
SG_ unknown05 : 5|2@0+ (1,0) [0|3] "" XXX
SG_ unknown08 : 8|7@0+ (1,0) [0|63] "" XXX
SG_ unknown26 : 26|1@0+ (1,0) [0|1] "" XXX
SG_ unknown28 : 28|1@0+ (1,0) [0|1] "" XXX
SG_ unknown31 : 31|2@0+ (1,0) [0|3] "" XXX
SG_ unknown43 : 43|1@0+ (1,0) [0|1] "" XXX
SG_ unknown55 : 55|8@0+ (1,0) [0|63] "" XXX
SG_ unknown59 : 59|4@0+ (1,0) [0|15] "" XXX
BO_ 768 STEER_TORQUE_SENSOR2: 2 XXX
SG_ STEERING_TORQUE : 6|7@0+ (1,0) [0|127] "" XXX
SG_ STEERING_PRESSED : 15|1@0+ (-1,1) [0|7] "" XXX
BO_ 783 CRUISE_STATE: 3 XXX
SG_ CRUISE_ENABLED : 3|1@0+ (1,0) [0|1] "" XXX
BO_ 1055 GEARBOX: 2 XXX
SG_ SPORTS_MODE : 13|1@0+ (1,0) [0|1] "" XXX
SG_ GEAR_SHIFTER : 5|3@0+ (1,0) [0|255] "" XXX
BO_ 1107 LIGHTS: 8 XXX
SG_ RIGHT_BLINKER : 12|1@0+ (1,0) [0|1] "" XXX
SG_ LEFT_BLINKER : 11|1@0+ (1,0) [0|1] "" XXX
SG_ HEADLIGHTS : 5|1@0+ (1,0) [0|1] "" XXX
BO_ 1108 DOORS_LIGHTS: 8 XXX
SG_ DOOR_CLOSED_RR : 40|1@0+ (1,0) [0|1] "" XXX
SG_ DOOR_OPEN_RR : 41|1@0+ (1,0) [0|1] "" XXX
SG_ DOOR_CLOSED_RL : 42|1@0+ (1,0) [0|1] "" XXX
@@ -130,49 +161,6 @@ BO_ 1108 DoorsLights: 8 XXX
SG_ BRAKE_LIGHT : 54|1@0+ (1,0) [0|1] "" XXX
SG_ USER_BRAKE_PRESSED : 23|1@0+ (1,0) [0|1] "" XXX
BO_ 403 LKAS_OLD: 8 XXX
SG_ Checksum : 63|8@0+ (1,0) [0|255] "" XXX
SG_ Angle_2 : 32|13@0+ (1,-4000) [0|63] "" XXX
SG_ Counter : 51|4@0+ (1,0) [0|15] "" XXX
SG_ Angle_1 : 10|13@0+ (0.12,-480) [0|65535] "" XXX
SG_ Steering_Torque : 7|13@0+ (-1,4000) [0|65535] "" XXX
SG_ Torque_Command : 29|13@0+ (1,-4000) [0|255] "" XXX
BO_ 361 LKAS: 8 XXX
SG_ MAX_TORQUE : 39|8@0+ (0.01,0) [0|255] "Nm" XXX
SG_ SET_0x80 : 47|8@0+ (1,0) [0|255] "" XXX
SG_ LKA_ACTIVE : 52|1@0+ (1,0) [0|15] "" XXX
SG_ CRC : 63|8@0+ (1,0) [0|255] "" XXX
SG_ SET_0x80_2 : 31|8@0+ (1,0) [0|255] "" XXX
SG_ COUNTER : 51|4@0+ (1,0) [0|15] "" XXX
SG_ DESIRED_ANGLE : 7|18@0+ (-0.01,1310) [0|255] "" XXX
BO_ 438 ProPilot: 8 XXX
SG_ NEW_SIGNAL_2 : 11|4@0+ (1,0) [0|255] "" XXX
SG_ NEW_SIGNAL_4 : 27|4@0+ (1,0) [0|255] "" XXX
SG_ NEW_SIGNAL_8 : 63|8@0+ (1,0) [0|7] "" XXX
SG_ Counter : 55|4@0+ (1,0) [0|255] "" XXX
SG_ NEW_SIGNAL_6 : 47|8@0+ (1,0) [0|255] "" XXX
SG_ SET_3 : 33|2@0+ (1,0) [0|15] "" XXX
SG_ NEW_SIGNAL_1 : 7|12@0- (1,0) [0|255] "" XXX
SG_ NEW_SIGNAL_3 : 23|12@0- (-1,0) [0|255] "" XXX
SG_ CRUISE_ACTIVATED : 38|1@0+ (1,0) [0|3] "" XXX
SG_ CRUISE_ON : 36|1@0+ (1,0) [0|255] "" XXX
SG_ STEER_STATUS : 51|1@0+ (1,0) [0|3] "" XXX
BO_ 397 _GEAR: 8 XXX
SG_ GEAR : 27|4@0+ (1,0) [0|15] "" XXX
BO_ 1273 _SEATBELT: 7 XXX
SG_ DRIVERS_SEATBELT : 25|1@0+ (1,0) [0|1] "" XXX
BO_ 665 _ESP: 8 XXX
SG_ ESP_DISABLED : 24|1@0+ (1,0) [0|1] "" XXX
BO_ 1055 GEARBOX: 2 XXX
SG_ SPORTS_MODE : 13|1@0+ (1,0) [0|1] "" XXX
SG_ GEAR_SHIFTER : 5|3@0+ (1,0) [0|255] "" XXX
BO_ 1228 PROPILOT_HUD_INFO_MSG: 8 XXX
SG_ NA_HIGH_ACCEL_TEMP : 0|1@0+ (1,0) [0|1] "" XXX
SG_ SIDE_RADAR_NA_HIGH_CABIN_TEMP : 8|1@0+ (1,0) [0|1] "" XXX
@@ -210,46 +198,15 @@ BO_ 1228 PROPILOT_HUD_INFO_MSG: 8 XXX
SG_ unknown31 : 31|6@0+ (1,0) [0|63] "" XXX
SG_ unknown32 : 32|1@0+ (1,0) [0|1] "" XXX
SG_ unknown46 : 46|1@0+ (1,0) [0|1] "" XXX
SG_ unknown61 : 61|6@0+ (1,0) [0|63] "" XXX
SG_ unknown55 : 55|1@0+ (1,0) [0|1] "" XXX
SG_ unknown50 : 50|3@0+ (1,0) [0|7] "" XXX
SG_ unknown55 : 55|1@0+ (1,0) [0|1] "" XXX
SG_ unknown61 : 61|6@0+ (1,0) [0|63] "" XXX
BO_ 689 PROPILOT_HUD: 8 XXX
SG_ LARGE_WARNING_FLASHING : 9|1@0+ (1,0) [0|1] "" XXX
SG_ SIDE_RADAR_ERROR_FLASHING1 : 10|1@0+ (1,0) [0|1] "" XXX
SG_ SIDE_RADAR_ERROR_FLASHING2 : 11|1@0+ (1,0) [0|1] "" XXX
SG_ RIGHT_LANE_YELLOW_FLASH : 12|1@0+ (1,0) [0|1] "" XXX
SG_ LEFT_LANE_YELLOW_FLASH : 13|1@0+ (1,0) [0|1] "" XXX
SG_ LEAD_CAR : 14|1@0+ (1,0) [0|1] "" XXX
SG_ LEAD_CAR_ERROR : 15|1@0+ (1,0) [0|1] "" XXX
SG_ FRONT_RADAR_ERROR : 16|1@0+ (1,0) [0|1] "" XXX
SG_ FRONT_RADAR_ERROR_FLASHING : 17|1@0+ (1,0) [0|1] "" XXX
SG_ RIGHT_LANE_GREEN : 24|1@0+ (1,0) [0|1] "" XXX
SG_ LEFT_LANE_GREEN : 25|1@0+ (1,0) [0|1] "" XXX
SG_ SIDE_RADAR_ERROR_FLASHING3 : 27|1@0+ (1,0) [0|1] "" XXX
SG_ LKAS_ERROR_FLASHING : 29|1@0+ (1,0) [0|1] "" XXX
SG_ SAFETY_SHIELD_ACTIVE : 44|1@0+ (1,0) [0|1] "" XXX
SG_ LARGE_STEERING_WHEEL_ICON : 61|2@0+ (1,0) [0|3] "" XXX
SG_ RIGHT_LANE_GREEN_FLASH : 62|1@0+ (1,0) [0|1] "" XXX
SG_ LEFT_LANE_GREEN_FLASH : 63|1@0+ (1,0) [0|1] "" XXX
SG_ FOLLOW_DISTANCE : 3|2@0+ (1,0) [0|3] "" XXX
SG_ AUDIBLE_TONE : 47|3@0+ (1,0) [0|8] "" XXX
SG_ SPEED_SET_ICON : 7|2@0+ (1,0) [0|3] "" XXX
SG_ SMALL_STEERING_WHEEL_ICON : 42|3@0+ (1,0) [0|7] "" XXX
SG_ unknown59 : 59|4@0+ (1,0) [0|15] "" XXX
SG_ unknown55 : 55|8@0+ (1,0) [0|63] "" XXX
SG_ unknown26 : 26|1@0+ (1,0) [0|1] "" XXX
SG_ unknown28 : 28|1@0+ (1,0) [0|1] "" XXX
SG_ unknown31 : 31|2@0+ (1,0) [0|3] "" XXX
SG_ unknown39 : 39|8@0+ (1,0) [0|255] "" XXX
SG_ unknown43 : 43|1@0+ (1,0) [0|1] "" XXX
SG_ unknown8 : 8|7@0+ (1,0) [0|63] "" XXX
SG_ unknown05 : 5|2@0+ (1,0) [0|3] "" XXX
SG_ unknown02 : 1|2@0+ (1,0) [0|3] "" XXX
BO_ 1227 LKAS_SETTINGS: 8 XXX
SG_ LKAS_ENABLED : 51|1@0+ (1,0) [0|1] "" XXX
BO_ 1273 SEATBELT: 7 XXX
SG_ SEATBELT_DRIVER_LATCHED : 25|1@0+ (1,0) [0|1] "" XXX
VAL_ 1055 GEAR_SHIFTER 6 "L" 4 "D" 3 "N" 2 "R" 1 "P" ;
VAL_ 1228 PROPILOT_NA_MSGS 0 "NO_MSG" 1 "NA_FRONT_CAMERA_IMPARED" 2 "STEERING_ASSIST_ON_STANDBY" 3 "NA_PARKING_ASSIST_ENABLED" 4 "STEER_ASSIST_CURRENTLY_NA" 5 "NA_BAD_WEATHER" 6 "NA_PARK_BRAKE_ON" 7 "NA_SEATBELT_NOT_FASTENED" ;
+104 -72
View File
@@ -38,24 +38,24 @@ BU_: XXX X
BO_ 2 Steering: 8 XXX
SG_ Counter : 25|3@1+ (1,0) [0|7] "" XXX
SG_ Checksum : 32|8@1+ (1,0) [0|255] "" XXX
SG_ CHECKSUM : 32|8@1+ (1,0) [0|255] "" XXX
SG_ Steering_Angle : 7|16@0- (0.1,0) [0|65535] "" XXX
BO_ 64 Throttle: 8 XXX
SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
SG_ Off_Accel : 60|4@1+ (1,0) [0|7] "" XXX
SG_ NEW_SIGNAL_3 : 56|4@1+ (1,0) [0|255] "" XXX
SG_ Throttle_Cruise : 40|8@1+ (1,0) [0|255] "" XXX
SG_ Throttle_Combo : 55|8@1+ (1,0) [0|255] "" XXX
SG_ Throttle_Pedal : 32|8@1+ (1,0) [0|255] "" XXX
SG_ NEW_SIGNAL_2 : 48|7@1+ (1,0) [0|1] "" XXX
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
SG_ Counter : 8|4@1+ (1,0) [0|255] "" XXX
SG_ Engine_RPM : 16|12@1+ (1,0) [0|255] "" XXX
SG_ NEW_SIGNAL_1 : 12|4@1+ (1,0) [0|1] "" XXX
SG_ Engine_RPM : 16|12@1+ (1,0) [0|255] "" XXX
SG_ NEW_SIGNAL_4 : 28|5@1+ (1,0) [0|1] "" XXX
SG_ Throttle_Pedal : 32|8@1+ (1,0) [0|255] "" XXX
SG_ Throttle_Cruise : 40|8@1+ (1,0) [0|255] "" XXX
SG_ Throttle_Combo : 48|7@1+ (1,0) [0|1] "" XXX
SG_ Signal1 : 55|8@1+ (1,0) [0|255] "" XXX
SG_ NEW_SIGNAL_3 : 56|4@1+ (1,0) [0|255] "" XXX
SG_ Off_Accel : 60|4@1+ (1,0) [0|7] "" XXX
BO_ 65 NEW_MSG_1: 8 XXX
SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
SG_ NEW_SIGNAL_4 : 32|12@1+ (1,0) [0|255] "" XXX
SG_ NEW_SIGNAL_3 : 16|12@1+ (1,0) [0|1] "" XXX
@@ -63,17 +63,18 @@ BO_ 65 NEW_MSG_1: 8 XXX
SG_ NEW_SIGNAL_6 : 48|8@1+ (1,0) [0|63] "" XXX
SG_ NEW_SIGNAL_7 : 59|2@0+ (1,0) [0|255] "" XXX
BO_ 72 NEW_MSG_2: 8 XXX
SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
BO_ 72 Transmission: 8 XXX
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
SG_ NEW_SIGNAL_3 : 40|16@1+ (1,0) [0|255] "" XXX
SG_ NEW_SIGNAL_4 : 38|3@0+ (1,0) [0|255] "" XXX
SG_ NEW_SIGNAL_5 : 16|8@1+ (1,0) [0|255] "" XXX
SG_ Gear : 24|8@1+ (1,0) [0|255] "" XXX
SG_ NEW_SIGNAL_4 : 38|3@0+ (1,0) [0|255] "" XXX
SG_ NEW_SIGNAL_3 : 40|16@1+ (1,0) [0|255] "" XXX
BO_ 316 NEW_MSG_3: 8 XXX
BO_ 326 Cruise_Buttons: 8 XXX
SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
SG_ Signal1 : 12|30@1+ (1,0) [0|1073741823] "" XXX
SG_ Main : 42|1@1+ (1,0) [0|1] "" XXX
@@ -86,7 +87,7 @@ BO_ 315 G_Sensor: 8 XXX
SG_ Latitudinal : 48|8@1- (1,0) [0|255] "" XXX
BO_ 314 Wheel_Speeds: 8 XXX
SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
SG_ FR : 12|13@1+ (0.057,0) [0|255] "kph" XXX
SG_ RR : 25|13@1+ (0.057,0) [0|255] "kph" XXX
@@ -94,131 +95,156 @@ BO_ 314 Wheel_Speeds: 8 XXX
SG_ RL : 38|13@1+ (0.057,0) [0|255] "kph" XXX
BO_ 73 NEW_MSG_5: 8 XXX
SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
SG_ NEW_SIGNAL_1 : 32|8@1+ (1,0) [0|4095] "" XXX
SG_ NEW_SIGNAL_2 : 24|8@1+ (1,0) [0|127] "" XXX
BO_ 280 NEW_MSG_6: 8 XXX
BO_ 280 STOP_START: 8 XXX
SG_ CHECKSUM : 0|8@1+ (1,0) [0|1] "" XXX
SG_ Counter : 8|4@1+ (1,0) [0|1] "" XXX
SG_ NEW_SIGNAL_1 : 12|12@1- (1,0) [0|4095] "" XXX
SG_ NEW_SIGNAL_4 : 40|4@1+ (1,0) [0|255] "" XXX
SG_ NEW_SIGNAL_2 : 48|8@1- (1,0) [0|255] "" XXX
SG_ NEW_SIGNAL_3 : 61|1@1+ (1,0) [0|7] "" XXX
SG_ NEW_SIGNAL_4 : 40|4@1+ (1,0) [0|255] "" XXX
SG_ State : 63|1@1+ (1,0) [0|1] "" XXX
BO_ 281 Steering_Torque: 8 XXX
SG_ checksum : 0|8@1+ (1,0) [0|3] "" XXX
SG_ CHECKSUM : 0|8@1+ (1,0) [0|3] "" XXX
SG_ counter : 8|4@1+ (1,0) [0|15] "" XXX
SG_ Steer_Error_1 : 12|1@0+ (1,0) [0|7] "" XXX
SG_ Steer_Torque_Sensor : 16|11@1- (-1,0) [0|3] "" XXX
SG_ Steer_Error_2 : 28|1@1+ (1,0) [0|3] "" XXX
SG_ Steering_Angle : 32|16@1- (-0.0217,0) [0|255] "" X
SG_ Steer_Torque_Output : 48|11@1- (-1,0) [0|31] "" XXX
BO_ 312 Brake_Pressure_L_R: 8 XXX
SG_ Checksum : 0|8@1+ (1,0) [0|31] "" XXX
SG_ CHECKSUM : 0|8@1+ (1,0) [0|31] "" XXX
SG_ Counter : 8|4@1+ (1,0) [0|3] "" XXX
SG_ Brake_2 : 56|8@1+ (1,0) [0|255] "" XXX
SG_ Brake_1 : 48|8@1+ (1,0) [0|255] "" XXX
SG_ Brake_2 : 56|8@1+ (1,0) [0|255] "" XXX
BO_ 313 Brake_Pedal: 8 XXX
SG_ CHECKSUM : 0|8@1+ (1,0) [0|1] "" XXX
SG_ Counter : 8|4@1+ (1,0) [0|1] "" XXX
SG_ Signal1 : 12|22@1+ (1,0) [0|1] "" XXX
SG_ Brake_Pedal_On : 34|1@1+ (1,0) [0|7] "" XXX
SG_ Signal2 : 35|1@1+ (1,0) [0|1] "" XXX
SG_ Brake_Pedal : 36|12@1+ (1,0) [0|65535] "" XXX
SG_ Signal3 : 48|16@1+ (1,0) [0|1] "" XXX
BO_ 290 ES_LKAS: 8 XXX
SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
SG_ LKAS_Output : 16|13@1- (-1,0) [0|3] "" XXX
SG_ LKAS_Request : 29|1@0+ (1,0) [0|3] "" XXX
SG_ SET_1 : 12|1@0+ (1,0) [0|3] "" XXX
BO_ 722 NEW_MSG_10: 8 XXX
SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
SG_ NEW_SIGNAL_1 : 27|3@1+ (1,0) [0|255] "" XXX
SG_ NEW_SIGNAL_4 : 56|2@1+ (1,0) [0|3] "" XXX
SG_ NEW_SIGNAL_5 : 45|2@0+ (1,0) [0|3] "" XXX
BO_ 544 ES_Brake: 8 XXX
SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
SG_ Signal1 : 12|4@1+ (1,0) [0|1] "" XXX
SG_ Brake_Pressure : 16|16@1+ (1,0) [0|255] "" XXX
SG_ __Status : 36|4@1+ (1,0) [0|63] "" XXX
SG_ Signal2 : 32|4@1+ (1,0) [0|1] "" XXX
SG_ State : 36|4@1+ (1,0) [0|63] "" XXX
SG_ Signal3 : 40|24@1+ (1,0) [0|1] "" XXX
BO_ 545 ES_Distance: 8 XXX
SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
SG_ Signal1 : 12|20@1+ (1,0) [0|15] "" XXX
SG_ Signal2 : 32|24@1+ (1,0) [0|15] "" XXX
SG_ ACC_Cancel : 56|1@1+ (1,0) [0|1] "" XXX
SG_ ACC_Set : 57|1@1+ (1,0) [0|1] "" XXX
SG_ ACC_Resume : 58|1@1+ (1,0) [0|1] "" XXX
SG_ Signal3 : 59|5@1+ (1,0) [0|1] "" XXX
SG_ ES_Cruise_Throttle : 12|20@1+ (1,0) [0|15] "" XXX
SG_ Car_Follow : 32|1@1+ (1,0) [0|1] "" XXX
SG_ Signal1 : 33|4@1+ (1,0) [0|1] "" XXX
SG_ Distance_Swap : 37|1@1+ (1,0) [0|15] "" XXX
SG_ Signal2 : 38|2@1+ (1,0) [0|1] "" XXX
SG_ Close_Distance : 40|8@1+ (1,0) [0|1] "" XXX
SG_ Signal3 : 48|8@1+ (1,0) [0|1] "" XXX
SG_ Cruise_Cancel : 56|1@1+ (1,0) [0|1] "" XXX
SG_ Cruise_Set : 57|1@1+ (1,0) [0|1] "" XXX
SG_ Cruise_Resume : 58|1@1+ (1,0) [0|1] "" XXX
SG_ Signal4 : 59|5@1+ (1,0) [0|1] "" XXX
BO_ 546 ES_Status: 8 XXX
SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
SG_ RPM : 16|12@1+ (1,0) [0|255] "" XXX
SG_ Cruise_Activated : 29|1@0+ (1,0) [0|3] "" XXX
SG_ Cruise_Brake : 30|1@1+ (1,0) [0|3] "" XXX
SG_ Cruise_Hold : 31|1@1+ (1,0) [0|1] "" XXX
BO_ 554 ES_Blank: 8 XXX
SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
SG_ SET_65535 : 39|16@1+ (1,0) [0|16777215] "" XXX
SG_ SET_1 : 13|1@1+ (1,0) [0|7] "" XXX
BO_ 557 NEW_MSG_14: 8 XXX
SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
BO_ 576 CruiseControl: 8 XXX
SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
SG_ NEW_SIGNAL_5 : 42|1@1+ (1,0) [0|3] "" XXX
SG_ Cruise_On : 40|1@1+ (1,0) [0|3] "" XXX
SG_ Cruise_Activated : 41|1@1+ (1,0) [0|3] "" XXX
BO_ 577 NEW_MSG_16: 8 XXX
SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
SG_ NEW_SIGNAL_1 : 16|12@1+ (1,0) [0|255] "" XXX
BO_ 552 NEW_MSG_17: 8 XXX
SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
SG_ NEW_SIGNAL_1 : 48|1@1+ (1,0) [0|3] "" XXX
BO_ 912 Dashlights: 8 XXX
SG_ NEW_SIGNAL_1 : 32|1@1+ (1,0) [0|3] "" XXX
SG_ NEW_SIGNAL_2 : 8|4@1+ (1,0) [0|15] "" XXX
SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
SG_ RIGHT_BLINKER : 51|1@1+ (1,0) [0|1] "" XXX
SG_ LEFT_BLINKER : 50|1@1+ (1,0) [0|3] "" XXX
SG_ SEATBELT_FL : 48|1@1+ (1,0) [0|1] "" XXX
BO_ 940 BodyInfo: 8 XXX
SG_ DASH_BTN_LIGHTS : 56|1@0+ (1,0) [0|1] "" XXX
SG_ CHECKSUM : 0|8@1+ (1,0) [0|1] "" XXX
SG_ Counter : 8|4@1+ (1,0) [0|1] "" XXX
SG_ DOOR_OPEN_FL : 32|1@1+ (1,0) [0|255] "" XXX
SG_ DOOR_OPEN_FR : 33|1@1+ (1,0) [0|3] "" XXX
SG_ DOOR_OPEN_RL : 34|1@1+ (1,0) [0|1] "" XXX
SG_ DOOR_OPEN_RR : 35|1@1+ (1,0) [0|1] "" XXX
SG_ DOOR_OPEN_TRUNK : 36|1@0+ (1,0) [0|1] "" XXX
SG_ FOG_LIGHTS2 : 60|1@1+ (1,0) [0|1] "" XXX
SG_ Highbeam : 58|1@1+ (1,0) [0|1] "" XXX
SG_ DASH_BTN_LIGHTS : 56|1@0+ (1,0) [0|1] "" XXX
SG_ Lowbeam : 57|1@1+ (1,0) [0|3] "" XXX
SG_ Highbeam : 58|1@1+ (1,0) [0|1] "" XXX
SG_ FOG_LIGHTS2 : 60|1@1+ (1,0) [0|1] "" XXX
SG_ WIPERS : 62|1@0+ (1,0) [0|1] "" XXX
BO_ 801 ES_DashStatus: 8 XXX
SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
SG_ Counter : 8|4@1+ (1,0) [0|7] "" XXX
SG_ PCB_Off : 12|1@1+ (1,0) [0|1] "" XXX
SG_ LDW_Off : 13|1@1+ (1,0) [0|1] "" XXX
SG_ Cruise_Distance : 28|3@1+ (1,0) [0|3] "" XXX
SG_ Cruise_Disengaged : 35|1@1+ (1,0) [0|3] "" XXX
SG_ Cruise_Activated : 36|1@1+ (1,0) [0|3] "" XXX
SG_ Cruise_Set_Speed : 40|8@1+ (1,0) [0|255] "" XXX
SG_ Cruise_Fault : 48|1@1+ (1,0) [0|1] "" XXX
SG_ NEW_SIGNAL_10 : 49|2@1+ (1,0) [0|3] "" XXX
SG_ Brake_Pedal : 51|1@1+ (1,0) [0|3] "" XXX
SG_ Cruise_Set_Speed : 40|8@1+ (1,0) [0|255] "" XXX
SG_ Cruise_Activated : 36|1@1+ (1,0) [0|3] "" XXX
SG_ Cruise_Disengaged : 35|1@1+ (1,0) [0|3] "" XXX
SG_ Far_Distance : 56|4@1+ (1,0) [0|15] "" XXX
SG_ Car_Follow : 52|1@1+ (1,0) [0|3] "" XXX
SG_ ACC_Distance : 28|3@1+ (1,0) [0|3] "" XXX
SG_ ACC_Hold : 60|4@1+ (1,0) [0|15] "" XXX
SG_ Far_Distance : 56|4@1+ (1,0) [0|15] "" XXX
SG_ Cruise_State : 60|4@1+ (1,0) [0|15] "" XXX
BO_ 802 ES_LKAS_State: 8 XXX
SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
SG_ Keep_Hands_On_Wheel : 12|1@1+ (1,0) [0|1] "" XXX
SG_ Empty_Box : 13|1@1+ (1,0) [0|1] "" XXX
@@ -237,62 +263,62 @@ BO_ 802 ES_LKAS_State: 8 XXX
SG_ FCW_Cont_Beep : 32|1@1+ (1,0) [0|1] "" XXX
SG_ FCW_Repeated_Beep : 33|1@1+ (1,0) [0|1] "" XXX
SG_ Throttle_Management_Activated : 34|1@1+ (1,0) [0|1] "" XXX
SG_ Lead_Vehicle_Start_Alert : 35|1@1+ (1,0) [0|1] "" XXX
SG_ Right_Depart : 36|1@1+ (1,0) [0|3] "" XXX
SG_ Signal5 : 37|27@1+ (1,0) [0|1] "" XXX
SG_ Vehicle_In_Front_Has_Moved : 35|1@1+ (1,0) [0|1] "" XXX
BO_ 805 ES_NEW_MSG_22: 8 XXX
SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
SG_ NEW_SIGNAL_3 : 22|2@1+ (1,0) [0|3] "" XXX
SG_ NEW_SIGNAL_1 : 14|1@1+ (1,0) [0|3] "" XXX
SG_ NEW_SIGNAL_4 : 15|1@1+ (1,0) [0|3] "" XXX
BO_ 808 NEW_MSG_23: 8 XXX
SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
BO_ 837 NEW_MSG_24: 8 XXX
SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
SG_ NEW_SIGNAL_3 : 40|8@1+ (1,0) [0|255] "" XXX
SG_ NEW_SIGNAL_4 : 32|4@1+ (1,0) [0|15] "" XXX
SG_ NEW_SIGNAL_5 : 24|8@1+ (1,0) [0|255] "" XXX
BO_ 838 NEW_MSG_25: 8 XXX
SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
SG_ NEW_SIGNAL_3 : 16|8@1+ (1,0) [0|255] "" XXX
SG_ NEW_SIGNAL_4 : 40|1@1+ (1,0) [0|3] "" XXX
BO_ 842 NEW_MSG_26: 8 XXX
SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
SG_ NEW_SIGNAL_3 : 32|8@1+ (1,0) [0|255] "" XXX
BO_ 915 NEW_MSG_27: 8 XXX
SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
SG_ NEW_SIGNAL_3 : 16|8@1+ (1,0) [0|255] "" XXX
SG_ NEW_SIGNAL_4 : 32|9@1+ (1,0) [0|255] "" XXX
BO_ 1788 NEW_MSG_28: 8 XXX
SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
SG_ NEW_SIGNAL_3 : 40|4@1+ (1,0) [0|15] "" XXX
SG_ NEW_SIGNAL_4 : 48|8@1+ (1,0) [0|255] "" XXX
SG_ NEW_SIGNAL_5 : 16|8@1+ (1,0) [0|255] "" XXX
BO_ 816 NEW_MSG_29: 8 XXX
SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
BO_ 826 NEW_MSG_30: 8 XXX
SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
BO_ 839 NEW_MSG_31: 8 XXX
SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
BO_ 2015 NEW_MSG_32: 8 XXX
@@ -305,38 +331,39 @@ BO_ 2024 NEW_MSG_33: 8 XXX
SG_ NEW_SIGNAL_4 : 32|8@1+ (1,0) [0|255] "" XXX
BO_ 1614 NEW_MSG_34: 8 XXX
SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
BO_ 1617 NEW_MSG_35: 8 XXX
SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
BO_ 1632 NEW_MSG_36: 8 XXX
SG_ NEW_SIGNAL_1 : 55|16@0+ (1,0) [0|255] "" XXX
BO_ 1650 NEW_MSG_37: 8 XXX
SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
BO_ 1657 NEW_MSG_38: 8 XXX
SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
BO_ 1658 NEW_MSG_39: 8 XXX
SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
SG_ NEW_SIGNAL_3 : 33|1@1+ (1,0) [0|3] "" XXX
SG_ NEW_SIGNAL_4 : 31|1@0+ (1,0) [0|3] "" XXX
BO_ 1677 Dash_State: 8 XXX
SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
SG_ NEW_SIGNAL_3 : 16|4@1+ (1,0) [0|15] "" XXX
SG_ Units : 29|3@1+ (1,0) [0|7] "" XXX
SG_ Icy_Road_Warning : 20|1@1+ (1,0) [0|1] "" XXX
BO_ 1743 NEW_MSG_41: 8 XXX
SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
BO_ 1785 NEW_MSG_42: 8 XXX
@@ -360,10 +387,15 @@ BO_ 1787 NEW_MSG_45: 8 XXX
CM_ SG_ 940 FOG_LIGHTS2 "yellow fog light in the dash";
CM_ SG_ 64 Throttle_Combo "Throttle Cruise + Pedal";
CM_ SG_ 544 State "0 = ES disabled, 8 = ES enabled, 12, 13 = ES_Brake active";
CM_ SG_ 545 ES_Cruise_Throttle "signal might be smaller, values do not correlate with Throttle:CruiseThrottle";
CM_ SG_ 545 Distance_Swap "Switch from Close to Far distance";
CM_ SG_ 940 Highbeam "01 = low beam, 11 = high beam";
CM_ SG_ 801 ACC_Hold "0 = No Hold, 3 = Hold";
CM_ SG_ 802 Vehicle_In_Front_Has_Moved "Crosstrek 2018 = car in front has moved";
CM_ SG_ 940 FOG_LIGHTS2 "yellow fog light in the dash";
CM_ SG_ 801 PCB_Off "Pre-Collision Braking";
CM_ SG_ 801 Cruise_State "0 = Normal, 1 = Hold+User Brake, 2 = Ready, 3 = Hold";
CM_ SG_ 805 NEW_SIGNAL_3 "always 3";
CM_ SG_ 805 NEW_SIGNAL_4 "always 1";
CM_ SG_ 1677 Units "1 = imperial, 6 = metric";
VAL_ 72 Gear 2 "N" 3 "R" 4 "P" 121 "D" 137 "1" 145 "2" 153 "3" 161 "4" 169 "5" 177 "6" ;
+57 -52
View File
@@ -38,11 +38,11 @@ BU_: XXX X
BO_ 2 Steering: 8 XXX
SG_ Counter : 25|3@1+ (1,0) [0|7] "" XXX
SG_ Checksum : 32|8@1+ (1,0) [0|255] "" XXX
SG_ CHECKSUM : 32|8@1+ (1,0) [0|255] "" XXX
SG_ Steering_Angle : 7|16@0- (0.1,0) [0|65535] "" XXX
BO_ 64 Throttle: 8 XXX
SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
SG_ Off_Accel : 60|4@1+ (1,0) [0|7] "" XXX
SG_ NEW_SIGNAL_3 : 56|4@1+ (1,0) [0|255] "" XXX
SG_ Throttle_Cruise : 40|8@1+ (1,0) [0|255] "" XXX
@@ -55,7 +55,7 @@ BO_ 64 Throttle: 8 XXX
SG_ NEW_SIGNAL_4 : 28|5@1+ (1,0) [0|1] "" XXX
BO_ 65 NEW_MSG_1: 8 XXX
SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
SG_ NEW_SIGNAL_4 : 32|12@1+ (1,0) [0|255] "" XXX
SG_ NEW_SIGNAL_3 : 16|12@1+ (1,0) [0|1] "" XXX
@@ -63,17 +63,18 @@ BO_ 65 NEW_MSG_1: 8 XXX
SG_ NEW_SIGNAL_6 : 48|8@1+ (1,0) [0|63] "" XXX
SG_ NEW_SIGNAL_7 : 59|2@0+ (1,0) [0|255] "" XXX
BO_ 72 NEW_MSG_2: 8 XXX
SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
BO_ 72 Transmission: 8 XXX
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
SG_ NEW_SIGNAL_3 : 40|16@1+ (1,0) [0|255] "" XXX
SG_ NEW_SIGNAL_4 : 38|3@0+ (1,0) [0|255] "" XXX
SG_ NEW_SIGNAL_5 : 16|8@1+ (1,0) [0|255] "" XXX
SG_ Gear : 24|8@1+ (1,0) [0|255] "" XXX
SG_ NEW_SIGNAL_4 : 38|3@0+ (1,0) [0|255] "" XXX
SG_ NEW_SIGNAL_3 : 40|16@1+ (1,0) [0|255] "" XXX
BO_ 316 NEW_MSG_3: 8 XXX
BO_ 326 Cruise_Buttons: 8 XXX
SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
SG_ Signal1 : 12|30@1+ (1,0) [0|1073741823] "" XXX
SG_ Main : 42|1@1+ (1,0) [0|1] "" XXX
@@ -86,7 +87,7 @@ BO_ 315 G_Sensor: 8 XXX
SG_ Latitudinal : 48|8@1- (1,0) [0|255] "" XXX
BO_ 314 Wheel_Speeds: 8 XXX
SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
SG_ FR : 12|13@1+ (0.057,0) [0|255] "kph" XXX
SG_ RR : 25|13@1+ (0.057,0) [0|255] "kph" XXX
@@ -94,7 +95,7 @@ BO_ 314 Wheel_Speeds: 8 XXX
SG_ RL : 38|13@1+ (0.057,0) [0|255] "kph" XXX
BO_ 73 NEW_MSG_5: 8 XXX
SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
SG_ NEW_SIGNAL_1 : 32|8@1+ (1,0) [0|4095] "" XXX
SG_ NEW_SIGNAL_2 : 24|8@1+ (1,0) [0|127] "" XXX
@@ -105,7 +106,7 @@ BO_ 280 NEW_MSG_6: 8 XXX
SG_ NEW_SIGNAL_4 : 40|4@1+ (1,0) [0|255] "" XXX
BO_ 281 Steering_Torque: 8 XXX
SG_ checksum : 0|8@1+ (1,0) [0|3] "" XXX
SG_ CHECKSUM : 0|8@1+ (1,0) [0|3] "" XXX
SG_ counter : 8|4@1+ (1,0) [0|15] "" XXX
SG_ Steer_Torque_Sensor : 16|11@1- (-1,0) [0|3] "" XXX
SG_ Steering_Angle : 32|16@1- (-0.0217,0) [0|255] "" X
@@ -114,39 +115,39 @@ BO_ 281 Steering_Torque: 8 XXX
SG_ Steer_Error_2 : 28|1@1+ (1,0) [0|3] "" XXX
BO_ 312 Brake_Pressure_L_R: 8 XXX
SG_ Checksum : 0|8@1+ (1,0) [0|31] "" XXX
SG_ CHECKSUM : 0|8@1+ (1,0) [0|31] "" XXX
SG_ Counter : 8|4@1+ (1,0) [0|3] "" XXX
SG_ Brake_2 : 56|8@1+ (1,0) [0|255] "" XXX
SG_ Brake_1 : 48|8@1+ (1,0) [0|255] "" XXX
BO_ 313 Brake_Pedal: 8 XXX
SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
SG_ Brake_Pedal_On : 34|1@1+ (1,0) [0|7] "" XXX
SG_ Brake_Pedal : 36|12@1+ (1,0) [0|65535] "" XXX
BO_ 290 ES_LKAS: 8 XXX
SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
SG_ LKAS_Output : 16|13@1- (-1,0) [0|3] "" XXX
SG_ LKAS_Request : 29|1@0+ (1,0) [0|3] "" XXX
SG_ SET_1 : 12|1@0+ (1,0) [0|3] "" XXX
BO_ 722 NEW_MSG_10: 8 XXX
SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
SG_ NEW_SIGNAL_1 : 27|3@1+ (1,0) [0|255] "" XXX
SG_ NEW_SIGNAL_4 : 56|2@1+ (1,0) [0|3] "" XXX
SG_ NEW_SIGNAL_5 : 45|2@0+ (1,0) [0|3] "" XXX
BO_ 544 ES_Brake: 8 XXX
SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
SG_ Brake_Pressure : 16|16@1+ (1,0) [0|255] "" XXX
SG_ __Status : 36|4@1+ (1,0) [0|63] "" XXX
BO_ 545 ES_Distance: 8 XXX
SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
SG_ Signal1 : 12|20@1+ (1,0) [0|15] "" XXX
SG_ Signal2 : 32|24@1+ (1,0) [0|15] "" XXX
@@ -154,73 +155,75 @@ BO_ 545 ES_Distance: 8 XXX
SG_ Signal3 : 57|7@1+ (1,0) [0|1] "" XXX
BO_ 546 ES_Status: 8 XXX
SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
SG_ RPM : 16|12@1+ (1,0) [0|255] "" XXX
SG_ Cruise_Activated : 29|1@0+ (1,0) [0|3] "" XXX
SG_ Cruise_Brake : 30|1@1+ (1,0) [0|3] "" XXX
BO_ 554 ES_Blank: 8 XXX
SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
SG_ SET_65535 : 39|16@1+ (1,0) [0|16777215] "" XXX
SG_ SET_1 : 13|1@1+ (1,0) [0|7] "" XXX
BO_ 557 NEW_MSG_14: 8 XXX
SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
BO_ 576 CruiseControl: 8 XXX
SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
SG_ NEW_SIGNAL_5 : 42|1@1+ (1,0) [0|3] "" XXX
SG_ Cruise_On : 40|1@1+ (1,0) [0|3] "" XXX
SG_ Cruise_Activated : 41|1@1+ (1,0) [0|3] "" XXX
BO_ 577 NEW_MSG_16: 8 XXX
SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
SG_ NEW_SIGNAL_1 : 16|12@1+ (1,0) [0|255] "" XXX
BO_ 552 NEW_MSG_17: 8 XXX
SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
SG_ NEW_SIGNAL_1 : 48|1@1+ (1,0) [0|3] "" XXX
BO_ 912 Dashlights: 8 XXX
SG_ NEW_SIGNAL_1 : 32|1@1+ (1,0) [0|3] "" XXX
SG_ NEW_SIGNAL_2 : 8|4@1+ (1,0) [0|15] "" XXX
SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
SG_ RIGHT_BLINKER : 51|1@1+ (1,0) [0|1] "" XXX
SG_ LEFT_BLINKER : 50|1@1+ (1,0) [0|3] "" XXX
SG_ SEATBELT_FL : 48|1@1+ (1,0) [0|1] "" XXX
BO_ 940 BodyInfo: 8 XXX
SG_ DASH_BTN_LIGHTS : 56|1@0+ (1,0) [0|1] "" XXX
SG_ DOOR_OPEN_FL : 32|1@1+ (1,0) [0|255] "" XXX
SG_ DOOR_OPEN_FR : 33|1@1+ (1,0) [0|3] "" XXX
SG_ DOOR_OPEN_RL : 34|1@1+ (1,0) [0|1] "" XXX
SG_ DOOR_OPEN_RR : 35|1@1+ (1,0) [0|1] "" XXX
SG_ DOOR_OPEN_TRUNK : 36|1@0+ (1,0) [0|1] "" XXX
SG_ FOG_LIGHTS2 : 60|1@1+ (1,0) [0|1] "" XXX
SG_ Highbeam : 58|1@1+ (1,0) [0|1] "" XXX
SG_ DASH_BTN_LIGHTS : 56|1@0+ (1,0) [0|1] "" XXX
SG_ Lowbeam : 57|1@1+ (1,0) [0|3] "" XXX
SG_ Highbeam : 58|1@1+ (1,0) [0|1] "" XXX
SG_ FOG_LIGHTS2 : 60|1@1+ (1,0) [0|1] "" XXX
SG_ WIPERS : 62|1@0+ (1,0) [0|1] "" XXX
BO_ 801 ES_DashStatus: 8 XXX
SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
SG_ Counter : 8|4@1+ (1,0) [0|7] "" XXX
SG_ NEW_SIGNAL_9 : 60|4@1+ (1,0) [0|15] "" XXX
SG_ Cruise_Distance : 28|3@1+ (1,0) [0|3] "" XXX
SG_ Cruise_Disengaged : 35|1@1+ (1,0) [0|3] "" XXX
SG_ Cruise_Activated : 36|1@1+ (1,0) [0|3] "" XXX
SG_ Cruise_Set_Speed : 40|8@1+ (1,0) [0|255] "" XXX
SG_ Cruise_Fault : 48|1@1+ (1,0) [0|1] "" XXX
SG_ NEW_SIGNAL_10 : 49|2@1+ (1,0) [0|3] "" XXX
SG_ Brake_Pedal : 51|1@1+ (1,0) [0|3] "" XXX
SG_ Cruise_Set_Speed : 40|8@1+ (1,0) [0|255] "" XXX
SG_ Cruise_Activated : 36|1@1+ (1,0) [0|3] "" XXX
SG_ Cruise_Disengaged : 35|1@1+ (1,0) [0|3] "" XXX
SG_ Far_Distance : 56|4@1+ (1,0) [0|15] "" XXX
SG_ Car_Follow : 52|1@1+ (1,0) [0|3] "" XXX
SG_ ACC_Distance : 28|3@1+ (1,0) [0|3] "" XXX
SG_ Far_Distance : 56|4@1+ (1,0) [0|15] "" XXX
SG_ Cruise_State : 60|4@1+ (1,0) [0|15] "" XXX
BO_ 802 ES_LKAS_State: 8 XXX
SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
SG_ Keep_Hands_On_Wheel : 12|1@1+ (1,0) [0|1] "" XXX
SG_ Empty_Box : 13|1@1+ (1,0) [0|1] "" XXX
@@ -244,57 +247,57 @@ BO_ 802 ES_LKAS_State: 8 XXX
SG_ Signal5 : 37|27@1+ (1,0) [0|1] "" XXX
BO_ 805 ES_NEW_MSG_22: 8 XXX
SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
SG_ NEW_SIGNAL_3 : 22|2@1+ (1,0) [0|3] "" XXX
SG_ NEW_SIGNAL_1 : 14|1@1+ (1,0) [0|3] "" XXX
SG_ NEW_SIGNAL_4 : 15|1@1+ (1,0) [0|3] "" XXX
BO_ 808 NEW_MSG_23: 8 XXX
SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
BO_ 837 NEW_MSG_24: 8 XXX
SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
SG_ NEW_SIGNAL_3 : 40|8@1+ (1,0) [0|255] "" XXX
SG_ NEW_SIGNAL_4 : 32|4@1+ (1,0) [0|15] "" XXX
SG_ NEW_SIGNAL_5 : 24|8@1+ (1,0) [0|255] "" XXX
BO_ 838 NEW_MSG_25: 8 XXX
SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
SG_ NEW_SIGNAL_3 : 16|8@1+ (1,0) [0|255] "" XXX
SG_ NEW_SIGNAL_4 : 40|1@1+ (1,0) [0|3] "" XXX
BO_ 842 NEW_MSG_26: 8 XXX
SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
SG_ NEW_SIGNAL_3 : 32|8@1+ (1,0) [0|255] "" XXX
BO_ 915 NEW_MSG_27: 8 XXX
SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
SG_ NEW_SIGNAL_3 : 16|8@1+ (1,0) [0|255] "" XXX
SG_ NEW_SIGNAL_4 : 32|9@1+ (1,0) [0|255] "" XXX
BO_ 1788 NEW_MSG_28: 8 XXX
SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
SG_ NEW_SIGNAL_3 : 40|4@1+ (1,0) [0|15] "" XXX
SG_ NEW_SIGNAL_4 : 48|8@1+ (1,0) [0|255] "" XXX
SG_ NEW_SIGNAL_5 : 16|8@1+ (1,0) [0|255] "" XXX
BO_ 816 NEW_MSG_29: 8 XXX
SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
BO_ 826 NEW_MSG_30: 8 XXX
SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
BO_ 839 NEW_MSG_31: 8 XXX
SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
BO_ 2015 NEW_MSG_32: 8 XXX
@@ -307,38 +310,38 @@ BO_ 2024 NEW_MSG_33: 8 XXX
SG_ NEW_SIGNAL_4 : 32|8@1+ (1,0) [0|255] "" XXX
BO_ 1614 NEW_MSG_34: 8 XXX
SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
BO_ 1617 NEW_MSG_35: 8 XXX
SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
BO_ 1632 NEW_MSG_36: 8 XXX
SG_ NEW_SIGNAL_1 : 55|16@0+ (1,0) [0|255] "" XXX
BO_ 1650 NEW_MSG_37: 8 XXX
SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
BO_ 1657 NEW_MSG_38: 8 XXX
SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
BO_ 1658 NEW_MSG_39: 8 XXX
SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
SG_ NEW_SIGNAL_3 : 33|1@1+ (1,0) [0|3] "" XXX
SG_ NEW_SIGNAL_4 : 31|1@0+ (1,0) [0|3] "" XXX
BO_ 1677 Dash_State: 8 XXX
SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
SG_ NEW_SIGNAL_3 : 16|4@1+ (1,0) [0|15] "" XXX
SG_ Units : 29|3@1+ (1,0) [0|7] "" XXX
BO_ 1743 NEW_MSG_41: 8 XXX
SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
BO_ 1785 NEW_MSG_42: 8 XXX
@@ -364,7 +367,9 @@ BO_ 1787 NEW_MSG_45: 8 XXX
CM_ SG_ 940 FOG_LIGHTS2 "yellow fog light in the dash";
CM_ SG_ 940 Highbeam "01 = low beam, 11 = high beam";
CM_ SG_ 801 Cruise_State "0 = Normal, 3 = Hold";
CM_ SG_ 802 Traffic_light_Ahead "Crosstrek 2018 = car in front has moved";
CM_ SG_ 805 NEW_SIGNAL_3 "always 3";
CM_ SG_ 805 NEW_SIGNAL_4 "always 1";
CM_ SG_ 1677 Units "1 = imperial, 6 = metric";
VAL_ 72 Gear 2 "N" 3 "R" 4 "P" 121 "D" 137 "1" 145 "2" 153 "3" 161 "4" 169 "5" 177 "6";
+4 -1
View File
@@ -96,7 +96,10 @@ BO_ 180 SPEED: 8 XXX
BO_ 353 DSU_SPEED: 8 XXX
SG_ FORWARD_SPEED : 15|16@0- (0.00390625,-30) [0|255] "kph" XXX
BO_ 452 ENGINE_RPM: 8 CGW
SG_ RPM : 7|16@0- (0.78125,0) [0|0] "rpm" SCS
BO_ 466 PCM_CRUISE: 8 XXX
SG_ GAS_RELEASED : 4|1@0+ (1,0) [0|1] "" XXX
SG_ CRUISE_ACTIVE : 5|1@0+ (1,0) [0|1] "" XXX
@@ -96,7 +96,10 @@ BO_ 180 SPEED: 8 XXX
BO_ 353 DSU_SPEED: 8 XXX
SG_ FORWARD_SPEED : 15|16@0- (0.00390625,-30) [0|255] "kph" XXX
BO_ 452 ENGINE_RPM: 8 CGW
SG_ RPM : 7|16@0- (0.78125,0) [0|0] "rpm" SCS
BO_ 466 PCM_CRUISE: 8 XXX
SG_ GAS_RELEASED : 4|1@0+ (1,0) [0|1] "" XXX
SG_ CRUISE_ACTIVE : 5|1@0+ (1,0) [0|1] "" XXX
+4 -1
View File
@@ -96,7 +96,10 @@ BO_ 180 SPEED: 8 XXX
BO_ 353 DSU_SPEED: 8 XXX
SG_ FORWARD_SPEED : 15|16@0- (0.00390625,-30) [0|255] "kph" XXX
BO_ 452 ENGINE_RPM: 8 CGW
SG_ RPM : 7|16@0- (0.78125,0) [0|0] "rpm" SCS
BO_ 466 PCM_CRUISE: 8 XXX
SG_ GAS_RELEASED : 4|1@0+ (1,0) [0|1] "" XXX
SG_ CRUISE_ACTIVE : 5|1@0+ (1,0) [0|1] "" XXX
@@ -96,7 +96,10 @@ BO_ 180 SPEED: 8 XXX
BO_ 353 DSU_SPEED: 8 XXX
SG_ FORWARD_SPEED : 15|16@0- (0.00390625,-30) [0|255] "kph" XXX
BO_ 452 ENGINE_RPM: 8 CGW
SG_ RPM : 7|16@0- (0.78125,0) [0|0] "rpm" SCS
BO_ 466 PCM_CRUISE: 8 XXX
SG_ GAS_RELEASED : 4|1@0+ (1,0) [0|1] "" XXX
SG_ CRUISE_ACTIVE : 5|1@0+ (1,0) [0|1] "" XXX
@@ -96,7 +96,10 @@ BO_ 180 SPEED: 8 XXX
BO_ 353 DSU_SPEED: 8 XXX
SG_ FORWARD_SPEED : 15|16@0- (0.00390625,-30) [0|255] "kph" XXX
BO_ 452 ENGINE_RPM: 8 CGW
SG_ RPM : 7|16@0- (0.78125,0) [0|0] "rpm" SCS
BO_ 466 PCM_CRUISE: 8 XXX
SG_ GAS_RELEASED : 4|1@0+ (1,0) [0|1] "" XXX
SG_ CRUISE_ACTIVE : 5|1@0+ (1,0) [0|1] "" XXX
+4 -1
View File
@@ -113,7 +113,10 @@ BO_ 180 SPEED: 8 XXX
BO_ 353 DSU_SPEED: 8 XXX
SG_ FORWARD_SPEED : 15|16@0- (0.00390625,-30) [0|255] "kph" XXX
BO_ 452 ENGINE_RPM: 8 CGW
SG_ RPM : 7|16@0- (0.78125,0) [0|0] "rpm" SCS
BO_ 466 PCM_CRUISE: 8 XXX
SG_ GAS_RELEASED : 4|1@0+ (1,0) [0|1] "" XXX
SG_ CRUISE_ACTIVE : 5|1@0+ (1,0) [0|1] "" XXX
+4 -1
View File
@@ -113,7 +113,10 @@ BO_ 180 SPEED: 8 XXX
BO_ 353 DSU_SPEED: 8 XXX
SG_ FORWARD_SPEED : 15|16@0- (0.00390625,-30) [0|255] "kph" XXX
BO_ 452 ENGINE_RPM: 8 CGW
SG_ RPM : 7|16@0- (0.78125,0) [0|0] "rpm" SCS
BO_ 466 PCM_CRUISE: 8 XXX
SG_ GAS_RELEASED : 4|1@0+ (1,0) [0|1] "" XXX
SG_ CRUISE_ACTIVE : 5|1@0+ (1,0) [0|1] "" XXX
+4 -1
View File
@@ -96,7 +96,10 @@ BO_ 180 SPEED: 8 XXX
BO_ 353 DSU_SPEED: 8 XXX
SG_ FORWARD_SPEED : 15|16@0- (0.00390625,-30) [0|255] "kph" XXX
BO_ 452 ENGINE_RPM: 8 CGW
SG_ RPM : 7|16@0- (0.78125,0) [0|0] "rpm" SCS
BO_ 466 PCM_CRUISE: 8 XXX
SG_ GAS_RELEASED : 4|1@0+ (1,0) [0|1] "" XXX
SG_ CRUISE_ACTIVE : 5|1@0+ (1,0) [0|1] "" XXX
+4 -1
View File
@@ -96,7 +96,10 @@ BO_ 180 SPEED: 8 XXX
BO_ 353 DSU_SPEED: 8 XXX
SG_ FORWARD_SPEED : 15|16@0- (0.00390625,-30) [0|255] "kph" XXX
BO_ 452 ENGINE_RPM: 8 CGW
SG_ RPM : 7|16@0- (0.78125,0) [0|0] "rpm" SCS
BO_ 466 PCM_CRUISE: 8 XXX
SG_ GAS_RELEASED : 4|1@0+ (1,0) [0|1] "" XXX
SG_ CRUISE_ACTIVE : 5|1@0+ (1,0) [0|1] "" XXX
@@ -96,7 +96,10 @@ BO_ 180 SPEED: 8 XXX
BO_ 353 DSU_SPEED: 8 XXX
SG_ FORWARD_SPEED : 15|16@0- (0.00390625,-30) [0|255] "kph" XXX
BO_ 452 ENGINE_RPM: 8 CGW
SG_ RPM : 7|16@0- (0.78125,0) [0|0] "rpm" SCS
BO_ 466 PCM_CRUISE: 8 XXX
SG_ GAS_RELEASED : 4|1@0+ (1,0) [0|1] "" XXX
SG_ CRUISE_ACTIVE : 5|1@0+ (1,0) [0|1] "" XXX
@@ -96,7 +96,10 @@ BO_ 180 SPEED: 8 XXX
BO_ 353 DSU_SPEED: 8 XXX
SG_ FORWARD_SPEED : 15|16@0- (0.00390625,-30) [0|255] "kph" XXX
BO_ 452 ENGINE_RPM: 8 CGW
SG_ RPM : 7|16@0- (0.78125,0) [0|0] "rpm" SCS
BO_ 466 PCM_CRUISE: 8 XXX
SG_ GAS_RELEASED : 4|1@0+ (1,0) [0|1] "" XXX
SG_ CRUISE_ACTIVE : 5|1@0+ (1,0) [0|1] "" XXX
+20 -3
View File
@@ -1254,9 +1254,26 @@ BO_ 695 RCTA_01: 8 XXX
SG_ RCTA_01_BZ : 8|4@1+ (1,0) [0|15] "" XXX
SG_ RCTA_01_CRC : 0|8@1+ (1,0) [0|255] "" XXX
BO_ 783 SWA_01: 8 XXX
SG_ SWA_01_BZ : 8|4@1+ (1,0) [0|15] "" XXX
SG_ SWA_01_CRC : 0|8@1+ (1,0) [0|255] "" XXX
BO_ 783 SWA_01: 8 Gateway_MQB
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" Vector__XXX
SG_ COUNTER : 8|4@1+ (1,0) [0|15] "" Vector__XXX
SG_ SWA_Anzeigen : 12|4@1+ (1,0) [0|15] "" Kombi_D4
SG_ SWA_Blindheit_erkannt : 16|1@1+ (1,0) [0|1] "" Vector__XXX
SG_ SWA_rel_Nichtverf : 17|1@1+ (1,0) [0|1] "" Vector__XXX
SG_ SWA_rel_Fehler : 18|1@1+ (1,0) [0|1] "" Vector__XXX
SG_ SWA_Sta_aktiv : 19|1@1+ (1,0) [0|1] "" Vector__XXX
SG_ SWA_Sta_passiv : 20|1@1+ (1,0) [0|1] "" Vector__XXX
SG_ SWA_Standziele_li : 24|1@1+ (1,0) [0|1] "" Vector__XXX
SG_ SWA_Kolonne_li : 25|1@1+ (1,0) [0|1] "" Vector__XXX
SG_ SWA_Infostufe_SWA_li : 26|1@1+ (1,0) [0|1] "" Vector__XXX
SG_ SWA_Warnung_SWA_li : 27|1@1+ (1,0) [0|1] "" Vector__XXX
SG_ SWA_Kolonne_mi : 33|1@1+ (1,0) [0|1] "" Vector__XXX
SG_ SWA_Standziele_re : 40|1@1+ (1,0) [0|1] "" Vector__XXX
SG_ SWA_Kolonne_re : 41|1@1+ (1,0) [0|1] "" Vector__XXX
SG_ SWA_Infostufe_SWA_re : 42|1@1+ (1,0) [0|1] "" Vector__XXX
SG_ SWA_Warnung_SWA_re : 43|1@1+ (1,0) [0|1] "" Vector__XXX
SG_ SWA_Gischtzaehler : 48|7@1+ (1,0) [0|100] "Unit_PerCent" Vector__XXX
SG_ SWA_KD_Fehler : 59|1@1+ (1,0) [0|1] "" Vector__XXX
BO_ 804 ACC_04: 8 XXX
SG_ ACC_04_CRC : 0|8@1+ (1,0) [0|255] "" XXX
+1 -1
View File
@@ -11,7 +11,7 @@ jobs:
- run:
name: Run safety test
command: |
docker run panda_safety /bin/bash -c "cd /panda/tests/safety; PYTHONPATH=/ ./test.sh"
docker run panda_safety /bin/bash -c "cd /openpilot/panda/tests/safety; PYTHONPATH=/openpilot ./test.sh"
misra-c2012:
machine:
+1 -1
View File
@@ -1 +1 @@
v1.7.3
v1.7.5
+7 -3
View File
@@ -23,9 +23,13 @@ void black_enable_can_transciever(uint8_t transciever, bool enabled) {
}
void black_enable_can_transcievers(bool enabled) {
uint8_t t1 = enabled ? 1U : 2U; // leave transciever 1 enabled to detect CAN ignition
for(uint8_t i=t1; i<=4U; i++) {
black_enable_can_transciever(i, enabled);
for(uint8_t i=1U; i<=4U; i++){
// Leave main CAN always on for CAN-based ignition detection
if((car_harness_status == HARNESS_STATUS_FLIPPED) ? (i == 3U) : (i == 1U)){
black_enable_can_transciever(i, true);
} else {
black_enable_can_transciever(i, enabled);
}
}
}
+6 -1
View File
@@ -26,7 +26,12 @@ void uno_enable_can_transciever(uint8_t transciever, bool enabled) {
void uno_enable_can_transcievers(bool enabled) {
for(uint8_t i=1U; i<=4U; i++){
uno_enable_can_transciever(i, enabled);
// Leave main CAN always on for CAN-based ignition detection
if((car_harness_status == HARNESS_STATUS_FLIPPED) ? (i == 3U) : (i == 1U)){
uno_enable_can_transciever(i, true);
} else {
uno_enable_can_transciever(i, enabled);
}
}
}
+1 -1
View File
@@ -42,7 +42,7 @@ bin: obj/$(PROJ_NAME).bin
# this flashes everything
recover: obj/bootstub.$(PROJ_NAME).bin obj/$(PROJ_NAME).bin
-PYTHONPATH=../ python3 -c "from python import Panda; Panda().reset(enter_bootloader=True)"
-PYTHONPATH=../ python3 -c "from python import Panda; Panda().reset(enter_bootstub=True); Panda().reset(enter_bootloader=True)"
sleep 1.0
$(DFU_UTIL) -d 0483:df11 -a 0 -s 0x08004000 -D obj/$(PROJ_NAME).bin
$(DFU_UTIL) -d 0483:df11 -a 0 -s 0x08000000:leave -D obj/bootstub.$(PROJ_NAME).bin
+46 -21
View File
@@ -26,8 +26,9 @@ extern uint32_t can_speed[4];
void can_set_forwarding(int from, int to);
void can_init(uint8_t can_number);
bool can_init(uint8_t can_number);
void can_init_all(void);
bool can_tx_check_min_slots_free(uint32_t min);
void can_send(CAN_FIFOMailBox_TypeDef *to_push, uint8_t bus_number, bool skip_tx_hook);
bool can_pop(can_ring *q, CAN_FIFOMailBox_TypeDef *elem);
@@ -107,6 +108,20 @@ bool can_push(can_ring *q, CAN_FIFOMailBox_TypeDef *elem) {
return ret;
}
uint32_t can_slots_empty(can_ring *q) {
uint32_t ret = 0;
ENTER_CRITICAL();
if (q->w_ptr >= q->r_ptr) {
ret = q->fifo_size - 1U - q->w_ptr + q->r_ptr;
} else {
ret = q->r_ptr - q->w_ptr - 1U;
}
EXIT_CRITICAL();
return ret;
}
void can_clear(can_ring *q) {
ENTER_CRITICAL();
q->w_ptr = 0;
@@ -133,27 +148,27 @@ uint32_t can_speed[] = {5000, 5000, 5000, 333};
#define CANIF_FROM_CAN_NUM(num) (cans[num])
#define CAN_NUM_FROM_CANIF(CAN) ((CAN)==CAN1 ? 0 : ((CAN) == CAN2 ? 1 : 2))
#define CAN_NAME_FROM_CANIF(CAN) ((CAN)==CAN1 ? "CAN1" : ((CAN) == CAN2 ? "CAN2" : "CAN3"))
#define BUS_NUM_FROM_CAN_NUM(num) (bus_lookup[num])
#define CAN_NUM_FROM_BUS_NUM(num) (can_num_lookup[num])
void process_can(uint8_t can_number);
void can_set_speed(uint8_t can_number) {
bool can_set_speed(uint8_t can_number) {
bool ret = true;
CAN_TypeDef *CAN = CANIF_FROM_CAN_NUM(can_number);
uint8_t bus_number = BUS_NUM_FROM_CAN_NUM(can_number);
if (!llcan_set_speed(CAN, can_speed[bus_number], can_loopback, (unsigned int)(can_silent) & (1U << can_number))) {
puts("CAN init FAILED!!!!!\n");
puth(can_number); puts(" ");
puth(BUS_NUM_FROM_CAN_NUM(can_number)); puts("\n");
}
ret &= llcan_set_speed(CAN, can_speed[bus_number], can_loopback, (unsigned int)(can_silent) & (1U << can_number));
return ret;
}
void can_init_all(void) {
bool ret = true;
for (uint8_t i=0U; i < CAN_MAX; i++) {
can_init(i);
can_clear(can_queues[i]);
ret &= can_init(i);
}
UNUSED(ret);
}
void can_flip_buses(uint8_t bus1, uint8_t bus2){
@@ -179,7 +194,8 @@ void can_set_gmlan(uint8_t bus) {
bus_lookup[prev_bus] = prev_bus;
can_num_lookup[prev_bus] = prev_bus;
can_num_lookup[3] = -1;
can_init(prev_bus);
bool ret = can_init(prev_bus);
UNUSED(ret);
break;
default:
// GMLAN was not set on either BUS 1 or 2
@@ -198,7 +214,8 @@ void can_set_gmlan(uint8_t bus) {
bus_lookup[bus] = 3;
can_num_lookup[bus] = -1;
can_num_lookup[3] = bus;
can_init(bus);
bool ret = can_init(bus);
UNUSED(ret);
break;
case 0xFF: //-1 unsigned
break;
@@ -317,6 +334,10 @@ void process_can(uint8_t can_number) {
CAN->sTxMailBox[0].TDHR = to_send.RDHR;
CAN->sTxMailBox[0].TDTR = to_send.RDTR;
CAN->sTxMailBox[0].TIR = to_send.RIR;
if (can_tx_check_min_slots_free(MAX_CAN_MSGS_PER_BULK_TRANSFER)) {
usb_outep3_resume_if_paused();
}
}
}
@@ -342,11 +363,6 @@ void ignition_can_hook(CAN_FIFOMailBox_TypeDef *to_push) {
// GTW_status
ignition_can = (GET_BYTE(to_push, 0) & 0x1) != 0;
}
// Cadillac exception
if ((addr == 0x160) && (len == 5)) {
// this message isn't all zeros when ignition is on
ignition_can = GET_BYTES_04(to_push) != 0;
}
}
}
@@ -405,6 +421,14 @@ void CAN3_TX_IRQ_Handler(void) { process_can(2); }
void CAN3_RX0_IRQ_Handler(void) { can_rx(2); }
void CAN3_SCE_IRQ_Handler(void) { can_sce(CAN3); }
bool can_tx_check_min_slots_free(uint32_t min) {
return
(can_slots_empty(&can_tx1_q) >= min) &&
(can_slots_empty(&can_tx2_q) >= min) &&
(can_slots_empty(&can_tx3_q) >= min) &&
(can_slots_empty(&can_txgmlan_q) >= min);
}
void can_send(CAN_FIFOMailBox_TypeDef *to_push, uint8_t bus_number, bool skip_tx_hook) {
if (skip_tx_hook || safety_tx_hook(to_push) != 0) {
if (bus_number < BUS_MAX) {
@@ -425,7 +449,9 @@ void can_set_forwarding(int from, int to) {
can_forwarding[from] = to;
}
void can_init(uint8_t can_number) {
bool can_init(uint8_t can_number) {
bool ret = false;
REGISTER_INTERRUPT(CAN1_TX_IRQn, CAN1_TX_IRQ_Handler, CAN_INTERRUPT_RATE, FAULT_INTERRUPT_RATE_CAN_1)
REGISTER_INTERRUPT(CAN1_RX0_IRQn, CAN1_RX0_IRQ_Handler, CAN_INTERRUPT_RATE, FAULT_INTERRUPT_RATE_CAN_1)
REGISTER_INTERRUPT(CAN1_SCE_IRQn, CAN1_SCE_IRQ_Handler, CAN_INTERRUPT_RATE, FAULT_INTERRUPT_RATE_CAN_1)
@@ -438,12 +464,11 @@ void can_init(uint8_t can_number) {
if (can_number != 0xffU) {
CAN_TypeDef *CAN = CANIF_FROM_CAN_NUM(can_number);
can_set_speed(can_number);
llcan_init(CAN);
ret &= can_set_speed(can_number);
ret &= llcan_init(CAN);
// in case there are queued up messages
process_can(can_number);
}
return ret;
}
+92 -53
View File
@@ -11,82 +11,121 @@
#define GET_BUS(msg) (((msg)->RDTR >> 4) & 0xFF)
#define GET_LEN(msg) ((msg)->RDTR & 0xF)
#define GET_ADDR(msg) ((((msg)->RIR & 4) != 0) ? ((msg)->RIR >> 3) : ((msg)->RIR >> 21))
#define GET_BYTE(msg, b) (((int)(b) > 3) ? (((msg)->RDHR >> (8U * ((unsigned int)(b) % 4U))) & 0XFFU) : (((msg)->RDLR >> (8U * (unsigned int)(b))) & 0xFFU))
#define GET_BYTE(msg, b) (((int)(b) > 3) ? (((msg)->RDHR >> (8U * ((unsigned int)(b) % 4U))) & 0xFFU) : (((msg)->RDLR >> (8U * (unsigned int)(b))) & 0xFFU))
#define GET_BYTES_04(msg) ((msg)->RDLR)
#define GET_BYTES_48(msg) ((msg)->RDHR)
#define CAN_INIT_TIMEOUT_MS 500U
#define CAN_NAME_FROM_CANIF(CAN_DEV) (((CAN_DEV)==CAN1) ? "CAN1" : (((CAN_DEV) == CAN2) ? "CAN2" : "CAN3"))
void puts(const char *a);
bool llcan_set_speed(CAN_TypeDef *CAN_obj, uint32_t speed, bool loopback, bool silent) {
bool ret = true;
// initialization mode
register_set(&(CAN_obj->MCR), CAN_MCR_TTCM | CAN_MCR_INRQ, 0x180FFU);
while((CAN_obj->MSR & CAN_MSR_INAK) != CAN_MSR_INAK);
uint32_t timeout_counter = 0U;
while((CAN_obj->MSR & CAN_MSR_INAK) != CAN_MSR_INAK){
// Delay for about 1ms
delay(10000);
timeout_counter++;
// set time quanta from defines
register_set(&(CAN_obj->BTR), ((CAN_BTR_TS1_0 * (CAN_SEQ1-1)) |
(CAN_BTR_TS2_0 * (CAN_SEQ2-1)) |
(can_speed_to_prescaler(speed) - 1U)), 0xC37F03FFU);
// silent loopback mode for debugging
if (loopback) {
register_set_bits(&(CAN_obj->BTR), CAN_BTR_SILM | CAN_BTR_LBKM);
}
if (silent) {
register_set_bits(&(CAN_obj->BTR), CAN_BTR_SILM);
if(timeout_counter >= CAN_INIT_TIMEOUT_MS){
puts(CAN_NAME_FROM_CANIF(CAN_obj)); puts(" set_speed timed out (1)!\n");
ret = false;
break;
}
}
// reset
register_set(&(CAN_obj->MCR), CAN_MCR_TTCM | CAN_MCR_ABOM, 0x180FFU);
if(ret){
// set time quanta from defines
register_set(&(CAN_obj->BTR), ((CAN_BTR_TS1_0 * (CAN_SEQ1-1)) |
(CAN_BTR_TS2_0 * (CAN_SEQ2-1)) |
(can_speed_to_prescaler(speed) - 1U)), 0xC37F03FFU);
#define CAN_TIMEOUT 1000000
int tmp = 0;
bool ret = false;
while(((CAN_obj->MSR & CAN_MSR_INAK) == CAN_MSR_INAK) && (tmp < CAN_TIMEOUT)) tmp++;
if (tmp < CAN_TIMEOUT) {
ret = true;
// silent loopback mode for debugging
if (loopback) {
register_set_bits(&(CAN_obj->BTR), CAN_BTR_SILM | CAN_BTR_LBKM);
}
if (silent) {
register_set_bits(&(CAN_obj->BTR), CAN_BTR_SILM);
}
// reset
register_set(&(CAN_obj->MCR), CAN_MCR_TTCM | CAN_MCR_ABOM, 0x180FFU);
timeout_counter = 0U;
while(((CAN_obj->MSR & CAN_MSR_INAK) == CAN_MSR_INAK)) {
// Delay for about 1ms
delay(10000);
timeout_counter++;
if(timeout_counter >= CAN_INIT_TIMEOUT_MS){
puts(CAN_NAME_FROM_CANIF(CAN_obj)); puts(" set_speed timed out (2)!\n");
ret = false;
break;
}
}
}
return ret;
}
void llcan_init(CAN_TypeDef *CAN_obj) {
bool llcan_init(CAN_TypeDef *CAN_obj) {
bool ret = true;
// Enter init mode
register_set_bits(&(CAN_obj->FMR), CAN_FMR_FINIT);
// Wait for INAK bit to be set
while(((CAN_obj->MSR & CAN_MSR_INAK) == CAN_MSR_INAK)) {}
uint32_t timeout_counter = 0U;
while(((CAN_obj->MSR & CAN_MSR_INAK) == CAN_MSR_INAK)) {
// Delay for about 1ms
delay(10000);
timeout_counter++;
// no mask
// For some weird reason some of these registers do not want to set properly on CAN2 and CAN3. Probably something to do with the single/dual mode and their different filters.
CAN_obj->sFilterRegister[0].FR1 = 0U;
CAN_obj->sFilterRegister[0].FR2 = 0U;
CAN_obj->sFilterRegister[14].FR1 = 0U;
CAN_obj->sFilterRegister[14].FR2 = 0U;
CAN_obj->FA1R |= 1U | (1U << 14);
// Exit init mode, do not wait
register_clear_bits(&(CAN_obj->FMR), CAN_FMR_FINIT);
// enable certain CAN interrupts
register_set_bits(&(CAN_obj->IER), CAN_IER_TMEIE | CAN_IER_FMPIE0 | CAN_IER_WKUIE);
if (CAN_obj == CAN1) {
NVIC_EnableIRQ(CAN1_TX_IRQn);
NVIC_EnableIRQ(CAN1_RX0_IRQn);
NVIC_EnableIRQ(CAN1_SCE_IRQn);
} else if (CAN_obj == CAN2) {
NVIC_EnableIRQ(CAN2_TX_IRQn);
NVIC_EnableIRQ(CAN2_RX0_IRQn);
NVIC_EnableIRQ(CAN2_SCE_IRQn);
#ifdef CAN3
} else if (CAN_obj == CAN3) {
NVIC_EnableIRQ(CAN3_TX_IRQn);
NVIC_EnableIRQ(CAN3_RX0_IRQn);
NVIC_EnableIRQ(CAN3_SCE_IRQn);
#endif
} else {
puts("Invalid CAN: initialization failed\n");
if(timeout_counter >= CAN_INIT_TIMEOUT_MS){
puts(CAN_NAME_FROM_CANIF(CAN_obj)); puts(" initialization timed out!\n");
ret = false;
break;
}
}
if(ret){
// no mask
// For some weird reason some of these registers do not want to set properly on CAN2 and CAN3. Probably something to do with the single/dual mode and their different filters.
CAN_obj->sFilterRegister[0].FR1 = 0U;
CAN_obj->sFilterRegister[0].FR2 = 0U;
CAN_obj->sFilterRegister[14].FR1 = 0U;
CAN_obj->sFilterRegister[14].FR2 = 0U;
CAN_obj->FA1R |= 1U | (1U << 14);
// Exit init mode, do not wait
register_clear_bits(&(CAN_obj->FMR), CAN_FMR_FINIT);
// enable certain CAN interrupts
register_set_bits(&(CAN_obj->IER), CAN_IER_TMEIE | CAN_IER_FMPIE0 | CAN_IER_WKUIE);
if (CAN_obj == CAN1) {
NVIC_EnableIRQ(CAN1_TX_IRQn);
NVIC_EnableIRQ(CAN1_RX0_IRQn);
NVIC_EnableIRQ(CAN1_SCE_IRQn);
} else if (CAN_obj == CAN2) {
NVIC_EnableIRQ(CAN2_TX_IRQn);
NVIC_EnableIRQ(CAN2_RX0_IRQn);
NVIC_EnableIRQ(CAN2_SCE_IRQn);
#ifdef CAN3
} else if (CAN_obj == CAN3) {
NVIC_EnableIRQ(CAN3_TX_IRQn);
NVIC_EnableIRQ(CAN3_RX0_IRQn);
NVIC_EnableIRQ(CAN3_SCE_IRQn);
#endif
} else {
puts("Invalid CAN: initialization failed\n");
}
}
return ret;
}
void llcan_clear_send(CAN_TypeDef *CAN_obj) {
+21 -4
View File
@@ -23,12 +23,16 @@ typedef union _USB_Setup {
}
USB_Setup_TypeDef;
#define MAX_CAN_MSGS_PER_BULK_TRANSFER 4U
void usb_init(void);
int usb_cb_control_msg(USB_Setup_TypeDef *setup, uint8_t *resp, bool hardwired);
int usb_cb_ep1_in(void *usbdata, int len, bool hardwired);
void usb_cb_ep2_out(void *usbdata, int len, bool hardwired);
void usb_cb_ep3_out(void *usbdata, int len, bool hardwired);
void usb_cb_ep3_out_complete(void);
void usb_cb_enumeration_complete(void);
void usb_outep3_resume_if_paused(void);
// **** supporting defines ****
@@ -380,6 +384,7 @@ USB_Setup_TypeDef setup;
uint8_t usbdata[0x100];
uint8_t* ep0_txdata = NULL;
uint16_t ep0_txlen = 0;
bool outep3_processing = false;
// Store the current interface alt setting.
int current_int0_alt_setting = 0;
@@ -744,6 +749,7 @@ void usb_irqhandler(void) {
}
if (endpoint == 3) {
outep3_processing = true;
usb_cb_ep3_out(usbdata, len, 1);
}
} else if (status == STS_SETUP_UPDT) {
@@ -816,15 +822,17 @@ void usb_irqhandler(void) {
#ifdef DEBUG_USB
puts(" OUT3 PACKET XFRC\n");
#endif
USBx_OUTEP(3)->DOEPTSIZ = (1U << 19) | 0x40U;
USBx_OUTEP(3)->DOEPCTL |= USB_OTG_DOEPCTL_EPENA | USB_OTG_DOEPCTL_CNAK;
// NAK cleared by process_can (if tx buffers have room)
outep3_processing = false;
usb_cb_ep3_out_complete();
} else if ((USBx_OUTEP(3)->DOEPINT & 0x2000) != 0) {
#ifdef DEBUG_USB
puts(" OUT3 PACKET WTF\n");
#endif
// if NAK was set trigger this, unknown interrupt
USBx_OUTEP(3)->DOEPTSIZ = (1U << 19) | 0x40U;
USBx_OUTEP(3)->DOEPCTL |= USB_OTG_DOEPCTL_CNAK;
// TODO: why was this here? fires when TX buffers when we can't clear NAK
// USBx_OUTEP(3)->DOEPTSIZ = (1U << 19) | 0x40U;
// USBx_OUTEP(3)->DOEPCTL |= USB_OTG_DOEPCTL_CNAK;
} else if ((USBx_OUTEP(3)->DOEPINT) != 0) {
puts("OUTEP3 error ");
puth(USBx_OUTEP(3)->DOEPINT);
@@ -932,6 +940,15 @@ void usb_irqhandler(void) {
//USBx->GINTMSK = 0xFFFFFFFF & ~(USB_OTG_GINTMSK_NPTXFEM | USB_OTG_GINTMSK_PTXFEM | USB_OTG_GINTSTS_SOF | USB_OTG_GINTSTS_EOPF);
}
void usb_outep3_resume_if_paused() {
ENTER_CRITICAL();
if (!outep3_processing && (USBx_OUTEP(3)->DOEPCTL & USB_OTG_DOEPCTL_NAKSTS) != 0) {
USBx_OUTEP(3)->DOEPTSIZ = (1U << 19) | 0x40U;
USBx_OUTEP(3)->DOEPCTL |= USB_OTG_DOEPCTL_EPENA | USB_OTG_DOEPCTL_CNAK;
}
EXIT_CRITICAL();
}
void OTG_FS_IRQ_Handler(void) {
NVIC_DisableIRQ(OTG_FS_IRQn);
//__disable_irq();
+2
View File
@@ -1,5 +1,7 @@
#!/bin/bash
# Need formula for gcc
sudo easy_install pip
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew tap ArmMbed/homebrew-formulae
brew install python dfu-util arm-none-eabi-gcc
pip install --user libusb1 pycrypto requests
+17 -1
View File
@@ -235,6 +235,12 @@ void usb_cb_ep3_out(void *usbdata, int len, bool hardwired) {
}
}
void usb_cb_ep3_out_complete() {
if (can_tx_check_min_slots_free(MAX_CAN_MSGS_PER_BULK_TRANSFER)) {
usb_outep3_resume_if_paused();
}
}
void usb_cb_enumeration_complete() {
puts("USB enumeration complete\n");
is_enumerated = 1;
@@ -466,7 +472,17 @@ int usb_cb_control_msg(USB_Setup_TypeDef *setup, uint8_t *resp, bool hardwired)
case 0xde:
if (setup->b.wValue.w < BUS_MAX) {
can_speed[setup->b.wValue.w] = setup->b.wIndex.w;
can_init(CAN_NUM_FROM_BUS_NUM(setup->b.wValue.w));
bool ret = can_init(CAN_NUM_FROM_BUS_NUM(setup->b.wValue.w));
UNUSED(ret);
}
break;
// **** 0xdf: set unsafe mode
case 0xdf:
// you can only set this if you are in a non car safety mode
if ((current_safety_mode == SAFETY_SILENT) ||
(current_safety_mode == SAFETY_NOOUTPUT) ||
(current_safety_mode == SAFETY_ELM327)) {
unsafe_mode = setup->b.wValue.w;
}
break;
// **** 0xe0: uart read
+3 -1
View File
@@ -76,6 +76,7 @@ void usb_cb_ep3_out(void *usbdata, int len, bool hardwired) {
UNUSED(len);
UNUSED(hardwired);
}
void usb_cb_ep3_out_complete(void) {}
void usb_cb_enumeration_complete(void) {}
int usb_cb_control_msg(USB_Setup_TypeDef *setup, uint8_t *resp, bool hardwired) {
@@ -315,7 +316,8 @@ int main(void) {
puts("Failed to set llcan speed");
}
llcan_init(CAN1);
bool ret = llcan_init(CAN1);
UNUSED(ret);
// 48mhz / 65536 ~= 732
timer_init(TIM3, 15);
+11 -3
View File
@@ -8,7 +8,6 @@
#include "safety/safety_gm_ascm.h"
#include "safety/safety_gm.h"
#include "safety/safety_ford.h"
#include "safety/safety_cadillac.h"
#include "safety/safety_hyundai.h"
#include "safety/safety_chrysler.h"
#include "safety/safety_subaru.h"
@@ -25,7 +24,6 @@
#define SAFETY_GM 4U
#define SAFETY_HONDA_BOSCH_GIRAFFE 5U
#define SAFETY_FORD 6U
#define SAFETY_CADILLAC 7U
#define SAFETY_HYUNDAI 8U
#define SAFETY_CHRYSLER 9U
#define SAFETY_TESLA 10U
@@ -37,6 +35,7 @@
#define SAFETY_GM_ASCM 18U
#define SAFETY_NOOUTPUT 19U
#define SAFETY_HONDA_BOSCH_HARNESS 20U
#define SAFETY_VOLKSWAGEN_PQ 21U
#define SAFETY_SUBARU_LEGACY 22U
uint16_t current_safety_mode = SAFETY_SILENT;
@@ -183,6 +182,15 @@ bool addr_safety_check(CAN_FIFOMailBox_TypeDef *to_push,
return is_msg_valid(rx_checks, index);
}
void relay_malfunction_set(void) {
relay_malfunction = true;
fault_occurred(FAULT_RELAY_MALFUNCTION);
}
void relay_malfunction_reset(void) {
relay_malfunction = false;
fault_recovered(FAULT_RELAY_MALFUNCTION);
}
typedef struct {
uint16_t id;
@@ -203,9 +211,9 @@ const safety_hook_config safety_hook_registry[] = {
{SAFETY_SUBARU_LEGACY, &subaru_legacy_hooks},
{SAFETY_MAZDA, &mazda_hooks},
{SAFETY_VOLKSWAGEN_MQB, &volkswagen_mqb_hooks},
{SAFETY_VOLKSWAGEN_PQ, &volkswagen_pq_hooks},
{SAFETY_NOOUTPUT, &nooutput_hooks},
#ifdef ALLOW_DEBUG
{SAFETY_CADILLAC, &cadillac_hooks},
{SAFETY_TESLA, &tesla_hooks},
{SAFETY_NISSAN, &nissan_hooks},
{SAFETY_ALLOUTPUT, &alloutput_hooks},
-125
View File
@@ -1,125 +0,0 @@
#define CADILLAC_TORQUE_MSG_N 4 // 4 torque messages: 0x151, 0x152, 0x153, 0x154
const AddrBus CADILLAC_TX_MSGS[] = {{0x151, 2}, {0x152, 0}, {0x153, 2}, {0x154, 0}};
const int CADILLAC_MAX_STEER = 150; // 1s
// real time torque limit to prevent controls spamming
// the real time limit is 1500/sec
const int CADILLAC_MAX_RT_DELTA = 75; // max delta torque allowed for real time checks
const uint32_t CADILLAC_RT_INTERVAL = 250000; // 250ms between real time checks
const int CADILLAC_MAX_RATE_UP = 2;
const int CADILLAC_MAX_RATE_DOWN = 5;
const int CADILLAC_DRIVER_TORQUE_ALLOWANCE = 50;
const int CADILLAC_DRIVER_TORQUE_FACTOR = 4;
int cadillac_cruise_engaged_last = 0;
int cadillac_rt_torque_last = 0;
const int cadillac_torque_msgs_n = 4;
int cadillac_desired_torque_last[CADILLAC_TORQUE_MSG_N] = {0};
uint32_t cadillac_ts_last = 0;
bool cadillac_supercruise_on = 0;
struct sample_t cadillac_torque_driver; // last few driver torques measured
int cadillac_get_torque_idx(int addr, int array_size) {
return MIN(MAX(addr - 0x151, 0), array_size); // 0x151 is id 0, 0x152 is id 1 and so on...
}
static int cadillac_rx_hook(CAN_FIFOMailBox_TypeDef *to_push) {
int bus = GET_BUS(to_push);
int addr = GET_ADDR(to_push);
if (addr == 356) {
int torque_driver_new = ((GET_BYTE(to_push, 0) & 0x7U) << 8) | (GET_BYTE(to_push, 1));
torque_driver_new = to_signed(torque_driver_new, 11);
// update array of samples
update_sample(&cadillac_torque_driver, torque_driver_new);
}
// enter controls on rising edge of ACC, exit controls on ACC off
if ((addr == 0x370) && (bus == 0)) {
int cruise_engaged = GET_BYTE(to_push, 2) & 0x80; // bit 23
if (cruise_engaged && !cadillac_cruise_engaged_last) {
controls_allowed = 1;
}
if (!cruise_engaged) {
controls_allowed = 0;
}
cadillac_cruise_engaged_last = cruise_engaged;
}
// know supercruise mode and block openpilot msgs if on
if ((addr == 0x152) || (addr == 0x154)) {
cadillac_supercruise_on = (GET_BYTE(to_push, 4) & 0x10) != 0;
}
return 1;
}
static int cadillac_tx_hook(CAN_FIFOMailBox_TypeDef *to_send) {
int tx = 1;
int addr = GET_ADDR(to_send);
int bus = GET_BUS(to_send);
if (!msg_allowed(addr, bus, CADILLAC_TX_MSGS, sizeof(CADILLAC_TX_MSGS) / sizeof(CADILLAC_TX_MSGS[0]))) {
tx = 0;
}
// steer cmd checks
if ((addr == 0x151) || (addr == 0x152) || (addr == 0x153) || (addr == 0x154)) {
int desired_torque = ((GET_BYTE(to_send, 0) & 0x3f) << 8) | GET_BYTE(to_send, 1);
int violation = 0;
uint32_t ts = TIM2->CNT;
int idx = cadillac_get_torque_idx(addr, CADILLAC_TORQUE_MSG_N);
desired_torque = to_signed(desired_torque, 14);
if (controls_allowed) {
// *** global torque limit check ***
violation |= max_limit_check(desired_torque, CADILLAC_MAX_STEER, -CADILLAC_MAX_STEER);
// *** torque rate limit check ***
int desired_torque_last = cadillac_desired_torque_last[idx];
violation |= driver_limit_check(desired_torque, desired_torque_last, &cadillac_torque_driver,
CADILLAC_MAX_STEER, CADILLAC_MAX_RATE_UP, CADILLAC_MAX_RATE_DOWN,
CADILLAC_DRIVER_TORQUE_ALLOWANCE, CADILLAC_DRIVER_TORQUE_FACTOR);
// used next time
cadillac_desired_torque_last[idx] = desired_torque;
// *** torque real time rate limit check ***
violation |= rt_rate_limit_check(desired_torque, cadillac_rt_torque_last, CADILLAC_MAX_RT_DELTA);
// every RT_INTERVAL set the new limits
uint32_t ts_elapsed = get_ts_elapsed(ts, cadillac_ts_last);
if (ts_elapsed > CADILLAC_RT_INTERVAL) {
cadillac_rt_torque_last = desired_torque;
cadillac_ts_last = ts;
}
}
// no torque if controls is not allowed
if (!controls_allowed && (desired_torque != 0)) {
violation = 1;
}
// reset to 0 if either controls is not allowed or there's a violation
if (violation || !controls_allowed) {
cadillac_desired_torque_last[idx] = 0;
cadillac_rt_torque_last = 0;
cadillac_ts_last = ts;
}
if (violation || cadillac_supercruise_on) {
tx = 0;
}
}
return tx;
}
const safety_hooks cadillac_hooks = {
.init = nooutput_init,
.rx = cadillac_rx_hook,
.tx = cadillac_tx_hook,
.tx_lin = nooutput_tx_lin_hook,
.fwd = default_fwd_hook,
};
+20 -22
View File
@@ -18,12 +18,7 @@ AddrCheckStruct chrysler_rx_checks[] = {
};
const int CHRYSLER_RX_CHECK_LEN = sizeof(chrysler_rx_checks) / sizeof(chrysler_rx_checks[0]);
int chrysler_rt_torque_last = 0;
int chrysler_desired_torque_last = 0;
int chrysler_cruise_engaged_last = 0;
int chrysler_speed = 0;
uint32_t chrysler_ts_last = 0;
struct sample_t chrysler_torque_meas; // last few torques measured
static uint8_t chrysler_get_checksum(CAN_FIFOMailBox_TypeDef *to_push) {
int checksum_byte = GET_LEN(to_push) - 1;
@@ -74,6 +69,8 @@ static int chrysler_rx_hook(CAN_FIFOMailBox_TypeDef *to_push) {
chrysler_get_checksum, chrysler_compute_checksum,
chrysler_get_counter);
bool unsafe_allow_gas = unsafe_mode & UNSAFE_DISABLE_DISENGAGE_ON_GAS;
if (valid && (GET_BUS(to_push) == 0)) {
int addr = GET_ADDR(to_push);
@@ -82,19 +79,19 @@ static int chrysler_rx_hook(CAN_FIFOMailBox_TypeDef *to_push) {
int torque_meas_new = ((GET_BYTE(to_push, 4) & 0x7U) << 8) + GET_BYTE(to_push, 5) - 1024U;
// update array of samples
update_sample(&chrysler_torque_meas, torque_meas_new);
update_sample(&torque_meas, torque_meas_new);
}
// enter controls on rising edge of ACC, exit controls on ACC off
if (addr == 500) {
int cruise_engaged = ((GET_BYTE(to_push, 2) & 0x38) >> 3) == 7;
if (cruise_engaged && !chrysler_cruise_engaged_last) {
if (cruise_engaged && !cruise_engaged_prev) {
controls_allowed = 1;
}
if (!cruise_engaged) {
controls_allowed = 0;
}
chrysler_cruise_engaged_last = cruise_engaged;
cruise_engaged_prev = cruise_engaged;
}
// update speed
@@ -102,12 +99,13 @@ static int chrysler_rx_hook(CAN_FIFOMailBox_TypeDef *to_push) {
int speed_l = (GET_BYTE(to_push, 0) << 4) + (GET_BYTE(to_push, 1) >> 4);
int speed_r = (GET_BYTE(to_push, 2) << 4) + (GET_BYTE(to_push, 3) >> 4);
chrysler_speed = (speed_l + speed_r) / 2;
vehicle_moving = chrysler_speed > CHRYSLER_STANDSTILL_THRSLD;
}
// exit controls on rising edge of gas press
if (addr == 308) {
bool gas_pressed = (GET_BYTE(to_push, 5) & 0x7F) != 0;
if (gas_pressed && !gas_pressed_prev && (chrysler_speed > CHRYSLER_GAS_THRSLD)) {
if (!unsafe_allow_gas && gas_pressed && !gas_pressed_prev && (chrysler_speed > CHRYSLER_GAS_THRSLD)) {
controls_allowed = 0;
}
gas_pressed_prev = gas_pressed;
@@ -116,7 +114,7 @@ static int chrysler_rx_hook(CAN_FIFOMailBox_TypeDef *to_push) {
// exit controls on rising edge of brake press
if (addr == 320) {
bool brake_pressed = (GET_BYTE(to_push, 0) & 0x7) == 5;
if (brake_pressed && (!brake_pressed_prev || (chrysler_speed > CHRYSLER_STANDSTILL_THRSLD))) {
if (brake_pressed && (!brake_pressed_prev || vehicle_moving)) {
controls_allowed = 0;
}
brake_pressed_prev = brake_pressed;
@@ -124,7 +122,7 @@ static int chrysler_rx_hook(CAN_FIFOMailBox_TypeDef *to_push) {
// check if stock camera ECU is on bus 0
if ((safety_mode_cnt > RELAY_TRNS_TIMEOUT) && (addr == 0x292)) {
relay_malfunction = true;
relay_malfunction_set();
}
}
return valid;
@@ -156,20 +154,20 @@ static int chrysler_tx_hook(CAN_FIFOMailBox_TypeDef *to_send) {
violation |= max_limit_check(desired_torque, CHRYSLER_MAX_STEER, -CHRYSLER_MAX_STEER);
// *** torque rate limit check ***
violation |= dist_to_meas_check(desired_torque, chrysler_desired_torque_last,
&chrysler_torque_meas, CHRYSLER_MAX_RATE_UP, CHRYSLER_MAX_RATE_DOWN, CHRYSLER_MAX_TORQUE_ERROR);
violation |= dist_to_meas_check(desired_torque, desired_torque_last,
&torque_meas, CHRYSLER_MAX_RATE_UP, CHRYSLER_MAX_RATE_DOWN, CHRYSLER_MAX_TORQUE_ERROR);
// used next time
chrysler_desired_torque_last = desired_torque;
desired_torque_last = desired_torque;
// *** torque real time rate limit check ***
violation |= rt_rate_limit_check(desired_torque, chrysler_rt_torque_last, CHRYSLER_MAX_RT_DELTA);
violation |= rt_rate_limit_check(desired_torque, rt_torque_last, CHRYSLER_MAX_RT_DELTA);
// every RT_INTERVAL set the new limits
uint32_t ts_elapsed = get_ts_elapsed(ts, chrysler_ts_last);
uint32_t ts_elapsed = get_ts_elapsed(ts, ts_last);
if (ts_elapsed > CHRYSLER_RT_INTERVAL) {
chrysler_rt_torque_last = desired_torque;
chrysler_ts_last = ts;
rt_torque_last = desired_torque;
ts_last = ts;
}
}
@@ -180,9 +178,9 @@ static int chrysler_tx_hook(CAN_FIFOMailBox_TypeDef *to_send) {
// reset to 0 if either controls is not allowed or there's a violation
if (violation || !controls_allowed) {
chrysler_desired_torque_last = 0;
chrysler_rt_torque_last = 0;
chrysler_ts_last = ts;
desired_torque_last = 0;
rt_torque_last = 0;
ts_last = ts;
}
if (violation) {
@@ -192,7 +190,7 @@ static int chrysler_tx_hook(CAN_FIFOMailBox_TypeDef *to_send) {
// FORCE CANCEL: only the cancel button press is allowed
if (addr == 571) {
if (GET_BYTE(to_send, 0) != 1) {
if ((GET_BYTE(to_send, 0) != 1) || ((GET_BYTE(to_send, 1) & 1) == 1)) {
tx = 0;
}
}
+2 -2
View File
@@ -8,7 +8,7 @@ int default_rx_hook(CAN_FIFOMailBox_TypeDef *to_push) {
static void nooutput_init(int16_t param) {
UNUSED(param);
controls_allowed = false;
relay_malfunction = false;
relay_malfunction_reset();
}
static int nooutput_tx_hook(CAN_FIFOMailBox_TypeDef *to_send) {
@@ -42,7 +42,7 @@ const safety_hooks nooutput_hooks = {
static void alloutput_init(int16_t param) {
UNUSED(param);
controls_allowed = true;
relay_malfunction = false;
relay_malfunction_reset();
}
static int alloutput_tx_hook(CAN_FIFOMailBox_TypeDef *to_send) {
+11 -7
View File
@@ -7,18 +7,18 @@
// brake rising edge
// brake > 0mph
bool ford_moving = false;
static int ford_rx_hook(CAN_FIFOMailBox_TypeDef *to_push) {
int addr = GET_ADDR(to_push);
int bus = GET_BUS(to_push);
bool unsafe_allow_gas = unsafe_mode & UNSAFE_DISABLE_DISENGAGE_ON_GAS;
if (addr == 0x217) {
// wheel speeds are 14 bits every 16
ford_moving = false;
vehicle_moving = false;
for (int i = 0; i < 8; i += 2) {
ford_moving |= GET_BYTE(to_push, i) | (GET_BYTE(to_push, (int)(i + 1)) & 0xFCU);
vehicle_moving |= GET_BYTE(to_push, i) | (GET_BYTE(to_push, (int)(i + 1)) & 0xFCU);
}
}
@@ -38,7 +38,7 @@ static int ford_rx_hook(CAN_FIFOMailBox_TypeDef *to_push) {
// speed > 0
if (addr == 0x165) {
int brake_pressed = GET_BYTE(to_push, 0) & 0x20;
if (brake_pressed && (!brake_pressed_prev || ford_moving)) {
if (brake_pressed && (!brake_pressed_prev || vehicle_moving)) {
controls_allowed = 0;
}
brake_pressed_prev = brake_pressed;
@@ -47,14 +47,14 @@ static int ford_rx_hook(CAN_FIFOMailBox_TypeDef *to_push) {
// exit controls on rising edge of gas press
if (addr == 0x204) {
bool gas_pressed = ((GET_BYTE(to_push, 0) & 0x03) | GET_BYTE(to_push, 1)) != 0;
if (gas_pressed && !gas_pressed_prev) {
if (!unsafe_allow_gas && gas_pressed && !gas_pressed_prev) {
controls_allowed = 0;
}
gas_pressed_prev = gas_pressed;
}
if ((safety_mode_cnt > RELAY_TRNS_TIMEOUT) && (bus == 0) && (addr == 0x3CA)) {
relay_malfunction = true;
relay_malfunction_set();
}
return 1;
}
@@ -72,7 +72,11 @@ static int ford_tx_hook(CAN_FIFOMailBox_TypeDef *to_send) {
// disallow actuator commands if gas or brake (with vehicle moving) are pressed
// and the the latching controls_allowed flag is True
int pedal_pressed = gas_pressed_prev || (brake_pressed_prev && ford_moving);
int pedal_pressed = brake_pressed_prev && vehicle_moving;
bool unsafe_allow_gas = unsafe_mode & UNSAFE_DISABLE_DISENGAGE_ON_GAS;
if (!unsafe_allow_gas) {
pedal_pressed = pedal_pressed || gas_pressed_prev;
}
bool current_controls_allowed = controls_allowed && !(pedal_pressed);
if (relay_malfunction) {
+21 -21
View File
@@ -33,17 +33,13 @@ AddrCheckStruct gm_rx_checks[] = {
};
const int GM_RX_CHECK_LEN = sizeof(gm_rx_checks) / sizeof(gm_rx_checks[0]);
bool gm_moving = false;
int gm_rt_torque_last = 0;
int gm_desired_torque_last = 0;
uint32_t gm_ts_last = 0;
struct sample_t gm_torque_driver; // last few driver torques measured
static int gm_rx_hook(CAN_FIFOMailBox_TypeDef *to_push) {
bool valid = addr_safety_check(to_push, gm_rx_checks, GM_RX_CHECK_LEN,
NULL, NULL, NULL);
bool unsafe_allow_gas = unsafe_mode & UNSAFE_DISABLE_DISENGAGE_ON_GAS;
if (valid && (GET_BUS(to_push) == 0)) {
int addr = GET_ADDR(to_push);
@@ -51,13 +47,13 @@ static int gm_rx_hook(CAN_FIFOMailBox_TypeDef *to_push) {
int torque_driver_new = ((GET_BYTE(to_push, 6) & 0x7) << 8) | GET_BYTE(to_push, 7);
torque_driver_new = to_signed(torque_driver_new, 11);
// update array of samples
update_sample(&gm_torque_driver, torque_driver_new);
update_sample(&torque_driver, torque_driver_new);
}
// sample speed, really only care if car is moving or not
// rear left wheel speed
if (addr == 842) {
gm_moving = GET_BYTE(to_push, 0) | GET_BYTE(to_push, 1);
vehicle_moving = GET_BYTE(to_push, 0) | GET_BYTE(to_push, 1);
}
// ACC steering wheel buttons
@@ -82,7 +78,7 @@ static int gm_rx_hook(CAN_FIFOMailBox_TypeDef *to_push) {
// Brake pedal's potentiometer returns near-zero reading
// even when pedal is not pressed
bool brake_pressed = GET_BYTE(to_push, 1) >= 10;
if (brake_pressed && (!brake_pressed_prev || gm_moving)) {
if (brake_pressed && (!brake_pressed_prev || vehicle_moving)) {
controls_allowed = 0;
}
brake_pressed_prev = brake_pressed;
@@ -91,7 +87,7 @@ static int gm_rx_hook(CAN_FIFOMailBox_TypeDef *to_push) {
// exit controls on rising edge of gas press
if (addr == 417) {
bool gas_pressed = GET_BYTE(to_push, 6) != 0;
if (gas_pressed && !gas_pressed_prev) {
if (!unsafe_allow_gas && gas_pressed && !gas_pressed_prev) {
controls_allowed = 0;
}
gas_pressed_prev = gas_pressed;
@@ -110,7 +106,7 @@ static int gm_rx_hook(CAN_FIFOMailBox_TypeDef *to_push) {
// 384 = ASCMLKASteeringCmd
// 715 = ASCMGasRegenCmd
if ((safety_mode_cnt > RELAY_TRNS_TIMEOUT) && ((addr == 384) || (addr == 715))) {
relay_malfunction = true;
relay_malfunction_set();
}
}
return valid;
@@ -138,7 +134,11 @@ static int gm_tx_hook(CAN_FIFOMailBox_TypeDef *to_send) {
// disallow actuator commands if gas or brake (with vehicle moving) are pressed
// and the the latching controls_allowed flag is True
int pedal_pressed = gas_pressed_prev || (brake_pressed_prev && gm_moving);
int pedal_pressed = brake_pressed_prev && vehicle_moving;
bool unsafe_allow_gas = unsafe_mode & UNSAFE_DISABLE_DISENGAGE_ON_GAS;
if (!unsafe_allow_gas) {
pedal_pressed = pedal_pressed || gas_pressed_prev;
}
bool current_controls_allowed = controls_allowed && !pedal_pressed;
// BRAKE: safety check
@@ -168,21 +168,21 @@ static int gm_tx_hook(CAN_FIFOMailBox_TypeDef *to_send) {
violation |= max_limit_check(desired_torque, GM_MAX_STEER, -GM_MAX_STEER);
// *** torque rate limit check ***
violation |= driver_limit_check(desired_torque, gm_desired_torque_last, &gm_torque_driver,
violation |= driver_limit_check(desired_torque, desired_torque_last, &torque_driver,
GM_MAX_STEER, GM_MAX_RATE_UP, GM_MAX_RATE_DOWN,
GM_DRIVER_TORQUE_ALLOWANCE, GM_DRIVER_TORQUE_FACTOR);
// used next time
gm_desired_torque_last = desired_torque;
desired_torque_last = desired_torque;
// *** torque real time rate limit check ***
violation |= rt_rate_limit_check(desired_torque, gm_rt_torque_last, GM_MAX_RT_DELTA);
violation |= rt_rate_limit_check(desired_torque, rt_torque_last, GM_MAX_RT_DELTA);
// every RT_INTERVAL set the new limits
uint32_t ts_elapsed = get_ts_elapsed(ts, gm_ts_last);
uint32_t ts_elapsed = get_ts_elapsed(ts, ts_last);
if (ts_elapsed > GM_RT_INTERVAL) {
gm_rt_torque_last = desired_torque;
gm_ts_last = ts;
rt_torque_last = desired_torque;
ts_last = ts;
}
}
@@ -193,9 +193,9 @@ static int gm_tx_hook(CAN_FIFOMailBox_TypeDef *to_send) {
// reset to 0 if either controls is not allowed or there's a violation
if (violation || !current_controls_allowed) {
gm_desired_torque_last = 0;
gm_rt_torque_last = 0;
gm_ts_last = ts;
desired_torque_last = 0;
rt_torque_last = 0;
ts_last = ts;
}
if (violation) {
+51 -27
View File
@@ -7,9 +7,17 @@
// brake rising edge
// brake > 0mph
const AddrBus HONDA_N_TX_MSGS[] = {{0xE4, 0}, {0x194, 0}, {0x1FA, 0}, {0x200, 0}, {0x30C, 0}, {0x33D, 0}};
const AddrBus HONDA_BG_TX_MSGS[] = {{0xE4, 2}, {0x296, 0}, {0x33D, 2}}; // Bosch Giraffe
const AddrBus HONDA_BH_TX_MSGS[] = {{0xE4, 0}, {0x296, 1}, {0x33D, 0}}; // Bosch Harness
const int HONDA_GAS_INTERCEPTOR_THRESHOLD = 328; // ratio between offset and gain from dbc file
const AddrBus HONDA_BG_TX_MSGS[] = {{0xE4, 2}, {0xE5, 2}, {0x296, 0}, {0x33D, 2}}; // Bosch Giraffe
const AddrBus HONDA_BH_TX_MSGS[] = {{0xE4, 0}, {0xE5, 0}, {0x296, 1}, {0x33D, 0}}; // Bosch Harness
// Roughly calculated using the offsets in openpilot +5%:
// In openpilot: ((gas1_norm + gas2_norm)/2) > 15
// gas_norm1 = ((gain_dbc1*gas1) + offset_dbc)
// gas_norm2 = ((gain_dbc2*gas2) + offset_dbc)
// assuming that 2*(gain_dbc1*gas1) == (gain_dbc2*gas2)
// In this safety: ((gas1 + (gas2/2))/2) > THRESHOLD
const int HONDA_GAS_INTERCEPTOR_THRESHOLD = 344;
#define HONDA_GET_INTERCEPTOR(msg) (((GET_BYTE((msg), 0) << 8) + GET_BYTE((msg), 1) + ((GET_BYTE((msg), 2) << 8) + GET_BYTE((msg), 3)) / 2 ) / 2) // avg between 2 tracks
// Nidec and Bosch giraffe have pt on bus 0
AddrCheckStruct honda_rx_checks[] = {
@@ -28,7 +36,6 @@ AddrCheckStruct honda_bh_rx_checks[] = {
const int HONDA_BH_RX_CHECKS_LEN = sizeof(honda_bh_rx_checks) / sizeof(honda_bh_rx_checks[0]);
int honda_brake = 0;
bool honda_moving = false;
bool honda_alt_brake_msg = false;
bool honda_fwd_brake = false;
enum {HONDA_N_HW, HONDA_BG_HW, HONDA_BH_HW} honda_hw = HONDA_N_HW;
@@ -72,6 +79,8 @@ static int honda_rx_hook(CAN_FIFOMailBox_TypeDef *to_push) {
honda_get_checksum, honda_compute_checksum, honda_get_counter);
}
bool unsafe_allow_gas = unsafe_mode & UNSAFE_DISABLE_DISENGAGE_ON_GAS;
if (valid) {
int addr = GET_ADDR(to_push);
int len = GET_LEN(to_push);
@@ -80,7 +89,7 @@ static int honda_rx_hook(CAN_FIFOMailBox_TypeDef *to_push) {
// sample speed
if (addr == 0x158) {
// first 2 bytes
honda_moving = GET_BYTE(to_push, 0) | GET_BYTE(to_push, 1);
vehicle_moving = GET_BYTE(to_push, 0) | GET_BYTE(to_push, 1);
}
// state machine to enter and exit controls
@@ -110,7 +119,7 @@ static int honda_rx_hook(CAN_FIFOMailBox_TypeDef *to_push) {
bool is_user_brake_msg = honda_alt_brake_msg ? ((addr) == 0x1BE) : ((addr) == 0x17C);
if (is_user_brake_msg) {
bool brake_pressed = honda_alt_brake_msg ? (GET_BYTE((to_push), 0) & 0x10) : (GET_BYTE((to_push), 6) & 0x20);
if (brake_pressed && (!brake_pressed_prev || honda_moving)) {
if (brake_pressed && (!brake_pressed_prev || vehicle_moving)) {
controls_allowed = 0;
}
brake_pressed_prev = brake_pressed;
@@ -120,8 +129,8 @@ static int honda_rx_hook(CAN_FIFOMailBox_TypeDef *to_push) {
// length check because bosch hardware also uses this id (0x201 w/ len = 8)
if ((addr == 0x201) && (len == 6)) {
gas_interceptor_detected = 1;
int gas_interceptor = GET_INTERCEPTOR(to_push);
if ((gas_interceptor > HONDA_GAS_INTERCEPTOR_THRESHOLD) &&
int gas_interceptor = HONDA_GET_INTERCEPTOR(to_push);
if (!unsafe_allow_gas && (gas_interceptor > HONDA_GAS_INTERCEPTOR_THRESHOLD) &&
(gas_interceptor_prev <= HONDA_GAS_INTERCEPTOR_THRESHOLD)) {
controls_allowed = 0;
}
@@ -132,24 +141,28 @@ static int honda_rx_hook(CAN_FIFOMailBox_TypeDef *to_push) {
if (!gas_interceptor_detected) {
if (addr == 0x17C) {
bool gas_pressed = GET_BYTE(to_push, 0) != 0;
if (gas_pressed && !gas_pressed_prev) {
if (!unsafe_allow_gas && gas_pressed && !gas_pressed_prev) {
controls_allowed = 0;
}
gas_pressed_prev = gas_pressed;
}
}
if ((bus == 2) && (addr == 0x1FA)) {
bool honda_stock_aeb = GET_BYTE(to_push, 3) & 0x20;
int honda_stock_brake = (GET_BYTE(to_push, 0) << 2) + ((GET_BYTE(to_push, 1) >> 6) & 0x3);
// Forward AEB when stock braking is higher than openpilot braking
// only stop forwarding when AEB event is over
if (!honda_stock_aeb) {
honda_fwd_brake = false;
} else if (honda_stock_brake >= honda_brake) {
honda_fwd_brake = true;
} else {
// Leave Honda forward brake as is
// disable stock Honda AEB in unsafe mode
if ( !(unsafe_mode & UNSAFE_DISABLE_STOCK_AEB) ) {
if ((bus == 2) && (addr == 0x1FA)) {
bool honda_stock_aeb = GET_BYTE(to_push, 3) & 0x20;
int honda_stock_brake = (GET_BYTE(to_push, 0) << 2) + ((GET_BYTE(to_push, 1) >> 6) & 0x3);
// Forward AEB when stock braking is higher than openpilot braking
// only stop forwarding when AEB event is over
if (!honda_stock_aeb) {
honda_fwd_brake = false;
} else if (honda_stock_brake >= honda_brake) {
honda_fwd_brake = true;
} else {
// Leave Honda forward brake as is
}
}
}
@@ -159,7 +172,7 @@ static int honda_rx_hook(CAN_FIFOMailBox_TypeDef *to_push) {
if ((safety_mode_cnt > RELAY_TRNS_TIMEOUT) && ((addr == 0xE4) || (addr == 0x194))) {
if (((honda_hw != HONDA_N_HW) && (bus == bus_rdr_car)) ||
((honda_hw == HONDA_N_HW) && (bus == 0))) {
relay_malfunction = true;
relay_malfunction_set();
}
}
}
@@ -192,8 +205,11 @@ static int honda_tx_hook(CAN_FIFOMailBox_TypeDef *to_send) {
// disallow actuator commands if gas or brake (with vehicle moving) are pressed
// and the the latching controls_allowed flag is True
int pedal_pressed = gas_pressed_prev || (gas_interceptor_prev > HONDA_GAS_INTERCEPTOR_THRESHOLD) ||
(brake_pressed_prev && honda_moving);
int pedal_pressed = brake_pressed_prev && vehicle_moving;
bool unsafe_allow_gas = unsafe_mode & UNSAFE_DISABLE_DISENGAGE_ON_GAS;
if (!unsafe_allow_gas) {
pedal_pressed = pedal_pressed || gas_pressed_prev || (gas_interceptor_prev > HONDA_GAS_INTERCEPTOR_THRESHOLD);
}
bool current_controls_allowed = controls_allowed && !(pedal_pressed);
// BRAKE: safety check
@@ -222,6 +238,13 @@ static int honda_tx_hook(CAN_FIFOMailBox_TypeDef *to_send) {
}
}
// Bosch supplemental control check
if (addr == 0xE5) {
if ((GET_BYTES_04(to_send) != 0x10800004) || ((GET_BYTES_48(to_send) & 0x00FFFFFF) != 0x0)) {
tx = 0;
}
}
// GAS: safety check
if (addr == 0x200) {
if (!current_controls_allowed) {
@@ -248,14 +271,15 @@ static int honda_tx_hook(CAN_FIFOMailBox_TypeDef *to_send) {
static void honda_nidec_init(int16_t param) {
UNUSED(param);
controls_allowed = false;
relay_malfunction = false;
relay_malfunction_reset();
gas_interceptor_detected = 0;
honda_hw = HONDA_N_HW;
honda_alt_brake_msg = false;
}
static void honda_bosch_giraffe_init(int16_t param) {
controls_allowed = false;
relay_malfunction = false;
relay_malfunction_reset();
honda_hw = HONDA_BG_HW;
// Checking for alternate brake override from safety parameter
honda_alt_brake_msg = (param == 1) ? true : false;
@@ -263,7 +287,7 @@ static void honda_bosch_giraffe_init(int16_t param) {
static void honda_bosch_harness_init(int16_t param) {
controls_allowed = false;
relay_malfunction = false;
relay_malfunction_reset();
honda_hw = HONDA_BH_HW;
// Checking for alternate brake override from safety parameter
honda_alt_brake_msg = (param == 1) ? true : false;
@@ -305,7 +329,7 @@ static int honda_bosch_fwd_hook(int bus_num, CAN_FIFOMailBox_TypeDef *to_fwd) {
}
if (bus_num == bus_rdr_cam) {
int addr = GET_ADDR(to_fwd);
int is_lkas_msg = (addr == 0xE4) || (addr == 0x33D);
int is_lkas_msg = (addr == 0xE4) || (addr == 0xE5) || (addr == 0x33D);
if (!is_lkas_msg) {
bus_fwd = bus_rdr_car;
}
+52 -35
View File
@@ -6,56 +6,72 @@ const int HYUNDAI_MAX_RATE_DOWN = 7;
const int HYUNDAI_DRIVER_TORQUE_ALLOWANCE = 50;
const int HYUNDAI_DRIVER_TORQUE_FACTOR = 2;
const int HYUNDAI_STANDSTILL_THRSLD = 30; // ~1kph
const AddrBus HYUNDAI_TX_MSGS[] = {{832, 0}, {1265, 0}};
const AddrBus HYUNDAI_TX_MSGS[] = {{832, 0}, {1265, 0}, {1157, 0}};
// TODO: do checksum and counter checks
// TODO: do checksum checks
AddrCheckStruct hyundai_rx_checks[] = {
{.addr = {608}, .bus = 0, .expected_timestep = 10000U},
{.addr = {897}, .bus = 0, .expected_timestep = 10000U},
{.addr = {902}, .bus = 0, .expected_timestep = 10000U},
{.addr = {916}, .bus = 0, .expected_timestep = 10000U},
{.addr = {1057}, .bus = 0, .expected_timestep = 20000U},
{.addr = {608}, .bus = 0, .max_counter = 3U, .expected_timestep = 10000U},
{.addr = {897}, .bus = 0, .max_counter = 255U, .expected_timestep = 10000U},
{.addr = {902}, .bus = 0, .max_counter = 3U, .expected_timestep = 10000U},
{.addr = {916}, .bus = 0, .max_counter = 7U, .expected_timestep = 10000U},
{.addr = {1057}, .bus = 0, .max_counter = 15U, .expected_timestep = 20000U},
};
const int HYUNDAI_RX_CHECK_LEN = sizeof(hyundai_rx_checks) / sizeof(hyundai_rx_checks[0]);
int hyundai_rt_torque_last = 0;
int hyundai_desired_torque_last = 0;
int hyundai_cruise_engaged_last = 0;
int hyundai_speed = 0;
uint32_t hyundai_ts_last = 0;
struct sample_t hyundai_torque_driver; // last few driver torques measured
static uint8_t hyundai_get_counter(CAN_FIFOMailBox_TypeDef *to_push) {
int addr = GET_ADDR(to_push);
uint8_t cnt;
if (addr == 608) {
cnt = (GET_BYTE(to_push, 7) >> 4) & 0x3;
} else if (addr == 897) {
cnt = GET_BYTE(to_push, 5);
} else if (addr == 902) {
cnt = (GET_BYTE(to_push, 1) >> 6) & 0x3;
} else if (addr == 916) {
cnt = (GET_BYTE(to_push, 1) >> 5) & 0x7;
} else if (addr == 1057) {
cnt = GET_BYTE(to_push, 7) & 0xF;
} else {
cnt = 0;
}
return cnt;
}
static int hyundai_rx_hook(CAN_FIFOMailBox_TypeDef *to_push) {
bool valid = addr_safety_check(to_push, hyundai_rx_checks, HYUNDAI_RX_CHECK_LEN,
NULL, NULL, NULL);
NULL, NULL, hyundai_get_counter);
if (valid && GET_BUS(to_push) == 0) {
int addr = GET_ADDR(to_push);
bool unsafe_allow_gas = unsafe_mode & UNSAFE_DISABLE_DISENGAGE_ON_GAS;
if (addr == 897) {
int torque_driver_new = ((GET_BYTES_04(to_push) >> 11) & 0xfff) - 2048;
int addr = GET_ADDR(to_push);
int bus = GET_BUS(to_push);
if (valid && (bus == 0)) {
if (addr == 593) {
int torque_driver_new = ((GET_BYTES_04(to_push) & 0x7ff) * 0.79) - 808; // scale down new driver torque signal to match previous one
// update array of samples
update_sample(&hyundai_torque_driver, torque_driver_new);
update_sample(&torque_driver, torque_driver_new);
}
// enter controls on rising edge of ACC, exit controls on ACC off
if (addr == 1057) {
// 2 bits: 13-14
int cruise_engaged = (GET_BYTES_04(to_push) >> 13) & 0x3;
if (cruise_engaged && !hyundai_cruise_engaged_last) {
if (cruise_engaged && !cruise_engaged_prev) {
controls_allowed = 1;
}
if (!cruise_engaged) {
controls_allowed = 0;
}
hyundai_cruise_engaged_last = cruise_engaged;
cruise_engaged_prev = cruise_engaged;
}
// exit controls on rising edge of gas press
if (addr == 608) {
bool gas_pressed = (GET_BYTE(to_push, 7) >> 6) != 0;
if (gas_pressed && !gas_pressed_prev) {
if (!unsafe_allow_gas && gas_pressed && !gas_pressed_prev) {
controls_allowed = 0;
}
gas_pressed_prev = gas_pressed;
@@ -63,15 +79,16 @@ static int hyundai_rx_hook(CAN_FIFOMailBox_TypeDef *to_push) {
// sample subaru wheel speed, averaging opposite corners
if (addr == 902) {
hyundai_speed = GET_BYTES_04(to_push) & 0x3FFF; // FL
int hyundai_speed = GET_BYTES_04(to_push) & 0x3FFF; // FL
hyundai_speed += (GET_BYTES_48(to_push) >> 16) & 0x3FFF; // RL
hyundai_speed /= 2;
vehicle_moving = hyundai_speed > HYUNDAI_STANDSTILL_THRSLD;
}
// exit controls on rising edge of brake press
if (addr == 916) {
bool brake_pressed = (GET_BYTE(to_push, 6) >> 7) != 0;
if (brake_pressed && (!brake_pressed_prev || (hyundai_speed > HYUNDAI_STANDSTILL_THRSLD))) {
if (brake_pressed && (!brake_pressed_prev || vehicle_moving)) {
controls_allowed = 0;
}
brake_pressed_prev = brake_pressed;
@@ -79,7 +96,7 @@ static int hyundai_rx_hook(CAN_FIFOMailBox_TypeDef *to_push) {
// check if stock camera ECU is on bus 0
if ((safety_mode_cnt > RELAY_TRNS_TIMEOUT) && (addr == 832)) {
relay_malfunction = true;
relay_malfunction_set();
}
}
return valid;
@@ -111,21 +128,21 @@ static int hyundai_tx_hook(CAN_FIFOMailBox_TypeDef *to_send) {
violation |= max_limit_check(desired_torque, HYUNDAI_MAX_STEER, -HYUNDAI_MAX_STEER);
// *** torque rate limit check ***
violation |= driver_limit_check(desired_torque, hyundai_desired_torque_last, &hyundai_torque_driver,
violation |= driver_limit_check(desired_torque, desired_torque_last, &torque_driver,
HYUNDAI_MAX_STEER, HYUNDAI_MAX_RATE_UP, HYUNDAI_MAX_RATE_DOWN,
HYUNDAI_DRIVER_TORQUE_ALLOWANCE, HYUNDAI_DRIVER_TORQUE_FACTOR);
// used next time
hyundai_desired_torque_last = desired_torque;
desired_torque_last = desired_torque;
// *** torque real time rate limit check ***
violation |= rt_rate_limit_check(desired_torque, hyundai_rt_torque_last, HYUNDAI_MAX_RT_DELTA);
violation |= rt_rate_limit_check(desired_torque, rt_torque_last, HYUNDAI_MAX_RT_DELTA);
// every RT_INTERVAL set the new limits
uint32_t ts_elapsed = get_ts_elapsed(ts, hyundai_ts_last);
uint32_t ts_elapsed = get_ts_elapsed(ts, ts_last);
if (ts_elapsed > HYUNDAI_RT_INTERVAL) {
hyundai_rt_torque_last = desired_torque;
hyundai_ts_last = ts;
rt_torque_last = desired_torque;
ts_last = ts;
}
}
@@ -136,9 +153,9 @@ static int hyundai_tx_hook(CAN_FIFOMailBox_TypeDef *to_send) {
// reset to 0 if either controls is not allowed or there's a violation
if (violation || !controls_allowed) {
hyundai_desired_torque_last = 0;
hyundai_rt_torque_last = 0;
hyundai_ts_last = ts;
desired_torque_last = 0;
rt_torque_last = 0;
ts_last = ts;
}
if (violation) {
@@ -168,7 +185,7 @@ static int hyundai_fwd_hook(int bus_num, CAN_FIFOMailBox_TypeDef *to_fwd) {
if (bus_num == 0) {
bus_fwd = 2;
}
if ((bus_num == 2) && (addr != 832)) {
if ((bus_num == 2) && (addr != 832) && (addr != 1157)) {
bus_fwd = 0;
}
}
+2 -3
View File
@@ -55,7 +55,7 @@ static int mazda_rx_hook(CAN_FIFOMailBox_TypeDef *to_push) {
// if we see wheel speed msgs on MAZDA_CAM bus then relay is closed
if ((safety_mode_cnt > RELAY_TRNS_TIMEOUT) && (bus == MAZDA_CAM) && (addr == MAZDA_WHEEL_SPEED)) {
relay_malfunction = true;
relay_malfunction_set();
}
return 1;
}
@@ -83,8 +83,7 @@ static int mazda_tx_hook(CAN_FIFOMailBox_TypeDef *to_send) {
violation |= max_limit_check(desired_torque, MAZDA_MAX_STEER, -MAZDA_MAX_STEER);
// *** torque rate limit check ***
int desired_torque_last = mazda_desired_torque_last;
violation |= driver_limit_check(desired_torque, desired_torque_last, &mazda_torque_driver,
violation |= driver_limit_check(desired_torque, mazda_desired_torque_last, &mazda_torque_driver,
MAZDA_MAX_STEER, MAZDA_MAX_RATE_UP, MAZDA_MAX_RATE_DOWN,
MAZDA_DRIVER_TORQUE_ALLOWANCE, MAZDA_DRIVER_TORQUE_FACTOR);
// used next time
+52 -44
View File
@@ -9,25 +9,22 @@ const struct lookup_t NISSAN_LOOKUP_ANGLE_RATE_DOWN = {
{2., 7., 17.},
{5., 3.5, .5}};
const struct lookup_t NISSAN_LOOKUP_MAX_ANGLE = {
{3.3, 12, 32},
{540., 120., 23.}};
const int NISSAN_DEG_TO_CAN = 100;
const AddrBus NISSAN_TX_MSGS[] = {{0x169, 0}, {0x2b1, 0}, {0x4cc, 0}, {0x20b, 2}};
const AddrBus NISSAN_TX_MSGS[] = {{0x169, 0}, {0x2b1, 0}, {0x4cc, 0}, {0x20b, 2}, {0x280, 2}};
AddrCheckStruct nissan_rx_checks[] = {
{.addr = {0x2}, .bus = 0, .expected_timestep = 10000U},
{.addr = {0x29a}, .bus = 0, .expected_timestep = 20000U},
{.addr = {0x1b6}, .bus = 1, .expected_timestep = 10000U},
{.addr = {0x2}, .bus = 0, .expected_timestep = 10000U}, // STEER_ANGLE_SENSOR (100Hz)
{.addr = {0x285}, .bus = 0, .expected_timestep = 20000U}, // WHEEL_SPEEDS_REAR (50Hz)
{.addr = {0x30f}, .bus = 2, .expected_timestep = 100000U}, // CRUISE_STATE (10Hz)
{.addr = {0x15c, 0x239}, .bus = 0, .expected_timestep = 20000U}, // GAS_PEDAL (100Hz / 50Hz)
{.addr = {0x454, 0x1cc}, .bus = 0, .expected_timestep = 100000U}, // DOORS_LIGHTS (10Hz) / BRAKE (100Hz)
};
const int NISSAN_RX_CHECK_LEN = sizeof(nissan_rx_checks) / sizeof(nissan_rx_checks[0]);
float nissan_speed = 0;
//int nissan_controls_allowed_last = 0;
uint32_t nissan_ts_angle_last = 0;
int nissan_cruise_engaged_last = 0;
int nissan_desired_angle_last = 0;
struct sample_t nissan_angle_meas; // last 3 steer angles
@@ -38,6 +35,8 @@ static int nissan_rx_hook(CAN_FIFOMailBox_TypeDef *to_push) {
bool valid = addr_safety_check(to_push, nissan_rx_checks, NISSAN_RX_CHECK_LEN,
NULL, NULL, NULL);
bool unsafe_allow_gas = unsafe_mode & UNSAFE_DISABLE_DISENGAGE_ON_GAS;
if (valid) {
int bus = GET_BUS(to_push);
int addr = GET_ADDR(to_push);
@@ -54,16 +53,24 @@ static int nissan_rx_hook(CAN_FIFOMailBox_TypeDef *to_push) {
update_sample(&nissan_angle_meas, angle_meas_new);
}
if (addr == 0x29a) {
if (addr == 0x285) {
// Get current speed
// Factor 0.00555
nissan_speed = ((GET_BYTE(to_push, 2) << 8) | (GET_BYTE(to_push, 3))) * 0.00555 / 3.6;
// Factor 0.005
nissan_speed = ((GET_BYTE(to_push, 2) << 8) | (GET_BYTE(to_push, 3))) * 0.005 / 3.6;
vehicle_moving = nissan_speed > 0.;
}
// exit controls on rising edge of gas press
if (addr == 0x15c) {
bool gas_pressed = ((GET_BYTE(to_push, 5) << 2) | ((GET_BYTE(to_push, 6) >> 6) & 0x3));
if (gas_pressed && !gas_pressed_prev) {
// X-Trail 0x15c, Leaf 0x239
if ((addr == 0x15c) || (addr == 0x239)) {
bool gas_pressed = true;
if (addr == 0x15c){
gas_pressed = ((GET_BYTE(to_push, 5) << 2) | ((GET_BYTE(to_push, 6) >> 6) & 0x3)) > 1;
} else {
gas_pressed = GET_BYTE(to_push, 0) > 3;
}
if (!unsafe_allow_gas && gas_pressed && !gas_pressed_prev) {
controls_allowed = 0;
}
gas_pressed_prev = gas_pressed;
@@ -71,30 +78,38 @@ static int nissan_rx_hook(CAN_FIFOMailBox_TypeDef *to_push) {
// 0x169 is lkas cmd. If it is on bus 0, then relay is unexpectedly closed
if ((safety_mode_cnt > RELAY_TRNS_TIMEOUT) && (addr == 0x169)) {
relay_malfunction = true;
relay_malfunction_set();
}
}
if (bus == 1) {
if (addr == 0x1b6) {
int cruise_engaged = (GET_BYTE(to_push, 4) >> 6) & 1;
if (cruise_engaged && !nissan_cruise_engaged_last) {
controls_allowed = 1;
}
if (!cruise_engaged) {
controls_allowed = 0;
}
nissan_cruise_engaged_last = cruise_engaged;
// exit controls on rising edge of brake press, or if speed > 0 and brake
// X-trail 0x454, Leaf 0x1cc
if ((addr == 0x454) || (addr == 0x1cc)) {
bool brake_pressed = true;
if (addr == 0x454){
brake_pressed = (GET_BYTE(to_push, 2) & 0x80) != 0;
} else {
brake_pressed = GET_BYTE(to_push, 0) > 3;
}
// exit controls on rising edge of brake press, or if speed > 0 and brake
if (addr == 0x454) {
bool brake_pressed = (GET_BYTE(to_push, 2) & 0x80) != 0;
if (brake_pressed && (!brake_pressed_prev || (nissan_speed > 0.))) {
controls_allowed = 0;
}
brake_pressed_prev = brake_pressed;
if (brake_pressed && (!brake_pressed_prev || vehicle_moving)) {
controls_allowed = 0;
}
brake_pressed_prev = brake_pressed;
}
// Handle cruise enabled
if ((bus == 2) && (addr == 0x30f)) {
bool cruise_engaged = (GET_BYTE(to_push, 0) >> 3) & 1;
if (cruise_engaged && !cruise_engaged_prev) {
controls_allowed = 1;
}
if (!cruise_engaged) {
controls_allowed = 0;
}
cruise_engaged_prev = cruise_engaged;
}
}
return valid;
@@ -133,16 +148,6 @@ static int nissan_tx_hook(CAN_FIFOMailBox_TypeDef *to_send) {
int highest_desired_angle = nissan_desired_angle_last + ((nissan_desired_angle_last > 0) ? delta_angle_up : delta_angle_down);
int lowest_desired_angle = nissan_desired_angle_last - ((nissan_desired_angle_last >= 0) ? delta_angle_down : delta_angle_up);
// Limit maximum steering angle at current speed
int maximum_angle = ((int)interpolate(NISSAN_LOOKUP_MAX_ANGLE, nissan_speed));
if (highest_desired_angle > (maximum_angle * NISSAN_DEG_TO_CAN)) {
highest_desired_angle = (maximum_angle * NISSAN_DEG_TO_CAN);
}
if (lowest_desired_angle < (-maximum_angle * NISSAN_DEG_TO_CAN)) {
lowest_desired_angle = (-maximum_angle * NISSAN_DEG_TO_CAN);
}
// check for violation;
violation |= max_limit_check(desired_angle, highest_desired_angle, lowest_desired_angle);
@@ -183,7 +188,10 @@ static int nissan_fwd_hook(int bus_num, CAN_FIFOMailBox_TypeDef *to_fwd) {
int addr = GET_ADDR(to_fwd);
if (bus_num == 0) {
bus_fwd = 2; // ADAS
int block_msg = (addr == 0x280); // CANCEL_MSG
if (!block_msg) {
bus_fwd = 2; // ADAS
}
}
if (bus_num == 2) {
+24 -27
View File
@@ -30,13 +30,7 @@ AddrCheckStruct subaru_l_rx_checks[] = {
const int SUBARU_RX_CHECK_LEN = sizeof(subaru_rx_checks) / sizeof(subaru_rx_checks[0]);
const int SUBARU_L_RX_CHECK_LEN = sizeof(subaru_l_rx_checks) / sizeof(subaru_l_rx_checks[0]);
int subaru_cruise_engaged_last = 0;
int subaru_rt_torque_last = 0;
int subaru_desired_torque_last = 0;
int subaru_speed = 0;
uint32_t subaru_ts_last = 0;
bool subaru_global = false;
struct sample_t subaru_torque_driver; // last few driver torques measured
static uint8_t subaru_get_checksum(CAN_FIFOMailBox_TypeDef *to_push) {
return (uint8_t)GET_BYTE(to_push, 0);
@@ -67,6 +61,8 @@ static int subaru_rx_hook(CAN_FIFOMailBox_TypeDef *to_push) {
NULL, NULL, NULL);
}
bool unsafe_allow_gas = unsafe_mode & UNSAFE_DISABLE_DISENGAGE_ON_GAS;
if (valid && (GET_BUS(to_push) == 0)) {
int addr = GET_ADDR(to_push);
if (((addr == 0x119) && subaru_global) ||
@@ -74,11 +70,12 @@ static int subaru_rx_hook(CAN_FIFOMailBox_TypeDef *to_push) {
int torque_driver_new;
if (subaru_global) {
torque_driver_new = ((GET_BYTES_04(to_push) >> 16) & 0x7FF);
torque_driver_new = -1 * to_signed(torque_driver_new, 11);
} else {
torque_driver_new = (GET_BYTE(to_push, 3) >> 5) + (GET_BYTE(to_push, 4) << 3);
torque_driver_new = to_signed(torque_driver_new, 11);
}
torque_driver_new = to_signed(torque_driver_new, 11);
update_sample(&subaru_torque_driver, torque_driver_new);
update_sample(&torque_driver, torque_driver_new);
}
// enter controls on rising edge of ACC, exit controls on ACC off
@@ -86,26 +83,27 @@ static int subaru_rx_hook(CAN_FIFOMailBox_TypeDef *to_push) {
((addr == 0x144) && !subaru_global)) {
int bit_shift = subaru_global ? 9 : 17;
int cruise_engaged = ((GET_BYTES_48(to_push) >> bit_shift) & 1);
if (cruise_engaged && !subaru_cruise_engaged_last) {
if (cruise_engaged && !cruise_engaged_prev) {
controls_allowed = 1;
}
if (!cruise_engaged) {
controls_allowed = 0;
}
subaru_cruise_engaged_last = cruise_engaged;
cruise_engaged_prev = cruise_engaged;
}
// sample subaru wheel speed, averaging opposite corners
if ((addr == 0x13a) && subaru_global) {
subaru_speed = (GET_BYTES_04(to_push) >> 12) & 0x1FFF; // FR
int subaru_speed = (GET_BYTES_04(to_push) >> 12) & 0x1FFF; // FR
subaru_speed += (GET_BYTES_48(to_push) >> 6) & 0x1FFF; // RL
subaru_speed /= 2;
vehicle_moving = subaru_speed > SUBARU_STANDSTILL_THRSLD;
}
// exit controls on rising edge of brake press (TODO: missing check for unsupported legacy models)
if ((addr == 0x139) && subaru_global) {
bool brake_pressed = (GET_BYTES_48(to_push) & 0xFFF0) > 0;
if (brake_pressed && (!brake_pressed_prev || (subaru_speed > SUBARU_STANDSTILL_THRSLD))) {
if (brake_pressed && (!brake_pressed_prev || vehicle_moving)) {
controls_allowed = 0;
}
brake_pressed_prev = brake_pressed;
@@ -116,7 +114,7 @@ static int subaru_rx_hook(CAN_FIFOMailBox_TypeDef *to_push) {
((addr == 0x140) && !subaru_global)) {
int byte = subaru_global ? 4 : 0;
bool gas_pressed = GET_BYTE(to_push, byte) != 0;
if (gas_pressed && !gas_pressed_prev) {
if (!unsafe_allow_gas && gas_pressed && !gas_pressed_prev) {
controls_allowed = 0;
}
gas_pressed_prev = gas_pressed;
@@ -124,7 +122,7 @@ static int subaru_rx_hook(CAN_FIFOMailBox_TypeDef *to_push) {
if ((safety_mode_cnt > RELAY_TRNS_TIMEOUT) &&
(((addr == 0x122) && subaru_global) || ((addr == 0x164) && !subaru_global))) {
relay_malfunction = true;
relay_malfunction_set();
}
}
return valid;
@@ -151,7 +149,7 @@ static int subaru_tx_hook(CAN_FIFOMailBox_TypeDef *to_send) {
int desired_torque = ((GET_BYTES_04(to_send) >> bit_shift) & 0x1FFF);
bool violation = 0;
uint32_t ts = TIM2->CNT;
desired_torque = to_signed(desired_torque, 13);
desired_torque = -1 * to_signed(desired_torque, 13);
if (controls_allowed) {
@@ -159,22 +157,21 @@ static int subaru_tx_hook(CAN_FIFOMailBox_TypeDef *to_send) {
violation |= max_limit_check(desired_torque, SUBARU_MAX_STEER, -SUBARU_MAX_STEER);
// *** torque rate limit check ***
int desired_torque_last = subaru_desired_torque_last;
violation |= driver_limit_check(desired_torque, desired_torque_last, &subaru_torque_driver,
violation |= driver_limit_check(desired_torque, desired_torque_last, &torque_driver,
SUBARU_MAX_STEER, SUBARU_MAX_RATE_UP, SUBARU_MAX_RATE_DOWN,
SUBARU_DRIVER_TORQUE_ALLOWANCE, SUBARU_DRIVER_TORQUE_FACTOR);
// used next time
subaru_desired_torque_last = desired_torque;
desired_torque_last = desired_torque;
// *** torque real time rate limit check ***
violation |= rt_rate_limit_check(desired_torque, subaru_rt_torque_last, SUBARU_MAX_RT_DELTA);
violation |= rt_rate_limit_check(desired_torque, rt_torque_last, SUBARU_MAX_RT_DELTA);
// every RT_INTERVAL set the new limits
uint32_t ts_elapsed = get_ts_elapsed(ts, subaru_ts_last);
uint32_t ts_elapsed = get_ts_elapsed(ts, ts_last);
if (ts_elapsed > SUBARU_RT_INTERVAL) {
subaru_rt_torque_last = desired_torque;
subaru_ts_last = ts;
rt_torque_last = desired_torque;
ts_last = ts;
}
}
@@ -185,9 +182,9 @@ static int subaru_tx_hook(CAN_FIFOMailBox_TypeDef *to_send) {
// reset to 0 if either controls is not allowed or there's a violation
if (violation || !controls_allowed) {
subaru_desired_torque_last = 0;
subaru_rt_torque_last = 0;
subaru_ts_last = ts;
desired_torque_last = 0;
rt_torque_last = 0;
ts_last = ts;
}
if (violation) {
@@ -226,14 +223,14 @@ static int subaru_fwd_hook(int bus_num, CAN_FIFOMailBox_TypeDef *to_fwd) {
static void subaru_init(int16_t param) {
UNUSED(param);
controls_allowed = false;
relay_malfunction = false;
relay_malfunction_reset();
subaru_global = true;
}
static void subaru_legacy_init(int16_t param) {
UNUSED(param);
controls_allowed = false;
relay_malfunction = false;
relay_malfunction_reset();
subaru_global = false;
}
+48 -42
View File
@@ -14,10 +14,20 @@ const uint32_t TOYOTA_RT_INTERVAL = 250000; // 250ms between real time checks
// longitudinal limits
const int TOYOTA_MAX_ACCEL = 1500; // 1.5 m/s2
const int TOYOTA_MIN_ACCEL = -3000; // 3.0 m/s2
const int TOYOTA_MIN_ACCEL = -3000; // -3.0 m/s2
const int TOYOTA_ISO_MAX_ACCEL = 2000; // 2.0 m/s2
const int TOYOTA_ISO_MIN_ACCEL = -3500; // -3.5 m/s2
const int TOYOTA_STANDSTILL_THRSLD = 100; // 1kph
const int TOYOTA_GAS_INTERCEPTOR_THRSLD = 475; // ratio between offset and gain from dbc file
// Roughly calculated using the offsets in openpilot +5%:
// In openpilot: ((gas1_norm + gas2_norm)/2) > 15
// gas_norm1 = ((gain_dbc*gas1) + offset1_dbc)
// gas_norm2 = ((gain_dbc*gas2) + offset2_dbc)
// In this safety: ((gas1 + gas2)/2) > THRESHOLD
const int TOYOTA_GAS_INTERCEPTOR_THRSLD = 845;
#define TOYOTA_GET_INTERCEPTOR(msg) (((GET_BYTE((msg), 0) << 8) + GET_BYTE((msg), 1) + (GET_BYTE((msg), 2) << 8) + GET_BYTE((msg), 3)) / 2) // avg between 2 tracks
const AddrBus TOYOTA_TX_MSGS[] = {{0x283, 0}, {0x2E6, 0}, {0x2E7, 0}, {0x33E, 0}, {0x344, 0}, {0x365, 0}, {0x366, 0}, {0x4CB, 0}, // DSU bus 0
{0x128, 1}, {0x141, 1}, {0x160, 1}, {0x161, 1}, {0x470, 1}, // DSU bus 1
@@ -35,15 +45,6 @@ const int TOYOTA_RX_CHECKS_LEN = sizeof(toyota_rx_checks) / sizeof(toyota_rx_che
// global actuation limit states
int toyota_dbc_eps_torque_factor = 100; // conversion factor for STEER_TORQUE_EPS in %: see dbc file
// states
int toyota_desired_torque_last = 0; // last desired steer torque
int toyota_rt_torque_last = 0; // last desired torque for real time check
uint32_t toyota_ts_last = 0;
int toyota_cruise_engaged_last = 0; // cruise state
bool toyota_moving = false;
struct sample_t toyota_torque_meas; // last 3 motor torques produced by the eps
static uint8_t toyota_compute_checksum(CAN_FIFOMailBox_TypeDef *to_push) {
int addr = GET_ADDR(to_push);
int len = GET_LEN(to_push);
@@ -63,6 +64,8 @@ static int toyota_rx_hook(CAN_FIFOMailBox_TypeDef *to_push) {
bool valid = addr_safety_check(to_push, toyota_rx_checks, TOYOTA_RX_CHECKS_LEN,
toyota_get_checksum, toyota_compute_checksum, NULL);
bool unsafe_allow_gas = unsafe_mode & UNSAFE_DISABLE_DISENGAGE_ON_GAS;
if (valid && (GET_BUS(to_push) == 0)) {
int addr = GET_ADDR(to_push);
@@ -75,24 +78,32 @@ static int toyota_rx_hook(CAN_FIFOMailBox_TypeDef *to_push) {
torque_meas_new = (torque_meas_new * toyota_dbc_eps_torque_factor) / 100;
// update array of sample
update_sample(&toyota_torque_meas, torque_meas_new);
update_sample(&torque_meas, torque_meas_new);
// increase torque_meas by 1 to be conservative on rounding
toyota_torque_meas.min--;
toyota_torque_meas.max++;
torque_meas.min--;
torque_meas.max++;
}
// enter controls on rising edge of ACC, exit controls on ACC off
// exit controls on rising edge of gas press
if (addr == 0x1D2) {
// 5th bit is CRUISE_ACTIVE
int cruise_engaged = GET_BYTE(to_push, 0) & 0x20;
if (!cruise_engaged) {
controls_allowed = 0;
}
if (cruise_engaged && !toyota_cruise_engaged_last) {
if (cruise_engaged && !cruise_engaged_prev) {
controls_allowed = 1;
}
toyota_cruise_engaged_last = cruise_engaged;
cruise_engaged_prev = cruise_engaged;
// handle gas_pressed
bool gas_pressed = ((GET_BYTE(to_push, 0) >> 4) & 1) == 0;
if (!unsafe_allow_gas && gas_pressed && !gas_pressed_prev && !gas_interceptor_detected) {
controls_allowed = 0;
}
gas_pressed_prev = gas_pressed;
}
// sample speed
@@ -103,7 +114,7 @@ static int toyota_rx_hook(CAN_FIFOMailBox_TypeDef *to_push) {
int next_byte = i + 1; // hack to deal with misra 10.8
speed += (GET_BYTE(to_push, i) << 8) + GET_BYTE(to_push, next_byte) - 0x1a6f;
}
toyota_moving = ABS(speed / 4) > TOYOTA_STANDSTILL_THRSLD;
vehicle_moving = ABS(speed / 4) > TOYOTA_STANDSTILL_THRSLD;
}
// exit controls on rising edge of brake pedal
@@ -111,7 +122,7 @@ static int toyota_rx_hook(CAN_FIFOMailBox_TypeDef *to_push) {
if ((addr == 0x224) || (addr == 0x226)) {
int byte = (addr == 0x224) ? 0 : 4;
bool brake_pressed = ((GET_BYTE(to_push, byte) >> 5) & 1) != 0;
if (brake_pressed && (!brake_pressed_prev || toyota_moving)) {
if (brake_pressed && (!brake_pressed_prev || vehicle_moving)) {
controls_allowed = 0;
}
brake_pressed_prev = brake_pressed;
@@ -120,26 +131,17 @@ static int toyota_rx_hook(CAN_FIFOMailBox_TypeDef *to_push) {
// exit controls on rising edge of interceptor gas press
if (addr == 0x201) {
gas_interceptor_detected = 1;
int gas_interceptor = GET_INTERCEPTOR(to_push);
if ((gas_interceptor > TOYOTA_GAS_INTERCEPTOR_THRSLD) &&
int gas_interceptor = TOYOTA_GET_INTERCEPTOR(to_push);
if (!unsafe_allow_gas && (gas_interceptor > TOYOTA_GAS_INTERCEPTOR_THRSLD) &&
(gas_interceptor_prev <= TOYOTA_GAS_INTERCEPTOR_THRSLD)) {
controls_allowed = 0;
}
gas_interceptor_prev = gas_interceptor;
}
// exit controls on rising edge of gas press
if (addr == 0x2C1) {
bool gas_pressed = GET_BYTE(to_push, 6) != 0;
if (gas_pressed && !gas_pressed_prev && !gas_interceptor_detected) {
controls_allowed = 0;
}
gas_pressed_prev = gas_pressed;
}
// 0x2E4 is lkas cmd. If it is on bus 0, then relay is unexpectedly closed
if ((safety_mode_cnt > RELAY_TRNS_TIMEOUT) && (addr == 0x2E4)) {
relay_malfunction = true;
relay_malfunction_set();
}
}
return valid;
@@ -180,7 +182,10 @@ static int toyota_tx_hook(CAN_FIFOMailBox_TypeDef *to_send) {
tx = 0;
}
}
bool violation = max_limit_check(desired_accel, TOYOTA_MAX_ACCEL, TOYOTA_MIN_ACCEL);
bool violation = (unsafe_mode & UNSAFE_RAISE_LONGITUDINAL_LIMITS_TO_ISO_MAX)?
max_limit_check(desired_accel, TOYOTA_ISO_MAX_ACCEL, TOYOTA_ISO_MIN_ACCEL) :
max_limit_check(desired_accel, TOYOTA_MAX_ACCEL, TOYOTA_MIN_ACCEL);
if (violation) {
tx = 0;
}
@@ -200,20 +205,20 @@ static int toyota_tx_hook(CAN_FIFOMailBox_TypeDef *to_send) {
violation |= max_limit_check(desired_torque, TOYOTA_MAX_TORQUE, -TOYOTA_MAX_TORQUE);
// *** torque rate limit check ***
violation |= dist_to_meas_check(desired_torque, toyota_desired_torque_last,
&toyota_torque_meas, TOYOTA_MAX_RATE_UP, TOYOTA_MAX_RATE_DOWN, TOYOTA_MAX_TORQUE_ERROR);
violation |= dist_to_meas_check(desired_torque, desired_torque_last,
&torque_meas, TOYOTA_MAX_RATE_UP, TOYOTA_MAX_RATE_DOWN, TOYOTA_MAX_TORQUE_ERROR);
// used next time
toyota_desired_torque_last = desired_torque;
desired_torque_last = desired_torque;
// *** torque real time rate limit check ***
violation |= rt_rate_limit_check(desired_torque, toyota_rt_torque_last, TOYOTA_MAX_RT_DELTA);
violation |= rt_rate_limit_check(desired_torque, rt_torque_last, TOYOTA_MAX_RT_DELTA);
// every RT_INTERVAL set the new limits
uint32_t ts_elapsed = get_ts_elapsed(ts, toyota_ts_last);
uint32_t ts_elapsed = get_ts_elapsed(ts, ts_last);
if (ts_elapsed > TOYOTA_RT_INTERVAL) {
toyota_rt_torque_last = desired_torque;
toyota_ts_last = ts;
rt_torque_last = desired_torque;
ts_last = ts;
}
}
@@ -224,9 +229,9 @@ static int toyota_tx_hook(CAN_FIFOMailBox_TypeDef *to_send) {
// reset to 0 if either controls is not allowed or there's a violation
if (violation || !controls_allowed) {
toyota_desired_torque_last = 0;
toyota_rt_torque_last = 0;
toyota_ts_last = ts;
desired_torque_last = 0;
rt_torque_last = 0;
ts_last = ts;
}
if (violation) {
@@ -240,7 +245,8 @@ static int toyota_tx_hook(CAN_FIFOMailBox_TypeDef *to_send) {
static void toyota_init(int16_t param) {
controls_allowed = 0;
relay_malfunction = 0;
relay_malfunction_reset();
gas_interceptor_detected = 0;
toyota_dbc_eps_torque_factor = param;
}
+181 -23
View File
@@ -30,12 +30,27 @@ AddrCheckStruct volkswagen_mqb_rx_checks[] = {
};
const int VOLKSWAGEN_MQB_RX_CHECKS_LEN = sizeof(volkswagen_mqb_rx_checks) / sizeof(volkswagen_mqb_rx_checks[0]);
// Safety-relevant CAN messages for the Volkswagen PQ35/PQ46/NMS platforms
#define MSG_LENKHILFE_3 0x0D0 // RX from EPS, for steering angle and driver steering torque
#define MSG_HCA_1 0x0D2 // TX by OP, Heading Control Assist steering torque
#define MSG_MOTOR_2 0x288 // RX from ECU, for CC state and brake switch state
#define MSG_MOTOR_3 0x380 // RX from ECU, for driver throttle input
#define MSG_GRA_NEU 0x38A // TX by OP, ACC control buttons for cancel/resume
#define MSG_BREMSE_3 0x4A0 // RX from ABS, for wheel speeds
#define MSG_LDW_1 0x5BE // TX by OP, Lane line recognition and text alerts
// Transmit of GRA_Neu is allowed on bus 0 and 2 to keep compatibility with gateway and camera integration
const AddrBus VOLKSWAGEN_PQ_TX_MSGS[] = {{MSG_HCA_1, 0}, {MSG_GRA_NEU, 0}, {MSG_GRA_NEU, 2}, {MSG_LDW_1, 0}};
const int VOLKSWAGEN_PQ_TX_MSGS_LEN = sizeof(VOLKSWAGEN_PQ_TX_MSGS) / sizeof(VOLKSWAGEN_PQ_TX_MSGS[0]);
AddrCheckStruct volkswagen_pq_rx_checks[] = {
{.addr = {MSG_LENKHILFE_3}, .bus = 0, .check_checksum = true, .max_counter = 15U, .expected_timestep = 10000U},
{.addr = {MSG_MOTOR_2}, .bus = 0, .check_checksum = false, .max_counter = 0U, .expected_timestep = 20000U},
{.addr = {MSG_MOTOR_3}, .bus = 0, .check_checksum = false, .max_counter = 0U, .expected_timestep = 10000U},
{.addr = {MSG_BREMSE_3}, .bus = 0, .check_checksum = false, .max_counter = 0U, .expected_timestep = 10000U},
};
const int VOLKSWAGEN_PQ_RX_CHECKS_LEN = sizeof(volkswagen_pq_rx_checks) / sizeof(volkswagen_pq_rx_checks[0]);
struct sample_t volkswagen_torque_driver; // Last few driver torques measured
int volkswagen_rt_torque_last = 0;
int volkswagen_desired_torque_last = 0;
uint32_t volkswagen_ts_last = 0;
bool volkswagen_moving = false;
int volkswagen_torque_msg = 0;
int volkswagen_lane_msg = 0;
uint8_t volkswagen_crc8_lut_8h2f[256]; // Static lookup table for CRC8 poly 0x2F, aka 8H2F/AUTOSAR
@@ -45,10 +60,17 @@ static uint8_t volkswagen_get_checksum(CAN_FIFOMailBox_TypeDef *to_push) {
return (uint8_t)GET_BYTE(to_push, 0);
}
static uint8_t volkswagen_get_counter(CAN_FIFOMailBox_TypeDef *to_push) {
static uint8_t volkswagen_mqb_get_counter(CAN_FIFOMailBox_TypeDef *to_push) {
// MQB message counters are consistently found at LSB 8.
return (uint8_t)GET_BYTE(to_push, 1) & 0xFU;
}
static uint8_t volkswagen_pq_get_counter(CAN_FIFOMailBox_TypeDef *to_push) {
// Few PQ messages have counters, and their offsets are inconsistent. This
// function works only for Lenkhilfe_3 at this time.
return (uint8_t)(GET_BYTE(to_push, 1) & 0xF0U) >> 4;
}
static uint8_t volkswagen_mqb_compute_crc(CAN_FIFOMailBox_TypeDef *to_push) {
int addr = GET_ADDR(to_push);
int len = GET_LEN(to_push);
@@ -62,7 +84,7 @@ static uint8_t volkswagen_mqb_compute_crc(CAN_FIFOMailBox_TypeDef *to_push) {
crc = volkswagen_crc8_lut_8h2f[crc];
}
uint8_t counter = volkswagen_get_counter(to_push);
uint8_t counter = volkswagen_mqb_get_counter(to_push);
switch(addr) {
case MSG_EPS_01:
crc ^= (uint8_t[]){0xF5,0xF5,0xF5,0xF5,0xF5,0xF5,0xF5,0xF5,0xF5,0xF5,0xF5,0xF5,0xF5,0xF5,0xF5,0xF5}[counter];
@@ -84,20 +106,40 @@ static uint8_t volkswagen_mqb_compute_crc(CAN_FIFOMailBox_TypeDef *to_push) {
return crc ^ 0xFFU;
}
static uint8_t volkswagen_pq_compute_checksum(CAN_FIFOMailBox_TypeDef *to_push) {
int len = GET_LEN(to_push);
uint8_t checksum = 0U;
for (int i = 1; i < len; i++) {
checksum ^= (uint8_t)GET_BYTE(to_push, i);
}
return checksum;
}
static void volkswagen_mqb_init(int16_t param) {
UNUSED(param);
controls_allowed = false;
relay_malfunction = false;
relay_malfunction_reset();
volkswagen_torque_msg = MSG_HCA_01;
volkswagen_lane_msg = MSG_LDW_02;
gen_crc_lookup_table(0x2F, volkswagen_crc8_lut_8h2f);
}
static void volkswagen_pq_init(int16_t param) {
UNUSED(param);
controls_allowed = false;
relay_malfunction_reset();
volkswagen_torque_msg = MSG_HCA_1;
volkswagen_lane_msg = MSG_LDW_1;
}
static int volkswagen_mqb_rx_hook(CAN_FIFOMailBox_TypeDef *to_push) {
bool valid = addr_safety_check(to_push, volkswagen_mqb_rx_checks, VOLKSWAGEN_MQB_RX_CHECKS_LEN,
volkswagen_get_checksum, volkswagen_mqb_compute_crc, volkswagen_get_counter);
volkswagen_get_checksum, volkswagen_mqb_compute_crc, volkswagen_mqb_get_counter);
if (valid && (GET_BUS(to_push) == 0)) {
int addr = GET_ADDR(to_push);
@@ -110,7 +152,7 @@ static int volkswagen_mqb_rx_hook(CAN_FIFOMailBox_TypeDef *to_push) {
int wheel_speed_fr = GET_BYTE(to_push, 6) | (GET_BYTE(to_push, 7) << 8);
// Check for average front speed in excess of 0.3m/s, 1.08km/h
// DBC speed scale 0.0075: 0.3m/s = 144, sum both wheels to compare
volkswagen_moving = (wheel_speed_fl + wheel_speed_fr) > 288;
vehicle_moving = (wheel_speed_fl + wheel_speed_fr) > 288;
}
// Update driver input torque samples
@@ -122,7 +164,7 @@ static int volkswagen_mqb_rx_hook(CAN_FIFOMailBox_TypeDef *to_push) {
if (sign == 1) {
torque_driver_new *= -1;
}
update_sample(&volkswagen_torque_driver, torque_driver_new);
update_sample(&torque_driver, torque_driver_new);
}
// Update ACC status from drivetrain coordinator for controls-allowed state
@@ -136,7 +178,7 @@ static int volkswagen_mqb_rx_hook(CAN_FIFOMailBox_TypeDef *to_push) {
// Signal: Motor_20.MO_Fahrpedalrohwert_01
if (addr == MSG_MOTOR_20) {
bool gas_pressed = ((GET_BYTES_04(to_push) >> 12) & 0xFF) != 0;
if (gas_pressed && !gas_pressed_prev) {
if (gas_pressed && !gas_pressed_prev && !(unsafe_mode & UNSAFE_DISABLE_DISENGAGE_ON_GAS)) {
controls_allowed = 0;
}
gas_pressed_prev = gas_pressed;
@@ -146,7 +188,7 @@ static int volkswagen_mqb_rx_hook(CAN_FIFOMailBox_TypeDef *to_push) {
// Signal: ESP_05.ESP_Fahrer_bremst
if (addr == MSG_ESP_05) {
bool brake_pressed = (GET_BYTE(to_push, 3) & 0x4) >> 2;
if (brake_pressed && (!brake_pressed_prev || volkswagen_moving)) {
if (brake_pressed && (!brake_pressed_prev || vehicle_moving)) {
controls_allowed = 0;
}
brake_pressed_prev = brake_pressed;
@@ -154,7 +196,74 @@ static int volkswagen_mqb_rx_hook(CAN_FIFOMailBox_TypeDef *to_push) {
// If there are HCA messages on bus 0 not sent by OP, there's a relay problem
if ((safety_mode_cnt > RELAY_TRNS_TIMEOUT) && (addr == MSG_HCA_01)) {
relay_malfunction = true;
relay_malfunction_set();
}
}
return valid;
}
static int volkswagen_pq_rx_hook(CAN_FIFOMailBox_TypeDef *to_push) {
bool valid = addr_safety_check(to_push, volkswagen_pq_rx_checks, VOLKSWAGEN_PQ_RX_CHECKS_LEN,
volkswagen_get_checksum, volkswagen_pq_compute_checksum, volkswagen_pq_get_counter);
if (valid) {
int bus = GET_BUS(to_push);
int addr = GET_ADDR(to_push);
// Update in-motion state by sampling front wheel speeds
// Signal: Bremse_3.Radgeschw__VL_4_1 (front left)
// Signal: Bremse_3.Radgeschw__VR_4_1 (front right)
if ((bus == 0) && (addr == MSG_BREMSE_3)) {
int wheel_speed_fl = (GET_BYTE(to_push, 0) | (GET_BYTE(to_push, 1) << 8)) >> 1;
int wheel_speed_fr = (GET_BYTE(to_push, 2) | (GET_BYTE(to_push, 3) << 8)) >> 1;
// Check for average front speed in excess of 0.3m/s, 1.08km/h
// DBC speed scale 0.01: 0.3m/s = 108, sum both wheels to compare
vehicle_moving = (wheel_speed_fl + wheel_speed_fr) > 216;
}
// Update driver input torque samples
// Signal: Lenkhilfe_3.LH3_LM (absolute torque)
// Signal: Lenkhilfe_3.LH3_LMSign (direction)
if ((bus == 0) && (addr == MSG_LENKHILFE_3)) {
int torque_driver_new = GET_BYTE(to_push, 2) | ((GET_BYTE(to_push, 3) & 0x3) << 8);
int sign = (GET_BYTE(to_push, 3) & 0x4) >> 2;
if (sign == 1) {
torque_driver_new *= -1;
}
update_sample(&torque_driver, torque_driver_new);
}
// Update ACC status from ECU for controls-allowed state
// Signal: Motor_2.GRA_Status
if ((bus == 0) && (addr == MSG_MOTOR_2)) {
int acc_status = (GET_BYTE(to_push, 2) & 0xC0) >> 6;
controls_allowed = ((acc_status == 1) || (acc_status == 2)) ? 1 : 0;
}
// Exit controls on rising edge of gas press
// Signal: Motor_3.Fahrpedal_Rohsignal
if ((bus == 0) && (addr == MSG_MOTOR_3)) {
int gas_pressed = (GET_BYTE(to_push, 2));
if (gas_pressed && !gas_pressed_prev && !(unsafe_mode & UNSAFE_DISABLE_DISENGAGE_ON_GAS)) {
controls_allowed = 0;
}
gas_pressed_prev = gas_pressed;
}
// Exit controls on rising edge of brake press
// Signal: Motor_2.Bremslichtschalter
if ((bus == 0) && (addr == MSG_MOTOR_2)) {
bool brake_pressed = (GET_BYTE(to_push, 2) & 0x1);
if (brake_pressed && (!(brake_pressed_prev) || vehicle_moving)) {
controls_allowed = 0;
}
brake_pressed_prev = brake_pressed;
}
// If there are HCA messages on bus 0 not sent by OP, there's a relay problem
if ((safety_mode_cnt > RELAY_TRNS_TIMEOUT) && (bus == 0) && (addr == MSG_HCA_1)) {
relay_malfunction_set();
}
}
return valid;
@@ -169,19 +278,19 @@ static bool volkswagen_steering_check(int desired_torque) {
violation |= max_limit_check(desired_torque, VOLKSWAGEN_MAX_STEER, -VOLKSWAGEN_MAX_STEER);
// *** torque rate limit check ***
violation |= driver_limit_check(desired_torque, volkswagen_desired_torque_last, &volkswagen_torque_driver,
violation |= driver_limit_check(desired_torque, desired_torque_last, &torque_driver,
VOLKSWAGEN_MAX_STEER, VOLKSWAGEN_MAX_RATE_UP, VOLKSWAGEN_MAX_RATE_DOWN,
VOLKSWAGEN_DRIVER_TORQUE_ALLOWANCE, VOLKSWAGEN_DRIVER_TORQUE_FACTOR);
volkswagen_desired_torque_last = desired_torque;
desired_torque_last = desired_torque;
// *** torque real time rate limit check ***
violation |= rt_rate_limit_check(desired_torque, volkswagen_rt_torque_last, VOLKSWAGEN_MAX_RT_DELTA);
violation |= rt_rate_limit_check(desired_torque, rt_torque_last, VOLKSWAGEN_MAX_RT_DELTA);
// every RT_INTERVAL set the new limits
uint32_t ts_elapsed = get_ts_elapsed(ts, volkswagen_ts_last);
uint32_t ts_elapsed = get_ts_elapsed(ts, ts_last);
if (ts_elapsed > VOLKSWAGEN_RT_INTERVAL) {
volkswagen_rt_torque_last = desired_torque;
volkswagen_ts_last = ts;
rt_torque_last = desired_torque;
ts_last = ts;
}
}
@@ -192,9 +301,9 @@ static bool volkswagen_steering_check(int desired_torque) {
// reset to 0 if either controls is not allowed or there's a violation
if (violation || !controls_allowed) {
volkswagen_desired_torque_last = 0;
volkswagen_rt_torque_last = 0;
volkswagen_ts_last = ts;
desired_torque_last = 0;
rt_torque_last = 0;
ts_last = ts;
}
return violation;
@@ -237,6 +346,44 @@ static int volkswagen_mqb_tx_hook(CAN_FIFOMailBox_TypeDef *to_send) {
return tx;
}
static int volkswagen_pq_tx_hook(CAN_FIFOMailBox_TypeDef *to_send) {
int addr = GET_ADDR(to_send);
int bus = GET_BUS(to_send);
int tx = 1;
if (!msg_allowed(addr, bus, VOLKSWAGEN_PQ_TX_MSGS, VOLKSWAGEN_PQ_TX_MSGS_LEN) || relay_malfunction) {
tx = 0;
}
// Safety check for HCA_1 Heading Control Assist torque
// Signal: HCA_1.LM_Offset (absolute torque)
// Signal: HCA_1.LM_Offsign (direction)
if (addr == MSG_HCA_1) {
int desired_torque = GET_BYTE(to_send, 2) | ((GET_BYTE(to_send, 3) & 0x7F) << 8);
desired_torque = desired_torque / 32; // DBC scale from PQ network to centi-Nm
int sign = (GET_BYTE(to_send, 3) & 0x80) >> 7;
if (sign == 1) {
desired_torque *= -1;
}
if (volkswagen_steering_check(desired_torque)) {
tx = 0;
}
}
// FORCE CANCEL: ensuring that only the cancel button press is sent when controls are off.
// This avoids unintended engagements while still allowing resume spam
if ((addr == MSG_GRA_NEU) && !controls_allowed) {
// disallow resume and set: bits 16 and 17
if ((GET_BYTE(to_send, 2) & 0x3) != 0) {
tx = 0;
}
}
// 1 allows the message through
return tx;
}
static int volkswagen_fwd_hook(int bus_num, CAN_FIFOMailBox_TypeDef *to_fwd) {
int addr = GET_ADDR(to_fwd);
int bus_fwd = -1;
@@ -275,3 +422,14 @@ const safety_hooks volkswagen_mqb_hooks = {
.addr_check = volkswagen_mqb_rx_checks,
.addr_check_len = sizeof(volkswagen_mqb_rx_checks) / sizeof(volkswagen_mqb_rx_checks[0]),
};
// Volkswagen PQ35/PQ46/NMS platforms
const safety_hooks volkswagen_pq_hooks = {
.init = volkswagen_pq_init,
.rx = volkswagen_pq_rx_hook,
.tx = volkswagen_pq_tx_hook,
.tx_lin = nooutput_tx_lin_hook,
.fwd = volkswagen_fwd_hook,
.addr_check = volkswagen_pq_rx_checks,
.addr_check_len = sizeof(volkswagen_pq_rx_checks) / sizeof(volkswagen_pq_rx_checks[0]),
};
+29 -3
View File
@@ -61,6 +61,8 @@ bool addr_safety_check(CAN_FIFOMailBox_TypeDef *to_push,
uint8_t (*get_checksum)(CAN_FIFOMailBox_TypeDef *to_push),
uint8_t (*compute_checksum)(CAN_FIFOMailBox_TypeDef *to_push),
uint8_t (*get_counter)(CAN_FIFOMailBox_TypeDef *to_push));
void relay_malfunction_set(void);
void relay_malfunction_reset(void);
typedef void (*safety_hook_init)(int16_t param);
typedef int (*rx_hook)(CAN_FIFOMailBox_TypeDef *to_push);
@@ -87,11 +89,35 @@ bool gas_interceptor_detected = false;
int gas_interceptor_prev = 0;
bool gas_pressed_prev = false;
bool brake_pressed_prev = false;
bool cruise_engaged_prev = false;
bool vehicle_moving = false;
// for torque-based safety modes
int desired_torque_last = 0; // last desired steer torque
int rt_torque_last = 0; // last desired torque for real time check
struct sample_t torque_meas; // last 3 motor torques produced by the eps
struct sample_t torque_driver; // last 3 driver torques measured
uint32_t ts_last = 0;
// This can be set with a USB command
// It enables features we consider to be unsafe, but understand others may have different opinions
// It is always 0 on mainline comma.ai openpilot
// If using this flag, be very careful about what happens if your fork wants to brake while the
// user is pressing the gas. Tesla is careful with this.
#define UNSAFE_DISABLE_DISENGAGE_ON_GAS 1
// If using this flag, make sure to communicate to your users that a stock safety feature is now disabled.
#define UNSAFE_DISABLE_STOCK_AEB 2
// If using this flag, be aware that harder braking is more likely to lead to rear endings,
// and that alone this flag doesn't make braking compliant because there's also a time element.
// See ISO 15622:2018 for more information.
#define UNSAFE_RAISE_LONGITUDINAL_LIMITS_TO_ISO_MAX 8
int unsafe_mode = 0;
// time since safety mode has been changed
uint32_t safety_mode_cnt = 0U;
// allow 1s of transition timeout after relay changes state before assessing malfunctioning
const uint32_t RELAY_TRNS_TIMEOUT = 1U;
// avg between 2 tracks
#define GET_INTERCEPTOR(msg) (((GET_BYTE((msg), 0) << 8) + GET_BYTE((msg), 1) + ((GET_BYTE((msg), 2) << 8) + GET_BYTE((msg), 3)) / 2 ) / 2)
+1
View File
@@ -110,6 +110,7 @@ void usb_cb_ep3_out(void *usbdata, int len, bool hardwired) {
UNUSED(len);
UNUSED(hardwired);
}
void usb_cb_ep3_out_complete(void) {}
int is_enumerated = 0;
void usb_cb_enumeration_complete(void) {
+49 -24
View File
@@ -4,7 +4,9 @@
# messages, print which bits in the interesting file have never appeared
# in the background files.
# Expects the CSV file to be in the format from can_logger.py
# Expects the CSV file to be in one of the following formats:
# can_logger.py
# Bus,MessageID,Message,MessageLength
# 0,0x292,0x040000001068,6
@@ -12,6 +14,10 @@
# Bus,MessageID,Message
# 0,344,c000c00000000000
# Cabana "Save Log" format
# time,addr,bus,data
# 240.47911496100002,53,0,0acc0ade0074bf9e
import csv
import sys
@@ -45,30 +51,49 @@ class Info():
def load(self, filename):
"""Given a CSV file, adds information about message IDs and their values."""
with open(filename, 'rb') as input:
with open(filename, 'r') as input:
reader = csv.reader(input)
next(reader, None) # skip the CSV header
for row in reader:
bus = row[0]
if row[1].startswith('0x'):
message_id = row[1][2:] # remove leading '0x'
else:
message_id = hex(int(row[1]))[2:] # old message IDs are in decimal
message_id = '%s:%s' % (bus, message_id)
if row[1].startswith('0x'):
data = row[2][2:] # remove leading '0x'
else:
data = row[2]
if message_id not in self.messages:
self.messages[message_id] = Message(message_id)
message = self.messages[message_id]
if data not in self.messages[message_id].data:
message.data[data] = True
bytes = bytearray.fromhex(data)
for i in range(len(bytes)):
message.ones[i] = message.ones[i] | int(bytes[i])
# Inverts the data and masks it to a byte to get the zeros as ones.
message.zeros[i] = message.zeros[i] | ( (~int(bytes[i])) & 0xff)
header = next(reader, None)
if header[0] == 'time':
self.cabana(reader)
else:
self.logger(reader)
def cabana(self, reader):
for row in reader:
bus = row[2]
message_id = hex(int(row[1]))[2:]
message_id = '%s:%s' % (bus, message_id)
data = row[3]
self.store(message_id, data)
def logger(self, reader):
for row in reader:
bus = row[0]
if row[1].startswith('0x'):
message_id = row[1][2:] # remove leading '0x'
else:
message_id = hex(int(row[1]))[2:] # old message IDs are in decimal
message_id = '%s:%s' % (bus, message_id)
if row[1].startswith('0x'):
data = row[2][2:] # remove leading '0x'
else:
data = row[2]
self.store(message_id, data)
def store(self, message_id, data):
if message_id not in self.messages:
self.messages[message_id] = Message(message_id)
message = self.messages[message_id]
if data not in self.messages[message_id].data:
message.data[data] = True
bytes = bytearray.fromhex(data)
for i in range(len(bytes)):
message.ones[i] = message.ones[i] | int(bytes[i])
# Inverts the data and masks it to a byte to get the zeros as ones.
message.zeros[i] = message.zeros[i] | ( (~int(bytes[i])) & 0xff)
def PrintUnique(interesting_file, background_files):
background = Info()
+14 -5
View File
@@ -9,6 +9,7 @@ import os
import time
import traceback
import subprocess
import sys
from .dfu import PandaDFU
from .esptool import ESPROM, CesantaFlasher # noqa: F401
from .flash_release import flash_release # noqa: F401
@@ -117,7 +118,6 @@ class Panda(object):
SAFETY_GM = 4
SAFETY_HONDA_BOSCH_GIRAFFE = 5
SAFETY_FORD = 6
SAFETY_CADILLAC = 7
SAFETY_HYUNDAI = 8
SAFETY_CHRYSLER = 9
SAFETY_TESLA = 10
@@ -129,6 +129,7 @@ class Panda(object):
SAFETY_GM_ASCM = 18
SAFETY_NOOUTPUT = 19
SAFETY_HONDA_BOSCH_HARNESS = 20
SAFETY_VOLKSWAGEN_PQ = 21
SAFETY_SUBARU_LEGACY = 22
SERIAL_DEBUG = 0
@@ -187,6 +188,8 @@ class Panda(object):
self.bootstub = device.getProductID() == 0xddee
self.legacy = (device.getbcdDevice() != 0x2300)
self._handle = device.open()
if not sys.platform in ["win32", "cygwin", "msys"]:
self._handle.setAutoDetachKernelDriver(True)
if claim:
self._handle.claimInterface(0)
#self._handle.setInterfaceAltSetting(0, 0) #Issue in USB stack
@@ -296,6 +299,7 @@ class Panda(object):
self.reconnect()
def recover(self, timeout=None):
self.reset(enter_bootstub=True)
self.reset(enter_bootloader=True)
t_start = time.time()
while len(PandaDFU.list()) == 0:
@@ -476,7 +480,12 @@ class Panda(object):
# ******************* can *******************
def can_send_many(self, arr):
# The panda will NAK CAN writes when there is CAN congestion.
# libusb will try to send it again, with a max timeout.
# Timeout is in ms. If set to 0, the timeout is infinite.
CAN_SEND_TIMEOUT_MS = 10
def can_send_many(self, arr, timeout=CAN_SEND_TIMEOUT_MS):
snds = []
transmit = 1
extended = 4
@@ -499,13 +508,13 @@ class Panda(object):
for s in snds:
self._handle.bulkWrite(3, s)
else:
self._handle.bulkWrite(3, b''.join(snds))
self._handle.bulkWrite(3, b''.join(snds), timeout=timeout)
break
except (usb1.USBErrorIO, usb1.USBErrorOverflow):
print("CAN: BAD SEND MANY, RETRYING")
def can_send(self, addr, dat, bus):
self.can_send_many([[addr, None, dat, bus]])
def can_send(self, addr, dat, bus, timeout=CAN_SEND_TIMEOUT_MS):
self.can_send_many([[addr, None, dat, bus]], timeout=timeout)
def can_recv(self):
dat = bytearray()

Some files were not shown because too many files have changed in this diff Show More