diff --git a/light/Android.bp b/light/Android.bp deleted file mode 100644 index 01f852d..0000000 --- a/light/Android.bp +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright (C) 2018,2020 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_sdm845", - init_rc: ["android.hardware.light@2.0-service.xiaomi_sdm845.rc"], - vintf_fragments: ["android.hardware.light@2.0-service.xiaomi_sdm845.xml"], - 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 ca27511..0000000 --- a/light/Light.cpp +++ /dev/null @@ -1,154 +0,0 @@ -/* - * Copyright (C) 2018-2020 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 "LightsService" - -#include "Light.h" - -#include -#include -#include - -namespace android { -namespace hardware { -namespace light { -namespace V2_0 { -namespace implementation { - -/* - * Write value to path and close file. - */ -template -static void set(const std::string& path, const T& value) { - std::ofstream file(path); - file << value; -} - -static constexpr int kDefaultMaxBrightness = 255; -static constexpr int kRampSteps = 8; -static constexpr int kRampMaxStepDurationMs = 50; - -static uint32_t getBrightness(const LightState& state) { - uint32_t alpha, red, green, blue; - - // Extract brightness from AARRGGBB - alpha = (state.color >> 24) & 0xff; - - // Retrieve each of the RGB colors - red = (state.color >> 16) & 0xff; - green = (state.color >> 8) & 0xff; - blue = state.color & 0xff; - - // Scale RGB colors if a brightness has been applied by the user - if (alpha != 0xff) { - red = red * alpha / 0xff; - green = green * alpha / 0xff; - blue = blue * alpha / 0xff; - } - - return (77 * red + 150 * green + 29 * blue) >> 8; -} - -Light::Light() { - mLights.emplace(Type::ATTENTION, std::bind(&Light::handleWhiteLed, this, std::placeholders::_1, 0)); - mLights.emplace(Type::BATTERY, std::bind(&Light::handleWhiteLed, this, std::placeholders::_1, 2)); - mLights.emplace(Type::NOTIFICATIONS, std::bind(&Light::handleWhiteLed, this, std::placeholders::_1, 1)); -} - -void Light::handleWhiteLed(const LightState& state, size_t index) { - mLightStates.at(index) = state; - - LightState stateToUse = mLightStates.front(); - for (const auto& lightState : mLightStates) { - if (lightState.color & 0xffffff) { - stateToUse = lightState; - break; - } - } - - uint32_t whiteBrightness = getBrightness(stateToUse); - - auto getScaledDutyPercent = [](int brightness) -> std::string { - std::string output; - for (int i = 0; i <= kRampSteps; i++) { - if (i != 0) { - output += ","; - } - output += std::to_string(i * 100 * brightness / (kDefaultMaxBrightness * kRampSteps)); - } - return output; - }; - - // Disable blinking to start - set("/sys/class/leds/white/blink", 0); - - if (stateToUse.flashMode == Flash::TIMED) { - // If the flashOnMs duration is not long enough to fit ramping up and down - // at the default step duration, step duration is modified to fit. - int32_t stepDuration = kRampMaxStepDurationMs; - int32_t pauseHi = stateToUse.flashOnMs - (stepDuration * kRampSteps * 2); - int32_t pauseLo = stateToUse.flashOffMs; - - if (pauseHi < 0) { - stepDuration = stateToUse.flashOnMs / (kRampSteps * 2); - pauseHi = 0; - } - - set("/sys/class/leds/white/start_idx", 0); - set("/sys/class/leds/white/duty_pcts", getScaledDutyPercent(whiteBrightness)); - set("/sys/class/leds/white/pause_lo", pauseLo); - set("/sys/class/leds/white/pause_hi", pauseHi); - set("/sys/class/leds/white/ramp_step_ms", stepDuration); - - // Start blinking - set("/sys/class/leds/white/blink", 1); - } else { - set("/sys/class/leds/white/brightness", whiteBrightness); - } -} - -Return Light::setLight(Type type, const LightState& state) { - auto it = mLights.find(type); - - if (it == mLights.end()) { - return Status::LIGHT_NOT_SUPPORTED; - } - - // Lock global mutex until light state is updated. - std::lock_guard lock(mLock); - - it->second(state); - - return Status::SUCCESS; -} - -Return Light::getSupportedTypes(getSupportedTypes_cb _hidl_cb) { - std::vector types; - - for (auto const& light : mLights) { - types.push_back(light.first); - } - - _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 29e98a2..0000000 --- a/light/Light.h +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright (C) 2018-2020 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 - -namespace android { -namespace hardware { -namespace light { -namespace V2_0 { -namespace implementation { - -using ::android::hardware::Return; -using ::android::hardware::Void; -using ::android::hardware::hidl_vec; -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; - -class Light : public ILight { - public: - Light(); - - Return setLight(Type type, const LightState& state) override; - Return getSupportedTypes(getSupportedTypes_cb _hidl_cb) override; - - private: - void handleWhiteLed(const LightState& state, size_t index); - - std::mutex mLock; - std::unordered_map> mLights; - std::array mLightStates; -}; - -} // 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_sdm845.rc b/light/android.hardware.light@2.0-service.xiaomi_sdm845.rc deleted file mode 100644 index 71edaf4..0000000 --- a/light/android.hardware.light@2.0-service.xiaomi_sdm845.rc +++ /dev/null @@ -1,24 +0,0 @@ -on boot - chown system system /sys/class/leds/white/brightness - - chown system system /sys/class/leds/white/blink - chown system system /sys/class/leds/white/duty_pcts - chown system system /sys/class/leds/white/pause_hi - chown system system /sys/class/leds/white/pause_lo - chown system system /sys/class/leds/white/ramp_step_ms - chown system system /sys/class/leds/white/start_idx - - chmod 660 /sys/class/leds/white/blink - chmod 660 /sys/class/leds/white/duty_pcts - chmod 660 /sys/class/leds/white/pause_hi - chmod 660 /sys/class/leds/white/pause_lo - chmod 660 /sys/class/leds/white/ramp_step_ms - chmod 660 /sys/class/leds/white/start_idx - -service vendor.light-hal-2-0 /vendor/bin/hw/android.hardware.light@2.0-service.xiaomi_sdm845 - 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/android.hardware.light@2.0-service.xiaomi_sdm845.xml b/light/android.hardware.light@2.0-service.xiaomi_sdm845.xml deleted file mode 100644 index 6bf62e9..0000000 --- a/light/android.hardware.light@2.0-service.xiaomi_sdm845.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - android.hardware.light - hwbinder - 2.0 - - ILight - default - - - diff --git a/light/service.cpp b/light/service.cpp deleted file mode 100644 index f7c4ae0..0000000 --- a/light/service.cpp +++ /dev/null @@ -1,62 +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_sdm845" - -#include -#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() { - status_t status; - sp service = nullptr; - - LOG(INFO) << "Light HAL service 2.0 is starting."; - - service = new Light(); - if (service == nullptr) { - LOG(ERROR) << "Can not create an instance of Light HAL Iface, exiting."; - goto shutdown; - } - - configureRpcThreadpool(1, true /*callerWillJoin*/); - - status = service->registerAsService(); - if (status != OK) { - LOG(ERROR) << "Could not register service for Light HAL Iface (" << status << ")"; - goto shutdown; - } - - LOG(INFO) << "Light HAL service is ready."; - joinRpcThreadpool(); - // Should not pass this line - -shutdown: - // In normal operation, we don't expect the thread pool to exit - LOG(ERROR) << "Light HAL service is shutting down."; - return 1; -} diff --git a/sdm845.mk b/sdm845.mk index c1609da..dbdda26 100644 --- a/sdm845.mk +++ b/sdm845.mk @@ -221,7 +221,7 @@ PRODUCT_PACKAGES += \ # Lights PRODUCT_PACKAGES += \ - android.hardware.light@2.0-service.xiaomi_sdm845 + android.hardware.light-service.xiaomi # Lineage Health PRODUCT_PACKAGES += \ diff --git a/sepolicy/vendor/file_contexts b/sepolicy/vendor/file_contexts index 7cc89d6..3aacc12 100644 --- a/sepolicy/vendor/file_contexts +++ b/sepolicy/vendor/file_contexts @@ -49,7 +49,7 @@ # HALs /vendor/bin/hw/android\.hardware\.biometrics\.fingerprint@2\.3-service\.xiaomi u:object_r:hal_fingerprint_default_exec:s0 -/vendor/bin/hw/android\.hardware\.light@2\.0-service\.xiaomi_sdm845 u:object_r:hal_light_default_exec:s0 +/vendor/bin/hw/android\.hardware\.light-service\.xiaomi u:object_r:hal_light_default_exec:s0 /vendor/bin/hw/android\.hardware\.neuralnetworks@1\.2-service-qti u:object_r:hal_neuralnetworks_default_exec:s0 /vendor/bin/hw/vendor\.lineage\.livedisplay@2\.0-service\.xiaomi_sdm845 u:object_r:hal_lineage_livedisplay_qti_exec:s0