
But according to the usage matrix the _check_rx_dtcs is wrong as the check shoud be:
if "DTCS->DTCS" in cross_mode and not rf.has_rx_dtcs:
being "DTCS->DTCS" the only case where has_rx_dtcs is mandatory.
Ah, perhaps here is where the confusion is I think that any mode with ->DTCS should use rx_dtcs, not just DTCS->DTCS. Otherwise, it's hard for the user to understand why he uses "DTCS Code" for TX and "RX DTCS Code" for RX in the DTCS->DTCS case and "DTCS Code" for TX or RX in all the other cases. Similarly, I think it requires too much logic to be embedded in every driver to remember this.
Instead, it's much easier (I think) to say "if cross_mode.endswith("->DTCS"), then use rx_dtcs as the code".
I guess I didn't pay attention to the rx_dtcs changes to the wiki when you made them, but the "if it has rx_dtcs do X otherwise do Y" logic is too confusing.
What do you think?