From dd64debcd56f0ab8196d41b622f951279655a7f0 Mon Sep 17 00:00:00 2001
From: Martin Teichmann <martin.teichmann@xfel.eu>
Date: Wed, 6 Jan 2021 07:45:46 +0000
Subject: [PATCH] allow for single addresses in package

---
 ethercat.py | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

diff --git a/ethercat.py b/ethercat.py
index 7354c4e..c90ae22 100644
--- a/ethercat.py
+++ b/ethercat.py
@@ -120,14 +120,15 @@ class Packet:
         self.data = []
         self.size = 2
 
-    def append(self, cmd, idx, pos, offset, data):
-        self.data.append((cmd, idx, pos, offset, data))
+    def append(self, cmd, data, idx, *address):
+        self.data.append((cmd, data, idx) + address)
         self.size += len(data) + 12
 
     def assemble(self):
         ret = [pack("<H", self.size | 0x1000)]
-        for i, (cmd, *dgram, data) in enumerate(self.data, start=1):
-            ret.append(pack("<BBhHHH", cmd.value, *dgram,
+        for i, (cmd, data, *dgram) in enumerate(self.data, start=1):
+            ret.append(pack("<BBhHHH" if len(dgram) == 3 else "<BBhIH",
+                            cmd.value, *dgram,
                             len(data) | ((i < len(self.data)) << 15), 0))
             ret.append(data)
             ret.append(b"\0\0")
@@ -177,7 +178,7 @@ class EtherCat(Protocol, AsyncBase):
             out += b"\0" * data
         elif data is not None:
             out += data
-        self.send_queue.put_nowait((cmd, idx, pos, offset, out, future))
+        self.send_queue.put_nowait((cmd, out, idx, pos, offset, future))
         ret = await future
         if data is None:
             return unpack(fmt, ret)
-- 
GitLab