Increase max speed by 5 on short press
Added function to increase the value of the max speed by 5 instead of 1 by taping the "Max" speed icon in the onroad UI.
This commit is contained in:
@@ -271,6 +271,7 @@ std::unordered_map<std::string, uint32_t> keys = {
|
|||||||
{"PathWidth", PERSISTENT},
|
{"PathWidth", PERSISTENT},
|
||||||
{"RelaxedFollow", PERSISTENT},
|
{"RelaxedFollow", PERSISTENT},
|
||||||
{"RelaxedJerk", PERSISTENT},
|
{"RelaxedJerk", PERSISTENT},
|
||||||
|
{"ReverseCruise", PERSISTENT},
|
||||||
{"RoadEdgesWidth", PERSISTENT},
|
{"RoadEdgesWidth", PERSISTENT},
|
||||||
{"ScreenBrightness", PERSISTENT},
|
{"ScreenBrightness", PERSISTENT},
|
||||||
{"ShowCPU", PERSISTENT},
|
{"ShowCPU", PERSISTENT},
|
||||||
|
|||||||
@@ -42,8 +42,10 @@ class CarController:
|
|||||||
self.accel = 0
|
self.accel = 0
|
||||||
|
|
||||||
# FrogPilot variables
|
# FrogPilot variables
|
||||||
|
self.reverse_cruise_increase = False
|
||||||
|
|
||||||
def update_frogpilot_variables(self, params):
|
def update_frogpilot_variables(self, params):
|
||||||
|
self.reverse_cruise_increase = params.get_bool("ReverseCruise")
|
||||||
|
|
||||||
def update(self, CC, CS, now_nanos, sport_plus):
|
def update(self, CC, CS, now_nanos, sport_plus):
|
||||||
actuators = CC.actuators
|
actuators = CC.actuators
|
||||||
@@ -149,10 +151,10 @@ class CarController:
|
|||||||
if pcm_cancel_cmd and self.CP.carFingerprint in UNSUPPORTED_DSU_CAR:
|
if pcm_cancel_cmd and self.CP.carFingerprint in UNSUPPORTED_DSU_CAR:
|
||||||
can_sends.append(toyotacan.create_acc_cancel_command(self.packer))
|
can_sends.append(toyotacan.create_acc_cancel_command(self.packer))
|
||||||
elif self.CP.openpilotLongitudinalControl:
|
elif self.CP.openpilotLongitudinalControl:
|
||||||
can_sends.append(toyotacan.create_accel_command(self.packer, pcm_accel_cmd, pcm_cancel_cmd, self.standstill_req, lead, CS.acc_type, fcw_alert))
|
can_sends.append(toyotacan.create_accel_command(self.packer, pcm_accel_cmd, pcm_cancel_cmd, self.standstill_req, lead, CS.acc_type, fcw_alert, self.reverse_cruise_increase))
|
||||||
self.accel = pcm_accel_cmd
|
self.accel = pcm_accel_cmd
|
||||||
else:
|
else:
|
||||||
can_sends.append(toyotacan.create_accel_command(self.packer, 0, pcm_cancel_cmd, False, lead, CS.acc_type, False))
|
can_sends.append(toyotacan.create_accel_command(self.packer, 0, pcm_cancel_cmd, False, lead, CS.acc_type, False, self.reverse_cruise_increase))
|
||||||
|
|
||||||
if self.frame % 2 == 0 and self.CP.enableGasInterceptor and self.CP.openpilotLongitudinalControl:
|
if self.frame % 2 == 0 and self.CP.enableGasInterceptor and self.CP.openpilotLongitudinalControl:
|
||||||
# send exactly zero if gas cmd is zero. Interceptor will send the max between read value and gas cmd.
|
# send exactly zero if gas cmd is zero. Interceptor will send the max between read value and gas cmd.
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ def create_lta_steer_command(packer, steer_control_type, steer_angle, steer_req,
|
|||||||
return packer.make_can_msg("STEERING_LTA", 0, values)
|
return packer.make_can_msg("STEERING_LTA", 0, values)
|
||||||
|
|
||||||
|
|
||||||
def create_accel_command(packer, accel, pcm_cancel, standstill_req, lead, acc_type, fcw_alert):
|
def create_accel_command(packer, accel, pcm_cancel, standstill_req, lead, acc_type, fcw_alert, reverse_cruise):
|
||||||
# TODO: find the exact canceling bit that does not create a chime
|
# TODO: find the exact canceling bit that does not create a chime
|
||||||
values = {
|
values = {
|
||||||
"ACCEL_CMD": accel,
|
"ACCEL_CMD": accel,
|
||||||
@@ -43,7 +43,7 @@ def create_accel_command(packer, accel, pcm_cancel, standstill_req, lead, acc_ty
|
|||||||
"PERMIT_BRAKING": 1,
|
"PERMIT_BRAKING": 1,
|
||||||
"RELEASE_STANDSTILL": not standstill_req,
|
"RELEASE_STANDSTILL": not standstill_req,
|
||||||
"CANCEL_REQ": pcm_cancel,
|
"CANCEL_REQ": pcm_cancel,
|
||||||
"ALLOW_LONG_PRESS": 1,
|
"ALLOW_LONG_PRESS": 2 if reverse_cruise else 1,
|
||||||
"ACC_CUT_IN": fcw_alert, # only shown when ACC enabled
|
"ACC_CUT_IN": fcw_alert, # only shown when ACC enabled
|
||||||
}
|
}
|
||||||
return packer.make_can_msg("ACC_CONTROL", 0, values)
|
return packer.make_can_msg("ACC_CONTROL", 0, values)
|
||||||
|
|||||||
@@ -513,7 +513,7 @@ class Controls:
|
|||||||
def state_transition(self, CS):
|
def state_transition(self, CS):
|
||||||
"""Compute conditional state transitions and execute actions on state transitions"""
|
"""Compute conditional state transitions and execute actions on state transitions"""
|
||||||
|
|
||||||
self.v_cruise_helper.update_v_cruise(CS, self.enabled, self.is_metric)
|
self.v_cruise_helper.update_v_cruise(CS, self.enabled, self.is_metric, self.reverse_cruise_increase)
|
||||||
|
|
||||||
# decrement the soft disable timer at every step, as it's reset on
|
# decrement the soft disable timer at every step, as it's reset on
|
||||||
# entrance in SOFT_DISABLING state
|
# entrance in SOFT_DISABLING state
|
||||||
@@ -980,6 +980,8 @@ class Controls:
|
|||||||
longitudinal_tune = self.params.get_bool("LongitudinalTune")
|
longitudinal_tune = self.params.get_bool("LongitudinalTune")
|
||||||
self.sport_plus = self.params.get_int("AccelerationProfile") == 3 and longitudinal_tune
|
self.sport_plus = self.params.get_int("AccelerationProfile") == 3 and longitudinal_tune
|
||||||
|
|
||||||
|
self.reverse_cruise_increase = self.params.get_bool("ReverseCruise")
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
controls = Controls()
|
controls = Controls()
|
||||||
controls.controlsd_thread()
|
controls.controlsd_thread()
|
||||||
|
|||||||
@@ -52,13 +52,13 @@ class VCruiseHelper:
|
|||||||
def v_cruise_initialized(self):
|
def v_cruise_initialized(self):
|
||||||
return self.v_cruise_kph != V_CRUISE_UNSET
|
return self.v_cruise_kph != V_CRUISE_UNSET
|
||||||
|
|
||||||
def update_v_cruise(self, CS, enabled, is_metric):
|
def update_v_cruise(self, CS, enabled, is_metric, reverse_cruise_increase):
|
||||||
self.v_cruise_kph_last = self.v_cruise_kph
|
self.v_cruise_kph_last = self.v_cruise_kph
|
||||||
|
|
||||||
if CS.cruiseState.available:
|
if CS.cruiseState.available:
|
||||||
if not self.CP.pcmCruise:
|
if not self.CP.pcmCruise:
|
||||||
# if stock cruise is completely disabled, then we can use our own set speed logic
|
# if stock cruise is completely disabled, then we can use our own set speed logic
|
||||||
self._update_v_cruise_non_pcm(CS, enabled, is_metric)
|
self._update_v_cruise_non_pcm(CS, enabled, is_metric, reverse_cruise_increase)
|
||||||
self.v_cruise_cluster_kph = self.v_cruise_kph
|
self.v_cruise_cluster_kph = self.v_cruise_kph
|
||||||
self.update_button_timers(CS, enabled)
|
self.update_button_timers(CS, enabled)
|
||||||
else:
|
else:
|
||||||
@@ -68,13 +68,13 @@ class VCruiseHelper:
|
|||||||
self.v_cruise_kph = V_CRUISE_UNSET
|
self.v_cruise_kph = V_CRUISE_UNSET
|
||||||
self.v_cruise_cluster_kph = V_CRUISE_UNSET
|
self.v_cruise_cluster_kph = V_CRUISE_UNSET
|
||||||
|
|
||||||
def _update_v_cruise_non_pcm(self, CS, enabled, is_metric):
|
def _update_v_cruise_non_pcm(self, CS, enabled, is_metric, reverse_cruise_increase):
|
||||||
# handle button presses. TODO: this should be in state_control, but a decelCruise press
|
# handle button presses. TODO: this should be in state_control, but a decelCruise press
|
||||||
# would have the effect of both enabling and changing speed is checked after the state transition
|
# would have the effect of both enabling and changing speed is checked after the state transition
|
||||||
if not enabled:
|
if not enabled:
|
||||||
return
|
return
|
||||||
|
|
||||||
long_press = False
|
long_press = reverse_cruise_increase
|
||||||
button_type = None
|
button_type = None
|
||||||
|
|
||||||
v_cruise_delta = 1. if is_metric else IMPERIAL_INCREMENT
|
v_cruise_delta = 1. if is_metric else IMPERIAL_INCREMENT
|
||||||
@@ -89,7 +89,7 @@ class VCruiseHelper:
|
|||||||
for k in self.button_timers.keys():
|
for k in self.button_timers.keys():
|
||||||
if self.button_timers[k] and self.button_timers[k] % CRUISE_LONG_PRESS == 0:
|
if self.button_timers[k] and self.button_timers[k] % CRUISE_LONG_PRESS == 0:
|
||||||
button_type = k
|
button_type = k
|
||||||
long_press = True
|
long_press = not reverse_cruise_increase
|
||||||
break
|
break
|
||||||
|
|
||||||
if button_type is None:
|
if button_type is None:
|
||||||
|
|||||||
@@ -106,13 +106,25 @@ void OnroadWindow::mousePressEvent(QMouseEvent* e) {
|
|||||||
// FrogPilot clickable widgets
|
// FrogPilot clickable widgets
|
||||||
bool widgetClicked = false;
|
bool widgetClicked = false;
|
||||||
|
|
||||||
|
// Change cruise control increments button
|
||||||
|
QRect maxSpeedRect(7, 25, 225, 225);
|
||||||
|
bool isMaxSpeedClicked = maxSpeedRect.contains(e->pos());
|
||||||
|
|
||||||
// Hide speed button
|
// Hide speed button
|
||||||
QRect speedRect(rect().center().x() - 175, 50, 350, 350);
|
QRect speedRect(rect().center().x() - 175, 50, 350, 350);
|
||||||
bool isSpeedClicked = speedRect.contains(e->pos());
|
bool isSpeedClicked = speedRect.contains(e->pos());
|
||||||
|
|
||||||
if (isSpeedClicked) {
|
if (isMaxSpeedClicked || isSpeedClicked) {
|
||||||
|
// Check if the click was within the max speed area
|
||||||
|
if (isMaxSpeedClicked) {
|
||||||
|
reverseCruise = !params.getBool("ReverseCruise");
|
||||||
|
params.putBoolNonBlocking("ReverseCruise", reverseCruise);
|
||||||
|
paramsMemory.putBoolNonBlocking("FrogPilotTogglesUpdated", true);
|
||||||
|
// Check if the click was within the speed text area
|
||||||
|
} else {
|
||||||
speedHidden = !params.getBool("HideSpeed");
|
speedHidden = !params.getBool("HideSpeed");
|
||||||
params.putBoolNonBlocking("HideSpeed", speedHidden);
|
params.putBoolNonBlocking("HideSpeed", speedHidden);
|
||||||
|
}
|
||||||
widgetClicked = true;
|
widgetClicked = true;
|
||||||
// If the click wasn't for anything specific, change the value of "ExperimentalMode"
|
// If the click wasn't for anything specific, change the value of "ExperimentalMode"
|
||||||
} else if (scene.experimental_mode_via_press && e->pos() != timeoutPoint) {
|
} else if (scene.experimental_mode_via_press && e->pos() != timeoutPoint) {
|
||||||
@@ -500,7 +512,11 @@ void AnnotatedCameraWidget::drawHud(QPainter &p) {
|
|||||||
int bottom_radius = has_eu_speed_limit ? 100 : 32;
|
int bottom_radius = has_eu_speed_limit ? 100 : 32;
|
||||||
|
|
||||||
QRect set_speed_rect(QPoint(60 + (default_size.width() - set_speed_size.width()) / 2, 45), set_speed_size);
|
QRect set_speed_rect(QPoint(60 + (default_size.width() - set_speed_size.width()) / 2, 45), set_speed_size);
|
||||||
|
if (reverseCruise) {
|
||||||
|
p.setPen(QPen(QColor(0, 150, 255), 6));
|
||||||
|
} else {
|
||||||
p.setPen(QPen(whiteColor(75), 6));
|
p.setPen(QPen(whiteColor(75), 6));
|
||||||
|
}
|
||||||
p.setBrush(blackColor(166));
|
p.setBrush(blackColor(166));
|
||||||
drawRoundedRect(p, set_speed_rect, top_radius, top_radius, bottom_radius, bottom_radius);
|
drawRoundedRect(p, set_speed_rect, top_radius, top_radius, bottom_radius, bottom_radius);
|
||||||
|
|
||||||
@@ -1034,6 +1050,10 @@ void AnnotatedCameraWidget::initializeFrogPilotWidgets() {
|
|||||||
speedHidden = true;
|
speedHidden = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (params.getBool("ReverseCruise")) {
|
||||||
|
reverseCruise = true;
|
||||||
|
}
|
||||||
|
|
||||||
// Custom themes configuration
|
// Custom themes configuration
|
||||||
themeConfiguration = {
|
themeConfiguration = {
|
||||||
{1, {QString("frog_theme"), {QColor(23, 134, 68, 242), {{0.0, QBrush(QColor::fromHslF(144 / 360., 0.71, 0.31, 0.9))},
|
{1, {QString("frog_theme"), {QColor(23, 134, 68, 242), {{0.0, QBrush(QColor::fromHslF(144 / 360., 0.71, 0.31, 0.9))},
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ const int btn_size = 192;
|
|||||||
const int img_size = (btn_size / 4) * 3;
|
const int img_size = (btn_size / 4) * 3;
|
||||||
|
|
||||||
// FrogPilot global variables
|
// FrogPilot global variables
|
||||||
|
static bool reverseCruise;
|
||||||
static bool speedHidden;
|
static bool speedHidden;
|
||||||
static double fps;
|
static double fps;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user