diff options
author | Georg Veichtlbauer <georg@vware.at> | 2020-12-14 14:27:08 +0100 |
---|---|---|
committer | Arian <arian.kulmer@web.de> | 2020-12-18 12:18:14 +0100 |
commit | 34156b064f84d4b9ba454039c6c1b5ffa651282e (patch) | |
tree | a775eaedb9bb5cadb709f16fc47f0c85b0cfe8e8 /touch | |
parent | 4a4b19cf6f36f2a2eab5444b1332d5537c43ed13 (diff) |
shinano-common: Import touch hal
* from z3c, used by all shinano devices
Squashed with:
commit 5a3f9869745be6c5ded604810df7145e47db8858
Author: Arian <arian.kulmer@web.de>
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 <arian.kulmer@web.de>
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 <arian.kulmer@web.de>
Date: Fri Dec 18 11:31:02 2020 +0100
shinano-common: touch: clang-format
Change-Id: I2e018de4544e4189336207902466e0e821673a5a
Change-Id: Idf3e21f5530e40931b5f730dcf6fb2db851e9fb8
Diffstat (limited to 'touch')
-rw-r--r-- | touch/Android.bp | 32 | ||||
-rw-r--r-- | touch/GloveMode.cpp | 64 | ||||
-rw-r--r-- | touch/GloveMode.h | 47 | ||||
-rw-r--r-- | touch/service.cpp | 61 | ||||
-rw-r--r-- | touch/vendor.lineage.touch@1.0-service.shinano.rc | 8 | ||||
-rw-r--r-- | touch/vendor.lineage.touch@1.0-service.shinano.xml | 11 |
6 files changed, 223 insertions, 0 deletions
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 <android-base/file.h> +#include <android-base/logging.h> +#include <android-base/strings.h> + +#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<bool> 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<bool> 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 <vendor/lineage/touch/1.0/IGloveMode.h> + +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<bool> isEnabled() override; + Return<bool> 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 <android-base/logging.h> +#include <hidl/HidlTransportSupport.h> + +#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<IGloveMode> 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 @@ +<manifest version="1.0" type="device"> + <hal format="hidl"> + <name>vendor.lineage.touch</name> + <transport>hwbinder</transport> + <version>1.0</version> + <interface> + <name>IGloveMode</name> + <instance>default</instance> + </interface> + </hal> +</manifest> |