class Uart(): def __init__(self, path, baud=115200, read_timeout=1): self.impl = Serial(port=path, baudrate=baud, exclusive=True) self.read_timeout = read_timeout self.impl.reset_input_buffer() self.impl.reset_output_buffer() def __enter__(self, *args): self.impl.__enter__() return self def __exit__(self, *args): self.impl.__exit__() ''' Read data into buffer, return buffer ''' def read(self): # Wait for data to be available self.impl.timeout = self.read_timeout self.impl.read(0) # Read as much data as is available in the buffer self.impl.timeout = 0 return self.impl.read(self.impl.inWaiting()) ''' Write data from buffer ''' def write(self, data): self.impl.write(data)
class Duck: def __init__(self, *serial_device_parameters): self.serial_device = Serial(*serial_device_parameters) init_serial(self.serial_device) def __enter__(self): self.serial_device.__enter__() return self def __exit__(self, *exp): self.serial_device.__exit__(*exp) def run(self, op="NOP", verbose=False, read=True): run_operation(self.serial_device, op, verbose, read) def buffer_ramp(self, dac_channel, adc_channel, begin_voltage, end_voltage, number_of_steps, delay_in_microsecs): return _buffer_ramp(self.serial_device, dac_channel, adc_channel, begin_voltage, end_voltage, number_of_steps, delay_in_microsecs)