Skip to content

Commit 2898288

Browse files
committed
zdo: better synchronization to ensure all frames are received before finishing
Signed-off-by: Tatiana Leon <tatiana.leon@digi.com>
1 parent aa9bfef commit 2898288

File tree

1 file changed

+9
-1
lines changed

1 file changed

+9
-1
lines changed

digi/xbee/models/zdo.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ def __init__(self, xbee, cluster_id, receive_cluster_id, configure_ao, timeout):
9292
self._lock = threading.Event()
9393
self._received_status = False
9494
self._received_answer = False
95+
self._data_parsed = False
9596

9697
self._current_transaction_id = self.__class__.__global_transaction_id
9798
self.__class__.__global_transaction_id = self.__class__.__global_transaction_id + 1
@@ -162,6 +163,7 @@ def _send_zdo(self, zdo_callback=None):
162163
self._error = None
163164
self._received_status = False
164165
self._received_answer = False
166+
self._data_parsed = False
165167
self._lock.clear()
166168

167169
if not self._xbee.is_remote():
@@ -338,7 +340,10 @@ def _zdo_packet_callback(self, frame):
338340
self._error = "Error executing ZDO command (status: %d)" % int(frame.rf_data[1])
339341
self.stop()
340342
return
341-
if self._parse_data(frame.rf_data[2:]):
343+
344+
self._data_parsed = self._parse_data(frame.rf_data[2:])
345+
346+
if self._data_parsed and self._received_status:
342347
self.stop()
343348
elif frame.get_frame_type() == ApiFrameType.TRANSMIT_STATUS:
344349
self._logger.debug("Received 'ZDO' status frame: %s"
@@ -353,6 +358,9 @@ def _zdo_packet_callback(self, frame):
353358
self._error = "Error sending ZDO command: %s" % frame.transmit_status.description
354359
self.stop()
355360

361+
if self._data_parsed:
362+
self.stop()
363+
356364

357365
class NodeDescriptorReader(__ZDOCommand):
358366
"""

0 commit comments

Comments
 (0)