From ba0aeee005d5fdaaab59cd7c099a237f51eddc86 Mon Sep 17 00:00:00 2001 From: "Matthias P. Braendli" Date: Sat, 31 Dec 2022 14:36:18 +0100 Subject: Create project --- src/fl2k.rs | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 src/fl2k.rs (limited to 'src/fl2k.rs') diff --git a/src/fl2k.rs b/src/fl2k.rs new file mode 100644 index 0000000..7bade50 --- /dev/null +++ b/src/fl2k.rs @@ -0,0 +1,52 @@ +use std::ffi::c_int; +use fl2k_ampliphase::{fl2k_dev_t, fl2k_get_device_count, fl2k_open, fl2k_close}; + +enum FL2KError { + InvalidParam, + NoDevice, + NotFound, + Busy, + Timeout, + NoMem, + Unknown(c_int) +} + +fn handle_return_value(val : c_int) -> Result<(), FL2KError> { + match val { + #![allow(non_snake_case)] + fl2k_error_FL2K_SUCCESS => Ok(()), + fl2k_error_FL2K_TRUE => Ok(()), + fl2k_error_FL2K_ERROR_INVALID_PARAM => Err(FL2KError::InvalidParam), + fl2k_error_FL2K_ERROR_NO_DEVICE => Err(FL2KError::NoDevice), + fl2k_error_FL2K_ERROR_NOT_FOUND => Err(FL2KError::NotFound), + fl2k_error_FL2K_ERROR_BUSY => Err(FL2KError::Busy), + fl2k_error_FL2K_ERROR_TIMEOUT => Err(FL2KError::Timeout), + fl2k_error_FL2K_ERROR_NO_MEM => Err(FL2KError::NoMem), + v => Err(FL2KError::Unknown(v)), + } +} + +pub fn get_device_count() -> u32 { + unsafe { fl2k_get_device_count() } +} + +struct FL2K { + device : *mut fl2k_dev_t, +} + +impl FL2K { + pub fn open(device_index : u32) -> Result { + unsafe { + let mut fl2k = FL2K { device: std::mem::zeroed() }; + handle_return_value(fl2k_open(&mut fl2k.device, device_index))?; + Ok(fl2k) + } + } + + pub fn close(self) -> Result<(), FL2KError> { + unsafe { + handle_return_value(fl2k_close(self.device))?; + } + Ok(()) + } +} -- cgit v1.2.3