I know callbacks are needed, in fact even more are necessary. That is why I don't like this design. It expands the API for each event. I think something like the Linux kernel netlink callback mechanism that passes an event and device handle.