diff --git a/ni-fpga-sys/Cargo.toml b/ni-fpga-sys/Cargo.toml index 6cc7aa7..e5d28bc 100644 --- a/ni-fpga-sys/Cargo.toml +++ b/ni-fpga-sys/Cargo.toml @@ -8,5 +8,6 @@ description = "Rust bindings to the NI FPGA C API." repository = "https://github.com/first-rust-competition/ni-fpga-rs" [dependencies] +bitflags = "2.4.0" dlopen = "0.1.8" dlopen_derive = "0.1.4" diff --git a/ni-fpga-sys/src/lib.rs b/ni-fpga-sys/src/lib.rs index e180f59..1d10d5b 100644 --- a/ni-fpga-sys/src/lib.rs +++ b/ni-fpga-sys/src/lib.rs @@ -60,6 +60,152 @@ use dlopen_derive::{WrapperApi, WrapperMultiApi}; pub type NiFpgaApiContainer = Container; +bitflags::bitflags! { + #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] + pub struct OpenAttributes: u32 { + const NoRun = 1; + const BitfilePathIsUTF8 = 2; + const BitfileContentsNotPath = 1u32 << 30; + const IgnoreSignatureArgument = 1u32 << 31; + } +} + +bitflags::bitflags! { + #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] + pub struct CloseAttributes: u32 { + const NoResetIfLastSession = 1; + } +} + +bitflags::bitflags! { + #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] + pub struct RunAttribute: u32 { + const WaitUntilDone = 1; + } +} + +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] +pub enum FpgaViState { + NotRunning, + Invalid, + Running, + NaturallyStopped, + Unknown, +} + +impl From for FpgaViState { + fn from(value: u32) -> Self { + match value { + 0 => FpgaViState::NotRunning, + 1 => FpgaViState::Invalid, + 2 => FpgaViState::Running, + 3 => FpgaViState::NaturallyStopped, + _ => FpgaViState::Unknown, + } + } +} + +bitflags::bitflags! { + #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] + pub struct Irq: u32 { + const Irq0 = 1u32 << 0; + const Irq1 = 1u32 << 1; + const Irq2 = 1u32 << 2; + const Irq3 = 1u32 << 3; + const Irq4 = 1u32 << 4; + const Irq5 = 1u32 << 5; + const Irq6 = 1u32 << 6; + const Irq7 = 1u32 << 7; + const Irq8 = 1u32 << 8; + const Irq9 = 1u32 << 9; + const Irq10 = 1u32 << 10; + const Irq11 = 1u32 << 11; + const Irq12 = 1u32 << 12; + const Irq13 = 1u32 << 13; + const Irq14 = 1u32 << 14; + const Irq15 = 1u32 << 15; + const Irq16 = 1u32 << 16; + const Irq17 = 1u32 << 17; + const Irq18 = 1u32 << 18; + const Irq19 = 1u32 << 19; + const Irq20 = 1u32 << 20; + const Irq21 = 1u32 << 21; + const Irq22 = 1u32 << 22; + const Irq23 = 1u32 << 23; + const Irq24 = 1u32 << 24; + const Irq25 = 1u32 << 25; + const Irq26 = 1u32 << 26; + const Irq27 = 1u32 << 27; + const Irq28 = 1u32 << 28; + const Irq29 = 1u32 << 29; + const Irq30 = 1u32 << 30; + const Irq31 = 1u32 << 31; + } +} + +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] +pub enum FifoProperty { + BytesPerElement, + HostBufferAllocationGranularity, + HostBufferSize, + HostBufferMirrorSize, + HostBufferType, + HostBuffer, + FlowControl, + ElementsCurrentlyAcquired, + Unknown, +} + +impl From for FifoProperty { + fn from(value: u32) -> Self { + match value { + 1 => FifoProperty::BytesPerElement, + 2 => FifoProperty::HostBufferAllocationGranularity, + 3 => FifoProperty::HostBufferSize, + 4 => FifoProperty::HostBufferMirrorSize, + 5 => FifoProperty::HostBufferType, + 6 => FifoProperty::HostBuffer, + 7 => FifoProperty::FlowControl, + 8 => FifoProperty::ElementsCurrentlyAcquired, + _ => FifoProperty::Unknown, + } + } +} + +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] +pub enum HostBufferType { + AllocatedByRIO, + AllocatedByUser, + Unknown, +} + +impl From for HostBufferType { + fn from(value: u32) -> Self { + match value { + 1 => HostBufferType::AllocatedByRIO, + 2 => HostBufferType::AllocatedByUser, + _ => HostBufferType::Unknown, + } + } +} + +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] +pub enum FifoFlowControl { + Disabled, + Enabled, + Unknown, +} + +impl From for FifoFlowControl { + fn from(value: u32) -> Self { + match value { + 1 => FifoFlowControl::Disabled, + 2 => FifoFlowControl::Enabled, + _ => FifoFlowControl::Unknown, + } + } +} + #[derive(WrapperApi)] pub struct NiFpgaHmbApi { NiFpgaDll_OpenHmb: extern "C" fn(