code cleanup
This commit is contained in:
parent
b46393984b
commit
5ba492b395
127
src/temp.rs
127
src/temp.rs
@ -1,5 +1,4 @@
|
|||||||
use std::ffi::CStr;
|
use std::ffi::CStr;
|
||||||
use std::mem::MaybeUninit;
|
|
||||||
use std::ptr::{null_mut, slice_from_raw_parts};
|
use std::ptr::{null_mut, slice_from_raw_parts};
|
||||||
|
|
||||||
use libusb_sys::*;
|
use libusb_sys::*;
|
||||||
@ -56,38 +55,6 @@ pub struct TemperType {
|
|||||||
pub has_humid: bool,
|
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 {
|
impl TemperType {
|
||||||
pub fn decode(&self, answer: &[u8; 100], tempd: &mut [f32; 2], calibration: &[f32; 2]) {
|
pub fn decode(&self, answer: &[u8; 100], tempd: &mut [f32; 2], calibration: &[f32; 2]) {
|
||||||
match self.product_name {
|
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) {
|
pub fn usb_detach(lvr_winusb: *mut libusb_device_handle, i_interface: i32) {
|
||||||
let ret;
|
let ret;
|
||||||
|
|
||||||
@ -152,7 +167,8 @@ pub fn find_lvr_winusb(ctx: *mut *mut libusb_context, devices: &mut Vec<TemperDe
|
|||||||
}
|
}
|
||||||
|
|
||||||
while i < cnt && numdev < MAX_DEV {
|
while i < cnt && numdev < MAX_DEV {
|
||||||
let mut desc = libusb_device_descriptor {
|
let mut desc: libusb_device_descriptor;
|
||||||
|
/*let mut desc = libusb_device_descriptor {
|
||||||
bLength: 0,
|
bLength: 0,
|
||||||
bDescriptorType: 0,
|
bDescriptorType: 0,
|
||||||
bcdUSB: 0,
|
bcdUSB: 0,
|
||||||
@ -167,7 +183,11 @@ pub fn find_lvr_winusb(ctx: *mut *mut libusb_context, devices: &mut Vec<TemperDe
|
|||||||
iProduct: 0,
|
iProduct: 0,
|
||||||
iSerialNumber: 0,
|
iSerialNumber: 0,
|
||||||
bNumConfigurations: 0,
|
bNumConfigurations: 0,
|
||||||
};
|
};*/
|
||||||
|
|
||||||
|
unsafe {
|
||||||
|
desc = std::mem::zeroed();
|
||||||
|
}
|
||||||
|
|
||||||
let s;
|
let s;
|
||||||
unsafe {
|
unsafe {
|
||||||
@ -266,11 +286,10 @@ pub fn find_lvr_winusb(ctx: *mut *mut libusb_context, devices: &mut Vec<TemperDe
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn setup_libusb_access(
|
pub fn setup_libusb_access(
|
||||||
ctx: &mut MaybeUninit<*mut libusb_context>,
|
ctx: &mut *mut libusb_context,
|
||||||
devices: &mut Vec<TemperDevice>,
|
devices: &mut Vec<TemperDevice>,
|
||||||
) -> isize {
|
) -> isize {
|
||||||
let numdev;
|
let numdev;
|
||||||
let ctx = ctx.as_mut_ptr();
|
|
||||||
|
|
||||||
unsafe {
|
unsafe {
|
||||||
{
|
{
|
||||||
@ -391,10 +410,7 @@ pub fn interrupt_read(dev: &mut TemperDevice, data: &mut [u8; 100]) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn cleanup_usb_devices(
|
pub fn cleanup_usb_devices(ctx: &mut *mut libusb_context, devices: &mut Vec<TemperDevice>) {
|
||||||
ctx: &mut MaybeUninit<*mut libusb_context>,
|
|
||||||
devices: &mut Vec<TemperDevice>,
|
|
||||||
) {
|
|
||||||
for device in devices {
|
for device in devices {
|
||||||
unsafe {
|
unsafe {
|
||||||
libusb_release_interface(*device.handle, INTERFACE1);
|
libusb_release_interface(*device.handle, INTERFACE1);
|
||||||
@ -405,30 +421,43 @@ pub fn cleanup_usb_devices(
|
|||||||
}
|
}
|
||||||
|
|
||||||
unsafe {
|
unsafe {
|
||||||
libusb_exit(*ctx.as_mut_ptr());
|
libusb_exit(*ctx);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_temp_r() -> f32 {
|
pub fn get_temp_r() -> String {
|
||||||
let mut ctx = MaybeUninit::<*mut libusb_context>::uninit();
|
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 answer: &mut [u8; 100] = &mut [0; 100];
|
||||||
let mut tempd: &mut [f32; 2] = &mut [0.; 2];
|
let mut tempd: &mut [f32; 2] = &mut [0.; 2];
|
||||||
let calibration: &[f32; 2] = &[1., 0.];
|
let calibration: &[f32; 2] = &[1., 0.];
|
||||||
|
|
||||||
|
let mut results: Vec<String> = vec![];
|
||||||
|
let output: String;
|
||||||
|
|
||||||
let mut devices: Vec<TemperDevice> = vec![];
|
let mut devices: Vec<TemperDevice> = vec![];
|
||||||
setup_libusb_access(&mut ctx, &mut devices);
|
setup_libusb_access(&mut ctx, &mut devices);
|
||||||
|
|
||||||
|
for device in devices.iter_mut() {
|
||||||
unsafe {
|
unsafe {
|
||||||
if DEBUG {
|
if DEBUG {
|
||||||
println!("{:?}", devices[0].t);
|
println!("{:?}", device.t);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
control_transfer(&mut devices[0], &UTEMPERATURE);
|
control_transfer(device, &UTEMPERATURE);
|
||||||
interrupt_read(&mut devices[0], &mut answer);
|
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);
|
cleanup_usb_devices(&mut ctx, &mut devices);
|
||||||
|
output = results.join(",");
|
||||||
|
|
||||||
return tempd[0];
|
return output;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user