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