why don't we call i2c_transaction_done(), but handroll the callback and restart logic?