Esempio n. 1
0
 def __init__(self, device_id):
     self.device_id = device_id
     self.abi = self.get_abi()
     if self.is_mnt_existed():
         logger.info('minitouch already existed in {}'.format(device_id))
     else:
         self.download_target_mnt()
Esempio n. 2
0
    def __init__(self, port):
        self.port = port

        # build connection
        client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        client.connect((self._DEFAULT_HOST, self.port))
        self.client = client

        # get minitouch server info
        socket_out = client.makefile()

        # v <version>
        # protocol version, usually it is 1. needn't use this
        socket_out.readline()

        # ^ <max-contacts> <max-x> <max-y> <max-pressure>
        _, max_contacts, max_x, max_y, max_pressure, *_ = \
            socket_out.readline().replace('\n', '').replace('\r', '').split(' ')
        self.max_contacts = max_contacts
        self.max_x = max_x
        self.max_y = max_y
        self.max_pressure = max_pressure

        # $ <pid>
        _, pid = socket_out.readline().replace('\n', '').replace('\r',
                                                                 '').split(' ')
        self.pid = pid

        logger.info('minitouch running on port: {}, pid: {}'.format(
            self.port, self.pid))
        logger.info(
            'max_contact: {}; max_x: {}; max_y: {}; max_pressure: {}'.format(
                max_contacts, max_x, max_y, max_pressure))
Esempio n. 3
0
 def _start_mnt(self):
     """ fork a process to start minitouch on android """
     command_list = [
         _ADB, '-s', self.device_id, 'shell', '/data/local/tmp/minitouch'
     ]
     logger.info('start minitouch: {}'.format(' '.join(command_list)))
     self.mnt_process = subprocess.Popen(command_list,
                                         stdout=subprocess.DEVNULL)
Esempio n. 4
0
    def __init__(self, port):
        self.port = port

        # build connection
        client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        client.connect((self._DEFAULT_HOST, self.port))
        self.client = client
        logger.info('minitouch connected on {}'.format(self.port))
Esempio n. 5
0
 def publish(self, connection):
     self.commit()
     final_content = self._content
     logger.info('send operation: {}'.format(
         final_content.replace('\n', '\\n')))
     time.sleep(config.DEFAULT_DELAY)
     connection.send(final_content)
     self.reset()
Esempio n. 6
0
 def publish(self, connection):
     """ apply current commands (_content), to your device """
     self.commit()
     final_content = self._content
     logger.info("send operation: {}".format(final_content.replace("\n", "\\n")))
     connection.send(final_content)
     time.sleep(self._delay / 1000 + config.DEFAULT_DELAY)
     self.reset()
Esempio n. 7
0
 def _forward_port(self):
     """ allow pc access minitouch with port """
     command_list = [
         _ADB, '-s', self.device_id, 'forward', 'tcp:{}'.format(self.port),
         'localabstract:minitouch'
     ]
     logger.info('forward command: {}'.format(' '.join(command_list)))
     assert not subprocess.check_output(command_list)
Esempio n. 8
0
 def publish(self, connection):
     """ apply current commands (_content), to your device """
     self.commit()
     final_content = self._content
     logger.info('send operation: {}'.format(
         final_content.replace('\n', '\\n')))
     time.sleep(config.DEFAULT_DELAY)
     connection.send(final_content)
     self.reset()
Esempio n. 9
0
def is_device_connected(device_id):
    """ return True if device connected, else return False """
    _ADB = config.ADB_EXECUTOR
    try:
        device_name = subprocess.check_output(
            [_ADB, '-s', device_id, 'shell', 'getprop', 'ro.product.model'])
        device_name = device_name.decode(config.DEFAULT_CHARSET).replace(
            '\n', '').replace('\r', '')
        logger.info('device {} online'.format(device_name))
    except subprocess.CalledProcessError:
        return False
    return True
