pymammotion 0.4.44__tar.gz → 0.4.45__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.
Files changed (135) hide show
  1. {pymammotion-0.4.44 → pymammotion-0.4.45}/PKG-INFO +1 -1
  2. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/__init__.py +2 -1
  3. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/aliyun/cloud_gateway.py +6 -3
  4. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/mammotion/devices/base.py +4 -0
  5. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/mammotion/devices/mammotion.py +13 -7
  6. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/mammotion/devices/mammotion_bluetooth.py +2 -0
  7. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/mammotion/devices/mammotion_cloud.py +2 -0
  8. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/mqtt/mammotion_mqtt.py +0 -2
  9. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/proto/luba_msg.proto +2 -1
  10. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/proto/luba_msg_pb2.py +6 -6
  11. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/proto/luba_msg_pb2.pyi +1 -0
  12. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/proto/luba_mul.proto +5 -0
  13. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/proto/luba_mul_pb2.py +19 -17
  14. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/proto/luba_mul_pb2.pyi +10 -2
  15. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/proto/mctrl_driver.proto +21 -0
  16. pymammotion-0.4.45/pymammotion/proto/mctrl_driver_pb2.py +51 -0
  17. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/proto/mctrl_driver_pb2.pyi +31 -4
  18. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/proto/mctrl_nav.proto +74 -50
  19. pymammotion-0.4.45/pymammotion/proto/mctrl_nav_pb2.py +134 -0
  20. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/proto/mctrl_nav_pb2.pyi +104 -58
  21. pymammotion-0.4.45/pymammotion/proto/mctrl_ota.proto +80 -0
  22. pymammotion-0.4.45/pymammotion/proto/mctrl_ota_pb2.py +45 -0
  23. pymammotion-0.4.45/pymammotion/proto/mctrl_ota_pb2.pyi +128 -0
  24. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/proto/mctrl_pept.proto +2 -2
  25. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/proto/mctrl_pept_pb2.py +1 -1
  26. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/proto/mctrl_sys.proto +223 -85
  27. pymammotion-0.4.45/pymammotion/proto/mctrl_sys_pb2.py +190 -0
  28. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/proto/mctrl_sys_pb2.pyi +247 -9
  29. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/utility/constant/device_constant.py +1 -0
  30. {pymammotion-0.4.44 → pymammotion-0.4.45}/pyproject.toml +2 -2
  31. pymammotion-0.4.44/pymammotion/proto/mctrl_driver_pb2.py +0 -45
  32. pymammotion-0.4.44/pymammotion/proto/mctrl_nav_pb2.py +0 -130
  33. pymammotion-0.4.44/pymammotion/proto/mctrl_ota.proto +0 -42
  34. pymammotion-0.4.44/pymammotion/proto/mctrl_ota_pb2.py +0 -35
  35. pymammotion-0.4.44/pymammotion/proto/mctrl_ota_pb2.pyi +0 -65
  36. pymammotion-0.4.44/pymammotion/proto/mctrl_sys_pb2.py +0 -154
  37. {pymammotion-0.4.44 → pymammotion-0.4.45}/LICENSE +0 -0
  38. {pymammotion-0.4.44 → pymammotion-0.4.45}/README.md +0 -0
  39. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/aliyun/__init__.py +0 -0
  40. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/aliyun/client.py +0 -0
  41. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/aliyun/model/aep_response.py +0 -0
  42. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/aliyun/model/connect_response.py +0 -0
  43. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/aliyun/model/dev_by_account_response.py +0 -0
  44. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/aliyun/model/login_by_oauth_response.py +0 -0
  45. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/aliyun/model/regions_response.py +0 -0
  46. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/aliyun/model/session_by_authcode_response.py +0 -0
  47. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/aliyun/regions.py +0 -0
  48. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/aliyun/tea/core.py +0 -0
  49. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/aliyun/tmp_constant.py +0 -0
  50. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/bluetooth/__init__.py +0 -0
  51. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/bluetooth/ble.py +0 -0
  52. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/bluetooth/ble_message.py +0 -0
  53. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/bluetooth/const.py +0 -0
  54. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/bluetooth/data/__init__.py +0 -0
  55. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/bluetooth/data/convert.py +0 -0
  56. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/bluetooth/data/framectrldata.py +0 -0
  57. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/bluetooth/data/notifydata.py +0 -0
  58. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/bluetooth/model/__init__.py +0 -0
  59. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/bluetooth/model/atomic_integer.py +0 -0
  60. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/const.py +0 -0
  61. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/data/__init__.py +0 -0
  62. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/data/model/__init__.py +0 -0
  63. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/data/model/account.py +0 -0
  64. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/data/model/device.py +0 -0
  65. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/data/model/device_config.py +0 -0
  66. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/data/model/device_info.py +0 -0
  67. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/data/model/device_limits.py +0 -0
  68. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/data/model/enums.py +0 -0
  69. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/data/model/excute_boarder_params.py +0 -0
  70. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/data/model/execute_boarder.py +0 -0
  71. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/data/model/generate_route_information.py +0 -0
  72. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/data/model/hash_list.py +0 -0
  73. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/data/model/location.py +0 -0
  74. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/data/model/mowing_modes.py +0 -0
  75. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/data/model/rapid_state.py +0 -0
  76. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/data/model/raw_data.py +0 -0
  77. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/data/model/region_data.py +0 -0
  78. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/data/model/report_info.py +0 -0
  79. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/data/model/work.py +0 -0
  80. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/data/mqtt/__init__.py +0 -0
  81. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/data/mqtt/event.py +0 -0
  82. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/data/mqtt/properties.py +0 -0
  83. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/data/mqtt/status.py +0 -0
  84. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/data/state_manager.py +0 -0
  85. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/event/__init__.py +0 -0
  86. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/event/event.py +0 -0
  87. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/http/__init__.py +0 -0
  88. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/http/_init_.py +0 -0
  89. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/http/encryption.py +0 -0
  90. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/http/http.py +0 -0
  91. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/http/model/__init__.py +0 -0
  92. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/http/model/camera_stream.py +0 -0
  93. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/http/model/http.py +0 -0
  94. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/mammotion/__init__.py +0 -0
  95. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/mammotion/commands/__init__.py +0 -0
  96. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/mammotion/commands/abstract_message.py +0 -0
  97. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/mammotion/commands/mammotion_command.py +0 -0
  98. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/mammotion/commands/messages/__init__.py +0 -0
  99. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/mammotion/commands/messages/driver.py +0 -0
  100. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/mammotion/commands/messages/media.py +0 -0
  101. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/mammotion/commands/messages/navigation.py +0 -0
  102. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/mammotion/commands/messages/network.py +0 -0
  103. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/mammotion/commands/messages/ota.py +0 -0
  104. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/mammotion/commands/messages/system.py +0 -0
  105. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/mammotion/commands/messages/video.py +0 -0
  106. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/mammotion/control/__init__.py +0 -0
  107. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/mammotion/control/joystick.py +0 -0
  108. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/mammotion/devices/__init__.py +0 -0
  109. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/mqtt/__init__.py +0 -0
  110. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/mqtt/linkkit/__init__.py +0 -0
  111. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/mqtt/linkkit/h2client.py +0 -0
  112. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/mqtt/linkkit/linkkit.py +0 -0
  113. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/mqtt/mammotion_future.py +0 -0
  114. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/proto/__init__.py +0 -0
  115. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/proto/basestation.proto +0 -0
  116. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/proto/basestation_pb2.py +0 -0
  117. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/proto/basestation_pb2.pyi +0 -0
  118. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/proto/common.proto +0 -0
  119. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/proto/common_pb2.py +0 -0
  120. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/proto/common_pb2.pyi +0 -0
  121. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/proto/dev_net.proto +0 -0
  122. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/proto/dev_net_pb2.py +0 -0
  123. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/proto/dev_net_pb2.pyi +0 -0
  124. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/proto/mctrl_pept_pb2.pyi +0 -0
  125. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/py.typed +0 -0
  126. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/utility/constant/__init__.py +0 -0
  127. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/utility/conversions.py +0 -0
  128. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/utility/datatype_converter.py +0 -0
  129. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/utility/device_config.py +0 -0
  130. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/utility/device_type.py +0 -0
  131. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/utility/map.py +0 -0
  132. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/utility/movement.py +0 -0
  133. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/utility/mur_mur_hash.py +0 -0
  134. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/utility/periodic.py +0 -0
  135. {pymammotion-0.4.44 → pymammotion-0.4.45}/pymammotion/utility/rocker_util.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: pymammotion
3
- Version: 0.4.44
3
+ Version: 0.4.45
4
4
  Summary:
5
5
  License: GPL-3.0
6
6
  Author: Michael Arthur
