Fingerprinting v2 support for Nissan vehicles (#22655)

* Add Nissan FPv2

* Update Nissan version response

* Add second Nissan FPv2 query

* Add multiple offsets for Nissan

* Nissan offset fix

* Add Nissan diagnostic request

* Use 21 83 for Nissan version request

* Add partial 2018 Leaf FPv2

* Update 2018 Leaf FPv2

* Nissan FPv2: more RX offsets, add no diagostic request scan for 0x20

* Add FPv2 imports to Nissan values

* Change LEAF to LEAF_IC

It is an instrument cluster leaf. With this minor change it works :).

* fixed ecu addr for nissan eps

* Remove FW not used for fpv2

* Remove unused offsets

* add fw versions for 2018 Nissan Leaf JP

* add standard ecu fw query

* add esp fw

* add nissan xtrail

* Add missing ESP FW for 2018 Nissan Leaf IC

* Add fwdCamera FW for Xtrail 2017

* add missing comma

* Add 0x8 default offset

needed e.g. for xtrail engine ecu

* Apply suggestions from code review

Co-authored-by: Willem Melching <willem.melching@gmail.com>

* Fix variable naming

* remove unnecessary part of standard fw query

* add fw versions for CAN-GW ECU

* transmission eco does not reliable answer -> remove

* add Altima FWs (part 1)

* add Altima EPS FW

* Remove NISSAN_KWP_DIAGNOSTIC_REQUEST and cleanup

* Revert "Remove NISSAN_KWP_DIAGNOSTIC_REQUEST and cleanup"

This reverts commit 808d6f1562.

* cleanup

Co-authored-by: Martin Lillepuu <martin@mlp.ee>
Co-authored-by: Julian Pieles <julian@pieles.digital>
Co-authored-by: Willem Melching <willem.melching@gmail.com>
pull/22826/head
robin-reckmann 2021-11-08 18:51:59 +09:00 committed by GitHub
parent e29cc1c2ee
commit e2288371f2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 90 additions and 1 deletions

View File

@ -71,6 +71,19 @@ MAZDA_VERSION_REQUEST = bytes([uds.SERVICE_TYPE.READ_DATA_BY_IDENTIFIER]) + \
MAZDA_VERSION_RESPONSE = bytes([uds.SERVICE_TYPE.READ_DATA_BY_IDENTIFIER + 0x40]) + \
p16(uds.DATA_IDENTIFIER_TYPE.VEHICLE_MANUFACTURER_ECU_SOFTWARE_NUMBER)
NISSAN_DIAGNOSTIC_REQUEST_KWP = bytes([uds.SERVICE_TYPE.DIAGNOSTIC_SESSION_CONTROL, 0xc0])
NISSAN_DIAGNOSTIC_RESPONSE_KWP = bytes([uds.SERVICE_TYPE.DIAGNOSTIC_SESSION_CONTROL + 0x40, 0xc0])
NISSAN_VERSION_REQUEST_KWP = b'\x21\x83'
NISSAN_VERSION_RESPONSE_KWP = b'\x61\x83'
NISSAN_VERSION_REQUEST_STANDARD = bytes([uds.SERVICE_TYPE.READ_DATA_BY_IDENTIFIER]) + \
p16(uds.DATA_IDENTIFIER_TYPE.VEHICLE_MANUFACTURER_ECU_SOFTWARE_NUMBER)
NISSAN_VERSION_RESPONSE_STANDARD = bytes([uds.SERVICE_TYPE.READ_DATA_BY_IDENTIFIER + 0x40]) + \
p16(uds.DATA_IDENTIFIER_TYPE.VEHICLE_MANUFACTURER_ECU_SOFTWARE_NUMBER)
NISSAN_RX_OFFSET = 0x20
# brand, request, response, response offset
REQUESTS = [
# Hyundai
@ -131,7 +144,26 @@ REQUESTS = [
[MAZDA_VERSION_REQUEST],
[MAZDA_VERSION_RESPONSE],
DEFAULT_RX_OFFSET,
)
),
# Nissan
(
"nissan",
[NISSAN_DIAGNOSTIC_REQUEST_KWP, NISSAN_VERSION_REQUEST_KWP],
[NISSAN_DIAGNOSTIC_RESPONSE_KWP, NISSAN_VERSION_RESPONSE_KWP],
DEFAULT_RX_OFFSET,
),
(
"nissan",
[NISSAN_DIAGNOSTIC_REQUEST_KWP, NISSAN_VERSION_REQUEST_KWP],
[NISSAN_DIAGNOSTIC_RESPONSE_KWP, NISSAN_VERSION_RESPONSE_KWP],
NISSAN_RX_OFFSET,
),
(
"nissan",
[NISSAN_VERSION_REQUEST_STANDARD],
[NISSAN_VERSION_RESPONSE_STANDARD],
NISSAN_RX_OFFSET,
),
]

View File

@ -1,6 +1,8 @@
# flake8: noqa
from selfdrive.car import dbc_dict
from cereal import car
Ecu = car.CarParams.Ecu
class CarControllerParams:
@ -55,6 +57,61 @@ FINGERPRINTS = {
]
}
FW_VERSIONS = {
CAR.ALTIMA: {
(Ecu.fwdCamera, 0x707, None): [
b'284N86CA1D',
],
(Ecu.eps, 0x742, None): [
b'6CA2B\xa9A\x02\x02G8A89P90D6A\x00\x00\x01\x80',
],
(Ecu.engine, 0x7e0, None): [
b'237109HE2B',
],
(Ecu.gateway, 0x18dad0f1, None): [
b'284U29HE0A',
],
},
CAR.LEAF_IC: {
(Ecu.fwdCamera, 0x707, None): [
b'5SH1BDB\x04\x18\x00\x00\x00\x00\x00_-?\x04\x91\xf2\x00\x00\x00\x80',
b'5SK0ADB\x04\x18\x00\x00\x00\x00\x00_(5\x07\x9aQ\x00\x00\x00\x80',
],
(Ecu.esp, 0x740, None): [
b'476605SH1D',
b'476605SK2A',
],
(Ecu.eps, 0x742, None): [
b'5SH2A\x99A\x05\x02N123F\x15\x81\x00\x00\x00\x00\x00\x00\x00\x80',
b'5SK3A\x99A\x05\x02N123F\x15u\x00\x00\x00\x00\x00\x00\x00\x80',
],
(Ecu.gateway, 0x18dad0f1, None): [
b'284U25SH3A',
b'284U25SK2D',
],
},
CAR.XTRAIL: {
(Ecu.fwdCamera, 0x707, None): [
b'284N86FR2A',
],
(Ecu.esp, 0x740, None): [
b'6FU1BD\x11\x02\x00\x02e\x95e\x80iX#\x01\x00\x00\x00\x00\x00\x80',
],
(Ecu.eps, 0x742, None): [
b'6FP2A\x99A\x05\x02N123F\x18\x02\x00\x00\x00\x00\x00\x00\x00\x80',
],
(Ecu.combinationMeter, 0x743, None): [
b'6FR2A\x18B\x05\x17\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80',
],
(Ecu.engine, 0x7e0, None): [
b'6FU9B\xa0A\x06\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80',
],
(Ecu.gateway, 0x18dad0f1, None): [
b'284U26FR0E',
],
},
}
DBC = {
CAR.XTRAIL: dbc_dict('nissan_x_trail_2017', None),
CAR.LEAF: dbc_dict('nissan_leaf_2018', None),