From ec8056096bbe6762fc105078ad3c4ea088208524 Mon Sep 17 00:00:00 2001 From: Cosmin Tanislav Date: Tue, 7 Sep 2021 14:43:30 +0300 Subject: [PATCH] sm8350-common: remove light hal Display brightness is handled through composer, and we don't have any other light emitting hardware. --- common.mk | 4 - light/Android.bp | 30 --- light/Light.cpp | 215 ------------------ light/Light.h | 68 ------ ...ardware.light@2.0-service.xiaomi_sm8350.rc | 17 -- light/service.cpp | 50 ---- 6 files changed, 384 deletions(-) delete mode 100644 light/Android.bp delete mode 100644 light/Light.cpp delete mode 100644 light/Light.h delete mode 100644 light/android.hardware.light@2.0-service.xiaomi_sm8350.rc delete mode 100644 light/service.cpp diff --git a/common.mk b/common.mk index e3f3cc3..2e1a909 100644 --- a/common.mk +++ b/common.mk @@ -261,10 +261,6 @@ PRODUCT_PACKAGES += \ PRODUCT_COPY_FILES += \ frameworks/native/data/etc/android.hardware.consumerir.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.consumerir.xml -# Light -# PRODUCT_PACKAGES += \ -# android.hardware.light@2.0-service.xiaomi_sm8350 - # LiveDisplay # PRODUCT_PACKAGES += \ # vendor.lineage.livedisplay@2.0-service-sdm diff --git a/light/Android.bp b/light/Android.bp deleted file mode 100644 index 8380786..0000000 --- a/light/Android.bp +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright (C) 2019 The LineageOS Project -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -cc_binary { - relative_install_path: "hw", - defaults: ["hidl_defaults"], - name: "android.hardware.light@2.0-service.xiaomi_sm8350", - init_rc: ["android.hardware.light@2.0-service.xiaomi_sm8350.rc"], - srcs: ["service.cpp", "Light.cpp"], - vendor: true, - shared_libs: [ - "android.hardware.light@2.0", - "libbase", - "libhardware", - "libhidlbase", - "liblog", - "libutils", - ], -} diff --git a/light/Light.cpp b/light/Light.cpp deleted file mode 100644 index e8f8fdf..0000000 --- a/light/Light.cpp +++ /dev/null @@ -1,215 +0,0 @@ -/* - * Copyright (C) 2018-2019 The LineageOS Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#define LOG_TAG "android.hardware.light@2.0-service.xiaomi_sm8350" - -#include - -#include "Light.h" - -#include - -#define NOTIFICATION_LED "/sys/class/leds/white/" - -#define BREATH "breath" -#define BRIGHTNESS "brightness" - -#define MAX_LED_BRIGHTNESS 255 - -namespace { -/* - * Write value to path and close file. - */ -static void set(std::string path, std::string value) { - std::ofstream file(path); - - if (!file.is_open()) { - ALOGW("failed to write %s to %s", value.c_str(), path.c_str()); - return; - } - - file << value; -} - -static void set(std::string path, int value) { - set(path, std::to_string(value)); -} - -static uint32_t getBrightness(const LightState& state) { - uint32_t alpha, red, green, blue; - - /* - * Extract brightness from AARRGGBB. - */ - alpha = (state.color >> 24) & 0xFF; - red = (state.color >> 16) & 0xFF; - green = (state.color >> 8) & 0xFF; - blue = state.color & 0xFF; - - /* - * Scale RGB brightness using Alpha brightness. - */ - red = red * alpha / 0xFF; - green = green * alpha / 0xFF; - blue = blue * alpha / 0xFF; - - return (77 * red + 150 * green + 29 * blue) >> 8; -} - -static inline uint32_t scaleBrightness(uint32_t brightness, uint32_t maxBrightness) { - if (brightness == 0) { - return 0; - } - - return (brightness - 1) * (maxBrightness - 1) / (0xFF - 1) + 1; -} - -static inline uint32_t getScaledBrightness(const LightState& state, uint32_t maxBrightness) { - return scaleBrightness(getBrightness(state), maxBrightness); -} - -static void handleNotification(const LightState& state) { - uint32_t whiteBrightness = getScaledBrightness(state, MAX_LED_BRIGHTNESS); - - /* Disable breathing or blinking */ - set(NOTIFICATION_LED BREATH, 0); - set(NOTIFICATION_LED BRIGHTNESS, 0); - - if (!whiteBrightness) { - return; - } - - switch (state.flashMode) { - case Flash::HARDWARE: - case Flash::TIMED: - /* Breathing */ - set(NOTIFICATION_LED BREATH, 1); - break; - case Flash::NONE: - default: - set(NOTIFICATION_LED BRIGHTNESS, whiteBrightness); - } -} - -static inline bool isStateLit(const LightState& state) { - return state.color & 0x00ffffff; -} - -static inline bool isStateEqual(const LightState& first, const LightState& second) { - if (first.color == second.color && first.flashMode == second.flashMode && - first.flashOnMs == second.flashOnMs && - first.flashOffMs == second.flashOffMs && - first.brightnessMode == second.brightnessMode) { - return true; - } - - return false; -} - -/* Keep sorted in the order of importance. */ -static std::vector backends = { - { Type::ATTENTION, handleNotification }, - { Type::NOTIFICATIONS, handleNotification }, - { Type::BATTERY, handleNotification }, -}; - -static LightStateHandler findHandler(Type type) { - for (const LightBackend& backend : backends) { - if (backend.type == type) { - return backend.handler; - } - } - - return nullptr; -} - -static LightState findLitState(LightStateHandler handler) { - LightState emptyState; - - for (const LightBackend& backend : backends) { - if (backend.handler == handler) { - if (isStateLit(backend.state)) { - return backend.state; - } - - emptyState = backend.state; - } - } - - return emptyState; -} - -static void updateState(Type type, const LightState& state) { - for (LightBackend& backend : backends) { - if (backend.type == type) { - backend.state = state; - } - } -} - -} // anonymous namespace - -namespace android { -namespace hardware { -namespace light { -namespace V2_0 { -namespace implementation { - -Return Light::setLight(Type type, const LightState& state) { - /* Lock global mutex until light state is updated. */ - std::lock_guard lock(globalLock); - - LightStateHandler handler = findHandler(type); - if (!handler) { - /* If no handler has been found, then the type is not supported. */ - return Status::LIGHT_NOT_SUPPORTED; - } - - /* Find the old state of the current handler. */ - LightState oldState = findLitState(handler); - - /* Update the cached state value for the current type. */ - updateState(type, state); - - /* Find the new state of the current handler. */ - LightState newState = findLitState(handler); - - if (isStateEqual(oldState, newState)) { - return Status::SUCCESS; - } - - handler(newState); - - return Status::SUCCESS; -} - -Return Light::getSupportedTypes(getSupportedTypes_cb _hidl_cb) { - std::vector types; - - for (const LightBackend& backend : backends) { - types.push_back(backend.type); - } - - _hidl_cb(types); - - return Void(); -} - -} // namespace implementation -} // namespace V2_0 -} // namespace light -} // namespace hardware -} // namespace android diff --git a/light/Light.h b/light/Light.h deleted file mode 100644 index 4f102d8..0000000 --- a/light/Light.h +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright (C) 2018 The LineageOS Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef ANDROID_HARDWARE_LIGHT_V2_0_LIGHT_H -#define ANDROID_HARDWARE_LIGHT_V2_0_LIGHT_H - -#include -#include -#include -#include -#include -#include - -using ::android::hardware::Return; -using ::android::hardware::Void; -using ::android::hardware::light::V2_0::Flash; -using ::android::hardware::light::V2_0::ILight; -using ::android::hardware::light::V2_0::LightState; -using ::android::hardware::light::V2_0::Status; -using ::android::hardware::light::V2_0::Type; - -typedef void (*LightStateHandler)(const LightState&); - -struct LightBackend { - Type type; - LightState state; - LightStateHandler handler; - - LightBackend(Type type, LightStateHandler handler) : type(type), handler(handler) { - this->state.color = 0xff000000; - } -}; - -namespace android { -namespace hardware { -namespace light { -namespace V2_0 { -namespace implementation { - -class Light : public ILight { - public: - Return setLight(Type type, const LightState& state) override; - Return getSupportedTypes(getSupportedTypes_cb _hidl_cb) override; - - private: - std::mutex globalLock; -}; - -} // namespace implementation -} // namespace V2_0 -} // namespace light -} // namespace hardware -} // namespace android - -#endif // ANDROID_HARDWARE_LIGHT_V2_0_LIGHT_H diff --git a/light/android.hardware.light@2.0-service.xiaomi_sm8350.rc b/light/android.hardware.light@2.0-service.xiaomi_sm8350.rc deleted file mode 100644 index a226104..0000000 --- a/light/android.hardware.light@2.0-service.xiaomi_sm8350.rc +++ /dev/null @@ -1,17 +0,0 @@ -on boot - chown system system /sys/class/backlight/panel0-backlight/brightness - chown system system /sys/class/backlight/panel0-backlight/max_brightness - chown system system /sys/class/leds/white/brightness - chown system system /sys/class/leds/white/breath - chmod 0644 /sys/class/backlight/panel0-backlight/brightness - chmod 0644 /sys/class/backlight/panel0-backlight/max_brightness - chmod 0644 /sys/class/leds/white/brightness - chmod 0644 /sys/class/leds/white/breath - -service vendor.light-hal-2-0 /vendor/bin/hw/android.hardware.light@2.0-service.xiaomi_sm8350 - interface android.hardware.light@2.0::ILight default - class hal - user system - group system - # shutting off lights while powering-off - shutdown critical diff --git a/light/service.cpp b/light/service.cpp deleted file mode 100644 index 34b2aa8..0000000 --- a/light/service.cpp +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright (C) 2018 The LineageOS Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#define LOG_TAG "android.hardware.light@2.0-service.xiaomi_sm8350" - -#include - -#include "Light.h" - -using android::hardware::configureRpcThreadpool; -using android::hardware::joinRpcThreadpool; - -using android::hardware::light::V2_0::ILight; -using android::hardware::light::V2_0::implementation::Light; - -using android::OK; -using android::sp; -using android::status_t; - -int main() { - sp service = new Light(); - - configureRpcThreadpool(1, true); - - status_t status = service->registerAsService(); - if (status != OK) { - ALOGE("Cannot register Light HAL service."); - return 1; - } - - ALOGI("Light HAL service ready."); - - joinRpcThreadpool(); - - ALOGI("Light HAL service failed to join thread pool."); - return 1; -}