Для C/C++ есть библиотека
liborfa Linux/Windows.
Точнее говоря библиотека сишная, есть обертка для си++, но не законченная.
Не уверен, что задержка автоопределения под Windows будет верна, я писал под линуксовый sleep(sec), а виндовый вроде sleep(msec).
local_config.mk лучше взять из ./doc (собственно оттуда он и копируется, если сделать make без конфига сборки)
в нем есть комментарии и примеры, это должно сильно упростить понимание где-что.
На данный момент актуальная версия
0.7.5основная фишка — автоопределение скорости УСАПП (требует в начале соединения послать 8 '\r' и сделать задержку 20 мс).
В стандарте I2C подчиненный не может инициировать передачу, т.е. мастер должен периодически опрашивать состояние. Из этого и следует невозможность сделать асинхронные запросы. Был запрос — дождись ответа.
Но можно реализовать не слишком сложную реакцию и на самом контроллере, для этого есть простой кооперативный шедулер.