From 765d3b93b5fbc08947280285a91ec89166e83ad0 Mon Sep 17 00:00:00 2001 From: SGCMarkus Date: Tue, 22 Feb 2022 21:51:43 +0100 Subject: [PATCH] pstar: add lineage touch hal: GloveMode --- device.mk | 4 ++ touch/.clang-format | 11 ++++ touch/Android.bp | 34 ++++++++++++ touch/GloveMode.cpp | 52 +++++++++++++++++++ touch/GloveMode.h | 40 ++++++++++++++ touch/service.cpp | 43 +++++++++++++++ .../vendor.lineage.touch@1.0-service.pstar.rc | 5 ++ ...vendor.lineage.touch@1.0-service.pstar.xml | 11 ++++ 8 files changed, 200 insertions(+) create mode 100644 touch/.clang-format create mode 100644 touch/Android.bp create mode 100644 touch/GloveMode.cpp create mode 100644 touch/GloveMode.h create mode 100644 touch/service.cpp create mode 100644 touch/vendor.lineage.touch@1.0-service.pstar.rc create mode 100644 touch/vendor.lineage.touch@1.0-service.pstar.xml diff --git a/device.mk b/device.mk index 0036e3e..684c8f7 100644 --- a/device.mk +++ b/device.mk @@ -58,6 +58,10 @@ $(foreach f,$(wildcard $(LOCAL_PATH)/rootdir/etc/init/*.rc),\ $(foreach f,$(wildcard $(LOCAL_PATH)/rootdir/bin/*.sh),\ $(eval PRODUCT_COPY_FILES += $(f):$(TARGET_COPY_OUT_VENDOR)/bin/$(notdir $f))) +# Lineage Touch +PRODUCT_PACKAGES += \ + vendor.lineage.touch@1.0-service.pstar + # Media PRODUCT_COPY_FILES += \ $(LOCAL_PATH)/media/media_profiles_kona.xml:$(TARGET_COPY_OUT_VENDOR)/etc/media_profiles_kona.xml \ diff --git a/touch/.clang-format b/touch/.clang-format new file mode 100644 index 0000000..ae4a451 --- /dev/null +++ b/touch/.clang-format @@ -0,0 +1,11 @@ +BasedOnStyle: Google +AccessModifierOffset: -2 +AllowShortFunctionsOnASingleLine: Inline +ColumnLimit: 100 +CommentPragmas: NOLINT:.* +DerivePointerAlignment: false +IndentWidth: 4 +PointerAlignment: Left +TabWidth: 4 +UseTab: Never +PenaltyExcessCharacter: 32 diff --git a/touch/Android.bp b/touch/Android.bp new file mode 100644 index 0000000..6ac7dc1 --- /dev/null +++ b/touch/Android.bp @@ -0,0 +1,34 @@ +// +// Copyright (C) 2020 The LineageOS Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +cc_binary { + name: "vendor.lineage.touch@1.0-service.pstar", + vintf_fragments: ["vendor.lineage.touch@1.0-service.pstar.xml"], + init_rc: ["vendor.lineage.touch@1.0-service.pstar.rc"], + defaults: ["hidl_defaults"], + relative_install_path: "hw", + proprietary: true, + srcs: [ + "GloveMode.cpp", + "service.cpp", + ], + shared_libs: [ + "libbase", + "libbinder", + "libhidlbase", + "libutils", + "vendor.lineage.touch@1.0", + ], +} diff --git a/touch/GloveMode.cpp b/touch/GloveMode.cpp new file mode 100644 index 0000000..fbdb062 --- /dev/null +++ b/touch/GloveMode.cpp @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2020 The LineageOS Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define LOG_TAG "GloveModeService" + +#include "GloveMode.h" + +#include + +namespace vendor { +namespace lineage { +namespace touch { +namespace V1_0 { +namespace implementation { + +const std::string kInterpolationPath = "/sys/class/touchscreen/primary/interpolation"; + +Return GloveMode::isEnabled() { + std::ifstream file(kInterpolationPath); + int enabled; + file >> enabled; + + if(enabled == 1) + return true; + + return false; +} + +Return GloveMode::setEnabled(bool enabled) { + std::ofstream file(kInterpolationPath); + file << (enabled ? "1" : "0"); + return !file.fail(); +} + +} // namespace implementation +} // namespace V1_0 +} // namespace touch +} // namespace lineage +} // namespace vendor diff --git a/touch/GloveMode.h b/touch/GloveMode.h new file mode 100644 index 0000000..20f08e3 --- /dev/null +++ b/touch/GloveMode.h @@ -0,0 +1,40 @@ +/* + * Copyright (C) 2020 The LineageOS Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#pragma once + +#include + +namespace vendor { +namespace lineage { +namespace touch { +namespace V1_0 { +namespace implementation { + +using ::android::hardware::Return; + +class GloveMode : public IGloveMode { + public: + // Methods from ::vendor::lineage::touch::V1_0::IGloveMode follow. + Return isEnabled() override; + Return setEnabled(bool enabled) override; +}; + +} // namespace implementation +} // namespace V1_0 +} // namespace touch +} // namespace lineage +} // namespace vendor diff --git a/touch/service.cpp b/touch/service.cpp new file mode 100644 index 0000000..359b0ff --- /dev/null +++ b/touch/service.cpp @@ -0,0 +1,43 @@ +/* + * Copyright (C) 2020 The LineageOS Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define LOG_TAG "lineage.touch@1.0-service.pstar" + +#include +#include + +#include "GloveMode.h" + +using ::vendor::lineage::touch::V1_0::IGloveMode; +using ::vendor::lineage::touch::V1_0::implementation::GloveMode; + +int main() { + android::sp gloveMode = new GloveMode(); + + android::hardware::configureRpcThreadpool(1, true /*callerWillJoin*/); + + if (gloveMode->registerAsService() != android::OK) { + LOG(ERROR) << "Cannot register touchscreen glove HAL service."; + return 1; + } + + LOG(INFO) << "Touchscreen HAL service ready."; + + android::hardware::joinRpcThreadpool(); + + LOG(ERROR) << "Touchscreen HAL service failed to join thread pool."; + return 1; +} diff --git a/touch/vendor.lineage.touch@1.0-service.pstar.rc b/touch/vendor.lineage.touch@1.0-service.pstar.rc new file mode 100644 index 0000000..815d85c --- /dev/null +++ b/touch/vendor.lineage.touch@1.0-service.pstar.rc @@ -0,0 +1,5 @@ +service vendor.touch-hal-1-0 /vendor/bin/hw/vendor.lineage.touch@1.0-service.pstar + interface vendor.lineage.touch@1.0::IGloveMode default + class hal + user system + group system diff --git a/touch/vendor.lineage.touch@1.0-service.pstar.xml b/touch/vendor.lineage.touch@1.0-service.pstar.xml new file mode 100644 index 0000000..4636329 --- /dev/null +++ b/touch/vendor.lineage.touch@1.0-service.pstar.xml @@ -0,0 +1,11 @@ + + + vendor.lineage.touch + hwbinder + 1.0 + + IGloveMode + default + + +