Fix DT2W on Xiaomi Mi 11 Lite 5G by using xiaomi-touch

It may also fix for other Xiaomi devices
This commit is contained in:
Alberto Ponces 2022-02-09 21:05:39 +00:00
parent b962aa4bfd
commit a66fa56752
6 changed files with 76 additions and 5 deletions

View File

@ -218,4 +218,7 @@ PRODUCT_COPY_FILES += \
PRODUCT_PACKAGES += phh-ota
PRODUCT_PACKAGES += \
xiaomi-touch
include build/make/target/product/gsi_release.mk

View File

@ -204,3 +204,10 @@ cc_binary {
"oplus-alert-slider.rc",
],
}
cc_binary {
name: "xiaomi-touch",
srcs: [
"xiaomi-touch.cpp",
],
}

View File

@ -3,6 +3,7 @@
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
#include <unistd.h>
typedef struct {
int dir;
@ -27,4 +28,5 @@ int main(int argc, char **argv) {
cfg.speed = 4;
ioctl(fd, ASUS_MOTOR_DRV_MANUAL_MODE, &cfg);
close(fd);
}

48
cmds/xiaomi-touch.cpp Normal file
View File

@ -0,0 +1,48 @@
#include <iostream>
#include <unistd.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#define SET_CUR_VALUE 0
#define Touch_Game_Mode 0
#define Touch_Active_MODE 1
#define Touch_UP_THRESHOLD 2
#define Touch_Tolerance 3
#define Touch_Aim_Sensitivity 4
#define Touch_Tap_Stability 5
#define Touch_Expert_Mode 6
#define Touch_Edge_Filter 7
#define Touch_Panel_Orientation 8
#define Touch_Report_Rate 9
#define Touch_Fod_Enable 10
#define Touch_Aod_Enable 11
#define Touch_Resist_RF 12
#define Touch_Idle_Time 13
#define Touch_Doubletap_Mode 14
#define Touch_Grip_Mode 15
#define Touch_FodIcon_Enable 16
#define Touch_Nonui_Mode 17
#define Touch_Debug_Level 18
#define Touch_Power_Status 19
#define Touch_Mode_NUM 20
#define TOUCH_DEV_PATH "/dev/xiaomi-touch"
#define TOUCH_ID 0
#define TOUCH_MAGIC 0x5400
#define TOUCH_IOC_SETMODE TOUCH_MAGIC + SET_CUR_VALUE
int main(int argc, char **argv) {
if(argc != 3) {
fprintf(stderr, "Usage: %s <mode> <0|1>\n", argv[0]);
return -1;
}
int mode = atoi(argv[1]);
int enabled = atoi(argv[2]);
if (mode < 0 || mode > 20) return -1;
if (enabled != 0 && enabled != 1) return -1;
int fd = open(TOUCH_DEV_PATH, O_RDWR);
int arg[3] = {TOUCH_ID, mode, enabled};
ioctl(fd, TOUCH_IOC_SETMODE, &arg);
close(fd);
}

View File

@ -52,6 +52,15 @@ xiaomi_toggle_dt2w_event_node() {
return 1
}
xiaomi_toggle_dt2w_ioctl() {
if [ -c "/dev/xiaomi-touch" ]; then
echo "Trying to set dt2w mode with ioctl on /dev/xiaomi-touch"
# 14 - Touch_Doubletap_Mode
xiaomi-touch 14 "$1"
return
fi
return 1
}
restartAudio() {
setprop ctl.restart audioserver
@ -66,11 +75,12 @@ if [ "$1" == "persist.sys.phh.xiaomi.dt2w" ]; then
exit 1
fi
if ! xiaomi_toggle_dt2w_proc_node "$prop_value"; then
# Fallback to event node method
xiaomi_toggle_dt2w_event_node "$prop_value"
fi
exit $?
xiaomi_toggle_dt2w_proc_node "$prop_value"
# Fallback to event node method
xiaomi_toggle_dt2w_event_node "$prop_value"
# Fallback to ioctl method
xiaomi_toggle_dt2w_ioctl "$prop_value"
exit
fi
if [ "$1" == "persist.sys.phh.oppo.dt2w" ]; then

View File

@ -5,6 +5,7 @@
/system/bin/phh-on-boot.sh u:object_r:phhsu_exec:s0
/system/bin/phh-on-data.sh u:object_r:phhsu_exec:s0
/system/bin/asus-motor u:object_r:phhsu_exec:s0
/system/bin/xiaomi-touch u:object_r:phhsu_exec:s0
#/system/bin/fsck\.exfat u:object_r:fsck_exec:s0
/system/bin/fsck\.ntfs u:object_r:fsck_exec:s0