This directory is for the `GpioExpanderAdapter` base/interface and concrete implementations.

Implementations can rely on external libraries but do not have to.

When using the ExapanderPinAdapter, the expander adapter's `update()` method is normally called from `loop()` to scan the expander and update the state of the pins. 

An `updateAndRead()` may be provided but this will not be used by InputEvents as it incurs a slow I2C or SPI read for each button or switch update().

If the GPIO expander supports writing to pins, should implement/override `write()` and `canWrite()` - this is for convinience as InputEvents will only use the inputs. (the clue's in the name ;-) 

For writes, the implementor needs to decide & document if an `update()` is required on every `write()`