From f973ea92d6e7d35dca00874bb0acd70876d0a35f Mon Sep 17 00:00:00 2001 From: racerep <32631116+racerep@users.noreply.github.com> Date: Mon, 9 Oct 2017 09:37:07 +0200 Subject: [PATCH 1/2] Fix emcy error logging This adds error reset and other xx00h errors to the log list. Clearing the active list once error reset is received still holds true but all errors are now logged. --- canopen/emcy.py | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/canopen/emcy.py b/canopen/emcy.py index 9d88753e..ac6b06c2 100644 --- a/canopen/emcy.py +++ b/canopen/emcy.py @@ -22,18 +22,19 @@ def __init__(self): def on_emcy(self, can_id, data, timestamp): code, register, data = self.EMCY_STRUCT.unpack(data) - if code & 0xFF == 0: + entry = EmcyError(code, register, data, timestamp) + + with self.emcy_received: + self.log.append(entry) + self.active.append(entry) + self.emcy_received.notify_all() + + if code & 0xFFFF == 0: # Error reset self.active = [] for callback in self.callbacks: callback(None) else: - entry = EmcyError(code, register, data, timestamp) - #print("EMCY received for node %d: %s" % (can_id & 0x7F, entry)) - with self.emcy_received: - self.log.append(entry) - self.active.append(entry) - self.emcy_received.notify_all() for callback in self.callbacks: callback(entry) From 2fb1188b26baa9290778ad84f91423d97490c064 Mon Sep 17 00:00:00 2001 From: racerep <32631116+racerep@users.noreply.github.com> Date: Mon, 9 Oct 2017 10:03:10 +0200 Subject: [PATCH 2/2] Fix failing unit test Since error reset is logged, increment log list. --- test/test_emcy.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/test_emcy.py b/test/test_emcy.py index 81c5f351..9c167434 100644 --- a/test/test_emcy.py +++ b/test/test_emcy.py @@ -29,7 +29,7 @@ def test_emcy_list(self): self.assertEqual(emcy_node.active[1], error) emcy_node.on_emcy(0x81, b'\x00\x00\x00\x00\x00\x00\x00\x00', 1473418397.0) - self.assertEqual(len(emcy_node.log), 2) + self.assertEqual(len(emcy_node.log), 3) self.assertEqual(len(emcy_node.active), 0) def test_str(self):