androidtvremote2 0.0.14__tar.gz → 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {androidtvremote2-0.0.14/src/androidtvremote2.egg-info → androidtvremote2-0.1.0}/PKG-INFO +13 -5
- {androidtvremote2-0.0.14 → androidtvremote2-0.1.0}/README.md +9 -4
- {androidtvremote2-0.0.14 → androidtvremote2-0.1.0}/pyproject.toml +1 -1
- {androidtvremote2-0.0.14 → androidtvremote2-0.1.0}/src/androidtvremote2/androidtv_remote.py +6 -3
- {androidtvremote2-0.0.14 → androidtvremote2-0.1.0}/src/androidtvremote2/const.py +1 -0
- androidtvremote2-0.1.0/src/androidtvremote2/polo_pb2.pyi +287 -0
- androidtvremote2-0.1.0/src/androidtvremote2/remotemessage_pb2.pyi +2253 -0
- {androidtvremote2-0.0.14 → androidtvremote2-0.1.0/src/androidtvremote2.egg-info}/PKG-INFO +13 -5
- {androidtvremote2-0.0.14 → androidtvremote2-0.1.0}/src/androidtvremote2.egg-info/SOURCES.txt +2 -0
- {androidtvremote2-0.0.14 → androidtvremote2-0.1.0}/src/demo.py +10 -7
- {androidtvremote2-0.0.14 → androidtvremote2-0.1.0}/LICENSE +0 -0
- {androidtvremote2-0.0.14 → androidtvremote2-0.1.0}/setup.cfg +0 -0
- {androidtvremote2-0.0.14 → androidtvremote2-0.1.0}/src/androidtvremote2/__init__.py +0 -0
- {androidtvremote2-0.0.14 → androidtvremote2-0.1.0}/src/androidtvremote2/base.py +0 -0
- {androidtvremote2-0.0.14 → androidtvremote2-0.1.0}/src/androidtvremote2/certificate_generator.py +0 -0
- {androidtvremote2-0.0.14 → androidtvremote2-0.1.0}/src/androidtvremote2/exceptions.py +0 -0
- {androidtvremote2-0.0.14 → androidtvremote2-0.1.0}/src/androidtvremote2/pairing.py +0 -0
- {androidtvremote2-0.0.14 → androidtvremote2-0.1.0}/src/androidtvremote2/polo_pb2.py +0 -0
- {androidtvremote2-0.0.14 → androidtvremote2-0.1.0}/src/androidtvremote2/remote.py +0 -0
- {androidtvremote2-0.0.14 → androidtvremote2-0.1.0}/src/androidtvremote2/remotemessage_pb2.py +0 -0
- {androidtvremote2-0.0.14 → androidtvremote2-0.1.0}/src/androidtvremote2.egg-info/dependency_links.txt +0 -0
- {androidtvremote2-0.0.14 → androidtvremote2-0.1.0}/src/androidtvremote2.egg-info/requires.txt +0 -0
- {androidtvremote2-0.0.14 → androidtvremote2-0.1.0}/src/androidtvremote2.egg-info/top_level.txt +0 -0
- {androidtvremote2-0.0.14 → androidtvremote2-0.1.0}/tests/test_androidtv_remote.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: androidtvremote2
|
|
3
|
-
Version: 0.0
|
|
3
|
+
Version: 0.1.0
|
|
4
4
|
Summary: A Python library for interacting with Android TV using the Android TV Remote protocol v2
|
|
5
5
|
Author-email: tronikos <tronikos@gmail.com>
|
|
6
6
|
License: Apache-2.0
|
|
@@ -9,14 +9,17 @@ Project-URL: Bug Tracker, https://github.com/tronikos/androidtvremote2/issues
|
|
|
9
9
|
Requires-Python: >=3.10
|
|
10
10
|
Description-Content-Type: text/markdown
|
|
11
11
|
License-File: LICENSE
|
|
12
|
+
Requires-Dist: aiofiles>=0.8
|
|
13
|
+
Requires-Dist: cryptography>=3
|
|
14
|
+
Requires-Dist: protobuf>=4.21
|
|
12
15
|
|
|
13
16
|
# androidtvremote2
|
|
14
17
|
|
|
15
18
|
A Python library for interacting with Android TV using the Android TV Remote protocol v2. This is the same protocol the Google TV mobile app is using. It doesn't require ADB or enabling developer tools on the Android TV device. It only requires the [Android TV Remote Service](https://play.google.com/store/apps/details?id=com.google.android.tv.remote.service) that comes pre-installed on most Android TV devices.
|
|
16
19
|
|
|
17
20
|
For a list of the most common commands you can send to the Android TV see: [TvKeys](https://github.com/tronikos/androidtvremote2/blob/main/TvKeys.txt).
|
|
18
|
-
For a full list see [here](https://github.com/tronikos/androidtvremote2/blob/
|
|
19
|
-
In addition to commands you can send URLs to open apps registered to handle them.
|
|
21
|
+
For a full list see [here](https://github.com/tronikos/androidtvremote2/blob/b4c49ac03043b1b9c40c2f2960e466d5a3b8bd67/src/androidtvremote2/remotemessage.proto#L90).
|
|
22
|
+
In addition to commands you can send URLs to open apps registered to handle them. See [this guide](https://community.home-assistant.io/t/android-tv-remote-app-links-deep-linking-guide/567921) for how to find deep links for apps.
|
|
20
23
|
|
|
21
24
|
## Credits
|
|
22
25
|
|
|
@@ -47,8 +50,13 @@ python -m pip install .
|
|
|
47
50
|
python -m pip install grpcio-tools mypy-protobuf
|
|
48
51
|
python -m grpc_tools.protoc src/androidtvremote2/*.proto --python_out=src/androidtvremote2 --mypy_out=src/androidtvremote2 -Isrc/androidtvremote2
|
|
49
52
|
|
|
50
|
-
# Run
|
|
51
|
-
python -m pip install
|
|
53
|
+
# Run pre-commit
|
|
54
|
+
python -m pip install pre-commit
|
|
55
|
+
pre-commit install
|
|
56
|
+
pre-commit run --all-files
|
|
57
|
+
|
|
58
|
+
# Alternative: run formatter, lint, and type checking
|
|
59
|
+
python -m pip install isort black flake8 ruff mypy
|
|
52
60
|
isort . ; black . ; flake8 . ; ruff . --fix ; mypy --install-types .
|
|
53
61
|
|
|
54
62
|
# Run tests
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
A Python library for interacting with Android TV using the Android TV Remote protocol v2. This is the same protocol the Google TV mobile app is using. It doesn't require ADB or enabling developer tools on the Android TV device. It only requires the [Android TV Remote Service](https://play.google.com/store/apps/details?id=com.google.android.tv.remote.service) that comes pre-installed on most Android TV devices.
|
|
4
4
|
|
|
5
5
|
For a list of the most common commands you can send to the Android TV see: [TvKeys](https://github.com/tronikos/androidtvremote2/blob/main/TvKeys.txt).
|
|
6
|
-
For a full list see [here](https://github.com/tronikos/androidtvremote2/blob/
|
|
7
|
-
In addition to commands you can send URLs to open apps registered to handle them.
|
|
6
|
+
For a full list see [here](https://github.com/tronikos/androidtvremote2/blob/b4c49ac03043b1b9c40c2f2960e466d5a3b8bd67/src/androidtvremote2/remotemessage.proto#L90).
|
|
7
|
+
In addition to commands you can send URLs to open apps registered to handle them. See [this guide](https://community.home-assistant.io/t/android-tv-remote-app-links-deep-linking-guide/567921) for how to find deep links for apps.
|
|
8
8
|
|
|
9
9
|
## Credits
|
|
10
10
|
|
|
@@ -35,8 +35,13 @@ python -m pip install .
|
|
|
35
35
|
python -m pip install grpcio-tools mypy-protobuf
|
|
36
36
|
python -m grpc_tools.protoc src/androidtvremote2/*.proto --python_out=src/androidtvremote2 --mypy_out=src/androidtvremote2 -Isrc/androidtvremote2
|
|
37
37
|
|
|
38
|
-
# Run
|
|
39
|
-
python -m pip install
|
|
38
|
+
# Run pre-commit
|
|
39
|
+
python -m pip install pre-commit
|
|
40
|
+
pre-commit install
|
|
41
|
+
pre-commit run --all-files
|
|
42
|
+
|
|
43
|
+
# Alternative: run formatter, lint, and type checking
|
|
44
|
+
python -m pip install isort black flake8 ruff mypy
|
|
40
45
|
isort . ; black . ; flake8 . ; ruff . --fix ; mypy --install-types .
|
|
41
46
|
|
|
42
47
|
# Run tests
|
|
@@ -254,7 +254,7 @@ class AndroidTVRemote:
|
|
|
254
254
|
await self.async_connect()
|
|
255
255
|
self._on_is_available_updated(True)
|
|
256
256
|
break
|
|
257
|
-
except CannotConnect as exc:
|
|
257
|
+
except (CannotConnect, ConnectionClosed) as exc:
|
|
258
258
|
delay_seconds = min(2 * delay_seconds, 30)
|
|
259
259
|
LOGGER.debug(
|
|
260
260
|
"Couldn't reconnect to %s. Will retry in %s seconds. Error: %s",
|
|
@@ -387,7 +387,7 @@ class AndroidTVRemote:
|
|
|
387
387
|
raise ConnectionClosed("Called send_key_command after disconnect")
|
|
388
388
|
self._remote_message_protocol.send_key_command(key_code, direction)
|
|
389
389
|
|
|
390
|
-
def send_launch_app_command(self,
|
|
390
|
+
def send_launch_app_command(self, app_link_or_app_id: str) -> None:
|
|
391
391
|
"""Launch an app on Android TV.
|
|
392
392
|
|
|
393
393
|
This does not block; it buffers the data and arranges for it to be sent out asynchronously.
|
|
@@ -397,4 +397,7 @@ class AndroidTVRemote:
|
|
|
397
397
|
if not self._remote_message_protocol:
|
|
398
398
|
LOGGER.debug("Called send_launch_app_command after disconnect")
|
|
399
399
|
raise ConnectionClosed("Called send_launch_app_command after disconnect")
|
|
400
|
-
|
|
400
|
+
prefix = "" if "://" in app_link_or_app_id else "market://launch?id="
|
|
401
|
+
self._remote_message_protocol.send_launch_app_command(
|
|
402
|
+
f"{prefix}{app_link_or_app_id}"
|
|
403
|
+
)
|
|
@@ -0,0 +1,287 @@
|
|
|
1
|
+
"""
|
|
2
|
+
@generated by mypy-protobuf. Do not edit manually!
|
|
3
|
+
isort:skip_file
|
|
4
|
+
Copyright 2009 Google Inc. All Rights Reserved."""
|
|
5
|
+
import builtins
|
|
6
|
+
import collections.abc
|
|
7
|
+
import google.protobuf.descriptor
|
|
8
|
+
import google.protobuf.internal.containers
|
|
9
|
+
import google.protobuf.internal.enum_type_wrapper
|
|
10
|
+
import google.protobuf.message
|
|
11
|
+
import sys
|
|
12
|
+
import typing
|
|
13
|
+
|
|
14
|
+
if sys.version_info >= (3, 10):
|
|
15
|
+
import typing as typing_extensions
|
|
16
|
+
else:
|
|
17
|
+
import typing_extensions
|
|
18
|
+
|
|
19
|
+
DESCRIPTOR: google.protobuf.descriptor.FileDescriptor
|
|
20
|
+
|
|
21
|
+
@typing_extensions.final
|
|
22
|
+
class OuterMessage(google.protobuf.message.Message):
|
|
23
|
+
"""OuterMessage - base outer message type used in the protocol."""
|
|
24
|
+
|
|
25
|
+
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
26
|
+
|
|
27
|
+
class _Status:
|
|
28
|
+
ValueType = typing.NewType("ValueType", builtins.int)
|
|
29
|
+
V: typing_extensions.TypeAlias = ValueType
|
|
30
|
+
|
|
31
|
+
class _StatusEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[OuterMessage._Status.ValueType], builtins.type):
|
|
32
|
+
DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
|
|
33
|
+
STATUS_OK: OuterMessage._Status.ValueType # 200
|
|
34
|
+
STATUS_ERROR: OuterMessage._Status.ValueType # 400
|
|
35
|
+
STATUS_BAD_CONFIGURATION: OuterMessage._Status.ValueType # 401
|
|
36
|
+
STATUS_BAD_SECRET: OuterMessage._Status.ValueType # 402
|
|
37
|
+
|
|
38
|
+
class Status(_Status, metaclass=_StatusEnumTypeWrapper):
|
|
39
|
+
"""Protocol status states."""
|
|
40
|
+
|
|
41
|
+
STATUS_OK: OuterMessage.Status.ValueType # 200
|
|
42
|
+
STATUS_ERROR: OuterMessage.Status.ValueType # 400
|
|
43
|
+
STATUS_BAD_CONFIGURATION: OuterMessage.Status.ValueType # 401
|
|
44
|
+
STATUS_BAD_SECRET: OuterMessage.Status.ValueType # 402
|
|
45
|
+
|
|
46
|
+
PROTOCOL_VERSION_FIELD_NUMBER: builtins.int
|
|
47
|
+
STATUS_FIELD_NUMBER: builtins.int
|
|
48
|
+
PAIRING_REQUEST_FIELD_NUMBER: builtins.int
|
|
49
|
+
PAIRING_REQUEST_ACK_FIELD_NUMBER: builtins.int
|
|
50
|
+
OPTIONS_FIELD_NUMBER: builtins.int
|
|
51
|
+
CONFIGURATION_FIELD_NUMBER: builtins.int
|
|
52
|
+
CONFIGURATION_ACK_FIELD_NUMBER: builtins.int
|
|
53
|
+
SECRET_FIELD_NUMBER: builtins.int
|
|
54
|
+
SECRET_ACK_FIELD_NUMBER: builtins.int
|
|
55
|
+
protocol_version: builtins.int
|
|
56
|
+
status: global___OuterMessage.Status.ValueType
|
|
57
|
+
"""Protocol status. Any status other than STATUS_OK implies a fault."""
|
|
58
|
+
@property
|
|
59
|
+
def pairing_request(self) -> global___PairingRequest:
|
|
60
|
+
"""Initialization phase"""
|
|
61
|
+
@property
|
|
62
|
+
def pairing_request_ack(self) -> global___PairingRequestAck: ...
|
|
63
|
+
@property
|
|
64
|
+
def options(self) -> global___Options:
|
|
65
|
+
"""Configuration phase"""
|
|
66
|
+
@property
|
|
67
|
+
def configuration(self) -> global___Configuration: ...
|
|
68
|
+
@property
|
|
69
|
+
def configuration_ack(self) -> global___ConfigurationAck: ...
|
|
70
|
+
@property
|
|
71
|
+
def secret(self) -> global___Secret:
|
|
72
|
+
"""Pairing phase"""
|
|
73
|
+
@property
|
|
74
|
+
def secret_ack(self) -> global___SecretAck: ...
|
|
75
|
+
def __init__(
|
|
76
|
+
self,
|
|
77
|
+
*,
|
|
78
|
+
protocol_version: builtins.int | None = ...,
|
|
79
|
+
status: global___OuterMessage.Status.ValueType | None = ...,
|
|
80
|
+
pairing_request: global___PairingRequest | None = ...,
|
|
81
|
+
pairing_request_ack: global___PairingRequestAck | None = ...,
|
|
82
|
+
options: global___Options | None = ...,
|
|
83
|
+
configuration: global___Configuration | None = ...,
|
|
84
|
+
configuration_ack: global___ConfigurationAck | None = ...,
|
|
85
|
+
secret: global___Secret | None = ...,
|
|
86
|
+
secret_ack: global___SecretAck | None = ...,
|
|
87
|
+
) -> None: ...
|
|
88
|
+
def HasField(self, field_name: typing_extensions.Literal["configuration", b"configuration", "configuration_ack", b"configuration_ack", "options", b"options", "pairing_request", b"pairing_request", "pairing_request_ack", b"pairing_request_ack", "protocol_version", b"protocol_version", "secret", b"secret", "secret_ack", b"secret_ack", "status", b"status"]) -> builtins.bool: ...
|
|
89
|
+
def ClearField(self, field_name: typing_extensions.Literal["configuration", b"configuration", "configuration_ack", b"configuration_ack", "options", b"options", "pairing_request", b"pairing_request", "pairing_request_ack", b"pairing_request_ack", "protocol_version", b"protocol_version", "secret", b"secret", "secret_ack", b"secret_ack", "status", b"status"]) -> None: ...
|
|
90
|
+
|
|
91
|
+
global___OuterMessage = OuterMessage
|
|
92
|
+
|
|
93
|
+
@typing_extensions.final
|
|
94
|
+
class PairingRequest(google.protobuf.message.Message):
|
|
95
|
+
"""
|
|
96
|
+
Initialization messages
|
|
97
|
+
"""
|
|
98
|
+
|
|
99
|
+
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
100
|
+
|
|
101
|
+
SERVICE_NAME_FIELD_NUMBER: builtins.int
|
|
102
|
+
CLIENT_NAME_FIELD_NUMBER: builtins.int
|
|
103
|
+
service_name: builtins.str
|
|
104
|
+
"""String name of the service to pair with. The name used should be an
|
|
105
|
+
established convention of the application protocol.
|
|
106
|
+
"""
|
|
107
|
+
client_name: builtins.str
|
|
108
|
+
"""Descriptive name of the client."""
|
|
109
|
+
def __init__(
|
|
110
|
+
self,
|
|
111
|
+
*,
|
|
112
|
+
service_name: builtins.str | None = ...,
|
|
113
|
+
client_name: builtins.str | None = ...,
|
|
114
|
+
) -> None: ...
|
|
115
|
+
def HasField(self, field_name: typing_extensions.Literal["client_name", b"client_name", "service_name", b"service_name"]) -> builtins.bool: ...
|
|
116
|
+
def ClearField(self, field_name: typing_extensions.Literal["client_name", b"client_name", "service_name", b"service_name"]) -> None: ...
|
|
117
|
+
|
|
118
|
+
global___PairingRequest = PairingRequest
|
|
119
|
+
|
|
120
|
+
@typing_extensions.final
|
|
121
|
+
class PairingRequestAck(google.protobuf.message.Message):
|
|
122
|
+
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
123
|
+
|
|
124
|
+
SERVER_NAME_FIELD_NUMBER: builtins.int
|
|
125
|
+
server_name: builtins.str
|
|
126
|
+
"""Descriptive name of the server."""
|
|
127
|
+
def __init__(
|
|
128
|
+
self,
|
|
129
|
+
*,
|
|
130
|
+
server_name: builtins.str | None = ...,
|
|
131
|
+
) -> None: ...
|
|
132
|
+
def HasField(self, field_name: typing_extensions.Literal["server_name", b"server_name"]) -> builtins.bool: ...
|
|
133
|
+
def ClearField(self, field_name: typing_extensions.Literal["server_name", b"server_name"]) -> None: ...
|
|
134
|
+
|
|
135
|
+
global___PairingRequestAck = PairingRequestAck
|
|
136
|
+
|
|
137
|
+
@typing_extensions.final
|
|
138
|
+
class Options(google.protobuf.message.Message):
|
|
139
|
+
"""
|
|
140
|
+
Configuration messages
|
|
141
|
+
"""
|
|
142
|
+
|
|
143
|
+
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
144
|
+
|
|
145
|
+
class _RoleType:
|
|
146
|
+
ValueType = typing.NewType("ValueType", builtins.int)
|
|
147
|
+
V: typing_extensions.TypeAlias = ValueType
|
|
148
|
+
|
|
149
|
+
class _RoleTypeEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[Options._RoleType.ValueType], builtins.type):
|
|
150
|
+
DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
|
|
151
|
+
ROLE_TYPE_UNKNOWN: Options._RoleType.ValueType # 0
|
|
152
|
+
ROLE_TYPE_INPUT: Options._RoleType.ValueType # 1
|
|
153
|
+
ROLE_TYPE_OUTPUT: Options._RoleType.ValueType # 2
|
|
154
|
+
|
|
155
|
+
class RoleType(_RoleType, metaclass=_RoleTypeEnumTypeWrapper): ...
|
|
156
|
+
ROLE_TYPE_UNKNOWN: Options.RoleType.ValueType # 0
|
|
157
|
+
ROLE_TYPE_INPUT: Options.RoleType.ValueType # 1
|
|
158
|
+
ROLE_TYPE_OUTPUT: Options.RoleType.ValueType # 2
|
|
159
|
+
|
|
160
|
+
@typing_extensions.final
|
|
161
|
+
class Encoding(google.protobuf.message.Message):
|
|
162
|
+
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
163
|
+
|
|
164
|
+
class _EncodingType:
|
|
165
|
+
ValueType = typing.NewType("ValueType", builtins.int)
|
|
166
|
+
V: typing_extensions.TypeAlias = ValueType
|
|
167
|
+
|
|
168
|
+
class _EncodingTypeEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[Options.Encoding._EncodingType.ValueType], builtins.type):
|
|
169
|
+
DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
|
|
170
|
+
ENCODING_TYPE_UNKNOWN: Options.Encoding._EncodingType.ValueType # 0
|
|
171
|
+
ENCODING_TYPE_ALPHANUMERIC: Options.Encoding._EncodingType.ValueType # 1
|
|
172
|
+
ENCODING_TYPE_NUMERIC: Options.Encoding._EncodingType.ValueType # 2
|
|
173
|
+
ENCODING_TYPE_HEXADECIMAL: Options.Encoding._EncodingType.ValueType # 3
|
|
174
|
+
ENCODING_TYPE_QRCODE: Options.Encoding._EncodingType.ValueType # 4
|
|
175
|
+
|
|
176
|
+
class EncodingType(_EncodingType, metaclass=_EncodingTypeEnumTypeWrapper): ...
|
|
177
|
+
ENCODING_TYPE_UNKNOWN: Options.Encoding.EncodingType.ValueType # 0
|
|
178
|
+
ENCODING_TYPE_ALPHANUMERIC: Options.Encoding.EncodingType.ValueType # 1
|
|
179
|
+
ENCODING_TYPE_NUMERIC: Options.Encoding.EncodingType.ValueType # 2
|
|
180
|
+
ENCODING_TYPE_HEXADECIMAL: Options.Encoding.EncodingType.ValueType # 3
|
|
181
|
+
ENCODING_TYPE_QRCODE: Options.Encoding.EncodingType.ValueType # 4
|
|
182
|
+
|
|
183
|
+
TYPE_FIELD_NUMBER: builtins.int
|
|
184
|
+
SYMBOL_LENGTH_FIELD_NUMBER: builtins.int
|
|
185
|
+
type: global___Options.Encoding.EncodingType.ValueType
|
|
186
|
+
symbol_length: builtins.int
|
|
187
|
+
def __init__(
|
|
188
|
+
self,
|
|
189
|
+
*,
|
|
190
|
+
type: global___Options.Encoding.EncodingType.ValueType | None = ...,
|
|
191
|
+
symbol_length: builtins.int | None = ...,
|
|
192
|
+
) -> None: ...
|
|
193
|
+
def HasField(self, field_name: typing_extensions.Literal["symbol_length", b"symbol_length", "type", b"type"]) -> builtins.bool: ...
|
|
194
|
+
def ClearField(self, field_name: typing_extensions.Literal["symbol_length", b"symbol_length", "type", b"type"]) -> None: ...
|
|
195
|
+
|
|
196
|
+
INPUT_ENCODINGS_FIELD_NUMBER: builtins.int
|
|
197
|
+
OUTPUT_ENCODINGS_FIELD_NUMBER: builtins.int
|
|
198
|
+
PREFERRED_ROLE_FIELD_NUMBER: builtins.int
|
|
199
|
+
@property
|
|
200
|
+
def input_encodings(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___Options.Encoding]:
|
|
201
|
+
"""List of encodings this endpoint accepts when serving as an input device."""
|
|
202
|
+
@property
|
|
203
|
+
def output_encodings(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___Options.Encoding]:
|
|
204
|
+
"""List of encodings this endpoint can generate as an output device."""
|
|
205
|
+
preferred_role: global___Options.RoleType.ValueType
|
|
206
|
+
"""Preferred role, if any."""
|
|
207
|
+
def __init__(
|
|
208
|
+
self,
|
|
209
|
+
*,
|
|
210
|
+
input_encodings: collections.abc.Iterable[global___Options.Encoding] | None = ...,
|
|
211
|
+
output_encodings: collections.abc.Iterable[global___Options.Encoding] | None = ...,
|
|
212
|
+
preferred_role: global___Options.RoleType.ValueType | None = ...,
|
|
213
|
+
) -> None: ...
|
|
214
|
+
def HasField(self, field_name: typing_extensions.Literal["preferred_role", b"preferred_role"]) -> builtins.bool: ...
|
|
215
|
+
def ClearField(self, field_name: typing_extensions.Literal["input_encodings", b"input_encodings", "output_encodings", b"output_encodings", "preferred_role", b"preferred_role"]) -> None: ...
|
|
216
|
+
|
|
217
|
+
global___Options = Options
|
|
218
|
+
|
|
219
|
+
@typing_extensions.final
|
|
220
|
+
class Configuration(google.protobuf.message.Message):
|
|
221
|
+
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
222
|
+
|
|
223
|
+
ENCODING_FIELD_NUMBER: builtins.int
|
|
224
|
+
CLIENT_ROLE_FIELD_NUMBER: builtins.int
|
|
225
|
+
@property
|
|
226
|
+
def encoding(self) -> global___Options.Encoding:
|
|
227
|
+
"""The encoding to be used in this session."""
|
|
228
|
+
client_role: global___Options.RoleType.ValueType
|
|
229
|
+
"""The role of the client (ie, the one initiating pairing). This implies the
|
|
230
|
+
peer (server) acts as the complementary role.
|
|
231
|
+
"""
|
|
232
|
+
def __init__(
|
|
233
|
+
self,
|
|
234
|
+
*,
|
|
235
|
+
encoding: global___Options.Encoding | None = ...,
|
|
236
|
+
client_role: global___Options.RoleType.ValueType | None = ...,
|
|
237
|
+
) -> None: ...
|
|
238
|
+
def HasField(self, field_name: typing_extensions.Literal["client_role", b"client_role", "encoding", b"encoding"]) -> builtins.bool: ...
|
|
239
|
+
def ClearField(self, field_name: typing_extensions.Literal["client_role", b"client_role", "encoding", b"encoding"]) -> None: ...
|
|
240
|
+
|
|
241
|
+
global___Configuration = Configuration
|
|
242
|
+
|
|
243
|
+
@typing_extensions.final
|
|
244
|
+
class ConfigurationAck(google.protobuf.message.Message):
|
|
245
|
+
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
246
|
+
|
|
247
|
+
def __init__(
|
|
248
|
+
self,
|
|
249
|
+
) -> None: ...
|
|
250
|
+
|
|
251
|
+
global___ConfigurationAck = ConfigurationAck
|
|
252
|
+
|
|
253
|
+
@typing_extensions.final
|
|
254
|
+
class Secret(google.protobuf.message.Message):
|
|
255
|
+
"""
|
|
256
|
+
Pairing messages
|
|
257
|
+
"""
|
|
258
|
+
|
|
259
|
+
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
260
|
+
|
|
261
|
+
SECRET_FIELD_NUMBER: builtins.int
|
|
262
|
+
secret: builtins.bytes
|
|
263
|
+
def __init__(
|
|
264
|
+
self,
|
|
265
|
+
*,
|
|
266
|
+
secret: builtins.bytes | None = ...,
|
|
267
|
+
) -> None: ...
|
|
268
|
+
def HasField(self, field_name: typing_extensions.Literal["secret", b"secret"]) -> builtins.bool: ...
|
|
269
|
+
def ClearField(self, field_name: typing_extensions.Literal["secret", b"secret"]) -> None: ...
|
|
270
|
+
|
|
271
|
+
global___Secret = Secret
|
|
272
|
+
|
|
273
|
+
@typing_extensions.final
|
|
274
|
+
class SecretAck(google.protobuf.message.Message):
|
|
275
|
+
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
276
|
+
|
|
277
|
+
SECRET_FIELD_NUMBER: builtins.int
|
|
278
|
+
secret: builtins.bytes
|
|
279
|
+
def __init__(
|
|
280
|
+
self,
|
|
281
|
+
*,
|
|
282
|
+
secret: builtins.bytes | None = ...,
|
|
283
|
+
) -> None: ...
|
|
284
|
+
def HasField(self, field_name: typing_extensions.Literal["secret", b"secret"]) -> builtins.bool: ...
|
|
285
|
+
def ClearField(self, field_name: typing_extensions.Literal["secret", b"secret"]) -> None: ...
|
|
286
|
+
|
|
287
|
+
global___SecretAck = SecretAck
|