meshcore 2.1.15__tar.gz → 2.1.17__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.
- {meshcore-2.1.15 → meshcore-2.1.17}/PKG-INFO +1 -1
- {meshcore-2.1.15 → meshcore-2.1.17}/pyproject.toml +1 -1
- {meshcore-2.1.15 → meshcore-2.1.17}/src/meshcore/ble_cx.py +8 -2
- {meshcore-2.1.15 → meshcore-2.1.17}/src/meshcore/commands/contact.py +12 -26
- {meshcore-2.1.15 → meshcore-2.1.17}/src/meshcore/meshcore.py +1 -0
- {meshcore-2.1.15 → meshcore-2.1.17}/.github/python-test.yml +0 -0
- {meshcore-2.1.15 → meshcore-2.1.17}/.gitignore +0 -0
- {meshcore-2.1.15 → meshcore-2.1.17}/LICENSE +0 -0
- {meshcore-2.1.15 → meshcore-2.1.17}/README.md +0 -0
- {meshcore-2.1.15 → meshcore-2.1.17}/examples/ble_chat.py +0 -0
- {meshcore-2.1.15 → meshcore-2.1.17}/examples/ble_pin_pairing_example.py +0 -0
- {meshcore-2.1.15 → meshcore-2.1.17}/examples/ble_private_key_export.py +0 -0
- {meshcore-2.1.15 → meshcore-2.1.17}/examples/ble_t1000_chan_msg.py +0 -0
- {meshcore-2.1.15 → meshcore-2.1.17}/examples/ble_t1000_custom_vars.py +0 -0
- {meshcore-2.1.15 → meshcore-2.1.17}/examples/ble_t1000_infos.py +0 -0
- {meshcore-2.1.15 → meshcore-2.1.17}/examples/ble_t1000_msg.py +0 -0
- {meshcore-2.1.15 → meshcore-2.1.17}/examples/ble_t1000_msg_retries.py +0 -0
- {meshcore-2.1.15 → meshcore-2.1.17}/examples/ble_t1000_set_cv.py +0 -0
- {meshcore-2.1.15 → meshcore-2.1.17}/examples/connection_events_example.py +0 -0
- {meshcore-2.1.15 → meshcore-2.1.17}/examples/mepo_mc_gps.py +0 -0
- {meshcore-2.1.15 → meshcore-2.1.17}/examples/pubsub_example.py +0 -0
- {meshcore-2.1.15 → meshcore-2.1.17}/examples/rf_packet_monitor.py +0 -0
- {meshcore-2.1.15 → meshcore-2.1.17}/examples/serial_battery_monitor.py +0 -0
- {meshcore-2.1.15 → meshcore-2.1.17}/examples/serial_channel_manager.py +0 -0
- {meshcore-2.1.15 → meshcore-2.1.17}/examples/serial_chat.py +0 -0
- {meshcore-2.1.15 → meshcore-2.1.17}/examples/serial_contacts.py +0 -0
- {meshcore-2.1.15 → meshcore-2.1.17}/examples/serial_infos.py +0 -0
- {meshcore-2.1.15 → meshcore-2.1.17}/examples/serial_msg.py +0 -0
- {meshcore-2.1.15 → meshcore-2.1.17}/examples/serial_repeater_status.py +0 -0
- {meshcore-2.1.15 → meshcore-2.1.17}/examples/serial_repeater_telemetry.py +0 -0
- {meshcore-2.1.15 → meshcore-2.1.17}/examples/serial_trace.py +0 -0
- {meshcore-2.1.15 → meshcore-2.1.17}/examples/tcp_chat.py +0 -0
- {meshcore-2.1.15 → meshcore-2.1.17}/examples/tcp_login_status.py +0 -0
- {meshcore-2.1.15 → meshcore-2.1.17}/examples/tcp_mchome_contacts.py +0 -0
- {meshcore-2.1.15 → meshcore-2.1.17}/examples/tcp_mchome_infos.py +0 -0
- {meshcore-2.1.15 → meshcore-2.1.17}/examples/tcp_mchome_msg.py +0 -0
- {meshcore-2.1.15 → meshcore-2.1.17}/examples/tcp_mchome_readmsgs.py +0 -0
- {meshcore-2.1.15 → meshcore-2.1.17}/pytest.ini +0 -0
- {meshcore-2.1.15 → meshcore-2.1.17}/src/meshcore/__init__.py +0 -0
- {meshcore-2.1.15 → meshcore-2.1.17}/src/meshcore/commands/__init__.py +0 -0
- {meshcore-2.1.15 → meshcore-2.1.17}/src/meshcore/commands/base.py +0 -0
- {meshcore-2.1.15 → meshcore-2.1.17}/src/meshcore/commands/binary.py +0 -0
- {meshcore-2.1.15 → meshcore-2.1.17}/src/meshcore/commands/device.py +0 -0
- {meshcore-2.1.15 → meshcore-2.1.17}/src/meshcore/commands/messaging.py +0 -0
- {meshcore-2.1.15 → meshcore-2.1.17}/src/meshcore/connection_manager.py +0 -0
- {meshcore-2.1.15 → meshcore-2.1.17}/src/meshcore/events.py +0 -0
- {meshcore-2.1.15 → meshcore-2.1.17}/src/meshcore/lpp_json_encoder.py +0 -0
- {meshcore-2.1.15 → meshcore-2.1.17}/src/meshcore/packets.py +0 -0
- {meshcore-2.1.15 → meshcore-2.1.17}/src/meshcore/parsing.py +0 -0
- {meshcore-2.1.15 → meshcore-2.1.17}/src/meshcore/reader.py +0 -0
- {meshcore-2.1.15 → meshcore-2.1.17}/src/meshcore/serial_cx.py +0 -0
- {meshcore-2.1.15 → meshcore-2.1.17}/src/meshcore/tcp_cx.py +0 -0
- {meshcore-2.1.15 → meshcore-2.1.17}/tests/README.md +0 -0
- {meshcore-2.1.15 → meshcore-2.1.17}/tests/test_ble_connection.py +0 -0
- {meshcore-2.1.15 → meshcore-2.1.17}/tests/test_ble_pin_pairing.py +0 -0
- {meshcore-2.1.15 → meshcore-2.1.17}/tests/test_meshcore_ble_pin.py +0 -0
- {meshcore-2.1.15 → meshcore-2.1.17}/tests/unit/test_commands.py +0 -0
- {meshcore-2.1.15 → meshcore-2.1.17}/tests/unit/test_events.py +0 -0
- {meshcore-2.1.15 → meshcore-2.1.17}/tests/unit/test_private_key_export.py +0 -0
- {meshcore-2.1.15 → meshcore-2.1.17}/tests/unit/test_reader.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: meshcore
|
|
3
|
-
Version: 2.1.
|
|
3
|
+
Version: 2.1.17
|
|
4
4
|
Summary: Base classes for communicating with meshcore companion radios
|
|
5
5
|
Project-URL: Homepage, https://github.com/fdlamotte/meshcore_py
|
|
6
6
|
Project-URL: Issues, https://github.com/fdlamotte/meshcore_py/issues
|
|
@@ -18,7 +18,6 @@ UART_SERVICE_UUID = "6E400001-B5A3-F393-E0A9-E50E24DCCA9E"
|
|
|
18
18
|
UART_RX_CHAR_UUID = "6E400002-B5A3-F393-E0A9-E50E24DCCA9E"
|
|
19
19
|
UART_TX_CHAR_UUID = "6E400003-B5A3-F393-E0A9-E50E24DCCA9E"
|
|
20
20
|
|
|
21
|
-
|
|
22
21
|
class BLEConnection:
|
|
23
22
|
def __init__(self, address=None, device=None, client=None, pin=None):
|
|
24
23
|
"""
|
|
@@ -113,7 +112,14 @@ class BLEConnection:
|
|
|
113
112
|
except TimeoutError:
|
|
114
113
|
return None
|
|
115
114
|
|
|
116
|
-
|
|
115
|
+
try:
|
|
116
|
+
await self.client.start_notify(UART_TX_CHAR_UUID, self.handle_rx)
|
|
117
|
+
except AttributeError :
|
|
118
|
+
if self.client :
|
|
119
|
+
await self.client.disconnect()
|
|
120
|
+
logger.info("Connection is not established, need to restart it")
|
|
121
|
+
logger.debug("in ble_cx.connect()")
|
|
122
|
+
return None
|
|
117
123
|
|
|
118
124
|
nus = self.client.services.get_service(UART_SERVICE_UUID)
|
|
119
125
|
if nus is None:
|
|
@@ -9,17 +9,17 @@ logger = logging.getLogger("meshcore")
|
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
class ContactCommands(CommandHandlerBase):
|
|
12
|
-
async def
|
|
12
|
+
async def get_contacts_async(self, lastmod=0) :
|
|
13
13
|
logger.debug("Getting contacts")
|
|
14
14
|
data = b"\x04"
|
|
15
15
|
if lastmod > 0:
|
|
16
16
|
data = data + lastmod.to_bytes(4, "little")
|
|
17
|
-
if anim:
|
|
18
|
-
print("Fetching contacts ", end="", flush=True)
|
|
19
17
|
# wait first event
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
18
|
+
await self.send(data)
|
|
19
|
+
|
|
20
|
+
async def get_contacts(self, lastmod=0, timeout=5) -> Event:
|
|
21
|
+
await self.get_contacts_async(lastmod)
|
|
22
|
+
|
|
23
23
|
# Inline wait for events to continue waiting for CONTACTS event
|
|
24
24
|
# while receiving NEXT_CONTACTs (or it might be missed over serial)
|
|
25
25
|
try:
|
|
@@ -40,30 +40,20 @@ class ContactCommands(CommandHandlerBase):
|
|
|
40
40
|
|
|
41
41
|
# Check if any future completed successfully
|
|
42
42
|
if len(done) == 0:
|
|
43
|
-
|
|
43
|
+
logger.debug("Timeout while getting contacts")
|
|
44
44
|
for future in pending: # cancel all futures
|
|
45
45
|
future.cancel()
|
|
46
46
|
return None
|
|
47
47
|
|
|
48
48
|
for future in done:
|
|
49
49
|
event = await future
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
contact_nb = contact_nb+1
|
|
55
|
-
print(".", end="", flush=True)
|
|
56
|
-
else: # Done or Error ... cancel pending and return
|
|
57
|
-
if anim:
|
|
58
|
-
if event.type == EventType.CONTACTS:
|
|
59
|
-
print ((len(event.payload)-contact_nb)*"." + " Done")
|
|
60
|
-
else :
|
|
61
|
-
print(" Error")
|
|
62
|
-
for future in pending:
|
|
63
|
-
future.cancel()
|
|
64
|
-
return event
|
|
50
|
+
if event is None or event.type != EventType.NEXT_CONTACT:
|
|
51
|
+
for future in pending:
|
|
52
|
+
future.cancel()
|
|
53
|
+
return event
|
|
65
54
|
|
|
66
55
|
futures = []
|
|
56
|
+
|
|
67
57
|
for future in pending: # put back pending
|
|
68
58
|
futures.append(future)
|
|
69
59
|
|
|
@@ -74,13 +64,9 @@ class ContactCommands(CommandHandlerBase):
|
|
|
74
64
|
|
|
75
65
|
except asyncio.TimeoutError:
|
|
76
66
|
logger.debug(f"Timeout receiving contacts")
|
|
77
|
-
if anim:
|
|
78
|
-
print(" Timeout")
|
|
79
67
|
return None
|
|
80
68
|
except Exception as e:
|
|
81
69
|
logger.debug(f"Command error: {e}")
|
|
82
|
-
if anim:
|
|
83
|
-
print(" Error")
|
|
84
70
|
return Event(EventType.ERROR, {"error": str(e)})
|
|
85
71
|
|
|
86
72
|
async def reset_path(self, key: DestinationType) -> Event:
|
|
@@ -165,6 +165,7 @@ class MeshCore:
|
|
|
165
165
|
await self.dispatcher.start()
|
|
166
166
|
result = await self.connection_manager.connect()
|
|
167
167
|
if result is None:
|
|
168
|
+
await self.dispatcher.stop()
|
|
168
169
|
raise ConnectionError("Failed to connect to device")
|
|
169
170
|
return await self.commands.send_appstart()
|
|
170
171
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|