From f9e7851d2b0419bc4189bfb98d17bbb8621d1140 Mon Sep 17 00:00:00 2001 From: electimon Date: Mon, 5 Jul 2021 10:53:29 +0800 Subject: [PATCH] berlna: Fit in the lights aidl Signed-off-by: electimon Change-Id: Id5a24e52ade5001136ba52e3ea90a3bb085af263 --- lights/Android.bp | 28 +--- lights/{aidl => }/Lights.cpp | 0 lights/{aidl => }/Lights.h | 0 .../android.hardware.lights.berlna.rc | 0 .../android.hardware.lights.berlna.xml | 0 lights/hidl/Light.cpp | 140 ------------------ lights/hidl/Light.h | 55 ------- ...droid.hardware.light@2.0-service.berlna.rc | 16 -- ...roid.hardware.light@2.0-service.berlna.xml | 11 -- lights/hidl/service.cpp | 50 ------- lights/{aidl => }/main.cpp | 0 11 files changed, 4 insertions(+), 296 deletions(-) rename lights/{aidl => }/Lights.cpp (100%) rename lights/{aidl => }/Lights.h (100%) rename lights/{aidl => }/android.hardware.lights.berlna.rc (100%) rename lights/{aidl => }/android.hardware.lights.berlna.xml (100%) delete mode 100644 lights/hidl/Light.cpp delete mode 100644 lights/hidl/Light.h delete mode 100644 lights/hidl/android.hardware.light@2.0-service.berlna.rc delete mode 100644 lights/hidl/android.hardware.light@2.0-service.berlna.xml delete mode 100644 lights/hidl/service.cpp rename lights/{aidl => }/main.cpp (100%) diff --git a/lights/Android.bp b/lights/Android.bp index fb9bdba..0d352ac 100644 --- a/lights/Android.bp +++ b/lights/Android.bp @@ -13,31 +13,11 @@ // See the License for the specific language governing permissions and // limitations under the License. -cc_binary { - name: "android.hardware.light@2.0-service.berlna", - defaults: ["hidl_defaults"], - init_rc: ["hidl/android.hardware.light@2.0-service.berlna.rc"], - vintf_fragments: ["hidl/android.hardware.light@2.0-service.berlna.xml"], - srcs: [ - "hidl/service.cpp", - "hidl/Light.cpp", - ], - shared_libs: [ - "libbase", - "libhidlbase", - "liblog", - "libutils", - "android.hardware.light@2.0", - ], - relative_install_path: "hw", - vendor: true, -} - cc_binary { name: "android.hardware.lights-service.berlna", relative_install_path: "hw", - init_rc: ["aidl/android.hardware.lights.berlna.rc"], - vintf_fragments: ["aidl/android.hardware.lights.berlna.xml"], + init_rc: ["android.hardware.lights.berlna.rc"], + vintf_fragments: ["android.hardware.lights.berlna.xml"], vendor: true, shared_libs: [ "libbase", @@ -47,7 +27,7 @@ cc_binary { "android.hardware.light-ndk_platform", ], srcs: [ - "aidl/Lights.cpp", - "aidl/main.cpp", + "Lights.cpp", + "main.cpp", ], } diff --git a/lights/aidl/Lights.cpp b/lights/Lights.cpp similarity index 100% rename from lights/aidl/Lights.cpp rename to lights/Lights.cpp diff --git a/lights/aidl/Lights.h b/lights/Lights.h similarity index 100% rename from lights/aidl/Lights.h rename to lights/Lights.h diff --git a/lights/aidl/android.hardware.lights.berlna.rc b/lights/android.hardware.lights.berlna.rc similarity index 100% rename from lights/aidl/android.hardware.lights.berlna.rc rename to lights/android.hardware.lights.berlna.rc diff --git a/lights/aidl/android.hardware.lights.berlna.xml b/lights/android.hardware.lights.berlna.xml similarity index 100% rename from lights/aidl/android.hardware.lights.berlna.xml rename to lights/android.hardware.lights.berlna.xml diff --git a/lights/hidl/Light.cpp b/lights/hidl/Light.cpp deleted file mode 100644 index e6c5cc2..0000000 --- a/lights/hidl/Light.cpp +++ /dev/null @@ -1,140 +0,0 @@ -/* - * Copyright (C) 2017 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.berlna" - -#include - -#include "Light.h" - -#include - -namespace android { -namespace hardware { -namespace light { -namespace V2_0 { -namespace implementation { - -#define LEDS "/sys/class/leds/" - -#define LCD_LED LEDS "lcd-backlight/" -#define CHARGING_LED LEDS "charging/" - -#define BRIGHTNESS "brightness" -#define BREATH "breath" -#define DELAY_OFF "delay_off" -#define DELAY_ON "delay_on" - -/* - * Write value to path and close file. - */ -static void set(std::string path, std::string value) { - std::ofstream file(path); - - if (!file.is_open()) { - ALOGE("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 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); - set(LCD_LED BRIGHTNESS, brightness); -} - -static void handleNotification(const LightState& state) { - uint32_t alpha, brightness; - - /* - * Extract brightness from AARRGGBB. - */ - alpha = (state.color >> 24) & 0xFF; - brightness = rgbToBrightness(state); - - /* - * Scale brightness if the Alpha brightness is not 0xFF. - */ - if (alpha != 0xFF) - brightness = (brightness * alpha) / 0xFF; - - /* Disable blinking. */ - set(CHARGING_LED BREATH, 0); - - if (state.flashMode == Flash::TIMED) { - /* Set LED */ - set(CHARGING_LED DELAY_OFF, state.flashOffMs); - set(CHARGING_LED DELAY_ON, state.flashOnMs); - - /* Enable blinking. */ - set(CHARGING_LED BREATH, 1); - } else { - set(CHARGING_LED BRIGHTNESS, brightness); - } -} - -static std::map> lights = { - {Type::BACKLIGHT, handleBacklight}, - {Type::BATTERY, handleNotification}, - {Type::NOTIFICATIONS, handleNotification}, - {Type::ATTENTION, handleNotification}, -}; - -Light::Light() {} - -Return Light::setLight(Type type, const LightState& state) { - auto it = lights.find(type); - - if (it == lights.end()) { - return Status::LIGHT_NOT_SUPPORTED; - } - - /* - * Lock global mutex until light state is updated. - */ - std::lock_guard lock(globalLock); - - it->second(state); - - return Status::SUCCESS; -} - -Return Light::getSupportedTypes(getSupportedTypes_cb _hidl_cb) { - std::vector types; - - for (auto const& light : lights) types.push_back(light.first); - - _hidl_cb(types); - - return Void(); -} - -} // namespace implementation -} // namespace V2_0 -} // namespace light -} // namespace hardware -} // namespace android diff --git a/lights/hidl/Light.h b/lights/hidl/Light.h deleted file mode 100644 index 5b3d0ef..0000000 --- a/lights/hidl/Light.h +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright (C) 2017 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 - -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: - 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/lights/hidl/android.hardware.light@2.0-service.berlna.rc b/lights/hidl/android.hardware.light@2.0-service.berlna.rc deleted file mode 100644 index e549f67..0000000 --- a/lights/hidl/android.hardware.light@2.0-service.berlna.rc +++ /dev/null @@ -1,16 +0,0 @@ -service vendor.light-hal-2-0 /vendor/bin/hw/android.hardware.light@2.0-service.berlna - class hal - user system - group system - -on boot - # Change ownership and permission for leds backlight - chmod 0664 /sys/class/leds/lcd-backlight/brightness - chown system system /sys/class/leds/charging/brightness - chmod 0664 /sys/class/leds/charging/brightness - chown system system /sys/class/leds/charging/breath - chmod 660 /sys/class/leds/charging/breath - chown system system /sys/class/leds/charging/delay_off - chmod 660 /sys/class/leds/charging/delay_off - chown system system /sys/class/leds/charging/delay_on - chmod 660 /sys/class/leds/charging/delay_on diff --git a/lights/hidl/android.hardware.light@2.0-service.berlna.xml b/lights/hidl/android.hardware.light@2.0-service.berlna.xml deleted file mode 100644 index 98b3794..0000000 --- a/lights/hidl/android.hardware.light@2.0-service.berlna.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - android.hardware.light - hwbinder - 2.0 - - ILight - default - - - \ No newline at end of file diff --git a/lights/hidl/service.cpp b/lights/hidl/service.cpp deleted file mode 100644 index b6afccf..0000000 --- a/lights/hidl/service.cpp +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright 2017 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.berlna" - -#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() { - android::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; -} diff --git a/lights/aidl/main.cpp b/lights/main.cpp similarity index 100% rename from lights/aidl/main.cpp rename to lights/main.cpp