Thanks Joe, some neat solutions there.
Ah that might be it. I have autorxrestart off because that allows faster packet bursts for the bootloader. Will have to try if that fixes it. Would be nice to keep the no spi option open.
That makes sense. The RSSI is probably latched after a payloadReady until a RX reset condition, which with autorxrestart on will happen when the FIFO is emptied.
My system is different to yours it seems. Everything is battery operated, and the status back from the nodes is low bandwidth data, so I use a polling method where the controller requests a response from a specific node which are all locked to the controller's packet sequence. That means the controller only transmits with low duty cycle, and it also needs to be narrow band to allow multiple channels in the small sub-band of 868MHz I have available. The nodes don't send requests to the controller. If I had to have a receiver permanently on in my controller I'd be in the same boat as you! Having said that, it's the locking that's the thorn because that does need to be permanently on during the scanning part for a lock. I also want the system to be easily installed by a user so any node can be made to talk to any controller in a simple configuration process, so I don't really want any calibration (even though it appears this has solved your problems).
So what I'm left with now is trying to come up with a reliable algorithm for setting the threshold for locking, but that ain't easy. There could be other radios on channel for up to 3.6 seconds at a time with only 1.8 seconds between each one (staying within their 1% duty cycle over an hour) which might cause me to raise the threshold too much because that's really a transient reception that will go away. And there could be several devices doing this just at that time. It may be I'd need to do some kind of RSSI scanning for quite some time to establish a reasonable threshold.
It might be that dropping the threshold until the radio permanently triggers then raising it by a fixed amount might do the trick, but If you can think of an algorithm that might work I'm all ears
Mark.