diff --git a/bindings/rust/icsneors/build.rs b/bindings/rust/icsneors/build.rs index 6bd9a0b..8720ea9 100644 --- a/bindings/rust/icsneors/build.rs +++ b/bindings/rust/icsneors/build.rs @@ -159,17 +159,12 @@ fn generate_bindings() { .blocklist_file("stdint.h") .blocklist_file("stdbool.h") .use_core() - // .allowlist_function("icsneo_.*") - // .allowlist_type("neodevice_t") - // .allowlist_type("neonetid_t") - // .allowlist_type("neomessage_.*") - // .allowlist_type("neoversion_t") - // .allowlist_type("neoevent_t") .formatter(bindgen::Formatter::Rustfmt) .derive_default(true) .derive_debug(true) .derive_partialeq(true) .derive_copy(true) + .default_alias_style(bindgen::AliasVariation::NewType) .parse_callbacks(Box::new(bindgen::CargoCallbacks::new())) //.clang_args(clang_args()) .generate() diff --git a/bindings/rust/icsneors/src/lib.rs b/bindings/rust/icsneors/src/lib.rs index 275f647..c5285c0 100644 --- a/bindings/rust/icsneors/src/lib.rs +++ b/bindings/rust/icsneors/src/lib.rs @@ -4,17 +4,40 @@ #![allow(non_snake_case)] include!(concat!(env!("OUT_DIR"), "/bindings.rs")); -pub fn add(left: u64, right: u64) -> u64 { - left + right +pub unsafe fn find_devices() { + let mut devices: [*mut icsneo_device_t; 255] = [std::ptr::null_mut(); 255]; + let mut device_count: u32 = 255; + let res = icsneo_device_find_all(devices.as_mut_ptr(), &mut device_count as *mut u32, std::ptr::null_mut()); + + if res.0 != _icsneo_error_t::icsneo_error_success as u32 { + return; + } + println!("Found {} devices", device_count); + for i in 0..device_count as usize { + let device = devices[i]; + let res = icsneo_device_is_valid(device); + if res.0 != _icsneo_error_t::icsneo_error_success as u32 { + return; + } + + let mut description_length: u32 = 255; + let mut description: [::core::ffi::c_char; 255] = [0i8; 255]; + let res = icsneo_device_get_description(device, description.as_mut_ptr(), &mut description_length); + if res.0 != _icsneo_error_t::icsneo_error_success as u32 { + return; + } + let description_str = std::ffi::CStr::from_ptr(description.as_ptr()).to_str().unwrap().to_string(); + println!("\t{}: {}", i, description_str); + } } + #[cfg(test)] mod tests { use super::*; #[test] fn it_works() { - let result = add(2, 2); - assert_eq!(result, 4); + unsafe { find_devices(); } } }