I'm writing a piece of software in python that will communicate with a bunch of devices via an I2C bus. Each of these devices are going to need some sort of a module or class to handle the communication and data conversion in some sensible way. The operations that each of the device modules perform are drastically different.
My main concern is the I2C bus control. I fear that sharing the bus, by for example having each of the device modules instantiate a new I2C bus control object results in code that is hard to follow and I'm not sure how these objects would communicate if the there's an interrupt in the bus. However, not sharing it, I fear I'll end up with a huge control class that is hard to maintain and extend.
If I lean towards the control class, each of the device modules would hold a map of operations, like an OrderedDict
or a list of tuples of functions with expected result values or ranges. The I2C control object could then iterate that dictionary, write and read the results from the bus and move to the next function if the result is in the expected range. This sounds like a state machine design, but I'm not sure if I can really generalize all operations enough.
I suppose my question boils down to does anyone have a good suggestion for a design pattern?