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;
uint32_t get_direction() const
Definition: nirio_fifo.h:62
boost::shared_ptr< niriok_proxy > sptr
Definition: niriok_proxy.h:168
Definition: nirio_fifo.h:34
uint32_t get_scalar_type() const
Definition: nirio_fifo.h:63
nirio_scalar_type_t
Definition: niriok_proxy.h:81
virtual ~nirio_fifo()
Definition: nirio_fifo.h:51
nirio_status stop()
Definition: nirio_fifo.h:136
nirio_status write(const data_t *buf, const uint32_t num_elements, uint32_t timeout, uint32_t &num_remaining)
Definition: nirio_fifo.h:255
nirio_status acquire(data_t *&elements, const size_t elements_requested, const uint32_t timeout, size_t &elements_acquired, size_t &elements_remaining)
Definition: nirio_fifo.h:155
Definition: nirio_driver_iface.h:130
int32_t nirio_status
Definition: status.h:31
uint32_t width
Definition: nirio_fifo.h:37
nirio_status release(const size_t elements)
Definition: nirio_fifo.h:204
datatype_info_t(nirio_scalar_type_t t, uint32_t w)
Definition: nirio_fifo.h:35
const std::string & get_name() const
Definition: nirio_fifo.h:60
fifo_direction_t
Definition: niriok_proxy.h:108
nirio_scalar_type_t scalar_type
Definition: nirio_fifo.h:36
nirio_fifo(niriok_proxy::sptr riok_proxy, fifo_direction_t direction, const std::string &name, uint32_t fifo_instance)
Definition: nirio_fifo.h:26
Definition: nirio_fifo.h:41
nirio_status start()
Definition: nirio_fifo.h:112
uint32_t get_channel() const
Definition: nirio_fifo.h:61
nirio_status initialize(const size_t requested_depth, size_t &actual_depth, size_t &actual_size)
Definition: nirio_fifo.h:57
void finalize()
Definition: nirio_fifo.h:98
boost::shared_ptr< nirio_fifo< data_t > > sptr
Definition: nirio_fifo.h:44
nirio_status read(data_t *buf, const uint32_t num_elements, uint32_t timeout, uint32_t &num_read, uint32_t &num_remaining)
Definition: nirio_fifo.h:224