summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sepolicy/file_contexts3
-rw-r--r--sepolicy/hal_lineage_touch_default.te2
-rw-r--r--shinano.mk4
-rw-r--r--touch/Android.bp32
-rw-r--r--touch/GloveMode.cpp64
-rw-r--r--touch/GloveMode.h47
-rw-r--r--touch/service.cpp61
-rw-r--r--touch/vendor.lineage.touch@1.0-service.shinano.rc8
-rw-r--r--touch/vendor.lineage.touch@1.0-service.shinano.xml11
9 files changed, 232 insertions, 0 deletions
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 <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>