m-labs / pdq

Pretty darn quick interpolating arbitrary waveform generator
GNU General Public License v3.0
6 stars 3 forks source link

Fix wavesynth program transfer via SPI (m-labs/pdq#20) #24

Open jonaskeller opened 6 years ago

jonaskeller commented 6 years ago

This is my suggestion for fixing the behavior of PDQ.program() for the SPI version as discussed in m-labs/pdq#20.

The method is split between a host (program_host()) and a kernel (program_kernel()) method. The output of the former is a list of channels and a list of bytes objects, which are both stored in class variables and returned for manual handling. The latter writes the latest output by default for convenience, but can also be passed other previously stored data for flexibility.

The program() method of the base class is overridden by a kernel method which calls program_host() as an RPC.

The write_mem method now takes bytes objects instead of list[int16], and read_mem manipulates a bytearray object rather than a list[int16].

Finally, I've adjusted the example in examples/pdq_spi.py accordingly and added an example for the different options to write wavesynth programs, examples/pdq_spi_waveform_writing.py