Ajay,
Events should fire even if the TX or RX fails. However, if you want to set a global timeout, you should just set it to accomodate the transmission time + the 2 RX windows that will potentially open. I think something like 5s would be OK for regular packets, but you’d probably want to do some testing and validation before picking a specific value. For example, the RX1 window after a join request in EU868 doesn’t open until 5 seconds after transmission is complete if the device is in public mode.
Cheers,
Mike