LMiC's TX_COMPLETE event takes 20-30 seconds to fire

It’s not duty cycle related.

LMiC purposely delays the TX_COMPLETE event to prevent the next transmission to collide with a downlink that the node did not receive, but the gateway is still busy sending (and therefor not in receive mode).

It uses a worst-case for that, at SF12 in the RX2 window, that is defined by DNW2_SAFETY_ZONE (in lmic.c) with a default of 3 seconds.

Maybe this is bit conservative, also because TTN is use SF9 in RX2.

We could implement this another way, by not using the TX_COMPLETE event to prevent too early tx, such that the node can go in sleep as soon as possible after the RX2 preamble window.