From fa4ee0d3f12efc33438ddfd49444a9650eec9a6b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Am=C3=A9d=C3=A9e=20d=27Aboville?= Date: Wed, 29 Jan 2020 09:43:24 -0500 Subject: [PATCH] Cleaned up calibration wrapper a little to make the open and get_serial() methods. --- examples/calibration.rs | 87 ++++++++++++++++++++--------------------- 1 file changed, 42 insertions(+), 45 deletions(-) diff --git a/examples/calibration.rs b/examples/calibration.rs index 43fb3c2..13e07d7 100644 --- a/examples/calibration.rs +++ b/examples/calibration.rs @@ -5,12 +5,12 @@ use std::ffi::{CString}; use k4a_sys::*; struct Device { - idx : usize, + idx : u32, k4a_device: k4a_device_t, } //The beginnings of a wrapper struct impl Device { - pub fn get_idx(&self) -> usize { + pub fn get_idx(&self) -> u32 { self.idx } @@ -18,59 +18,56 @@ impl Device { self.k4a_device } - // pub fn get_k4a_device_mut_ptr(&self) -> *mut k4a_device_t { - // (&self.k4a_device).as_raw() - // } - pub fn new(k4a_device: k4a_device_t, idx: usize) -> Self { + fn new(k4a_device: k4a_device_t, idx: u32) -> Self { Self { idx, k4a_device, } } -} -fn open_device() -> Option { - unsafe { - let device_count = k4a_sys::k4a_device_get_installed_count(); - let mut device: k4a_device_t = ptr::null_mut(); - if device_count == 0 { - println!("No K4A devices found"); - return None; - } - if k4a_device_open(0, &mut device) != k4a_buffer_result_t_K4A_BUFFER_RESULT_SUCCEEDED { - println!("Failed to open device"); - return None; + pub fn open(device_idx: u32) -> Option { + unsafe { + let device_count = k4a_sys::k4a_device_get_installed_count(); + let mut device: k4a_device_t = ptr::null_mut(); + if device_count == 0 { + println!("No K4A devices found"); + return None; + } + + if k4a_device_open(device_idx, &mut device) != k4a_buffer_result_t_K4A_BUFFER_RESULT_SUCCEEDED { + println!("Failed to open device"); + return None; + } + Some(Self::new(device, device_idx)) + } + } + + pub fn get_serial(&self) -> Option { + unsafe { + let mut serial_number_length: usize = 0; + + if k4a_device_get_serialnum(self.get_k4a_device(), ptr::null_mut(), &mut serial_number_length) != + k4a_buffer_result_t_K4A_BUFFER_RESULT_TOO_SMALL { + println!("{}: Failed to get serial number length", self.get_idx()); + return None + } + + let mut serial_number = CString::new(vec![1u8; serial_number_length]).expect("Building a cstring failed"); + let serial_number_ptr = serial_number.into_raw(); + + if k4a_device_get_serialnum(self.get_k4a_device(), serial_number_ptr, &mut serial_number_length) != + k4a_buffer_result_t_K4A_BUFFER_RESULT_SUCCEEDED { + println!("{}: Failed to get serial number", self.get_idx()); + return None; + } + serial_number = CString::from_raw(serial_number_ptr); + serial_number.into_string().ok() } - Some(Device::new(device, 0)) } } - -fn get_serial(device: &Device) -> Option { - unsafe { - let mut serial_number_length: usize = 0; - - if k4a_device_get_serialnum(device.get_k4a_device(), ptr::null_mut(), &mut serial_number_length) != - k4a_buffer_result_t_K4A_BUFFER_RESULT_TOO_SMALL { - println!("{}: Failed to get serial number length", device.get_idx()); - return None - } - - let mut serial_number = CString::new(vec![1u8; serial_number_length]).expect("Building a cstring failed"); - let serial_number_ptr = serial_number.into_raw(); - - if k4a_device_get_serialnum(device.get_k4a_device(), serial_number_ptr, &mut serial_number_length) != - k4a_buffer_result_t_K4A_BUFFER_RESULT_SUCCEEDED { - println!("{}: Failed to get serial number", device.get_idx()); - return None; - } - serial_number = CString::from_raw(serial_number_ptr); - serial_number.into_string().ok() - } -} - fn main () { - let device = open_device().expect("Couldn't open device"); - let serial_number = get_serial(&device).expect("Couldn't get serial number"); + let device = Device::open(0).expect("Couldn't open device"); + let serial_number = device.get_serial().expect("Couldn't get serial number"); println!("Found device with serial number {}", serial_number) } \ No newline at end of file