summaryrefslogtreecommitdiff
path: root/light
diff options
context:
space:
mode:
Diffstat (limited to 'light')
-rw-r--r--light/Light.cpp28
-rw-r--r--light/Light.h4
-rw-r--r--light/android.hardware.light@2.0-service.xiaomi_sdm660.rc4
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