From 2ed27b8c45ac098d1b73feca61512ae69c97b6ba Mon Sep 17 00:00:00 2001
From: Kristoffer Richardsson <kristoffer@bitcraze.io>
Date: Thu, 16 Feb 2017 16:46:42 +0100
Subject: [PATCH] #38 Reset memory sub system on disconnect

---
 cflib/crazyflie/mem.py | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/cflib/crazyflie/mem.py b/cflib/crazyflie/mem.py
index 5321055..071b3f0 100644
--- a/cflib/crazyflie/mem.py
+++ b/cflib/crazyflie/mem.py
@@ -671,6 +671,7 @@ class Memory():
 
         self.cf = crazyflie
         self.cf.add_port_callback(CRTPPort.MEM, self._new_packet_cb)
+        self.cf.disconnected.add_callback(self._disconnected)
 
         self._refresh_callback = None
         self._fetch_id = 0
@@ -783,6 +784,15 @@ class Memory():
         pk.data = (CMD_INFO_NBR,)
         self.cf.send_packet(pk, expected_reply=(CMD_INFO_NBR,))
 
+    def _disconnected(self, uri):
+        """The link to the Crazyflie has been broken. Reset state"""
+        for m in self.mems:
+            try:
+                m.disconnect()
+            except Exception as e:
+                logger.info(
+                    'Error when resetting after disconnect: {}'.format(e))
+
     def _new_packet_cb(self, packet):
         """Callback for newly arrived packets for the memory port"""
         chan = packet.channel
-- 
GitLab