I like your usage of send/recv vs read/write. Seems to match the nature of the hardware protocols better.
Intriguing usage of static. I could've used that the other day! Though I'm not certain how well static would work for some platforms. On Linux you need to open and configure the i2c/spi devices. Same on some rtos'es. Or is there a way to configure the static devices (looks like you have a start proc)?