Resource manager design

The resource manager layer is implemented as a library that's statically linked with the hardware library. We currently provide a single-threaded manager, libi2c-master.

On startup, the resmgr layer does the following:

i2c_master_getfuncs(&masterf)
masterf.init()
masterf.set_bus_speed()

The resource manager then makes itself run in the background.

Here's how the resource manager handles these devctl() commands:

The resource manager thread remains occupied until the transaction is complete and replies to the client.

You can terminate the resource manager by sending a SIGTERM to it.