From 22c23ff840b7e57f0cb03b3820f432b56b7c9c4a Mon Sep 17 00:00:00 2001
From: Marko Mecina <marko.mecina@univie.ac.at>
Date: Mon, 13 Nov 2023 16:30:58 +0100
Subject: [PATCH] improve communication output formatting

---
 Ccs/communication.py | 26 +++++++++++++++++++++-----
 1 file changed, 21 insertions(+), 5 deletions(-)

diff --git a/Ccs/communication.py b/Ccs/communication.py
index 576ab8a..0af0438 100644
--- a/Ccs/communication.py
+++ b/Ccs/communication.py
@@ -32,6 +32,7 @@ class Connector:
         self.conn = None
         self.log = []
         self._storagefd = None
+        self._storage_hexsep = ''
 
         self.receiver = None
 
@@ -43,8 +44,9 @@ class Connector:
         if save_to is not None:
             self.setup_storage(save_to)
 
-    def setup_storage(self, fname):
+    def setup_storage(self, fname, hexsep=''):
         self._storagefd = open(fname, 'w')
+        self._storage_hexsep = hexsep
 
     def setup_port(self):
 
@@ -121,12 +123,15 @@ class Connector:
             self.log.append((t, msg, resp))
 
             if self._storagefd is not None:
-                self._storagefd.write('{:.3f}\t{}\t{}\n'.format(t, _msgdecoder(msg, self.msgdecoding), _msgdecoder(resp, self.msgdecoding)))
+                self._storagefd.write('{:.3f}\t{}\t{}\n'.format(t, _msgdecoder(msg, self.msgdecoding, sep=self._storage_hexsep), _msgdecoder(resp, self.msgdecoding, sep=self._storage_hexsep)))
                 self._storagefd.flush()
 
             if output:
                 print('{:.3f}: SENT {} | RECV: {}'.format(t, _msgdecoder(msg, self.msgdecoding), _msgdecoder(resp, self.msgdecoding)))
 
+            if not rx:
+                return None
+
             return resp if self.resp_decoder is None else self.resp_decoder(resp)
 
         else:
@@ -255,7 +260,8 @@ class Receiver:
             except socket.timeout:
                 continue
 
-            except (ValueError, OSError):
+            except (ValueError, OSError) as err:
+                print(err)
                 self.stop()
                 break
 
@@ -277,7 +283,10 @@ class Receiver:
 
                 if self.proc_data_fd is not None:
                     try:
-                        self.proc_data_fd.write(str(procdata))
+                        if self.proc_data_fd.mode.count('b'):
+                            self.proc_data_fd.write(procdata)
+                        else:
+                            self.proc_data_fd.write(str(procdata))
                     except Exception as err:
                         self.proc_data_fd.write('# {} #\n'.format(err))
                         continue
@@ -304,9 +313,16 @@ def _msgdecoder(msg, fmt, sep=''):
 
 
 def hexify(bs, sep=''):
+
     if bs is None:
         bs = b''
-    return bs.hex().upper() if sep == '' else bs.hex(sep).upper()
+
+    if isinstance(sep, tuple):
+        sep, grp = sep
+    else:
+        grp = 0
+
+    return bs.hex().upper() if sep == '' else bs.hex(sep, grp).upper()
 
 
 def toascii(bs, errors='replace'):
-- 
GitLab