From 2ad852ee08e21ee681950f1d6058499248baf88e Mon Sep 17 00:00:00 2001
From: baoshiwei <baoshiwei@shlanbao.cn>
Date: 星期五, 18 七月 2025 15:04:22 +0800
Subject: [PATCH] 完成串口读取数据和处理

---
 src-tauri/src/lib.rs |   75 ++++++++++++++++++++++---------------
 1 files changed, 44 insertions(+), 31 deletions(-)

diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs
index 8e0934c..7d430c2 100644
--- a/src-tauri/src/lib.rs
+++ b/src-tauri/src/lib.rs
@@ -1,50 +1,57 @@
 mod tokio_utils;
-mod pipe_server;
-mod ws_client;
-use crate::ws_client::LATEST_WS_DATA;
+mod serial_port;
 
 
 
 use std::sync::Mutex;
 use tauri::async_runtime::spawn;
-use tokio::io::{AsyncReadExt, AsyncWriteExt};
+use tauri::Manager;
 use tokio_utils::{set_complete,setup,SetupState};
+use std::fs::OpenOptions;
+use std::io::Write;
+use chrono::Local;
+
 
 // Learn more about Tauri commands at https://tauri.app/develop/calling-rust/
-use crate::pipe_server::start_pipe_server;
 
-#[tauri::command]
-fn get_latest_ws_data() -> Option<String> {
-    LATEST_WS_DATA.lock().unwrap().clone()
-}
+
+
 #[tauri::command]
 fn greet(name: &str) -> String {
     format!("Hello, {}! You've been greeted from Rust!", name)
 }
 
 #[tauri::command]
-async fn start_pipe_server_command(pipe_name: String) -> Result<(), String> {
-    start_pipe_server(&pipe_name)
-        .await
-        .map_err(|e| e.to_string())
+fn log_data(app_handle: tauri::AppHandle, data: String) -> Result<(), String> {
+    let app_data_path = app_handle.path().app_data_dir()
+        .or_else(|_| Err("Could not get app data directory".to_string()))?;
+
+    let log_dir = app_data_path.join("logs");
+    if !log_dir.exists() {
+        std::fs::create_dir_all(&log_dir)
+            .map_err(|e| format!("Failed to create log directory: {}", e))?;
+    }
+
+    let current_date = Local::now().format("%Y-%m-%d").to_string();
+    let log_file_path = log_dir.join(format!("log_{}.txt", current_date));
+
+    println!("log_file_path: {:?}", log_file_path);
+    let mut file = OpenOptions::new()
+        .create(true)
+        .append(true)
+        .open(&log_file_path)
+        .map_err(|e| format!("Failed to open log file: {}", e))?;
+
+    let timestamp = Local::now().format("[%Y-%m-%d %H:%M:%S]").to_string();
+    writeln!(file, "{} {}", timestamp, data)
+        .map_err(|e| format!("Failed to write to log file: {}", e))?;
+
+    Ok(())
 }
 
-#[tauri::command]
-async fn send_pipe_message(pipe_name: String, message: String) -> Result<String, String> {
-    let pipe_path: String = format!(r"\\.\pipe\{}", pipe_name);
-    
-    let mut client = tokio::net::windows::named_pipe::ClientOptions::new()
-        .open(&pipe_path)
-        .map_err(|e| e.to_string())?;
 
-    client.write_all(message.as_bytes()).await.map_err(|e| e.to_string())?;
-    
-    let mut buf = [0u8; 1024];
-    let n = client.read(&mut buf).await.map_err(|e| e.to_string())?;
-    
-    String::from_utf8(buf[..n].to_vec())
-        .map_err(|e| e.to_string())
-}
+
+
 
 
 
@@ -70,12 +77,18 @@
             backend_task: false,
         }))
         // Add a command we can use to check
-        .invoke_handler(tauri::generate_handler![greet, set_complete, start_pipe_server_command, send_pipe_message, get_latest_ws_data])
+        .invoke_handler(tauri::generate_handler![
+            greet,
+            set_complete,
+            serial_port::open_serial_port,
+            serial_port::close_serial_port,
+            serial_port::write_serial_data,
+            serial_port::list_serial_ports,
+            log_data
+        ])
         // Use the setup hook to execute setup related tasks
         // Runs before the main loop, so no windows are yet created
         .setup(|app| {
-            // 鍚姩 WebSocket 瀹㈡埛绔紙寮傛浠诲姟锛�
-            ws_client::start_ws_client();
             // Spawn setup as a non-blocking task so the windows can be
             // created and ran while it executes
             spawn(setup(app.handle().clone()));

--
Gitblit v1.9.3