Browse Source

增加全局hidApi变量

caner 1 year ago
parent
commit
ce6c5c3bf7
1 changed files with 13 additions and 9 deletions
  1. 13 9
      src-tauri/src/lib.rs

+ 13 - 9
src-tauri/src/lib.rs

@@ -1,6 +1,11 @@
 use std::thread;
 use hidapi::HidApi;
 use tauri::{Emitter,Window};
+// 全局宏变量
+lazy_static::lazy_static! {
+    static ref HIDAPI: HidApi = HidApi::new().expect("Failed to initialize HidApi");
+}
+// 变量
 const LOGITECH_VID: u16 = 0x046D;  // 罗技厂商ID
 const G923_PIDS: &[u16] = &[
     0xC262,  // G923 PlayStation
@@ -12,10 +17,9 @@ const G923_PIDS: &[u16] = &[
 #[tauri::command]
 fn start_reading_data(window: Window) -> Result<(), String> {
     // 初始化HID API
-    let api = HidApi::new().map_err(|_| "HID设备初始化失败".to_string())?;
+    let api = &HIDAPI;
     // 自动检测设备
-    let device_info = api.device_list().find(|d| d.vendor_id() == LOGITECH_VID && G923_PIDS.contains(&d.product_id())).ok_or("未找到G923方向盘")?;
-    // 打印检测到的设备信息
+    let device_info = api.device_list().find(|d| d.vendor_id() == LOGITECH_VID && G923_PIDS.contains(&d.product_id())).ok_or("未找检测到罗技方向盘")?;
     println!("找到G923设备: VID:{:04X} PID:{:04X}", 
         device_info.vendor_id(), 
         device_info.product_id());
@@ -26,17 +30,17 @@ fn start_reading_data(window: Window) -> Result<(), String> {
         let mut buf = [0u8; 64];
         loop {
             // 使用带超时的读取(100ms)
-            let res = match device.read_timeout(&mut buf, 100) {
-                Ok(n) => n,
+            match device.read_timeout(&mut buf, 100) {
+                Ok(n) => {
+                    // 处理&发送数据
+                    let data = &buf[..n];
+                    let _ = window.emit("g923-data", format!("{:?}", data));
+                },
                 Err(e) => {
                     eprintln!("读取数据失败: {}", e);
                     break;
                 }
             };
-
-            // 处理&发送数据
-            let data = &buf[..res];
-            let _ = window.emit("g923-data", format!("{:?}", data));
         }
     });