From 027cf1fe9b484197bc7f2aeb2f1bb588442d0bdc Mon Sep 17 00:00:00 2001 From: Martin Braun Date: Wed, 21 Aug 2019 15:14:39 -0700 Subject: rfnoc: radio/streamer: Handle late commands and burst ACKs - Burst ACKs are already handled by the TX streamer, but the radio now also sends an action upstream on reception of a burst ACK - Late commands were only acquitted by an 'L', now an action gets sent downstream and is handled in the rx streamer --- host/lib/rfnoc/radio_control_impl.cpp | 16 ++++++++++++++++ host/lib/rfnoc/rfnoc_rx_streamer.cpp | 4 ++++ 2 files changed, 20 insertions(+) (limited to 'host/lib/rfnoc') diff --git a/host/lib/rfnoc/radio_control_impl.cpp b/host/lib/rfnoc/radio_control_impl.cpp index e400033b3..2a730e8df 100644 --- a/host/lib/rfnoc/radio_control_impl.cpp +++ b/host/lib/rfnoc/radio_control_impl.cpp @@ -872,6 +872,8 @@ bool radio_control_impl::async_message_validator( return true; case err_codes::ERR_TX_LATE_DATA: return true; + case err_codes::EVENT_TX_BURST_ACK: + return true; default: return false; } @@ -939,6 +941,14 @@ void radio_control_impl::async_message_handler( RFNOC_LOG_TRACE("Posting late data event action message."); break; } + case err_codes::EVENT_TX_BURST_ACK: { + auto tx_event_action = tx_event_action_info::make( + uhd::async_metadata_t::EVENT_CODE_BURST_ACK); + post_action(res_source_info{res_source_info::INPUT_EDGE, chan}, + tx_event_action); + RFNOC_LOG_TRACE("Posting burst ack event action message."); + break; + } } break; } @@ -963,6 +973,12 @@ void radio_control_impl::async_message_handler( } case err_codes::ERR_RX_LATE_CMD: UHD_LOG_FASTPATH("L"); + auto rx_event_action = rx_event_action_info::make(); + rx_event_action->error_code = + uhd::rx_metadata_t::ERROR_CODE_LATE_COMMAND; + RFNOC_LOG_TRACE("Posting RX late command message."); + post_action(res_source_info{res_source_info::OUTPUT_EDGE, chan}, + rx_event_action); break; } break; diff --git a/host/lib/rfnoc/rfnoc_rx_streamer.cpp b/host/lib/rfnoc/rfnoc_rx_streamer.cpp index 9383e3487..d6778267f 100644 --- a/host/lib/rfnoc/rfnoc_rx_streamer.cpp +++ b/host/lib/rfnoc/rfnoc_rx_streamer.cpp @@ -244,6 +244,10 @@ void rfnoc_rx_streamer::_handle_rx_event_action( // Tell the streamer to flag an overrun to the user after the data that // was buffered prior to the overrun is read. set_stopped_due_to_overrun(); + } else if (rx_event_action->error_code + == uhd::rx_metadata_t::ERROR_CODE_LATE_COMMAND) { + RFNOC_LOG_DEBUG("Received late command message on port " << src.instance); + set_stopped_due_to_late_command(); } } -- cgit v1.2.3