@@ -91,7 +91,7 @@ def off():
91
91
92
92
def get_analog_inputs ():
93
93
# Print dict of analog inputs {name: {'ID': ID, 'Fs':sampling rate}}
94
- print ({io .name :{'ID' : io .ID , 'Fs' : io .sampling_rate }
94
+ print ({io .name :{'ID' : io .ID , 'Fs' : io .sampling_rate , 'plot' : io . plot }
95
95
for io in IO_dict .values () if isinstance (io , Analog_channel )})
96
96
97
97
# IO_object -------------------------------------------------------------------
@@ -233,8 +233,7 @@ def __init__(self, pin, name, sampling_rate, threshold=None, rising_event=None,
233
233
def _run_start (self ):
234
234
self .timer .init (freq = self .Analog_channel .sampling_rate )
235
235
self .timer .callback (self ._timer_ISR )
236
- if self .threshold :
237
- self .threshold .run_start (self .read_sample ())
236
+ self .threshold .run_start (self .read_sample ())
238
237
239
238
def _run_stop (self ):
240
239
self .timer .deinit ()
@@ -265,14 +264,15 @@ class Analog_channel(IO_object):
265
264
# k checksum (2 bytes)
266
265
# D data array bytes (variable)
267
266
268
- def __init__ (self , name , sampling_rate , data_type = 'l' ):
267
+ def __init__ (self , name , sampling_rate , data_type = 'l' , plot = True ):
269
268
assert data_type in ('b' ,'B' ,'h' ,'H' ,'l' ,'L' ), 'Invalid data_type.'
270
269
assert not any ([name == io .name for io in IO_dict .values ()
271
270
if isinstance (io , Analog_channel )]), 'Analog signals must have unique names.'
272
271
self .name = name
273
272
assign_ID (self )
274
273
self .sampling_rate = sampling_rate
275
274
self .data_type = data_type
275
+ self .plot = plot
276
276
self .bytes_per_sample = {'b' :1 ,'B' :1 ,'h' :2 ,'H' :2 ,'l' :4 ,'L' :4 }[data_type ]
277
277
self .buffer_size = max (4 , min (256 // self .bytes_per_sample , sampling_rate // 10 ))
278
278
self .buffers = (array (data_type , [0 ]* self .buffer_size ), array (data_type , [0 ]* self .buffer_size ))
@@ -285,38 +285,41 @@ def __init__(self, name, sampling_rate, data_type='l'):
285
285
286
286
def _run_start (self ):
287
287
self .write_index = 0 # Buffer index to write new data to.
288
- self .buffer_start_times [self .write_buffer ] = fw .current_time
289
288
290
289
def _run_stop (self ):
291
290
if self .write_index != 0 :
292
- self ._send_buffer ( self . write_buffer , self . write_index )
291
+ self .send_buffer ( run_stop = True )
293
292
294
293
@micropython .native
295
294
def put (self , sample : int ):
296
- # load the buffer.
295
+ # Put a sample in the buffer.
296
+ if self .write_index == 0 : # Record buffer start timestamp.
297
+ self .buffer_start_times [self .write_buffer ] = fw .current_time
297
298
self .buffers [self .write_buffer ][self .write_index ] = sample
298
299
self .write_index = (self .write_index + 1 ) % self .buffer_size
299
300
if self .write_index == 0 : # Buffer full, switch buffers.
300
301
self .write_buffer = 1 - self .write_buffer
301
- self .buffer_start_times [self .write_buffer ] = fw .current_time
302
302
stream_data_queue .put (self .ID )
303
303
304
- def _process_streaming (self ):
305
- # Stream full buffer to computer.
306
- self ._send_buffer (1 - self .write_buffer )
307
-
308
- def _send_buffer (self , buffer_n , n_samples = False ):
309
- # Send specified buffer to host computer.
310
- n_bytes = self .bytes_per_sample * n_samples if n_samples else self .bytes_per_sample * self .buffer_size
304
+ @micropython .native
305
+ def send_buffer (self , run_stop = False ):
306
+ # Send buffer to host computer.
307
+ if run_stop : # Send the contents of the current write buffer.
308
+ buffer_n = self .write_buffer
309
+ n_samples = self .write_index
310
+ else : # Send the buffer not currently being written to.
311
+ buffer_n = 1 - self .write_buffer
312
+ n_samples = self .buffer_size
313
+ n_bytes = self .bytes_per_sample * n_samples
311
314
self .data_header [7 :9 ] = n_bytes .to_bytes (2 ,'little' )
312
315
self .data_header [9 :13 ] = self .buffer_start_times [buffer_n ].to_bytes (4 ,'little' )
313
- checksum = sum (self .buffers_mv [buffer_n ][:n_samples ] if n_samples else self .buffers [buffer_n ])
316
+ checksum = sum (self .buffers_mv [buffer_n ][:n_samples ] if run_stop else self .buffers [buffer_n ])
314
317
checksum += sum (self .data_header [2 :13 ])
315
318
self .data_header [13 :15 ] = checksum .to_bytes (2 ,'little' )
316
319
fw .usb_serial .write (self .data_header )
317
- if n_samples : # Send first n_samples from buffer.
320
+ if run_stop :
318
321
fw .usb_serial .send (self .buffers_mv [buffer_n ][:n_samples ])
319
- else : # Send entire buffer.
322
+ else :
320
323
fw .usb_serial .send (self .buffers [buffer_n ])
321
324
322
325
class Analog_threshold (IO_object ):
0 commit comments