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:
if (bus_speed has changed) masterf.set_bus_speed() masterf.set_slave_address() masterf.send() or masterf.recv()
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.