--- /dev/null
+BasedOnStyle: Google
+AccessModifierOffset: -2
+AllowShortFunctionsOnASingleLine: Inline
+ColumnLimit: 100
+CommentPragmas: NOLINT:.*
+DerivePointerAlignment: false
+IndentWidth: 4
+PointerAlignment: Left
+TabWidth: 4
+UseTab: Never
+PenaltyExcessCharacter: 32
--- /dev/null
+/*
+ * 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.
+ */
+
+#include <android-base/file.h>
+#include <android-base/strings.h>
+
+#include <fstream>
+
+#include "AdaptiveBacklight.h"
+
+using android::base::ReadFileToString;
+using android::base::Trim;
+using android::base::WriteStringToFile;
+
+namespace vendor {
+namespace lineage {
+namespace livedisplay {
+namespace V2_0 {
+namespace samsung {
+
+static constexpr const char* kBacklightPath = "/sys/class/lcd/panel/power_reduce";
+
+bool AdaptiveBacklight::isSupported() {
+ std::fstream backlight(kBacklightPath, backlight.in | backlight.out);
+ return backlight.good();
+}
+
+// Methods from ::vendor::lineage::livedisplay::V2_0::IAdaptiveBacklight follow.
+Return<bool> AdaptiveBacklight::isEnabled() {
+ std::string tmp;
+ int32_t contents = 0;
+
+ if (ReadFileToString(kBacklightPath, &tmp)) {
+ contents = std::stoi(Trim(tmp));
+ }
+
+ return contents > 0;
+}
+
+Return<bool> AdaptiveBacklight::setEnabled(bool enabled) {
+ return WriteStringToFile(enabled ? "1" : "0", kBacklightPath, true);
+}
+
+} // namespace samsung
+} // namespace V2_0
+} // namespace livedisplay
+} // namespace lineage
+} // namespace vendor
--- /dev/null
+/*
+ * 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.
+ */
+
+#ifndef VENDOR_LINEAGE_LIVEDISPLAY_V2_0_ADAPTIVEBACKLIGHT_H
+#define VENDOR_LINEAGE_LIVEDISPLAY_V2_0_ADAPTIVEBACKLIGHT_H
+
+#include <hidl/MQDescriptor.h>
+#include <hidl/Status.h>
+#include <vendor/lineage/livedisplay/2.0/IAdaptiveBacklight.h>
+
+namespace vendor {
+namespace lineage {
+namespace livedisplay {
+namespace V2_0 {
+namespace samsung {
+
+using ::android::hardware::hidl_array;
+using ::android::hardware::hidl_memory;
+using ::android::hardware::hidl_string;
+using ::android::hardware::hidl_vec;
+using ::android::hardware::Return;
+using ::android::hardware::Void;
+using ::android::sp;
+
+class AdaptiveBacklight : public IAdaptiveBacklight {
+ public:
+ bool isSupported();
+
+ // Methods from ::vendor::lineage::livedisplay::V2_0::IAdaptiveBacklight follow.
+ Return<bool> isEnabled() override;
+ Return<bool> setEnabled(bool enabled) override;
+
+ // Methods from ::android::hidl::base::V1_0::IBase follow.
+};
+
+} // namespace samsung
+} // namespace V2_0
+} // namespace livedisplay
+} // namespace lineage
+} // namespace vendor
+
+#endif // VENDOR_LINEAGE_LIVEDISPLAY_V2_0_ADAPTIVEBACKLIGHT_H
--- /dev/null
+// 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_defaults {
+ name: "livedisplay_samsung_exynos_defaults",
+ defaults: ["hidl_defaults"],
+ relative_install_path: "hw",
+ srcs: [
+ "AdaptiveBacklight.cpp",
+ "DisplayColorCalibrationExynos.cpp",
+ "DisplayModes.cpp",
+ "ReadingEnhancement.cpp",
+ "SunlightEnhancementExynos.cpp",
+ "serviceExynos.cpp",
+ ],
+ shared_libs: [
+ "libbase",
+ "libbinder",
+ "libhidlbase",
+ "libhidltransport",
+ "libutils",
+ "vendor.lineage.livedisplay@2.0",
+ ],
+}
+
+cc_defaults {
+ name: "livedisplay_samsung_qcom_defaults",
+ defaults: ["hidl_defaults"],
+ relative_install_path: "hw",
+ srcs: [
+ "AdaptiveBacklight.cpp",
+ "DisplayColorCalibration.cpp",
+ "DisplayModes.cpp",
+ "ReadingEnhancement.cpp",
+ "SunlightEnhancement.cpp",
+ "service.cpp",
+ ],
+ shared_libs: [
+ "libbase",
+ "libbinder",
+ "libhidlbase",
+ "libhidltransport",
+ "libutils",
+ "vendor.lineage.livedisplay@2.0",
+ ],
+}
+
+cc_binary {
+ name: "lineage.livedisplay@2.0-service.samsung-exynos",
+ init_rc: ["lineage.livedisplay@2.0-service.samsung-exynos.rc"],
+ defaults: ["livedisplay_samsung_exynos_defaults"],
+ cflags: ["-DLIVES_IN_SYSTEM"],
+}
+
+cc_binary {
+ name: "vendor.lineage.livedisplay@2.0-service.samsung-exynos",
+ init_rc: ["vendor.lineage.livedisplay@2.0-service.samsung-exynos.rc"],
+ defaults: ["livedisplay_samsung_exynos_defaults"],
+ vendor: true,
+}
+
+cc_binary {
+ name: "lineage.livedisplay@2.0-service.samsung-qcom",
+ init_rc: ["lineage.livedisplay@2.0-service.samsung-qcom.rc"],
+ defaults: ["livedisplay_samsung_qcom_defaults"],
+ cflags: ["-DLIVES_IN_SYSTEM"],
+}
+
+cc_binary {
+ name: "vendor.lineage.livedisplay@2.0-service.samsung-qcom",
+ init_rc: ["vendor.lineage.livedisplay@2.0-service.samsung-qcom.rc"],
+ defaults: ["livedisplay_samsung_qcom_defaults"],
+ vendor: true,
+}
--- /dev/null
+/*
+ * 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.
+ */
+
+#include <android-base/file.h>
+#include <android-base/strings.h>
+
+#include <fstream>
+
+#include "DisplayColorCalibration.h"
+
+using android::base::ReadFileToString;
+using android::base::Split;
+using android::base::Trim;
+using android::base::WriteStringToFile;
+
+namespace vendor {
+namespace lineage {
+namespace livedisplay {
+namespace V2_0 {
+namespace samsung {
+
+bool DisplayColorCalibration::isSupported() {
+ std::fstream rgb(FILE_RGB, rgb.in | rgb.out);
+
+ return rgb.good();
+}
+
+// Methods from ::vendor::lineage::livedisplay::V2_0::IDisplayColorCalibration follow.
+Return<int32_t> DisplayColorCalibration::getMaxValue() {
+ return 32768;
+}
+
+Return<int32_t> DisplayColorCalibration::getMinValue() {
+ return 255;
+}
+
+Return<void> DisplayColorCalibration::getCalibration(getCalibration_cb _hidl_cb) {
+ std::vector<int32_t> rgb;
+ std::string tmp;
+
+ if (ReadFileToString(FILE_RGB, &tmp)) {
+ std::vector<std::string> colors = Split(Trim(tmp), " ");
+ for (const std::string& color : colors) {
+ rgb.push_back(std::stoi(color));
+ }
+ }
+
+ _hidl_cb(rgb);
+ return Void();
+}
+
+Return<bool> DisplayColorCalibration::setCalibration(const hidl_vec<int32_t>& rgb) {
+ std::string contents;
+
+ for (const int32_t& color : rgb) {
+ contents += std::to_string(color) + " ";
+ }
+
+ return WriteStringToFile(Trim(contents), FILE_RGB, true);
+}
+
+} // namespace samsung
+} // namespace V2_0
+} // namespace livedisplay
+} // namespace lineage
+} // namespace vendor
--- /dev/null
+/*
+ * 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.
+ */
+
+#ifndef VENDOR_LINEAGE_LIVEDISPLAY_V2_0_DISPLAYCOLORCALIBRATION_H
+#define VENDOR_LINEAGE_LIVEDISPLAY_V2_0_DISPLAYCOLORCALIBRATION_H
+
+#include <vendor/lineage/livedisplay/2.0/IDisplayColorCalibration.h>
+
+namespace vendor {
+namespace lineage {
+namespace livedisplay {
+namespace V2_0 {
+namespace samsung {
+
+using ::android::hardware::hidl_vec;
+using ::android::hardware::Return;
+using ::android::hardware::Void;
+
+#define FILE_RGB "/sys/class/graphics/fb0/rgb"
+
+class DisplayColorCalibration : public IDisplayColorCalibration {
+ public:
+ bool isSupported();
+
+ // Methods from ::vendor::lineage::livedisplay::V2_0::IDisplayColorCalibration follow.
+ Return<int32_t> getMaxValue() override;
+ Return<int32_t> getMinValue() override;
+ Return<void> getCalibration(getCalibration_cb _hidl_cb) override;
+ Return<bool> setCalibration(const hidl_vec<int32_t>& rgb) override;
+};
+
+} // namespace samsung
+} // namespace V2_0
+} // namespace livedisplay
+} // namespace lineage
+} // namespace vendor
+
+#endif // VENDOR_LINEAGE_LIVEDISPLAY_V2_0_DISPLAYCOLORCALIBRATION_H
--- /dev/null
+/*
+ * 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.
+ */
+
+#include <android-base/file.h>
+#include <android-base/strings.h>
+
+#include <fstream>
+
+#include "DisplayColorCalibrationExynos.h"
+
+using android::base::ReadFileToString;
+using android::base::Split;
+using android::base::Trim;
+using android::base::WriteStringToFile;
+
+namespace vendor {
+namespace lineage {
+namespace livedisplay {
+namespace V2_0 {
+namespace samsung {
+
+static constexpr const char* kColorPath = "/sys/class/mdnie/mdnie/sensorRGB";
+
+bool DisplayColorCalibrationExynos::isSupported() {
+ std::fstream rgb(kColorPath, rgb.in | rgb.out);
+ return rgb.good();
+}
+
+Return<int32_t> DisplayColorCalibrationExynos::getMaxValue() {
+ return 255;
+}
+
+Return<int32_t> DisplayColorCalibrationExynos::getMinValue() {
+ return 1;
+}
+
+Return<void> DisplayColorCalibrationExynos::getCalibration(getCalibration_cb resultCb) {
+ std::vector<int32_t> rgb;
+ std::string tmp;
+
+ if (ReadFileToString(kColorPath, &tmp)) {
+ std::vector<std::string> colors = Split(Trim(tmp), " ");
+ for (const std::string& color : colors) {
+ rgb.push_back(std::stoi(color));
+ }
+ }
+
+ resultCb(rgb);
+ return Void();
+}
+
+Return<bool> DisplayColorCalibrationExynos::setCalibration(const hidl_vec<int32_t>& rgb) {
+ std::string contents;
+ for (const int32_t& color : rgb) {
+ contents += std::to_string(color) + " ";
+ }
+ return WriteStringToFile(Trim(contents), kColorPath, true);
+}
+
+} // namespace samsung
+} // namespace V2_0
+} // namespace livedisplay
+} // namespace lineage
+} // namespace vendor
--- /dev/null
+/*
+ * 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.
+ */
+
+#ifndef VENDOR_LINEAGE_LIVEDISPLAY_V2_0_DISPLAYCOLORCALIBRATIONEXYNOS_H
+#define VENDOR_LINEAGE_LIVEDISPLAY_V2_0_DISPLAYCOLORCALIBRATIONEXYNOS_H
+
+#include <hidl/MQDescriptor.h>
+#include <hidl/Status.h>
+#include <vendor/lineage/livedisplay/2.0/IDisplayColorCalibration.h>
+
+namespace vendor {
+namespace lineage {
+namespace livedisplay {
+namespace V2_0 {
+namespace samsung {
+
+using ::android::hardware::hidl_array;
+using ::android::hardware::hidl_memory;
+using ::android::hardware::hidl_string;
+using ::android::hardware::hidl_vec;
+using ::android::hardware::Return;
+using ::android::hardware::Void;
+using ::android::sp;
+
+class DisplayColorCalibrationExynos : public IDisplayColorCalibration {
+ public:
+ bool isSupported();
+
+ // Methods from ::vendor::lineage::livedisplay::V2_0::IDisplayColorCalibration follow.
+ Return<int32_t> getMaxValue() override;
+ Return<int32_t> getMinValue() override;
+ Return<void> getCalibration(getCalibration_cb resultCb) override;
+ Return<bool> setCalibration(const hidl_vec<int32_t>& rgb) override;
+
+ // Methods from ::android::hidl::base::V1_0::IBase follow.
+};
+
+} // namespace samsung
+} // namespace V2_0
+} // namespace livedisplay
+} // namespace lineage
+} // namespace vendor
+
+#endif // VENDOR_LINEAGE_LIVEDISPLAY_V2_0_DISPLAYCOLORCALIBRATIONEXYNOS_H
--- /dev/null
+/*
+ * 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.
+ */
+
+#define LOG_TAG "DisplayModesService"
+
+#include "DisplayModes.h"
+#include <android-base/logging.h>
+#include <fstream>
+
+namespace vendor {
+namespace lineage {
+namespace livedisplay {
+namespace V2_0 {
+namespace samsung {
+
+static constexpr const char* kModePath = "/sys/class/mdnie/mdnie/mode";
+static constexpr const char* kModeMaxPath = "/sys/class/mdnie/mdnie/mode_max";
+static constexpr const char* kDefaultPath = "/data/vendor/display/.displaymodedefault";
+
+const std::map<int32_t, std::string> DisplayModes::kModeMap = {
+ // clang-format off
+ {0, "Dynamic"},
+ {1, "Standard"},
+ {2, "Natural"},
+ {3, "Cinema"},
+ {4, "Adaptive"},
+ {5, "Reading"},
+ // clang-format on
+};
+
+DisplayModes::DisplayModes() : mDefaultModeId(0) {
+ std::ifstream defaultFile(kDefaultPath);
+ int value;
+
+ defaultFile >> value;
+ LOG(DEBUG) << "Default file read result " << value << " fail " << defaultFile.fail();
+ if (defaultFile.fail()) {
+ return;
+ }
+
+ for (const auto& entry : kModeMap) {
+ if (value == entry.first) {
+ mDefaultModeId = entry.first;
+ break;
+ }
+ }
+
+ setDisplayMode(mDefaultModeId, false);
+}
+
+bool DisplayModes::isSupported() {
+ std::ofstream modeFile(kModePath);
+ return modeFile.good();
+}
+
+// Methods from ::vendor::lineage::livedisplay::V2_0::IDisplayModes follow.
+Return<void> DisplayModes::getDisplayModes(getDisplayModes_cb resultCb) {
+ std::ifstream maxModeFile(kModeMaxPath);
+ int value;
+ std::vector<DisplayMode> modes;
+ if (!maxModeFile.fail()) {
+ maxModeFile >> value;
+ } else {
+ value = kModeMap.size();
+ }
+ for (const auto& entry : kModeMap) {
+ if (entry.first < value) modes.push_back({entry.first, entry.second});
+ }
+ resultCb(modes);
+ return Void();
+}
+
+Return<void> DisplayModes::getCurrentDisplayMode(getCurrentDisplayMode_cb resultCb) {
+ int32_t currentModeId = mDefaultModeId;
+ std::ifstream modeFile(kModePath);
+ int value;
+ modeFile >> value;
+ if (!modeFile.fail()) {
+ for (const auto& entry : kModeMap) {
+ if (value == entry.first) {
+ currentModeId = entry.first;
+ break;
+ }
+ }
+ }
+ resultCb({currentModeId, kModeMap.at(currentModeId)});
+ return Void();
+}
+
+Return<void> DisplayModes::getDefaultDisplayMode(getDefaultDisplayMode_cb resultCb) {
+ resultCb({mDefaultModeId, kModeMap.at(mDefaultModeId)});
+ return Void();
+}
+
+Return<bool> DisplayModes::setDisplayMode(int32_t modeID, bool makeDefault) {
+ const auto iter = kModeMap.find(modeID);
+ if (iter == kModeMap.end()) {
+ return false;
+ }
+ std::ofstream modeFile(kModePath);
+ modeFile << iter->first;
+ if (modeFile.fail()) {
+ return false;
+ }
+
+ if (makeDefault) {
+ std::ofstream defaultFile(kDefaultPath);
+ defaultFile << iter->first;
+ if (defaultFile.fail()) {
+ return false;
+ }
+ mDefaultModeId = iter->first;
+ }
+ return true;
+}
+
+// Methods from ::android::hidl::base::V1_0::IBase follow.
+
+} // namespace samsung
+} // namespace V2_0
+} // namespace livedisplay
+} // namespace lineage
+} // namespace vendor
--- /dev/null
+/*
+ * 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.
+ */
+
+#ifndef VENDOR_LINEAGE_LIVEDISPLAY_V2_0_DISPLAYMODES_H
+#define VENDOR_LINEAGE_LIVEDISPLAY_V2_0_DISPLAYMODES_H
+
+#include <hidl/MQDescriptor.h>
+#include <hidl/Status.h>
+#include <vendor/lineage/livedisplay/2.0/IDisplayModes.h>
+
+namespace vendor {
+namespace lineage {
+namespace livedisplay {
+namespace V2_0 {
+namespace samsung {
+
+using ::android::hardware::hidl_array;
+using ::android::hardware::hidl_memory;
+using ::android::hardware::hidl_string;
+using ::android::hardware::hidl_vec;
+using ::android::hardware::Return;
+using ::android::hardware::Void;
+using ::android::sp;
+
+class DisplayModes : public IDisplayModes {
+ public:
+ DisplayModes();
+ bool isSupported();
+
+ // Methods from ::vendor::lineage::livedisplay::V2_0::IDisplayModes follow.
+ Return<void> getDisplayModes(getDisplayModes_cb resultCb) override;
+ Return<void> getCurrentDisplayMode(getCurrentDisplayMode_cb resultCb) override;
+ Return<void> getDefaultDisplayMode(getDefaultDisplayMode_cb resultCb) override;
+ Return<bool> setDisplayMode(int32_t modeID, bool makeDefault) override;
+
+ // Methods from ::android::hidl::base::V1_0::IBase follow.
+ private:
+ static const std::map<int32_t, std::string> kModeMap;
+ int32_t mDefaultModeId;
+};
+
+} // namespace samsung
+} // namespace V2_0
+} // namespace livedisplay
+} // namespace lineage
+} // namespace vendor
+
+#endif // VENDOR_LINEAGE_LIVEDISPLAY_V2_0_DISPLAYMODES_H
--- /dev/null
+/*
+ * 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.
+ */
+
+#include <android-base/file.h>
+#include <android-base/strings.h>
+
+#include <fstream>
+
+#include "ReadingEnhancement.h"
+
+using android::base::ReadFileToString;
+using android::base::Trim;
+using android::base::WriteStringToFile;
+
+namespace vendor {
+namespace lineage {
+namespace livedisplay {
+namespace V2_0 {
+namespace samsung {
+
+static constexpr const char* kREPath = "/sys/class/mdnie/mdnie/accessibility";
+
+// Methods from ::vendor::lineage::livedisplay::V2_0::ISunlightEnhancement follow.
+bool ReadingEnhancement::isSupported() {
+ std::fstream re(kREPath, re.in | re.out);
+ return re.good();
+}
+
+// Methods from ::vendor::lineage::livedisplay::V2_0::IReadingEnhancement follow.
+Return<bool> ReadingEnhancement::isEnabled() {
+ std::string contents;
+
+ if (ReadFileToString(kREPath, &contents)) {
+ contents = Trim(contents);
+ }
+
+ return !contents.compare("Current accessibility : DSI0 : GRAYSCALE") || !contents.compare("4");
+}
+
+Return<bool> ReadingEnhancement::setEnabled(bool enabled) {
+ return WriteStringToFile(enabled ? "4" : "0", kREPath, true);
+}
+
+// Methods from ::android::hidl::base::V1_0::IBase follow.
+
+} // namespace samsung
+} // namespace V2_0
+} // namespace livedisplay
+} // namespace lineage
+} // namespace vendor
--- /dev/null
+/*
+ * 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.
+ */
+
+#ifndef VENDOR_LINEAGE_LIVEDISPLAY_V2_0_READINGENHANCEMENT_H
+#define VENDOR_LINEAGE_LIVEDISPLAY_V2_0_READINGENHANCEMENT_H
+
+#include <hidl/MQDescriptor.h>
+#include <hidl/Status.h>
+#include <vendor/lineage/livedisplay/2.0/IReadingEnhancement.h>
+
+namespace vendor {
+namespace lineage {
+namespace livedisplay {
+namespace V2_0 {
+namespace samsung {
+
+using ::android::hardware::hidl_array;
+using ::android::hardware::hidl_memory;
+using ::android::hardware::hidl_string;
+using ::android::hardware::hidl_vec;
+using ::android::hardware::Return;
+using ::android::hardware::Void;
+using ::android::sp;
+
+class ReadingEnhancement : public IReadingEnhancement {
+ public:
+ bool isSupported();
+
+ // Methods from ::vendor::lineage::livedisplay::V2_0::IReadingEnhancement follow.
+ Return<bool> isEnabled() override;
+ Return<bool> setEnabled(bool) override;
+
+ // Methods from ::android::hidl::base::V1_0::IBase follow.
+};
+
+} // namespace samsung
+} // namespace V2_0
+} // namespace livedisplay
+} // namespace lineage
+} // namespace vendor
+
+#endif // VENDOR_LINEAGE_LIVEDISPLAY_V2_0_READINGENHANCEMENT_H
--- /dev/null
+/*
+ * 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.
+ */
+
+#include <android-base/file.h>
+#include <android-base/strings.h>
+
+#include <fstream>
+
+#include "SunlightEnhancement.h"
+
+using android::base::ReadFileToString;
+using android::base::Trim;
+using android::base::WriteStringToFile;
+
+namespace vendor {
+namespace lineage {
+namespace livedisplay {
+namespace V2_0 {
+namespace samsung {
+
+static constexpr const char* kHBMPath = "/sys/class/lcd/panel/panel/auto_brightness";
+static constexpr const char* kSREPath = "/sys/class/mdnie/mdnie/outdoor";
+
+// Methods from ::vendor::lineage::livedisplay::V2_0::ISunlightEnhancement follow.
+bool SunlightEnhancement::isSupported() {
+ std::fstream sre(kSREPath, sre.in | sre.out);
+ std::fstream hbm(kHBMPath, hbm.in | hbm.out);
+
+ if (hbm.good()) {
+ mHasHBM = true;
+ }
+
+ return sre.good();
+}
+
+// Methods from ::vendor::lineage::livedisplay::V2_0::IAdaptiveBacklight follow.
+Return<bool> SunlightEnhancement::isEnabled() {
+ std::string tmp;
+ int32_t statusSRE = 0;
+ int32_t statusHBM = 0;
+ if (ReadFileToString(kSREPath, &tmp)) {
+ statusSRE = std::stoi(Trim(tmp));
+ }
+
+ if (mHasHBM && ReadFileToString(kHBMPath, &tmp)) {
+ statusHBM = std::stoi(Trim(tmp));
+ }
+
+ return ((statusSRE == 1 && statusHBM == 6) || statusSRE == 1);
+}
+
+Return<bool> SunlightEnhancement::setEnabled(bool enabled) {
+ if (mHasHBM) {
+ WriteStringToFile(enabled ? "6" : "0", kHBMPath, true);
+ }
+
+ return WriteStringToFile(enabled ? "1" : "0", kSREPath, true);
+}
+
+} // namespace samsung
+} // namespace V2_0
+} // namespace livedisplay
+} // namespace lineage
+} // namespace vendor
--- /dev/null
+/*
+ * 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.
+ */
+
+#ifndef VENDOR_LINEAGE_LIVEDISPLAY_V2_0_SUNLIGHTENHANCEMENT_H
+#define VENDOR_LINEAGE_LIVEDISPLAY_V2_0_SUNLIGHTENHANCEMENT_H
+
+#include <hidl/MQDescriptor.h>
+#include <hidl/Status.h>
+#include <vendor/lineage/livedisplay/2.0/ISunlightEnhancement.h>
+
+namespace vendor {
+namespace lineage {
+namespace livedisplay {
+namespace V2_0 {
+namespace samsung {
+
+using ::android::hardware::hidl_array;
+using ::android::hardware::hidl_memory;
+using ::android::hardware::hidl_string;
+using ::android::hardware::hidl_vec;
+using ::android::hardware::Return;
+using ::android::hardware::Void;
+using ::android::sp;
+
+class SunlightEnhancement : public ISunlightEnhancement {
+ public:
+ bool isSupported();
+
+ // Methods from ::vendor::lineage::livedisplay::V2_0::ISunlightEnhancement follow.
+ Return<bool> isEnabled() override;
+ Return<bool> setEnabled(bool enabled) override;
+
+ // Methods from ::android::hidl::base::V1_0::IBase follow.
+ private:
+ bool mHasHBM = false;
+};
+
+} // namespace samsung
+} // namespace V2_0
+} // namespace livedisplay
+} // namespace lineage
+} // namespace vendor
+
+#endif // VENDOR_LINEAGE_LIVEDISPLAY_V2_0_SUNLIGHTENHANCEMENT_H
--- /dev/null
+/*
+ * 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.
+ */
+
+#include <android-base/file.h>
+#include <android-base/strings.h>
+
+#include <fstream>
+
+#include "SunlightEnhancementExynos.h"
+
+using android::base::ReadFileToString;
+using android::base::Trim;
+using android::base::WriteStringToFile;
+
+namespace vendor {
+namespace lineage {
+namespace livedisplay {
+namespace V2_0 {
+namespace samsung {
+
+static constexpr const char* kLUXPath = "/sys/class/mdnie/mdnie/lux";
+
+// Methods from ::vendor::lineage::livedisplay::V2_0::ISunlightEnhancement follow.
+bool SunlightEnhancementExynos::isSupported() {
+ std::fstream file(kLUXPath, file.in | file.out);
+ return file.good();
+}
+
+// Methods from ::vendor::lineage::livedisplay::V2_0::IAdaptiveBacklight follow.
+Return<bool> SunlightEnhancementExynos::isEnabled() {
+ std::string tmp;
+ int32_t contents = 0;
+
+ if (ReadFileToString(kLUXPath, &tmp)) {
+ contents = std::stoi(Trim(tmp));
+ }
+
+ return contents > 0;
+}
+
+Return<bool> SunlightEnhancementExynos::setEnabled(bool enabled) {
+ /* see drivers/video/fbdev/exynos/decon_7880/panels/mdnie_lite_table*, get_hbm_index */
+ return WriteStringToFile(enabled ? "40000" : "0", kLUXPath, true);
+}
+
+} // namespace samsung
+} // namespace V2_0
+} // namespace livedisplay
+} // namespace lineage
+} // namespace vendor
--- /dev/null
+/*
+ * 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.
+ */
+
+#ifndef VENDOR_LINEAGE_LIVEDISPLAY_V2_0_SUNLIGHTENHANCEMENTEXYNOS_H
+#define VENDOR_LINEAGE_LIVEDISPLAY_V2_0_SUNLIGHTENHANCEMENTEXYNOS_H
+
+#include <hidl/MQDescriptor.h>
+#include <hidl/Status.h>
+#include <vendor/lineage/livedisplay/2.0/ISunlightEnhancement.h>
+
+namespace vendor {
+namespace lineage {
+namespace livedisplay {
+namespace V2_0 {
+namespace samsung {
+
+using ::android::hardware::hidl_array;
+using ::android::hardware::hidl_memory;
+using ::android::hardware::hidl_string;
+using ::android::hardware::hidl_vec;
+using ::android::hardware::Return;
+using ::android::hardware::Void;
+using ::android::sp;
+
+class SunlightEnhancementExynos : public ISunlightEnhancement {
+ public:
+ bool isSupported();
+
+ // Methods from ::vendor::lineage::livedisplay::V2_0::ISunlightEnhancement follow.
+ Return<bool> isEnabled() override;
+ Return<bool> setEnabled(bool enabled) override;
+
+ // Methods from ::android::hidl::base::V1_0::IBase follow.
+};
+
+} // namespace samsung
+} // namespace V2_0
+} // namespace livedisplay
+} // namespace lineage
+} // namespace vendor
+
+#endif // VENDOR_LINEAGE_LIVEDISPLAY_V2_0_SUNLIGHTENHANCEMENTEXYNOS_H
--- /dev/null
+on post-fs-data
+ mkdir /data/vendor/display 0770 system system
+
+service livedisplay-hal-2-0-samsung-exynos /system/bin/hw/lineage.livedisplay@2.0-service.samsung-exynos
+ class hal
+ user system
+ group system
\ No newline at end of file
--- /dev/null
+on post-fs-data
+ mkdir /data/vendor/display 0770 system system
+
+service livedisplay-hal-2-0-samsung-qcom /system/bin/hw/lineage.livedisplay@2.0-service.samsung-qcom
+ class late_start
+ user system
+ group system
--- /dev/null
+/*
+ * 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.
+ */
+
+#ifdef LIVES_IN_SYSTEM
+#define LOG_TAG "lineage.livedisplay@2.0-service.samsung-qcom"
+#else
+#define LOG_TAG "vendor.lineage.livedisplay@2.0-service.samsung-qcom"
+#endif
+
+#include <android-base/logging.h>
+#include <binder/ProcessState.h>
+#include <hidl/HidlTransportSupport.h>
+
+#include "AdaptiveBacklight.h"
+#include "DisplayColorCalibration.h"
+#include "DisplayModes.h"
+#include "ReadingEnhancement.h"
+#include "SunlightEnhancement.h"
+
+using android::hardware::configureRpcThreadpool;
+using android::hardware::joinRpcThreadpool;
+using android::sp;
+using android::status_t;
+using android::OK;
+
+using vendor::lineage::livedisplay::V2_0::samsung::AdaptiveBacklight;
+using vendor::lineage::livedisplay::V2_0::samsung::DisplayColorCalibration;
+using vendor::lineage::livedisplay::V2_0::samsung::DisplayModes;
+using vendor::lineage::livedisplay::V2_0::samsung::ReadingEnhancement;
+using vendor::lineage::livedisplay::V2_0::samsung::SunlightEnhancement;
+
+int main() {
+ sp<AdaptiveBacklight> adaptiveBacklight;
+ sp<DisplayColorCalibration> displayColorCalibration;
+ sp<DisplayModes> displayModes;
+ sp<ReadingEnhancement> readingEnhancement;
+ sp<SunlightEnhancement> sunlightEnhancement;
+ status_t status;
+
+ LOG(INFO) << "LiveDisplay HAL service is starting.";
+
+ adaptiveBacklight = new AdaptiveBacklight();
+ if (adaptiveBacklight == nullptr) {
+ LOG(ERROR)
+ << "Can not create an instance of LiveDisplay HAL AdaptiveBacklight Iface, exiting.";
+ goto shutdown;
+ }
+
+ displayColorCalibration = new DisplayColorCalibration();
+ if (displayColorCalibration == nullptr) {
+ LOG(ERROR) << "Can not create an instance of LiveDisplay HAL DisplayColorCalibration "
+ "Iface, exiting.";
+ goto shutdown;
+ }
+
+ displayModes = new DisplayModes();
+ if (displayModes == nullptr) {
+ LOG(ERROR) << "Can not create an instance of LiveDisplay HAL DisplayModes Iface, exiting.";
+ goto shutdown;
+ }
+
+ readingEnhancement = new ReadingEnhancement();
+ if (readingEnhancement == nullptr) {
+ LOG(ERROR)
+ << "Can not create an instance of LiveDisplay HAL ReadingEnhancement Iface, exiting.";
+ goto shutdown;
+ }
+
+ sunlightEnhancement = new SunlightEnhancement();
+ if (sunlightEnhancement == nullptr) {
+ LOG(ERROR)
+ << "Can not create an instance of LiveDisplay HAL SunlightEnhancement Iface, exiting.";
+ goto shutdown;
+ }
+
+ configureRpcThreadpool(1, true /*callerWillJoin*/);
+
+ if (adaptiveBacklight->isSupported()) {
+ status = adaptiveBacklight->registerAsService();
+ if (status != OK) {
+ LOG(ERROR) << "Could not register service for LiveDisplay HAL AdaptiveBacklight Iface ("
+ << status << ")";
+ goto shutdown;
+ }
+ }
+
+ if (displayColorCalibration->isSupported()) {
+ status = displayColorCalibration->registerAsService();
+ if (status != OK) {
+ LOG(ERROR)
+ << "Could not register service for LiveDisplay HAL DisplayColorCalibration Iface ("
+ << status << ")";
+ goto shutdown;
+ }
+ }
+
+ if (displayModes->isSupported()) {
+ status = displayModes->registerAsService();
+ if (status != OK) {
+ LOG(ERROR) << "Could not register service for LiveDisplay HAL DisplayModes Iface ("
+ << status << ")";
+ goto shutdown;
+ }
+ }
+
+ if (readingEnhancement->isSupported()) {
+ status = readingEnhancement->registerAsService();
+ if (status != OK) {
+ LOG(ERROR)
+ << "Could not register service for LiveDisplay HAL ReadingEnhancement Iface ("
+ << status << ")";
+ goto shutdown;
+ }
+ }
+
+ if (sunlightEnhancement->isSupported()) {
+ status = sunlightEnhancement->registerAsService();
+ if (status != OK) {
+ LOG(ERROR)
+ << "Could not register service for LiveDisplay HAL SunlightEnhancement Iface ("
+ << status << ")";
+ goto shutdown;
+ }
+ }
+
+ LOG(INFO) << "LiveDisplay HAL service is ready.";
+ joinRpcThreadpool();
+// Should not pass this line
+
+shutdown:
+ // In normal operation, we don't expect the thread pool to shutdown
+ LOG(ERROR) << "LiveDisplay HAL service is shutting down.";
+ return 1;
+}
--- /dev/null
+/*
+ * 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.
+ */
+
+#ifdef LIVES_IN_SYSTEM
+#define LOG_TAG "lineage.livedisplay@2.0-service.samsung-exynos"
+#else
+#define LOG_TAG "vendor.lineage.livedisplay@2.0-service.samsung-exynos"
+#endif
+
+#include <android-base/logging.h>
+#include <binder/ProcessState.h>
+#include <hidl/HidlTransportSupport.h>
+
+#include "AdaptiveBacklight.h"
+#include "DisplayColorCalibrationExynos.h"
+#include "DisplayModes.h"
+#include "ReadingEnhancement.h"
+#include "SunlightEnhancementExynos.h"
+
+using android::hardware::configureRpcThreadpool;
+using android::hardware::joinRpcThreadpool;
+using android::sp;
+using android::status_t;
+using android::OK;
+
+using vendor::lineage::livedisplay::V2_0::samsung::AdaptiveBacklight;
+using vendor::lineage::livedisplay::V2_0::samsung::DisplayColorCalibrationExynos;
+using vendor::lineage::livedisplay::V2_0::samsung::DisplayModes;
+using vendor::lineage::livedisplay::V2_0::samsung::ReadingEnhancement;
+using vendor::lineage::livedisplay::V2_0::samsung::SunlightEnhancementExynos;
+
+int main() {
+ sp<AdaptiveBacklight> adaptiveBacklight;
+ sp<DisplayColorCalibrationExynos> displayColorCalibrationExynos;
+ sp<DisplayModes> displayModes;
+ sp<ReadingEnhancement> readingEnhancement;
+ sp<SunlightEnhancementExynos> sunlightEnhancementExynos;
+ status_t status;
+
+ LOG(INFO) << "LiveDisplay HAL service is starting.";
+
+ adaptiveBacklight = new AdaptiveBacklight();
+ if (adaptiveBacklight == nullptr) {
+ LOG(ERROR)
+ << "Can not create an instance of LiveDisplay HAL AdaptiveBacklight Iface, exiting.";
+ goto shutdown;
+ }
+
+ displayColorCalibrationExynos = new DisplayColorCalibrationExynos();
+ if (displayColorCalibrationExynos == nullptr) {
+ LOG(ERROR) << "Can not create an instance of LiveDisplay HAL DisplayColorCalibration "
+ "Iface, exiting.";
+ goto shutdown;
+ }
+
+ displayModes = new DisplayModes();
+ if (displayModes == nullptr) {
+ LOG(ERROR) << "Can not create an instance of LiveDisplay HAL DisplayModes Iface, exiting.";
+ goto shutdown;
+ }
+
+ readingEnhancement = new ReadingEnhancement();
+ if (readingEnhancement == nullptr) {
+ LOG(ERROR)
+ << "Can not create an instance of LiveDisplay HAL ReadingEnhancement Iface, exiting.";
+ goto shutdown;
+ }
+
+ sunlightEnhancementExynos = new SunlightEnhancementExynos();
+ if (sunlightEnhancementExynos == nullptr) {
+ LOG(ERROR)
+ << "Can not create an instance of LiveDisplay HAL SunlightEnhancement Iface, exiting.";
+ goto shutdown;
+ }
+
+ configureRpcThreadpool(1, true /*callerWillJoin*/);
+
+ if (adaptiveBacklight->isSupported()) {
+ status = adaptiveBacklight->registerAsService();
+ if (status != OK) {
+ LOG(ERROR) << "Could not register service for LiveDisplay HAL AdaptiveBacklight Iface ("
+ << status << ")";
+ goto shutdown;
+ }
+ }
+
+ if (displayColorCalibrationExynos->isSupported()) {
+ status = displayColorCalibrationExynos->registerAsService();
+ if (status != OK) {
+ LOG(ERROR)
+ << "Could not register service for LiveDisplay HAL DisplayColorCalibration Iface ("
+ << status << ")";
+ goto shutdown;
+ }
+ }
+
+ if (displayModes->isSupported()) {
+ status = displayModes->registerAsService();
+ if (status != OK) {
+ LOG(ERROR) << "Could not register service for LiveDisplay HAL DisplayModes Iface ("
+ << status << ")";
+ goto shutdown;
+ }
+ }
+
+ if (readingEnhancement->isSupported()) {
+ status = readingEnhancement->registerAsService();
+ if (status != OK) {
+ LOG(ERROR)
+ << "Could not register service for LiveDisplay HAL ReadingEnhancement Iface ("
+ << status << ")";
+ goto shutdown;
+ }
+ }
+
+ if (sunlightEnhancementExynos->isSupported()) {
+ status = sunlightEnhancementExynos->registerAsService();
+ if (status != OK) {
+ LOG(ERROR)
+ << "Could not register service for LiveDisplay HAL SunlightEnhancement Iface ("
+ << status << ")";
+ goto shutdown;
+ }
+ }
+
+ LOG(INFO) << "LiveDisplay HAL service is ready.";
+ joinRpcThreadpool();
+// Should not pass this line
+
+shutdown:
+ // In normal operation, we don't expect the thread pool to shutdown
+ LOG(ERROR) << "LiveDisplay HAL service is shutting down.";
+ return 1;
+}
--- /dev/null
+on post-fs-data
+ mkdir /data/vendor/display 0770 system system
+
+service vendor.livedisplay-hal-2-0-samsung-exynos /vendor/bin/hw/vendor.lineage.livedisplay@2.0-service.samsung-exynos
+ class hal
+ user system
+ group system
\ No newline at end of file
--- /dev/null
+on post-fs-data
+ mkdir /data/vendor/display 0770 system system
+
+service vendor.livedisplay-hal-2-0-samsung-qcom /vendor/bin/hw/vendor.lineage.livedisplay@2.0-service.samsung-qcom
+ class late_start
+ user system
+ group system
--- /dev/null
+BasedOnStyle: Google
+AccessModifierOffset: -2
+AllowShortFunctionsOnASingleLine: Inline
+ColumnLimit: 100
+CommentPragmas: NOLINT:.*
+DerivePointerAlignment: false
+IndentWidth: 4
+PointerAlignment: Left
+TabWidth: 4
+UseTab: Never
+PenaltyExcessCharacter: 32
--- /dev/null
+// 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 {
+ name: "vendor.lineage.touch@1.0-service.samsung",
+ init_rc: ["vendor.lineage.touch@1.0-service.samsung.rc"],
+ defaults: ["hidl_defaults"],
+ relative_install_path: "hw",
+ // FIXME: this should be 'vendor: true' for modules that will eventually be
+ // on AOSP.
+ proprietary: true,
+ srcs: [
+ "GloveMode.cpp",
+ "KeyDisabler.cpp",
+ "StylusMode.cpp",
+ "TouchscreenGesture.cpp",
+ "service.cpp"
+ ],
+ shared_libs: [
+ "libbase",
+ "libbinder",
+ "libhidlbase",
+ "libhidltransport",
+ "libutils",
+ "vendor.lineage.touch@1.0",
+ ],
+}
--- /dev/null
+/*
+ * 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.
+ */
+
+#include <fstream>
+
+#include "GloveMode.h"
+
+namespace vendor {
+namespace lineage {
+namespace touch {
+namespace V1_0 {
+namespace samsung {
+
+bool GloveMode::isSupported() {
+ std::ifstream file("/sys/class/sec/tsp/cmd_list");
+ if (file.is_open()) {
+ std::string line;
+ while (getline(file, line)) {
+ if (!line.compare("glove_mode")) return true;
+ }
+ file.close();
+ }
+ return false;
+}
+
+// Methods from ::vendor::lineage::touch::V1_0::IGloveMode follow.
+Return<bool> GloveMode::isEnabled() {
+ std::ifstream file("/sys/class/sec/tsp/cmd_result");
+ if (file.is_open()) {
+ std::string line;
+ getline(file, line);
+ if (!line.compare("glove_mode,1:OK")) return true;
+ file.close();
+ }
+ return false;
+}
+
+Return<bool> GloveMode::setEnabled(bool enabled) {
+ std::ofstream file("/sys/class/sec/tsp/cmd");
+ file << "glove_mode," << (enabled ? "1" : "0");
+ return true;
+}
+
+} // namespace samsung
+} // namespace V1_0
+} // namespace touch
+} // namespace lineage
+} // namespace vendor
--- /dev/null
+/*
+ * 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.
+ */
+
+#ifndef VENDOR_LINEAGE_TOUCH_V1_0_GLOVEMODE_H
+#define VENDOR_LINEAGE_TOUCH_V1_0_GLOVEMODE_H
+
+#include <hidl/MQDescriptor.h>
+#include <hidl/Status.h>
+#include <vendor/lineage/touch/1.0/IGloveMode.h>
+
+namespace vendor {
+namespace lineage {
+namespace touch {
+namespace V1_0 {
+namespace samsung {
+
+using ::android::hardware::hidl_array;
+using ::android::hardware::hidl_memory;
+using ::android::hardware::hidl_string;
+using ::android::hardware::hidl_vec;
+using ::android::hardware::Return;
+using ::android::hardware::Void;
+using ::android::sp;
+
+class GloveMode : public IGloveMode {
+ public:
+ GloveMode() = default;
+
+ bool isSupported();
+
+ // Methods from ::vendor::lineage::touch::V1_0::IGloveMode follow.
+ Return<bool> isEnabled() override;
+ Return<bool> setEnabled(bool enabled) override;
+
+ // Methods from ::android::hidl::base::V1_0::IBase follow.
+};
+
+} // namespace samsung
+} // namespace V1_0
+} // namespace touch
+} // namespace lineage
+} // namespace vendor
+
+#endif // VENDOR_LINEAGE_TOUCH_V1_0_GLOVEMODE_H
--- /dev/null
+/*
+ * 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.
+ */
+
+#include <fstream>
+
+#include "KeyDisabler.h"
+
+namespace vendor {
+namespace lineage {
+namespace touch {
+namespace V1_0 {
+namespace samsung {
+
+bool KeyDisabler::isSupported() {
+ std::ofstream file("/sys/class/sec/sec_touchkey/input/enabled");
+ return file.good();
+}
+
+// Methods from ::vendor::lineage::touch::V1_0::IKeyDisabler follow.
+Return<bool> KeyDisabler::isEnabled() {
+ std::ifstream file("/sys/class/sec/sec_touchkey/input/enabled");
+ int status = -1;
+
+ if (file.is_open()) {
+ file >> status;
+ }
+
+ return file.good() && status == 0;
+}
+
+Return<bool> KeyDisabler::setEnabled(bool enabled) {
+ std::ofstream file("/sys/class/sec/sec_touchkey/input/enabled");
+ file << (enabled ? "0" : "1");
+ return true;
+}
+
+} // namespace samsung
+} // namespace V1_0
+} // namespace touch
+} // namespace lineage
+} // namespace vendor
--- /dev/null
+/*
+ * 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.
+ */
+
+#ifndef VENDOR_LINEAGE_TOUCH_V1_0_KEYDISABLER_H
+#define VENDOR_LINEAGE_TOUCH_V1_0_KEYDISABLER_H
+
+#include <hidl/MQDescriptor.h>
+#include <hidl/Status.h>
+#include <vendor/lineage/touch/1.0/IKeyDisabler.h>
+
+namespace vendor {
+namespace lineage {
+namespace touch {
+namespace V1_0 {
+namespace samsung {
+
+using ::android::hardware::hidl_array;
+using ::android::hardware::hidl_memory;
+using ::android::hardware::hidl_string;
+using ::android::hardware::hidl_vec;
+using ::android::hardware::Return;
+using ::android::hardware::Void;
+using ::android::sp;
+
+class KeyDisabler : public IKeyDisabler {
+ public:
+ KeyDisabler() = default;
+
+ bool isSupported();
+
+ // Methods from ::vendor::lineage::touch::V1_0::IKeyDisabler follow.
+ Return<bool> isEnabled() override;
+ Return<bool> setEnabled(bool enabled) override;
+
+ // Methods from ::android::hidl::base::V1_0::IBase follow.
+};
+
+} // namespace samsung
+} // namespace V1_0
+} // namespace touch
+} // namespace lineage
+} // namespace vendor
+
+#endif // VENDOR_LINEAGE_TOUCH_V1_0_KEYDISABLER_H
--- /dev/null
+/*
+ * 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.
+ */
+
+#include <fstream>
+
+#include "StylusMode.h"
+
+namespace vendor {
+namespace lineage {
+namespace touch {
+namespace V1_0 {
+namespace samsung {
+
+bool StylusMode::isSupported() {
+ std::ifstream file("/sys/class/sec/tsp/cmd_list");
+ if (file.is_open()) {
+ std::string line;
+ while (getline(file, line)) {
+ if (!line.compare("hover_enable")) return true;
+ }
+ file.close();
+ }
+ return false;
+}
+
+// Methods from ::vendor::lineage::touch::V1_0::IStylusMode follow.
+Return<bool> StylusMode::isEnabled() {
+ std::ifstream file("/sys/class/sec/tsp/cmd_result");
+ if (file.is_open()) {
+ std::string line;
+ getline(file, line);
+ if (!line.compare("hover_enable,1:OK")) return true;
+ file.close();
+ }
+ return false;
+}
+
+Return<bool> StylusMode::setEnabled(bool enabled) {
+ std::ofstream file("/sys/class/sec/tsp/cmd");
+ file << "hover_enable," << (enabled ? "1" : "0");
+ return true;
+}
+
+} // namespace samsung
+} // namespace V1_0
+} // namespace touch
+} // namespace lineage
+} // namespace vendor
--- /dev/null
+/*
+ * 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.
+ */
+
+#ifndef VENDOR_LINEAGE_TOUCH_V1_0_STYLUSMODE_H
+#define VENDOR_LINEAGE_TOUCH_V1_0_STYLUSMODE_H
+
+#include <hidl/MQDescriptor.h>
+#include <hidl/Status.h>
+#include <vendor/lineage/touch/1.0/IStylusMode.h>
+
+namespace vendor {
+namespace lineage {
+namespace touch {
+namespace V1_0 {
+namespace samsung {
+
+using ::android::hardware::hidl_array;
+using ::android::hardware::hidl_memory;
+using ::android::hardware::hidl_string;
+using ::android::hardware::hidl_vec;
+using ::android::hardware::Return;
+using ::android::hardware::Void;
+using ::android::sp;
+
+class StylusMode : public IStylusMode {
+ public:
+ StylusMode() = default;
+
+ bool isSupported();
+
+ // Methods from ::vendor::lineage::touch::V1_0::IStylusMode follow.
+ Return<bool> isEnabled() override;
+ Return<bool> setEnabled(bool enabled) override;
+
+ // Methods from ::android::hidl::base::V1_0::IBase follow.
+};
+
+} // namespace samsung
+} // namespace V1_0
+} // namespace touch
+} // namespace lineage
+} // namespace vendor
+
+#endif // VENDOR_LINEAGE_TOUCH_V1_0_STYLUSMODE_H
--- /dev/null
+/*
+ * 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.
+ */
+
+#include <fstream>
+
+#include "TouchscreenGesture.h"
+
+namespace vendor {
+namespace lineage {
+namespace touch {
+namespace V1_0 {
+namespace samsung {
+
+static constexpr const char* kGeasturePath = "/sys/class/sec/sec_epen/epen_gestures";
+
+const std::map<int32_t, TouchscreenGesture::GestureInfo> TouchscreenGesture::kGestureInfoMap = {
+ // clang-format off
+ {0, {0x2f1, "Swipe up stylus"}},
+ {1, {0x2f2, "Swipe down stylus"}},
+ {2, {0x2f3, "Swipe left stylus"}},
+ {3, {0x2f4, "Swipe right stylus"}},
+ {4, {0x2f5, "Long press stylus"}},
+ // clang-format on
+};
+
+bool TouchscreenGesture::isSupported() {
+ std::ifstream file(kGeasturePath);
+ return file.good();
+}
+
+// Methods from ::vendor::lineage::touch::V1_0::ITouchscreenGesture follow.
+Return<void> TouchscreenGesture::getSupportedGestures(getSupportedGestures_cb resultCb) {
+ std::vector<Gesture> gestures;
+
+ for (const auto& entry : kGestureInfoMap) {
+ gestures.push_back({entry.first, entry.second.name, entry.second.keycode});
+ }
+ resultCb(gestures);
+
+ return Void();
+}
+
+Return<bool> TouchscreenGesture::setGestureEnabled(
+ const ::vendor::lineage::touch::V1_0::Gesture& gesture, bool enabled) {
+ std::fstream file(kGeasturePath);
+ int gestureMode;
+ int mask = 1 << gesture.id;
+
+ file >> gestureMode;
+
+ if (enabled)
+ gestureMode |= mask;
+ else
+ gestureMode &= ~mask;
+
+ file << gestureMode;
+
+ return !file.fail();
+}
+
+// Methods from ::android::hidl::base::V1_0::IBase follow.
+
+} // namespace samsung
+} // namespace V1_0
+} // namespace touch
+} // namespace lineage
+} // namespace vendor
--- /dev/null
+/*
+ * 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.
+ */
+
+#ifndef VENDOR_LINEAGE_TOUCH_V1_0_TOUCHSCREENGESTURE_H
+#define VENDOR_LINEAGE_TOUCH_V1_0_TOUCHSCREENGESTURE_H
+
+#include <hidl/MQDescriptor.h>
+#include <hidl/Status.h>
+#include <vendor/lineage/touch/1.0/ITouchscreenGesture.h>
+
+namespace vendor {
+namespace lineage {
+namespace touch {
+namespace V1_0 {
+namespace samsung {
+
+using ::android::hardware::hidl_array;
+using ::android::hardware::hidl_memory;
+using ::android::hardware::hidl_string;
+using ::android::hardware::hidl_vec;
+using ::android::hardware::Return;
+using ::android::hardware::Void;
+using ::android::sp;
+
+class TouchscreenGesture : public ITouchscreenGesture {
+ public:
+ bool isSupported();
+
+ // Methods from ::vendor::lineage::touch::V1_0::ITouchscreenGesture follow.
+ Return<void> getSupportedGestures(getSupportedGestures_cb resultCb) override;
+ Return<bool> setGestureEnabled(const ::vendor::lineage::touch::V1_0::Gesture& gesture,
+ bool enabled) override;
+
+ private:
+ typedef struct {
+ int32_t keycode;
+ const char* name;
+ } GestureInfo;
+ static const std::map<int32_t, GestureInfo> kGestureInfoMap; // id -> info
+};
+
+// FIXME: most likely delete, this is only for passthrough implementations
+// extern "C" ITouchscreenGesture* HIDL_FETCH_ITouchscreenGesture(const char* name);
+
+} // namespace samsung
+} // namespace V1_0
+} // namespace touch
+} // namespace lineage
+} // namespace vendor
+
+#endif // VENDOR_LINEAGE_TOUCH_V1_0_TOUCHSCREENGESTURE_H
--- /dev/null
+/*
+ * 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.
+ */
+
+#define LOG_TAG "vendor.lineage.touch@1.0-service.samsung"
+
+#include <android-base/logging.h>
+#include <binder/ProcessState.h>
+#include <hidl/HidlTransportSupport.h>
+
+#include "GloveMode.h"
+#include "KeyDisabler.h"
+#include "StylusMode.h"
+#include "TouchscreenGesture.h"
+
+using android::hardware::configureRpcThreadpool;
+using android::hardware::joinRpcThreadpool;
+using android::sp;
+using android::status_t;
+using android::OK;
+
+using ::vendor::lineage::touch::V1_0::samsung::GloveMode;
+using ::vendor::lineage::touch::V1_0::samsung::KeyDisabler;
+using ::vendor::lineage::touch::V1_0::samsung::StylusMode;
+using ::vendor::lineage::touch::V1_0::samsung::TouchscreenGesture;
+
+int main() {
+ sp<GloveMode> gloveMode;
+ sp<KeyDisabler> keyDisabler;
+ sp<StylusMode> stylusMode;
+ sp<TouchscreenGesture> touchscreenGesture;
+ status_t status;
+
+ LOG(INFO) << "Touch HAL service is starting.";
+
+ gloveMode = new GloveMode();
+ if (gloveMode == nullptr) {
+ LOG(ERROR) << "Can not create an instance of Touch HAL GloveMode Iface, exiting.";
+ goto shutdown;
+ }
+
+ keyDisabler = new KeyDisabler();
+ if (keyDisabler == nullptr) {
+ LOG(ERROR) << "Can not create an instance of Touch HAL KeyDisabler Iface, exiting.";
+ goto shutdown;
+ }
+
+ stylusMode = new StylusMode();
+ if (stylusMode == nullptr) {
+ LOG(ERROR) << "Can not create an instance of Touch HAL StylusMode Iface, exiting.";
+ goto shutdown;
+ }
+
+ touchscreenGesture = new TouchscreenGesture();
+ if (touchscreenGesture == nullptr) {
+ LOG(ERROR) << "Can not create an instance of Touch HAL TouchscreenGesture Iface, exiting.";
+ goto shutdown;
+ }
+
+ configureRpcThreadpool(1, true /*callerWillJoin*/);
+
+ if (gloveMode->isSupported()) {
+ status = gloveMode->registerAsService();
+ if (status != OK) {
+ LOG(ERROR) << "Could not register service for Touch HAL GloveMode Iface (" << status
+ << ")";
+ goto shutdown;
+ }
+ }
+
+ if (keyDisabler->isSupported()) {
+ status = keyDisabler->registerAsService();
+ if (status != OK) {
+ LOG(ERROR) << "Could not register service for Touch HAL KeyDisabler Iface (" << status
+ << ")";
+ goto shutdown;
+ }
+ }
+
+ if (stylusMode->isSupported()) {
+ status = stylusMode->registerAsService();
+ if (status != OK) {
+ LOG(ERROR) << "Could not register service for Touch HAL StylusMode Iface (" << status
+ << ")";
+ goto shutdown;
+ }
+ }
+
+ if (touchscreenGesture->isSupported()) {
+ status = touchscreenGesture->registerAsService();
+ if (status != OK) {
+ LOG(ERROR) << "Could not register service for Touch HAL TouchscreenGesture Iface ("
+ << status << ")";
+ goto shutdown;
+ }
+ }
+
+ LOG(INFO) << "Touch HAL service is ready.";
+ joinRpcThreadpool();
+// Should not pass this line
+
+shutdown:
+ // In normal operation, we don't expect the thread pool to shutdown
+ LOG(ERROR) << "Touch HAL service is shutting down.";
+ return 1;
+}
--- /dev/null
+service vendor.touch-hal-1-0-samsung /vendor/bin/hw/vendor.lineage.touch@1.0-service.samsung
+ class hal
+ user system
+ group system
+++ /dev/null
-BasedOnStyle: Google
-AccessModifierOffset: -2
-AllowShortFunctionsOnASingleLine: Inline
-ColumnLimit: 100
-CommentPragmas: NOLINT:.*
-DerivePointerAlignment: false
-IndentWidth: 4
-PointerAlignment: Left
-TabWidth: 4
-UseTab: Never
-PenaltyExcessCharacter: 32
+++ /dev/null
-/*
- * 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.
- */
-
-#include <android-base/file.h>
-#include <android-base/strings.h>
-
-#include <fstream>
-
-#include "AdaptiveBacklight.h"
-
-using android::base::ReadFileToString;
-using android::base::Trim;
-using android::base::WriteStringToFile;
-
-namespace vendor {
-namespace lineage {
-namespace livedisplay {
-namespace V2_0 {
-namespace samsung {
-
-static constexpr const char* kBacklightPath = "/sys/class/lcd/panel/power_reduce";
-
-bool AdaptiveBacklight::isSupported() {
- std::fstream backlight(kBacklightPath, backlight.in | backlight.out);
- return backlight.good();
-}
-
-// Methods from ::vendor::lineage::livedisplay::V2_0::IAdaptiveBacklight follow.
-Return<bool> AdaptiveBacklight::isEnabled() {
- std::string tmp;
- int32_t contents = 0;
-
- if (ReadFileToString(kBacklightPath, &tmp)) {
- contents = std::stoi(Trim(tmp));
- }
-
- return contents > 0;
-}
-
-Return<bool> AdaptiveBacklight::setEnabled(bool enabled) {
- return WriteStringToFile(enabled ? "1" : "0", kBacklightPath, true);
-}
-
-} // namespace samsung
-} // namespace V2_0
-} // namespace livedisplay
-} // namespace lineage
-} // namespace vendor
+++ /dev/null
-/*
- * 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.
- */
-
-#ifndef VENDOR_LINEAGE_LIVEDISPLAY_V2_0_ADAPTIVEBACKLIGHT_H
-#define VENDOR_LINEAGE_LIVEDISPLAY_V2_0_ADAPTIVEBACKLIGHT_H
-
-#include <hidl/MQDescriptor.h>
-#include <hidl/Status.h>
-#include <vendor/lineage/livedisplay/2.0/IAdaptiveBacklight.h>
-
-namespace vendor {
-namespace lineage {
-namespace livedisplay {
-namespace V2_0 {
-namespace samsung {
-
-using ::android::hardware::hidl_array;
-using ::android::hardware::hidl_memory;
-using ::android::hardware::hidl_string;
-using ::android::hardware::hidl_vec;
-using ::android::hardware::Return;
-using ::android::hardware::Void;
-using ::android::sp;
-
-class AdaptiveBacklight : public IAdaptiveBacklight {
- public:
- bool isSupported();
-
- // Methods from ::vendor::lineage::livedisplay::V2_0::IAdaptiveBacklight follow.
- Return<bool> isEnabled() override;
- Return<bool> setEnabled(bool enabled) override;
-
- // Methods from ::android::hidl::base::V1_0::IBase follow.
-};
-
-} // namespace samsung
-} // namespace V2_0
-} // namespace livedisplay
-} // namespace lineage
-} // namespace vendor
-
-#endif // VENDOR_LINEAGE_LIVEDISPLAY_V2_0_ADAPTIVEBACKLIGHT_H
+++ /dev/null
-// 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_defaults {
- name: "livedisplay_samsung_exynos_defaults",
- defaults: ["hidl_defaults"],
- relative_install_path: "hw",
- srcs: [
- "AdaptiveBacklight.cpp",
- "DisplayColorCalibrationExynos.cpp",
- "DisplayModes.cpp",
- "ReadingEnhancement.cpp",
- "SunlightEnhancementExynos.cpp",
- "serviceExynos.cpp",
- ],
- shared_libs: [
- "libbase",
- "libbinder",
- "libhidlbase",
- "libhidltransport",
- "libutils",
- "vendor.lineage.livedisplay@2.0",
- ],
-}
-
-cc_defaults {
- name: "livedisplay_samsung_qcom_defaults",
- defaults: ["hidl_defaults"],
- relative_install_path: "hw",
- srcs: [
- "AdaptiveBacklight.cpp",
- "DisplayColorCalibration.cpp",
- "DisplayModes.cpp",
- "ReadingEnhancement.cpp",
- "SunlightEnhancement.cpp",
- "service.cpp",
- ],
- shared_libs: [
- "libbase",
- "libbinder",
- "libhidlbase",
- "libhidltransport",
- "libutils",
- "vendor.lineage.livedisplay@2.0",
- ],
-}
-
-cc_binary {
- name: "lineage.livedisplay@2.0-service.samsung-exynos",
- init_rc: ["lineage.livedisplay@2.0-service.samsung-exynos.rc"],
- defaults: ["livedisplay_samsung_exynos_defaults"],
- cflags: ["-DLIVES_IN_SYSTEM"],
-}
-
-cc_binary {
- name: "vendor.lineage.livedisplay@2.0-service.samsung-exynos",
- init_rc: ["vendor.lineage.livedisplay@2.0-service.samsung-exynos.rc"],
- defaults: ["livedisplay_samsung_exynos_defaults"],
- vendor: true,
-}
-
-cc_binary {
- name: "lineage.livedisplay@2.0-service.samsung-qcom",
- init_rc: ["lineage.livedisplay@2.0-service.samsung-qcom.rc"],
- defaults: ["livedisplay_samsung_qcom_defaults"],
- cflags: ["-DLIVES_IN_SYSTEM"],
-}
-
-cc_binary {
- name: "vendor.lineage.livedisplay@2.0-service.samsung-qcom",
- init_rc: ["vendor.lineage.livedisplay@2.0-service.samsung-qcom.rc"],
- defaults: ["livedisplay_samsung_qcom_defaults"],
- vendor: true,
-}
+++ /dev/null
-/*
- * 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.
- */
-
-#include <android-base/file.h>
-#include <android-base/strings.h>
-
-#include <fstream>
-
-#include "DisplayColorCalibration.h"
-
-using android::base::ReadFileToString;
-using android::base::Split;
-using android::base::Trim;
-using android::base::WriteStringToFile;
-
-namespace vendor {
-namespace lineage {
-namespace livedisplay {
-namespace V2_0 {
-namespace samsung {
-
-bool DisplayColorCalibration::isSupported() {
- std::fstream rgb(FILE_RGB, rgb.in | rgb.out);
-
- return rgb.good();
-}
-
-// Methods from ::vendor::lineage::livedisplay::V2_0::IDisplayColorCalibration follow.
-Return<int32_t> DisplayColorCalibration::getMaxValue() {
- return 32768;
-}
-
-Return<int32_t> DisplayColorCalibration::getMinValue() {
- return 255;
-}
-
-Return<void> DisplayColorCalibration::getCalibration(getCalibration_cb _hidl_cb) {
- std::vector<int32_t> rgb;
- std::string tmp;
-
- if (ReadFileToString(FILE_RGB, &tmp)) {
- std::vector<std::string> colors = Split(Trim(tmp), " ");
- for (const std::string& color : colors) {
- rgb.push_back(std::stoi(color));
- }
- }
-
- _hidl_cb(rgb);
- return Void();
-}
-
-Return<bool> DisplayColorCalibration::setCalibration(const hidl_vec<int32_t>& rgb) {
- std::string contents;
-
- for (const int32_t& color : rgb) {
- contents += std::to_string(color) + " ";
- }
-
- return WriteStringToFile(Trim(contents), FILE_RGB, true);
-}
-
-} // namespace samsung
-} // namespace V2_0
-} // namespace livedisplay
-} // namespace lineage
-} // namespace vendor
+++ /dev/null
-/*
- * 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.
- */
-
-#ifndef VENDOR_LINEAGE_LIVEDISPLAY_V2_0_DISPLAYCOLORCALIBRATION_H
-#define VENDOR_LINEAGE_LIVEDISPLAY_V2_0_DISPLAYCOLORCALIBRATION_H
-
-#include <vendor/lineage/livedisplay/2.0/IDisplayColorCalibration.h>
-
-namespace vendor {
-namespace lineage {
-namespace livedisplay {
-namespace V2_0 {
-namespace samsung {
-
-using ::android::hardware::hidl_vec;
-using ::android::hardware::Return;
-using ::android::hardware::Void;
-
-#define FILE_RGB "/sys/class/graphics/fb0/rgb"
-
-class DisplayColorCalibration : public IDisplayColorCalibration {
- public:
- bool isSupported();
-
- // Methods from ::vendor::lineage::livedisplay::V2_0::IDisplayColorCalibration follow.
- Return<int32_t> getMaxValue() override;
- Return<int32_t> getMinValue() override;
- Return<void> getCalibration(getCalibration_cb _hidl_cb) override;
- Return<bool> setCalibration(const hidl_vec<int32_t>& rgb) override;
-};
-
-} // namespace samsung
-} // namespace V2_0
-} // namespace livedisplay
-} // namespace lineage
-} // namespace vendor
-
-#endif // VENDOR_LINEAGE_LIVEDISPLAY_V2_0_DISPLAYCOLORCALIBRATION_H
+++ /dev/null
-/*
- * 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.
- */
-
-#include <android-base/file.h>
-#include <android-base/strings.h>
-
-#include <fstream>
-
-#include "DisplayColorCalibrationExynos.h"
-
-using android::base::ReadFileToString;
-using android::base::Split;
-using android::base::Trim;
-using android::base::WriteStringToFile;
-
-namespace vendor {
-namespace lineage {
-namespace livedisplay {
-namespace V2_0 {
-namespace samsung {
-
-static constexpr const char* kColorPath = "/sys/class/mdnie/mdnie/sensorRGB";
-
-bool DisplayColorCalibrationExynos::isSupported() {
- std::fstream rgb(kColorPath, rgb.in | rgb.out);
- return rgb.good();
-}
-
-Return<int32_t> DisplayColorCalibrationExynos::getMaxValue() {
- return 255;
-}
-
-Return<int32_t> DisplayColorCalibrationExynos::getMinValue() {
- return 1;
-}
-
-Return<void> DisplayColorCalibrationExynos::getCalibration(getCalibration_cb resultCb) {
- std::vector<int32_t> rgb;
- std::string tmp;
-
- if (ReadFileToString(kColorPath, &tmp)) {
- std::vector<std::string> colors = Split(Trim(tmp), " ");
- for (const std::string& color : colors) {
- rgb.push_back(std::stoi(color));
- }
- }
-
- resultCb(rgb);
- return Void();
-}
-
-Return<bool> DisplayColorCalibrationExynos::setCalibration(const hidl_vec<int32_t>& rgb) {
- std::string contents;
- for (const int32_t& color : rgb) {
- contents += std::to_string(color) + " ";
- }
- return WriteStringToFile(Trim(contents), kColorPath, true);
-}
-
-} // namespace samsung
-} // namespace V2_0
-} // namespace livedisplay
-} // namespace lineage
-} // namespace vendor
+++ /dev/null
-/*
- * 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.
- */
-
-#ifndef VENDOR_LINEAGE_LIVEDISPLAY_V2_0_DISPLAYCOLORCALIBRATIONEXYNOS_H
-#define VENDOR_LINEAGE_LIVEDISPLAY_V2_0_DISPLAYCOLORCALIBRATIONEXYNOS_H
-
-#include <hidl/MQDescriptor.h>
-#include <hidl/Status.h>
-#include <vendor/lineage/livedisplay/2.0/IDisplayColorCalibration.h>
-
-namespace vendor {
-namespace lineage {
-namespace livedisplay {
-namespace V2_0 {
-namespace samsung {
-
-using ::android::hardware::hidl_array;
-using ::android::hardware::hidl_memory;
-using ::android::hardware::hidl_string;
-using ::android::hardware::hidl_vec;
-using ::android::hardware::Return;
-using ::android::hardware::Void;
-using ::android::sp;
-
-class DisplayColorCalibrationExynos : public IDisplayColorCalibration {
- public:
- bool isSupported();
-
- // Methods from ::vendor::lineage::livedisplay::V2_0::IDisplayColorCalibration follow.
- Return<int32_t> getMaxValue() override;
- Return<int32_t> getMinValue() override;
- Return<void> getCalibration(getCalibration_cb resultCb) override;
- Return<bool> setCalibration(const hidl_vec<int32_t>& rgb) override;
-
- // Methods from ::android::hidl::base::V1_0::IBase follow.
-};
-
-} // namespace samsung
-} // namespace V2_0
-} // namespace livedisplay
-} // namespace lineage
-} // namespace vendor
-
-#endif // VENDOR_LINEAGE_LIVEDISPLAY_V2_0_DISPLAYCOLORCALIBRATIONEXYNOS_H
+++ /dev/null
-/*
- * 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.
- */
-
-#define LOG_TAG "DisplayModesService"
-
-#include "DisplayModes.h"
-#include <android-base/logging.h>
-#include <fstream>
-
-namespace vendor {
-namespace lineage {
-namespace livedisplay {
-namespace V2_0 {
-namespace samsung {
-
-static constexpr const char* kModePath = "/sys/class/mdnie/mdnie/mode";
-static constexpr const char* kModeMaxPath = "/sys/class/mdnie/mdnie/mode_max";
-static constexpr const char* kDefaultPath = "/data/vendor/display/.displaymodedefault";
-
-const std::map<int32_t, std::string> DisplayModes::kModeMap = {
- // clang-format off
- {0, "Dynamic"},
- {1, "Standard"},
- {2, "Natural"},
- {3, "Cinema"},
- {4, "Adaptive"},
- {5, "Reading"},
- // clang-format on
-};
-
-DisplayModes::DisplayModes() : mDefaultModeId(0) {
- std::ifstream defaultFile(kDefaultPath);
- int value;
-
- defaultFile >> value;
- LOG(DEBUG) << "Default file read result " << value << " fail " << defaultFile.fail();
- if (defaultFile.fail()) {
- return;
- }
-
- for (const auto& entry : kModeMap) {
- if (value == entry.first) {
- mDefaultModeId = entry.first;
- break;
- }
- }
-
- setDisplayMode(mDefaultModeId, false);
-}
-
-bool DisplayModes::isSupported() {
- std::ofstream modeFile(kModePath);
- return modeFile.good();
-}
-
-// Methods from ::vendor::lineage::livedisplay::V2_0::IDisplayModes follow.
-Return<void> DisplayModes::getDisplayModes(getDisplayModes_cb resultCb) {
- std::ifstream maxModeFile(kModeMaxPath);
- int value;
- std::vector<DisplayMode> modes;
- if (!maxModeFile.fail()) {
- maxModeFile >> value;
- } else {
- value = kModeMap.size();
- }
- for (const auto& entry : kModeMap) {
- if (entry.first < value) modes.push_back({entry.first, entry.second});
- }
- resultCb(modes);
- return Void();
-}
-
-Return<void> DisplayModes::getCurrentDisplayMode(getCurrentDisplayMode_cb resultCb) {
- int32_t currentModeId = mDefaultModeId;
- std::ifstream modeFile(kModePath);
- int value;
- modeFile >> value;
- if (!modeFile.fail()) {
- for (const auto& entry : kModeMap) {
- if (value == entry.first) {
- currentModeId = entry.first;
- break;
- }
- }
- }
- resultCb({currentModeId, kModeMap.at(currentModeId)});
- return Void();
-}
-
-Return<void> DisplayModes::getDefaultDisplayMode(getDefaultDisplayMode_cb resultCb) {
- resultCb({mDefaultModeId, kModeMap.at(mDefaultModeId)});
- return Void();
-}
-
-Return<bool> DisplayModes::setDisplayMode(int32_t modeID, bool makeDefault) {
- const auto iter = kModeMap.find(modeID);
- if (iter == kModeMap.end()) {
- return false;
- }
- std::ofstream modeFile(kModePath);
- modeFile << iter->first;
- if (modeFile.fail()) {
- return false;
- }
-
- if (makeDefault) {
- std::ofstream defaultFile(kDefaultPath);
- defaultFile << iter->first;
- if (defaultFile.fail()) {
- return false;
- }
- mDefaultModeId = iter->first;
- }
- return true;
-}
-
-// Methods from ::android::hidl::base::V1_0::IBase follow.
-
-} // namespace samsung
-} // namespace V2_0
-} // namespace livedisplay
-} // namespace lineage
-} // namespace vendor
+++ /dev/null
-/*
- * 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.
- */
-
-#ifndef VENDOR_LINEAGE_LIVEDISPLAY_V2_0_DISPLAYMODES_H
-#define VENDOR_LINEAGE_LIVEDISPLAY_V2_0_DISPLAYMODES_H
-
-#include <hidl/MQDescriptor.h>
-#include <hidl/Status.h>
-#include <vendor/lineage/livedisplay/2.0/IDisplayModes.h>
-
-namespace vendor {
-namespace lineage {
-namespace livedisplay {
-namespace V2_0 {
-namespace samsung {
-
-using ::android::hardware::hidl_array;
-using ::android::hardware::hidl_memory;
-using ::android::hardware::hidl_string;
-using ::android::hardware::hidl_vec;
-using ::android::hardware::Return;
-using ::android::hardware::Void;
-using ::android::sp;
-
-class DisplayModes : public IDisplayModes {
- public:
- DisplayModes();
- bool isSupported();
-
- // Methods from ::vendor::lineage::livedisplay::V2_0::IDisplayModes follow.
- Return<void> getDisplayModes(getDisplayModes_cb resultCb) override;
- Return<void> getCurrentDisplayMode(getCurrentDisplayMode_cb resultCb) override;
- Return<void> getDefaultDisplayMode(getDefaultDisplayMode_cb resultCb) override;
- Return<bool> setDisplayMode(int32_t modeID, bool makeDefault) override;
-
- // Methods from ::android::hidl::base::V1_0::IBase follow.
- private:
- static const std::map<int32_t, std::string> kModeMap;
- int32_t mDefaultModeId;
-};
-
-} // namespace samsung
-} // namespace V2_0
-} // namespace livedisplay
-} // namespace lineage
-} // namespace vendor
-
-#endif // VENDOR_LINEAGE_LIVEDISPLAY_V2_0_DISPLAYMODES_H
+++ /dev/null
-/*
- * 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.
- */
-
-#include <android-base/file.h>
-#include <android-base/strings.h>
-
-#include <fstream>
-
-#include "ReadingEnhancement.h"
-
-using android::base::ReadFileToString;
-using android::base::Trim;
-using android::base::WriteStringToFile;
-
-namespace vendor {
-namespace lineage {
-namespace livedisplay {
-namespace V2_0 {
-namespace samsung {
-
-static constexpr const char* kREPath = "/sys/class/mdnie/mdnie/accessibility";
-
-// Methods from ::vendor::lineage::livedisplay::V2_0::ISunlightEnhancement follow.
-bool ReadingEnhancement::isSupported() {
- std::fstream re(kREPath, re.in | re.out);
- return re.good();
-}
-
-// Methods from ::vendor::lineage::livedisplay::V2_0::IReadingEnhancement follow.
-Return<bool> ReadingEnhancement::isEnabled() {
- std::string contents;
-
- if (ReadFileToString(kREPath, &contents)) {
- contents = Trim(contents);
- }
-
- return !contents.compare("Current accessibility : DSI0 : GRAYSCALE") || !contents.compare("4");
-}
-
-Return<bool> ReadingEnhancement::setEnabled(bool enabled) {
- return WriteStringToFile(enabled ? "4" : "0", kREPath, true);
-}
-
-// Methods from ::android::hidl::base::V1_0::IBase follow.
-
-} // namespace samsung
-} // namespace V2_0
-} // namespace livedisplay
-} // namespace lineage
-} // namespace vendor
+++ /dev/null
-/*
- * 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.
- */
-
-#ifndef VENDOR_LINEAGE_LIVEDISPLAY_V2_0_READINGENHANCEMENT_H
-#define VENDOR_LINEAGE_LIVEDISPLAY_V2_0_READINGENHANCEMENT_H
-
-#include <hidl/MQDescriptor.h>
-#include <hidl/Status.h>
-#include <vendor/lineage/livedisplay/2.0/IReadingEnhancement.h>
-
-namespace vendor {
-namespace lineage {
-namespace livedisplay {
-namespace V2_0 {
-namespace samsung {
-
-using ::android::hardware::hidl_array;
-using ::android::hardware::hidl_memory;
-using ::android::hardware::hidl_string;
-using ::android::hardware::hidl_vec;
-using ::android::hardware::Return;
-using ::android::hardware::Void;
-using ::android::sp;
-
-class ReadingEnhancement : public IReadingEnhancement {
- public:
- bool isSupported();
-
- // Methods from ::vendor::lineage::livedisplay::V2_0::IReadingEnhancement follow.
- Return<bool> isEnabled() override;
- Return<bool> setEnabled(bool) override;
-
- // Methods from ::android::hidl::base::V1_0::IBase follow.
-};
-
-} // namespace samsung
-} // namespace V2_0
-} // namespace livedisplay
-} // namespace lineage
-} // namespace vendor
-
-#endif // VENDOR_LINEAGE_LIVEDISPLAY_V2_0_READINGENHANCEMENT_H
+++ /dev/null
-/*
- * 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.
- */
-
-#include <android-base/file.h>
-#include <android-base/strings.h>
-
-#include <fstream>
-
-#include "SunlightEnhancement.h"
-
-using android::base::ReadFileToString;
-using android::base::Trim;
-using android::base::WriteStringToFile;
-
-namespace vendor {
-namespace lineage {
-namespace livedisplay {
-namespace V2_0 {
-namespace samsung {
-
-static constexpr const char* kHBMPath = "/sys/class/lcd/panel/panel/auto_brightness";
-static constexpr const char* kSREPath = "/sys/class/mdnie/mdnie/outdoor";
-
-// Methods from ::vendor::lineage::livedisplay::V2_0::ISunlightEnhancement follow.
-bool SunlightEnhancement::isSupported() {
- std::fstream sre(kSREPath, sre.in | sre.out);
- std::fstream hbm(kHBMPath, hbm.in | hbm.out);
-
- if (hbm.good()) {
- mHasHBM = true;
- }
-
- return sre.good();
-}
-
-// Methods from ::vendor::lineage::livedisplay::V2_0::IAdaptiveBacklight follow.
-Return<bool> SunlightEnhancement::isEnabled() {
- std::string tmp;
- int32_t statusSRE = 0;
- int32_t statusHBM = 0;
- if (ReadFileToString(kSREPath, &tmp)) {
- statusSRE = std::stoi(Trim(tmp));
- }
-
- if (mHasHBM && ReadFileToString(kHBMPath, &tmp)) {
- statusHBM = std::stoi(Trim(tmp));
- }
-
- return ((statusSRE == 1 && statusHBM == 6) || statusSRE == 1);
-}
-
-Return<bool> SunlightEnhancement::setEnabled(bool enabled) {
- if (mHasHBM) {
- WriteStringToFile(enabled ? "6" : "0", kHBMPath, true);
- }
-
- return WriteStringToFile(enabled ? "1" : "0", kSREPath, true);
-}
-
-} // namespace samsung
-} // namespace V2_0
-} // namespace livedisplay
-} // namespace lineage
-} // namespace vendor
+++ /dev/null
-/*
- * 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.
- */
-
-#ifndef VENDOR_LINEAGE_LIVEDISPLAY_V2_0_SUNLIGHTENHANCEMENT_H
-#define VENDOR_LINEAGE_LIVEDISPLAY_V2_0_SUNLIGHTENHANCEMENT_H
-
-#include <hidl/MQDescriptor.h>
-#include <hidl/Status.h>
-#include <vendor/lineage/livedisplay/2.0/ISunlightEnhancement.h>
-
-namespace vendor {
-namespace lineage {
-namespace livedisplay {
-namespace V2_0 {
-namespace samsung {
-
-using ::android::hardware::hidl_array;
-using ::android::hardware::hidl_memory;
-using ::android::hardware::hidl_string;
-using ::android::hardware::hidl_vec;
-using ::android::hardware::Return;
-using ::android::hardware::Void;
-using ::android::sp;
-
-class SunlightEnhancement : public ISunlightEnhancement {
- public:
- bool isSupported();
-
- // Methods from ::vendor::lineage::livedisplay::V2_0::ISunlightEnhancement follow.
- Return<bool> isEnabled() override;
- Return<bool> setEnabled(bool enabled) override;
-
- // Methods from ::android::hidl::base::V1_0::IBase follow.
- private:
- bool mHasHBM = false;
-};
-
-} // namespace samsung
-} // namespace V2_0
-} // namespace livedisplay
-} // namespace lineage
-} // namespace vendor
-
-#endif // VENDOR_LINEAGE_LIVEDISPLAY_V2_0_SUNLIGHTENHANCEMENT_H
+++ /dev/null
-/*
- * 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.
- */
-
-#include <android-base/file.h>
-#include <android-base/strings.h>
-
-#include <fstream>
-
-#include "SunlightEnhancementExynos.h"
-
-using android::base::ReadFileToString;
-using android::base::Trim;
-using android::base::WriteStringToFile;
-
-namespace vendor {
-namespace lineage {
-namespace livedisplay {
-namespace V2_0 {
-namespace samsung {
-
-static constexpr const char* kLUXPath = "/sys/class/mdnie/mdnie/lux";
-
-// Methods from ::vendor::lineage::livedisplay::V2_0::ISunlightEnhancement follow.
-bool SunlightEnhancementExynos::isSupported() {
- std::fstream file(kLUXPath, file.in | file.out);
- return file.good();
-}
-
-// Methods from ::vendor::lineage::livedisplay::V2_0::IAdaptiveBacklight follow.
-Return<bool> SunlightEnhancementExynos::isEnabled() {
- std::string tmp;
- int32_t contents = 0;
-
- if (ReadFileToString(kLUXPath, &tmp)) {
- contents = std::stoi(Trim(tmp));
- }
-
- return contents > 0;
-}
-
-Return<bool> SunlightEnhancementExynos::setEnabled(bool enabled) {
- /* see drivers/video/fbdev/exynos/decon_7880/panels/mdnie_lite_table*, get_hbm_index */
- return WriteStringToFile(enabled ? "40000" : "0", kLUXPath, true);
-}
-
-} // namespace samsung
-} // namespace V2_0
-} // namespace livedisplay
-} // namespace lineage
-} // namespace vendor
+++ /dev/null
-/*
- * 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.
- */
-
-#ifndef VENDOR_LINEAGE_LIVEDISPLAY_V2_0_SUNLIGHTENHANCEMENTEXYNOS_H
-#define VENDOR_LINEAGE_LIVEDISPLAY_V2_0_SUNLIGHTENHANCEMENTEXYNOS_H
-
-#include <hidl/MQDescriptor.h>
-#include <hidl/Status.h>
-#include <vendor/lineage/livedisplay/2.0/ISunlightEnhancement.h>
-
-namespace vendor {
-namespace lineage {
-namespace livedisplay {
-namespace V2_0 {
-namespace samsung {
-
-using ::android::hardware::hidl_array;
-using ::android::hardware::hidl_memory;
-using ::android::hardware::hidl_string;
-using ::android::hardware::hidl_vec;
-using ::android::hardware::Return;
-using ::android::hardware::Void;
-using ::android::sp;
-
-class SunlightEnhancementExynos : public ISunlightEnhancement {
- public:
- bool isSupported();
-
- // Methods from ::vendor::lineage::livedisplay::V2_0::ISunlightEnhancement follow.
- Return<bool> isEnabled() override;
- Return<bool> setEnabled(bool enabled) override;
-
- // Methods from ::android::hidl::base::V1_0::IBase follow.
-};
-
-} // namespace samsung
-} // namespace V2_0
-} // namespace livedisplay
-} // namespace lineage
-} // namespace vendor
-
-#endif // VENDOR_LINEAGE_LIVEDISPLAY_V2_0_SUNLIGHTENHANCEMENTEXYNOS_H
+++ /dev/null
-on post-fs-data
- mkdir /data/vendor/display 0770 system system
-
-service livedisplay-hal-2-0-samsung-exynos /system/bin/hw/lineage.livedisplay@2.0-service.samsung-exynos
- class hal
- user system
- group system
\ No newline at end of file
+++ /dev/null
-on post-fs-data
- mkdir /data/vendor/display 0770 system system
-
-service livedisplay-hal-2-0-samsung-qcom /system/bin/hw/lineage.livedisplay@2.0-service.samsung-qcom
- class late_start
- user system
- group system
+++ /dev/null
-/*
- * 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.
- */
-
-#ifdef LIVES_IN_SYSTEM
-#define LOG_TAG "lineage.livedisplay@2.0-service.samsung-qcom"
-#else
-#define LOG_TAG "vendor.lineage.livedisplay@2.0-service.samsung-qcom"
-#endif
-
-#include <android-base/logging.h>
-#include <binder/ProcessState.h>
-#include <hidl/HidlTransportSupport.h>
-
-#include "AdaptiveBacklight.h"
-#include "DisplayColorCalibration.h"
-#include "DisplayModes.h"
-#include "ReadingEnhancement.h"
-#include "SunlightEnhancement.h"
-
-using android::hardware::configureRpcThreadpool;
-using android::hardware::joinRpcThreadpool;
-using android::sp;
-using android::status_t;
-using android::OK;
-
-using vendor::lineage::livedisplay::V2_0::samsung::AdaptiveBacklight;
-using vendor::lineage::livedisplay::V2_0::samsung::DisplayColorCalibration;
-using vendor::lineage::livedisplay::V2_0::samsung::DisplayModes;
-using vendor::lineage::livedisplay::V2_0::samsung::ReadingEnhancement;
-using vendor::lineage::livedisplay::V2_0::samsung::SunlightEnhancement;
-
-int main() {
- sp<AdaptiveBacklight> adaptiveBacklight;
- sp<DisplayColorCalibration> displayColorCalibration;
- sp<DisplayModes> displayModes;
- sp<ReadingEnhancement> readingEnhancement;
- sp<SunlightEnhancement> sunlightEnhancement;
- status_t status;
-
- LOG(INFO) << "LiveDisplay HAL service is starting.";
-
- adaptiveBacklight = new AdaptiveBacklight();
- if (adaptiveBacklight == nullptr) {
- LOG(ERROR)
- << "Can not create an instance of LiveDisplay HAL AdaptiveBacklight Iface, exiting.";
- goto shutdown;
- }
-
- displayColorCalibration = new DisplayColorCalibration();
- if (displayColorCalibration == nullptr) {
- LOG(ERROR) << "Can not create an instance of LiveDisplay HAL DisplayColorCalibration "
- "Iface, exiting.";
- goto shutdown;
- }
-
- displayModes = new DisplayModes();
- if (displayModes == nullptr) {
- LOG(ERROR) << "Can not create an instance of LiveDisplay HAL DisplayModes Iface, exiting.";
- goto shutdown;
- }
-
- readingEnhancement = new ReadingEnhancement();
- if (readingEnhancement == nullptr) {
- LOG(ERROR)
- << "Can not create an instance of LiveDisplay HAL ReadingEnhancement Iface, exiting.";
- goto shutdown;
- }
-
- sunlightEnhancement = new SunlightEnhancement();
- if (sunlightEnhancement == nullptr) {
- LOG(ERROR)
- << "Can not create an instance of LiveDisplay HAL SunlightEnhancement Iface, exiting.";
- goto shutdown;
- }
-
- configureRpcThreadpool(1, true /*callerWillJoin*/);
-
- if (adaptiveBacklight->isSupported()) {
- status = adaptiveBacklight->registerAsService();
- if (status != OK) {
- LOG(ERROR) << "Could not register service for LiveDisplay HAL AdaptiveBacklight Iface ("
- << status << ")";
- goto shutdown;
- }
- }
-
- if (displayColorCalibration->isSupported()) {
- status = displayColorCalibration->registerAsService();
- if (status != OK) {
- LOG(ERROR)
- << "Could not register service for LiveDisplay HAL DisplayColorCalibration Iface ("
- << status << ")";
- goto shutdown;
- }
- }
-
- if (displayModes->isSupported()) {
- status = displayModes->registerAsService();
- if (status != OK) {
- LOG(ERROR) << "Could not register service for LiveDisplay HAL DisplayModes Iface ("
- << status << ")";
- goto shutdown;
- }
- }
-
- if (readingEnhancement->isSupported()) {
- status = readingEnhancement->registerAsService();
- if (status != OK) {
- LOG(ERROR)
- << "Could not register service for LiveDisplay HAL ReadingEnhancement Iface ("
- << status << ")";
- goto shutdown;
- }
- }
-
- if (sunlightEnhancement->isSupported()) {
- status = sunlightEnhancement->registerAsService();
- if (status != OK) {
- LOG(ERROR)
- << "Could not register service for LiveDisplay HAL SunlightEnhancement Iface ("
- << status << ")";
- goto shutdown;
- }
- }
-
- LOG(INFO) << "LiveDisplay HAL service is ready.";
- joinRpcThreadpool();
-// Should not pass this line
-
-shutdown:
- // In normal operation, we don't expect the thread pool to shutdown
- LOG(ERROR) << "LiveDisplay HAL service is shutting down.";
- return 1;
-}
+++ /dev/null
-/*
- * 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.
- */
-
-#ifdef LIVES_IN_SYSTEM
-#define LOG_TAG "lineage.livedisplay@2.0-service.samsung-exynos"
-#else
-#define LOG_TAG "vendor.lineage.livedisplay@2.0-service.samsung-exynos"
-#endif
-
-#include <android-base/logging.h>
-#include <binder/ProcessState.h>
-#include <hidl/HidlTransportSupport.h>
-
-#include "AdaptiveBacklight.h"
-#include "DisplayColorCalibrationExynos.h"
-#include "DisplayModes.h"
-#include "ReadingEnhancement.h"
-#include "SunlightEnhancementExynos.h"
-
-using android::hardware::configureRpcThreadpool;
-using android::hardware::joinRpcThreadpool;
-using android::sp;
-using android::status_t;
-using android::OK;
-
-using vendor::lineage::livedisplay::V2_0::samsung::AdaptiveBacklight;
-using vendor::lineage::livedisplay::V2_0::samsung::DisplayColorCalibrationExynos;
-using vendor::lineage::livedisplay::V2_0::samsung::DisplayModes;
-using vendor::lineage::livedisplay::V2_0::samsung::ReadingEnhancement;
-using vendor::lineage::livedisplay::V2_0::samsung::SunlightEnhancementExynos;
-
-int main() {
- sp<AdaptiveBacklight> adaptiveBacklight;
- sp<DisplayColorCalibrationExynos> displayColorCalibrationExynos;
- sp<DisplayModes> displayModes;
- sp<ReadingEnhancement> readingEnhancement;
- sp<SunlightEnhancementExynos> sunlightEnhancementExynos;
- status_t status;
-
- LOG(INFO) << "LiveDisplay HAL service is starting.";
-
- adaptiveBacklight = new AdaptiveBacklight();
- if (adaptiveBacklight == nullptr) {
- LOG(ERROR)
- << "Can not create an instance of LiveDisplay HAL AdaptiveBacklight Iface, exiting.";
- goto shutdown;
- }
-
- displayColorCalibrationExynos = new DisplayColorCalibrationExynos();
- if (displayColorCalibrationExynos == nullptr) {
- LOG(ERROR) << "Can not create an instance of LiveDisplay HAL DisplayColorCalibration "
- "Iface, exiting.";
- goto shutdown;
- }
-
- displayModes = new DisplayModes();
- if (displayModes == nullptr) {
- LOG(ERROR) << "Can not create an instance of LiveDisplay HAL DisplayModes Iface, exiting.";
- goto shutdown;
- }
-
- readingEnhancement = new ReadingEnhancement();
- if (readingEnhancement == nullptr) {
- LOG(ERROR)
- << "Can not create an instance of LiveDisplay HAL ReadingEnhancement Iface, exiting.";
- goto shutdown;
- }
-
- sunlightEnhancementExynos = new SunlightEnhancementExynos();
- if (sunlightEnhancementExynos == nullptr) {
- LOG(ERROR)
- << "Can not create an instance of LiveDisplay HAL SunlightEnhancement Iface, exiting.";
- goto shutdown;
- }
-
- configureRpcThreadpool(1, true /*callerWillJoin*/);
-
- if (adaptiveBacklight->isSupported()) {
- status = adaptiveBacklight->registerAsService();
- if (status != OK) {
- LOG(ERROR) << "Could not register service for LiveDisplay HAL AdaptiveBacklight Iface ("
- << status << ")";
- goto shutdown;
- }
- }
-
- if (displayColorCalibrationExynos->isSupported()) {
- status = displayColorCalibrationExynos->registerAsService();
- if (status != OK) {
- LOG(ERROR)
- << "Could not register service for LiveDisplay HAL DisplayColorCalibration Iface ("
- << status << ")";
- goto shutdown;
- }
- }
-
- if (displayModes->isSupported()) {
- status = displayModes->registerAsService();
- if (status != OK) {
- LOG(ERROR) << "Could not register service for LiveDisplay HAL DisplayModes Iface ("
- << status << ")";
- goto shutdown;
- }
- }
-
- if (readingEnhancement->isSupported()) {
- status = readingEnhancement->registerAsService();
- if (status != OK) {
- LOG(ERROR)
- << "Could not register service for LiveDisplay HAL ReadingEnhancement Iface ("
- << status << ")";
- goto shutdown;
- }
- }
-
- if (sunlightEnhancementExynos->isSupported()) {
- status = sunlightEnhancementExynos->registerAsService();
- if (status != OK) {
- LOG(ERROR)
- << "Could not register service for LiveDisplay HAL SunlightEnhancement Iface ("
- << status << ")";
- goto shutdown;
- }
- }
-
- LOG(INFO) << "LiveDisplay HAL service is ready.";
- joinRpcThreadpool();
-// Should not pass this line
-
-shutdown:
- // In normal operation, we don't expect the thread pool to shutdown
- LOG(ERROR) << "LiveDisplay HAL service is shutting down.";
- return 1;
-}
+++ /dev/null
-on post-fs-data
- mkdir /data/vendor/display 0770 system system
-
-service vendor.livedisplay-hal-2-0-samsung-exynos /vendor/bin/hw/vendor.lineage.livedisplay@2.0-service.samsung-exynos
- class hal
- user system
- group system
\ No newline at end of file
+++ /dev/null
-on post-fs-data
- mkdir /data/vendor/display 0770 system system
-
-service vendor.livedisplay-hal-2-0-samsung-qcom /vendor/bin/hw/vendor.lineage.livedisplay@2.0-service.samsung-qcom
- class late_start
- user system
- group system
+++ /dev/null
-BasedOnStyle: Google
-AccessModifierOffset: -2
-AllowShortFunctionsOnASingleLine: Inline
-ColumnLimit: 100
-CommentPragmas: NOLINT:.*
-DerivePointerAlignment: false
-IndentWidth: 4
-PointerAlignment: Left
-TabWidth: 4
-UseTab: Never
-PenaltyExcessCharacter: 32
+++ /dev/null
-// 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 {
- name: "vendor.lineage.touch@1.0-service.samsung",
- init_rc: ["vendor.lineage.touch@1.0-service.samsung.rc"],
- defaults: ["hidl_defaults"],
- relative_install_path: "hw",
- // FIXME: this should be 'vendor: true' for modules that will eventually be
- // on AOSP.
- proprietary: true,
- srcs: [
- "GloveMode.cpp",
- "KeyDisabler.cpp",
- "StylusMode.cpp",
- "TouchscreenGesture.cpp",
- "service.cpp"
- ],
- shared_libs: [
- "libbase",
- "libbinder",
- "libhidlbase",
- "libhidltransport",
- "libutils",
- "vendor.lineage.touch@1.0",
- ],
-}
+++ /dev/null
-/*
- * 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.
- */
-
-#include <fstream>
-
-#include "GloveMode.h"
-
-namespace vendor {
-namespace lineage {
-namespace touch {
-namespace V1_0 {
-namespace samsung {
-
-bool GloveMode::isSupported() {
- std::ifstream file("/sys/class/sec/tsp/cmd_list");
- if (file.is_open()) {
- std::string line;
- while (getline(file, line)) {
- if (!line.compare("glove_mode")) return true;
- }
- file.close();
- }
- return false;
-}
-
-// Methods from ::vendor::lineage::touch::V1_0::IGloveMode follow.
-Return<bool> GloveMode::isEnabled() {
- std::ifstream file("/sys/class/sec/tsp/cmd_result");
- if (file.is_open()) {
- std::string line;
- getline(file, line);
- if (!line.compare("glove_mode,1:OK")) return true;
- file.close();
- }
- return false;
-}
-
-Return<bool> GloveMode::setEnabled(bool enabled) {
- std::ofstream file("/sys/class/sec/tsp/cmd");
- file << "glove_mode," << (enabled ? "1" : "0");
- return true;
-}
-
-} // namespace samsung
-} // namespace V1_0
-} // namespace touch
-} // namespace lineage
-} // namespace vendor
+++ /dev/null
-/*
- * 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.
- */
-
-#ifndef VENDOR_LINEAGE_TOUCH_V1_0_GLOVEMODE_H
-#define VENDOR_LINEAGE_TOUCH_V1_0_GLOVEMODE_H
-
-#include <hidl/MQDescriptor.h>
-#include <hidl/Status.h>
-#include <vendor/lineage/touch/1.0/IGloveMode.h>
-
-namespace vendor {
-namespace lineage {
-namespace touch {
-namespace V1_0 {
-namespace samsung {
-
-using ::android::hardware::hidl_array;
-using ::android::hardware::hidl_memory;
-using ::android::hardware::hidl_string;
-using ::android::hardware::hidl_vec;
-using ::android::hardware::Return;
-using ::android::hardware::Void;
-using ::android::sp;
-
-class GloveMode : public IGloveMode {
- public:
- GloveMode() = default;
-
- bool isSupported();
-
- // Methods from ::vendor::lineage::touch::V1_0::IGloveMode follow.
- Return<bool> isEnabled() override;
- Return<bool> setEnabled(bool enabled) override;
-
- // Methods from ::android::hidl::base::V1_0::IBase follow.
-};
-
-} // namespace samsung
-} // namespace V1_0
-} // namespace touch
-} // namespace lineage
-} // namespace vendor
-
-#endif // VENDOR_LINEAGE_TOUCH_V1_0_GLOVEMODE_H
+++ /dev/null
-/*
- * 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.
- */
-
-#include <fstream>
-
-#include "KeyDisabler.h"
-
-namespace vendor {
-namespace lineage {
-namespace touch {
-namespace V1_0 {
-namespace samsung {
-
-bool KeyDisabler::isSupported() {
- std::ofstream file("/sys/class/sec/sec_touchkey/input/enabled");
- return file.good();
-}
-
-// Methods from ::vendor::lineage::touch::V1_0::IKeyDisabler follow.
-Return<bool> KeyDisabler::isEnabled() {
- std::ifstream file("/sys/class/sec/sec_touchkey/input/enabled");
- int status = -1;
-
- if (file.is_open()) {
- file >> status;
- }
-
- return file.good() && status == 0;
-}
-
-Return<bool> KeyDisabler::setEnabled(bool enabled) {
- std::ofstream file("/sys/class/sec/sec_touchkey/input/enabled");
- file << (enabled ? "0" : "1");
- return true;
-}
-
-} // namespace samsung
-} // namespace V1_0
-} // namespace touch
-} // namespace lineage
-} // namespace vendor
+++ /dev/null
-/*
- * 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.
- */
-
-#ifndef VENDOR_LINEAGE_TOUCH_V1_0_KEYDISABLER_H
-#define VENDOR_LINEAGE_TOUCH_V1_0_KEYDISABLER_H
-
-#include <hidl/MQDescriptor.h>
-#include <hidl/Status.h>
-#include <vendor/lineage/touch/1.0/IKeyDisabler.h>
-
-namespace vendor {
-namespace lineage {
-namespace touch {
-namespace V1_0 {
-namespace samsung {
-
-using ::android::hardware::hidl_array;
-using ::android::hardware::hidl_memory;
-using ::android::hardware::hidl_string;
-using ::android::hardware::hidl_vec;
-using ::android::hardware::Return;
-using ::android::hardware::Void;
-using ::android::sp;
-
-class KeyDisabler : public IKeyDisabler {
- public:
- KeyDisabler() = default;
-
- bool isSupported();
-
- // Methods from ::vendor::lineage::touch::V1_0::IKeyDisabler follow.
- Return<bool> isEnabled() override;
- Return<bool> setEnabled(bool enabled) override;
-
- // Methods from ::android::hidl::base::V1_0::IBase follow.
-};
-
-} // namespace samsung
-} // namespace V1_0
-} // namespace touch
-} // namespace lineage
-} // namespace vendor
-
-#endif // VENDOR_LINEAGE_TOUCH_V1_0_KEYDISABLER_H
+++ /dev/null
-/*
- * 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.
- */
-
-#include <fstream>
-
-#include "StylusMode.h"
-
-namespace vendor {
-namespace lineage {
-namespace touch {
-namespace V1_0 {
-namespace samsung {
-
-bool StylusMode::isSupported() {
- std::ifstream file("/sys/class/sec/tsp/cmd_list");
- if (file.is_open()) {
- std::string line;
- while (getline(file, line)) {
- if (!line.compare("hover_enable")) return true;
- }
- file.close();
- }
- return false;
-}
-
-// Methods from ::vendor::lineage::touch::V1_0::IStylusMode follow.
-Return<bool> StylusMode::isEnabled() {
- std::ifstream file("/sys/class/sec/tsp/cmd_result");
- if (file.is_open()) {
- std::string line;
- getline(file, line);
- if (!line.compare("hover_enable,1:OK")) return true;
- file.close();
- }
- return false;
-}
-
-Return<bool> StylusMode::setEnabled(bool enabled) {
- std::ofstream file("/sys/class/sec/tsp/cmd");
- file << "hover_enable," << (enabled ? "1" : "0");
- return true;
-}
-
-} // namespace samsung
-} // namespace V1_0
-} // namespace touch
-} // namespace lineage
-} // namespace vendor
+++ /dev/null
-/*
- * 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.
- */
-
-#ifndef VENDOR_LINEAGE_TOUCH_V1_0_STYLUSMODE_H
-#define VENDOR_LINEAGE_TOUCH_V1_0_STYLUSMODE_H
-
-#include <hidl/MQDescriptor.h>
-#include <hidl/Status.h>
-#include <vendor/lineage/touch/1.0/IStylusMode.h>
-
-namespace vendor {
-namespace lineage {
-namespace touch {
-namespace V1_0 {
-namespace samsung {
-
-using ::android::hardware::hidl_array;
-using ::android::hardware::hidl_memory;
-using ::android::hardware::hidl_string;
-using ::android::hardware::hidl_vec;
-using ::android::hardware::Return;
-using ::android::hardware::Void;
-using ::android::sp;
-
-class StylusMode : public IStylusMode {
- public:
- StylusMode() = default;
-
- bool isSupported();
-
- // Methods from ::vendor::lineage::touch::V1_0::IStylusMode follow.
- Return<bool> isEnabled() override;
- Return<bool> setEnabled(bool enabled) override;
-
- // Methods from ::android::hidl::base::V1_0::IBase follow.
-};
-
-} // namespace samsung
-} // namespace V1_0
-} // namespace touch
-} // namespace lineage
-} // namespace vendor
-
-#endif // VENDOR_LINEAGE_TOUCH_V1_0_STYLUSMODE_H
+++ /dev/null
-/*
- * 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.
- */
-
-#include <fstream>
-
-#include "TouchscreenGesture.h"
-
-namespace vendor {
-namespace lineage {
-namespace touch {
-namespace V1_0 {
-namespace samsung {
-
-static constexpr const char* kGeasturePath = "/sys/class/sec/sec_epen/epen_gestures";
-
-const std::map<int32_t, TouchscreenGesture::GestureInfo> TouchscreenGesture::kGestureInfoMap = {
- // clang-format off
- {0, {0x2f1, "Swipe up stylus"}},
- {1, {0x2f2, "Swipe down stylus"}},
- {2, {0x2f3, "Swipe left stylus"}},
- {3, {0x2f4, "Swipe right stylus"}},
- {4, {0x2f5, "Long press stylus"}},
- // clang-format on
-};
-
-bool TouchscreenGesture::isSupported() {
- std::ifstream file(kGeasturePath);
- return file.good();
-}
-
-// Methods from ::vendor::lineage::touch::V1_0::ITouchscreenGesture follow.
-Return<void> TouchscreenGesture::getSupportedGestures(getSupportedGestures_cb resultCb) {
- std::vector<Gesture> gestures;
-
- for (const auto& entry : kGestureInfoMap) {
- gestures.push_back({entry.first, entry.second.name, entry.second.keycode});
- }
- resultCb(gestures);
-
- return Void();
-}
-
-Return<bool> TouchscreenGesture::setGestureEnabled(
- const ::vendor::lineage::touch::V1_0::Gesture& gesture, bool enabled) {
- std::fstream file(kGeasturePath);
- int gestureMode;
- int mask = 1 << gesture.id;
-
- file >> gestureMode;
-
- if (enabled)
- gestureMode |= mask;
- else
- gestureMode &= ~mask;
-
- file << gestureMode;
-
- return !file.fail();
-}
-
-// Methods from ::android::hidl::base::V1_0::IBase follow.
-
-} // namespace samsung
-} // namespace V1_0
-} // namespace touch
-} // namespace lineage
-} // namespace vendor
+++ /dev/null
-/*
- * 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.
- */
-
-#ifndef VENDOR_LINEAGE_TOUCH_V1_0_TOUCHSCREENGESTURE_H
-#define VENDOR_LINEAGE_TOUCH_V1_0_TOUCHSCREENGESTURE_H
-
-#include <hidl/MQDescriptor.h>
-#include <hidl/Status.h>
-#include <vendor/lineage/touch/1.0/ITouchscreenGesture.h>
-
-namespace vendor {
-namespace lineage {
-namespace touch {
-namespace V1_0 {
-namespace samsung {
-
-using ::android::hardware::hidl_array;
-using ::android::hardware::hidl_memory;
-using ::android::hardware::hidl_string;
-using ::android::hardware::hidl_vec;
-using ::android::hardware::Return;
-using ::android::hardware::Void;
-using ::android::sp;
-
-class TouchscreenGesture : public ITouchscreenGesture {
- public:
- bool isSupported();
-
- // Methods from ::vendor::lineage::touch::V1_0::ITouchscreenGesture follow.
- Return<void> getSupportedGestures(getSupportedGestures_cb resultCb) override;
- Return<bool> setGestureEnabled(const ::vendor::lineage::touch::V1_0::Gesture& gesture,
- bool enabled) override;
-
- private:
- typedef struct {
- int32_t keycode;
- const char* name;
- } GestureInfo;
- static const std::map<int32_t, GestureInfo> kGestureInfoMap; // id -> info
-};
-
-// FIXME: most likely delete, this is only for passthrough implementations
-// extern "C" ITouchscreenGesture* HIDL_FETCH_ITouchscreenGesture(const char* name);
-
-} // namespace samsung
-} // namespace V1_0
-} // namespace touch
-} // namespace lineage
-} // namespace vendor
-
-#endif // VENDOR_LINEAGE_TOUCH_V1_0_TOUCHSCREENGESTURE_H
+++ /dev/null
-/*
- * 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.
- */
-
-#define LOG_TAG "vendor.lineage.touch@1.0-service.samsung"
-
-#include <android-base/logging.h>
-#include <binder/ProcessState.h>
-#include <hidl/HidlTransportSupport.h>
-
-#include "GloveMode.h"
-#include "KeyDisabler.h"
-#include "StylusMode.h"
-#include "TouchscreenGesture.h"
-
-using android::hardware::configureRpcThreadpool;
-using android::hardware::joinRpcThreadpool;
-using android::sp;
-using android::status_t;
-using android::OK;
-
-using ::vendor::lineage::touch::V1_0::samsung::GloveMode;
-using ::vendor::lineage::touch::V1_0::samsung::KeyDisabler;
-using ::vendor::lineage::touch::V1_0::samsung::StylusMode;
-using ::vendor::lineage::touch::V1_0::samsung::TouchscreenGesture;
-
-int main() {
- sp<GloveMode> gloveMode;
- sp<KeyDisabler> keyDisabler;
- sp<StylusMode> stylusMode;
- sp<TouchscreenGesture> touchscreenGesture;
- status_t status;
-
- LOG(INFO) << "Touch HAL service is starting.";
-
- gloveMode = new GloveMode();
- if (gloveMode == nullptr) {
- LOG(ERROR) << "Can not create an instance of Touch HAL GloveMode Iface, exiting.";
- goto shutdown;
- }
-
- keyDisabler = new KeyDisabler();
- if (keyDisabler == nullptr) {
- LOG(ERROR) << "Can not create an instance of Touch HAL KeyDisabler Iface, exiting.";
- goto shutdown;
- }
-
- stylusMode = new StylusMode();
- if (stylusMode == nullptr) {
- LOG(ERROR) << "Can not create an instance of Touch HAL StylusMode Iface, exiting.";
- goto shutdown;
- }
-
- touchscreenGesture = new TouchscreenGesture();
- if (touchscreenGesture == nullptr) {
- LOG(ERROR) << "Can not create an instance of Touch HAL TouchscreenGesture Iface, exiting.";
- goto shutdown;
- }
-
- configureRpcThreadpool(1, true /*callerWillJoin*/);
-
- if (gloveMode->isSupported()) {
- status = gloveMode->registerAsService();
- if (status != OK) {
- LOG(ERROR) << "Could not register service for Touch HAL GloveMode Iface (" << status
- << ")";
- goto shutdown;
- }
- }
-
- if (keyDisabler->isSupported()) {
- status = keyDisabler->registerAsService();
- if (status != OK) {
- LOG(ERROR) << "Could not register service for Touch HAL KeyDisabler Iface (" << status
- << ")";
- goto shutdown;
- }
- }
-
- if (stylusMode->isSupported()) {
- status = stylusMode->registerAsService();
- if (status != OK) {
- LOG(ERROR) << "Could not register service for Touch HAL StylusMode Iface (" << status
- << ")";
- goto shutdown;
- }
- }
-
- if (touchscreenGesture->isSupported()) {
- status = touchscreenGesture->registerAsService();
- if (status != OK) {
- LOG(ERROR) << "Could not register service for Touch HAL TouchscreenGesture Iface ("
- << status << ")";
- goto shutdown;
- }
- }
-
- LOG(INFO) << "Touch HAL service is ready.";
- joinRpcThreadpool();
-// Should not pass this line
-
-shutdown:
- // In normal operation, we don't expect the thread pool to shutdown
- LOG(ERROR) << "Touch HAL service is shutting down.";
- return 1;
-}
+++ /dev/null
-service vendor.touch-hal-1-0-samsung /vendor/bin/hw/vendor.lineage.touch@1.0-service.samsung
- class hal
- user system
- group system