@@ -91,7 +91,7 @@ def off():
9191
9292def get_analog_inputs ():
9393 # 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 }
9595 for io in IO_dict .values () if isinstance (io , Analog_channel )})
9696
9797# IO_object -------------------------------------------------------------------
@@ -233,8 +233,7 @@ def __init__(self, pin, name, sampling_rate, threshold=None, rising_event=None,
233233 def _run_start (self ):
234234 self .timer .init (freq = self .Analog_channel .sampling_rate )
235235 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 ())
238237
239238 def _run_stop (self ):
240239 self .timer .deinit ()
@@ -265,14 +264,15 @@ class Analog_channel(IO_object):
265264 # k checksum (2 bytes)
266265 # D data array bytes (variable)
267266
268- def __init__ (self , name , sampling_rate , data_type = 'l' ):
267+ def __init__ (self , name , sampling_rate , data_type = 'l' , plot = True ):
269268 assert data_type in ('b' ,'B' ,'h' ,'H' ,'l' ,'L' ), 'Invalid data_type.'
270269 assert not any ([name == io .name for io in IO_dict .values ()
271270 if isinstance (io , Analog_channel )]), 'Analog signals must have unique names.'
272271 self .name = name
273272 assign_ID (self )
274273 self .sampling_rate = sampling_rate
275274 self .data_type = data_type
275+ self .plot = plot
276276 self .bytes_per_sample = {'b' :1 ,'B' :1 ,'h' :2 ,'H' :2 ,'l' :4 ,'L' :4 }[data_type ]
277277 self .buffer_size = max (4 , min (256 // self .bytes_per_sample , sampling_rate // 10 ))
278278 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'):
285285
286286 def _run_start (self ):
287287 self .write_index = 0 # Buffer index to write new data to.
288- self .buffer_start_times [self .write_buffer ] = fw .current_time
289288
290289 def _run_stop (self ):
291290 if self .write_index != 0 :
292- self ._send_buffer ( self . write_buffer , self . write_index )
291+ self .send_buffer ( run_stop = True )
293292
294293 @micropython .native
295294 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
297298 self .buffers [self .write_buffer ][self .write_index ] = sample
298299 self .write_index = (self .write_index + 1 ) % self .buffer_size
299300 if self .write_index == 0 : # Buffer full, switch buffers.
300301 self .write_buffer = 1 - self .write_buffer
301- self .buffer_start_times [self .write_buffer ] = fw .current_time
302302 stream_data_queue .put (self .ID )
303303
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
311314 self .data_header [7 :9 ] = n_bytes .to_bytes (2 ,'little' )
312315 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 ])
314317 checksum += sum (self .data_header [2 :13 ])
315318 self .data_header [13 :15 ] = checksum .to_bytes (2 ,'little' )
316319 fw .usb_serial .write (self .data_header )
317- if n_samples : # Send first n_samples from buffer.
320+ if run_stop :
318321 fw .usb_serial .send (self .buffers_mv [buffer_n ][:n_samples ])
319- else : # Send entire buffer.
322+ else :
320323 fw .usb_serial .send (self .buffers [buffer_n ])
321324
322325class Analog_threshold (IO_object ):
0 commit comments