diff --git a/BoardConfig.mk b/BoardConfig.mk index d6dfc69..a31774d 100644 --- a/BoardConfig.mk +++ b/BoardConfig.mk @@ -39,12 +39,6 @@ TARGET_2ND_CPU_ABI := armeabi-v7a TARGET_2ND_CPU_ABI2 := armeabi TARGET_2ND_CPU_VARIANT := cortex-a76 -# ART -ART_BUILD_TARGET_NDEBUG := true -ART_BUILD_TARGET_DEBUG := false -ART_BUILD_HOST_NDEBUG := true -ART_BUILD_HOST_DEBUG := false - # Audio AUDIO_FEATURE_ENABLED_EXTENDED_COMPRESS_FORMAT := true AUDIO_FEATURE_ENABLED_GKI := true diff --git a/overlay/frameworks/base/core/res/res/values/config.xml b/overlay/frameworks/base/core/res/res/values/config.xml index a3b0025..9106770 100644 --- a/overlay/frameworks/base/core/res/res/values/config.xml +++ b/overlay/frameworks/base/core/res/res/values/config.xml @@ -319,6 +319,9 @@ true + + true + true diff --git a/sepolicy/vendor/genfs_contexts b/sepolicy/vendor/genfs_contexts index 65a75b0..0b43c6c 100644 --- a/sepolicy/vendor/genfs_contexts +++ b/sepolicy/vendor/genfs_contexts @@ -19,12 +19,9 @@ genfscon sysfs /devices/platform/soc/soc:qcom,pmic_glink/soc:qcom,pmic_glink:qco # Wakeup nodes genfscon sysfs /devices/platform/goodix_ts.0/wakeup u:object_r:sysfs_wakeup:s0 genfscon sysfs /devices/platform/soc/17300000.qcom,lpass/subsys6/wakeup u:object_r:sysfs_wakeup:s0 -genfscon sysfs /devices/platform/soc/17300000.qcom,lpass/wakeup u:object_r:sysfs_wakeup:s0 genfscon sysfs /devices/platform/soc/188101c.qcom,spss/subsys5/wakeup u:object_r:sysfs_wakeup:s0 -genfscon sysfs /devices/platform/soc/188101c.qcom,spss/wakeup u:object_r:sysfs_wakeup:s0 genfscon sysfs /devices/platform/soc/4080000.qcom,mss/subsys8/wakeup u:object_r:sysfs_wakeup:s0 genfscon sysfs /devices/platform/soc/5c00000.qcom,ssc/subsys7/wakeup u:object_r:sysfs_wakeup:s0 -genfscon sysfs /devices/platform/soc/5c00000.qcom,ssc/wakeup u:object_r:sysfs_wakeup:s0 genfscon sysfs /devices/platform/soc/890000.qcom,qup_uart/wakeup u:object_r:sysfs_wakeup:s0 genfscon sysfs /devices/platform/soc/984000.i2c/i2c-0/0-0028/wakeup u:object_r:sysfs_wakeup:s0 genfscon sysfs /devices/platform/soc/998000.i2c/i2c-0/0-005a/wakeup u:object_r:sysfs_wakeup:s0 @@ -46,7 +43,6 @@ genfscon sysfs /devices/platform/soc/abb0000.qcom,evass/subsys2/wakeup u:object_ genfscon sysfs /devices/platform/soc/abb0000.qcom,evass/wakeup u:object_r:sysfs_wakeup:s0 genfscon sysfs /devices/platform/soc/b0000000.qcom,cnss-qca6490/subsys10/wakeup u:object_r:sysfs_wakeup:s0 genfscon sysfs /devices/platform/soc/b0000000.qcom,cnss-qca6490/subsys8/wakeup u:object_r:sysfs_wakeup:s0 -genfscon sysfs /devices/platform/soc/c440000.qcom,spmi/spmi-0/spmi0-00/c440000.qcom,spmi:qcom,pmk8350@0:pon_pbs@800/wakeup u:object_r:sysfs_wakeup:s0 genfscon sysfs /devices/platform/soc/c440000.qcom,spmi/spmi-0/spmi0-03/c440000.qcom,spmi:qcom,pm8350b@3:qcom,amoled/wakeup u:object_r:sysfs_wakeup:s0 # note: Labelling /devices/platform/soc/soc:fingerprint_fpc/wakeup relabels the wakeup_enable node genfscon sysfs /devices/platform/soc/soc:fingerprint_fpc/wakeup/wakeup u:object_r:sysfs_wakeup:s0 diff --git a/udfps/UdfpsHandler.cpp b/udfps/UdfpsHandler.cpp index 8f31c41..e7ac5cd 100644 --- a/udfps/UdfpsHandler.cpp +++ b/udfps/UdfpsHandler.cpp @@ -11,9 +11,9 @@ #include #include -#include -#include #include +#include +#include #include #include "UdfpsHandler.h" @@ -26,7 +26,12 @@ #define PARAM_NIT_UDFPS 1 #define PARAM_NIT_NONE 0 +#define COMMAND_FOD_PRESS_STATUS 1 +#define PARAM_FOD_PRESSED 1 +#define PARAM_FOD_RELEASED 0 + // Touchscreen and HBM +#define TOUCH_DEV_PATH "/dev/xiaomi-touch" #define DISP_FEATURE_PATH "/dev/mi_display/disp_feature" #define FOD_STATUS_PATH "/sys/devices/platform/goodix_ts.0/fod_enable" @@ -65,63 +70,83 @@ struct disp_base displayBasePrimary = { .disp_id = MI_DISP_PRIMARY, }; -struct disp_event_req displayEventRequest = { - .base = displayBasePrimary, - .type = MI_DISP_EVENT_FOD, -}; - class XiaomiUdfpsHandler : public UdfpsHandler { -public: + public: void init(fingerprint_device_t* device) { mDevice = device; dispFeatureFd = android::base::unique_fd(open(DISP_FEATURE_PATH, O_RDWR)); + touchUniqueFd = android::base::unique_fd(open(TOUCH_DEV_PATH, O_RDWR)); } void onFingerDown(uint32_t /*x*/, uint32_t /*y*/, float /*minor*/, float /*major*/) { - LOG(INFO) << __func__; - set(FOD_STATUS_PATH, FOD_STATUS_ON); - setFingerDown(true); - } + if (mAuthSuccess) return; - void onFingerUp() { - LOG(INFO) << __func__; - set(FOD_STATUS_PATH, FOD_STATUS_OFF); - setFingerDown(false); - } + int buf[MAX_BUF_SIZE] = {MI_DISP_PRIMARY, Touch_Fod_Enable, PARAM_FOD_PRESSED}; + ioctl(touchUniqueFd.get(), TOUCH_IOC_SET_CUR_VALUE, &buf); - void onAcquired(int32_t result, int32_t vendorCode) { - LOG(INFO) << __func__ << " result: " << result << " vendorCode: " << vendorCode; - if (static_cast(result) == AcquiredInfo::GOOD) { - onFingerUp(); - } else if (vendorCode == 21) { - /* - * vendorCode = 21 waiting for finger - * vendorCode = 22 finger down - * vendorCode = 23 finger up - */ - set(FOD_STATUS_PATH, FOD_STATUS_ON); - } - } + mDevice->extCmd(mDevice, COMMAND_NIT, PARAM_NIT_UDFPS); - void cancel() { - LOG(INFO) << __func__; - set(FOD_STATUS_PATH, FOD_STATUS_OFF); - } - -private: - fingerprint_device_t* mDevice; - android::base::unique_fd dispFeatureFd; - - void setFingerDown(bool pressed) { struct disp_feature_req req = { .base = displayBasePrimary, .feature_id = DISP_FEATURE_LOCAL_HBM, - .feature_val = pressed ? LOCAL_HBM_NORMAL_WHITE_1000NIT : LOCAL_HBM_OFF_TO_NORMAL, + .feature_val = LOCAL_HBM_NORMAL_WHITE_1000NIT, + }; + ioctl(dispFeatureFd.get(), MI_DISP_IOCTL_SET_FEATURE, &req); + + mDevice->extCmd(mDevice, COMMAND_FOD_PRESS_STATUS, PARAM_FOD_PRESSED); + } + + void onFingerUp() { + int buf[MAX_BUF_SIZE] = {MI_DISP_PRIMARY, Touch_Fod_Enable, PARAM_FOD_RELEASED}; + ioctl(touchUniqueFd.get(), TOUCH_IOC_SET_CUR_VALUE, &buf); + + mDevice->extCmd(mDevice, COMMAND_NIT, PARAM_NIT_NONE); + + struct disp_feature_req req = { + .base = displayBasePrimary, + .feature_id = DISP_FEATURE_LOCAL_HBM, + .feature_val = LOCAL_HBM_OFF_TO_NORMAL, }; ioctl(dispFeatureFd.get(), MI_DISP_IOCTL_SET_FEATURE, &req); - mDevice->extCmd(mDevice, COMMAND_NIT, pressed ? PARAM_NIT_UDFPS : PARAM_NIT_NONE); + mDevice->extCmd(mDevice, COMMAND_FOD_PRESS_STATUS, PARAM_FOD_RELEASED); } + + void onAcquired(int32_t result, int32_t /*vendorCode*/) { + switch (static_cast(result)) { + case AcquiredInfo::GOOD: + case AcquiredInfo::PARTIAL: + case AcquiredInfo::INSUFFICIENT: + case AcquiredInfo::SENSOR_DIRTY: + case AcquiredInfo::TOO_SLOW: + case AcquiredInfo::TOO_FAST: + case AcquiredInfo::TOO_DARK: + case AcquiredInfo::TOO_BRIGHT: + case AcquiredInfo::IMMOBILE: + case AcquiredInfo::LIFT_TOO_SOON: + onFingerUp(); + break; + default: + break; + } + } + + void onAuthenticationSucceeded() { + mAuthSuccess = true; + onFingerUp(); + std::thread([this]() { + std::this_thread::sleep_for(std::chrono::milliseconds(500)); + mAuthSuccess = false; + }).detach(); + } + + void onAuthenticationFailed() { onFingerUp(); } + + private: + fingerprint_device_t* mDevice; + bool mAuthSuccess = false; + android::base::unique_fd dispFeatureFd; + android::base::unique_fd touchUniqueFd; }; static UdfpsHandler* create() { @@ -133,6 +158,6 @@ static void destroy(UdfpsHandler* handler) { } extern "C" UdfpsHandlerFactory UDFPS_HANDLER_FACTORY = { - .create = create, - .destroy = destroy, + .create = create, + .destroy = destroy, };