insta360 0.1.0__py3-none-any.whl

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.
Files changed (127) hide show
  1. insta360/osc.py +342 -0
  2. insta360/pb2/active_sensor_device_pb2.py +33 -0
  3. insta360/pb2/authorization_operation_type_pb2.py +25 -0
  4. insta360/pb2/authorization_result_pb2.py +29 -0
  5. insta360/pb2/battery_low_pb2.py +27 -0
  6. insta360/pb2/battery_pb2.py +29 -0
  7. insta360/pb2/battery_update_pb2.py +27 -0
  8. insta360/pb2/bluetooth_pb2.py +27 -0
  9. insta360/pb2/bt_central_notification_pb2.py +31 -0
  10. insta360/pb2/bt_central_pb2.py +35 -0
  11. insta360/pb2/button_press_params_pb2.py +29 -0
  12. insta360/pb2/button_press_pb2.py +33 -0
  13. insta360/pb2/calibrate_gyro_pb2.py +25 -0
  14. insta360/pb2/camera_posture_pb2.py +27 -0
  15. insta360/pb2/camera_submode_pb2.py +29 -0
  16. insta360/pb2/camera_wifi_connection_result_pb2.py +29 -0
  17. insta360/pb2/cancel_capture_pb2.py +27 -0
  18. insta360/pb2/cancel_request_authorization_pb2.py +27 -0
  19. insta360/pb2/capture_auto_split_pb2.py +27 -0
  20. insta360/pb2/capture_state_pb2.py +27 -0
  21. insta360/pb2/capture_stopped_pb2.py +29 -0
  22. insta360/pb2/chargebox_pb2.py +33 -0
  23. insta360/pb2/charging_command_type_pb2.py +25 -0
  24. insta360/pb2/check_authorization_pb2.py +29 -0
  25. insta360/pb2/close_camera_oled_pb2.py +27 -0
  26. insta360/pb2/current_capture_status_pb2.py +27 -0
  27. insta360/pb2/darkeis_status_pb2.py +27 -0
  28. insta360/pb2/delete_file_operation_pb2.py +25 -0
  29. insta360/pb2/delete_files_pb2.py +27 -0
  30. insta360/pb2/detect_face_pb2.py +25 -0
  31. insta360/pb2/download_info_pb2.py +33 -0
  32. insta360/pb2/error_pb2.py +27 -0
  33. insta360/pb2/exposure_pb2.py +27 -0
  34. insta360/pb2/exposure_update_pb2.py +28 -0
  35. insta360/pb2/extra_info_pb2.py +103 -0
  36. insta360/pb2/file_type_pb2.py +25 -0
  37. insta360/pb2/fileinfo_list_pb2.py +27 -0
  38. insta360/pb2/flicker_pb2.py +25 -0
  39. insta360/pb2/fw_upgrade_state_pb2.py +27 -0
  40. insta360/pb2/get_button_press_params_pb2.py +30 -0
  41. insta360/pb2/get_current_button_status_pb2.py +31 -0
  42. insta360/pb2/get_current_capture_status_pb2.py +29 -0
  43. insta360/pb2/get_file_extra_pb2.py +34 -0
  44. insta360/pb2/get_file_finish_pb2.py +28 -0
  45. insta360/pb2/get_file_list_pb2.py +29 -0
  46. insta360/pb2/get_file_pb2.py +29 -0
  47. insta360/pb2/get_flowstate_enable_pb2.py +27 -0
  48. insta360/pb2/get_gyro_pb2.py +27 -0
  49. insta360/pb2/get_mini_thumbnail_pb2.py +25 -0
  50. insta360/pb2/get_multi_photography_options_pb2.py +30 -0
  51. insta360/pb2/get_options_pb2.py +29 -0
  52. insta360/pb2/get_photography_options_pb2.py +30 -0
  53. insta360/pb2/get_sfr_result_pb2.py +25 -0
  54. insta360/pb2/get_sfr_status_pb2.py +25 -0
  55. insta360/pb2/get_sync_capture_mode_pb2.py +29 -0
  56. insta360/pb2/get_timelapse_options_pb2.py +29 -0
  57. insta360/pb2/get_whiteblance_status_pb2.py +27 -0
  58. insta360/pb2/get_wifi_connection_info_pb2.py +29 -0
  59. insta360/pb2/heat_shell_pb2.py +25 -0
  60. insta360/pb2/key_pressed_pb2.py +27 -0
  61. insta360/pb2/live_stream_params_update_pb2.py +28 -0
  62. insta360/pb2/media_pb2.py +33 -0
  63. insta360/pb2/message_code_pb2.py +25 -0
  64. insta360/pb2/multi_photography_options_pb2.py +33 -0
  65. insta360/pb2/offset_state_pb2.py +27 -0
  66. insta360/pb2/open_camera_oled_pb2.py +27 -0
  67. insta360/pb2/open_iperf_service_pb2.py +27 -0
  68. insta360/pb2/options_pb2.py +87 -0
  69. insta360/pb2/photo_pb2.py +31 -0
  70. insta360/pb2/photography_options_pb2.py +69 -0
  71. insta360/pb2/request_authorization_pb2.py +27 -0
  72. insta360/pb2/sd_card_speed_pb2.py +27 -0
  73. insta360/pb2/sensor_pb2.py +31 -0
  74. insta360/pb2/set_access_camera_file_state_pb2.py +29 -0
  75. insta360/pb2/set_appid_pb2.py +27 -0
  76. insta360/pb2/set_button_press_params_pb2.py +30 -0
  77. insta360/pb2/set_charging_data_pb2.py +27 -0
  78. insta360/pb2/set_file_extra_pb2.py +28 -0
  79. insta360/pb2/set_flowstate_enable_pb2.py +27 -0
  80. insta360/pb2/set_key_time_point_pb2.py +31 -0
  81. insta360/pb2/set_multi_photography_options_pb2.py +30 -0
  82. insta360/pb2/set_options_pb2.py +29 -0
  83. insta360/pb2/set_photography_options_pb2.py +30 -0
  84. insta360/pb2/set_standby_mode_pb2.py +29 -0
  85. insta360/pb2/set_sync_capture_mode_pb2.py +29 -0
  86. insta360/pb2/set_timelapse_options_pb2.py +29 -0
  87. insta360/pb2/set_wifi_connection_info_pb2.py +29 -0
  88. insta360/pb2/set_wifi_seize_pb2.py +29 -0
  89. insta360/pb2/shutdown_pb2.py +27 -0
  90. insta360/pb2/start_bullettime_pb2.py +27 -0
  91. insta360/pb2/start_capture_pb2.py +29 -0
  92. insta360/pb2/start_hdr_pb2.py +27 -0
  93. insta360/pb2/start_live_stream_pb2.py +30 -0
  94. insta360/pb2/start_timelapse_pb2.py +30 -0
  95. insta360/pb2/start_timeshift_pb2.py +27 -0
  96. insta360/pb2/stop_bullettime_pb2.py +30 -0
  97. insta360/pb2/stop_capture_pb2.py +31 -0
  98. insta360/pb2/stop_hdr_pb2.py +30 -0
  99. insta360/pb2/stop_live_stream_pb2.py +27 -0
  100. insta360/pb2/stop_timelapse_pb2.py +31 -0
  101. insta360/pb2/stop_timeshift_pb2.py +30 -0
  102. insta360/pb2/storage_pb2.py +29 -0
  103. insta360/pb2/storage_update_pb2.py +27 -0
  104. insta360/pb2/support_take_photo_on_rec_pb2.py +27 -0
  105. insta360/pb2/sync_capture_mode_pb2.py +25 -0
  106. insta360/pb2/sync_capture_mode_update_pb2.py +25 -0
  107. insta360/pb2/take_picture_pb2.py +34 -0
  108. insta360/pb2/take_picture_state_update_pb2.py +27 -0
  109. insta360/pb2/temperature_pb2.py +27 -0
  110. insta360/pb2/timelapse_pb2.py +29 -0
  111. insta360/pb2/timelapse_status_update_pb2.py +25 -0
  112. insta360/pb2/track_pb2.py +31 -0
  113. insta360/pb2/upload_gps_pb2.py +27 -0
  114. insta360/pb2/video_pb2.py +31 -0
  115. insta360/pb2/wifi_connection_info_pb2.py +25 -0
  116. insta360/pb2/window_crop_info_pb2.py +25 -0
  117. insta360/rtmp.py +1121 -0
  118. insta360/utils/extract-proto-and-compile +33 -0
  119. insta360/utils/from_binary.py +81 -0
  120. insta360/utils/sample_generator.py +0 -0
  121. insta360/utils/utilities.py +66 -0
  122. insta360/utils/utils/common.py +263 -0
  123. insta360/utils/utils/descpb_to_proto.py +241 -0
  124. insta360-0.1.0.dist-info/LICENSE +674 -0
  125. insta360-0.1.0.dist-info/METADATA +208 -0
  126. insta360-0.1.0.dist-info/RECORD +127 -0
  127. insta360-0.1.0.dist-info/WHEEL +4 -0
