Aha - now I get it. Ok, this is where the simple scheme in RF12 may start to bite...
You can send a packet to node X, but then X won't know where it's from.
Or you can broadcast to anyone, then all receivers will know who sent it.
The difference is indicated by the RF12_HDR_DST bit in the header.
That's because there is only *either* a destination *or* a source address in the packet header. The reason is that it's enough for basic communication, so I decided to try this minimal approach, and put any further info the app needs in the payload, without the RF12 driver needing to know where and how.
So if you want to filter, you need to include the source id in the payload, and then have the receivers ignore the ones they don't want.
But there's one problem with the above reasoning. The RF12 driver *does* have the logic to filter, so that node Y won't see packets sent to node X. It's in RF12.h, in recvDone(), the lines:
if (!(rf12_hdr & RF12_HDR_DST) || (rf12_hdr & RF12_HDR_MASK) == (nodeid & NODE_ID)) {
So I'm puzzled why it isn't working as expected... I'll look into this.