sdm845-common: Replace lineagehw implementation by HIDL services
Move DisplayModeControl and SunlightEnhancement into a livedisplay service, and TouchscreenGestures into a touch one. Change-Id: I5f46671633a13ddc6733a47f4ea5a6515d6d6c98
This commit is contained in:
parent
eaa9bbce92
commit
e3ee15e8af
29 changed files with 702 additions and 356 deletions
|
@ -1,4 +1,6 @@
|
|||
subdirs = [
|
||||
"lights",
|
||||
"livedisplay",
|
||||
"touch",
|
||||
"tri-state-key"
|
||||
]
|
||||
|
|
|
@ -83,9 +83,8 @@ TARGET_USES_HWC2 := true
|
|||
# DRM
|
||||
TARGET_ENABLE_MEDIADRM_64 := true
|
||||
|
||||
# Lineage Hardware
|
||||
JAVA_SOURCE_OVERLAYS := \
|
||||
org.lineageos.hardware|$(COMMON_PATH)/lineagehw|**/*.java
|
||||
# HIDL
|
||||
DEVICE_FRAMEWORK_MANIFEST_FILE := $(COMMON_PATH)/framework_manifest.xml
|
||||
|
||||
# Partitions
|
||||
BOARD_BOOTIMAGE_PARTITION_SIZE := 67108864
|
||||
|
|
|
@ -88,6 +88,10 @@ PRODUCT_COPY_FILES += \
|
|||
PRODUCT_PACKAGES += \
|
||||
android.hardware.light@2.0-service.oneplus_sdm845
|
||||
|
||||
# LiveDisplay
|
||||
PRODUCT_PACKAGES += \
|
||||
lineage.livedisplay@2.0-service.oneplus_sdm845
|
||||
|
||||
# Media
|
||||
PRODUCT_COPY_FILES += \
|
||||
$(LOCAL_PATH)/configs/media_profiles_vendor.xml:system/etc/media_profiles_vendor.xml
|
||||
|
@ -113,6 +117,10 @@ PRODUCT_PACKAGES += \
|
|||
PRODUCT_BOOT_JARS += \
|
||||
telephony-ext
|
||||
|
||||
# Touch
|
||||
PRODUCT_PACKAGES += \
|
||||
lineage.touch@1.0-service.oneplus_sdm845
|
||||
|
||||
# tri-state-key
|
||||
PRODUCT_PACKAGES += \
|
||||
KeyHandler \
|
||||
|
|
24
framework_manifest.xml
Normal file
24
framework_manifest.xml
Normal file
|
@ -0,0 +1,24 @@
|
|||
<manifest version="1.0" type="framework">
|
||||
<hal format="hidl">
|
||||
<name>vendor.lineage.livedisplay</name>
|
||||
<transport>hwbinder</transport>
|
||||
<version>2.0</version>
|
||||
<interface>
|
||||
<name>IDisplayModes</name>
|
||||
<instance>default</instance>
|
||||
</interface>
|
||||
<interface>
|
||||
<name>ISunlightEnhancement</name>
|
||||
<instance>default</instance>
|
||||
</interface>
|
||||
</hal>
|
||||
<hal format="hidl">
|
||||
<name>vendor.lineage.touch</name>
|
||||
<transport>hwbinder</transport>
|
||||
<version>1.0</version>
|
||||
<interface>
|
||||
<name>ITouchscreenGesture</name>
|
||||
<instance>default</instance>
|
||||
</interface>
|
||||
</hal>
|
||||
</manifest>
|
|
@ -1,110 +0,0 @@
|
|||
/*
|
||||
* Copyright (C) 2015 The CyanogenMod Project
|
||||
* Copyright (C) 2018 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.
|
||||
*/
|
||||
|
||||
package org.lineageos.hardware;
|
||||
|
||||
import android.util.Log;
|
||||
|
||||
import lineageos.hardware.DisplayMode;
|
||||
import org.lineageos.internal.util.FileUtils;
|
||||
|
||||
import java.util.HashMap;
|
||||
|
||||
/*
|
||||
* Display Modes API
|
||||
*
|
||||
* A device may implement a list of preset display modes for different
|
||||
* viewing intents, such as movies, photos, or extra vibrance. These
|
||||
* modes may have multiple components such as gamma correction, white
|
||||
* point adjustment, etc, but are activated by a single control point.
|
||||
*
|
||||
* This API provides support for enumerating and selecting the
|
||||
* modes supported by the hardware.
|
||||
*/
|
||||
|
||||
public class DisplayModeControl {
|
||||
private static final String MODE_PATH =
|
||||
"/sys/devices/platform/soc/ae00000.qcom,mdss_mdp/main_display/display_mode";
|
||||
private static final String DEFAULT_PATH = "/data/system/default_display_mode";
|
||||
|
||||
private static final HashMap<String, DisplayMode> MODE_MAP = new HashMap<>();
|
||||
static {
|
||||
MODE_MAP.put("default", new DisplayMode(0, "Standard"));
|
||||
MODE_MAP.put("srgb", new DisplayMode(1, "sRGB"));
|
||||
MODE_MAP.put("dci-p3", new DisplayMode(2, "DCI P3"));
|
||||
MODE_MAP.put("adaption", new DisplayMode(3, "Adaptive"));
|
||||
|
||||
String storedDefaultMode = FileUtils.readOneLine(DEFAULT_PATH);
|
||||
if (storedDefaultMode != null) {
|
||||
FileUtils.writeLine(MODE_PATH, storedDefaultMode);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* All HAF classes should export this boolean.
|
||||
* Real implementations must, of course, return true
|
||||
*/
|
||||
public static boolean isSupported() {
|
||||
return FileUtils.isFileWritable(MODE_PATH);
|
||||
}
|
||||
|
||||
/*
|
||||
* Get the list of available modes. A mode has an integer
|
||||
* identifier and a string name.
|
||||
*
|
||||
* It is the responsibility of the upper layers to
|
||||
* map the name to a human-readable format or perform translation.
|
||||
*/
|
||||
public static DisplayMode[] getAvailableModes() {
|
||||
return MODE_MAP.values().toArray(new DisplayMode[MODE_MAP.size()]);
|
||||
}
|
||||
|
||||
/*
|
||||
* Get the name of the currently selected mode. This can return
|
||||
* null if no mode is selected.
|
||||
*/
|
||||
public static DisplayMode getCurrentMode() {
|
||||
return MODE_MAP.get(FileUtils.readOneLine(MODE_PATH));
|
||||
}
|
||||
|
||||
/*
|
||||
* Selects a mode from the list of available modes by it's
|
||||
* string identifier. Returns true on success, false for
|
||||
* failure. It is up to the implementation to determine
|
||||
* if this mode is valid.
|
||||
*/
|
||||
public static boolean setMode(DisplayMode mode, boolean makeDefault) {
|
||||
for (HashMap.Entry<String, DisplayMode> entry : MODE_MAP.entrySet()) {
|
||||
if (entry.getValue().id == mode.id) {
|
||||
if (FileUtils.writeLine(MODE_PATH, entry.getKey()) && makeDefault) {
|
||||
FileUtils.writeLine(DEFAULT_PATH, entry.getKey());
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/*
|
||||
* Gets the preferred default mode for this device by it's
|
||||
* string identifier. Can return null if there is no default.
|
||||
*/
|
||||
public static DisplayMode getDefaultMode() {
|
||||
String storedDefaultMode = FileUtils.readOneLine(DEFAULT_PATH);
|
||||
return MODE_MAP.get(storedDefaultMode != null ? storedDefaultMode : "default");
|
||||
}
|
||||
}
|
|
@ -1,86 +0,0 @@
|
|||
/*
|
||||
* Copyright (C) 2014 The CyanogenMod Project
|
||||
* Copyright (C) 2018 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.
|
||||
*/
|
||||
|
||||
package org.lineageos.hardware;
|
||||
|
||||
import android.util.Log;
|
||||
|
||||
import org.lineageos.internal.util.FileUtils;
|
||||
|
||||
public class SunlightEnhancement {
|
||||
private static final String TAG = "SunlightEnhancement";
|
||||
|
||||
private static final String HBM_PATH =
|
||||
"/sys/devices/platform/soc/ae00000.qcom,mdss_mdp/main_display/hbm";
|
||||
|
||||
/**
|
||||
* Whether device supports sunlight enhancement
|
||||
*
|
||||
* @return boolean Supported devices must return always true
|
||||
*/
|
||||
public static boolean isSupported() {
|
||||
return FileUtils.isFileWritable(HBM_PATH);
|
||||
}
|
||||
|
||||
/**
|
||||
* This method return the current activation status of sunlight enhancement
|
||||
*
|
||||
* @return boolean Must be false when sunlight enhancement is not supported or not activated,
|
||||
* or the operation failed while reading the status; true in any other case.
|
||||
*/
|
||||
public static boolean isEnabled() {
|
||||
try {
|
||||
return Integer.parseInt(FileUtils.readOneLine(HBM_PATH)) > 0;
|
||||
} catch (Exception e) {
|
||||
Log.e(TAG, e.getMessage(), e);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method allows to setup sunlight enhancement
|
||||
*
|
||||
* @param status The new sunlight enhancement status
|
||||
* @return boolean Must be false if sunlight enhancement is not supported or the operation
|
||||
* failed; true in any other case.
|
||||
*/
|
||||
public static boolean setEnabled(boolean status) {
|
||||
return FileUtils.writeLine(HBM_PATH, status ? "3" : "0");
|
||||
}
|
||||
|
||||
/**
|
||||
* Whether adaptive backlight (CABL / CABC) is required to be enabled
|
||||
*
|
||||
* @return boolean False if adaptive backlight is not a dependency
|
||||
*/
|
||||
public static boolean isAdaptiveBacklightRequired() {
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set this to true if the implementation is self-managed and does
|
||||
* it's own ambient sensing. In this case, setEnabled is assumed
|
||||
* to toggle the feature on or off, but not activate it. If set
|
||||
* to false, LiveDisplay will call setEnabled when the ambient lux
|
||||
* threshold is crossed.
|
||||
*
|
||||
* @return true if this enhancement is self-managed
|
||||
*/
|
||||
public static boolean isSelfManaged() {
|
||||
return false;
|
||||
}
|
||||
}
|
|
@ -1,119 +0,0 @@
|
|||
/*
|
||||
* Copyright (C) 2016 The CyanogenMod Project
|
||||
* (C) 2017 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.
|
||||
*/
|
||||
|
||||
package org.lineageos.hardware;
|
||||
|
||||
import android.util.Log;
|
||||
|
||||
import lineageos.hardware.TouchscreenGesture;
|
||||
|
||||
import org.lineageos.internal.util.FileUtils;
|
||||
|
||||
/**
|
||||
* Touchscreen gestures API
|
||||
*
|
||||
* A device may implement several touchscreen gestures for use while
|
||||
* the display is turned off, such as drawing alphabets and shapes.
|
||||
* These gestures can be interpreted by userspace to activate certain
|
||||
* actions and launch certain apps, such as to skip music tracks,
|
||||
* to turn on the flashlight, or to launch the camera app.
|
||||
*
|
||||
* This *should always* be supported by the hardware directly.
|
||||
* A lot of recent touch controllers have a firmware option for this.
|
||||
*
|
||||
* This API provides support for enumerating the gestures
|
||||
* supported by the touchscreen.
|
||||
*/
|
||||
public class TouchscreenGestures {
|
||||
|
||||
private static final String LOG_TAG = TouchscreenGestures.class.getSimpleName();
|
||||
|
||||
private static final String[] GESTURE_PATHS = {
|
||||
"/proc/touchpanel/double_swipe_enable",
|
||||
"/proc/touchpanel/up_arrow_enable",
|
||||
"/proc/touchpanel/right_arrow_enable",
|
||||
"/proc/touchpanel/down_arrow_enable",
|
||||
"/proc/touchpanel/left_arrow_enable",
|
||||
"/proc/touchpanel/up_swipe_enable",
|
||||
"/proc/touchpanel/right_swipe_enable",
|
||||
"/proc/touchpanel/down_swipe_enable",
|
||||
"/proc/touchpanel/left_swipe_enable",
|
||||
"/proc/touchpanel/letter_m_enable",
|
||||
"/proc/touchpanel/letter_o_enable",
|
||||
"/proc/touchpanel/letter_s_enable",
|
||||
"/proc/touchpanel/letter_w_enable",
|
||||
};
|
||||
|
||||
// Id, name, keycode
|
||||
private static final TouchscreenGesture[] TOUCHSCREEN_GESTURES = {
|
||||
new TouchscreenGesture(0, "Two fingers down swipe", 251),
|
||||
new TouchscreenGesture(1, "Up arrow", 252),
|
||||
new TouchscreenGesture(2, "Right arrow", 254),
|
||||
new TouchscreenGesture(3, "Down arrow", 255),
|
||||
new TouchscreenGesture(4, "Left arrow", 253),
|
||||
new TouchscreenGesture(5, "One finger up swipe", 66),
|
||||
new TouchscreenGesture(6, "One finger right swipe", 65),
|
||||
new TouchscreenGesture(7, "One finger down swipe", 64),
|
||||
new TouchscreenGesture(8, "One finger left swipe", 63),
|
||||
new TouchscreenGesture(9, "Letter M", 247),
|
||||
new TouchscreenGesture(10, "Letter O", 250),
|
||||
new TouchscreenGesture(11, "Letter S", 248),
|
||||
new TouchscreenGesture(12, "Letter W", 246),
|
||||
};
|
||||
|
||||
/**
|
||||
* Whether device supports touchscreen gestures
|
||||
*
|
||||
* @return boolean Supported devices must return always true
|
||||
*/
|
||||
public static boolean isSupported() {
|
||||
boolean supported = false;
|
||||
for (String path : GESTURE_PATHS) {
|
||||
if (!FileUtils.isFileWritable(path) ||
|
||||
!FileUtils.isFileReadable(path)) {
|
||||
Log.e(LOG_TAG, path + " is non-writable or non-readable!");
|
||||
continue;
|
||||
}
|
||||
supported = true;
|
||||
}
|
||||
return supported;
|
||||
}
|
||||
|
||||
/*
|
||||
* Get the list of available gestures. A mode has an integer
|
||||
* identifier and a string name.
|
||||
*
|
||||
* It is the responsibility of the upper layers to
|
||||
* map the name to a human-readable format or perform translation.
|
||||
*/
|
||||
public static TouchscreenGesture[] getAvailableGestures() {
|
||||
return TOUCHSCREEN_GESTURES;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method allows to set the activation status of a gesture
|
||||
*
|
||||
* @param gesture The gesture to be activated
|
||||
* state The new activation status of the gesture
|
||||
* @return boolean Must be false if gesture is not supported
|
||||
* or the operation failed; true in any other case.
|
||||
*/
|
||||
public static boolean setGestureEnabled(
|
||||
final TouchscreenGesture gesture, final boolean state) {
|
||||
return FileUtils.writeLine(GESTURE_PATHS[gesture.id], state ? "1" : "0");
|
||||
}
|
||||
}
|
11
livedisplay/.clang-format
Normal file
11
livedisplay/.clang-format
Normal file
|
@ -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
|
34
livedisplay/Android.bp
Normal file
34
livedisplay/Android.bp
Normal file
|
@ -0,0 +1,34 @@
|
|||
//
|
||||
// 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: "lineage.livedisplay@2.0-service.oneplus_sdm845",
|
||||
init_rc: ["lineage.livedisplay@2.0-service.oneplus_sdm845.rc"],
|
||||
defaults: ["hidl_defaults"],
|
||||
relative_install_path: "hw",
|
||||
srcs: [
|
||||
"DisplayModes.cpp",
|
||||
"SunlightEnhancement.cpp",
|
||||
"service.cpp",
|
||||
],
|
||||
shared_libs: [
|
||||
"libbase",
|
||||
"libbinder",
|
||||
"libhidlbase",
|
||||
"libhidltransport",
|
||||
"libutils",
|
||||
"vendor.lineage.livedisplay@2.0",
|
||||
],
|
||||
}
|
117
livedisplay/DisplayModes.cpp
Normal file
117
livedisplay/DisplayModes.cpp
Normal file
|
@ -0,0 +1,117 @@
|
|||
/*
|
||||
* 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 "DisplayModesService"
|
||||
|
||||
#include "DisplayModes.h"
|
||||
#include <android-base/logging.h>
|
||||
#include <fstream>
|
||||
|
||||
namespace vendor {
|
||||
namespace lineage {
|
||||
namespace livedisplay {
|
||||
namespace V2_0 {
|
||||
namespace implementation {
|
||||
|
||||
static constexpr const char* kModePath =
|
||||
"/sys/devices/platform/soc/ae00000.qcom,mdss_mdp/main_display/display_mode";
|
||||
static constexpr const char* kDefaultPath = "/data/system/default_display_mode";
|
||||
|
||||
const std::map<int32_t, DisplayModes::ModeInfo> DisplayModes::kModeMap = {
|
||||
{0, {"Standard", "default"}},
|
||||
{1, {"sRGB", "srgb"}},
|
||||
{2, {"DCI P3", "dci-p3"}},
|
||||
{3, {"Adaptive", "adaption"}},
|
||||
};
|
||||
|
||||
DisplayModes::DisplayModes() : mDefaultModeId(0) {
|
||||
std::ifstream defaultFile(kDefaultPath);
|
||||
std::string value;
|
||||
|
||||
defaultFile >> value;
|
||||
LOG(DEBUG) << "Default file read result " << value << " fail " << defaultFile.fail();
|
||||
if (defaultFile.fail()) {
|
||||
return;
|
||||
}
|
||||
|
||||
for (const auto& entry : kModeMap) {
|
||||
if (value == entry.second.value) {
|
||||
mDefaultModeId = entry.first;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Methods from ::vendor::lineage::livedisplay::V2_0::IDisplayModes follow.
|
||||
Return<void> DisplayModes::getDisplayModes(getDisplayModes_cb resultCb) {
|
||||
std::vector<DisplayMode> modes;
|
||||
for (const auto& entry : kModeMap) {
|
||||
modes.push_back({entry.first, entry.second.name});
|
||||
}
|
||||
resultCb(modes);
|
||||
return Void();
|
||||
}
|
||||
|
||||
Return<void> DisplayModes::getCurrentDisplayMode(getCurrentDisplayMode_cb resultCb) {
|
||||
int32_t currentModeId = mDefaultModeId;
|
||||
std::ifstream modeFile(kModePath);
|
||||
std::string value;
|
||||
|
||||
modeFile >> value;
|
||||
if (!modeFile.fail()) {
|
||||
for (const auto& entry : kModeMap) {
|
||||
if (value == entry.second.value) {
|
||||
currentModeId = entry.first;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
resultCb({currentModeId, kModeMap.at(currentModeId).name});
|
||||
return Void();
|
||||
}
|
||||
|
||||
Return<void> DisplayModes::getDefaultDisplayMode(getDefaultDisplayMode_cb resultCb) {
|
||||
resultCb({mDefaultModeId, kModeMap.at(mDefaultModeId).name});
|
||||
return Void();
|
||||
}
|
||||
|
||||
Return<bool> DisplayModes::setDisplayMode(int32_t modeID, bool makeDefault) {
|
||||
const auto iter = kModeMap.find(modeID);
|
||||
if (iter == kModeMap.end()) {
|
||||
return false;
|
||||
}
|
||||
std::ofstream modeFile(kModePath);
|
||||
modeFile << iter->second.value;
|
||||
if (modeFile.fail()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (makeDefault) {
|
||||
std::ofstream defaultFile(kDefaultPath);
|
||||
defaultFile << iter->second.value;
|
||||
if (defaultFile.fail()) {
|
||||
return false;
|
||||
}
|
||||
mDefaultModeId = iter->first;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
} // namespace implementation
|
||||
} // namespace V2_0
|
||||
} // namespace livedisplay
|
||||
} // namespace lineage
|
||||
} // namespace vendor
|
60
livedisplay/DisplayModes.h
Normal file
60
livedisplay/DisplayModes.h
Normal file
|
@ -0,0 +1,60 @@
|
|||
/*
|
||||
* 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_LIVEDISPLAY_V2_0_DISPLAYMODES_H
|
||||
#define VENDOR_LINEAGE_LIVEDISPLAY_V2_0_DISPLAYMODES_H
|
||||
|
||||
#include <hidl/MQDescriptor.h>
|
||||
#include <hidl/Status.h>
|
||||
#include <vendor/lineage/livedisplay/2.0/IDisplayModes.h>
|
||||
#include <map>
|
||||
|
||||
namespace vendor {
|
||||
namespace lineage {
|
||||
namespace livedisplay {
|
||||
namespace V2_0 {
|
||||
namespace implementation {
|
||||
|
||||
using ::android::hardware::Return;
|
||||
using ::android::hardware::Void;
|
||||
using ::android::sp;
|
||||
|
||||
class DisplayModes : public IDisplayModes {
|
||||
public:
|
||||
DisplayModes();
|
||||
|
||||
// Methods from ::vendor::lineage::livedisplay::V2_0::IDisplayModes follow.
|
||||
Return<void> getDisplayModes(getDisplayModes_cb resultCb) override;
|
||||
Return<void> getCurrentDisplayMode(getCurrentDisplayMode_cb resultCb) override;
|
||||
Return<void> getDefaultDisplayMode(getDefaultDisplayMode_cb ResultCb) override;
|
||||
Return<bool> setDisplayMode(int32_t modeID, bool makeDefault) override;
|
||||
|
||||
private:
|
||||
struct ModeInfo {
|
||||
const char* name;
|
||||
const char* value;
|
||||
};
|
||||
static const std::map<int32_t, ModeInfo> kModeMap;
|
||||
int32_t mDefaultModeId;
|
||||
};
|
||||
|
||||
} // namespace implementation
|
||||
} // namespace V2_0
|
||||
} // namespace livedisplay
|
||||
} // namespace lineage
|
||||
} // namespace vendor
|
||||
|
||||
#endif // VENDOR_LINEAGE_LIVEDISPLAY_V2_0_DISPLAYMODES_H
|
51
livedisplay/SunlightEnhancement.cpp
Normal file
51
livedisplay/SunlightEnhancement.cpp
Normal file
|
@ -0,0 +1,51 @@
|
|||
/*
|
||||
* 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 "SunlightEnhancementService"
|
||||
|
||||
#include "SunlightEnhancement.h"
|
||||
#include <android-base/logging.h>
|
||||
#include <fstream>
|
||||
|
||||
namespace vendor {
|
||||
namespace lineage {
|
||||
namespace livedisplay {
|
||||
namespace V2_0 {
|
||||
namespace implementation {
|
||||
|
||||
static constexpr const char* kHbmPath =
|
||||
"/sys/devices/platform/soc/ae00000.qcom,mdss_mdp/main_display/hbm";
|
||||
|
||||
Return<bool> SunlightEnhancement::isEnabled() {
|
||||
std::ifstream file(kHbmPath);
|
||||
int result = -1;
|
||||
file >> result;
|
||||
LOG(DEBUG) << "Got result " << result << " fail " << file.fail();
|
||||
return !file.fail() && result > 0;
|
||||
}
|
||||
|
||||
Return<bool> SunlightEnhancement::setEnabled(bool enabled) {
|
||||
std::ofstream file(kHbmPath);
|
||||
file << (enabled ? "3" : "0");
|
||||
LOG(DEBUG) << "setEnabled fail " << file.fail();
|
||||
return !file.fail();
|
||||
}
|
||||
|
||||
} // namespace implementation
|
||||
} // namespace V2_0
|
||||
} // namespace livedisplay
|
||||
} // namespace lineage
|
||||
} // namespace vendor
|
47
livedisplay/SunlightEnhancement.h
Normal file
47
livedisplay/SunlightEnhancement.h
Normal file
|
@ -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_LIVEDISPLAY_V2_0_SUNLIGHTENHANCEMENT_H
|
||||
#define VENDOR_LINEAGE_LIVEDISPLAY_V2_0_SUNLIGHTENHANCEMENT_H
|
||||
|
||||
#include <hidl/MQDescriptor.h>
|
||||
#include <hidl/Status.h>
|
||||
#include <vendor/lineage/livedisplay/2.0/ISunlightEnhancement.h>
|
||||
|
||||
namespace vendor {
|
||||
namespace lineage {
|
||||
namespace livedisplay {
|
||||
namespace V2_0 {
|
||||
namespace implementation {
|
||||
|
||||
using ::android::hardware::Return;
|
||||
using ::android::hardware::Void;
|
||||
using ::android::sp;
|
||||
|
||||
class SunlightEnhancement : public ISunlightEnhancement {
|
||||
public:
|
||||
// Methods from ::vendor::lineage::livedisplay::V2_0::ISunlightEnhancement follow.
|
||||
Return<bool> isEnabled() override;
|
||||
Return<bool> setEnabled(bool enabled) override;
|
||||
};
|
||||
|
||||
} // namespace implementation
|
||||
} // namespace V2_0
|
||||
} // namespace livedisplay
|
||||
} // namespace lineage
|
||||
} // namespace vendor
|
||||
|
||||
#endif // VENDOR_LINEAGE_LIVEDISPLAY_V2_0_SUNLIGHTENHANCEMENT_H
|
|
@ -0,0 +1,10 @@
|
|||
on boot
|
||||
chmod 0660 /sys/devices/platform/soc/ae00000.qcom,mdss_mdp/main_display/display_mode
|
||||
chmod 0660 /sys/devices/platform/soc/ae00000.qcom,mdss_mdp/main_display/hbm
|
||||
chown system system /sys/devices/platform/soc/ae00000.qcom,mdss_mdp/main_display/display_mode
|
||||
chown system system /sys/devices/platform/soc/ae00000.qcom,mdss_mdp/main_display/hbm
|
||||
|
||||
service livedisplay-hal-2-0 /system/bin/hw/lineage.livedisplay@2.0-service.oneplus_sdm845
|
||||
class hal
|
||||
user system
|
||||
group system
|
52
livedisplay/service.cpp
Normal file
52
livedisplay/service.cpp
Normal file
|
@ -0,0 +1,52 @@
|
|||
/*
|
||||
* 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 "lineage.livedisplay@2.0-service.oneplus_sdm845"
|
||||
|
||||
#include <android-base/logging.h>
|
||||
#include <binder/ProcessState.h>
|
||||
#include <hidl/HidlTransportSupport.h>
|
||||
#include "DisplayModes.h"
|
||||
#include "SunlightEnhancement.h"
|
||||
|
||||
using ::vendor::lineage::livedisplay::V2_0::IDisplayModes;
|
||||
using ::vendor::lineage::livedisplay::V2_0::ISunlightEnhancement;
|
||||
using ::vendor::lineage::livedisplay::V2_0::implementation::DisplayModes;
|
||||
using ::vendor::lineage::livedisplay::V2_0::implementation::SunlightEnhancement;
|
||||
|
||||
int main() {
|
||||
android::sp<IDisplayModes> modesService = new DisplayModes();
|
||||
android::sp<ISunlightEnhancement> sreService = new SunlightEnhancement();
|
||||
|
||||
android::hardware::configureRpcThreadpool(2, true /*callerWillJoin*/);
|
||||
|
||||
if (modesService->registerAsService() != android::OK) {
|
||||
LOG(ERROR) << "Cannot register display modes HAL service.";
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (sreService->registerAsService() != android::OK) {
|
||||
LOG(ERROR) << "Cannot register sunlight enhancement HAL service.";
|
||||
return 1;
|
||||
}
|
||||
|
||||
LOG(INFO) << "LiveDisplay HAL service ready.";
|
||||
|
||||
android::hardware::joinRpcThreadpool();
|
||||
|
||||
LOG(ERROR) << "LiveDisplay HAL service failed to join thread pool.";
|
||||
return 1;
|
||||
}
|
|
@ -8,39 +8,6 @@ on boot
|
|||
# Fingerprint
|
||||
chown system system /sys/devices/platform/soc/soc:goodix_fp/proximity_state
|
||||
|
||||
# Touchpanel
|
||||
chmod 0660 /proc/touchpanel/double_swipe_enable
|
||||
chmod 0660 /proc/touchpanel/down_arrow_enable
|
||||
chmod 0660 /proc/touchpanel/down_swipe_enable
|
||||
chmod 0660 /proc/touchpanel/left_arrow_enable
|
||||
chmod 0660 /proc/touchpanel/left_swipe_enable
|
||||
chmod 0660 /proc/touchpanel/letter_m_enable
|
||||
chmod 0660 /proc/touchpanel/letter_o_enable
|
||||
chmod 0660 /proc/touchpanel/letter_s_enable
|
||||
chmod 0660 /proc/touchpanel/letter_w_enable
|
||||
chmod 0660 /proc/touchpanel/right_arrow_enabl
|
||||
chmod 0660 /proc/touchpanel/right_swipe_enabl
|
||||
chmod 0660 /proc/touchpanel/up_arrow_enable
|
||||
chmod 0660 /proc/touchpanel/up_swipe_enable
|
||||
chown system system /proc/touchpanel/double_swipe_enable
|
||||
chown system system /proc/touchpanel/down_arrow_enable
|
||||
chown system system /proc/touchpanel/down_swipe_enable
|
||||
chown system system /proc/touchpanel/left_arrow_enable
|
||||
chown system system /proc/touchpanel/left_swipe_enable
|
||||
chown system system /proc/touchpanel/letter_m_enable
|
||||
chown system system /proc/touchpanel/letter_o_enable
|
||||
chown system system /proc/touchpanel/letter_s_enable
|
||||
chown system system /proc/touchpanel/letter_w_enable
|
||||
chown system system /proc/touchpanel/right_arrow_enabl
|
||||
chown system system /proc/touchpanel/right_swipe_enabl
|
||||
chown system system /proc/touchpanel/up_arrow_enable
|
||||
chown system system /proc/touchpanel/up_swipe_enable
|
||||
|
||||
chmod 0660 /sys/devices/platform/soc/ae00000.qcom,mdss_mdp/main_display/display_mode
|
||||
chmod 0660 /sys/devices/platform/soc/ae00000.qcom,mdss_mdp/main_display/hbm
|
||||
chown system system /sys/devices/platform/soc/ae00000.qcom,mdss_mdp/main_display/display_mode
|
||||
chown system system /sys/devices/platform/soc/ae00000.qcom,mdss_mdp/main_display/hbm
|
||||
|
||||
on charger
|
||||
write /sys/class/backlight/panel0-backlight/brightness 150
|
||||
|
||||
|
|
|
@ -1,10 +1,11 @@
|
|||
type adsprpcd_file, file_type;
|
||||
type bt_firmware_file, file_type;
|
||||
type display_data_file, file_type, data_file_type, core_data_file_type;
|
||||
type firmware_file, file_type;
|
||||
type op1_file, file_type;
|
||||
type op2_file, file_type;
|
||||
type persist_file, file_type;
|
||||
type proc_touchpanel, fs_type;
|
||||
type proc_touchpanel, fs_type, proc_type;
|
||||
type sysfs_fpc_proximity, sysfs_type, fs_type;
|
||||
type sysfs_oem, sysfs_type, fs_type;
|
||||
type sysfs_graphics, sysfs_type, fs_type;
|
||||
|
|
|
@ -1,3 +1,6 @@
|
|||
# Data files
|
||||
/data/display(/.*)? u:object_r:display_data_file:s0
|
||||
|
||||
# Files in rootfs
|
||||
/bt_firmware(/.*)? u:object_r:bt_firmware_file:s0
|
||||
/dsp(/.*)? u:object_r:adsprpcd_file:s0
|
||||
|
@ -12,8 +15,10 @@
|
|||
# Audio
|
||||
/system/etc/audio_policy_configuration.xml u:object_r:vendor_configs_file:s0
|
||||
|
||||
# Lights
|
||||
/system/bin/hw/android\.hardware\.light@2\.0-service\.oneplus_sdm845 u:object_r:hal_light_sdm845_exec:s0
|
||||
# HALs
|
||||
/system/bin/hw/android\.hardware\.light@2\.0-service\.oneplus_sdm845 u:object_r:hal_light_sdm845_exec:s0
|
||||
/system/bin/hw/lineage\.livedisplay@2\.0-service\.oneplus_sdm845 u:object_r:hal_livedisplay_sdm845_exec:s0
|
||||
/system/bin/hw/lineage\.touch@1\.0-service\.oneplus_sdm845 u:object_r:hal_touch_sdm845_exec:s0
|
||||
|
||||
# Modules
|
||||
/system/lib/modules/wlan\.ko u:object_r:vendor_file:s0
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
genfscon proc /touchpanel u:object_r:proc_touchpanel:s0
|
||||
genfscon sysfs /devices/platform/soc/c440000.qcom,spmi/spmi-0/spmi0-02/c440000.qcom,spmi:qcom,pmi8998@2:qcom,qpnp-smb2/power_supply/dc u:object_r:sysfs_battery_supply:s0
|
||||
genfscon sysfs /devices/platform/soc/c440000.qcom,spmi/spmi-0/spmi0-02/c440000.qcom,spmi:qcom,pmi8998@2:qcom,qpnp-smb2/power_supply/main u:object_r:sysfs_battery_supply:s0
|
||||
genfscon sysfs /devices/platform/soc/soc:qcom,dsi-display@18/hbm u:object_r:sysfs_livedisplay_tuneable:s0
|
||||
|
|
12
sepolicy/private/hal_livedisplay_sdm845.te
Normal file
12
sepolicy/private/hal_livedisplay_sdm845.te
Normal file
|
@ -0,0 +1,12 @@
|
|||
type hal_livedisplay_sdm845, coredomain, domain;
|
||||
hal_server_domain(hal_livedisplay_sdm845, hal_lineage_livedisplay)
|
||||
|
||||
type hal_livedisplay_sdm845_exec, exec_type, file_type;
|
||||
init_daemon_domain(hal_livedisplay_sdm845)
|
||||
|
||||
# Talk to the binder device node
|
||||
allow hal_livedisplay_sdm845 binder_device:chr_file rw_file_perms;
|
||||
|
||||
# Allow LiveDisplay to store files under /data/display and access them
|
||||
allow hal_livedisplay_sdm845 display_data_file:dir rw_dir_perms;
|
||||
allow hal_livedisplay_sdm845 display_data_file:file create_file_perms;
|
12
sepolicy/private/hal_touch_sdm845.te
Normal file
12
sepolicy/private/hal_touch_sdm845.te
Normal file
|
@ -0,0 +1,12 @@
|
|||
type hal_touch_sdm845, coredomain, domain;
|
||||
hal_server_domain(hal_touch_sdm845, hal_lineage_touch)
|
||||
|
||||
type hal_touch_sdm845_exec, exec_type, file_type;
|
||||
init_daemon_domain(hal_touch_sdm845)
|
||||
|
||||
# Talk to the binder device node
|
||||
allow hal_touch_sdm845 binder_device:chr_file rw_file_perms;
|
||||
|
||||
# Allow access to gesture enable nodes
|
||||
allow hal_touch_sdm845 proc_touchpanel:dir search;
|
||||
allow hal_touch_sdm845 proc_touchpanel:file rw_file_perms;
|
|
@ -1 +1,2 @@
|
|||
# Pocketmode
|
||||
allow system_app sysfs_fpc_proximity:file { w_file_perms getattr };
|
||||
|
|
|
@ -1,2 +0,0 @@
|
|||
# Allow access to LiveDisplay tuning nodes
|
||||
allow system_server sysfs_livedisplay_tuneable:file rw_file_perms;
|
11
touch/.clang-format
Normal file
11
touch/.clang-format
Normal file
|
@ -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
|
33
touch/Android.bp
Normal file
33
touch/Android.bp
Normal file
|
@ -0,0 +1,33 @@
|
|||
//
|
||||
// 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: "lineage.touch@1.0-service.oneplus_sdm845",
|
||||
init_rc: ["lineage.touch@1.0-service.oneplus_sdm845.rc"],
|
||||
defaults: ["hidl_defaults"],
|
||||
relative_install_path: "hw",
|
||||
srcs: [
|
||||
"TouchscreenGesture.cpp",
|
||||
"service.cpp",
|
||||
],
|
||||
shared_libs: [
|
||||
"libbase",
|
||||
"libbinder",
|
||||
"libhidlbase",
|
||||
"libhidltransport",
|
||||
"libutils",
|
||||
"vendor.lineage.touch@1.0",
|
||||
],
|
||||
}
|
73
touch/TouchscreenGesture.cpp
Normal file
73
touch/TouchscreenGesture.cpp
Normal file
|
@ -0,0 +1,73 @@
|
|||
/*
|
||||
* 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 "TouchscreenGestureService"
|
||||
|
||||
#include "TouchscreenGesture.h"
|
||||
#include <android-base/logging.h>
|
||||
#include <fstream>
|
||||
|
||||
namespace vendor {
|
||||
namespace lineage {
|
||||
namespace touch {
|
||||
namespace V1_0 {
|
||||
namespace implementation {
|
||||
|
||||
const std::map<int32_t, TouchscreenGesture::GestureInfo> TouchscreenGesture::kGestureInfoMap = {
|
||||
{0, {251, "Two fingers down swipe", "/proc/touchpanel/double_swipe_enable"}},
|
||||
{1, {252, "Up arrow", "/proc/touchpanel/up_arrow_enable"}},
|
||||
{2, {254, "Right arrow", "/proc/touchpanel/right_arrow_enable"}},
|
||||
{3, {255, "Down arrow", "/proc/touchpanel/down_arrow_enable"}},
|
||||
{4, {253, "Left arrow", "/proc/touchpanel/left_arrow_enable"}},
|
||||
{5, {66, "One finger up swipe", "/proc/touchpanel/up_swipe_enable"}},
|
||||
{6, {65, "One finger right swipe", "/proc/touchpanel/right_swipe_enable"}},
|
||||
{7, {64, "One finger down swipe", "/proc/touchpanel/down_swipe_enable"}},
|
||||
{8, {63, "One finger left swipe", "/proc/touchpanel/left_swipe_enable"}},
|
||||
{9, {247, "Letter M", "/proc/touchpanel/letter_m_enable"}},
|
||||
{10, {250, "Letter O", "/proc/touchpanel/letter_o_enable"}},
|
||||
{11, {248, "Letter S", "/proc/touchpanel/letter_s_enable"}},
|
||||
{12, {246, "Letter W", "/proc/touchpanel/letter_w_enable"}},
|
||||
};
|
||||
|
||||
Return<void> TouchscreenGesture::getSupportedGestures(getSupportedGestures_cb resultCb) {
|
||||
std::vector<Gesture> gestures;
|
||||
|
||||
for (const auto& entry : kGestureInfoMap) {
|
||||
gestures.push_back({entry.first, entry.second.name, entry.second.keycode});
|
||||
}
|
||||
resultCb(gestures);
|
||||
|
||||
return Void();
|
||||
}
|
||||
|
||||
Return<bool> TouchscreenGesture::setGestureEnabled(
|
||||
const ::vendor::lineage::touch::V1_0::Gesture& gesture, bool enabled) {
|
||||
const auto entry = kGestureInfoMap.find(gesture.id);
|
||||
if (entry == kGestureInfoMap.end()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
std::ofstream file(entry->second.path);
|
||||
file << (enabled ? "1" : "0");
|
||||
LOG(DEBUG) << "Wrote file " << entry->second.path << " fail " << file.fail();
|
||||
return !file.fail();
|
||||
}
|
||||
|
||||
} // namespace implementation
|
||||
} // namespace V1_0
|
||||
} // namespace touch
|
||||
} // namespace lineage
|
||||
} // namespace vendor
|
57
touch/TouchscreenGesture.h
Normal file
57
touch/TouchscreenGesture.h
Normal file
|
@ -0,0 +1,57 @@
|
|||
/*
|
||||
* 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_TOUCHSCREENGESTURE_H
|
||||
#define VENDOR_LINEAGE_TOUCH_V1_0_TOUCHSCREENGESTURE_H
|
||||
|
||||
#include <hidl/MQDescriptor.h>
|
||||
#include <hidl/Status.h>
|
||||
#include <vendor/lineage/touch/1.0/ITouchscreenGesture.h>
|
||||
#include <map>
|
||||
|
||||
namespace vendor {
|
||||
namespace lineage {
|
||||
namespace touch {
|
||||
namespace V1_0 {
|
||||
namespace implementation {
|
||||
|
||||
using ::android::hardware::Return;
|
||||
using ::android::hardware::Void;
|
||||
using ::android::sp;
|
||||
|
||||
class TouchscreenGesture : public ITouchscreenGesture {
|
||||
public:
|
||||
// Methods from ::vendor::lineage::touch::V1_0::ITouchscreenGesture follow.
|
||||
Return<void> getSupportedGestures(getSupportedGestures_cb resultCb) override;
|
||||
Return<bool> setGestureEnabled(const ::vendor::lineage::touch::V1_0::Gesture& gesture,
|
||||
bool enabled) override;
|
||||
|
||||
private:
|
||||
typedef struct {
|
||||
int32_t keycode;
|
||||
const char* name;
|
||||
const char* path;
|
||||
} GestureInfo;
|
||||
static const std::map<int32_t, GestureInfo> kGestureInfoMap; // id -> info
|
||||
};
|
||||
|
||||
} // namespace implementation
|
||||
} // namespace V1_0
|
||||
} // namespace touch
|
||||
} // namespace lineage
|
||||
} // namespace vendor
|
||||
|
||||
#endif // VENDOR_LINEAGE_TOUCH_V1_0_TOUCHSCREENGESTURE_H
|
32
touch/lineage.touch@1.0-service.oneplus_sdm845.rc
Normal file
32
touch/lineage.touch@1.0-service.oneplus_sdm845.rc
Normal file
|
@ -0,0 +1,32 @@
|
|||
on boot
|
||||
chmod 0660 /proc/touchpanel/double_swipe_enable
|
||||
chmod 0660 /proc/touchpanel/down_arrow_enable
|
||||
chmod 0660 /proc/touchpanel/down_swipe_enable
|
||||
chmod 0660 /proc/touchpanel/left_arrow_enable
|
||||
chmod 0660 /proc/touchpanel/left_swipe_enable
|
||||
chmod 0660 /proc/touchpanel/letter_m_enable
|
||||
chmod 0660 /proc/touchpanel/letter_o_enable
|
||||
chmod 0660 /proc/touchpanel/letter_s_enable
|
||||
chmod 0660 /proc/touchpanel/letter_w_enable
|
||||
chmod 0660 /proc/touchpanel/right_arrow_enable
|
||||
chmod 0660 /proc/touchpanel/right_swipe_enable
|
||||
chmod 0660 /proc/touchpanel/up_arrow_enable
|
||||
chmod 0660 /proc/touchpanel/up_swipe_enable
|
||||
chown system system /proc/touchpanel/double_swipe_enable
|
||||
chown system system /proc/touchpanel/down_arrow_enable
|
||||
chown system system /proc/touchpanel/down_swipe_enable
|
||||
chown system system /proc/touchpanel/left_arrow_enable
|
||||
chown system system /proc/touchpanel/left_swipe_enable
|
||||
chown system system /proc/touchpanel/letter_m_enable
|
||||
chown system system /proc/touchpanel/letter_o_enable
|
||||
chown system system /proc/touchpanel/letter_s_enable
|
||||
chown system system /proc/touchpanel/letter_w_enable
|
||||
chown system system /proc/touchpanel/right_arrow_enable
|
||||
chown system system /proc/touchpanel/right_swipe_enable
|
||||
chown system system /proc/touchpanel/up_arrow_enable
|
||||
chown system system /proc/touchpanel/up_swipe_enable
|
||||
|
||||
service touch-hal-1-0 /system/bin/hw/lineage.touch@1.0-service.oneplus_sdm845
|
||||
class hal
|
||||
user system
|
||||
group system
|
43
touch/service.cpp
Normal file
43
touch/service.cpp
Normal file
|
@ -0,0 +1,43 @@
|
|||
/*
|
||||
* 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 "lineage.touch@1.0-service.oneplus_sdm845"
|
||||
|
||||
#include <android-base/logging.h>
|
||||
#include <binder/ProcessState.h>
|
||||
#include <hidl/HidlTransportSupport.h>
|
||||
#include "TouchscreenGesture.h"
|
||||
|
||||
using ::vendor::lineage::touch::V1_0::ITouchscreenGesture;
|
||||
using ::vendor::lineage::touch::V1_0::implementation::TouchscreenGesture;
|
||||
|
||||
int main() {
|
||||
android::sp<ITouchscreenGesture> gestureService = new TouchscreenGesture();
|
||||
|
||||
android::hardware::configureRpcThreadpool(1, true /*callerWillJoin*/);
|
||||
|
||||
if (gestureService->registerAsService() != android::OK) {
|
||||
LOG(ERROR) << "Cannot register touchscreen gesture 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;
|
||||
}
|
Loading…
Reference in a new issue