ni_syscfg/
hardware_filter.rs1use crate::error::{api_status, Result};
4use crate::handles::close_handle;
5use crate::Session;
6use ni_syscfg_sys::*;
7use std::ptr::null_mut;
8
9pub struct HardwareFilter {
11 handle: NISysCfgFilterHandle,
12 mode: FilterMode,
13}
14
15impl HardwareFilter {
16 pub fn new(session: &Session) -> Result<Self> {
17 let mut handle = null_mut();
18 unsafe {
19 api_status(NISysCfgCreateFilter(*session.handle(), &mut handle))?;
20 }
21 Ok(Self {
22 handle,
23 mode: FilterMode::MatchValuesAll,
24 })
25 }
26
27 pub fn set_mode(&mut self, mode: FilterMode) -> &mut Self {
29 self.mode = mode;
30 self
31 }
32
33 pub fn mode(&self) -> FilterMode {
34 self.mode
35 }
36
37 pub(crate) fn handle(&self) -> NISysCfgFilterHandle {
38 self.handle
39 }
40}
41
42impl Drop for HardwareFilter {
43 fn drop(&mut self) {
44 let _ = close_handle(self.handle);
45 println!("Drop Filter");
46 }
47}
48
49#[repr(i32)]
50#[derive(Clone, Copy, Debug, PartialEq, Eq)]
51pub enum FilterMode {
53 MatchValuesAll = NISysCfgFilterMode_NISysCfgFilterModeMatchValuesAll,
55 MatchValuesAny = NISysCfgFilterMode_NISysCfgFilterModeMatchValuesAny,
57 MatchValuesNone = NISysCfgFilterMode_NISysCfgFilterModeMatchValuesNone,
59 AllPropertiesExist = NISysCfgFilterMode_NISysCfgFilterModeAllPropertiesExist,
61}