A ButtonEvent represents a button press, release or hold on the vehicle HMI.
This measurement is only valid when used asynchronously, much like any other
key or button event in Java. An application registers to receive button
events, and decides what to do based on the returned ButtonId and
If this measurement is retrieved synchronously, it will return the last
button event received - this is probably not what you want.
TODO This is by far the ugliest measurement because it has to incorporate two
different values instead of the usual one. Is this implementation saying
something about the architecture in general, or is it just an edge case we
need to ignore and let live?