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
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 callsprogram_host()
as an RPC.The
write_mem
method now takes bytes objects instead of list[int16], andread_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