From 5ba492b395f7af51898dccce801fa68a6efda7d9 Mon Sep 17 00:00:00 2001 From: Paul Lecuq Date: Sat, 22 Feb 2025 22:20:10 +0100 Subject: [PATCH] code cleanup --- src/temp.rs | 133 ++++++++++++++++++++++++++++++++-------------------- 1 file changed, 81 insertions(+), 52 deletions(-) diff --git a/src/temp.rs b/src/temp.rs index 244500a..81cfa63 100644 --- a/src/temp.rs +++ b/src/temp.rs @@ -1,5 +1,4 @@ use std::ffi::CStr; -use std::mem::MaybeUninit; use std::ptr::{null_mut, slice_from_raw_parts}; use libusb_sys::*; @@ -56,38 +55,6 @@ pub struct TemperType { pub has_humid: bool, } -impl Default for TemperType { - fn default() -> Self { - Self { - vendor_id: 0, - product_id: 0, - product_name: "", - check_product_name: true, - has_sensor: false, - has_humid: false, - } - } -} - -impl Copy for TemperType {} - -#[derive(Clone)] -pub struct TemperDevice { - handle: *mut *mut libusb_device_handle, - t: TemperType, -} - -impl Copy for TemperDevice {} - -impl Default for TemperDevice { - fn default() -> Self { - Self { - handle: null_mut(), - t: TemperType::default(), - } - } -} - impl TemperType { pub fn decode(&self, answer: &[u8; 100], tempd: &mut [f32; 2], calibration: &[f32; 2]) { match self.product_name { @@ -115,6 +82,54 @@ impl TemperType { } } +impl Default for TemperType { + fn default() -> Self { + Self { + vendor_id: 0, + product_id: 0, + product_name: "", + check_product_name: true, + has_sensor: false, + has_humid: false, + } + } +} + +impl Copy for TemperType {} + +impl std::fmt::Display for TemperType { + fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { + write!( + f, + "vendor_id: {}, product_id: {}, product_name: {}", + self.vendor_id, self.product_id, self.product_name + ) + } +} + +#[derive(Clone)] +pub struct TemperDevice { + handle: *mut *mut libusb_device_handle, + t: TemperType, +} + +impl Copy for TemperDevice {} + +impl Default for TemperDevice { + fn default() -> Self { + Self { + handle: null_mut(), + t: TemperType::default(), + } + } +} + +impl std::fmt::Display for TemperDevice { + fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { + write!(f, "{}", self.t) + } +} + pub fn usb_detach(lvr_winusb: *mut libusb_device_handle, i_interface: i32) { let ret; @@ -152,7 +167,8 @@ pub fn find_lvr_winusb(ctx: *mut *mut libusb_context, devices: &mut Vec, + ctx: &mut *mut libusb_context, devices: &mut Vec, ) -> isize { let numdev; - let ctx = ctx.as_mut_ptr(); unsafe { { @@ -391,10 +410,7 @@ pub fn interrupt_read(dev: &mut TemperDevice, data: &mut [u8; 100]) { } } -pub fn cleanup_usb_devices( - ctx: &mut MaybeUninit<*mut libusb_context>, - devices: &mut Vec, -) { +pub fn cleanup_usb_devices(ctx: &mut *mut libusb_context, devices: &mut Vec) { for device in devices { unsafe { libusb_release_interface(*device.handle, INTERFACE1); @@ -405,30 +421,43 @@ pub fn cleanup_usb_devices( } unsafe { - libusb_exit(*ctx.as_mut_ptr()); + libusb_exit(*ctx); } } -pub fn get_temp_r() -> f32 { - let mut ctx = MaybeUninit::<*mut libusb_context>::uninit(); +pub fn get_temp_r() -> String { + let mut ctx: libusb_context; + + unsafe { + ctx = std::mem::zeroed(); + } + let mut ctx = &mut ctx as *mut _ as *mut libusb_context; + let mut answer: &mut [u8; 100] = &mut [0; 100]; let mut tempd: &mut [f32; 2] = &mut [0.; 2]; let calibration: &[f32; 2] = &[1., 0.]; + let mut results: Vec = vec![]; + let output: String; + let mut devices: Vec = vec![]; setup_libusb_access(&mut ctx, &mut devices); - unsafe { - if DEBUG { - println!("{:?}", devices[0].t); + for device in devices.iter_mut() { + unsafe { + if DEBUG { + println!("{:?}", device.t); + } } - } - control_transfer(&mut devices[0], &UTEMPERATURE); - interrupt_read(&mut devices[0], &mut answer); + control_transfer(device, &UTEMPERATURE); + interrupt_read(device, &mut answer); - devices[0].t.decode(&answer, &mut tempd, calibration); + device.t.decode(&answer, &mut tempd, calibration); + results.push(format!("{}", tempd[0])); + } cleanup_usb_devices(&mut ctx, &mut devices); + output = results.join(","); - return tempd[0]; + return output; }