19 #ifndef INCLUDED_UHD_TRANSPORT_NIRIO_NIRIO_FIFO_H
20 #define INCLUDED_UHD_TRANSPORT_NIRIO_NIRIO_FIFO_H
26 #include <boost/noncopyable.hpp>
27 #include <boost/smart_ptr.hpp>
29 #include <boost/thread/recursive_mutex.hpp>
30 #include <boost/thread/thread.hpp>
32 namespace uhd {
namespace niusrprio {
40 template <
typename data_t>
44 typedef boost::shared_ptr< nirio_fifo<data_t> >
sptr;
49 const std::string& name,
50 uint32_t fifo_instance);
54 const size_t requested_depth,
60 inline const std::string&
get_name()
const {
return _name; }
71 const size_t elements_requested,
72 const uint32_t timeout,
73 size_t& elements_acquired,
74 size_t& elements_remaining);
80 const uint32_t num_elements,
83 uint32_t& num_remaining);
87 const uint32_t num_elements,
89 uint32_t& num_remaining);
93 nirio_status _get_transfer_count(uint64_t& transfer_count);
94 nirio_status _ensure_transfer_completed(uint32_t timeout_ms);
98 UNMAPPED, MAPPED, STARTED
103 uint32_t _fifo_channel;
106 size_t _acquired_pending;
108 boost::recursive_mutex _mutex;
111 uint64_t _expected_xfer_count;
112 uint32_t _dma_base_addr;
114 static const uint32_t FIFO_LOCK_TIMEOUT_IN_MS = 5000;