ni_fpga_interface/session/
fifo_control.rs1use crate::error::{to_fpga_result, Result};
6use crate::nifpga_sys::*;
7use libc::size_t;
8
9use super::Session;
10
11impl Session {
12 pub fn configure_fifo(&self, fifo: FifoAddress, requested_depth: usize) -> Result<usize> {
16 let mut actual_depth: size_t = 0;
17 let result = unsafe {
18 NiFpga_ConfigureFifo2(
19 self.handle,
20 fifo,
21 requested_depth,
22 &mut actual_depth as *mut size_t,
23 )
24 };
25 to_fpga_result(actual_depth, result)
26 }
27
28 pub fn start_fifo(&self, fifo: FifoAddress) -> Result<()> {
30 let result = unsafe { NiFpga_StartFifo(self.handle, fifo) };
31 to_fpga_result((), result)
32 }
33
34 pub fn stop_fifo(&self, fifo: FifoAddress) -> Result<()> {
36 let result = unsafe { NiFpga_StopFifo(self.handle, fifo) };
37 to_fpga_result((), result)
38 }
39
40 pub fn release_fifo_elements(
47 &self,
48 fifo: FifoAddress,
49 number_of_elements: usize,
50 ) -> Result<()> {
51 let result = unsafe { NiFpga_ReleaseFifoElements(self.handle, fifo, number_of_elements) };
52 to_fpga_result((), result)
53 }
54
55 pub fn get_peer_to_peer_fifo_endpoint(&self, fifo: FifoAddress) -> Result<PeerToPeerEndpoint> {
57 let mut endpoint: PeerToPeerEndpoint = 0;
58 let result = unsafe { NiFpga_GetPeerToPeerFifoEndpoint(self.handle, fifo, &mut endpoint) };
59 to_fpga_result(endpoint, result)
60 }
61}