Skip to content

Commit

Permalink
sagit: Replace KeyDisabler class with Touch HAL
Browse files Browse the repository at this point in the history
Change-Id: I7b87ae0ad834ba02a78696afe393d9d4f8920fbd
  • Loading branch information
bgcngm authored and mikeNG committed Mar 22, 2019
1 parent c0718c6 commit 1a2dde9
Show file tree
Hide file tree
Showing 12 changed files with 255 additions and 65 deletions.
4 changes: 0 additions & 4 deletions BoardConfig.mk
Expand Up @@ -28,10 +28,6 @@ TARGET_KERNEL_CONFIG := sagit_defconfig
# Assert
TARGET_OTA_ASSERT_DEVICE := sagit

# Lineage Hardware
JAVA_SOURCE_OVERLAYS += \
org.lineageos.hardware|$(DEVICE_PATH)/lineagehw|**/*.java

# SELinux
BOARD_SEPOLICY_DIRS += $(DEVICE_PATH)/sepolicy

Expand Down
4 changes: 4 additions & 0 deletions device.mk
Expand Up @@ -46,6 +46,10 @@ PRODUCT_PACKAGES += \
android.hardware.ir@1.0-impl \
android.hardware.ir@1.0-service

# Lineage hardware
PRODUCT_PACKAGES += \
vendor.lineage.touch@1.0-service.sagit

# Properties
include $(LOCAL_PATH)/vendor_prop.mk

Expand Down
57 changes: 0 additions & 57 deletions lineagehw/src/org/lineageos/hardware/KeyDisabler.java

This file was deleted.

9 changes: 9 additions & 0 deletions manifest.xml
Expand Up @@ -8,4 +8,13 @@
<instance>default</instance>
</interface>
</hal>
<hal format="hidl">
<name>vendor.lineage.touch</name>
<transport>hwbinder</transport>
<version>1.0</version>
<interface>
<name>IKeyDisabler</name>
<instance>default</instance>
</interface>
</hal>
</manifest>
3 changes: 3 additions & 0 deletions sepolicy/file_contexts
@@ -1,2 +1,5 @@
# IR
/dev/peel_ir u:object_r:ir_device:s0

# Lineage hardware
/(vendor|system/vendor)/bin/hw/vendor\.lineage\.touch@1\.0-service\.sagit u:object_r:hal_lineage_touch_default_exec:s0
2 changes: 2 additions & 0 deletions sepolicy/hal_lineage_touch_default.te
@@ -0,0 +1,2 @@
allow hal_lineage_touch_default sysfs_sectouch:dir search;
allow hal_lineage_touch_default sysfs_sectouch:file rw_file_perms;
4 changes: 0 additions & 4 deletions sepolicy/system_server.te
@@ -1,5 +1 @@
allow system_server ir_device:chr_file rw_file_perms;

# Allow KeyDisabler to work
allow system_server sysfs_sectouch:dir search;
allow system_server sysfs_sectouch:file rw_file_perms;
32 changes: 32 additions & 0 deletions 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.sagit",
init_rc: ["vendor.lineage.touch@1.0-service.sagit.rc"],
defaults: ["hidl_defaults"],
relative_install_path: "hw",
vendor: true,
srcs: [
"KeyDisabler.cpp",
"service.cpp"
],
shared_libs: [
"libbase",
"libhidlbase",
"libhidltransport",
"libutils",
"vendor.lineage.touch@1.0",
],
}
93 changes: 93 additions & 0 deletions touch/KeyDisabler.cpp
@@ -0,0 +1,93 @@
/*
* 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 "KeyDisabler.h"

namespace vendor {
namespace lineage {
namespace touch {
namespace V1_0 {
namespace implementation {

constexpr const char kControlPath[] = "/proc/touchpanel/capacitive_keys_enable";
constexpr const char kFpcPath[] = "/sys/devices/soc/soc:fingerprint_fpc/enable_key_events";
constexpr const char kGoodixPath[] = "/sys/devices/soc/soc:fingerprint_goodix/enable_key_events";

KeyDisabler::KeyDisabler() {
mHasKeyDisabler = !access(kControlPath, F_OK)
&& !access(kFpcPath, F_OK) && !access(kGoodixPath, F_OK);
}

// Methods from ::vendor::lineage::touch::V1_0::IKeyDisabler follow.
Return<bool> KeyDisabler::isEnabled() {
std::string controlBuf;
std::string fpcBuf;
std::string goodixBuf;

if (!mHasKeyDisabler) return false;

if (!android::base::ReadFileToString(kControlPath, &controlBuf)) {
LOG(ERROR) << "Failed to read " << kControlPath;
return false;
}

if (!android::base::ReadFileToString(kFpcPath, &fpcBuf)) {
LOG(ERROR) << "Failed to read " << kFpcPath;
return false;
}

if (!android::base::ReadFileToString(kGoodixPath, &goodixBuf)) {
LOG(ERROR) << "Failed to read " << kGoodixPath;
return false;
}

return std::stoi(android::base::Trim(controlBuf)) == 0
|| std::stoi(android::base::Trim(fpcBuf)) == 0
|| std::stoi(android::base::Trim(goodixBuf)) == 0;
}

Return<bool> KeyDisabler::setEnabled(bool enabled) {
std::string buf = enabled ? "0" : "1";

if (!mHasKeyDisabler) return false;

if (!android::base::WriteStringToFile(buf, kControlPath)) {
LOG(ERROR) << "Failed to write " << kControlPath;
return false;
}

if (!android::base::WriteStringToFile(buf, kFpcPath)) {
LOG(ERROR) << "Failed to write " << kFpcPath;
return false;
}

if (!android::base::WriteStringToFile(buf, kGoodixPath)) {
LOG(ERROR) << "Failed to write " << kGoodixPath;
return false;
}

return true;
}

} // namespace implementation
} // namespace V1_0
} // namespace touch
} // namespace lineage
} // namespace vendor
46 changes: 46 additions & 0 deletions touch/KeyDisabler.h
@@ -0,0 +1,46 @@
/*
* 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_KEYDISABLER_H
#define VENDOR_LINEAGE_TOUCH_V1_0_KEYDISABLER_H

#include <vendor/lineage/touch/1.0/IKeyDisabler.h>

namespace vendor {
namespace lineage {
namespace touch {
namespace V1_0 {
namespace implementation {

using ::android::hardware::Return;

class KeyDisabler : public IKeyDisabler {
public:
KeyDisabler();
// Methods from ::vendor::lineage::touch::V1_0::IKeyDisabler follow.
Return<bool> isEnabled() override;
Return<bool> setEnabled(bool enabled) override;
private:
bool mHasKeyDisabler;
};

} // namespace implementation
} // namespace V1_0
} // namespace touch
} // namespace lineage
} // namespace vendor

#endif // VENDOR_LINEAGE_TOUCH_V1_0_KEYDISABLER_H
62 changes: 62 additions & 0 deletions touch/service.cpp
@@ -0,0 +1,62 @@
/*
* 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.sagit"

#include <android-base/logging.h>
#include <hidl/HidlTransportSupport.h>

#include "KeyDisabler.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::IKeyDisabler;
using ::vendor::lineage::touch::V1_0::implementation::KeyDisabler;

int main() {
sp<IKeyDisabler> keyDisabler;
status_t status;

LOG(INFO) << "Touch HAL service is starting.";

keyDisabler = new KeyDisabler();
if (keyDisabler == nullptr) {
LOG(ERROR) << "Can not create an instance of Touch HAL KeyDisabler Iface, exiting.";
goto shutdown;
}

configureRpcThreadpool(1, true /*callerWillJoin*/);

status = keyDisabler->registerAsService();
if (status != OK) {
LOG(ERROR) << "Could not register service for Touch HAL KeyDisabler 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;
}
4 changes: 4 additions & 0 deletions touch/vendor.lineage.touch@1.0-service.sagit.rc
@@ -0,0 +1,4 @@
service vendor.touch-hal-1-0 /vendor/bin/hw/vendor.lineage.touch@1.0-service.sagit
class hal
user system
group system

0 comments on commit 1a2dde9

Please sign in to comment.