Hi Constant,
These sound like interesting software goals, and I’d be glad to help!
Writing an API for the software is on my to-do list for this summer, since I figured this would be useful for people developing custom experiments like you describe.
Many of your ideas are good ones, and I think you will find it isn’t that hard to implement most of them once you are familiar with the code. Changing between different modes/actuators is generally pretty straightforward, even with complex control calculations going on. As to the pumps, while lower PWM voltage may help slow down the rotor in the pump, in my past experience I found that this may also increase the pump-to-pump in variability (i.e. the rates are more variable at lower voltages). So, there is some trade-off there between reducing on time, and reducing rate while the pump is on.
As to the threads – you are probably right. Potentially many of these could be removed. That said, for most cases there should only be 2-3 threads running per reactor at any given time, unless I am mistaken. I basically implemented the control like this since it seemed conceptually the most straightforward, and since I had not seen the software put a massive burden on the Beaglebone CPU I never felt the need to make it significantly more efficient. If you can think of benefits to implementing this in a different way I’d be happy to hear, and to help!
Best wishes,
Harrison