From 5d7dcdfc693811c738bd8e2fcfc747b81459b5d1 Mon Sep 17 00:00:00 2001 From: jeangraff30 Date: Sun, 27 Dec 2020 23:38:19 -0300 Subject: [PATCH] msm8953: kang light hal from moto msm8937 tree --- Android.bp | 5 +- light/Android.bp | 37 +++--- light/Light.cpp | 115 +++++++----------- light/Light.h | 28 ++--- ...ware.light@2.0-service.motorola_msm8953.rc | 5 - ...roid.hardware.light@2.0-service.msm8953.rc | 12 ++ light/service.cpp | 32 ++--- msm8953.mk | 3 +- .../base/core/res/res/values/config.xml | 3 + rootdir/etc/init.target.rc | 14 --- sepolicy/vendor/file_contexts | 2 +- 11 files changed, 109 insertions(+), 147 deletions(-) delete mode 100644 light/android.hardware.light@2.0-service.motorola_msm8953.rc create mode 100644 light/android.hardware.light@2.0-service.msm8953.rc diff --git a/Android.bp b/Android.bp index 9515b25..f61e31b 100644 --- a/Android.bp +++ b/Android.bp @@ -1,2 +1,3 @@ -soong_namespace { -} +subdirs = [ + "light", +] diff --git a/light/Android.bp b/light/Android.bp index 146c2e0..6c6cf9e 100644 --- a/light/Android.bp +++ b/light/Android.bp @@ -1,32 +1,25 @@ // -// Copyright (C) 2017 The LineageOS Project +// SPDX-License-Identifier: GPL-3.0-or-later // -// 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 +// Copyright (C) 2019, Harshit Jain // -// 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.motorola_msm8953", - proprietary: true, - init_rc: ["android.hardware.light@2.0-service.motorola_msm8953.rc"], + name: "android.hardware.light@2.0-service.msm8953", + init_rc: ["android.hardware.light@2.0-service.msm8953.rc"], srcs: ["service.cpp", "Light.cpp"], shared_libs: [ - "libhardware", - "libhidlbase", - "libhidltransport", - "liblog", - "libhwbinder", - "libutils", - "android.hardware.light@2.0", + "libhardware", + "libhidlbase", + "libhidltransport", + "liblog", + "libhwbinder", + "libcutils", + "libutils", + "android.hardware.light@2.0", ], + relative_install_path : "hw", + vendor: true, } diff --git a/light/Light.cpp b/light/Light.cpp index 24a2301..a80aac6 100644 --- a/light/Light.cpp +++ b/light/Light.cpp @@ -1,26 +1,14 @@ /* - * Copyright (C) 2017 The LineageOS Project + * SPDX-License-Identifier: GPL-3.0-or-later * - * 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. + * Copyright (C) 2019, Harshit Jain */ -#define LOG_TAG "LightService" +#define LOG_TAG "android.hardware.light@2.0-service.msm8953" #include - -#include "Light.h" - #include +#include "Light.h" namespace android { namespace hardware { @@ -28,74 +16,66 @@ namespace light { namespace V2_0 { namespace implementation { -#define LED_LIGHT_OFF 0 -#define LED_LIGHT_BLINK_FAST 1 -#define LED_LIGHT_BLINK_SLOW 2 -#define LED_LIGHT_SOLID_ON 3 - -#define LEDS "/sys/class/leds/" - -#define LCD_LED LEDS "lcd-backlight/" -#define CHARGING_LED LEDS "charging/" - -#define BRIGHTNESS "brightness" - +#define LEDS "/sys/class/leds/" +#define LCD_LED LEDS "lcd-backlight/" +#define BRIGHTNESS "brightness" +#define WHITE LEDS "white/" /* * Write value to path and close file. */ static void set(std::string path, std::string value) { std::ofstream file(path); - file << value; + /* Only write brightness value if stream is open, alive & well */ + if (file.is_open()) { + file << value; + } else { + /* Fire a warning a bail out */ + ALOGE("failed to write %s to %s", value.c_str(), path.c_str()); + return; + } } static void set(std::string path, int value) { set(path, std::to_string(value)); } -static uint32_t is_lit(const LightState& state) { +static inline bool isLit(const LightState& state) { return state.color & 0x00ffffff; } -static uint32_t rgbToBrightness(const LightState& state) { - uint32_t color = state.color & 0x00ffffff; - return ((77 * ((color >> 16) & 0xff)) + (150 * ((color >> 8) & 0xff)) + - (29 * (color & 0xff))) >> 8; -} - -static void handleBacklight(const LightState& state) { - uint32_t brightness = rgbToBrightness(state); +/* + * Device specific methods + */ +static void Backlight(const LightState& state) { + uint32_t brightness = state.color & 0xFF; set(LCD_LED BRIGHTNESS, brightness); } -static void handleBattery(const LightState& state) { - uint32_t Brightness; - - if (is_lit(state)) - Brightness = LED_LIGHT_SOLID_ON; - else - Brightness = LED_LIGHT_OFF; - - set(CHARGING_LED BRIGHTNESS, Brightness); +static inline void Led(const LightState& state, uint32_t pattern) { + isLit(state) ? set(WHITE BRIGHTNESS, pattern) : set(WHITE BRIGHTNESS, 0); } -static void handleNotification(const LightState& state) { - uint32_t Brightness; - - if (is_lit(state)) - Brightness = LED_LIGHT_BLINK_SLOW; - else - Brightness = LED_LIGHT_OFF; - - set(CHARGING_LED BRIGHTNESS, Brightness); +static void Notification(const LightState& state) { + /* Fast blink */ + Led(state, 1); } +static void Attention(const LightState& state) { + /* Slow blink */ + Led(state, 2); +} + +static void ChargingNotification(const LightState& state) { + /* Steady Led */ + Led(state, 3); +} static std::map> lights = { - {Type::BACKLIGHT, handleBacklight}, - {Type::BATTERY, handleBattery}, - {Type::NOTIFICATIONS, handleNotification}, - {Type::ATTENTION, handleNotification}, + {Type::BACKLIGHT, Backlight}, + {Type::NOTIFICATIONS, Notification}, + {Type::BATTERY, ChargingNotification}, + {Type::ATTENTION, Attention}, }; Light::Light() {} @@ -110,10 +90,9 @@ Return Light::setLight(Type type, const LightState& state) { /* * Lock global mutex until light state is updated. */ + std::lock_guard lock(globalLock); - it->second(state); - return Status::SUCCESS; } @@ -126,9 +105,9 @@ Return Light::getSupportedTypes(getSupportedTypes_cb _hidl_cb) { return Void(); } - -} // namespace implementation -} // namespace V2_0 -} // namespace light -} // namespace hardware -} // namespace android +/* Close all the namespaces */ +} +} +} +} +} diff --git a/light/Light.h b/light/Light.h index 293c59d..7573d57 100644 --- a/light/Light.h +++ b/light/Light.h @@ -1,17 +1,7 @@ /* - * Copyright (C) 2017 The LineageOS Project + * SPDX-License-Identifier: GPL-3.0-or-later * - * 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. + * Copyright (C) 2019, Harshit Jain */ #ifndef ANDROID_HARDWARE_LIGHT_V2_0_LIGHT_H @@ -38,14 +28,14 @@ using ::android::hardware::light::V2_0::Status; using ::android::hardware::light::V2_0::Type; class Light : public ILight { - public: - Light(); + public: + Light(); - Return setLight(Type type, const LightState& state) override; - Return getSupportedTypes(getSupportedTypes_cb _hidl_cb) override; + Return setLight(Type type, const LightState& state) override; + Return getSupportedTypes(getSupportedTypes_cb _hidl_cb) override; - private: - std::mutex globalLock; + private: + std::mutex globalLock; }; } // namespace implementation @@ -54,4 +44,4 @@ class Light : public ILight { } // namespace hardware } // namespace android -#endif // ANDROID_HARDWARE_LIGHT_V2_0_LIGHT_H +#endif // ANDROID_HARDWARE_LIGHT_V2_0_LIGHT_H \ No newline at end of file diff --git a/light/android.hardware.light@2.0-service.motorola_msm8953.rc b/light/android.hardware.light@2.0-service.motorola_msm8953.rc deleted file mode 100644 index 99e628b..0000000 --- a/light/android.hardware.light@2.0-service.motorola_msm8953.rc +++ /dev/null @@ -1,5 +0,0 @@ -service vendor.light-hal-2-0 /vendor/bin/hw/android.hardware.light@2.0-service.motorola_msm8953 - class hal - user system - group system - shutdown critical diff --git a/light/android.hardware.light@2.0-service.msm8953.rc b/light/android.hardware.light@2.0-service.msm8953.rc new file mode 100644 index 0000000..8f8700a --- /dev/null +++ b/light/android.hardware.light@2.0-service.msm8953.rc @@ -0,0 +1,12 @@ +on boot + # Notification LED + chown system system /sys/class/leds/white/brightness + chmod 660 /sys/class/leds/white/brightness + +service light-hal-2-0 /vendor/bin/hw/android.hardware.light@2.0-service.msm8953 + 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 index 583e268..7e1c19b 100644 --- a/light/service.cpp +++ b/light/service.cpp @@ -1,20 +1,14 @@ /* - * Copyright 2017 The LineageOS Project + * SPDX-License-Identifier: GPL-3.0-or-later * - * 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. + * Copyright (C) 2019, Harshit Jain */ -#define LOG_TAG "android.hardware.light@2.0-service.motorola_msm8953" +#define LOG_TAG "android.hardware.light@2.0-service.msm8953" + +/* dev-harsh1998: set page size to 32Kb for our hal */ +#include +#include #include @@ -30,8 +24,18 @@ using android::OK; using android::sp; using android::status_t; +#define DEFAULT_LGTHAL_HW_BINDER_SIZE_KB 32 +size_t getHWBinderMmapSize() { + size_t value = 0; + value = property_get_int32("persist.vendor.msm8953.lighthal.hw.binder.size", DEFAULT_LGTHAL_HW_BINDER_SIZE_KB); + if (!value) value = DEFAULT_LGTHAL_HW_BINDER_SIZE_KB; // deafult to 1 page of 32 Kb + return 1024 * value; +} + int main() { - sp service = new Light(); + /* default to 32Kb */ + android::hardware::ProcessState::initWithMmapSize(getHWBinderMmapSize()); + android::sp service = new Light(); configureRpcThreadpool(1, true); diff --git a/msm8953.mk b/msm8953.mk index ea49cf6..f1e7f48 100644 --- a/msm8953.mk +++ b/msm8953.mk @@ -227,8 +227,7 @@ PRODUCT_COPY_FILES += \ # Lights PRODUCT_PACKAGES += \ - android.hardware.light@2.0-impl \ - android.hardware.light@2.0-service.motorola_msm8953 + android.hardware.light@2.0-service.msm8953 # Media PRODUCT_COPY_FILES += \ diff --git a/overlay/frameworks/base/core/res/res/values/config.xml b/overlay/frameworks/base/core/res/res/values/config.xml index 74a1a9c..e814aa2 100644 --- a/overlay/frameworks/base/core/res/res/values/config.xml +++ b/overlay/frameworks/base/core/res/res/values/config.xml @@ -49,6 +49,9 @@ true + + true + false diff --git a/rootdir/etc/init.target.rc b/rootdir/etc/init.target.rc index b4c4714..83c0188 100644 --- a/rootdir/etc/init.target.rc +++ b/rootdir/etc/init.target.rc @@ -329,17 +329,3 @@ service energy-awareness /system/vendor/bin/energy-awareness on boot write /sys/devices/soc/78b8000.i2c/i2c-4/4-0020/input/input0/fw_name PR1702898-s3528t_00260005_00380008.img write /sys/devices/soc/78b8000.i2c/i2c-4/4-0020/input/input0/update_fw 1 - -on boot - chown system iystem /sys/class/leds/red/blink - chown system system /sys/class/leds/red/breath - chown system system /sys/class/leds/red/delay_on - chown system system /sys/class/leds/red/delay_off - chown system system /sys/class/leds/green/blink - chown system system /sys/class/leds/green/breath - chown system system /sys/class/leds/green/delay_on - chown system system /sys/class/leds/green/delay_off - chown system system /sys/class/leds/blue/blink - chown system system /sys/class/leds/blue/breath - chown system system /sys/class/leds/blue/delay_on - chown system system /sys/class/leds/blue/delay_off diff --git a/sepolicy/vendor/file_contexts b/sepolicy/vendor/file_contexts index 159b282..302d533 100644 --- a/sepolicy/vendor/file_contexts +++ b/sepolicy/vendor/file_contexts @@ -26,7 +26,7 @@ /(vendor|system/vendor)/bin/hw/android\.hardware\.biometrics\.fingerprint@2\.1-fpcservice u:object_r:hal_fingerprint_fpc_exec:s0 /(vendor|system/vendor)/bin/hw/android\.hardware\.biometrics\.fingerprint@2\.1-service-ets u:object_r:hal_fingerprint_fpc_exec:s0 -/(vendor|system/vendor)/bin/hw/android\.hardware\.light@2\.0-service.motorola_msm8953 u:object_r:hal_light_default_exec:s0 +/(vendor|system/vendor)/bin/hw/android\.hardware\.light@2\.0-service\.msm8953 u:object_r:hal_light_default_exec:s0 /(vendor|system/vendor)/bin/hw/vendor\.dolby\.hardware\.dms@1\.0-service u:object_r:hal_dms_default_exec:s0 /(vendor|system/vendor)/bin/init\.mmi\.(laser|usb)\.sh u:object_r:qti_init_shell_exec:s0 /(vendor|system/vendor)/bin/init\.qcom\.power\.sh u:object_r:qti_init_shell_exec:s0