From 34156b064f84d4b9ba454039c6c1b5ffa651282e Mon Sep 17 00:00:00 2001 From: Georg Veichtlbauer Date: Mon, 14 Dec 2020 14:27:08 +0100 Subject: shinano-common: Import touch hal * from z3c, used by all shinano devices Squashed with: commit 5a3f9869745be6c5ded604810df7145e47db8858 Author: Arian Date: Fri Dec 18 11:22:16 2020 +0100 shinano-common: touch: Fix formatting of Android.bp make blueprint_tools && bpfix device/sony/shinano-common/touch/Android.bp Change-Id: I33a0b2e03bde6278c6dec52f384e3f2f277019e0 commit 80d2c076a48d0f128d915cdf3c65a994f9914a90 Author: Arian Date: Fri Dec 18 11:24:14 2020 +0100 shinano-common: touch: Move the manifest entry to vintf_fragments Change-Id: I590da80b5c1e7d6729d67b78e55164d33fa7d95b commit d76bab75f874ec15ec42dfaef036ea0476e6f3ec Author: Arian Date: Fri Dec 18 11:31:02 2020 +0100 shinano-common: touch: clang-format Change-Id: I2e018de4544e4189336207902466e0e821673a5a Change-Id: Idf3e21f5530e40931b5f730dcf6fb2db851e9fb8 --- sepolicy/file_contexts | 3 + sepolicy/hal_lineage_touch_default.te | 2 + shinano.mk | 4 ++ touch/Android.bp | 32 +++++++++++ touch/GloveMode.cpp | 64 ++++++++++++++++++++++ touch/GloveMode.h | 47 ++++++++++++++++ touch/service.cpp | 61 +++++++++++++++++++++ touch/vendor.lineage.touch@1.0-service.shinano.rc | 8 +++ touch/vendor.lineage.touch@1.0-service.shinano.xml | 11 ++++ 9 files changed, 232 insertions(+) create mode 100644 sepolicy/hal_lineage_touch_default.te 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.shinano.rc create mode 100644 touch/vendor.lineage.touch@1.0-service.shinano.xml diff --git a/sepolicy/file_contexts b/sepolicy/file_contexts index 627211c..f628d8d 100644 --- a/sepolicy/file_contexts +++ b/sepolicy/file_contexts @@ -12,6 +12,9 @@ /dev/ttyHS0 u:object_r:hci_attach_dev:s0 /dev/brcm_bt_drv u:object_r:hci_attach_dev:s0 +# Lineage hardware +/(vendor|system/vendor)/bin/hw/vendor\.lineage\.touch@1\.0-service\.shinano u:object_r:hal_lineage_touch_default_exec:s0 + # Modem /system/vendor/bin/mlog_qmi_service u:object_r:mlog_qmi_exec:s0 diff --git a/sepolicy/hal_lineage_touch_default.te b/sepolicy/hal_lineage_touch_default.te new file mode 100644 index 0000000..d76d54b --- /dev/null +++ b/sepolicy/hal_lineage_touch_default.te @@ -0,0 +1,2 @@ +allow hal_lineage_touch_default sysfs_touch:dir search; +allow hal_lineage_touch_default sysfs_touch:file rw_file_perms; diff --git a/shinano.mk b/shinano.mk index 7fb7b08..53d9cbe 100644 --- a/shinano.mk +++ b/shinano.mk @@ -78,6 +78,10 @@ PRODUCT_COPY_FILES += \ PRODUCT_PACKAGES += \ keystore.msm8974 +# Lineage Hardware +PRODUCT_PACKAGES += \ + vendor.lineage.touch@1.0-service.shinano + # MAC address - BT and Wi-Fi PRODUCT_PACKAGES += \ macaddrsetup diff --git a/touch/Android.bp b/touch/Android.bp new file mode 100644 index 0000000..f902fe3 --- /dev/null +++ b/touch/Android.bp @@ -0,0 +1,32 @@ +// 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.shinano", + defaults: ["hidl_defaults"], + vintf_fragments: ["vendor.lineage.touch@1.0-service.shinano.xml"], + init_rc: ["vendor.lineage.touch@1.0-service.shinano.rc"], + relative_install_path: "hw", + vendor: true, + srcs: [ + "GloveMode.cpp", + "service.cpp", + ], + shared_libs: [ + "libbase", + "libhidlbase", + "libutils", + "vendor.lineage.touch@1.0", + ], +} diff --git a/touch/GloveMode.cpp b/touch/GloveMode.cpp new file mode 100644 index 0000000..39cee8d --- /dev/null +++ b/touch/GloveMode.cpp @@ -0,0 +1,64 @@ +/* + * 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 +#include +#include + +#include "GloveMode.h" + +namespace vendor { +namespace lineage { +namespace touch { +namespace V1_0 { +namespace implementation { + +constexpr const char kGlovePath[] = "/sys/devices/virtual/input/clearpad/glove"; + +GloveMode::GloveMode() { + mHasGloveMode = !access(kGlovePath, F_OK); +} + +// Methods from ::vendor::lineage::touch::V1_0::IGloveMode follow. +Return GloveMode::isEnabled() { + std::string buf; + + if (!mHasGloveMode) return false; + + if (!android::base::ReadFileToString(kGlovePath, &buf)) { + LOG(ERROR) << "Failed to read " << kGlovePath; + return false; + } + + return std::stoi(android::base::Trim(buf)) == 0; +} + +Return GloveMode::setEnabled(bool enabled) { + if (!mHasGloveMode) return false; + + if (!android::base::WriteStringToFile((enabled ? "1" : "0"), kGlovePath)) { + LOG(ERROR) << "Failed to write " << kGlovePath; + return false; + } + + return true; +} + +} // 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..ccf4ad0 --- /dev/null +++ b/touch/GloveMode.h @@ -0,0 +1,47 @@ +/* + * 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 + +namespace vendor { +namespace lineage { +namespace touch { +namespace V1_0 { +namespace implementation { + +using ::android::hardware::Return; + +class GloveMode : public IGloveMode { + public: + GloveMode(); + // Methods from ::vendor::lineage::touch::V1_0::IGloveMode follow. + Return isEnabled() override; + Return setEnabled(bool enabled) override; + + private: + bool mHasGloveMode; +}; + +} // namespace implementation +} // namespace V1_0 +} // namespace touch +} // namespace lineage +} // namespace vendor + +#endif // VENDOR_LINEAGE_TOUCH_V1_0_GLOVEMODE_H diff --git a/touch/service.cpp b/touch/service.cpp new file mode 100644 index 0000000..29c94ff --- /dev/null +++ b/touch/service.cpp @@ -0,0 +1,61 @@ +/* + * 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.shinano" + +#include +#include + +#include "GloveMode.h" + +using android::OK; +using android::sp; +using android::status_t; +using android::hardware::configureRpcThreadpool; +using android::hardware::joinRpcThreadpool; + +using ::vendor::lineage::touch::V1_0::IGloveMode; +using ::vendor::lineage::touch::V1_0::implementation::GloveMode; + +int main() { + sp gloveMode; + 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; + } + + configureRpcThreadpool(1, true /*callerWillJoin*/); + + status = gloveMode->registerAsService(); + if (status != OK) { + LOG(ERROR) << "Could not register service for Touch HAL GloveMode 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; +} diff --git a/touch/vendor.lineage.touch@1.0-service.shinano.rc b/touch/vendor.lineage.touch@1.0-service.shinano.rc new file mode 100644 index 0000000..682b044 --- /dev/null +++ b/touch/vendor.lineage.touch@1.0-service.shinano.rc @@ -0,0 +1,8 @@ +on boot + chown system system /sys/devices/virtual/input/clearpad/glove + chmod 0660 /sys/devices/virtual/input/clearpad/glove + +service vendor.touch-hal-1-0 /vendor/bin/hw/vendor.lineage.touch@1.0-service.shinano + class hal + user system + group system diff --git a/touch/vendor.lineage.touch@1.0-service.shinano.xml b/touch/vendor.lineage.touch@1.0-service.shinano.xml new file mode 100644 index 0000000..0b0f2a8 --- /dev/null +++ b/touch/vendor.lineage.touch@1.0-service.shinano.xml @@ -0,0 +1,11 @@ + + + vendor.lineage.touch + hwbinder + 1.0 + + IGloveMode + default + + + -- cgit v1.2.3