openpilot is an open source driver assistance system. openpilot performs the functions of Automated Lane Centering and Adaptive Cruise Control for over 200 supported car makes and models.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

70 lines
2.0 KiB

2 years ago
import jinja2
from cereal import car
Ecu = car.CarParams.Ecu
from openpilot.selfdrive.car.interfaces import get_interface_attr
CARS = get_interface_attr('CAR')
FW_VERSIONS = get_interface_attr('FW_VERSIONS')
FINGERPRINTS = get_interface_attr('FINGERPRINTS')
PLATFORM_TO_PYTHON_CAR_NAME = {brand: {car.value: car.name for car in CARS[brand]} for brand in CARS}
ECU_NUMBER_TO_NAME = {v: k for k, v in Ecu.schema.enumerants.items()}
2 years ago
FINGERPRINTS_PY_TEMPLATE = """{% if FINGERPRINTS[brand] %}
2 years ago
# ruff: noqa: E501
{% endif %}
2 years ago
{% if FW_VERSIONS[brand] %}
2 years ago
from cereal import car
{% endif %}
from openpilot.selfdrive.car.{{brand}}.values import CAR
2 years ago
{% if FW_VERSIONS[brand] %}
2 years ago
Ecu = car.CarParams.Ecu
{% endif %}
2 years ago
{% if FINGERPRINTS[brand] %}
2 years ago
FINGERPRINTS = {
{% for car, fingerprints in FINGERPRINTS[brand].items() %}
CAR.{{PLATFORM_TO_PYTHON_CAR_NAME[brand][car]}}: [
{% for fingerprint in fingerprints %}
{
{% for key, value in fingerprint.items() %}{{key}}: {{value}}{% if not loop.last %}, {% endif %}{% endfor %}
},
{% endfor %}
2 years ago
],
{% endfor %}
}
{% endif %}
2 years ago
{% if FW_VERSIONS[brand] %}
2 years ago
FW_VERSIONS = {
{% for car, _ in FW_VERSIONS[brand].items() %}
CAR.{{PLATFORM_TO_PYTHON_CAR_NAME[brand][car]}}: {
{% for key, fw_versions in FW_VERSIONS[brand][car].items() %}
2 years ago
(Ecu.{{ECU_NUMBER_TO_NAME[key[0]]}}, 0x{{"%0x" | format(key[1] | int)}}, \
{% if key[2] %}0x{{"%0x" | format(key[2] | int)}}{% else %}{{key[2]}}{% endif %}): [
{% for fw_version in fw_versions %}
{{fw_version}},
2 years ago
{% endfor %}
],
{% endfor %}
2 years ago
},
{% endfor %}
}
{% endif %}
"""
2 years ago
2 years ago
def format_brand_fw_versions(brand):
2 years ago
with open(f"selfdrive/car/{brand}/fingerprints.py", "w") as f:
template = jinja2.Template(FINGERPRINTS_PY_TEMPLATE, trim_blocks=True)
2 years ago
f.write(template.render(brand=brand, ECU_NUMBER_TO_NAME=ECU_NUMBER_TO_NAME, PLATFORM_TO_PYTHON_CAR_NAME=PLATFORM_TO_PYTHON_CAR_NAME,
FINGERPRINTS=FINGERPRINTS, FW_VERSIONS=FW_VERSIONS))
2 years ago
2 years ago
if __name__ == "__main__":
for brand in FW_VERSIONS.keys():
format_brand_fw_versions(brand)