@@ -35,7 +35,8 @@ if __name__ == "__main__":
35
35
  CLIENT_ID = os.environ.get("CLIENT_ID")
36
36
  IOT_TOKEN = os.environ.get("IOT_TOKEN")
37
37
  REGION = os.environ.get("REGION")
38
- cloud_client = CloudIOTGateway()
38
+ mammotion_http = MammotionHTTP()
39
+ cloud_client = CloudIOTGateway(mammotion_http)
39
40
  luba = MammotionMQTT(
40
41
  iot_token=IOT_TOKEN or "",
41
42
  region_id=REGION or "",
@@ -95,6 +95,7 @@ class CloudIOTGateway:
95
95
 
96
96
  def __init__(
97
97
  self,
98
+ mammotion_http: MammotionHTTP,
98
99
  connect_response: ConnectResponse | None = None,
99
100
  login_by_oauth_response: LoginByOAuthResponse | None = None,
100
101
  aep_response: AepResponse | None = None,
@@ -103,7 +104,7 @@ class CloudIOTGateway:
103
104
  dev_by_account: ListingDevByAccountResponse | None = None,
104
105
  ) -> None:
105
106
  """Initialize the CloudIOTGateway."""
106
- self.mammotion_http: MammotionHTTP | None = None
107
+ self.mammotion_http: MammotionHTTP = mammotion_http
107
108
  self._app_key = APP_KEY
108
109
  self._app_secret = APP_SECRET
109
110
  self.domain = ALIYUN_DOMAIN
@@ -152,8 +153,9 @@ class CloudIOTGateway:
152
153
  hashlib.sha1,
153
154
  ).hexdigest()
154
155
 
155
- async def get_region(self, country_code: str, auth_code: str):
156
+ async def get_region(self, country_code: str):
156
157
  """Get the region based on country code and auth code."""
158
+ auth_code = self.mammotion_http.login_info.authorization_code
157
159
 
158
160
  if self._region_response is not None:
159
161
  return self._region_response
@@ -347,8 +349,9 @@ class CloudIOTGateway:
347
349
  return self._connect_response
348
350
  raise LoginException(data)
349
351
 
350
- async def login_by_oauth(self, country_code: str, auth_code: str):
352
+ async def login_by_oauth(self, country_code: str):
351
353
  """Login by OAuth."""
354
+ auth_code = self.mammotion_http.login_info.authorization_code
352
355
  region_url = self._region_response.data.oaApiGatewayEndpoint
353
356
 
354
357
  async with ClientSession() as session:
@@ -1,6 +1,8 @@
1
1
  from abc import abstractmethod
2
2
  import asyncio
3
+ import datetime
3
4
  import logging
5
+ import time
4
6
  from typing import Any
5
7
 
6
8
  import betterproto
@@ -34,6 +36,8 @@ def find_next_integer(lst: list[int], current_hash: int) -> int | None:
34
36
  class MammotionBaseDevice:
35
37
  """Base class for Mammotion devices."""
36
38
 
39
+ command_sent_time: datetime = time.time()
40
+
37
41
  def __init__(self, state_manager: StateManager, cloud_device: Device) -> None:
38
42
  """Initialize MammotionBaseDevice."""
39
43
  self.loop = asyncio.get_event_loop()
