Ich habe mir da letztens meine eigene Implementierung geschrieben.
In erster Linie ist das eine state machine, die in der TWI-ISR
abgearbeitet wird, und die in Abhängigkeit vom aktuell gültigen
TWSR dann die Statusübergänge organisiert. Nebenläufig tickt dann
ggf. eine zweite state machine los, die eine (bzw. mehrere) ADC-
Messungen anleiert.
Ich könnte mir gar nicht so recht vorstellen, warum man dafür
jeweils noch extra Funktionen implementieren will; der eigentliche
Aufwand liegt doch darin zu verwalten, dass die verschiedenen
Zustände ordentlich ineinander übergehen, unabhängig davon, was
der master denn gerade genau von einem will (und der darf so ziemlich
alles wollen, egal wie unsinnig es ist — man muss dann halt mit der
passenden Antwort aufwarten).