我一直在尝试在触摸屏上模拟android tap,但是速度非常快。 我希望水龙头在一条线上,所以我固定了y值,然后将x的值以100为模,以100为模。
我要指出的是,我并不十分在乎它的确切位置。我想打几行热门歌曲。
我尝试了'input'方法,但是它太慢了。我还尝试了使用shell脚本(直接从手机运行)的sendevent方法,但是同样,它太慢了。我需要脚本来模拟40Hz左右的抽头。
我了解到我们可以直接写入/ dev / input / event5并直接发送字节(显然sendevent会不断打开和关闭/ dev / input / event5,这很慢)。
您认为有可能吗?如果可以,怎么办?我可以通过脚本达到此速度(〜40Hz),还是应该尝试构建C程序?
谢谢。
编辑:我已经有了模拟抽头的序列:
sendevent /dev/input/event5 1 330 1
sendevent /dev/input/event5 3 53 $current_x
sendevent /dev/input/event5 3 54 $y
sendevent /dev/input/event5 0 0 0
sendevent /dev/input/event5 1 330 0
sendevent /dev/input/event5 0 0 0
但是我不确定如何将其转换为十六进制以直接将其发送到/ dev / input / event5。
Edit2 :我尝试使用printf
#sendevent /dev/input/event5 1 330 1
printf "%04x%04x%08x\n" "1" "330" "1" >> /dev/input/event5
#sendevent /dev/input/event5 3 53 $current_x
printf "%04x%04x%08x\n" "3" "53" "$current_x" >> /dev/input/event5
#sendevent /dev/input/event5 3 54 $y
printf "%04x%04x%08x\n" "3" "54" "1700" >> /dev/input/event5
#sendevent /dev/input/event5 0 0
printf "%04x%04x%08x\n" "0" "0" "0" >> /dev/input/event5
#sendevent /dev/input/event5 1 330 0
printf "%04x%04x%08x\n" "1" "330" "0" >> /dev/input/event5
#sendevent /dev/input/event5 0 0 0
printf "%04x%04x%08x\n" "0" "0" "0" >> /dev/input/event5
但是我感觉printf返回一个字符串,而不是十六进制值。
Edit3 :我尝试了一些改动:
#sendevent /dev/input/event5 1 330 1
#printf "%04x%04x%08x\n" "1" "330" "1" >> /dev/input/event5
echo $(((1<<16) + 330)) >> /dev/input/event5
echo $((1)) >> /dev/input/event5
#sendevent /dev/input/event5 3 53 $current_x
#printf "%04x%04x%08x\n" "3" "53" "$current_x" >> /dev/input/event5
echo $(((3<<16) + 53)) >> /dev/input/event5
echo $current_x >> /dev/input/event5
#sendevent /dev/input/event5 3 54 $y
#printf "%04x%04x%08x\n" "3" "54" "1700" >> /dev/input/event5
echo $(((3<<16) + 54)) >> /dev/input/event5
echo $((1700)) >> /dev/input/event5
#sendevent /dev/input/event5 0 0
#printf "%04x%04x%08x\n" "0" "0" "0" >> /dev/input/event5
echo $((0)) >> /dev/input/event5
echo $((0)) >> /dev/input/event5
#sendevent /dev/input/event5 1 330 0
#printf "%04x%04x%08x\n" "1" "330" "0" >> /dev/input/event5
echo $(((1<<16) + 330)) >> /dev/input/event5
echo $((0)) >> /dev/input/event5
#sendevent /dev/input/event5 0 0 0
#printf "%04x%04x%08x\n" "0" "0" "0" >> /dev/input/event5
echo $((0)) >> /dev/input/event5
echo $((0)) >> /dev/input/event5
但仍然没有。我不认为我应该发送64位值,因为我知道了:
echo $((1<<32))
1
Edit4 :嗯,也许问题是我没有权限直接在 / dev / input / event5 上写,因为我试图监视它,而且我可以看到使用sendevent时正在编写东西,但是在回显管道时什么也没写。