diff --git a/device.mk b/device.mk index d165a69..e533542 100644 --- a/device.mk +++ b/device.mk @@ -75,6 +75,10 @@ PRODUCT_COPY_FILES += \ $(LOCAL_PATH)/configs/keylayout/fts_ts.kl:$(TARGET_COPY_OUT_VENDOR)/usr/keylayout/fts_ts.kl \ $(LOCAL_PATH)/configs/keylayout/goodix_ts.kl:$(TARGET_COPY_OUT_VENDOR)/usr/keylayout/goodix_ts.kl +# Lineage Touch +PRODUCT_PACKAGES += \ + vendor.lineage.touch@1.0-service.bangkk + # NFC PRODUCT_PACKAGES += \ android.hardware.nfc@1.2.vendor \ 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..3297363 --- /dev/null +++ b/touch/Android.bp @@ -0,0 +1,24 @@ +// +// Copyright (C) 2020-2023 The LineageOS Project +// +// SPDX-License-Identifier: Apache-2.0 + +cc_binary { + name: "vendor.lineage.touch@1.0-service.bangkk", + vintf_fragments: ["vendor.lineage.touch@1.0-service.bangkk.xml"], + init_rc: ["vendor.lineage.touch@1.0-service.bangkk.rc"], + defaults: ["hidl_defaults"], + relative_install_path: "hw", + proprietary: true, + srcs: [ + "HighTouchPollingRate.cpp", + "service.cpp", + ], + shared_libs: [ + "libbase", + "libbinder", + "libhidlbase", + "libutils", + "vendor.lineage.touch@1.0", + ], +} diff --git a/touch/HighTouchPollingRate.cpp b/touch/HighTouchPollingRate.cpp new file mode 100644 index 0000000..bfa9152 --- /dev/null +++ b/touch/HighTouchPollingRate.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 "HighTouchPollingRateService" + +#include "HighTouchPollingRate.h" + +#include + +namespace vendor { +namespace lineage { +namespace touch { +namespace V1_0 { +namespace implementation { + +const std::string kInterpolationPath = "/sys/class/touchscreen/primary/interpolation"; + +Return HighTouchPollingRate::isEnabled() { + std::ifstream file(kInterpolationPath); + int enabled; + file >> enabled; + + if(enabled == 1) + return true; + + return false; +} + +Return HighTouchPollingRate::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/HighTouchPollingRate.h b/touch/HighTouchPollingRate.h new file mode 100644 index 0000000..548654a --- /dev/null +++ b/touch/HighTouchPollingRate.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 HighTouchPollingRate : public IHighTouchPollingRate { + public: + // Methods from ::vendor::lineage::touch::V1_0::IHighTouchPollingRate 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..f2c95ee --- /dev/null +++ b/touch/service.cpp @@ -0,0 +1,33 @@ +/* + * Copyright (C) 2020-2023 The LineageOS Project + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#define LOG_TAG "lineage.touch@1.0-service.bangkk" + +#include +#include + +#include "HighTouchPollingRate.h" + +using ::vendor::lineage::touch::V1_0::IHighTouchPollingRate; +using ::vendor::lineage::touch::V1_0::implementation::HighTouchPollingRate; + +int main() { + android::sp highTouchPollingRate = new HighTouchPollingRate(); + + android::hardware::configureRpcThreadpool(1, true /*callerWillJoin*/); + + if (highTouchPollingRate->registerAsService() != android::OK) { + LOG(ERROR) << "Cannot register touchscreen high polling rate 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.bangkk.rc b/touch/vendor.lineage.touch@1.0-service.bangkk.rc new file mode 100644 index 0000000..35fa9fd --- /dev/null +++ b/touch/vendor.lineage.touch@1.0-service.bangkk.rc @@ -0,0 +1,5 @@ +service vendor.touch-hal-1-0 /vendor/bin/hw/vendor.lineage.touch@1.0-service.bangkk + interface vendor.lineage.touch@1.0::IHighTouchPollingRate default + class hal + user system + group system diff --git a/touch/vendor.lineage.touch@1.0-service.bangkk.xml b/touch/vendor.lineage.touch@1.0-service.bangkk.xml new file mode 100644 index 0000000..0a42036 --- /dev/null +++ b/touch/vendor.lineage.touch@1.0-service.bangkk.xml @@ -0,0 +1,11 @@ + + + vendor.lineage.touch + hwbinder + 1.0 + + IHighTouchPollingRate + default + + +