-
Notifications
You must be signed in to change notification settings - Fork 56
/
setup_async.py
97 lines (82 loc) · 3.33 KB
/
setup_async.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
"""Connect to a device and determine whether it's an Android TV or an Amazon Fire TV.
ADB Debugging must be enabled.
"""
from .androidtv.androidtv_async import AndroidTVAsync
from .basetv.basetv_async import BaseTVAsync
from .constants import DEFAULT_AUTH_TIMEOUT_S, DEFAULT_TRANSPORT_TIMEOUT_S
from .firetv.firetv_async import FireTVAsync
async def setup(
host,
port=5555,
adbkey="",
adb_server_ip="",
adb_server_port=5037,
state_detection_rules=None,
device_class="auto",
auth_timeout_s=DEFAULT_AUTH_TIMEOUT_S,
signer=None,
transport_timeout_s=DEFAULT_TRANSPORT_TIMEOUT_S,
log_errors=True,
):
"""Connect to a device and determine whether it's an Android TV or an Amazon Fire TV.
Parameters
----------
host : str
The address of the device; may be an IP address or a host name
port : int
The device port to which we are connecting (default is 5555)
adbkey : str
The path to the ``adbkey`` file for ADB authentication
adb_server_ip : str
The IP address of the ADB server
adb_server_port : int
The port for the ADB server
state_detection_rules : dict, None
A dictionary of rules for determining the state (see :class:`~androidtv.basetv.basetv.BaseTV`)
device_class : str
The type of device: ``'auto'`` (detect whether it is an Android TV or Fire TV device), ``'androidtv'``, or ``'firetv'```
auth_timeout_s : float
Authentication timeout (in seconds)
signer : PythonRSASigner, None
The signer for the ADB keys, as loaded by :meth:`androidtv.adb_manager.adb_manager_async.ADBPythonAsync.load_adbkey`
transport_timeout_s : float
Transport timeout (in seconds)
log_errors: bool
Whether connection errors should be logged
Returns
-------
AndroidTVAsync, FireTVAsync
The representation of the device
"""
if device_class == "androidtv":
atv = AndroidTVAsync(host, port, adbkey, adb_server_ip, adb_server_port, state_detection_rules, signer)
await atv.adb_connect(
log_errors=log_errors, auth_timeout_s=auth_timeout_s, transport_timeout_s=transport_timeout_s
)
await atv.get_device_properties()
await atv.get_installed_apps()
return atv
if device_class == "firetv":
ftv = FireTVAsync(host, port, adbkey, adb_server_ip, adb_server_port, state_detection_rules, signer)
await ftv.adb_connect(
log_errors=log_errors, auth_timeout_s=auth_timeout_s, transport_timeout_s=transport_timeout_s
)
await ftv.get_device_properties()
await ftv.get_installed_apps()
return ftv
if device_class != "auto":
raise ValueError("`device_class` must be 'androidtv', 'firetv', or 'auto'.")
aftv = BaseTVAsync(host, port, adbkey, adb_server_ip, adb_server_port, state_detection_rules, signer)
# establish the ADB connection
await aftv.adb_connect(
log_errors=log_errors, auth_timeout_s=auth_timeout_s, transport_timeout_s=transport_timeout_s
)
# get device properties
await aftv.get_device_properties()
# get the installed apps
await aftv.get_installed_apps()
# Fire TV
if aftv.device_properties.get("manufacturer") == "Amazon":
return FireTVAsync.from_base(aftv)
# Android TV
return AndroidTVAsync.from_base(aftv)