The AdcProxy implements OneShot trait so it can be passed to drivers instead of
ADC instance. Internally, it holds reference to the bus via a mutex, ensuring
that all accesses are strictly synchronized.
Note: The adc::OneShot trait proxied by this type describes a
non-blocking contract for ADC read operation. However access to a shared ADC
unit can not be arbitrated in a completely non-blocking and concurrency safe way.
Any reading from a channel shall be completed before shared-bus can allow the
next read from the same or another channel. So the current implementation breaks
the non-blocking contract of the trait and just busy-spins until a sample is
returned.