Esempio n. 10
0
 def _start_mnt(self):
     """ fork a process to start minitouch on android """
     command_list = [
         _ADB,
         "-s",
         self.device_id,
         "shell",
         "/data/local/tmp/minitouch",
     ]
     logger.info("start minitouch: {}".format(" ".join(command_list)))
     self.mnt_process = subprocess.Popen(command_list,
                                         stdout=subprocess.DEVNULL)
Esempio n. 11
0
def is_device_connected(device_id):
    """ return True if device connected, else return False """
    _ADB = config.ADB_EXECUTOR
    try:
        device_name = subprocess.check_output(
            [_ADB, "-s", device_id, "shell", "getprop", "ro.product.model"])
        device_name = (device_name.decode(config.DEFAULT_CHARSET).replace(
            "\n", "").replace("\r", ""))
        logger.info("device {} online".format(device_name))
    except subprocess.CalledProcessError:
        return False
    return True
Esempio n. 12
0
    def download_target_mnt(self):
        abi = self.get_abi()
        target_url = '{}/{}/bin/minitouch'.format(config.MNT_PREBUILT_URL, abi)
        logger.info('target minitouch url: ' + target_url)
        mnt_path = download_file(target_url)

        # push and grant
        subprocess.check_call([_ADB, '-s', self.device_id, 'push', mnt_path, config.MNT_HOME])
        subprocess.check_call([_ADB, '-s', self.device_id, 'shell', 'chmod', '777', config.MNT_HOME])
        logger.info('minitouch already installed in {}'.format(config.MNT_HOME))

        # remove temp
        os.remove(mnt_path)
Esempio n. 13
0
    def download_target_mnt(self):
        abi = self.get_abi()
        target_url = "{}/{}/bin/minitouch".format(config.MNT_PREBUILT_URL, abi)
        logger.info("target minitouch url: " + target_url)
        mnt_path = download_file(target_url)

        # push and grant
        subprocess.check_call(
            [_ADB, "-s", self.device_id, "push", mnt_path, config.MNT_HOME])
        subprocess.check_call([
            _ADB, "-s", self.device_id, "shell", "chmod", "777",
            config.MNT_HOME
        ])
        logger.info("minitouch already installed in {}".format(
            config.MNT_HOME))

        # remove temp
        os.remove(mnt_path)
Esempio n. 14
0
    def __init__(self, device_id):
        assert is_device_connected(device_id)

        self.device_id = device_id
        logger.info('searching a usable port ...')
        self.port = self._get_port()
        logger.info('device {} bind to port {}'.format(device_id, self.port))

        # check minitouch
        self.installer = MNTInstaller(device_id)

        # keep minitouch alive
        self._forward_port()
        self.mnt_process = None
        self._start_mnt()

        # make sure it's up
        time.sleep(1)
        assert self.heartbeat(), 'minitouch did not work. Try to install it by yourself?'
Esempio n. 15
0
    def __init__(self, device_id):
        assert is_device_connected(device_id)

        self.device_id = device_id
        logger.info("searching a usable port ...")
        self.port = self._get_port()
        logger.info("device {} bind to port {}".format(device_id, self.port))

        # check minitouch
        self.installer = MNTInstaller(device_id)

        # keep minitouch alive
        self._forward_port()
        self.mnt_process = None
        self._start_mnt()

        # make sure it's up
        time.sleep(1)
        assert (
            self.heartbeat()
        ), "minitouch did not work. see https://github.com/williamfzc/pyminitouch/issues/11"
Esempio n. 16
0
 def stop(self):
     self.mnt_process and self.mnt_process.kill()
     self._PORT_SET.add(self.port)
     logger.info('device {} unbind to {}'.format(self.device_id, self.port))
Esempio n. 17
0
 def get_abi(self):
     abi = subprocess.getoutput(
         '{} -s {} shell getprop ro.product.cpu.abi'.format(
             _ADB, self.device_id))
     logger.info('device {} is {}'.format(self.device_id, abi))
     return abi
Esempio n. 18
0
 def disconnect(self):
     self.client and self.client.close()
     self.client = None
     logger.info('minitouch disconnected')