bool uhd_device::recv_async_msg() { uhd::async_metadata_t metadata; if (!usrp_dev->get_device()->recv_async_msg(metadata)) return false; // Assume that any error requires resynchronization if (metadata.event_code != uhd::async_metadata_t::EVENT_CODE_BURST_ACK) { aligned = false; LOG(ERR) << str_code(metadata); } return true; }
bool uhd_device::recv_async_msg() { uhd::async_metadata_t md; if (!usrp_dev->get_device()->recv_async_msg(md)) return false; // Assume that any error requires resynchronization if (md.event_code != uhd::async_metadata_t::EVENT_CODE_BURST_ACK) { aligned = false; if ((md.event_code != uhd::async_metadata_t::EVENT_CODE_UNDERFLOW) && (md.event_code != uhd::async_metadata_t::EVENT_CODE_TIME_ERROR)) { LOG(ERR) << str_code(md); } } return true; }
int uhd_device::check_rx_md_err(uhd::rx_metadata_t &md, ssize_t num_smpls) { uhd::time_spec_t ts; if (!num_smpls) { LOG(ERR) << str_code(md); switch (md.error_code) { case uhd::rx_metadata_t::ERROR_CODE_TIMEOUT: LOG(ALERT) << "UHD: Receive timed out"; return ERROR_UNRECOVERABLE; case uhd::rx_metadata_t::ERROR_CODE_OVERFLOW: case uhd::rx_metadata_t::ERROR_CODE_LATE_COMMAND: case uhd::rx_metadata_t::ERROR_CODE_BROKEN_CHAIN: case uhd::rx_metadata_t::ERROR_CODE_BAD_PACKET: default: return ERROR_UNHANDLED; } } // Missing timestamp if (!md.has_time_spec) { LOG(ALERT) << "UHD: Received packet missing timestamp"; return ERROR_UNRECOVERABLE; } ts = md.time_spec; // Monotonicity check if (ts < prev_ts) { LOG(ALERT) << "UHD: Loss of monotonic time"; LOG(ALERT) << "Current time: " << ts.get_real_secs() << ", " << "Previous time: " << prev_ts.get_real_secs(); return ERROR_TIMING; } else { prev_ts = ts; } return 0; }
bool UHDDevice::recv_async_msg() { uhd::async_metadata_t md; thread_enable_cancel(false); bool rc = tx_stream->recv_async_msg(md, 0.1); thread_enable_cancel(true); if (!rc) return false; /* Assume that any error requires resynchronization */ if (md.event_code != uhd::async_metadata_t::EVENT_CODE_BURST_ACK) { aligned = false; if ((md.event_code != uhd::async_metadata_t::EVENT_CODE_UNDERFLOW) && (md.event_code != uhd::async_metadata_t::EVENT_CODE_TIME_ERROR)) { LOG(ERR) << str_code(md); } } return true; }