selfdrive.car package
Subpackages
- selfdrive.car.body package
- selfdrive.car.chrysler package
- Submodules
- selfdrive.car.chrysler.carcontroller module
- selfdrive.car.chrysler.carstate module
- selfdrive.car.chrysler.chryslercan module
- selfdrive.car.chrysler.interface module
- selfdrive.car.chrysler.radar_interface module
- selfdrive.car.chrysler.values module
- Module contents
- selfdrive.car.ford package
- Submodules
- selfdrive.car.ford.carcontroller module
- selfdrive.car.ford.carstate module
- selfdrive.car.ford.fordcan module
- selfdrive.car.ford.interface module
- selfdrive.car.ford.radar_interface module
- selfdrive.car.ford.values module
CAR
CarControllerParams
CarControllerParams.ACCEL_MAX
CarControllerParams.ACCEL_MIN
CarControllerParams.ACC_CONTROL_STEP
CarControllerParams.ACC_UI_STEP
CarControllerParams.ANGLE_RATE_LIMIT_DOWN
CarControllerParams.ANGLE_RATE_LIMIT_UP
CarControllerParams.BUTTONS_STEP
CarControllerParams.CURVATURE_ERROR
CarControllerParams.CURVATURE_MAX
CarControllerParams.INACTIVE_GAS
CarControllerParams.LKAS_UI_STEP
CarControllerParams.LKA_STEP
CarControllerParams.MIN_GAS
CarControllerParams.STEER_DRIVER_ALLOWANCE
CarControllerParams.STEER_STEP
Footnote
FordCarInfo
RADAR
- Module contents
- selfdrive.car.gm package
- Submodules
- selfdrive.car.gm.carcontroller module
- selfdrive.car.gm.carstate module
- selfdrive.car.gm.gmcan module
create_acc_dashboard_command()
create_adas_accelerometer_speed_status()
create_adas_headlights_status()
create_adas_keepalive()
create_adas_steering_status()
create_adas_time_status()
create_buttons()
create_friction_brake_command()
create_gas_regen_command()
create_lka_icon_command()
create_pscm_status()
create_steering_control()
- selfdrive.car.gm.interface module
- selfdrive.car.gm.radar_interface module
- selfdrive.car.gm.values module
AccState
CAR
CanBus
CarControllerParams
CarControllerParams.ACCEL_MAX
CarControllerParams.ACCEL_MIN
CarControllerParams.ADAS_KEEPALIVE_STEP
CarControllerParams.CAMERA_KEEPALIVE_STEP
CarControllerParams.INACTIVE_STEER_STEP
CarControllerParams.NEAR_STOP_BRAKE_PHASE
CarControllerParams.STEER_DELTA_DOWN
CarControllerParams.STEER_DELTA_UP
CarControllerParams.STEER_DRIVER_ALLOWANCE
CarControllerParams.STEER_DRIVER_FACTOR
CarControllerParams.STEER_DRIVER_MULTIPLIER
CarControllerParams.STEER_MAX
CarControllerParams.STEER_STEP
CruiseButtons
Footnote
GMCarInfo
- Module contents
- selfdrive.car.honda package
- Submodules
- selfdrive.car.honda.carcontroller module
- selfdrive.car.honda.carstate module
- selfdrive.car.honda.hondacan module
- selfdrive.car.honda.interface module
- selfdrive.car.honda.radar_interface module
- selfdrive.car.honda.values module
CAR
CarControllerParams
CarControllerParams.BOSCH_ACCEL_MAX
CarControllerParams.BOSCH_ACCEL_MIN
CarControllerParams.BOSCH_GAS_LOOKUP_BP
CarControllerParams.BOSCH_GAS_LOOKUP_V
CarControllerParams.NIDEC_ACCEL_LOOKUP_BP
CarControllerParams.NIDEC_ACCEL_LOOKUP_V
CarControllerParams.NIDEC_ACCEL_MAX
CarControllerParams.NIDEC_ACCEL_MIN
CarControllerParams.NIDEC_BRAKE_MAX
CarControllerParams.NIDEC_GAS_MAX
CarControllerParams.NIDEC_MAX_ACCEL_BP
CarControllerParams.NIDEC_MAX_ACCEL_V
CruiseButtons
Footnote
HondaCarInfo
HondaFlags
- Module contents
- selfdrive.car.hyundai package
- Submodules
- selfdrive.car.hyundai.carcontroller module
- selfdrive.car.hyundai.carstate module
- selfdrive.car.hyundai.hyundaican module
- selfdrive.car.hyundai.hyundaicanfd module
- selfdrive.car.hyundai.interface module
- selfdrive.car.hyundai.radar_interface module
- selfdrive.car.hyundai.values module
Buttons
CAR
CAR.ELANTRA
CAR.ELANTRA_2021
CAR.ELANTRA_HEV_2021
CAR.GENESIS_G70
CAR.GENESIS_G70_2020
CAR.GENESIS_G80
CAR.GENESIS_G90
CAR.GENESIS_GV60_EV_1ST_GEN
CAR.GENESIS_GV70_1ST_GEN
CAR.GENESIS_GV80
CAR.HYUNDAI_GENESIS
CAR.IONIQ
CAR.IONIQ_5
CAR.IONIQ_6
CAR.IONIQ_EV_2020
CAR.IONIQ_EV_LTD
CAR.IONIQ_HEV_2022
CAR.IONIQ_PHEV
CAR.IONIQ_PHEV_2019
CAR.KIA_CARNIVAL_4TH_GEN
CAR.KIA_CEED
CAR.KIA_EV6
CAR.KIA_FORTE
CAR.KIA_K5_2021
CAR.KIA_K5_HEV_2020
CAR.KIA_NIRO_EV
CAR.KIA_NIRO_EV_2ND_GEN
CAR.KIA_NIRO_HEV_2021
CAR.KIA_NIRO_HEV_2ND_GEN
CAR.KIA_NIRO_PHEV
CAR.KIA_OPTIMA_G4
CAR.KIA_OPTIMA_G4_FL
CAR.KIA_OPTIMA_H
CAR.KIA_SELTOS
CAR.KIA_SORENTO
CAR.KIA_SORENTO_4TH_GEN
CAR.KIA_SORENTO_PHEV_4TH_GEN
CAR.KIA_SPORTAGE_5TH_GEN
CAR.KIA_SPORTAGE_HYBRID_5TH_GEN
CAR.KIA_STINGER
CAR.KIA_STINGER_2022
CAR.KONA
CAR.KONA_EV
CAR.KONA_EV_2022
CAR.KONA_HEV
CAR.PALISADE
CAR.SANTA_CRUZ_1ST_GEN
CAR.SANTA_FE
CAR.SANTA_FE_2022
CAR.SANTA_FE_HEV_2022
CAR.SANTA_FE_PHEV_2022
CAR.SONATA
CAR.SONATA_HYBRID
CAR.SONATA_LF
CAR.TUCSON
CAR.TUCSON_4TH_GEN
CAR.TUCSON_HYBRID_4TH_GEN
CAR.VELOSTER
CarControllerParams
Footnote
HyundaiCarInfo
HyundaiFlags
get_platform_codes()
match_fw_to_car_fuzzy()
- Module contents
- selfdrive.car.mazda package
- Submodules
- selfdrive.car.mazda.carcontroller module
- selfdrive.car.mazda.carstate module
- selfdrive.car.mazda.interface module
- selfdrive.car.mazda.mazdacan module
- selfdrive.car.mazda.radar_interface module
- selfdrive.car.mazda.values module
- Module contents
- selfdrive.car.mock package
- selfdrive.car.nissan package
- selfdrive.car.subaru package
- Submodules
- selfdrive.car.subaru.carcontroller module
- selfdrive.car.subaru.carstate module
- selfdrive.car.subaru.interface module
- selfdrive.car.subaru.radar_interface module
- selfdrive.car.subaru.subarucan module
- selfdrive.car.subaru.values module
CAR
CanBus
CarControllerParams
CarControllerParams.BRAKE_LOOKUP_BP
CarControllerParams.BRAKE_LOOKUP_V
CarControllerParams.BRAKE_MAX
CarControllerParams.BRAKE_MIN
CarControllerParams.RPM_INACTIVE
CarControllerParams.RPM_LOOKUP_BP
CarControllerParams.RPM_LOOKUP_V
CarControllerParams.RPM_MAX
CarControllerParams.RPM_MIN
CarControllerParams.THROTTLE_ENGINE_BRAKE
CarControllerParams.THROTTLE_INACTIVE
CarControllerParams.THROTTLE_LOOKUP_BP
CarControllerParams.THROTTLE_LOOKUP_V
CarControllerParams.THROTTLE_MAX
CarControllerParams.THROTTLE_MIN
Footnote
SubaruCarInfo
SubaruFlags
- Module contents
- selfdrive.car.tesla package
- selfdrive.car.toyota package
- Submodules
- selfdrive.car.toyota.carcontroller module
- selfdrive.car.toyota.carstate module
- selfdrive.car.toyota.interface module
- selfdrive.car.toyota.radar_interface module
- selfdrive.car.toyota.toyotacan module
- selfdrive.car.toyota.values module
CAR
CAR.ALPHARDH_TSS2
CAR.ALPHARD_TSS2
CAR.AVALON
CAR.AVALONH_2019
CAR.AVALONH_TSS2
CAR.AVALON_2019
CAR.AVALON_TSS2
CAR.CAMRY
CAR.CAMRYH
CAR.CAMRYH_TSS2
CAR.CAMRY_TSS2
CAR.CHR
CAR.CHRH
CAR.CHRH_TSS2
CAR.CHR_TSS2
CAR.COROLLA
CAR.COROLLAH_TSS2
CAR.COROLLA_TSS2
CAR.HIGHLANDER
CAR.HIGHLANDERH
CAR.HIGHLANDERH_TSS2
CAR.HIGHLANDER_TSS2
CAR.LEXUS_CTH
CAR.LEXUS_ES
CAR.LEXUS_ESH
CAR.LEXUS_ESH_TSS2
CAR.LEXUS_ES_TSS2
CAR.LEXUS_IS
CAR.LEXUS_IS_TSS2
CAR.LEXUS_NX
CAR.LEXUS_NXH
CAR.LEXUS_NXH_TSS2
CAR.LEXUS_NX_TSS2
CAR.LEXUS_RC
CAR.LEXUS_RX
CAR.LEXUS_RXH
CAR.LEXUS_RXH_TSS2
CAR.LEXUS_RX_TSS2
CAR.MIRAI
CAR.PRIUS
CAR.PRIUS_TSS2
CAR.PRIUS_V
CAR.RAV4
CAR.RAV4H
CAR.RAV4H_TSS2
CAR.RAV4H_TSS2_2022
CAR.RAV4H_TSS2_2023
CAR.RAV4_TSS2
CAR.RAV4_TSS2_2022
CAR.RAV4_TSS2_2023
CAR.SIENNA
CarControllerParams
Footnote
ToyotaCarInfo
ToyotaFlags
- Module contents
- selfdrive.car.volkswagen package
- Submodules
- selfdrive.car.volkswagen.carcontroller module
- selfdrive.car.volkswagen.carstate module
- selfdrive.car.volkswagen.interface module
- selfdrive.car.volkswagen.mqbcan module
- selfdrive.car.volkswagen.pqcan module
- selfdrive.car.volkswagen.radar_interface module
- selfdrive.car.volkswagen.values module
Button
CANBUS
CAR
CAR.ARTEON_MK1
CAR.ATLAS_MK1
CAR.AUDI_A3_MK3
CAR.AUDI_Q2_MK1
CAR.AUDI_Q3_MK2
CAR.CRAFTER_MK2
CAR.GOLF_MK7
CAR.JETTA_MK7
CAR.PASSAT_MK8
CAR.PASSAT_NMS
CAR.POLO_MK6
CAR.SEAT_ATECA_MK1
CAR.SEAT_LEON_MK3
CAR.SHARAN_MK2
CAR.SKODA_FABIA_MK4
CAR.SKODA_KAMIQ_MK1
CAR.SKODA_KAROQ_MK1
CAR.SKODA_KODIAQ_MK1
CAR.SKODA_OCTAVIA_MK3
CAR.SKODA_SCALA_MK1
CAR.SKODA_SUPERB_MK3
CAR.TAOS_MK1
CAR.TCROSS_MK1
CAR.TIGUAN_MK2
CAR.TOURAN_MK2
CAR.TRANSPORTER_T61
CAR.TROC_MK1
CarControllerParams
CarControllerParams.ACCEL_MAX
CarControllerParams.ACCEL_MIN
CarControllerParams.ACC_CONTROL_STEP
CarControllerParams.STEER_DRIVER_FACTOR
CarControllerParams.STEER_DRIVER_MULTIPLIER
CarControllerParams.STEER_MAX
CarControllerParams.STEER_STEP
CarControllerParams.STEER_TIME_ALERT
CarControllerParams.STEER_TIME_MAX
CarControllerParams.STEER_TIME_STUCK_TORQUE
Footnote
VWCarInfo
- Module contents
Submodules
selfdrive.car.car_helpers module
- selfdrive.car.car_helpers.can_fingerprint(next_can: Callable) Tuple[str | None, Dict[int, dict]] [source]
selfdrive.car.disable_ecu module
- selfdrive.car.disable_ecu.disable_ecu(logcan, sendcan, bus=0, addr=2000, sub_addr=None, com_cont_req=b'(\x83\x01', timeout=0.1, retry=10, debug=False)[source]
Silence an ECU by disabling sending and receiving messages using UDS 0x28. The ECU will stay silent as long as openpilot keeps sending Tester Present.
This is used to disable the radar in some cars. Openpilot will emulate the radar. WARNING: THIS DISABLES AEB!
selfdrive.car.docs module
selfdrive.car.docs_definitions module
- class selfdrive.car.docs_definitions.Accessory(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
Bases:
EnumBase
- comma_power_v2 = BasePart(name='comma power v2', parts=[])
- harness_box = BasePart(name='harness box', parts=[])
- class selfdrive.car.docs_definitions.BaseCarHarness(name: str, parts: List[enum.Enum] = <factory>, has_connector: bool = True)[source]
Bases:
BasePart
- has_connector: bool = True
- parts: List[Enum]
- class selfdrive.car.docs_definitions.BasePart(name: str, parts: List[enum.Enum] = <factory>)[source]
Bases:
object
- name: str
- parts: List[Enum]
- class selfdrive.car.docs_definitions.Cable(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
Bases:
EnumBase
- long_obdc_cable = BasePart(name='long OBD-C cable', parts=[])
- obd_c_cable_1_5ft = BasePart(name='OBD-C cable (1.5 ft)', parts=[])
- right_angle_obd_c_cable_1_5ft = BasePart(name='right angle OBD-C cable (1.5 ft)', parts=[])
- rj45_cable_7ft = BasePart(name='RJ45 cable (7 ft)', parts=[])
- usb_a_2_a_cable = BasePart(name='USB A-A cable', parts=[])
- usbc_coupler = BasePart(name='USB-C coupler', parts=[])
- usbc_otg_cable = BasePart(name='USB C OTG cable', parts=[])
- class selfdrive.car.docs_definitions.CarFootnote(text, column, docs_only, shop_footnote)
Bases:
tuple
- column
Alias for field number 1
- docs_only
Alias for field number 2
- shop_footnote
Alias for field number 3
- text
Alias for field number 0
- class selfdrive.car.docs_definitions.CarHarness(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
Bases:
EnumBase
- bosch_a = BaseCarHarness(name='Honda Bosch A connector', parts=[<Accessory.harness_box: BasePart(name='harness box', parts=[])>, <Accessory.comma_power_v2: BasePart(name='comma power v2', parts=[])>, <Cable.rj45_cable_7ft: BasePart(name='RJ45 cable (7 ft)', parts=[])>], has_connector=True)
- bosch_b = BaseCarHarness(name='Honda Bosch B connector', parts=[<Accessory.harness_box: BasePart(name='harness box', parts=[])>, <Accessory.comma_power_v2: BasePart(name='comma power v2', parts=[])>, <Cable.rj45_cable_7ft: BasePart(name='RJ45 cable (7 ft)', parts=[])>], has_connector=True)
- custom = BaseCarHarness(name='Developer connector', parts=[<Accessory.harness_box: BasePart(name='harness box', parts=[])>, <Accessory.comma_power_v2: BasePart(name='comma power v2', parts=[])>, <Cable.rj45_cable_7ft: BasePart(name='RJ45 cable (7 ft)', parts=[])>], has_connector=True)
- fca = BaseCarHarness(name='FCA connector', parts=[<Accessory.harness_box: BasePart(name='harness box', parts=[])>, <Accessory.comma_power_v2: BasePart(name='comma power v2', parts=[])>, <Cable.rj45_cable_7ft: BasePart(name='RJ45 cable (7 ft)', parts=[])>], has_connector=True)
- ford_q3 = BaseCarHarness(name='Ford Q3 connector', parts=[<Accessory.harness_box: BasePart(name='harness box', parts=[])>, <Accessory.comma_power_v2: BasePart(name='comma power v2', parts=[])>, <Cable.rj45_cable_7ft: BasePart(name='RJ45 cable (7 ft)', parts=[])>], has_connector=True)
- ford_q4 = BaseCarHarness(name='Ford Q4 connector', parts=[<Accessory.harness_box: BasePart(name='harness box', parts=[])>, <Accessory.comma_power_v2: BasePart(name='comma power v2', parts=[])>, <Cable.rj45_cable_7ft: BasePart(name='RJ45 cable (7 ft)', parts=[])>], has_connector=True)
- gm = BaseCarHarness(name='GM connector', parts=[<Accessory.harness_box: BasePart(name='harness box', parts=[])>, <Accessory.comma_power_v2: BasePart(name='comma power v2', parts=[])>, <Cable.rj45_cable_7ft: BasePart(name='RJ45 cable (7 ft)', parts=[])>], has_connector=True)
- hyundai_a = BaseCarHarness(name='Hyundai A connector', parts=[<Accessory.harness_box: BasePart(name='harness box', parts=[])>, <Accessory.comma_power_v2: BasePart(name='comma power v2', parts=[])>, <Cable.rj45_cable_7ft: BasePart(name='RJ45 cable (7 ft)', parts=[])>], has_connector=True)
- hyundai_b = BaseCarHarness(name='Hyundai B connector', parts=[<Accessory.harness_box: BasePart(name='harness box', parts=[])>, <Accessory.comma_power_v2: BasePart(name='comma power v2', parts=[])>, <Cable.rj45_cable_7ft: BasePart(name='RJ45 cable (7 ft)', parts=[])>], has_connector=True)
- hyundai_c = BaseCarHarness(name='Hyundai C connector', parts=[<Accessory.harness_box: BasePart(name='harness box', parts=[])>, <Accessory.comma_power_v2: BasePart(name='comma power v2', parts=[])>, <Cable.rj45_cable_7ft: BasePart(name='RJ45 cable (7 ft)', parts=[])>], has_connector=True)
- hyundai_d = BaseCarHarness(name='Hyundai D connector', parts=[<Accessory.harness_box: BasePart(name='harness box', parts=[])>, <Accessory.comma_power_v2: BasePart(name='comma power v2', parts=[])>, <Cable.rj45_cable_7ft: BasePart(name='RJ45 cable (7 ft)', parts=[])>], has_connector=True)
- hyundai_e = BaseCarHarness(name='Hyundai E connector', parts=[<Accessory.harness_box: BasePart(name='harness box', parts=[])>, <Accessory.comma_power_v2: BasePart(name='comma power v2', parts=[])>, <Cable.rj45_cable_7ft: BasePart(name='RJ45 cable (7 ft)', parts=[])>], has_connector=True)
- hyundai_f = BaseCarHarness(name='Hyundai F connector', parts=[<Accessory.harness_box: BasePart(name='harness box', parts=[])>, <Accessory.comma_power_v2: BasePart(name='comma power v2', parts=[])>, <Cable.rj45_cable_7ft: BasePart(name='RJ45 cable (7 ft)', parts=[])>], has_connector=True)
- hyundai_g = BaseCarHarness(name='Hyundai G connector', parts=[<Accessory.harness_box: BasePart(name='harness box', parts=[])>, <Accessory.comma_power_v2: BasePart(name='comma power v2', parts=[])>, <Cable.rj45_cable_7ft: BasePart(name='RJ45 cable (7 ft)', parts=[])>], has_connector=True)
- hyundai_h = BaseCarHarness(name='Hyundai H connector', parts=[<Accessory.harness_box: BasePart(name='harness box', parts=[])>, <Accessory.comma_power_v2: BasePart(name='comma power v2', parts=[])>, <Cable.rj45_cable_7ft: BasePart(name='RJ45 cable (7 ft)', parts=[])>], has_connector=True)
- hyundai_i = BaseCarHarness(name='Hyundai I connector', parts=[<Accessory.harness_box: BasePart(name='harness box', parts=[])>, <Accessory.comma_power_v2: BasePart(name='comma power v2', parts=[])>, <Cable.rj45_cable_7ft: BasePart(name='RJ45 cable (7 ft)', parts=[])>], has_connector=True)
- hyundai_j = BaseCarHarness(name='Hyundai J connector', parts=[<Accessory.harness_box: BasePart(name='harness box', parts=[])>, <Accessory.comma_power_v2: BasePart(name='comma power v2', parts=[])>, <Cable.rj45_cable_7ft: BasePart(name='RJ45 cable (7 ft)', parts=[])>], has_connector=True)
- hyundai_k = BaseCarHarness(name='Hyundai K connector', parts=[<Accessory.harness_box: BasePart(name='harness box', parts=[])>, <Accessory.comma_power_v2: BasePart(name='comma power v2', parts=[])>, <Cable.rj45_cable_7ft: BasePart(name='RJ45 cable (7 ft)', parts=[])>], has_connector=True)
- hyundai_l = BaseCarHarness(name='Hyundai L connector', parts=[<Accessory.harness_box: BasePart(name='harness box', parts=[])>, <Accessory.comma_power_v2: BasePart(name='comma power v2', parts=[])>, <Cable.rj45_cable_7ft: BasePart(name='RJ45 cable (7 ft)', parts=[])>], has_connector=True)
- hyundai_m = BaseCarHarness(name='Hyundai M connector', parts=[<Accessory.harness_box: BasePart(name='harness box', parts=[])>, <Accessory.comma_power_v2: BasePart(name='comma power v2', parts=[])>, <Cable.rj45_cable_7ft: BasePart(name='RJ45 cable (7 ft)', parts=[])>], has_connector=True)
- hyundai_n = BaseCarHarness(name='Hyundai N connector', parts=[<Accessory.harness_box: BasePart(name='harness box', parts=[])>, <Accessory.comma_power_v2: BasePart(name='comma power v2', parts=[])>, <Cable.rj45_cable_7ft: BasePart(name='RJ45 cable (7 ft)', parts=[])>], has_connector=True)
- hyundai_o = BaseCarHarness(name='Hyundai O connector', parts=[<Accessory.harness_box: BasePart(name='harness box', parts=[])>, <Accessory.comma_power_v2: BasePart(name='comma power v2', parts=[])>, <Cable.rj45_cable_7ft: BasePart(name='RJ45 cable (7 ft)', parts=[])>], has_connector=True)
- hyundai_p = BaseCarHarness(name='Hyundai P connector', parts=[<Accessory.harness_box: BasePart(name='harness box', parts=[])>, <Accessory.comma_power_v2: BasePart(name='comma power v2', parts=[])>, <Cable.rj45_cable_7ft: BasePart(name='RJ45 cable (7 ft)', parts=[])>], has_connector=True)
- hyundai_q = BaseCarHarness(name='Hyundai Q connector', parts=[<Accessory.harness_box: BasePart(name='harness box', parts=[])>, <Accessory.comma_power_v2: BasePart(name='comma power v2', parts=[])>, <Cable.rj45_cable_7ft: BasePart(name='RJ45 cable (7 ft)', parts=[])>], has_connector=True)
- j533 = BaseCarHarness(name='J533 connector', parts=[<Accessory.harness_box: BasePart(name='harness box', parts=[])>, <Cable.long_obdc_cable: BasePart(name='long OBD-C cable', parts=[])>, <Cable.usbc_coupler: BasePart(name='USB-C coupler', parts=[])>], has_connector=True)
- mazda = BaseCarHarness(name='Mazda connector', parts=[<Accessory.harness_box: BasePart(name='harness box', parts=[])>, <Accessory.comma_power_v2: BasePart(name='comma power v2', parts=[])>, <Cable.rj45_cable_7ft: BasePart(name='RJ45 cable (7 ft)', parts=[])>], has_connector=True)
- nidec = BaseCarHarness(name='Honda Nidec connector', parts=[<Accessory.harness_box: BasePart(name='harness box', parts=[])>, <Accessory.comma_power_v2: BasePart(name='comma power v2', parts=[])>, <Cable.rj45_cable_7ft: BasePart(name='RJ45 cable (7 ft)', parts=[])>], has_connector=True)
- nissan_a = BaseCarHarness(name='Nissan A connector', parts=[<Accessory.harness_box: BasePart(name='harness box', parts=[])>, <Cable.rj45_cable_7ft: BasePart(name='RJ45 cable (7 ft)', parts=[])>, <Cable.long_obdc_cable: BasePart(name='long OBD-C cable', parts=[])>, <Cable.usbc_coupler: BasePart(name='USB-C coupler', parts=[])>], has_connector=True)
- nissan_b = BaseCarHarness(name='Nissan B connector', parts=[<Accessory.harness_box: BasePart(name='harness box', parts=[])>, <Cable.rj45_cable_7ft: BasePart(name='RJ45 cable (7 ft)', parts=[])>, <Cable.long_obdc_cable: BasePart(name='long OBD-C cable', parts=[])>, <Cable.usbc_coupler: BasePart(name='USB-C coupler', parts=[])>], has_connector=True)
- obd_ii = BaseCarHarness(name='OBD-II connector', parts=[<Cable.long_obdc_cable: BasePart(name='long OBD-C cable', parts=[])>, <Cable.long_obdc_cable: BasePart(name='long OBD-C cable', parts=[])>], has_connector=False)
- ram = BaseCarHarness(name='Ram connector', parts=[<Accessory.harness_box: BasePart(name='harness box', parts=[])>, <Accessory.comma_power_v2: BasePart(name='comma power v2', parts=[])>, <Cable.rj45_cable_7ft: BasePart(name='RJ45 cable (7 ft)', parts=[])>], has_connector=True)
- subaru_a = BaseCarHarness(name='Subaru A connector', parts=[<Accessory.harness_box: BasePart(name='harness box', parts=[])>, <Accessory.comma_power_v2: BasePart(name='comma power v2', parts=[])>, <Cable.rj45_cable_7ft: BasePart(name='RJ45 cable (7 ft)', parts=[])>], has_connector=True)
- subaru_b = BaseCarHarness(name='Subaru B connector', parts=[<Accessory.harness_box: BasePart(name='harness box', parts=[])>, <Accessory.comma_power_v2: BasePart(name='comma power v2', parts=[])>, <Cable.rj45_cable_7ft: BasePart(name='RJ45 cable (7 ft)', parts=[])>], has_connector=True)
- subaru_c = BaseCarHarness(name='Subaru C connector', parts=[<Accessory.harness_box: BasePart(name='harness box', parts=[])>, <Accessory.comma_power_v2: BasePart(name='comma power v2', parts=[])>, <Cable.rj45_cable_7ft: BasePart(name='RJ45 cable (7 ft)', parts=[])>], has_connector=True)
- subaru_d = BaseCarHarness(name='Subaru D connector', parts=[<Accessory.harness_box: BasePart(name='harness box', parts=[])>, <Accessory.comma_power_v2: BasePart(name='comma power v2', parts=[])>, <Cable.rj45_cable_7ft: BasePart(name='RJ45 cable (7 ft)', parts=[])>], has_connector=True)
- toyota_a = BaseCarHarness(name='Toyota A connector', parts=[<Accessory.harness_box: BasePart(name='harness box', parts=[])>, <Accessory.comma_power_v2: BasePart(name='comma power v2', parts=[])>, <Cable.rj45_cable_7ft: BasePart(name='RJ45 cable (7 ft)', parts=[])>], has_connector=True)
- vw = BaseCarHarness(name='VW connector', parts=[<Accessory.harness_box: BasePart(name='harness box', parts=[])>, <Accessory.comma_power_v2: BasePart(name='comma power v2', parts=[])>, <Cable.rj45_cable_7ft: BasePart(name='RJ45 cable (7 ft)', parts=[])>], has_connector=True)
- class selfdrive.car.docs_definitions.CarInfo(name: str, package: str, requirements: Optional[str] = None, video_link: Optional[str] = None, footnotes: List[enum.Enum] = <factory>, min_steer_speed: Optional[float] = None, min_enable_speed: Optional[float] = None, auto_resume: Optional[bool] = None, car_parts: selfdrive.car.docs_definitions.CarParts = <factory>)[source]
Bases:
object
- auto_resume: bool | None = None
- footnotes: List[Enum]
- init(CP: <capnp.lib.capnp._StructModule object at 0x7f9ec8d6e410>, all_footnotes: ~typing.Dict[~enum.Enum, int])[source]
- init_make(CP: <capnp.lib.capnp._StructModule object at 0x7f9ec8d6e410>)[source]
CarInfo subclasses can add make-specific logic for harness selection, footnotes, etc.
- min_enable_speed: float | None = None
- min_steer_speed: float | None = None
- name: str
- package: str
- requirements: str | None = None
- video_link: str | None = None
- class selfdrive.car.docs_definitions.CarParts(parts: List[selfdrive.car.docs_definitions.EnumBase] = <factory>)[source]
Bases:
object
- class selfdrive.car.docs_definitions.Column(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
Bases:
Enum
- AUTO_RESUME = 'Resume from stop'
- FSR_LONGITUDINAL = 'No ACC accel below'
- FSR_STEERING = 'No ALC below'
- HARDWARE = 'Hardware Needed'
- LONGITUDINAL = 'ACC'
- MAKE = 'Make'
- MODEL = 'Model'
- PACKAGE = 'Supported Package'
- STEERING_TORQUE = 'Steering Torque'
- VIDEO = 'Video'
- class selfdrive.car.docs_definitions.CommonFootnote(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
Bases:
Enum
- EXP_LONG_AVAIL = CarFootnote(text='Experimental openpilot longitudinal control is available behind a toggle; the toggle is only available in non-release branches such as `devel` or `master-ci`. ', column=<Column.LONGITUDINAL: 'ACC'>, docs_only=True, shop_footnote=False)
- EXP_LONG_DSU = CarFootnote(text='By default, this car will use the stock Adaptive Cruise Control (ACC) for longitudinal control. If the Driver Support Unit (DSU) is disconnected, openpilot ACC will replace stock ACC. <b><i>NOTE: disconnecting the DSU disables Automatic Emergency Braking (AEB).</i></b>', column=<Column.LONGITUDINAL: 'ACC'>, docs_only=False, shop_footnote=False)
- class selfdrive.car.docs_definitions.Device(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
Bases:
EnumBase
- red_panda = BasePart(name='red panda', parts=[])
- three = BasePart(name='comma three', parts=[<Mount.mount: BasePart(name='mount', parts=[])>, <Cable.right_angle_obd_c_cable_1_5ft: BasePart(name='right angle OBD-C cable (1.5 ft)', parts=[])>])
- three_angled_mount = BasePart(name='comma three', parts=[<Mount.angled_mount_8_degrees: BasePart(name='angled mount (8 degrees)', parts=[])>, <Cable.right_angle_obd_c_cable_1_5ft: BasePart(name='right angle OBD-C cable (1.5 ft)', parts=[])>])
- class selfdrive.car.docs_definitions.EnumBase(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
Bases:
Enum
- property part_type
- class selfdrive.car.docs_definitions.Kit(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
Bases:
EnumBase
- red_panda_kit = BasePart(name='CAN FD panda kit', parts=[<Device.red_panda: BasePart(name='red panda', parts=[])>, <Accessory.harness_box: BasePart(name='harness box', parts=[])>, <Cable.usb_a_2_a_cable: BasePart(name='USB A-A cable', parts=[])>, <Cable.usbc_otg_cable: BasePart(name='USB C OTG cable', parts=[])>, <Cable.obd_c_cable_1_5ft: BasePart(name='OBD-C cable (1.5 ft)', parts=[])>])
- class selfdrive.car.docs_definitions.Mount(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
Bases:
EnumBase
- angled_mount_8_degrees = BasePart(name='angled mount (8 degrees)', parts=[])
- mount = BasePart(name='mount', parts=[])
- class selfdrive.car.docs_definitions.PartType(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
Bases:
Enum
- accessory = <enum 'Accessory'>
- cable = <enum 'Cable'>
- connector = <enum 'CarHarness'>
- device = <enum 'Device'>
- kit = <enum 'Kit'>
- mount = <enum 'Mount'>
- tool = <enum 'Tool'>
- class selfdrive.car.docs_definitions.Star(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
Bases:
Enum
- EMPTY = 'empty'
- FULL = 'full'
- HALF = 'half'
- class selfdrive.car.docs_definitions.Tool(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
Bases:
EnumBase
- pry_tool = BasePart(name='Pry Tool', parts=[])
- socket_8mm_deep = BasePart(name='Socket Wrench 8mm or 5/16" (deep)', parts=[])
selfdrive.car.ecu_addrs module
- selfdrive.car.ecu_addrs.get_all_ecu_addrs(logcan: SubSocket, sendcan: PubSocket, bus: int, timeout: float = 1, debug: bool = True) Set[Tuple[int, int | None, int]] [source]
- selfdrive.car.ecu_addrs.get_ecu_addrs(logcan: SubSocket, sendcan: PubSocket, queries: Set[Tuple[int, int | None, int]], responses: Set[Tuple[int, int | None, int]], timeout: float = 1, debug: bool = False) Set[Tuple[int, int | None, int]] [source]
selfdrive.car.fingerprints module
- selfdrive.car.fingerprints.all_legacy_fingerprint_cars()[source]
Returns a list of all known car strings, FPv1 only.
- selfdrive.car.fingerprints.eliminate_incompatible_cars(msg, candidate_cars)[source]
Removes cars that could not have sent msg.
- Inputs:
msg: A cereal/log CanData message from the car. candidate_cars: A list of cars to consider.
- Returns:
A list containing the subset of candidate_cars that could have sent msg.
selfdrive.car.fw_query_definitions module
- class selfdrive.car.fw_query_definitions.FwQueryConfig(requests: List[selfdrive.car.fw_query_definitions.Request], non_essential_ecus: Dict[capnp.lib.capnp._EnumModule, List[str]] = <factory>, extra_ecus: List[Tuple[capnp.lib.capnp._EnumModule, int, Optional[int]]] = <factory>, match_fw_to_car_fuzzy: Optional[Callable[[Dict[Tuple[int, Optional[int]], Set[bytes]]], Set[str]]] = None)[source]
Bases:
object
- extra_ecus: List[Tuple[_EnumModule, int, int | None]]
- match_fw_to_car_fuzzy: Callable[[Dict[Tuple[int, int | None], Set[bytes]]], Set[str]] | None = None
- non_essential_ecus: Dict[_EnumModule, List[str]]
- class selfdrive.car.fw_query_definitions.Request(request: List[bytes], response: List[bytes], whitelist_ecus: List[int] = <factory>, rx_offset: int = 8, bus: int = 1, auxiliary: bool = False, logging: bool = False, obd_multiplexing: bool = True)[source]
Bases:
object
- auxiliary: bool = False
- bus: int = 1
- logging: bool = False
- obd_multiplexing: bool = True
- request: List[bytes]
- response: List[bytes]
- rx_offset: int = 8
- whitelist_ecus: List[int]
- class selfdrive.car.fw_query_definitions.StdQueries[source]
Bases:
object
- DEFAULT_DIAGNOSTIC_REQUEST = b'\x10\x01'
- DEFAULT_DIAGNOSTIC_RESPONSE = b'P\x01\x002\x01\xf4'
- EXTENDED_DIAGNOSTIC_REQUEST = b'\x10\x03'
- EXTENDED_DIAGNOSTIC_RESPONSE = b'P\x03\x002\x01\xf4'
- MANUFACTURER_SOFTWARE_VERSION_REQUEST = b'"\xf1\x88'
- MANUFACTURER_SOFTWARE_VERSION_RESPONSE = b'b\xf1\x88'
- OBD_VERSION_REQUEST = b'\t\x04'
- OBD_VERSION_RESPONSE = b'I\x04'
- OBD_VIN_REQUEST = b'\t\x02'
- OBD_VIN_RESPONSE = b'I\x02\x01'
- SHORT_TESTER_PRESENT_REQUEST = b'>'
- SHORT_TESTER_PRESENT_RESPONSE = b'~'
- TESTER_PRESENT_REQUEST = b'>\x00'
- TESTER_PRESENT_RESPONSE = b'~\x00'
- UDS_VERSION_REQUEST = b'"\xf1\x81'
- UDS_VERSION_RESPONSE = b'b\xf1\x81'
- UDS_VIN_REQUEST = b'"\xf1\x90'
- UDS_VIN_RESPONSE = b'b\xf1\x90'
selfdrive.car.fw_versions module
- selfdrive.car.fw_versions.build_fw_dict(fw_versions: List[_DynamicStructBuilder], filter_brand: str | None = None) Dict[Tuple[int, int | None], Set[bytes]] [source]
- selfdrive.car.fw_versions.get_brand_ecu_matches(ecu_rx_addrs)[source]
Returns dictionary of brands and matches with ECUs in their FW versions
- selfdrive.car.fw_versions.get_fw_versions(logcan, sendcan, query_brand=None, extra=None, timeout=0.1, num_pandas=1, debug=False, progress=False) List[_DynamicStructBuilder] [source]
- selfdrive.car.fw_versions.get_fw_versions_ordered(logcan, sendcan, ecu_rx_addrs, timeout=0.1, num_pandas=1, debug=False, progress=False) List[_DynamicStructBuilder] [source]
Queries for FW versions ordering brands by likelihood, breaks when exact match is found
- selfdrive.car.fw_versions.get_present_ecus(logcan, sendcan, num_pandas=1) Set[Tuple[int, int | None, int]] [source]
- selfdrive.car.fw_versions.is_brand(brand: str, filter_brand: str | None) bool [source]
Returns if brand matches filter_brand or no brand filter is specified
- selfdrive.car.fw_versions.match_fw_to_car(fw_versions, allow_exact=True, allow_fuzzy=True, log=True)[source]
- selfdrive.car.fw_versions.match_fw_to_car_exact(live_fw_versions, match_brand=None, log=True) Set[str] [source]
Do an exact FW match. Returns all cars that match the given FW versions for a list of “essential” ECUs. If an ECU is not considered essential the FW version can be missing to get a fingerprint, but if it’s present it needs to match the database.
- selfdrive.car.fw_versions.match_fw_to_car_fuzzy(live_fw_versions, match_brand=None, log=True, exclude=None)[source]
Do a fuzzy FW match. This function will return a match, and the number of firmware version that were matched uniquely to that specific car. If multiple ECUs uniquely match to different cars the match is rejected.
selfdrive.car.interfaces module
- class selfdrive.car.interfaces.CarInterfaceBase(CP, CarController, CarState)[source]
Bases:
ABC
- abstract apply(c: <capnp.lib.capnp._StructModule object at 0x7f9ec8d6d550>, now_nanos: int) List[bytes]] [source]
- static configure_torque_tune(candidate, tune, steering_angle_deadzone_deg=0.0, use_steering_angle=True)[source]
- create_common_events(cs_out, extra_gears=None, pcm_enable=True, allow_enable=True, enable_buttons=(3, 4))[source]
- classmethod get_non_essential_params(candidate: str)[source]
Parameters essential to controlling the car may be incomplete or wrong without FW versions or fingerprints.
- classmethod get_params(candidate: str, fingerprint: ~typing.Dict[int, ~typing.Dict[int, int]], car_fw: ~typing.List[<capnp.lib.capnp._StructModule object at 0x7f9eca63c110>], experimental_long: bool, docs: bool)[source]
- torque_from_lateral_accel() _StructModule object at 0x7f9ec8d6f110>, float, float, bool], float] [source]
- class selfdrive.car.interfaces.CarStateBase(CP)[source]
Bases:
ABC
- static parse_gear_shifter(gear: str | None) <capnp.lib.capnp._EnumModule object at 0x7f9ec8d6c6d0> [source]
- update_blinker_from_lamp(blinker_time: int, left_blinker_lamp: bool, right_blinker_lamp: bool)[source]
Update blinkers from lights. Enable output when light was seen within the last blinker_time iterations
- update_blinker_from_stalk(blinker_time: int, left_blinker_stalk: bool, right_blinker_stalk: bool)[source]
Update blinkers from stalk position. When stalk is seen the blinker will be on for at least blinker_time, or until the stalk is turned off, whichever is longer. If the opposite stalk direction is seen the blinker is forced to the other side. On a rising edge of the stalk the timeout is reset.
selfdrive.car.isotp_parallel_query module
selfdrive.car.vin module
Module contents
- class selfdrive.car.AngleRateLimit(speed_bp, angle_v)
Bases:
tuple
- angle_v
Alias for field number 1
- speed_bp
Alias for field number 0
- class selfdrive.car.CanBusBase(CP, fingerprint: Dict[int, Dict[int, int]] | None)[source]
Bases:
object
- offset: int
- class selfdrive.car.CanSignalRateCalculator(frequency)[source]
Bases:
object
Calculates the instantaneous rate of a CAN signal by using the counter variable and the known frequency of the CAN message that contains it.
- class selfdrive.car.VehicleDynamicsParams[source]
Bases:
object
- CENTER_TO_FRONT = 1.08
- CENTER_TO_REAR = 1.62
- MASS = 1462.0
- ROTATIONAL_INERTIA = 2500
- TIRE_STIFFNESS_FRONT = 192150
- TIRE_STIFFNESS_REAR = 202500
- WHEELBASE = 2.7
- selfdrive.car.apply_dist_to_meas_limits(val, val_last, val_meas, STEER_DELTA_UP, STEER_DELTA_DOWN, STEER_ERROR_MAX, STEER_MAX)[source]
- selfdrive.car.apply_driver_steer_torque_limits(apply_torque, apply_torque_last, driver_torque, LIMITS)[source]
- selfdrive.car.apply_meas_steer_torque_limits(apply_torque, apply_torque_last, motor_torque, LIMITS)[source]
- selfdrive.car.common_fault_avoidance(fault_condition: bool, request: bool, above_limit_frames: int, max_above_limit_frames: int, max_mismatching_frames: int = 1)[source]
Several cars have the ability to work around their EPS limits by cutting the request bit of their LKAS message after a certain number of frames above the limit.