19 #ifndef INCLUDED_UHD_TRANSPORT_NIRIO_NIUSRPRIO_SESSION_H
20 #define INCLUDED_UHD_TRANSPORT_NIRIO_NIUSRPRIO_SESSION_H
27 #include <boost/noncopyable.hpp>
28 #include <boost/smart_ptr.hpp>
29 #include <boost/thread/recursive_mutex.hpp>
32 namespace uhd {
namespace niusrprio {
37 typedef boost::shared_ptr<niusrprio_session>
sptr;
42 const std::string& rpc_port_name,
46 const std::string& resource_name,
47 const std::string& port_name);
52 bool force_download =
false);
54 void close(
bool skip_reset =
false);
58 template<
typename data_t>
60 const char* fifo_name,
63 if (!_session_open)
return NiRio_Status_ResourceNotInitialized;
64 return _resource_manager.create_tx_fifo(fifo_name, fifo);
67 template<
typename data_t>
69 uint32_t fifo_instance,
72 if ((
size_t)fifo_instance >= _lvbitx->get_output_fifo_count())
return NiRio_Status_InvalidParameter;
73 return create_tx_fifo(_lvbitx->get_output_fifo_names()[fifo_instance], fifo);
76 template<
typename data_t>
78 const char* fifo_name,
81 if (!_session_open)
return NiRio_Status_ResourceNotInitialized;
82 return _resource_manager.create_rx_fifo(fifo_name, fifo);
85 template<
typename data_t>
87 uint32_t fifo_instance,
90 if ((
size_t)fifo_instance >= _lvbitx->get_input_fifo_count())
return NiRio_Status_InvalidParameter;
91 return create_rx_fifo(_lvbitx->get_input_fifo_names()[fifo_instance], fifo);
98 nirio_status download_bitstream_to_flash(
const std::string& bitstream_path);
102 const std::string& resource_name,
103 const std::string& rpc_port_name);
107 std::string _read_bitstream_checksum();
108 nirio_status _write_bitstream_checksum(
const std::string& checksum);
111 std::string _resource_name;
113 std::string _interface_path;
118 boost::recursive_mutex _session_mutex;
120 static const uint32_t FPGA_READY_TIMEOUT_IN_MS = 1000;
121 static const uint32_t SESSION_LOCK_TIMEOUT_IN_MS = 3000;
122 static const uint32_t SESSION_LOCK_RETRY_INT_IN_MS = 500;