The purpose of programming language specification here is description only and there are no pypi classifiers that specify the python version beyond MAJOR.MINOR.
Since python-can has an issue working on windows, I haven't specified windows as a supported version.
I checked, and there is no pypi classifier for Virtualbox, or any other type of virtualization platform. This makes sense because specifying a python package as being compatible with a virtualization environment is out of the scope of the setuptools configuration.
There are also no pypi specifiers for Ubuntu specifically. So, the classifier I could find that best matches the OS we're running is Linux.
I would consider always giving FPGA the current valve states at the end of this function instead of only when valve states change. And I would also set currentValvesStates just prior to sending to FPGA instead of above on line 89 - that way the monitor portion here will be checking read FPGA states against the current states from last exec (more likely to match).
I've considered this and generally agree. I've been waiting for dust to settle a bit on design - if the design for the 2 pumps diverges a lot, I'd want to keep them separate. If they stay this aligned, I'll want to move a lot of the common code to a common module.