python-adb-getevent转sendevent

# -*- coding: utf-8 -*-
import re

class getevent_to_sendevent(object):
    operation_interval_time = 0
    touch_device = "/dev/input/event0"
    response_time = 0.05

    @staticmethod
    def hex_to_signed_dec(value):
        bin_str = f"{
     bin(int(value, 16))[2:]}"
        if bin_str[0] == "1":
            return -(int('1' * len(bin_str), 2) - int(value, 16) + 1)
        else:
            return int(value, 16)

    @classmethod
    def get_sendevent_sh(cls, getevent_file, outfile):
        """


        :param outfile: 输出sh文件
        :return:
        """
        # 若两个sendevent时间差在间隔时间内认为是一个操作
        mindiff = cls.operation_interval_time
        data = {
   }
        last_event_timestamp = None
        with open(getevent_file, mode="r", encoding="utf-8") as f:
            for line in f.readlines():
                matched = re.findall(r"[\d.a-f]+", line, re.I)
                if len(matched) == 4:
                    event_timestamp, event_type, event_code, event_value = matched
                    last_event_timestamp = last_event_timestamp or event_timestamp
                    if event_timestamp < last_event_timestamp:
                        break
                    event_type = cls.hex_to_signed_dec(event_type)
                    event_code = cls.hex_to_signed_dec(event_code)
                    event_value = cls.hex_to_signed_dec(event_value)
                    item = [str(event_type), str(event_code), str(event_value)]
                    if event_timestamp not in data:
                        data[event_timestamp] = [item]
                    else:
                        data[event_timestamp].append(item)
                    last_event_timestamp = event_timestamp
        # 写sendevent文件
        last_event_timestamp = None
        items = []

        def sendevent_line(event_list):
            line = "\n".join(["" + "sendevent " + f"{
     cls.touch_device} " + " ".join(items) for items in event_list])
            return line

        if len(data) == 0:
            raise Exception("no event")
        with open(outfile, mode="w+", encoding="utf-8") as f:
            for event_timestamp, event_list in data.items():
                last_event_timestamp = last_event_timestamp or event_timestamp
                if last_event_timestamp != event_timestamp:
                    diff = float(event_timestamp) - float(last_event_timestamp)
                    wait_time = diff - cls.response_time
                    if diff > mindiff and wait_time > 0:
                        line = sendevent_line(items)
                        f.write(f"{
     line}\n")
                        f.write(f"sleep {
     str(wait_time)[:5]}; ")
                        items = event_list
                    else:
                        items.extend(event_list)
                else:
                    items.extend(event_list)
                last_event_timestamp = event_timestamp
            line = sendevent_line(items)
            f.write(f"{
     line}\n")
            f.write(f"exit")

if __name__ == '__main__':
    print(getevent_to_sendevent.hex_to_signed_dec('81'))
    """
    adb shell getevent -t /dev/input/event0
    """
    """
    [    2298.604349] 0001 014a 00000001
    [    2298.604349] 0003 0039 00000000
    [    2298.604349] 0003 0035 000003c1
    [    2298.604349] 0003 0036 00000411
    [    2298.604349] 0000 0000 00000000
    [    2298.737526] 0003 0039 ffffffff
    """
    getevent_to_sendevent.get_sendevent_sh(getevent_file=r"E:\workspace\self\practice\test.txt", outfile="test.sh")

相关推荐

  1. python-adb-geteventsendevent

    2024-02-21 05:30:01       29 阅读
  2. python adb脚本

    2024-02-21 05:30:01       19 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-02-21 05:30:01       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-21 05:30:01       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-21 05:30:01       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-21 05:30:01       18 阅读

热门阅读

  1. Message Pack 协议详解及应用

    2024-02-21 05:30:01       35 阅读
  2. redis 主从模式,sentinel 模式配置

    2024-02-21 05:30:01       32 阅读
  3. 2402C++,C++26包索引

    2024-02-21 05:30:01       37 阅读
  4. SpringBoot

    2024-02-21 05:30:01       25 阅读
  5. js遇到的问题 --持续更新

    2024-02-21 05:30:01       30 阅读
  6. rust gui fltk

    2024-02-21 05:30:01       29 阅读
  7. Rabbitmq的几种模式的总结

    2024-02-21 05:30:01       30 阅读
  8. 学习数据接构和算法的第11天

    2024-02-21 05:30:01       31 阅读