@@ -30,6 +30,8 @@ class MammotionMixedDeviceManager:
30
30
  def __init__(
31
31
  self,
32
32
  name: str,
33
+ iot_id: str,
34
+ cloud_client: CloudIOTGateway,
33
35
  mammotion_http: MammotionHTTP,
34
36
  cloud_device: Device | None = None,
35
37
  ble_device: BLEDevice | None = None,
@@ -39,6 +41,8 @@ class MammotionMixedDeviceManager:
39
41
  self._ble_device: MammotionBaseBLEDevice | None = None
40
42
  self._cloud_device: MammotionBaseCloudDevice | None = None
41
43
  self.name = name
44
+ self.iot_id = iot_id
45
+ self.cloud_client = cloud_client
42
46
  self._state_manager = StateManager(MowingDevice())
43
47
  self._state_manager.get_device().name = name
44
48
  self.add_ble(cloud_device, ble_device)
@@ -177,7 +181,7 @@ class Mammotion:
177
181
  return
178
182
  mammotion_http = exists.cloud_client.mammotion_http
179
183
  await mammotion_http.refresh_login(account, password)
180
- await self.connect_iot(mammotion_http, exists.cloud_client)
184
+ await self.connect_iot(exists.cloud_client)
181
185
 
182
186
  if not exists.is_connected():
183
187
  loop = asyncio.get_running_loop()
@@ -212,6 +216,8 @@ class Mammotion:
212
216
  if device.deviceName.startswith(("Luba-", "Yuka-")) and mower_device is None:
213
217
  mixed_device = MammotionMixedDeviceManager(
214
218
  name=device.deviceName,
219
+ iot_id=device.iotId,
220
+ cloud_client=mqtt_client.cloud_client,
215
221
  mammotion_http=mqtt_client.cloud_client.mammotion_http,
216
222
  cloud_device=device,
217
223
  mqtt=mqtt_client,
@@ -236,19 +242,19 @@ class Mammotion:
236
242
 
237
243
  async def login(self, account: str, password: str) -> CloudIOTGateway:
238
244
  """Login to mammotion cloud."""
239
- cloud_client = CloudIOTGateway()
240
245
  mammotion_http = MammotionHTTP()
246
+ cloud_client = CloudIOTGateway(mammotion_http)
241
247
  await mammotion_http.login(account, password)
242
- await self.connect_iot(mammotion_http, cloud_client)
248
+ await self.connect_iot(cloud_client)
243
249
  return cloud_client
244
250
 
245
251
  @staticmethod
246
- async def connect_iot(mammotion_http: MammotionHTTP, cloud_client: CloudIOTGateway) -> None:
252
+ async def connect_iot(cloud_client: CloudIOTGateway) -> None:
253
+ mammotion_http = cloud_client.mammotion_http
247
254
  country_code = mammotion_http.login_info.userInformation.domainAbbreviation
248
- cloud_client.set_http(mammotion_http)
249
- await cloud_client.get_region(country_code, mammotion_http.login_info.authorization_code)
255
+ await cloud_client.get_region(country_code)
250
256
  await cloud_client.connect()
251
- await cloud_client.login_by_oauth(country_code, mammotion_http.login_info.authorization_code)
257
+ await cloud_client.login_by_oauth(country_code)
252
258
  await cloud_client.aep_handle()
253
259
  await cloud_client.session_by_auth_code()
254
260
  await cloud_client.list_binding_by_account()
@@ -1,6 +1,7 @@
1
1
  import asyncio
2
2
  from collections.abc import Awaitable, Callable
3
3
  import logging
4
+ import time
4
5
  from typing import Any, cast
5
6
  from uuid import UUID
6
7
 
@@ -366,6 +367,7 @@ class MammotionBaseBLEDevice(MammotionBaseDevice):
366
367
  assert self._client is not None
367
368
  _LOGGER.debug("%s: Sending command: %s", self.name, key)
368
369
  await self._message.post_custom_data_bytes(command)
370
+ self.command_sent_time = time.time()
369
371
 
370
372
  def get_address(self) -> str:
371
373
  """Return address of device."""
@@ -5,6 +5,7 @@ from collections import deque
5
5
  from collections.abc import Awaitable, Callable
6
6
  import json
7
7
  import logging
8
+ import time
8
9
  from typing import Any
9
10
 
10
11
  import betterproto
@@ -102,6 +103,7 @@ class MammotionCloud:
102
103
  self._key = key
103
104
  _LOGGER.debug("Sending command: %s", key)
104
105
  await self._mqtt_client.get_cloud_client().send_cloud_command(iot_id, command)
106
+ self.command_sent_time = time.time()
105
107
 
106
108
  async def _on_mqtt_message(self, topic: str, payload: str, iot_id: str) -> None:
107
109
  """Handle incoming MQTT messages."""
@@ -139,8 +139,6 @@ class MammotionMQTT:
139
139
  future = asyncio.run_coroutine_threadsafe(self.on_ready(), self.loop)
140
140
  asyncio.wrap_future(future, loop=self.loop)
141
141
  # self._linkkit_client.query_ota_firmware()
142
- # command = MammotionCommand(device_name="Luba")
143
- # self._cloud_client.send_cloud_command(command.get_report_cfg())
144
142
 
145
143
  def unsubscribe(self) -> None:
146
144
  self._linkkit_client.unsubscribe_topic(
@@ -47,6 +47,7 @@ enum MsgCmdType {
47
47
  MSG_CMD_TYPE_ESP = 248;
48
48
  MSG_CMD_TYPE_MUL = 249;
49
49
  MSG_CMD_TYPE_PEPT = 250;
50
+ MSG_CMD_TYPE_BASESTATION = 251;
50
51
  }
51
52
 
52
53
  enum MsgAttr {
@@ -71,5 +72,5 @@ enum MsgDevice {
71
72
  DEV_LOCALIZATION = 18;
72
73
  DEV_PERCEPTION = 19;
73
74
  SOC_MODULE_MULTIMEDIA = 21;
74
- DEV_IOTCTRL = 25;
75
+ DEV_IOTCTRL = 29;
75
76
  }
@@ -21,7 +21,7 @@ from pymammotion.proto import luba_mul_pb2 as pymammotion_dot_proto_dot_luba__mu
21
21
  from pymammotion.proto import mctrl_pept_pb2 as pymammotion_dot_proto_dot_mctrl__pept__pb2
22
22
 
23
23
 
24
- DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n pymammotion/proto/luba_msg.proto\x1a#pymammotion/proto/basestation.proto\x1a$pymammotion/proto/mctrl_driver.proto\x1a!pymammotion/proto/mctrl_nav.proto\x1a!pymammotion/proto/mctrl_sys.proto\x1a\x1fpymammotion/proto/dev_net.proto\x1a!pymammotion/proto/mctrl_ota.proto\x1a pymammotion/proto/luba_mul.proto\x1a\"pymammotion/proto/mctrl_pept.proto\"\t\n\x07MsgNull\"\xb7\x03\n\x07LubaMsg\x12\x1c\n\x07msgtype\x18\x01 \x01(\x0e\x32\x0b.MsgCmdType\x12\x1a\n\x06sender\x18\x02 \x01(\x0e\x32\n.MsgDevice\x12\x19\n\x05rcver\x18\x03 \x01(\x0e\x32\n.MsgDevice\x12\x19\n\x07msgattr\x18\x04 \x01(\x0e\x32\x08.MsgAttr\x12\x0c\n\x04seqs\x18\x05 \x01(\x05\x12\x0f\n\x07version\x18\x06 \x01(\x05\x12\x0f\n\x07subtype\x18\x07 \x01(\x05\x12\x16\n\x03net\x18\x08 \x01(\x0b\x32\x07.DevNetH\x00\x12\x17\n\x03sys\x18\n \x01(\x0b\x32\x08.MctlSysH\x00\x12\x17\n\x03nav\x18\x0b \x01(\x0b\x32\x08.MctlNavH\x00\x12\x1d\n\x06\x64river\x18\x0c \x01(\x0b\x32\x0b.MctlDriverH\x00\x12\x17\n\x03ota\x18\r \x01(\x0b\x32\x08.MctlOtaH\x00\x12\x16\n\x03mul\x18\x0e \x01(\x0b\x32\x07.SocMulH\x00\x12\x18\n\x04null\x18\x10 \x01(\x0b\x32\x08.MsgNullH\x00\x12\x19\n\x04pept\x18\x11 \x01(\x0b\x32\t.MctlPeptH\x00\x12\x1c\n\x04\x62\x61se\x18\x12 \x01(\x0b\x32\x0c.BaseStationH\x00\x12\x11\n\ttimestamp\x18\x0f \x01(\x04\x42\x0c\n\nLubaSubMsg*\xd7\x02\n\nMsgCmdType\x12\x16\n\x12MSG_CMD_TYPE_START\x10\x00\x12\x15\n\x10MSG_CMD_TYPE_NAV\x10\xf0\x01\x12\x1e\n\x19MSG_CMD_TYPE_LOCALIZATION\x10\xf1\x01\x12\x1a\n\x15MSG_CMD_TYPE_PLANNING\x10\xf2\x01\x12\x1e\n\x19MSG_CMD_TYPE_EMBED_DRIVER\x10\xf3\x01\x12\x1b\n\x16MSG_CMD_TYPE_EMBED_SYS\x10\xf4\x01\x12\x1f\n\x1aMSG_CMD_TYPE_EMBED_MIDWARE\x10\xf5\x01\x12\x1b\n\x16MSG_CMD_TYPE_EMBED_OTA\x10\xf6\x01\x12\x1d\n\x18MSG_CMD_TYPE_APPLICATION\x10\xf7\x01\x12\x15\n\x10MSG_CMD_TYPE_ESP\x10\xf8\x01\x12\x15\n\x10MSG_CMD_TYPE_MUL\x10\xf9\x01\x12\x16\n\x11MSG_CMD_TYPE_PEPT\x10\xfa\x01*V\n\x07MsgAttr\x12\x11\n\rMSG_ATTR_NONE\x10\x00\x12\x10\n\x0cMSG_ATTR_REQ\x10\x01\x12\x11\n\rMSG_ATTR_RESP\x10\x02\x12\x13\n\x0fMSG_ATTR_REPORT\x10\x03*\xa8\x02\n\tMsgDevice\x12\x10\n\x0c\x44\x45V_COMM_ESP\x10\x00\x12\x0f\n\x0b\x44\x45V_MAINCTL\x10\x01\x12\x11\n\rDEV_LEFTMOTOR\x10\x02\x12\x12\n\x0e\x44\x45V_RIGHTMOTOR\x10\x03\x12\x13\n\x0f\x44\x45V_BASESTATION\x10\x04\x12\x0e\n\nDEV_RTKCLI\x10\x05\x12\x0f\n\x0b\x44\x45V_USBHOST\x10\x06\x12\x11\n\rDEV_MOBILEAPP\x10\x07\x12\x11\n\rDEV_IOTSERVER\x10\x08\x12\x0b\n\x07\x44\x45V_BMS\x10\t\x12\x12\n\x0e\x44\x45V_NAVIGATION\x10\x11\x12\x14\n\x10\x44\x45V_LOCALIZATION\x10\x12\x12\x12\n\x0e\x44\x45V_PERCEPTION\x10\x13\x12\x19\n\x15SOC_MODULE_MULTIMEDIA\x10\x15\x12\x0f\n\x0b\x44\x45V_IOTCTRL\x10\x19\x62\x06proto3')
24
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n pymammotion/proto/luba_msg.proto\x1a#pymammotion/proto/basestation.proto\x1a$pymammotion/proto/mctrl_driver.proto\x1a!pymammotion/proto/mctrl_nav.proto\x1a!pymammotion/proto/mctrl_sys.proto\x1a\x1fpymammotion/proto/dev_net.proto\x1a!pymammotion/proto/mctrl_ota.proto\x1a pymammotion/proto/luba_mul.proto\x1a\"pymammotion/proto/mctrl_pept.proto\"\t\n\x07MsgNull\"\xb7\x03\n\x07LubaMsg\x12\x1c\n\x07msgtype\x18\x01 \x01(\x0e\x32\x0b.MsgCmdType\x12\x1a\n\x06sender\x18\x02 \x01(\x0e\x32\n.MsgDevice\x12\x19\n\x05rcver\x18\x03 \x01(\x0e\x32\n.MsgDevice\x12\x19\n\x07msgattr\x18\x04 \x01(\x0e\x32\x08.MsgAttr\x12\x0c\n\x04seqs\x18\x05 \x01(\x05\x12\x0f\n\x07version\x18\x06 \x01(\x05\x12\x0f\n\x07subtype\x18\x07 \x01(\x05\x12\x16\n\x03net\x18\x08 \x01(\x0b\x32\x07.DevNetH\x00\x12\x17\n\x03sys\x18\n \x01(\x0b\x32\x08.MctlSysH\x00\x12\x17\n\x03nav\x18\x0b \x01(\x0b\x32\x08.MctlNavH\x00\x12\x1d\n\x06\x64river\x18\x0c \x01(\x0b\x32\x0b.MctlDriverH\x00\x12\x17\n\x03ota\x18\r \x01(\x0b\x32\x08.MctlOtaH\x00\x12\x16\n\x03mul\x18\x0e \x01(\x0b\x32\x07.SocMulH\x00\x12\x18\n\x04null\x18\x10 \x01(\x0b\x32\x08.MsgNullH\x00\x12\x19\n\x04pept\x18\x11 \x01(\x0b\x32\t.MctlPeptH\x00\x12\x1c\n\x04\x62\x61se\x18\x12 \x01(\x0b\x32\x0c.BaseStationH\x00\x12\x11\n\ttimestamp\x18\x0f \x01(\x04\x42\x0c\n\nLubaSubMsg*\xf6\x02\n\nMsgCmdType\x12\x16\n\x12MSG_CMD_TYPE_START\x10\x00\x12\x15\n\x10MSG_CMD_TYPE_NAV\x10\xf0\x01\x12\x1e\n\x19MSG_CMD_TYPE_LOCALIZATION\x10\xf1\x01\x12\x1a\n\x15MSG_CMD_TYPE_PLANNING\x10\xf2\x01\x12\x1e\n\x19MSG_CMD_TYPE_EMBED_DRIVER\x10\xf3\x01\x12\x1b\n\x16MSG_CMD_TYPE_EMBED_SYS\x10\xf4\x01\x12\x1f\n\x1aMSG_CMD_TYPE_EMBED_MIDWARE\x10\xf5\x01\x12\x1b\n\x16MSG_CMD_TYPE_EMBED_OTA\x10\xf6\x01\x12\x1d\n\x18MSG_CMD_TYPE_APPLICATION\x10\xf7\x01\x12\x15\n\x10MSG_CMD_TYPE_ESP\x10\xf8\x01\x12\x15\n\x10MSG_CMD_TYPE_MUL\x10\xf9\x01\x12\x16\n\x11MSG_CMD_TYPE_PEPT\x10\xfa\x01\x12\x1d\n\x18MSG_CMD_TYPE_BASESTATION\x10\xfb\x01*V\n\x07MsgAttr\x12\x11\n\rMSG_ATTR_NONE\x10\x00\x12\x10\n\x0cMSG_ATTR_REQ\x10\x01\x12\x11\n\rMSG_ATTR_RESP\x10\x02\x12\x13\n\x0fMSG_ATTR_REPORT\x10\x03*\xa8\x02\n\tMsgDevice\x12\x10\n\x0c\x44\x45V_COMM_ESP\x10\x00\x12\x0f\n\x0b\x44\x45V_MAINCTL\x10\x01\x12\x11\n\rDEV_LEFTMOTOR\x10\x02\x12\x12\n\x0e\x44\x45V_RIGHTMOTOR\x10\x03\x12\x13\n\x0f\x44\x45V_BASESTATION\x10\x04\x12\x0e\n\nDEV_RTKCLI\x10\x05\x12\x0f\n\x0b\x44\x45V_USBHOST\x10\x06\x12\x11\n\rDEV_MOBILEAPP\x10\x07\x12\x11\n\rDEV_IOTSERVER\x10\x08\x12\x0b\n\x07\x44\x45V_BMS\x10\t\x12\x12\n\x0e\x44\x45V_NAVIGATION\x10\x11\x12\x14\n\x10\x44\x45V_LOCALIZATION\x10\x12\x12\x12\n\x0e\x44\x45V_PERCEPTION\x10\x13\x12\x19\n\x15SOC_MODULE_MULTIMEDIA\x10\x15\x12\x0f\n\x0b\x44\x45V_IOTCTRL\x10\x1d\x62\x06proto3')
25
25
 
26
26
  _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
27
27
  _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'pymammotion.proto.luba_msg_pb2', globals())
@@ -29,11 +29,11 @@ if _descriptor._USE_C_DESCRIPTORS == False:
29
29
 
30
30
  DESCRIPTOR._options = None
31
31
  _MSGCMDTYPE._serialized_start=773
32
- _MSGCMDTYPE._serialized_end=1116
33
- _MSGATTR._serialized_start=1118
34
- _MSGATTR._serialized_end=1204
35
- _MSGDEVICE._serialized_start=1207
36
- _MSGDEVICE._serialized_end=1503
32
+ _MSGCMDTYPE._serialized_end=1147
33
+ _MSGATTR._serialized_start=1149
34
+ _MSGATTR._serialized_end=1235
35
+ _MSGDEVICE._serialized_start=1238
36
+ _MSGDEVICE._serialized_end=1534
37
37
  _MSGNULL._serialized_start=319
38
38
  _MSGNULL._serialized_end=328
39
39
  _LUBAMSG._serialized_start=331
@@ -31,6 +31,7 @@ MSG_ATTR_REPORT: MsgAttr
31
31
  MSG_ATTR_REQ: MsgAttr
32
32
  MSG_ATTR_RESP: MsgAttr
33
33
  MSG_CMD_TYPE_APPLICATION: MsgCmdType
34
+ MSG_CMD_TYPE_BASESTATION: MsgCmdType
34
35
  MSG_CMD_TYPE_EMBED_DRIVER: MsgCmdType
35
36
  MSG_CMD_TYPE_EMBED_MIDWARE: MsgCmdType
36
37
  MSG_CMD_TYPE_EMBED_OTA: MsgCmdType
@@ -108,6 +108,10 @@ message MulSetWiperAck {
108
108
  MUL_WIPER_ERROR_CODE error_code = 1;
109
109
  }
110
110
 
111
+ message MulSetEncode {
112
+ bool encode = 1;
113
+ }
114
+
111
115
  message SocMul {
112
116
  oneof SubMul {
113
117
  MulSetAudio set_audio = 1;
@@ -120,5 +124,6 @@ message SocMul {
120
124
  SetHeadlamp set_lamp = 8;
121
125
  Setlamprsp set_lamp_rsp = 9;
122
126
  Getlamprsp get_lamp_rsp = 10;
127
+ MulSetEncode req_encode = 11;
123
128
  }
124
129
  }
@@ -13,27 +13,27 @@ _sym_db = _symbol_database.Default()
13
13
 
14
14
 
15
15
 
16
- DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n pymammotion/proto/luba_mul.proto\"o\n\x0bMulSetAudio\x12\x13\n\tat_switch\x18\x01 \x01(\x05H\x00\x12$\n\x0b\x61u_language\x18\x02 \x01(\x0e\x32\r.MUL_LANGUAGEH\x00\x12\x17\n\x03sex\x18\x03 \x01(\x0e\x32\x08.MUL_SEXH\x00\x42\x0c\n\nAudioCfg_u\"H\n\x0bMulSetVideo\x12&\n\x08position\x18\x01 \x01(\x0e\x32\x14.MUL_CAMERA_POSITION\x12\x11\n\tvi_switch\x18\x02 \x01(\x05\";\n\x0eMulSetVideoAck\x12)\n\nerror_code\x18\x01 \x01(\x0e\x32\x15.MUL_VIDEO_ERROR_CODE\"[\n\x0bMulAudioCfg\x12\x11\n\tau_switch\x18\x01 \x01(\x05\x12\"\n\x0b\x61u_language\x18\x02 \x01(\x0e\x32\r.MUL_LANGUAGE\x12\x15\n\x03sex\x18\x03 \x01(\x0e\x32\x08.MUL_SEX\"\x1c\n\x0bMulSetWiper\x12\r\n\x05round\x18\x01 \x01(\x05\"\x1e\n\x0bGetHeadlamp\x12\x0f\n\x07get_ids\x18\x01 \x01(\x05\"\xba\x01\n\x0bSetHeadlamp\x12\x0f\n\x07set_ids\x18\x01 \x01(\x05\x12\x17\n\x0flamp_power_ctrl\x18\x02 \x01(\x05\x12!\n\tlamp_ctrl\x18\x03 \x01(\x0e\x32\x0e.lamp_ctrl_sta\x12\x18\n\x10\x63trl_lamp_bright\x18\x04 \x01(\x08\x12\x13\n\x0blamp_bright\x18\x05 \x01(\x05\x12/\n\x10lamp_manual_ctrl\x18\x06 \x01(\x0e\x32\x15.lamp_manual_ctrl_sta\"-\n\nSetlamprsp\x12\x0f\n\x07set_ids\x18\x01 \x01(\x05\x12\x0e\n\x06result\x18\x02 \x01(\x05\"\x96\x01\n\nGetlamprsp\x12\x0f\n\x07get_ids\x18\x01 \x01(\x05\x12\x0e\n\x06result\x18\x02 \x01(\x05\x12!\n\tlamp_ctrl\x18\x03 \x01(\x0e\x32\x0e.lamp_ctrl_sta\x12\x13\n\x0blamp_bright\x18\x04 \x01(\x05\x12/\n\x10lamp_manual_ctrl\x18\x05 \x01(\x0e\x32\x15.lamp_manual_ctrl_sta\";\n\x0eMulSetWiperAck\x12)\n\nerror_code\x18\x01 \x01(\x0e\x32\x15.MUL_WIPER_ERROR_CODE\"\x80\x03\n\x06SocMul\x12!\n\tset_audio\x18\x01 \x01(\x0b\x32\x0c.MulSetAudioH\x00\x12!\n\taudio_cfg\x18\x02 \x01(\x0b\x32\x0c.MulAudioCfgH\x00\x12!\n\tset_video\x18\x03 \x01(\x0b\x32\x0c.MulSetVideoH\x00\x12(\n\rset_video_ack\x18\x04 \x01(\x0b\x32\x0f.MulSetVideoAckH\x00\x12!\n\tset_wiper\x18\x05 \x01(\x0b\x32\x0c.MulSetWiperH\x00\x12(\n\rset_wiper_ack\x18\x06 \x01(\x0b\x32\x0f.MulSetWiperAckH\x00\x12 \n\x08get_lamp\x18\x07 \x01(\x0b\x32\x0c.GetHeadlampH\x00\x12 \n\x08set_lamp\x18\x08 \x01(\x0b\x32\x0c.SetHeadlampH\x00\x12#\n\x0cset_lamp_rsp\x18\t \x01(\x0b\x32\x0b.SetlamprspH\x00\x12#\n\x0cget_lamp_rsp\x18\n \x01(\x0b\x32\x0b.GetlamprspH\x00\x42\x08\n\x06SubMul*v\n\x0cMUL_LANGUAGE\x12\x0b\n\x07\x45NGLISH\x10\x00\x12\n\n\x06GERMAN\x10\x01\x12\n\n\x06\x46RENCH\x10\x02\x12\x0b\n\x07ITALIAN\x10\x03\x12\x0b\n\x07SPANISH\x10\x04\x12\x0e\n\nPORTUGUESE\x10\x05\x12\t\n\x05\x44UTCH\x10\x06\x12\x0c\n\x08NONE_LAN\x10\x07*+\n\x07MUL_SEX\x12\x07\n\x03MAN\x10\x00\x12\t\n\x05WOMAN\x10\x01\x12\x0c\n\x08NONE_SEX\x10\x02*=\n\x13MUL_CAMERA_POSITION\x12\x08\n\x04LEFT\x10\x00\x12\t\n\x05RIGHT\x10\x01\x12\x08\n\x04REAR\x10\x02\x12\x07\n\x03\x41LL\x10\x03*\x9d\x01\n\x14MUL_VIDEO_ERROR_CODE\x12\x0b\n\x07SUCCESS\x10\x00\x12\x15\n\x11\x41\x43TIVATION_FAILED\x10\x01\x12\x19\n\x15NETWORK_NOT_AVAILABLE\x10\x02\x12\x19\n\x15\x43REATE_CHANNEL_FAILED\x10\x03\x12\x11\n\rPARAM_INVAILD\x10\x04\x12\x18\n\x14\x43\x45LLULAR_RESTRICTION\x10\x05*Q\n\x14MUL_WIPER_ERROR_CODE\x12\x0f\n\x0bSET_SUCCESS\x10\x00\x12\x0c\n\x08HW_ERROR\x10\x01\x12\x1a\n\x16NAVIGATION_WORK_FORBID\x10\x02*?\n\rlamp_ctrl_sta\x12\r\n\tpower_off\x10\x00\x12\x0c\n\x08power_on\x10\x01\x12\x11\n\rpower_ctrl_on\x10\x02*A\n\x14lamp_manual_ctrl_sta\x12\x14\n\x10manual_power_off\x10\x00\x12\x13\n\x0fmanual_power_on\x10\x01\x62\x06proto3')
16
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n pymammotion/proto/luba_mul.proto\"o\n\x0bMulSetAudio\x12\x13\n\tat_switch\x18\x01 \x01(\x05H\x00\x12$\n\x0b\x61u_language\x18\x02 \x01(\x0e\x32\r.MUL_LANGUAGEH\x00\x12\x17\n\x03sex\x18\x03 \x01(\x0e\x32\x08.MUL_SEXH\x00\x42\x0c\n\nAudioCfg_u\"H\n\x0bMulSetVideo\x12&\n\x08position\x18\x01 \x01(\x0e\x32\x14.MUL_CAMERA_POSITION\x12\x11\n\tvi_switch\x18\x02 \x01(\x05\";\n\x0eMulSetVideoAck\x12)\n\nerror_code\x18\x01 \x01(\x0e\x32\x15.MUL_VIDEO_ERROR_CODE\"[\n\x0bMulAudioCfg\x12\x11\n\tau_switch\x18\x01 \x01(\x05\x12\"\n\x0b\x61u_language\x18\x02 \x01(\x0e\x32\r.MUL_LANGUAGE\x12\x15\n\x03sex\x18\x03 \x01(\x0e\x32\x08.MUL_SEX\"\x1c\n\x0bMulSetWiper\x12\r\n\x05round\x18\x01 \x01(\x05\"\x1e\n\x0bGetHeadlamp\x12\x0f\n\x07get_ids\x18\x01 \x01(\x05\"\xba\x01\n\x0bSetHeadlamp\x12\x0f\n\x07set_ids\x18\x01 \x01(\x05\x12\x17\n\x0flamp_power_ctrl\x18\x02 \x01(\x05\x12!\n\tlamp_ctrl\x18\x03 \x01(\x0e\x32\x0e.lamp_ctrl_sta\x12\x18\n\x10\x63trl_lamp_bright\x18\x04 \x01(\x08\x12\x13\n\x0blamp_bright\x18\x05 \x01(\x05\x12/\n\x10lamp_manual_ctrl\x18\x06 \x01(\x0e\x32\x15.lamp_manual_ctrl_sta\"-\n\nSetlamprsp\x12\x0f\n\x07set_ids\x18\x01 \x01(\x05\x12\x0e\n\x06result\x18\x02 \x01(\x05\"\x96\x01\n\nGetlamprsp\x12\x0f\n\x07get_ids\x18\x01 \x01(\x05\x12\x0e\n\x06result\x18\x02 \x01(\x05\x12!\n\tlamp_ctrl\x18\x03 \x01(\x0e\x32\x0e.lamp_ctrl_sta\x12\x13\n\x0blamp_bright\x18\x04 \x01(\x05\x12/\n\x10lamp_manual_ctrl\x18\x05 \x01(\x0e\x32\x15.lamp_manual_ctrl_sta\";\n\x0eMulSetWiperAck\x12)\n\nerror_code\x18\x01 \x01(\x0e\x32\x15.MUL_WIPER_ERROR_CODE\"\x1e\n\x0cMulSetEncode\x12\x0e\n\x06\x65ncode\x18\x01 \x01(\x08\"\xa5\x03\n\x06SocMul\x12!\n\tset_audio\x18\x01 \x01(\x0b\x32\x0c.MulSetAudioH\x00\x12!\n\taudio_cfg\x18\x02 \x01(\x0b\x32\x0c.MulAudioCfgH\x00\x12!\n\tset_video\x18\x03 \x01(\x0b\x32\x0c.MulSetVideoH\x00\x12(\n\rset_video_ack\x18\x04 \x01(\x0b\x32\x0f.MulSetVideoAckH\x00\x12!\n\tset_wiper\x18\x05 \x01(\x0b\x32\x0c.MulSetWiperH\x00\x12(\n\rset_wiper_ack\x18\x06 \x01(\x0b\x32\x0f.MulSetWiperAckH\x00\x12 \n\x08get_lamp\x18\x07 \x01(\x0b\x32\x0c.GetHeadlampH\x00\x12 \n\x08set_lamp\x18\x08 \x01(\x0b\x32\x0c.SetHeadlampH\x00\x12#\n\x0cset_lamp_rsp\x18\t \x01(\x0b\x32\x0b.SetlamprspH\x00\x12#\n\x0cget_lamp_rsp\x18\n \x01(\x0b\x32\x0b.GetlamprspH\x00\x12#\n\nreq_encode\x18\x0b \x01(\x0b\x32\r.MulSetEncodeH\x00\x42\x08\n\x06SubMul*v\n\x0cMUL_LANGUAGE\x12\x0b\n\x07\x45NGLISH\x10\x00\x12\n\n\x06GERMAN\x10\x01\x12\n\n\x06\x46RENCH\x10\x02\x12\x0b\n\x07ITALIAN\x10\x03\x12\x0b\n\x07SPANISH\x10\x04\x12\x0e\n\nPORTUGUESE\x10\x05\x12\t\n\x05\x44UTCH\x10\x06\x12\x0c\n\x08NONE_LAN\x10\x07*+\n\x07MUL_SEX\x12\x07\n\x03MAN\x10\x00\x12\t\n\x05WOMAN\x10\x01\x12\x0c\n\x08NONE_SEX\x10\x02*=\n\x13MUL_CAMERA_POSITION\x12\x08\n\x04LEFT\x10\x00\x12\t\n\x05RIGHT\x10\x01\x12\x08\n\x04REAR\x10\x02\x12\x07\n\x03\x41LL\x10\x03*\x9d\x01\n\x14MUL_VIDEO_ERROR_CODE\x12\x0b\n\x07SUCCESS\x10\x00\x12\x15\n\x11\x41\x43TIVATION_FAILED\x10\x01\x12\x19\n\x15NETWORK_NOT_AVAILABLE\x10\x02\x12\x19\n\x15\x43REATE_CHANNEL_FAILED\x10\x03\x12\x11\n\rPARAM_INVAILD\x10\x04\x12\x18\n\x14\x43\x45LLULAR_RESTRICTION\x10\x05*Q\n\x14MUL_WIPER_ERROR_CODE\x12\x0f\n\x0bSET_SUCCESS\x10\x00\x12\x0c\n\x08HW_ERROR\x10\x01\x12\x1a\n\x16NAVIGATION_WORK_FORBID\x10\x02*?\n\rlamp_ctrl_sta\x12\r\n\tpower_off\x10\x00\x12\x0c\n\x08power_on\x10\x01\x12\x11\n\rpower_ctrl_on\x10\x02*A\n\x14lamp_manual_ctrl_sta\x12\x14\n\x10manual_power_off\x10\x00\x12\x13\n\x0fmanual_power_on\x10\x01\x62\x06proto3')
17
17
 
18
18
  _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
19
19
  _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'pymammotion.proto.luba_mul_pb2', globals())
20
20
  if _descriptor._USE_C_DESCRIPTORS == False:
21
21
 
22
22
  DESCRIPTOR._options = None
23
- _MUL_LANGUAGE._serialized_start=1276
24
- _MUL_LANGUAGE._serialized_end=1394
25
- _MUL_SEX._serialized_start=1396
26
- _MUL_SEX._serialized_end=1439
27
- _MUL_CAMERA_POSITION._serialized_start=1441
28
- _MUL_CAMERA_POSITION._serialized_end=1502
29
- _MUL_VIDEO_ERROR_CODE._serialized_start=1505
30
- _MUL_VIDEO_ERROR_CODE._serialized_end=1662
31
- _MUL_WIPER_ERROR_CODE._serialized_start=1664
32
- _MUL_WIPER_ERROR_CODE._serialized_end=1745
33
- _LAMP_CTRL_STA._serialized_start=1747
34
- _LAMP_CTRL_STA._serialized_end=1810
35
- _LAMP_MANUAL_CTRL_STA._serialized_start=1812
36
- _LAMP_MANUAL_CTRL_STA._serialized_end=1877
23
+ _MUL_LANGUAGE._serialized_start=1345
24
+ _MUL_LANGUAGE._serialized_end=1463
25
+ _MUL_SEX._serialized_start=1465
26
+ _MUL_SEX._serialized_end=1508
27
+ _MUL_CAMERA_POSITION._serialized_start=1510
28
+ _MUL_CAMERA_POSITION._serialized_end=1571
29
+ _MUL_VIDEO_ERROR_CODE._serialized_start=1574
30
+ _MUL_VIDEO_ERROR_CODE._serialized_end=1731
31
+ _MUL_WIPER_ERROR_CODE._serialized_start=1733
32
+ _MUL_WIPER_ERROR_CODE._serialized_end=1814
33
+ _LAMP_CTRL_STA._serialized_start=1816
34
+ _LAMP_CTRL_STA._serialized_end=1879
35
+ _LAMP_MANUAL_CTRL_STA._serialized_start=1881
36
+ _LAMP_MANUAL_CTRL_STA._serialized_end=1946
37
37
  _MULSETAUDIO._serialized_start=36
38
38
  _MULSETAUDIO._serialized_end=147
39
39
  _MULSETVIDEO._serialized_start=149
@@ -54,6 +54,8 @@ if _descriptor._USE_C_DESCRIPTORS == False:
54
54
  _GETLAMPRSP._serialized_end=826
55
55
  _MULSETWIPERACK._serialized_start=828
56
56
  _MULSETWIPERACK._serialized_end=887
57
- _SOCMUL._serialized_start=890
58
- _SOCMUL._serialized_end=1274
57
+ _MULSETENCODE._serialized_start=889
58
+ _MULSETENCODE._serialized_end=919
59
+ _SOCMUL._serialized_start=922
60
+ _SOCMUL._serialized_end=1343
59
61
  # @@protoc_insertion_point(module_scope)
@@ -74,6 +74,12 @@ class MulSetAudio(_message.Message):
74
74
  sex: MUL_SEX
75
75
  def __init__(self, at_switch: _Optional[int] = ..., au_language: _Optional[_Union[MUL_LANGUAGE, str]] = ..., sex: _Optional[_Union[MUL_SEX, str]] = ...) -> None: ...
76
76
 
77
+ class MulSetEncode(_message.Message):
78
+ __slots__ = ["encode"]
79
+ ENCODE_FIELD_NUMBER: _ClassVar[int]
80
+ encode: bool
81
+ def __init__(self, encode: bool = ...) -> None: ...
82
+
77
83
  class MulSetVideo(_message.Message):
78
84
  __slots__ = ["position", "vi_switch"]
79
85
  POSITION_FIELD_NUMBER: _ClassVar[int]
@@ -125,10 +131,11 @@ class Setlamprsp(_message.Message):
125
131
  def __init__(self, set_ids: _Optional[int] = ..., result: _Optional[int] = ...) -> None: ...
126
132
 
127
133
  class SocMul(_message.Message):
128
- __slots__ = ["audio_cfg", "get_lamp", "get_lamp_rsp", "set_audio", "set_lamp", "set_lamp_rsp", "set_video", "set_video_ack", "set_wiper", "set_wiper_ack"]
134
+ __slots__ = ["audio_cfg", "get_lamp", "get_lamp_rsp", "req_encode", "set_audio", "set_lamp", "set_lamp_rsp", "set_video", "set_video_ack", "set_wiper", "set_wiper_ack"]
129
135
  AUDIO_CFG_FIELD_NUMBER: _ClassVar[int]
130
136
  GET_LAMP_FIELD_NUMBER: _ClassVar[int]
131
137
  GET_LAMP_RSP_FIELD_NUMBER: _ClassVar[int]
138
+ REQ_ENCODE_FIELD_NUMBER: _ClassVar[int]
132
139
  SET_AUDIO_FIELD_NUMBER: _ClassVar[int]
133
140
  SET_LAMP_FIELD_NUMBER: _ClassVar[int]
134
141
  SET_LAMP_RSP_FIELD_NUMBER: _ClassVar[int]
@@ -139,6 +146,7 @@ class SocMul(_message.Message):
139
146
  audio_cfg: MulAudioCfg
140
147
  get_lamp: GetHeadlamp
141
148
  get_lamp_rsp: Getlamprsp
149
+ req_encode: MulSetEncode
142
150
  set_audio: MulSetAudio
143
151
  set_lamp: SetHeadlamp
144
152
  set_lamp_rsp: Setlamprsp
@@ -146,7 +154,7 @@ class SocMul(_message.Message):
146
154
  set_video_ack: MulSetVideoAck
147
155
  set_wiper: MulSetWiper
148
156
  set_wiper_ack: MulSetWiperAck
149
- def __init__(self, set_audio: _Optional[_Union[MulSetAudio, _Mapping]] = ..., audio_cfg: _Optional[_Union[MulAudioCfg, _Mapping]] = ..., set_video: _Optional[_Union[MulSetVideo, _Mapping]] = ..., set_video_ack: _Optional[_Union[MulSetVideoAck, _Mapping]] = ..., set_wiper: _Optional[_Union[MulSetWiper, _Mapping]] = ..., set_wiper_ack: _Optional[_Union[MulSetWiperAck, _Mapping]] = ..., get_lamp: _Optional[_Union[GetHeadlamp, _Mapping]] = ..., set_lamp: _Optional[_Union[SetHeadlamp, _Mapping]] = ..., set_lamp_rsp: _Optional[_Union[Setlamprsp, _Mapping]] = ..., get_lamp_rsp: _Optional[_Union[Getlamprsp, _Mapping]] = ...) -> None: ...
157
+ def __init__(self, set_audio: _Optional[_Union[MulSetAudio, _Mapping]] = ..., audio_cfg: _Optional[_Union[MulAudioCfg, _Mapping]] = ..., set_video: _Optional[_Union[MulSetVideo, _Mapping]] = ..., set_video_ack: _Optional[_Union[MulSetVideoAck, _Mapping]] = ..., set_wiper: _Optional[_Union[MulSetWiper, _Mapping]] = ..., set_wiper_ack: _Optional[_Union[MulSetWiperAck, _Mapping]] = ..., get_lamp: _Optional[_Union[GetHeadlamp, _Mapping]] = ..., set_lamp: _Optional[_Union[SetHeadlamp, _Mapping]] = ..., set_lamp_rsp: _Optional[_Union[Setlamprsp, _Mapping]] = ..., get_lamp_rsp: _Optional[_Union[Getlamprsp, _Mapping]] = ..., req_encode: _Optional[_Union[MulSetEncode, _Mapping]] = ...) -> None: ...
150
158
 
151
159
  class MUL_LANGUAGE(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
152
160
  __slots__ = []
@@ -1,5 +1,19 @@
1
1
  syntax = "proto3";
2
2
 
3
+ enum CollectMotorState {
4
+ COLLECT_CLOSE = 0;
5
+ COLLECT_OPEN = 1;
6
+ COLLECT_STUCK = 2;
7
+ COLLECT_ABNORMAL = 3;
8
+ }
9
+
10
+ enum UnloadMotorState {
11
+ UNLOAD_CLOSE = 0;
12
+ UNLOAD_OPEN = 1;
13
+ UNLOAD_STOP = 2;
14
+ UNLOAD_RUNNING = 3;
15
+ }
16
+
3
17
  message DrvMotionCtrl {
4
18
  int32 setLinearSpeed = 1;
5
19
  int32 setAngularSpeed = 2;
@@ -22,6 +36,12 @@ message DrvKnifeChangeReport {
22
36
  int32 is_start = 1;
23
37
  int32 start_high = 2;
24
38
  int32 end_high = 3;
39
+ int32 cur_high = 4;
40
+ }
41
+
42
+ message DrvCollectCtrlByHand {
43
+ int32 collect_ctrl = 1;
44
+ int32 unload_ctrl = 2;
25
45
  }
26
46
 
27
47
  message DrvMowCtrlByHand {
@@ -63,5 +83,6 @@ message MctlDriver {
63
83
  rtk_sys_mask_query_t rtk_sys_mask_query = 9;
64
84
  rtk_sys_mask_query_ack_t rtk_sys_mask_query_ack = 10;
65
85
  DrvKnifeChangeReport toapp_knife_status_change = 11;
86
+ DrvCollectCtrlByHand collect_ctrl_by_hand = 12;
66
87
  }
67
88
  }
@@ -0,0 +1,51 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
3
+ # source: pymammotion/proto/mctrl_driver.proto
4
+ """Generated protocol buffer code."""
5
+ from google.protobuf.internal import builder as _builder
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
+ # @@protoc_insertion_point(imports)
10
+
11
+ _sym_db = _symbol_database.Default()
12
+
13
+
14
+
15
+
16
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n$pymammotion/proto/mctrl_driver.proto\"@\n\rDrvMotionCtrl\x12\x16\n\x0esetLinearSpeed\x18\x01 \x01(\x05\x12\x17\n\x0fsetAngularSpeed\x18\x02 \x01(\x05\"%\n\x0e\x44rvKnifeHeight\x12\x13\n\x0bknifeHeight\x18\x01 \x01(\x05\"\'\n\nDrvSrSpeed\x12\n\n\x02rw\x18\x01 \x01(\x05\x12\r\n\x05speed\x18\x02 \x01(\x02\"&\n\x0e\x44rvKnifeStatus\x12\x14\n\x0cknife_status\x18\x01 \x01(\x05\"`\n\x14\x44rvKnifeChangeReport\x12\x10\n\x08is_start\x18\x01 \x01(\x05\x12\x12\n\nstart_high\x18\x02 \x01(\x05\x12\x10\n\x08\x65nd_high\x18\x03 \x01(\x05\x12\x10\n\x08\x63ur_high\x18\x04 \x01(\x05\"A\n\x14\x44rvCollectCtrlByHand\x12\x14\n\x0c\x63ollect_ctrl\x18\x01 \x01(\x05\x12\x13\n\x0bunload_ctrl\x18\x02 \x01(\x05\"n\n\x10\x44rvMowCtrlByHand\x12\x11\n\tmain_ctrl\x18\x01 \x01(\x05\x12\x16\n\x0e\x63ut_knife_ctrl\x18\x02 \x01(\x05\x12\x18\n\x10\x63ut_knife_height\x18\x03 \x01(\x05\x12\x15\n\rmax_run_Speed\x18\x04 \x01(\x02\"4\n\rrtk_cfg_req_t\x12\x12\n\ncmd_length\x18\x01 \x01(\x05\x12\x0f\n\x07\x63md_req\x18\x02 \x01(\t\"=\n\x11rtk_cfg_req_ack_t\x12\x12\n\ncmd_length\x18\x01 \x01(\x05\x12\x14\n\x0c\x63md_response\x18\x02 \x01(\t\"*\n\x14rtk_sys_mask_query_t\x12\x12\n\nsat_system\x18\x01 \x01(\r\"H\n\x18rtk_sys_mask_query_ack_t\x12\x12\n\nsat_system\x18\x01 \x01(\r\x12\x18\n\x10system_mask_bits\x18\x02 \x03(\r\"\xfa\x04\n\nMctlDriver\x12.\n\x14todev_devmotion_ctrl\x18\x01 \x01(\x0b\x32\x0e.DrvMotionCtrlH\x00\x12\x31\n\x16todev_knife_height_set\x18\x02 \x01(\x0b\x32\x0f.DrvKnifeHeightH\x00\x12,\n\x15\x62idire_speed_read_set\x18\x03 \x01(\x0b\x32\x0b.DrvSrSpeedH\x00\x12\x35\n\x1a\x62idire_knife_height_report\x18\x04 \x01(\x0b\x32\x0f.DrvKnifeHeightH\x00\x12-\n\x12toapp_knife_status\x18\x05 \x01(\x0b\x32\x0f.DrvKnifeStatusH\x00\x12-\n\x10mow_ctrl_by_hand\x18\x06 \x01(\x0b\x32\x11.DrvMowCtrlByHandH\x00\x12%\n\x0brtk_cfg_req\x18\x07 \x01(\x0b\x32\x0e.rtk_cfg_req_tH\x00\x12-\n\x0frtk_cfg_req_ack\x18\x08 \x01(\x0b\x32\x12.rtk_cfg_req_ack_tH\x00\x12\x33\n\x12rtk_sys_mask_query\x18\t \x01(\x0b\x32\x15.rtk_sys_mask_query_tH\x00\x12;\n\x16rtk_sys_mask_query_ack\x18\n \x01(\x0b\x32\x19.rtk_sys_mask_query_ack_tH\x00\x12:\n\x19toapp_knife_status_change\x18\x0b \x01(\x0b\x32\x15.DrvKnifeChangeReportH\x00\x12\x35\n\x14\x63ollect_ctrl_by_hand\x18\x0c \x01(\x0b\x32\x15.DrvCollectCtrlByHandH\x00\x42\x0b\n\tSubDrvMsg*a\n\x11\x43ollectMotorState\x12\x11\n\rCOLLECT_CLOSE\x10\x00\x12\x10\n\x0c\x43OLLECT_OPEN\x10\x01\x12\x11\n\rCOLLECT_STUCK\x10\x02\x12\x14\n\x10\x43OLLECT_ABNORMAL\x10\x03*Z\n\x10UnloadMotorState\x12\x10\n\x0cUNLOAD_CLOSE\x10\x00\x12\x0f\n\x0bUNLOAD_OPEN\x10\x01\x12\x0f\n\x0bUNLOAD_STOP\x10\x02\x12\x12\n\x0eUNLOAD_RUNNING\x10\x03\x62\x06proto3')
17
+
18
+ _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
19
+ _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'pymammotion.proto.mctrl_driver_pb2', globals())
20
+ if _descriptor._USE_C_DESCRIPTORS == False:
21
+
22
+ DESCRIPTOR._options = None
23
+ _COLLECTMOTORSTATE._serialized_start=1375
24
+ _COLLECTMOTORSTATE._serialized_end=1472
25
+ _UNLOADMOTORSTATE._serialized_start=1474
26
+ _UNLOADMOTORSTATE._serialized_end=1564
27
+ _DRVMOTIONCTRL._serialized_start=40
28
+ _DRVMOTIONCTRL._serialized_end=104
29
+ _DRVKNIFEHEIGHT._serialized_start=106
30
+ _DRVKNIFEHEIGHT._serialized_end=143
31
+ _DRVSRSPEED._serialized_start=145
32
+ _DRVSRSPEED._serialized_end=184
33
+ _DRVKNIFESTATUS._serialized_start=186
34
+ _DRVKNIFESTATUS._serialized_end=224
35
+ _DRVKNIFECHANGEREPORT._serialized_start=226
36
+ _DRVKNIFECHANGEREPORT._serialized_end=322
37
+ _DRVCOLLECTCTRLBYHAND._serialized_start=324
38
+ _DRVCOLLECTCTRLBYHAND._serialized_end=389
39
+ _DRVMOWCTRLBYHAND._serialized_start=391
40
+ _DRVMOWCTRLBYHAND._serialized_end=501
41
+ _RTK_CFG_REQ_T._serialized_start=503
42
+ _RTK_CFG_REQ_T._serialized_end=555
43
+ _RTK_CFG_REQ_ACK_T._serialized_start=557
44
+ _RTK_CFG_REQ_ACK_T._serialized_end=618
45
+ _RTK_SYS_MASK_QUERY_T._serialized_start=620
46
+ _RTK_SYS_MASK_QUERY_T._serialized_end=662
47
+ _RTK_SYS_MASK_QUERY_ACK_T._serialized_start=664
48
+ _RTK_SYS_MASK_QUERY_ACK_T._serialized_end=736
49
+ _MCTLDRIVER._serialized_start=739
50
+ _MCTLDRIVER._serialized_end=1373
51
+ # @@protoc_insertion_point(module_scope)
@@ -1,19 +1,38 @@
1
1
  from google.protobuf.internal import containers as _containers
2
+ from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper
2
3
  from google.protobuf import descriptor as _descriptor
3
4
  from google.protobuf import message as _message
4
5
  from typing import ClassVar as _ClassVar, Iterable as _Iterable, Mapping as _Mapping, Optional as _Optional, Union as _Union
5
6
 
7
+ COLLECT_ABNORMAL: CollectMotorState
8
+ COLLECT_CLOSE: CollectMotorState
9
+ COLLECT_OPEN: CollectMotorState
10
+ COLLECT_STUCK: CollectMotorState
6
11
  DESCRIPTOR: _descriptor.FileDescriptor
12
+ UNLOAD_CLOSE: UnloadMotorState
13
+ UNLOAD_OPEN: UnloadMotorState
14
+ UNLOAD_RUNNING: UnloadMotorState
15
+ UNLOAD_STOP: UnloadMotorState
16
+
17
+ class DrvCollectCtrlByHand(_message.Message):
18
+ __slots__ = ["collect_ctrl", "unload_ctrl"]
19
+ COLLECT_CTRL_FIELD_NUMBER: _ClassVar[int]
20
+ UNLOAD_CTRL_FIELD_NUMBER: _ClassVar[int]
21
+ collect_ctrl: int
22
+ unload_ctrl: int
23
+ def __init__(self, collect_ctrl: _Optional[int] = ..., unload_ctrl: _Optional[int] = ...) -> None: ...
7
24
 
8
25
  class DrvKnifeChangeReport(_message.Message):
9
- __slots__ = ["end_high", "is_start", "start_high"]
26
+ __slots__ = ["cur_high", "end_high", "is_start", "start_high"]
27
+ CUR_HIGH_FIELD_NUMBER: _ClassVar[int]
10
28
  END_HIGH_FIELD_NUMBER: _ClassVar[int]
11
29
  IS_START_FIELD_NUMBER: _ClassVar[int]
12
30
  START_HIGH_FIELD_NUMBER: _ClassVar[int]
31
+ cur_high: int
13
32
  end_high: int
14
33
  is_start: int
15
34
  start_high: int
16
- def __init__(self, is_start: _Optional[int] = ..., start_high: _Optional[int] = ..., end_high: _Optional[int] = ...) -> None: ...
35
+ def __init__(self, is_start: _Optional[int] = ..., start_high: _Optional[int] = ..., end_high: _Optional[int] = ..., cur_high: _Optional[int] = ...) -> None: ...
17
36
 
18
37
  class DrvKnifeHeight(_message.Message):
19
38
  __slots__ = ["knifeHeight"]
@@ -56,9 +75,10 @@ class DrvSrSpeed(_message.Message):
56
75
  def __init__(self, rw: _Optional[int] = ..., speed: _Optional[float] = ...) -> None: ...
57
76
 
58
77
  class MctlDriver(_message.Message):
59
- __slots__ = ["bidire_knife_height_report", "bidire_speed_read_set", "mow_ctrl_by_hand", "rtk_cfg_req", "rtk_cfg_req_ack", "rtk_sys_mask_query", "rtk_sys_mask_query_ack", "toapp_knife_status", "toapp_knife_status_change", "todev_devmotion_ctrl", "todev_knife_height_set"]
78
+ __slots__ = ["bidire_knife_height_report", "bidire_speed_read_set", "collect_ctrl_by_hand", "mow_ctrl_by_hand", "rtk_cfg_req", "rtk_cfg_req_ack", "rtk_sys_mask_query", "rtk_sys_mask_query_ack", "toapp_knife_status", "toapp_knife_status_change", "todev_devmotion_ctrl", "todev_knife_height_set"]
60
79
  BIDIRE_KNIFE_HEIGHT_REPORT_FIELD_NUMBER: _ClassVar[int]
61
80
  BIDIRE_SPEED_READ_SET_FIELD_NUMBER: _ClassVar[int]
81
+ COLLECT_CTRL_BY_HAND_FIELD_NUMBER: _ClassVar[int]
62
82
  MOW_CTRL_BY_HAND_FIELD_NUMBER: _ClassVar[int]
63
83
  RTK_CFG_REQ_ACK_FIELD_NUMBER: _ClassVar[int]
64
84
  RTK_CFG_REQ_FIELD_NUMBER: _ClassVar[int]
@@ -70,6 +90,7 @@ class MctlDriver(_message.Message):
70
90
  TODEV_KNIFE_HEIGHT_SET_FIELD_NUMBER: _ClassVar[int]
71
91
  bidire_knife_height_report: DrvKnifeHeight
72
92
  bidire_speed_read_set: DrvSrSpeed
93
+ collect_ctrl_by_hand: DrvCollectCtrlByHand
73
94
  mow_ctrl_by_hand: DrvMowCtrlByHand
74
95
  rtk_cfg_req: rtk_cfg_req_t
75
96
  rtk_cfg_req_ack: rtk_cfg_req_ack_t
@@ -79,7 +100,7 @@ class MctlDriver(_message.Message):
79
100
  toapp_knife_status_change: DrvKnifeChangeReport
80
101
  todev_devmotion_ctrl: DrvMotionCtrl
81
102
  todev_knife_height_set: DrvKnifeHeight
82
- def __init__(self, todev_devmotion_ctrl: _Optional[_Union[DrvMotionCtrl, _Mapping]] = ..., todev_knife_height_set: _Optional[_Union[DrvKnifeHeight, _Mapping]] = ..., bidire_speed_read_set: _Optional[_Union[DrvSrSpeed, _Mapping]] = ..., bidire_knife_height_report: _Optional[_Union[DrvKnifeHeight, _Mapping]] = ..., toapp_knife_status: _Optional[_Union[DrvKnifeStatus, _Mapping]] = ..., mow_ctrl_by_hand: _Optional[_Union[DrvMowCtrlByHand, _Mapping]] = ..., rtk_cfg_req: _Optional[_Union[rtk_cfg_req_t, _Mapping]] = ..., rtk_cfg_req_ack: _Optional[_Union[rtk_cfg_req_ack_t, _Mapping]] = ..., rtk_sys_mask_query: _Optional[_Union[rtk_sys_mask_query_t, _Mapping]] = ..., rtk_sys_mask_query_ack: _Optional[_Union[rtk_sys_mask_query_ack_t, _Mapping]] = ..., toapp_knife_status_change: _Optional[_Union[DrvKnifeChangeReport, _Mapping]] = ...) -> None: ...
103
+ def __init__(self, todev_devmotion_ctrl: _Optional[_Union[DrvMotionCtrl, _Mapping]] = ..., todev_knife_height_set: _Optional[_Union[DrvKnifeHeight, _Mapping]] = ..., bidire_speed_read_set: _Optional[_Union[DrvSrSpeed, _Mapping]] = ..., bidire_knife_height_report: _Optional[_Union[DrvKnifeHeight, _Mapping]] = ..., toapp_knife_status: _Optional[_Union[DrvKnifeStatus, _Mapping]] = ..., mow_ctrl_by_hand: _Optional[_Union[DrvMowCtrlByHand, _Mapping]] = ..., rtk_cfg_req: _Optional[_Union[rtk_cfg_req_t, _Mapping]] = ..., rtk_cfg_req_ack: _Optional[_Union[rtk_cfg_req_ack_t, _Mapping]] = ..., rtk_sys_mask_query: _Optional[_Union[rtk_sys_mask_query_t, _Mapping]] = ..., rtk_sys_mask_query_ack: _Optional[_Union[rtk_sys_mask_query_ack_t, _Mapping]] = ..., toapp_knife_status_change: _Optional[_Union[DrvKnifeChangeReport, _Mapping]] = ..., collect_ctrl_by_hand: _Optional[_Union[DrvCollectCtrlByHand, _Mapping]] = ...) -> None: ...
83
104
 
84
105
  class rtk_cfg_req_ack_t(_message.Message):
85
106
  __slots__ = ["cmd_length", "cmd_response"]
@@ -110,3 +131,9 @@ class rtk_sys_mask_query_t(_message.Message):
110
131
  SAT_SYSTEM_FIELD_NUMBER: _ClassVar[int]
111
132
  sat_system: int
112
133
  def __init__(self, sat_system: _Optional[int] = ...) -> None: ...
134
+
135
+ class CollectMotorState(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
136
+ __slots__ = []
137
+
138
+ class UnloadMotorState(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
139
+ __slots__ = []