diff options
author | dianlujitao <dianlujitao@lineageos.org> | 2020-02-07 00:04:57 +0800 |
---|---|---|
committer | Michael Bestas <mkbestas@lineageos.org> | 2020-04-30 00:49:34 +0300 |
commit | f417401d5b9b0f8e7bd4c04781150394b7569163 (patch) | |
tree | 2348af4ce40638a21085eeb6a1236b2a665c3ba4 | |
parent | 54bb90253415cf4d301f8d99ec7cf775ca432439 (diff) |
sdm660-common: Support button backlight
Change-Id: Id13a42976df428c95c19eae49e1c114f057510bb
-rw-r--r-- | light/Light.cpp | 28 | ||||
-rw-r--r-- | light/Light.h | 4 | ||||
-rw-r--r-- | light/android.hardware.light@2.0-service.xiaomi_sdm660.rc | 4 |
3 files changed, 36 insertions, 0 deletions
diff --git a/light/Light.cpp b/light/Light.cpp index 0286b6a..1702603 100644 --- a/light/Light.cpp +++ b/light/Light.cpp @@ -24,6 +24,7 @@ #include <android-base/file.h> #include <android-base/logging.h> +#include <unistd.h> namespace { @@ -35,6 +36,8 @@ namespace { #define LEDS(x) PPCAT(/sys/class/leds, x) #define LCD_ATTR(x) STRINGIFY(PPCAT(LEDS(lcd-backlight), x)) #define WHITE_ATTR(x) STRINGIFY(PPCAT(LEDS(white), x)) +#define BUTTON_ATTR(x) STRINGIFY(PPCAT(LEDS(button-backlight), x)) +#define BUTTON1_ATTR(x) STRINGIFY(PPCAT(LEDS(button-backlight1), x)) using ::android::base::ReadFileToString; using ::android::base::WriteStringToFile; @@ -125,6 +128,24 @@ Light::Light() { max_led_brightness_ = kDefaultMaxLedBrightness; LOG(ERROR) << "Failed to read max LED brightness, fallback to " << kDefaultMaxLedBrightness; } + + if (!access(BUTTON_ATTR(brightness), W_OK)) { + lights_.emplace(std::make_pair(Type::BUTTONS, + [this](auto&&... args) { setLightButtons(args...); })); + buttons_.emplace_back(BUTTON_ATTR(brightness)); + + if (!access(BUTTON1_ATTR(brightness), W_OK)) { + buttons_.emplace_back(BUTTON1_ATTR(brightness)); + } + + if (ReadFileToString(BUTTON_ATTR(max_brightness), &buf)) { + max_button_brightness_ = std::stoi(buf); + } else { + max_button_brightness_ = kDefaultMaxLedBrightness; + LOG(ERROR) << "Failed to read max button brightness, fallback to " + << kDefaultMaxLedBrightness; + } + } } Return<Status> Light::setLight(Type type, const LightState& state) { @@ -154,6 +175,13 @@ void Light::setLightBacklight(Type /*type*/, const LightState& state) { WriteToFile(LCD_ATTR(brightness), brightness); } +void Light::setLightButtons(Type /*type*/, const LightState& state) { + uint32_t brightness = RgbaToBrightness(state.color, max_button_brightness_); + for (auto&& button : buttons_) { + WriteToFile(button, brightness); + } +} + void Light::setLightNotification(Type type, const LightState& state) { bool found = false; for (auto&& [cur_type, cur_state] : notif_states_) { diff --git a/light/Light.h b/light/Light.h index 7acefa7..1a28589 100644 --- a/light/Light.h +++ b/light/Light.h @@ -41,9 +41,11 @@ class Light : public ILight { private: void setLightBacklight(Type type, const LightState& state); + void setLightButtons(Type type, const LightState& state); void setLightNotification(Type type, const LightState& state); void applyNotificationState(const LightState& state); + uint32_t max_button_brightness_; uint32_t max_led_brightness_; uint32_t max_screen_brightness_; @@ -57,6 +59,8 @@ class Light : public ILight { {Type::NOTIFICATIONS, {}}, {Type::BATTERY, {}}, }}; + + std::vector<std::string> buttons_; }; } // namespace implementation diff --git a/light/android.hardware.light@2.0-service.xiaomi_sdm660.rc b/light/android.hardware.light@2.0-service.xiaomi_sdm660.rc index 969bdac..46a2e62 100644 --- a/light/android.hardware.light@2.0-service.xiaomi_sdm660.rc +++ b/light/android.hardware.light@2.0-service.xiaomi_sdm660.rc @@ -9,6 +9,10 @@ on boot chown system system /sys/class/leds/white/ramp_step_ms chown system system /sys/class/leds/white/start_idx + chown system system /sys/class/leds/button-backlight/max_brightness + chown system system /sys/class/leds/button-backlight1/brightness + chown system system /sys/class/leds/button-backlight1/max_brightness + chown system system /sys/class/leds/lcd-backlight/max_brightness start vendor.light-hal-2-0 |