From 325de7b822f3cb86124ad192ee6b9a6ac3280e90 Mon Sep 17 00:00:00 2001 From: cydia2020 <12470297+cydia2020@users.noreply.github.com> Date: Sat, 27 Jan 2024 23:49:57 +1100 Subject: [PATCH] use meter dimmer to control brightness --- cereal | 2 +- common/params.cc | 1 + selfdrive/assets/offroad/icon_brightness.png | 3 +++ selfdrive/car/toyota/carstate.py | 4 ++++ selfdrive/ui/qt/offroad/settings.cc | 6 +++++ selfdrive/ui/ui.cc | 23 +++++++++----------- 6 files changed, 25 insertions(+), 14 deletions(-) create mode 100644 selfdrive/assets/offroad/icon_brightness.png diff --git a/cereal b/cereal index 00f4dcff52bfd7..fc53f5281cab00 160000 --- a/cereal +++ b/cereal @@ -1 +1 @@ -Subproject commit 00f4dcff52bfd786aee7d1350cd0085f956e1c61 +Subproject commit fc53f5281cab006671101841f4f35b76cb454017 diff --git a/common/params.cc b/common/params.cc index fe933e6c4a4e43..19e59ed88e36fc 100644 --- a/common/params.cc +++ b/common/params.cc @@ -208,6 +208,7 @@ std::unordered_map keys = { {"VisionRadarToggle", PERSISTENT}, {"WheeledBody", PERSISTENT}, {"DisplayRadarInfo", PERSISTENT}, // display radar state on onroad UI + {"CarBrightnessControl", PERSISTENT}, // link display brightness with combination meter }; } // namespace diff --git a/selfdrive/assets/offroad/icon_brightness.png b/selfdrive/assets/offroad/icon_brightness.png new file mode 100644 index 00000000000000..e42d96c3afc522 --- /dev/null +++ b/selfdrive/assets/offroad/icon_brightness.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6c3bed00e927afdb6d21557f439baff8537c185d697a08e377935aa859dc9197 +size 6173 diff --git a/selfdrive/car/toyota/carstate.py b/selfdrive/car/toyota/carstate.py index 6791c26b440542..b6e601f3f364fc 100644 --- a/selfdrive/car/toyota/carstate.py +++ b/selfdrive/car/toyota/carstate.py @@ -103,6 +103,10 @@ def update(self, cp, cp_cam): # brake lights ret.brakeLights = bool(cp.vl["ESP_CONTROL"]['BRAKE_LIGHTS_ACC'] or cp.vl["BRAKE_MODULE"]["BRAKE_PRESSED"] != 0) + # combination meter dimmer states + ret.meterDimmed = cp.vl["BODY_CONTROL_STATE"]['METER_DIMMED'] == 1 + ret.meterLowBrightness = cp.vl["BODY_CONTROL_STATE_2"]["METER_SLIDER_LOW_BRIGHTNESS"] == 1 + # Check EPS LKA/LTA fault status ret.steerFaultTemporary = cp.vl["EPS_STATUS"]["LKA_STATE"] in TEMP_STEER_FAULTS ret.steerFaultPermanent = cp.vl["EPS_STATUS"]["LKA_STATE"] in PERM_STEER_FAULTS diff --git a/selfdrive/ui/qt/offroad/settings.cc b/selfdrive/ui/qt/offroad/settings.cc index 43022d435b3405..29a632062cfe98 100644 --- a/selfdrive/ui/qt/offroad/settings.cc +++ b/selfdrive/ui/qt/offroad/settings.cc @@ -77,6 +77,12 @@ TogglesPanel::TogglesPanel(SettingsWindow *parent) : ListWidget(parent) { tr("Display speed in km/h instead of mph."), "../assets/offroad/icon_radar.png", }, + { + "CarBrightnessControl", + tr("Use Car For Backlight Control"), + tr("Use the car's meter dimmer state for brightness control."), + "../assets/offroad/icon_brightness.png", + }, #ifdef ENABLE_MAPS { "NavSettingTime24h", diff --git a/selfdrive/ui/ui.cc b/selfdrive/ui/ui.cc index db556ce5cccdc7..973895e3225eef 100644 --- a/selfdrive/ui/ui.cc +++ b/selfdrive/ui/ui.cc @@ -157,6 +157,9 @@ static void update_sockets(UIState *s) { static void update_state(UIState *s) { SubMaster &sm = *(s->sm); UIScene &scene = s->scene; + // meter dimmed and low brightness states + s->scene.meterDimmed = sm["carState"].getCarState().getMeterDimmed(); + s->scene.meterLowBrightness = sm["carState"].getCarState().getMeterLowBrightness(); if (sm.updated("liveCalibration")) { auto live_calib = sm["liveCalibration"].getLiveCalibration(); @@ -220,6 +223,7 @@ void ui_update_params(UIState *s) { s->scene.is_metric = params.getBool("IsMetric"); s->scene.map_on_left = params.getBool("NavSettingLeftSide"); s->scene.radar_state = params.getBool("DisplayRadarInfo"); + s->scene.car_brightness = Params().getBool("CarBrightnessControl"); } void UIState::updateStatus() { @@ -320,22 +324,15 @@ void Device::resetInteractiveTimeout(int timeout) { } void Device::updateBrightness(const UIState &s) { - float clipped_brightness = offroad_brightness; - if (s.scene.started) { - clipped_brightness = s.scene.light_sensor; + int brightness; - // CIE 1931 - https://www.photonstophotos.net/GeneralTopics/Exposure/Psychometric_Lightness_and_Gamma.htm - if (clipped_brightness <= 8) { - clipped_brightness = (clipped_brightness / 903.3); - } else { - clipped_brightness = std::pow((clipped_brightness + 16.0) / 116.0, 3.0); - } - - // Scale back to 10% to 100% - clipped_brightness = std::clamp(100.0f * clipped_brightness, 10.0f, 100.0f); + if (s.scene.car_brightness) { + brightness = (s.scene.started) ? (s.scene.meterDimmed) ? 50.0 : (s.scene.meterLowBrightness ? 1.0 : 100.0) : offroad_brightness; + } else { + float clipped_brightness = (s.scene.started) ? std::clamp((s.scene.light_sensor <= 8) ? (s.scene.light_sensor / 903.3) : std::pow((s.scene.light_sensor + 16.0) / 116.0, 3.0) * 100.0f, 10.0f, 100.0f) : offroad_brightness; + brightness = brightness_filter.update(clipped_brightness); } - int brightness = brightness_filter.update(clipped_brightness); if (!awake) { brightness = 0; }