@@ -46,13 +46,15 @@ def __init__(
46
46
self .load_burst = False
47
47
self .input_queue_size = 0
48
48
self .version = ""
49
+ self ._log = b""
50
+ self ._logging = False
49
51
self .interface = serial .Serial ()
50
- self .connect (port = port , baudrate = baudrate , timeout = timeout )
51
52
self .send_byte = partial (self ._send , size = 1 )
52
53
self .send_int = partial (self ._send , size = 2 )
53
54
self .get_byte = partial (self ._receive , size = 1 )
54
55
self .get_int = partial (self ._receive , size = 2 )
55
56
self .get_long = partial (self ._receive , size = 4 )
57
+ self .connect (port = port , baudrate = baudrate , timeout = timeout )
56
58
57
59
# Backwards compatibility
58
60
self .fd = self .interface
@@ -165,9 +167,11 @@ def get_version(self, *args) -> str: # *args for backwards compatibility
165
167
str
166
168
Version string.
167
169
"""
168
- self .interface .write (CP .COMMON )
169
- self .interface .write (CP .GET_VERSION )
170
- return self .interface .readline ().decode ("utf-8" )
170
+ self .send_byte (CP .COMMON )
171
+ self .send_byte (CP .GET_VERSION )
172
+ version = self .interface .readline ()
173
+ self ._write_log (version , "RX" )
174
+ return version .decode ("utf-8" )
171
175
172
176
def get_ack (self ) -> int : # Make _internal?
173
177
"""Get response code from PSLab.
@@ -183,7 +187,7 @@ def get_ack(self) -> int: # Make _internal?
183
187
3 FAILED
184
188
"""
185
189
if not self .load_burst :
186
- response = self .interface . read (1 )
190
+ response = self .read (1 )
187
191
else :
188
192
self .input_queue_size += 1
189
193
return 1
@@ -229,8 +233,7 @@ def _send(self, value: Union[bytes, int], size: int = None):
229
233
if self .load_burst :
230
234
self .burst_buffer += packet
231
235
else :
232
- self .interface .write (packet )
233
- # return self.get_ack?
236
+ self .write (packet )
234
237
235
238
def _receive (self , size : int ) -> int :
236
239
"""Read and unpack the specified number of bytes from the serial port.
@@ -245,7 +248,7 @@ def _receive(self, size: int) -> int:
245
248
int
246
249
Unpacked bytes, or -1 if too few bytes were read.
247
250
"""
248
- received = self .interface . read (size )
251
+ received = self .read (size )
249
252
250
253
if len (received ) == size :
251
254
if size in (1 , 2 , 4 ):
@@ -261,6 +264,19 @@ def _receive(self, size: int) -> int:
261
264
262
265
return retval
263
266
267
+ def read (self , number_of_bytes : int ) -> bytes :
268
+ data = self .interface .read (number_of_bytes )
269
+ self ._write_log (data , "RX" )
270
+ return data
271
+
272
+ def write (self , data : bytes ):
273
+ self .interface .write (data )
274
+ self ._write_log (data , "TX" )
275
+
276
+ def _write_log (self , data : bytes , direction : str ):
277
+ if self ._logging :
278
+ self ._log += direction .encode () + data + "STOP" .encode ()
279
+
264
280
def wait_for_data (self , timeout : float = 0.2 ) -> bool :
265
281
"""Wait for :timeout: seconds or until there is data in the input buffer.
266
282
@@ -305,10 +321,10 @@ def send_burst(self) -> List[int]:
305
321
List of response codes
306
322
(see :meth:`get_ack <PSL.packet_handler.Handler.get_ack>`).
307
323
"""
308
- self .interface . write (self .burst_buffer )
324
+ self .write (self .burst_buffer )
309
325
self .burst_buffer = b""
310
326
self .load_burst = False
311
- acks = self .interface . read (self .input_queue_size )
327
+ acks = self .read (self .input_queue_size )
312
328
self .input_queue_size = 0
313
329
314
330
return list (acks )
0 commit comments