A helper function is added to simplify implementing the devic_dump()
function on top of the device_read() function, and enable progress
events automatically.
Using a resizable memory buffer allows to allocate the right amount of
memory inside the backend, avoiding having to know the required buffer
size in advance.
When necessary, an output parameter is added to provide the size
information. Status codes are strictly reserved for providing status
information only.
For this new api, each device will be implemented as a separate backend
for a common interface. This will make it easier to support multiple
devices in a single application.