The at86rf2xx driver doesn't check the current state when sending. Therefor it is possible, that a deadlock occurs. at86rf2xx_tx_prepare tries to set the state to AT86RF2XX_STATE_TX_ARET_ON, however, if the receiver is currently in BUSY_RX state, the idle_state will be set accordingly.
The send afterwards is still successful, however, the idle_state is wrong. The _isr method of at86rf2xx_netdev.c will set the idle_state afterwards, however it will never be reached and this results in a dead lock.
I will provide a fix shortly: Add busy waiting before sending / switching states.
The at86rf2xx driver doesn't check the current state when sending. Therefor it is possible, that a deadlock occurs.
at86rf2xx_tx_preparetries to set the state toAT86RF2XX_STATE_TX_ARET_ON, however, if the receiver is currently inBUSY_RXstate, the idle_state will be set accordingly.The send afterwards is still successful, however, the idle_state is wrong. The
_isrmethod ofat86rf2xx_netdev.cwill set theidle_stateafterwards, however it will never be reached and this results in a dead lock.I will provide a fix shortly: Add busy waiting before sending / switching states.