Implemented Multiple TwoWire Slave address support #90
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
I require my device to listen to multiple slave addresses. This can be 'hacked' by directly writing the mask to the TWAMR register. But because the TwoWire library does not store the contents of the TWDR when it enters slave-receive mode I was unable to retrieve the actual address that was written to in the onReceive() handler.
I was able to incorporate both into libraries/Wire with an example and made a pull request.
I've made two changes:
begin() allows for an (optional) mask parameter, which is defaulted to 0xFF.
I've stored the value of TWDR when the receiver goes into TWI_SRX mode. This value can then be
retreived with the Wire.getLastAddress() method.
I would prefer having this address passed as param in the onReceive callback or another option (as user:tinoest mentions on the forum) would be to write the slave address to the rxBuffer first. But both break backwards compatibility as it would break existing sketches.