|
@@ -1,6 +1,11 @@
|
|
|
use std::thread;
|
|
use std::thread;
|
|
|
use hidapi::HidApi;
|
|
use hidapi::HidApi;
|
|
|
use tauri::{Emitter,Window};
|
|
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 LOGITECH_VID: u16 = 0x046D; // 罗技厂商ID
|
|
|
const G923_PIDS: &[u16] = &[
|
|
const G923_PIDS: &[u16] = &[
|
|
|
0xC262, // G923 PlayStation
|
|
0xC262, // G923 PlayStation
|
|
@@ -12,10 +17,9 @@ const G923_PIDS: &[u16] = &[
|
|
|
#[tauri::command]
|
|
#[tauri::command]
|
|
|
fn start_reading_data(window: Window) -> Result<(), String> {
|
|
fn start_reading_data(window: Window) -> Result<(), String> {
|
|
|
// 初始化HID API
|
|
// 初始化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}",
|
|
println!("找到G923设备: VID:{:04X} PID:{:04X}",
|
|
|
device_info.vendor_id(),
|
|
device_info.vendor_id(),
|
|
|
device_info.product_id());
|
|
device_info.product_id());
|
|
@@ -26,17 +30,17 @@ fn start_reading_data(window: Window) -> Result<(), String> {
|
|
|
let mut buf = [0u8; 64];
|
|
let mut buf = [0u8; 64];
|
|
|
loop {
|
|
loop {
|
|
|
// 使用带超时的读取(100ms)
|
|
// 使用带超时的读取(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) => {
|
|
Err(e) => {
|
|
|
eprintln!("读取数据失败: {}", e);
|
|
eprintln!("读取数据失败: {}", e);
|
|
|
break;
|
|
break;
|
|
|
}
|
|
}
|
|
|
};
|
|
};
|
|
|
-
|
|
|
|
|
- // 处理&发送数据
|
|
|
|
|
- let data = &buf[..res];
|
|
|
|
|
- let _ = window.emit("g923-data", format!("{:?}", data));
|
|
|
|
|
}
|
|
}
|
|
|
});
|
|
});
|
|
|
|
|
|