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.
119 lines
4.5 KiB
119 lines
4.5 KiB
def create_steering_control(packer, bus, apply_steer, lkas_enabled):
|
|
values = {
|
|
"HCA_01_Status_HCA": 5 if lkas_enabled else 3,
|
|
"HCA_01_LM_Offset": abs(apply_steer),
|
|
"HCA_01_LM_OffSign": 1 if apply_steer < 0 else 0,
|
|
"HCA_01_Vib_Freq": 18,
|
|
"HCA_01_Sendestatus": 1 if lkas_enabled else 0,
|
|
"EA_ACC_Wunschgeschwindigkeit": 327.36,
|
|
}
|
|
return packer.make_can_msg("HCA_01", bus, values)
|
|
|
|
|
|
def create_lka_hud_control(packer, bus, ldw_stock_values, enabled, steering_pressed, hud_alert, hud_control):
|
|
values = {}
|
|
if len(ldw_stock_values):
|
|
values = {s: ldw_stock_values[s] for s in [
|
|
"LDW_SW_Warnung_links", # Blind spot in warning mode on left side due to lane departure
|
|
"LDW_SW_Warnung_rechts", # Blind spot in warning mode on right side due to lane departure
|
|
"LDW_Seite_DLCTLC", # Direction of most likely lane departure (left or right)
|
|
"LDW_DLC", # Lane departure, distance to line crossing
|
|
"LDW_TLC", # Lane departure, time to line crossing
|
|
]}
|
|
|
|
values.update({
|
|
"LDW_Status_LED_gelb": 1 if enabled and steering_pressed else 0,
|
|
"LDW_Status_LED_gruen": 1 if enabled and not steering_pressed else 0,
|
|
"LDW_Lernmodus_links": 3 if hud_control.leftLaneDepart else 1 + hud_control.leftLaneVisible,
|
|
"LDW_Lernmodus_rechts": 3 if hud_control.rightLaneDepart else 1 + hud_control.rightLaneVisible,
|
|
"LDW_Texte": hud_alert,
|
|
})
|
|
return packer.make_can_msg("LDW_02", bus, values)
|
|
|
|
|
|
def create_acc_buttons_control(packer, bus, gra_stock_values, cancel=False, resume=False):
|
|
values = {s: gra_stock_values[s] for s in [
|
|
"GRA_Hauptschalter", # ACC button, on/off
|
|
"GRA_Typ_Hauptschalter", # ACC main button type
|
|
"GRA_Codierung", # ACC button configuration/coding
|
|
"GRA_Tip_Stufe_2", # unknown related to stalk type
|
|
"GRA_ButtonTypeInfo", # unknown related to stalk type
|
|
]}
|
|
|
|
values.update({
|
|
"COUNTER": (gra_stock_values["COUNTER"] + 1) % 16,
|
|
"GRA_Abbrechen": cancel,
|
|
"GRA_Tip_Wiederaufnahme": resume,
|
|
})
|
|
|
|
return packer.make_can_msg("GRA_ACC_01", bus, values)
|
|
|
|
|
|
def acc_control_value(main_switch_on, acc_faulted, long_active):
|
|
if acc_faulted:
|
|
acc_control = 6
|
|
elif long_active:
|
|
acc_control = 3
|
|
elif main_switch_on:
|
|
acc_control = 2
|
|
else:
|
|
acc_control = 0
|
|
|
|
return acc_control
|
|
|
|
|
|
def acc_hud_status_value(main_switch_on, acc_faulted, long_active):
|
|
# TODO: happens to resemble the ACC control value for now, but extend this for init/gas override later
|
|
return acc_control_value(main_switch_on, acc_faulted, long_active)
|
|
|
|
|
|
def create_acc_accel_control(packer, bus, acc_type, acc_enabled, accel, acc_control, stopping, starting, esp_hold):
|
|
commands = []
|
|
|
|
acc_06_values = {
|
|
"ACC_Typ": acc_type,
|
|
"ACC_Status_ACC": acc_control,
|
|
"ACC_StartStopp_Info": acc_enabled,
|
|
"ACC_Sollbeschleunigung_02": accel if acc_enabled else 3.01,
|
|
"ACC_zul_Regelabw_unten": 0.2, # TODO: dynamic adjustment of comfort-band
|
|
"ACC_zul_Regelabw_oben": 0.2, # TODO: dynamic adjustment of comfort-band
|
|
"ACC_neg_Sollbeschl_Grad_02": 4.0 if acc_enabled else 0, # TODO: dynamic adjustment of jerk limits
|
|
"ACC_pos_Sollbeschl_Grad_02": 4.0 if acc_enabled else 0, # TODO: dynamic adjustment of jerk limits
|
|
"ACC_Anfahren": starting,
|
|
"ACC_Anhalten": stopping,
|
|
}
|
|
commands.append(packer.make_can_msg("ACC_06", bus, acc_06_values))
|
|
|
|
if starting:
|
|
acc_hold_type = 4 # hold release / startup
|
|
elif esp_hold:
|
|
acc_hold_type = 3 # hold standby
|
|
elif stopping:
|
|
acc_hold_type = 1 # hold request
|
|
else:
|
|
acc_hold_type = 0
|
|
|
|
acc_07_values = {
|
|
"ACC_Anhalteweg": 0.75 if stopping else 20.46, # Distance to stop (stopping coordinator handles terminal roll-out)
|
|
"ACC_Freilauf_Info": 2 if acc_enabled else 0,
|
|
"ACC_Folgebeschl": 3.02, # Not using secondary controller accel unless and until we understand its impact
|
|
"ACC_Sollbeschleunigung_02": accel if acc_enabled else 3.01,
|
|
"ACC_Anforderung_HMS": acc_hold_type,
|
|
"ACC_Anfahren": starting,
|
|
"ACC_Anhalten": stopping,
|
|
}
|
|
commands.append(packer.make_can_msg("ACC_07", bus, acc_07_values))
|
|
|
|
return commands
|
|
|
|
|
|
def create_acc_hud_control(packer, bus, acc_hud_status, set_speed, lead_distance):
|
|
values = {
|
|
"ACC_Status_Anzeige": acc_hud_status,
|
|
"ACC_Wunschgeschw_02": set_speed if set_speed < 250 else 327.36,
|
|
"ACC_Gesetzte_Zeitluecke": 3,
|
|
"ACC_Display_Prio": 3,
|
|
"ACC_Abstandsindex": lead_distance,
|
|
}
|
|
|
|
return packer.make_can_msg("ACC_02", bus, values)
|
|
|