insta360/osc.py ADDED
@@ -0,0 +1,342 @@
1
+ """
2
+ osc module for Insta360 is based on [Open Spherical Camera API](https://developers.google.com/streetview/open-spherical-camera) specification.
3
+
4
+ Classes:
5
+ Client: osc (open spherical camera) client to interact with the camera.
6
+ """
7
+
8
+ import requests
9
+ import logging
10
+ import base64
11
+
12
+ from enum import Enum
13
+ from pydantic import BaseModel
14
+
15
+
16
+ class ListFileType(Enum):
17
+ """
18
+ Enum for listing file types.
19
+
20
+ Attributes:
21
+ IMAGE: Image files.
22
+ VIDEO: Video files.
23
+ ALL: All files.
24
+ """
25
+
26
+ IMAGE: str = 'image'
27
+ VIDEO: str = 'video'
28
+ ALL: str = 'all'
29
+
30
+
31
+ class Thumbnail(BaseModel):
32
+ """
33
+ Model for thumbnail of a file.
34
+
35
+ Attributes:
36
+ base64: Base64 encoded thumbnail.
37
+ content: Decoded content of the thumbnail.
38
+ """
39
+
40
+ def __init__(self, **data):
41
+ super().__init__(**data)
42
+ self.base64: str | None = data.get('thumbnail', None)
43
+ self.content: bytes | None = None
44
+
45
+ if self.base64 == "":
46
+ self.base64 = None
47
+
48
+ if self.base64:
49
+ thumbnail_bytes = self.base64.encode()
50
+ self.content = base64.b64decode(thumbnail_bytes)
51
+
52
+
53
+ class Config:
54
+ extra = 'allow'
55
+
56
+
57
+ class Entry(BaseModel):
58
+ """
59
+ Model for file entries in list files response.
60
+
61
+ Attributes:
62
+ name: Name of the file.
63
+ fileUrl: URL of the file.
64
+ localFileUrl: Local URL of the file.
65
+ size: Size of the file.
66
+ width: Width of the file.
67
+ height: Height of the file.
68
+ dateTimeZone: Date time zone of the file.
69
+ dateTime: Date time of the file.
70
+ thumbnailSize: Thumbnail size of the file.
71
+ isProcessed: Is the file processed.
72
+ previewUrl: URL of the preview.
73
+ thumbnail: Thumbnail object.
74
+ """
75
+
76
+ name: str
77
+ fileUrl: str
78
+ size: int
79
+ width: int
80
+ height: int
81
+ dateTimeZone: str
82
+ isProcessed: bool
83
+ previewUrl: str
84
+
85
+ def __init__(self, **data):
86
+ super().__init__(**data)
87
+ self.localFileUrl: str | None = data.get('_localFileUrl', None)
88
+ self.dateTime: str | None = data.get('_dateTime', None)
89
+ self.thumbnailSize: int | None = data.get('_thumbnailSize', None)
90
+ self.thumbnail: Thumbnail = Thumbnail(**data)
91
+
92
+
93
+ class Config:
94
+ extra = 'allow'
95
+
96
+
97
+ class ListFilesResults(BaseModel):
98
+ """
99
+ Model for results of list files response.
100
+
101
+ Attributes:
102
+ entries: List of file entries.
103
+ totalEntries: Total number of entries.
104
+ """
105
+
106
+ entries: list[Entry]
107
+ totalEntries: int
108
+
109
+
110
+ class DeleteFilesResults(BaseModel):
111
+ """
112
+ Model for results of delete files response.
113
+
114
+ Attributes:
115
+ fileUrls: List of file URLs.
116
+ """
117
+
118
+ fileUrls: list[str]
119
+
120
+
121
+ class OSCResponse(BaseModel):
122
+ """
123
+ Model for list files response.
124
+
125
+ Attributes:
126
+ name: Name of the response.
127
+ state: State of the response.
128
+ """
129
+
130
+ name: str
131
+ state: str
132
+
133
+
134
+ class Error(BaseModel):
135
+ """
136
+ Model for osc error.
137
+
138
+ Attributes:
139
+ code: Error code.
140
+ message: Error message.
141
+ """
142
+
143
+ code: str
144
+ message: str
145
+
146
+
147
+ class ErrorResponse(BaseModel):
148
+ """
149
+ Model for osc error response.
150
+
151
+ Attributes:
152
+ error: osc error.
153
+ """
154
+
155
+ error: Error
156
+
157
+
158
+ class ListFilesResponse(OSCResponse):
159
+ """
160
+ Model for list files response.
161
+
162
+ Attributes:
163
+ results: List files results.
164
+ """
165
+
166
+ results: ListFilesResults
167
+
168
+
169
+ class DeleteFilesResponse(OSCResponse):
170
+ """
171
+ Model for delete files response.
172
+
173
+ Attributes:
174
+ results: Delete files results.
175
+ """
176
+
177
+ results: DeleteFilesResults
178
+
179
+
180
+ class Client:
181
+ """
182
+ Client for interacting with the camera using osc API specification.
183
+
184
+ Parameters:
185
+ host: IP address of the camera.
186
+ timeout_sec: Timeout in seconds for requests.
187
+ logger: Logger for logging messages.
188
+
189
+ Methods:
190
+ execute_command: Execute a command on the camera.
191
+ list_files: List files on the camera.
192
+ delete_files: Delete files on the camera.
193
+ download_file: Download a file from the camera.
194
+ """
195
+
196
+ def __init__(self, host: str = '192.168.42.1', timeout_sec: float = 10.0, logger: logging.Logger | None = None) -> None:
197
+ self.host = host
198
+ self.timeout_sec = timeout_sec
199
+ self.logger = logger if logger else logging.getLogger(__name__)
200
+
201
+ def execute_command(self, body: dict) -> requests.Response:
202
+ """
203
+ Execute a command on the camera.
204
+
205
+ Parameters:
206
+ body: Command to execute as python dictionary.
207
+
208
+ Returns:
209
+ Deserialized JSON response from the camera.
210
+
211
+ Note:
212
+ This method is used internally by other methods to execute commands on the camera.
213
+ """
214
+ url = f'http://{self.host}/osc/commands/execute'
215
+ return requests.post(url, json=body, timeout=self.timeout_sec)
216
+
217
+ def list_files(self, file_type: ListFileType = ListFileType.ALL, start_position: int = 0, entry_count: int = 10, max_thumb_size: int | None = None) -> ListFilesResponse | ErrorResponse:
218
+ """
219
+ List files on the camera.
220
+
221
+ Parameters:
222
+ file_type: Type of files to list.
223
+ start_position: Start position of the list.
224
+ entry_count: Number of entries to list after start position.
225
+ max_thumb_size: Maximum thumbnail size.
226
+
227
+ Returns:
228
+ List files response.
229
+
230
+ Note:
231
+ 1. **`start_position`** will have no effect if the file type is **`ListFileType.ALL`**
232
+ 2. Less than 20 entries should be requested at a time to avoid large responses that camera may not be able to handle.
233
+
234
+ Example:
235
+ ```py
236
+ from insta360.osc import Client
237
+
238
+ client = Client()
239
+ files = client.list_files(entry_count=2)
240
+ print(files.model_dump())
241
+ ```
242
+ """
243
+
244
+ body = {
245
+ 'name': 'camera.listFiles',
246
+ 'parameters': {
247
+ 'fileType': file_type.value,
248
+ 'entryCount': entry_count,
249
+ 'maxThumbSize': max_thumb_size,
250
+ 'startPosition': start_position
251
+ }
252
+ }
253
+
254
+ response = self.execute_command(body)
255
+ response_json = response.json()
256
+
257
+ if response.status_code == 200:
258
+ if 'error' in response_json:
259
+ return ErrorResponse(**response_json)
260
+ return ListFilesResponse(**response_json)
261
+
262
+ return ErrorResponse(**response_json)
263
+
264
+
265
+ def delete_files(self, file_urls: list[str]) -> DeleteFilesResponse | ErrorResponse:
266
+ """
267
+ Delete files on the camera.
268
+
269
+ Parameters:
270
+ file_urls: URLs of the files to delete.
271
+
272
+ Returns:
273
+ Delete files response.
274
+
275
+ Tip:
276
+ **`file_urls`** can be obtained from ListFilesResponse.
277
+
278
+ Example:
279
+ ```py
280
+ from insta360.osc import Client
281
+
282
+ client = Client()
283
+ response = client.delete_files([
284
+ "http://192.168.42.1:80/DCIM/Camera01/VID_20240413_051305_00_031.insv",
285
+ "http://192.168.42.1:80/DCIM/Camera01/VID_20240413_051251_00_030.insv"
286
+ ])
287
+ print(response.model_dump())
288
+ ```
289
+ """
290
+
291
+ body = {
292
+ 'name': 'camera.delete',
293
+ 'parameters': {
294
+ 'fileUrls': file_urls
295
+ }
296
+ }
297
+
298
+ response = self.execute_command(body)
299
+ response_json = response.json()
300
+
301
+ if response.status_code == 200:
302
+ if 'error' in response_json:
303
+ return ErrorResponse(**response_json)
304
+ return DeleteFilesResponse(**response_json)
305
+
306
+ return ErrorResponse(**response_json)
307
+
308
+ def download_file(self, file_url: str, save_path: str) -> bool:
309
+ """
310
+ Download a file from the camera.
311
+
312
+ Parameters:
313
+ file_url: URL of the file to download.
314
+ save_path: Path to save the file.
315
+
316
+ Returns:
317
+ True if the download was successful, False otherwise.
318
+
319
+ Tip:
320
+ **`file_urls`** can be obtained from ListFilesResponse.
321
+
322
+ Example:
323
+ ```py
324
+ from insta360.osc import Client
325
+
326
+ client = Client()
327
+ result = client.DownloadCameraFile(
328
+ "http://192.168.42.1:80/DCIM/Camera01/LRV_20240411_074704_11_029.lrv",
329
+ "C:/Users/username/Downloads/LRV_20240411_074704_11_029.lrv"
330
+ )
331
+ print(result)
332
+ ```
333
+ """
334
+
335
+ response = requests.get(file_url, timeout=self.timeout_sec)
336
+
337
+ if response.status_code == 200:
338
+ with open(save_path, 'wb') as file:
339
+ file.write(response.content)
340
+ return True
341
+
342
+ return False
@@ -0,0 +1,33 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
3
+ # source: active_sensor_device.proto
4
+ # Protobuf Python Version: 5.26.1
5
+ """Generated protocol buffer code."""
6
+ from google.protobuf import descriptor as _descriptor
7
+ from google.protobuf import descriptor_pool as _descriptor_pool
8
+ from google.protobuf import symbol_database as _symbol_database
9
+ from google.protobuf.internal import builder as _builder
10
+ # @@protoc_insertion_point(imports)
11
+
12
+ _sym_db = _symbol_database.Default()
13
+
14
+
15
+ from .sensor_pb2 import *
16
+
17
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1a\x61\x63tive_sensor_device.proto\x12\x11insta360.messages\x1a\x0csensor.proto\"\x17\n\x15GetActiveSensorDevice\"b\n\x19GetActiveSensorDeviceResp\x12/\n\x06\x64\x65vice\x18\x01 \x01(\x0e\x32\x1f.insta360.messages.SensorDevice\x12\x14\n\x0cmedia_offset\x18\x02 \x01(\t\"H\n\x15SetActiveSensorDevice\x12/\n\x06\x64\x65vice\x18\x01 \x01(\x0e\x32\x1f.insta360.messages.SensorDevice\"1\n\x19SetActiveSensorDeviceResp\x12\x14\n\x0cmedia_offset\x18\x01 \x01(\tB\x08\xa2\x02\x05INSPBP\x00\x62\x06proto3')
18
+
19
+ _globals = globals()
20
+ _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
21
+ _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'active_sensor_device_pb2', _globals)
22
+ if not _descriptor._USE_C_DESCRIPTORS:
23
+ _globals['DESCRIPTOR']._loaded_options = None
24
+ _globals['DESCRIPTOR']._serialized_options = b'\242\002\005INSPB'
25
+ _globals['_GETACTIVESENSORDEVICE']._serialized_start=63
26
+ _globals['_GETACTIVESENSORDEVICE']._serialized_end=86
27
+ _globals['_GETACTIVESENSORDEVICERESP']._serialized_start=88
28
+ _globals['_GETACTIVESENSORDEVICERESP']._serialized_end=186
29
+ _globals['_SETACTIVESENSORDEVICE']._serialized_start=188
30
+ _globals['_SETACTIVESENSORDEVICE']._serialized_end=260
31
+ _globals['_SETACTIVESENSORDEVICERESP']._serialized_start=262
32
+ _globals['_SETACTIVESENSORDEVICERESP']._serialized_end=311
33
+ # @@protoc_insertion_point(module_scope)
@@ -0,0 +1,25 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
3
+ # source: authorization_operation_type.proto
4
+ # Protobuf Python Version: 5.26.1
5
+ """Generated protocol buffer code."""
6
+ from google.protobuf import descriptor as _descriptor
7
+ from google.protobuf import descriptor_pool as _descriptor_pool
8
+ from google.protobuf import symbol_database as _symbol_database
9
+ from google.protobuf.internal import builder as _builder
10
+ # @@protoc_insertion_point(imports)
11
+
12
+ _sym_db = _symbol_database.Default()
13
+
14
+
15
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\"authorization_operation_type.proto\x12\x11insta360.messages*C\n\x1a\x41uthorizationOperationType\x12\x0f\n\x0b\x42LE_CONNECT\x10\x00\x12\x14\n\x10WIFI_PWD_SETTING\x10\x01\x42\x08\xa2\x02\x05INSPBb\x06proto3')
16
+
17
+ _globals = globals()
18
+ _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
19
+ _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'authorization_operation_type_pb2', _globals)
20
+ if not _descriptor._USE_C_DESCRIPTORS:
21
+ _globals['DESCRIPTOR']._loaded_options = None
22
+ _globals['DESCRIPTOR']._serialized_options = b'\242\002\005INSPB'
23
+ _globals['_AUTHORIZATIONOPERATIONTYPE']._serialized_start=57
24
+ _globals['_AUTHORIZATIONOPERATIONTYPE']._serialized_end=124
25
+ # @@protoc_insertion_point(module_scope)
@@ -0,0 +1,29 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
3
+ # source: authorization_result.proto
4
+ # Protobuf Python Version: 5.26.1
5
+ """Generated protocol buffer code."""
6
+ from google.protobuf import descriptor as _descriptor
7
+ from google.protobuf import descriptor_pool as _descriptor_pool
8
+ from google.protobuf import symbol_database as _symbol_database
9
+ from google.protobuf.internal import builder as _builder
10
+ # @@protoc_insertion_point(imports)
11
+
12
+ _sym_db = _symbol_database.Default()
13
+
14
+
15
+ from .authorization_operation_type_pb2 import *
16
+
17
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1a\x61uthorization_result.proto\x12\x11insta360.messages\x1a\"authorization_operation_type.proto\"\xaa\x02\n\x1fNotificationAuthorizationResult\x12\x64\n\x14\x61uthorization_result\x18\x01 \x01(\x0e\x32\x46.insta360.messages.NotificationAuthorizationResult.AuthorizationResult\x12S\n\x1c\x61uthorization_operation_type\x18\x02 \x01(\x0e\x32-.insta360.messages.AuthorizationOperationType\"L\n\x13\x41uthorizationResult\x12\x0b\n\x07SUCCESS\x10\x00\x12\n\n\x06REJECT\x10\x01\x12\x0b\n\x07TIMEOUT\x10\x02\x12\x0f\n\x0bSYSTEM_BUSY\x10\x03\x42\x08\xa2\x02\x05INSPBP\x00\x62\x06proto3')
18
+
19
+ _globals = globals()
20
+ _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
21
+ _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'authorization_result_pb2', _globals)
22
+ if not _descriptor._USE_C_DESCRIPTORS:
23
+ _globals['DESCRIPTOR']._loaded_options = None
24
+ _globals['DESCRIPTOR']._serialized_options = b'\242\002\005INSPB'
25
+ _globals['_NOTIFICATIONAUTHORIZATIONRESULT']._serialized_start=86
26
+ _globals['_NOTIFICATIONAUTHORIZATIONRESULT']._serialized_end=384
27
+ _globals['_NOTIFICATIONAUTHORIZATIONRESULT_AUTHORIZATIONRESULT']._serialized_start=308
28
+ _globals['_NOTIFICATIONAUTHORIZATIONRESULT_AUTHORIZATIONRESULT']._serialized_end=384
29
+ # @@protoc_insertion_point(module_scope)
@@ -0,0 +1,27 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
3
+ # source: battery_low.proto
4
+ # Protobuf Python Version: 5.26.1
5
+ """Generated protocol buffer code."""
6
+ from google.protobuf import descriptor as _descriptor
7
+ from google.protobuf import descriptor_pool as _descriptor_pool
8
+ from google.protobuf import symbol_database as _symbol_database
9
+ from google.protobuf.internal import builder as _builder
10
+ # @@protoc_insertion_point(imports)
11
+
12
+ _sym_db = _symbol_database.Default()
13
+
14
+
15
+ from .battery_pb2 import *
16
+
17
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x11\x62\x61ttery_low.proto\x12\x11insta360.messages\x1a\rbattery.proto\"R\n\x16NotificationBatteryLow\x12\x38\n\x0e\x62\x61ttery_status\x18\x01 \x01(\x0b\x32 .insta360.messages.BatteryStatusB\x08\xa2\x02\x05INSPBP\x00\x62\x06proto3')
18
+
19
+ _globals = globals()
20
+ _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
21
+ _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'battery_low_pb2', _globals)
22
+ if not _descriptor._USE_C_DESCRIPTORS:
23
+ _globals['DESCRIPTOR']._loaded_options = None
24
+ _globals['DESCRIPTOR']._serialized_options = b'\242\002\005INSPB'
25
+ _globals['_NOTIFICATIONBATTERYLOW']._serialized_start=55
26
+ _globals['_NOTIFICATIONBATTERYLOW']._serialized_end=137
27
+ # @@protoc_insertion_point(module_scope)
@@ -0,0 +1,29 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
3
+ # source: battery.proto
4
+ # Protobuf Python Version: 5.26.1
5
+ """Generated protocol buffer code."""
6
+ from google.protobuf import descriptor as _descriptor
7
+ from google.protobuf import descriptor_pool as _descriptor_pool
8
+ from google.protobuf import symbol_database as _symbol_database
9
+ from google.protobuf.internal import builder as _builder
10
+ # @@protoc_insertion_point(imports)
11
+
12
+ _sym_db = _symbol_database.Default()
13
+
14
+
15
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\rbattery.proto\x12\x11insta360.messages\"\xa4\x02\n\rBatteryStatus\x12>\n\npower_type\x18\x01 \x01(\x0e\x32*.insta360.messages.BatteryStatus.PowerType\x12\x15\n\rbattery_level\x18\x02 \x01(\r\x12\x15\n\rbattery_scale\x18\x03 \x01(\r\x12\x42\n\x0c\x62\x61ttery_type\x18\x04 \x01(\x0e\x32,.insta360.messages.BatteryStatus.BatteryType\"%\n\tPowerType\x12\x0b\n\x07\x42\x41TTERY\x10\x00\x12\x0b\n\x07\x41\x44\x41PTER\x10\x01\":\n\x0b\x42\x61tteryType\x12\t\n\x05THICK\x10\x00\x12\x08\n\x04THIN\x10\x01\x12\x0c\n\x08VERTICAL\x10\x02\x12\x08\n\x04NONE\x10\x64\x42\x08\xa2\x02\x05INSPBb\x06proto3')
16
+
17
+ _globals = globals()
18
+ _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
19
+ _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'battery_pb2', _globals)
20
+ if not _descriptor._USE_C_DESCRIPTORS:
21
+ _globals['DESCRIPTOR']._loaded_options = None
22
+ _globals['DESCRIPTOR']._serialized_options = b'\242\002\005INSPB'
23
+ _globals['_BATTERYSTATUS']._serialized_start=37
24
+ _globals['_BATTERYSTATUS']._serialized_end=329
25
+ _globals['_BATTERYSTATUS_POWERTYPE']._serialized_start=232
26
+ _globals['_BATTERYSTATUS_POWERTYPE']._serialized_end=269
27
+ _globals['_BATTERYSTATUS_BATTERYTYPE']._serialized_start=271
28
+ _globals['_BATTERYSTATUS_BATTERYTYPE']._serialized_end=329
29
+ # @@protoc_insertion_point(module_scope)
@@ -0,0 +1,27 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
3
+ # source: battery_update.proto
4
+ # Protobuf Python Version: 5.26.1
5
+ """Generated protocol buffer code."""
6
+ from google.protobuf import descriptor as _descriptor
7
+ from google.protobuf import descriptor_pool as _descriptor_pool
8
+ from google.protobuf import symbol_database as _symbol_database
9
+ from google.protobuf.internal import builder as _builder
10
+ # @@protoc_insertion_point(imports)
11
+
12
+ _sym_db = _symbol_database.Default()
13
+
14
+
15
+ from .battery_pb2 import *
16
+
17
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x14\x62\x61ttery_update.proto\x12\x11insta360.messages\x1a\rbattery.proto\"U\n\x19NotificationBatteryUpdate\x12\x38\n\x0e\x62\x61ttery_status\x18\x01 \x01(\x0b\x32 .insta360.messages.BatteryStatusB\x08\xa2\x02\x05INSPBP\x00\x62\x06proto3')
18
+
19
+ _globals = globals()
20
+ _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
21
+ _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'battery_update_pb2', _globals)
22
+ if not _descriptor._USE_C_DESCRIPTORS:
23
+ _globals['DESCRIPTOR']._loaded_options = None
24
+ _globals['DESCRIPTOR']._serialized_options = b'\242\002\005INSPB'
25
+ _globals['_NOTIFICATIONBATTERYUPDATE']._serialized_start=58
26
+ _globals['_NOTIFICATIONBATTERYUPDATE']._serialized_end=143
27
+ # @@protoc_insertion_point(module_scope)
@@ -0,0 +1,27 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
3
+ # source: bluetooth.proto
4
+ # Protobuf Python Version: 5.26.1
5
+ """Generated protocol buffer code."""
6
+ from google.protobuf import descriptor as _descriptor
7
+ from google.protobuf import descriptor_pool as _descriptor_pool
8
+ from google.protobuf import symbol_database as _symbol_database
9
+ from google.protobuf.internal import builder as _builder
10
+ # @@protoc_insertion_point(imports)
11
+
12
+ _sym_db = _symbol_database.Default()
13
+
14
+
15
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0f\x62luetooth.proto\x12\x11insta360.messages\".\n\x0c\x42TPeripheral\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x10\n\x08mac_addr\x18\x02 \x01(\x0c*2\n\x10\x42TPeripheralType\x12\x07\n\x03\x41LL\x10\x00\x12\x15\n\x11REMOTE_CONTROLLER\x10\x01\x42\x08\xa2\x02\x05INSPBb\x06proto3')
16
+
17
+ _globals = globals()
18
+ _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
19
+ _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'bluetooth_pb2', _globals)
20
+ if not _descriptor._USE_C_DESCRIPTORS:
21
+ _globals['DESCRIPTOR']._loaded_options = None
22
+ _globals['DESCRIPTOR']._serialized_options = b'\242\002\005INSPB'
23
+ _globals['_BTPERIPHERALTYPE']._serialized_start=86
24
+ _globals['_BTPERIPHERALTYPE']._serialized_end=136
25
+ _globals['_BTPERIPHERAL']._serialized_start=38
26
+ _globals['_BTPERIPHERAL']._serialized_end=84
27
+ # @@protoc_insertion_point(module_scope)
@@ -0,0 +1,31 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
3
+ # source: bt_central_notification.proto
4
+ # Protobuf Python Version: 5.26.1
5
+ """Generated protocol buffer code."""
6
+ from google.protobuf import descriptor as _descriptor
7
+ from google.protobuf import descriptor_pool as _descriptor_pool
8
+ from google.protobuf import symbol_database as _symbol_database
9
+ from google.protobuf.internal import builder as _builder
10
+ # @@protoc_insertion_point(imports)
11
+
12
+ _sym_db = _symbol_database.Default()
13
+
14
+
15
+ from .bluetooth_pb2 import *
16
+
17
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1d\x62t_central_notification.proto\x12\x11insta360.messages\x1a\x0f\x62luetooth.proto\"X\n NotificatoinDiscoverBTPeripheral\x12\x34\n\x0bperipherals\x18\x01 \x03(\x0b\x32\x1f.insta360.messages.BTPeripheral\"X\n!NotificatoinConnectedToPeripheral\x12\x33\n\nperipheral\x18\x01 \x01(\x0b\x32\x1f.insta360.messages.BTPeripheral\"Y\n\"NotificatoinDisconnectedPeripheral\x12\x33\n\nperipheral\x18\x01 \x01(\x0b\x32\x1f.insta360.messages.BTPeripheralB\x08\xa2\x02\x05INSPBP\x00\x62\x06proto3')
18
+
19
+ _globals = globals()
20
+ _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
21
+ _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'bt_central_notification_pb2', _globals)
22
+ if not _descriptor._USE_C_DESCRIPTORS:
23
+ _globals['DESCRIPTOR']._loaded_options = None
24
+ _globals['DESCRIPTOR']._serialized_options = b'\242\002\005INSPB'
25
+ _globals['_NOTIFICATOINDISCOVERBTPERIPHERAL']._serialized_start=69
26
+ _globals['_NOTIFICATOINDISCOVERBTPERIPHERAL']._serialized_end=157
27
+ _globals['_NOTIFICATOINCONNECTEDTOPERIPHERAL']._serialized_start=159
28
+ _globals['_NOTIFICATOINCONNECTEDTOPERIPHERAL']._serialized_end=247
29
+ _globals['_NOTIFICATOINDISCONNECTEDPERIPHERAL']._serialized_start=249
30
+ _globals['_NOTIFICATOINDISCONNECTEDPERIPHERAL']._serialized_end=338
31
+ # @@protoc_insertion_point(module_scope)
@@ -0,0 +1,35 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
3
+ # source: bt_central.proto
4
+ # Protobuf Python Version: 5.26.1
5
+ """Generated protocol buffer code."""
6
+ from google.protobuf import descriptor as _descriptor
7
+ from google.protobuf import descriptor_pool as _descriptor_pool
8
+ from google.protobuf import symbol_database as _symbol_database
9
+ from google.protobuf.internal import builder as _builder
10
+ # @@protoc_insertion_point(imports)
11
+
12
+ _sym_db = _symbol_database.Default()
13
+
14
+
15
+ from .bluetooth_pb2 import *
16
+
17
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x10\x62t_central.proto\x12\x11insta360.messages\x1a\x0f\x62luetooth.proto\"P\n\x10ScanBTPeripheral\x12<\n\x0fperipheral_type\x18\x01 \x01(\x0e\x32#.insta360.messages.BTPeripheralType\"L\n\x15\x43onnectToBTPeripheral\x12\x33\n\nperipheral\x18\x01 \x01(\x0b\x32\x1f.insta360.messages.BTPeripheral\"M\n\x16\x44isconnectBTPeripheral\x12\x33\n\nperipheral\x18\x01 \x01(\x0b\x32\x1f.insta360.messages.BTPeripheral\"X\n\x18GetConnectedBTPeripheral\x12<\n\x0fperipheral_type\x18\x01 \x01(\x0e\x32#.insta360.messages.BTPeripheralType\"T\n\x1cGetConnectedBTPeripheralResp\x12\x34\n\x0bperipherals\x18\x01 \x03(\x0b\x32\x1f.insta360.messages.BTPeripheralB\x08\xa2\x02\x05INSPBP\x00\x62\x06proto3')
18
+
19
+ _globals = globals()
20
+ _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
21
+ _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'bt_central_pb2', _globals)
22
+ if not _descriptor._USE_C_DESCRIPTORS:
23
+ _globals['DESCRIPTOR']._loaded_options = None
24
+ _globals['DESCRIPTOR']._serialized_options = b'\242\002\005INSPB'
25
+ _globals['_SCANBTPERIPHERAL']._serialized_start=56
26
+ _globals['_SCANBTPERIPHERAL']._serialized_end=136
27
+ _globals['_CONNECTTOBTPERIPHERAL']._serialized_start=138
28
+ _globals['_CONNECTTOBTPERIPHERAL']._serialized_end=214
29
+ _globals['_DISCONNECTBTPERIPHERAL']._serialized_start=216
30
+ _globals['_DISCONNECTBTPERIPHERAL']._serialized_end=293
31
+ _globals['_GETCONNECTEDBTPERIPHERAL']._serialized_start=295
32
+ _globals['_GETCONNECTEDBTPERIPHERAL']._serialized_end=383
33
+ _globals['_GETCONNECTEDBTPERIPHERALRESP']._serialized_start=385
34
+ _globals['_GETCONNECTEDBTPERIPHERALRESP']._serialized_end=469
35
+ # @@protoc_insertion_point(module_scope)
@@ -0,0 +1,29 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
3
+ # source: button_press_params.proto
4
+ # Protobuf Python Version: 5.26.1
5
+ """Generated protocol buffer code."""
6
+ from google.protobuf import descriptor as _descriptor
7
+ from google.protobuf import descriptor_pool as _descriptor_pool
8
+ from google.protobuf import symbol_database as _symbol_database
9
+ from google.protobuf.internal import builder as _builder
10
+ # @@protoc_insertion_point(imports)
11
+
12
+ _sym_db = _symbol_database.Default()
13
+
14
+
15
+ from .video_pb2 import *
16
+
17
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x19\x62utton_press_params.proto\x12\x11insta360.messages\x1a\x0bvideo.proto\"\x98\x01\n\x11\x42uttonPressParams\x12J\n\x1e\x62utton_param_record_resolution\x18\x01 \x01(\x0e\x32\".insta360.messages.VideoResolution\x12\x1f\n\x17\x62utton_param_lapse_Time\x18\x02 \x01(\r\x12\x16\n\x0erec_limit_time\x18\x03 \x01(\r*\xaf\x01\n\x15\x42uttonPressParamsType\x12\x1f\n\x1b\x42UTTON_PRESS_PARAMS_UNKNOWN\x10\x00\x12\"\n\x1e\x42UTTON_PARAM_RECORD_RESOLUTION\x10\x01\x12\x1b\n\x17\x42UTTON_PARAM_LAPSE_TIME\x10\x02\x12\x1e\n\x1a\x42UTTON_PARAM_RES_REC_LIMIT\x10\x03\x12\x14\n\x10\x42UTTON_PARAM_NUM\x10\x04\x42\x08\xa2\x02\x05INSPBP\x00\x62\x06proto3')
18
+
19
+ _globals = globals()
20
+ _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
21
+ _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'button_press_params_pb2', _globals)
22
+ if not _descriptor._USE_C_DESCRIPTORS:
23
+ _globals['DESCRIPTOR']._loaded_options = None
24
+ _globals['DESCRIPTOR']._serialized_options = b'\242\002\005INSPB'
25
+ _globals['_BUTTONPRESSPARAMSTYPE']._serialized_start=217
26
+ _globals['_BUTTONPRESSPARAMSTYPE']._serialized_end=392
27
+ _globals['_BUTTONPRESSPARAMS']._serialized_start=62
28
+ _globals['_BUTTONPRESSPARAMS']._serialized_end=214
29
+ # @@protoc_insertion_point(module_scope)