Experimental Mode via steering wheel / onroad UI
Added toggle to enable or disable Experimental Mode from the steering wheel for Toyota/Lexus vehicles and the onroad UI for other makes.
This commit is contained in:
@@ -144,6 +144,24 @@ class CarState(CarStateBase):
|
||||
ret.cruiseState.speed = pt_cp.vl["ECMCruiseControl"]["CruiseSetSpeed"] * CV.KPH_TO_MS
|
||||
ret.cruiseState.enabled = pt_cp.vl["ECMCruiseControl"]["CruiseActive"] != 0
|
||||
|
||||
# Toggle Experimental Mode from steering wheel function
|
||||
if self.experimental_mode_via_press and ret.cruiseState.available:
|
||||
if self.CP.carFingerprint in SDGM_CAR:
|
||||
lkas_pressed = cam_cp.vl["ASCMSteeringButton"]["LKAButton"]
|
||||
else:
|
||||
lkas_pressed = pt_cp.vl["ASCMSteeringButton"]["LKAButton"]
|
||||
if lkas_pressed and not self.lkas_previously_pressed:
|
||||
if self.conditional_experimental_mode:
|
||||
# Set "CEStatus" to work with "Conditional Experimental Mode"
|
||||
conditional_status = self.param_memory.get_int("CEStatus")
|
||||
override_value = 0 if conditional_status in (1, 2, 3, 4) else 1 if conditional_status >= 5 else 2
|
||||
self.param_memory.put_int("CEStatus", override_value)
|
||||
else:
|
||||
experimental_mode = self.param.get_bool("ExperimentalMode")
|
||||
# Invert the value of "ExperimentalMode"
|
||||
put_bool_nonblocking("ExperimentalMode", not experimental_mode)
|
||||
self.lkas_previously_pressed = lkas_pressed
|
||||
|
||||
return ret
|
||||
|
||||
@staticmethod
|
||||
|
||||
@@ -263,6 +263,21 @@ class CarState(CarStateBase):
|
||||
ret.leftBlindspot = cp_body.vl["BSM_STATUS_LEFT"]["BSM_ALERT"] == 1
|
||||
ret.rightBlindspot = cp_body.vl["BSM_STATUS_RIGHT"]["BSM_ALERT"] == 1
|
||||
|
||||
# Toggle Experimental Mode from steering wheel function
|
||||
if self.experimental_mode_via_press and ret.cruiseState.available:
|
||||
lkas_pressed = self.cruise_setting == 1
|
||||
if lkas_pressed and not self.lkas_previously_pressed:
|
||||
if self.conditional_experimental_mode:
|
||||
# Set "CEStatus" to work with "Conditional Experimental Mode"
|
||||
conditional_status = self.param_memory.get_int("CEStatus")
|
||||
override_value = 0 if conditional_status in (1, 2, 3, 4) else 1 if conditional_status >= 5 else 2
|
||||
self.param_memory.put_int("CEStatus", override_value)
|
||||
else:
|
||||
experimental_mode = self.param.get_bool("ExperimentalMode")
|
||||
# Invert the value of "ExperimentalMode"
|
||||
put_bool_nonblocking("ExperimentalMode", not experimental_mode)
|
||||
self.lkas_previously_pressed = lkas_pressed
|
||||
|
||||
return ret
|
||||
|
||||
def get_can_parser(self, CP):
|
||||
|
||||
@@ -167,6 +167,21 @@ class CarState(CarStateBase):
|
||||
if self.prev_main_buttons == 0 and self.main_buttons[-1] != 0:
|
||||
self.main_enabled = not self.main_enabled
|
||||
|
||||
# Toggle Experimental Mode from steering wheel function
|
||||
if self.experimental_mode_via_press and ret.cruiseState.available:
|
||||
lkas_pressed = cp.vl["BCM_PO_11"]["LFA_Pressed"]
|
||||
if lkas_pressed and not self.lkas_previously_pressed:
|
||||
if self.conditional_experimental_mode:
|
||||
# Set "CEStatus" to work with "Conditional Experimental Mode"
|
||||
conditional_status = self.param_memory.get_int("CEStatus")
|
||||
override_value = 0 if conditional_status in (1, 2, 3, 4) else 1 if conditional_status >= 5 else 2
|
||||
self.param_memory.put_int("CEStatus", override_value)
|
||||
else:
|
||||
experimental_mode = self.param.get_bool("ExperimentalMode")
|
||||
# Invert the value of "ExperimentalMode"
|
||||
put_bool_nonblocking("ExperimentalMode", not experimental_mode)
|
||||
self.lkas_previously_pressed = lkas_pressed
|
||||
|
||||
return ret
|
||||
|
||||
def update_canfd(self, cp, cp_cam):
|
||||
@@ -252,6 +267,21 @@ class CarState(CarStateBase):
|
||||
self.hda2_lfa_block_msg = copy.copy(cp_cam.vl["CAM_0x362"] if self.CP.flags & HyundaiFlags.CANFD_HDA2_ALT_STEERING
|
||||
else cp_cam.vl["CAM_0x2a4"])
|
||||
|
||||
# Toggle Experimental Mode from steering wheel function
|
||||
if self.experimental_mode_via_press and ret.cruiseState.available:
|
||||
lkas_pressed = cp.vl[self.cruise_btns_msg_canfd]["LKAS_BTN"]
|
||||
if lkas_pressed and not self.lkas_previously_pressed:
|
||||
if self.conditional_experimental_mode:
|
||||
# Set "CEStatus" to work with "Conditional Experimental Mode"
|
||||
conditional_status = self.param_memory.get_int("CEStatus")
|
||||
override_value = 0 if conditional_status in (1, 2, 3, 4) else 1 if conditional_status >= 5 else 2
|
||||
self.param_memory.put_int("CEStatus", override_value)
|
||||
else:
|
||||
experimental_mode = self.param.get_bool("ExperimentalMode")
|
||||
# Invert the value of "ExperimentalMode"
|
||||
put_bool_nonblocking("ExperimentalMode", not experimental_mode)
|
||||
self.lkas_previously_pressed = lkas_pressed
|
||||
|
||||
return ret
|
||||
|
||||
def get_can_parser(self, CP):
|
||||
@@ -301,6 +331,8 @@ class CarState(CarStateBase):
|
||||
else:
|
||||
messages.append(("LVR12", 100))
|
||||
|
||||
messages.append(("BCM_PO_11", 50))
|
||||
|
||||
return CANParser(DBC[CP.carFingerprint]["pt"], messages, 0)
|
||||
|
||||
@staticmethod
|
||||
|
||||
@@ -366,6 +366,7 @@ class CarStateBase(ABC):
|
||||
self.param = Params()
|
||||
self.param_memory = Params("/dev/shm/params")
|
||||
|
||||
self.lkas_previously_pressed = False
|
||||
self.main_enabled = False
|
||||
|
||||
def update_speed_kf(self, v_ego_raw):
|
||||
@@ -457,6 +458,8 @@ class CarStateBase(ABC):
|
||||
return None
|
||||
|
||||
def update_frogpilot_params(self, params):
|
||||
self.conditional_experimental_mode = params.get_bool("ConditionalExperimental")
|
||||
self.experimental_mode_via_press = params.get_bool("ExperimentalModeViaPress")
|
||||
|
||||
INTERFACE_ATTR_FILE = {
|
||||
"FINGERPRINTS": "fingerprints",
|
||||
|
||||
@@ -162,6 +162,22 @@ class CarState(CarStateBase):
|
||||
if self.CP.carFingerprint != CAR.PRIUS_V:
|
||||
self.lkas_hud = copy.copy(cp_cam.vl["LKAS_HUD"])
|
||||
|
||||
# Toggle Experimental Mode from steering wheel function
|
||||
if self.experimental_mode_via_press and ret.cruiseState.available and self.CP.carFingerprint != CAR.PRIUS_V:
|
||||
message_keys = ["LDA_ON_MESSAGE", "SET_ME_X02"]
|
||||
lkas_pressed = any(self.lkas_hud.get(key) == 1 for key in message_keys)
|
||||
if lkas_pressed and not self.lkas_previously_pressed:
|
||||
if self.conditional_experimental_mode:
|
||||
# Set "CEStatus" to work with "Conditional Experimental Mode"
|
||||
conditional_status = self.param_memory.get_int("CEStatus")
|
||||
override_value = 0 if conditional_status in (1, 2, 3, 4) else 1 if conditional_status >= 5 else 2
|
||||
self.param_memory.put_int("CEStatus", override_value)
|
||||
else:
|
||||
experimental_mode = self.param.get_bool("ExperimentalMode")
|
||||
# Invert the value of "ExperimentalMode"
|
||||
self.param.put_bool("ExperimentalMode", not experimental_mode)
|
||||
self.lkas_previously_pressed = lkas_pressed
|
||||
|
||||
return ret
|
||||
|
||||
@staticmethod
|
||||
|
||||
Reference in New Issue
Block a user