Ansible: Where does the i2c process function get called from?

Hello!
I’m trying to get i2c getters working for W/ presently and having a hard time working through the correct sequence of commands. When TT sends a ‘get’ request to a module, that follower module must ACK the address, receive a byte (what data is being requested), transmit the data back to TT.

At present, I can successfully transmit data from W/ back to TT, but the byte that says what data to send isn’t available. I think I’m missing something conceptually about how the process is intended to work.

So now to the question: Where does the ii_process() function pointer get called?

It seems like it should be part of libavr32 but I couldn’t find any reference to it by name. I’m assuming it occurs via an interrupt, but I was surprised not to find it referred to anywhere by name. The point is that I want to see how the follower-side low-level driver responds when it receives a request for transmission. Any help directly on that would be great too, but even just pointing me to where that function is called would be a great help.

3 Likes

do you mean process_ii?

on ansible it gets set when a mode is switched. here is where it’s set for levels (which is a good example of a follower sending data back to the leader):

it gets called here:

it gets triggered when a transmission is complete. there is an additional software buffer in case a follower hasn’t finished processing previous commands when a new one is received.

for completeness, TT requesting levels CV:

ansible levels response:

3 Likes

Thanks so much!
Github’s search engine didn’t find the entry in libavr32 for some reason. I definitely skimmed through that file and didn’t notice it myself. Thanks for the walkthrough! I think I can manage from here :slight_smile:

2 Likes