Я пытался симулировать касание андроида на сенсорном экране, но очень быстро.
Я хочу, чтобы кран был на линии, поэтому я фиксирую значение y и увеличиваю значение x на 100 по модулю 1080.
Я уточнил, что мне действительно все равно, "где именно". Я хочу подмести ряд хитами.
Я попробовал метод ввода, но он слишком медленный. Я также попробовал метод sendevent с помощью сценария оболочки (запущенного прямо с моего телефона), но, опять же, он слишком медленный. Мне нужен сценарий для имитации сигналов на частоте около 40 Гц или что-то в этом роде.
Я прочитал, что мы можем напрямую записать в / dev / input / event5 и напрямую отправить байты (очевидно, sendevent продолжает открывать и закрывать / dev / input / event5, что медленно).
Как вы думаете, возможно ли это, и если да, то как? Могу ли я достичь этой скорости (~ 40 Гц) с помощью скрипта, или я должен попытаться создать программу на 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 можно видеть, как пишутся вещи, но при передаче эха ничего не видно.