18 #ifndef INCLUDED_UHD_TRANSPORT_NIRIO_NIRIO_INTERFACE_H
19 #define INCLUDED_UHD_TRANSPORT_NIRIO_NIRIO_INTERFACE_H
22 #include <boost/smart_ptr.hpp>
23 #include <boost/noncopyable.hpp>
24 #include <boost/thread/shared_mutex.hpp>
25 #include <boost/thread/locks.hpp>
29 #define NI_VENDOR_NUM 0x1093
31 #define VERSION_BUILD_SHIFT 0
32 #define VERSION_PHASE_SHIFT 14
33 #define VERSION_MAINT_SHIFT 16
34 #define VERSION_UPGRD_SHIFT 20
35 #define VERSION_MAJOR_SHIFT 24
36 #define VERSION_BUILD_MASK 0x00003FFF
37 #define VERSION_PHASE_MASK 0x0000C000
38 #define VERSION_MAINT_MASK 0x000F0000
39 #define VERSION_UPGRD_MASK 0x00F00000
40 #define VERSION_MAJOR_MASK 0xFF000000
42 #define GET_FIFO_MEMORY_TYPE(fifo_inst) (static_cast<uint16_t>(0x0100 | static_cast<uint16_t>(fifo_inst)))
45 boost::shared_lock<boost::shared_mutex> reader_lock(_synchronization);
48 boost::upgrade_lock<boost::shared_mutex> write_upgrade_lock(_synchronization);\
49 boost::upgrade_to_unique_lock<boost::shared_mutex> write_unique_lock(write_upgrade_lock);
52 namespace uhd {
namespace niusrprio
94 switch (scalar_type_as_int)
115 uint32_t arg_channel,
116 const char* arg_name,
118 uint32_t arg_base_addr,
121 uint32_t arg_bitWidth,
122 int32_t arg_integerWordLength,
123 uint32_t arg_version) :
151 const uint32_t _outSize,
152 const int32_t _statusCode)
155 outBuf.pointer = _outBuf;
157 statusCode = _statusCode;
168 typedef boost::shared_ptr<niriok_proxy>
sptr;
170 static sptr make_and_open(
const std::string& interface_path);
176 virtual nirio_status open(
const std::string& interface_path) = 0;
177 virtual void close(
void) = 0;
184 uint32_t& session) = 0;
190 uint32_t& maintenance,
192 uint32_t& build) = 0;
196 uint32_t& attrValue) = 0;
200 const uint32_t value) = 0;
202 virtual nirio_status peek(uint32_t offset, uint32_t& value) = 0;
204 virtual nirio_status peek(uint32_t offset, uint64_t& value) = 0;
206 virtual nirio_status poke(uint32_t offset,
const uint32_t& value) = 0;
208 virtual nirio_status poke(uint32_t offset,
const uint64_t& value) = 0;
211 uint32_t fifo_instance,
229 uint32_t channel) = 0;
232 uint32_t channel) = 0;
236 uint32_t requested_depth,
237 uint8_t requires_actuals,
238 uint32_t& actual_depth,
239 uint32_t& actual_size) = 0;
243 uint32_t elements_requested,
244 uint32_t scalar_type,
249 uint32_t& elements_acquired,
250 uint32_t& elements_remaining) = 0;
254 uint32_t elements_to_grant) = 0;
258 uint32_t elements_to_read,
260 uint32_t buffer_datatype_width,
261 uint32_t scalar_type,
264 uint32_t& number_read,
265 uint32_t& number_remaining) = 0;
269 uint32_t elements_to_write,
271 uint32_t buffer_datatype_width,
272 uint32_t scalar_type,
275 uint32_t& number_remaining) = 0;
285 virtual void _close() = 0;
293 cache_status = driver_proxy->get_attribute(
RIO_ADDRESS_SPACE, cached_addr_space);
304 uint32_t cached_addr_space;