just saw that! thanks, i’ll try it out and report back
edit: no luck with removing a crow from the bus and using crow.sel 2. it seems like crow.sel 2 just makes all subsequent crow calls get sent to crow #2, or in my case to nowhere. issuing crow.sel 1 gets things working again, but with both crows responding to every command still.
Looking at the firmware source code, it seems like you are supposed to set the address of an individual crow with ii.set_address(2) for address 2 and so on. I tried putting that in the init() function of a user script saved to flash, and then cycled the power for the crow. When the crow turned back on, print(ii.get_address()) reported that the crow was crow 2, but it still responded to commands for crow 1.
Looking in main.c, it looks like when crow is turned on, the low-level I2C system gets initialized (and the address gets claimed) before any user script is loaded, so the address at the lowest level is always the default: 1.
I’m guiessing that ii.set_address needs to be changed so that it will re-initialize the I2C system when it is called. At that point, though, we’re well past the limits of my knowledge of I2C so I have no idea how that could be done safely.
I’ve tried running /w and Just Friends at the same time on M4l and either the connection drops out or Ableton crashes after 30 seconds of running both simultaneously. This happens when operating command center + w_synth and command center + jf_synth. Does anyone have workarounds or tips how to prevent this?
I kinda liked giving the script direct control over its address. (My crows move around, so their addresses need to change depending on the patch.)
Unfortunately, that pull request is in a kind of liminal state right now. I’ve demonstrated that the bug is just a matter of the existing address code not being exposed, but it’s not clear how to expose it properly. My PR doesn’t fit @Galapagoose’s requirements for structuring the firmware, and I can’t figure out how to make a more conformant change without a rewrite of low level code that I really don’t understand.
If anyone who has more experience with crow (or the underlying hardware stack) wants to take a look, this feature could use some love.